?

基于FPGA的簡易計算器的設計與實現

2024-04-06 12:49李強房雅文黃蕾李雪王世龍陳初俠
電腦知識與技術 2024年3期

李強 房雅文 黃蕾 李雪 王世龍 陳初俠

關鍵詞:簡易計算器;FPGA;Verilog HDL;Quartus II

中圖分類號:TP29 文獻標識碼:A

文章編號:1009-3044(2024)03-0046-04

0 引言

計算器作為一種簡單而實用的計算工具,在日常生活中被廣泛使用,如今市場上的計算器種類豐富且功能多樣,但功能過多的計算器價格昂貴且大多數功能可能還用不上,所以設計一款簡單而實用的計算器具有較好的現實意義[1]。本文基于Quartus II 13.1軟件和Verilog HDL語言設計了一款簡易計算器,主控芯片采用Altera公司Cyclone Ⅳ E系列的FPGA芯片EP4CE6E22C8[2]。所設計的簡易計算器具有加減乘除四則運算功能,輸入的兩個操作數采用撥碼開關來實現,輸出結果用數碼管進行顯示。

1 簡易計算器設計要求

簡易計算器設計要求如下:

1) 能實現操作數0至15的加減乘除四則運算。

2) 具有復位功能,當復位時運算結果為0。

3) 輸入數據用四位二進制表示,通過8個撥碼開關來實現。

4) 輸入數據和計算結果采用8個共陽極八段數碼管顯示。

5) 四則運算的選擇通過4個獨立按鍵來實現。

6) 具有LED點亮功能,當選擇不同的運算時會有與之對應的LED燈被點亮。

7) 減法運算時,若被減數小于減數,運算結果能顯示負號“-”。

8) 除法運算時,運算結果要保留一位小數,當除數為零時,顯示的運算結果為“EE.E”。

2 簡易計算器設計方案

簡易計算器設計框圖如圖1所示,根據設計要求,簡易計算器電路分為六部分,分別是分頻、運算、選擇控制、數據選擇、碼制轉換和顯示。分頻是將高頻率的系統時鐘50MHz轉為用于數碼管動態掃描的較低頻率時鐘10KHz;運算包括加減乘除運算四個模塊,實現四則運算功能;選擇控制用于選擇不同的獨立按鍵實現加減乘除四種運算操作;數據選擇包括三選一和二選一數據選擇模塊,三選一數據選擇模塊實現對加法、減法、乘法運算結果的選擇,二選一數據選擇模塊實現除法運算結果和加減乘運算結果的選擇;碼制轉換是把加減乘運算結果的二進制數據轉換為8421BCD碼,便于后面數碼管的顯示;顯示包含數碼管的位選、段選和LED顯示,用于展示運算結果。

3 簡易計算器設計本設計

采用層次化的設計方法,即先設計底層電路再設計頂層電路。底層電路用Verilog HDL語言來實現,頂層電路通過調用底層電路用原理圖方式來實現[3]。

3.1 底層電路設計

底層電路有11個模塊,分別是5000分頻模塊、加法模塊、減法模塊、乘法模塊、除法模塊、加減乘除選擇控制模塊、三選一數據選擇模塊、二選一數據選擇模塊、二進制轉8421BCD碼模塊、數碼管位選模塊和數碼管段選及LED燈顯示模塊。下面對它們進行分別介紹。

3.1.1 5000分頻模塊

5000 分頻模塊是實現50MHz 系統時鐘分頻為10KHz時鐘,用于數碼管的動態掃描[4]。圖2為5000 分頻模塊仿真波形圖,從圖2(a)可以看出,對于輸入時鐘clk50MHz,每來一個上升沿就計數一次,當計到2499時,輸出時鐘clk10KHz進行翻轉。也就是說計數5000次,輸出時鐘有一半是低電平有一半是高電平,實現了1 比1 的5000 分頻時鐘信號,如圖2(b) 所示。

3.1.2 加減乘除模塊

