名稱:兩個4位BCD數(shù)字求和Verilog代碼vivado? ego1開發(fā)板
軟件:vivado
語言:Verilog
代碼功能:
兩個4位BCD數(shù)字求和
兩個4位BCD數(shù)字相加,并在Artix-7演示板上的7段LED顯示屏上顯示結(jié)果。
設(shè)計應(yīng)使用sw(3:0)作為一個輸入BCD值,其中sw(3)是最高有效位,而將sw(7:4)作為另一個BCD值,其中sw(7)是最高有效位。
設(shè)計BCD加法器,使sw(8)為進位輸入。
在演示板上的兩個四位數(shù)7段LED顯示屏的最右位數(shù)上顯示BCD總和。其他七個數(shù)字應(yīng)關(guān)閉。使用十進制點數(shù)(DP)顯示BCD加法的進位,當兩個4位BCD輸入和進位之和導致從BCD加法進位時,打開小數(shù)點。
演示板手冊記錄了如何使用可用的段來實現(xiàn)數(shù)字1-9。所有未使用的4位代碼應(yīng)導致空白顯示(所有LED段均熄滅)。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗證,ego1開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. Testbench
5. 仿真圖
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?BCD_adder?IS ???PORT?( ??????sw???????:?IN?STD_LOGIC_VECTOR(8?DOWNTO?0);--輸入SW ??????segment??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--高到低位分別表示數(shù)碼管的gfedcba ??????dp???????:?OUT?STD_LOGIC;--數(shù)碼管小數(shù)點 ??????an???????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管位選,低電平亮 ???); END?BCD_adder; ARCHITECTURE?behave?OF?BCD_adder?IS ??? ???SIGNAL?A???:?STD_LOGIC_VECTOR(4?DOWNTO?0); ???SIGNAL?B???:?STD_LOGIC_VECTOR(4?DOWNTO?0); ???SIGNAL?cin?:?STD_LOGIC_VECTOR(4?DOWNTO?0); ??? ???SIGNAL?sum?:?STD_LOGIC_VECTOR(4?DOWNTO?0); ???SIGNAL?bcd_sum?:?STD_LOGIC_VECTOR(4?DOWNTO?0); BEGIN ???an?<=?"11111110";--數(shù)碼管位選,低電平亮 ???A?<='0'?&?sw(3?DOWNTO?0);--加數(shù)A ???B?<='0'?&?sw(7?DOWNTO?4);--加數(shù)B ???cin?<="0000"?&?sw(8);--輸入進位 ??? ???sum?<=?A?+?B?+?cin;--計算和 ????PROCESS?(sum) ???????BEGIN? ??????????if(sum>="01010")then--判斷是否大于10 ???????????????dp?<=?'1';--輸出進位 ???????????????bcd_sum?<=?sum-"01010";--輸出BCD和 ??????????else ???????????????dp?<=?'0';--不輸出進位 ???????????????bcd_sum?<=?sum;--輸出BCD和?????? ??????????end?if;?????? ??????END?PROCESS; ?????? ???--segment是數(shù)碼管段選--高到低位分別表示數(shù)碼管的gfedcba ???PROCESS?(bcd_sum) ???BEGIN ??????CASE?bcd_sum(3?DOWNTO?0)?IS--和 ?????????WHEN?"0000"?=> ????????????segment?<=?"0111111";--0對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0001"?=> ????????????segment?<=?"0000110";--1對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0010"?=> ????????????segment?<=?"1011011";--2對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0011"?=> ????????????segment?<=?"1001111";--3對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0100"?=> ????????????segment?<=?"1100110";--4對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0101"?=> ????????????segment?<=?"1101101";--5對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0110"?=> ????????????segment?<=?"1111101";--6對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"0111"?=> ????????????segment?<=?"0000111";--7對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"1000"?=> ????????????segment?<=?"1111111";--8對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?"1001"?=> ????????????segment?<=?"1101111";--9對應(yīng)的數(shù)碼管gfedcba碼值 ?????????WHEN?OTHERS?=> ??????END?CASE; ???END?PROCESS; ??? ??? END?behave;
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=462