名稱:數(shù)字秒表VHDL精度毫秒可回看(代碼在文末付費下載)
軟件:Quartus
語言:VHDL
代碼功能:
數(shù)字秒表的VHDL設(shè)計,可以顯示秒和毫秒。可以啟動、停止、復(fù)位。要求可以存儲6組時間,可以回看存儲的時間。
本資源內(nèi)含2個工程文件,兩個工程文件功能相同,均能實現(xiàn)上述數(shù)字秒表功能,但是代碼實現(xiàn)方式不同,詳見下述設(shè)計文檔_1和設(shè)計文檔_2.
本代碼已在實驗箱驗證,實驗箱資料:
實驗電路結(jié)構(gòu)圖及芯片引腳對應(yīng)表(1).doc
演示視頻:
FPGA代碼資源下載網(wǎng):hdlcode.com
部分代碼展示
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --秒表控制模塊 ENTITY?control?IS ???PORT?( ??????clk_in??????????:?IN?STD_LOGIC;--1KHz ??????reset_p???????????:?IN?STD_LOGIC;--復(fù)位 ??????key_1???????????:?IN?STD_LOGIC;--啟動 ??????key_2???????????:?IN?STD_LOGIC;--停止 ??current_state:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0);--當(dāng)前狀態(tài) ??????Millisecond??:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0);--毫秒 ??????Second???????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0)--秒 ???); END?control; ARCHITECTURE?RTL?OF?control?IS ???SIGNAL?state?:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"00";????--?創(chuàng)建信號??? ???constant?S0:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"00"; ???constant?S1:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"01"; ???constant?S2:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"10"; ???constant?S3:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"11"; ???SIGNAL?num1?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ???SIGNAL?num2?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ???SIGNAL?num3?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ???SIGNAL?num4?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ???SIGNAL?num5?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ???SIGNAL?num6?????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=?"0000"; ??? ???SIGNAL?haomiao_cnt:?STD_LOGIC_VECTOR(11?DOWNTO?0)?:=?"000000000000"; ???SIGNAL?miao_cnt:?STD_LOGIC_VECTOR(11?DOWNTO?0)?:=?"000000000000"; BEGIN ???--計時狀態(tài)機 ???PROCESS?(clk_in) ???BEGIN ??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????IF?(reset_p?=?'1')?THEN--按下復(fù)位 ????????????state?<=?S3;--復(fù)位狀態(tài) ?????????ELSE ????????????CASE?state?IS ???????????????WHEN?S3?=>--復(fù)位狀態(tài) ??????????????????state?<=?S0; ???????????????WHEN?S0?=>--空閑狀態(tài) ??????????????????IF?(key_1?=?'1')?THEN--按下啟動 ?????????????????????state?<=?S1; ??????????????????ELSE ?????????????????????state?<=?S0; ??????????????????END?IF; ???????????????WHEN?S1?=>--計時狀態(tài) ??????????????????IF?(key_2?=?'1')?THEN--按下停止 ?????????????????????state?<=?S2; ??????????????????ELSE ?????????????????????state?<=?S1; ??????????????????END?IF; ???????????????WHEN?S2?=>--停止?fàn)顟B(tài) ??????????????????state?<=?S2; ???????????????WHEN?OTHERS?=> ????????????END?CASE; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk_in) ???BEGIN ??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ????IF?(reset_p?=?'1')?THEN--復(fù)位 ????????????num1?<=?"0000"; num2?<=?"0000"; num3?<=?"0000"; num4?<=?"0000"; num5?<=?"0000"; num6?<=?"0000"; ?????????ELSIF?(state?=?S1)?THEN--計時狀態(tài) if(num6="0010"?and?num5="0100"?and?num4="0000"?and?num3="0000"?and?num2="0000"?and?num1="0000")then num1?<=?num1; num2?<=?num2; num3?<=?num3; num4?<=?num4; num5?<=?num5; num6?<=?num6;? ????????????elsif?num1="1001"?then? num1<="0000";?--此IF語句完成個位十進制計數(shù) if?num2="1001"?then? num2<="0000";?--此IF語句完成十位十進制計數(shù) if?num3="1001"?then? num3<="0000";?--此IF語句完成百位十進制計數(shù) if?num4="1001"?then? num4<="0000";?--此IF語句完成千位十進制計數(shù) if?num5="1001"?then? num5<="0000";?--此IF語句完成萬位十進制計數(shù) if?num6="1001"?then? num6<="0000";?--此IF語句完成十萬位十進制計數(shù) else num6<=num6+"0001"; end?if; else num5<=num5+"0001"; end?if; else? num4<=num4+"0001"; end?if; ?else? num3<=num3+"0001"; ?end?if; else? num2<=num2+"0001"; end?if; else? num1<=num1+"0001"; end?if; end?if; end?if; --end?if; ???END?PROCESS; ??? haomiao_cnt<=num3?&?num2?&?num1;--毫秒百十個位 miao_cnt<=num6?&?num5?&?num4;--秒百十個位 ???--信號輸出 ???Millisecond?<=?haomiao_cnt; ???Second?<=?miao_cnt; ???current_state<=state; ??? END?RTL;
設(shè)計文檔:
設(shè)計文檔_2.doc
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. 仿真圖
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=199
閱讀全文