加減乘除模塊輸入的2個操作數為四位二進制數據,加減乘運算輸出結果用八位二進制數據表示,除法運算輸出結果用12位8421BCD碼顯示。圖3為加減乘除模塊的仿真波形圖,輸入數據都設為無符號十進制數,輸出結果加法和減法設為有符號十進制數、乘法設為無符號十進制數,除法設為十六進制數。由圖3(a)(b)(c)可以看出,加法運算、減法運算、乘法運算,運算結果均正確。對于除法運算,當除數為0時,運算結果為無窮大,結果顯示為EEE;當除數不為0時,運算結果保留到小數點后一位,例如13除以4,運算結果為3.3,顯示值用033表示。

3.1.3 加減乘除選擇控制模塊

加減乘除選擇控制模塊通過選擇不同的獨立按鍵,使輸入的兩個操作數進行對應的四則運算,在無獨立按鍵按下時,默認輸出為加法運算結果。圖4為加減乘除選擇控制模塊仿真波形圖,輸入信號s0、s1、s2、s3代表四個獨立按鍵,輸出信號m為加減乘除運算控制信號,當m 為“1000”時代表加法運算,為“0100”時代表減法運算,為“0010”時代表乘法運算,為“0001”時為除法運算。因為獨立按鍵正常情況是彈起狀態,所以彈起時用高電平表示,按下用低電平表示??梢钥闯?,當s0、s1、s2、s3分別為X、1、1、1時(X 代表0或1) ,m為“1000”;當s0、s1、s2、s3分別為1、0、1、1時,m為“0100”;當s0、s1、s2、s3分別為1、1、0、1 時,m為“0010”;當s0、s1、s2、s3分別為1、1、1、0時,m 為“0001”。

3.1.4 三選一數據選擇模塊

三選一數據選擇模塊是在選擇控制信號m的驅動下,對加減乘三種運算的結果進行選擇輸出,輸入信號有加法運算結果he、減法運算結果cha、乘法運算結果chengji、選擇控制信號m;輸出信號為out,它的數值為he、cha、chengji中的一個。圖5為三選一數據選擇模塊仿真波形圖,可以看出,當m為“1000”時,out 的數值和he相同;當m為“0100”時,out的數值和cha 相同;當m為“0010”時,out的數值和chengji相同。

3.1.5 二選一數據選擇模塊

二選一數據選擇模塊是在控制信號m的作用下,從二進制轉8421BCD碼模塊輸出信號out_bcd和除法結果shang中選一個進行輸出。輸入信號有8421BCD 碼out_bcd、除法運算結果shang、選擇控制信號m;輸出信號為運算結果jieguo。當m為“0000”或“1000”或“0100”或“0010”時,jieguo為out_bcd的數值;當m為“0001”時,jieguo為shang的數值。

3.1.6 二進制轉8421BCD 碼模塊

二進制轉8421BCD 碼模塊是利用二進制數轉8421BCD碼原理[5],將四位二進制輸入信號轉為八位BCD碼,將八位二進制輸入信號轉為十二位BCD碼數。輸入信號有操作數a和b、加減乘運算結果out;輸出信號有8421BCD 碼a_bcd、b_bcd 和out_bcd。圖6 為二進制轉8421BCD碼模塊仿真波形圖,可以看出,輸入的a、b、out二進制數據經過轉換后得到的BCD碼正確。例如當b為二進制數據“1111”時,其十進制數為15,BCD碼為“00010101”,與仿真結果一致;當out 為二進制數據“00110100”時,其十進制數為52,BCD 碼為“000001010010”,與仿真結果一致。

3.1.7 數碼管位選模塊

數碼管位選模塊采用動態掃描的方式用八個數碼管來表示輸出,從左邊數起前面四個數碼管顯示操作數a和b,第五個數碼管顯示符號“=”,最后三個數碼管顯示運算結果。輸入信號有動態掃描復位信號reset,掃描時鐘clk10KHZ,操作數a和b,8421BCD碼a_bcd、b_bcd、out_bcd,選擇控制信號m;輸出信號有位選控制信號sel和輸出數據dataout。

圖7 為數碼管位選模塊仿真波形圖,此時m 為“0100”,實現的是減法運算。被減數a_bcd為十進制數5(BCD碼為00000101) ,減數b_bcd為十進制數3(BCD 碼為00000011) ,差out_bcd 為十進制數2(BCD 碼為000000000010) 。理論上數碼管從左至右顯示應為“0503=002”,即5減3等于2。因為數碼管顯示采用的是動態掃描的方式,所以每一時刻只有一個數碼管被點亮,例如當sel為“10000000”時,表示最左邊的數碼管點亮;sel為“01000000”時,表示從左邊數起第二個數碼管點亮;sel為“00100000”時,表示第三個數碼管點亮等。

dataout為數碼管顯示的數值,可以看到,當sel為“10000000”時,dataout 顯示的是第一個數碼管的值0;當sel 為“01000000”時,dataout顯示的是第二個數碼管的值5;當sel為“00100000”時,dataout顯示的是第三個數碼管的值0;當sel 為“00010000”時,dataout顯示的是第四個數碼管的值3;當sel為“00001000”時,dataout顯示的是第五個數碼管的值“=”(編碼用十進制數10 表示);當sel 為“00000100”時,dataout顯示的是第六個數碼管的值0;當sel為“00000010”時,dataout顯示的是第七個數碼管的值0;當sel 為“00000001”時,dataout顯示的是第八個數碼管的值2。這一仿真結果與理論數值一致。

3.1.8 數碼管段選及LED 燈顯示模塊

數碼管段選及LED燈顯示模塊中,輸入數據da?tain為數碼管顯示的數值,為了顯示除法運算的結果(除法運算結果帶小數點),輸入信號加入了數碼管位選信號sel和運算控制信號m,輸出信號有數碼管段選信號seg和LED燈顯示信號led。

圖8為數碼管段選及LED燈顯示模塊仿真波形圖,輸入數據datain 為3,數碼管采用的是共陽極顯示,理論上顯示“3”時段選信號seg 輸出編碼為10110000,若顯示“3.”(帶小數點)時則編碼為“00110000”。從仿真波形可以看出,當m為加法運算(1000) 、減法運算(0100) 和乘法運算(0010) 時,運算結果都不會有小數點,且seg輸出正確;當m為減法運算(0001) 時,只有倒數第二個數碼管顯示會帶小數點,seg輸出結果與理論一致。另外,進行加減乘除運算時,led都有三個燈點亮,仿真結果與設想一致。

3.2 頂層電路設計

簡易計算器頂層電路是用原理圖設計方式進行設計,通過調用已生成的各底層模塊元件符號,并將它們連接就可實現頂層電路,如圖9所示。

4 簡易計算器的硬件實現

本設計采用小梅哥AC101-EDA 開發板作為硬件驗證平臺,在設計好頂層電路的基礎上,進行管腳鎖定,編譯并將生成的文件下載到FPGA開發版上進行硬件驗證。硬件驗證現象如圖10所示,(a)、(b)、(c)、(d)分別為加減乘除運算及其顯示結果,可以看出,顯示的運算結果與理論數值一致,并且在進行不同的運算時相應的LED燈會被點亮,這說明所設計的電路完全實現了簡易計算器的設計要求。

5 結束語

本文通過Quartus II 13.1軟件和小梅哥AC101-EDA開發板設計了一款簡易計算器。首先,通過對功能需求的分析,將設計分為六部分,包含11個底層電路模塊;然后在Quartus II 13.1軟件上通過Verilog HDL語言和原理圖相結合的方式設計了底層電路和頂層電路;最后把頂層電路下載到FPGA開發板中進行了硬件測試,結果表明,所設計的簡易計算器能實現設計要求的所有功能,具有一定的實用價值。

【通聯編輯:朱寶貴】

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合