名稱:數字秒表VHDL啟動暫停清零(代碼在文末付費下載)
軟件:Quartus
語言:VHDL
代碼功能:
數字秒表
使用VHDL語言設置數字秒表。要求具有百分秒、秒和分鐘顯示,百分秒范圍00-99,秒范圍00-59,分鐘范圍00-59。
系統(tǒng)具有啟動/暫停功能系統(tǒng)具有清零功能。
本資源包含2個不同的代碼工程,每個工程都可獨立實現上述功能。具體可以下載下文中的設計文檔閱讀。
演示視頻:
FPGA代碼資源下載網:hdlcode.com
部分代碼展示
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --秒表控制模塊 ENTITY?miaobaio_ctrl?IS ???PORT?( ??????clk_50M????????????????:?IN?STD_LOGIC; ??????clk_100Hz??????????????:?IN?STD_LOGIC;--100Hz--對應10ms ??????start??????????????:?IN?STD_LOGIC;--啟動 ??????stop???????????????:?IN?STD_LOGIC;--暫停 ??????reset??????????????:?IN?STD_LOGIC;--復位 ??????Millisecond??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--百分秒 ??????second???????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--秒 ??????minute???????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--分 ???); END?miaobaio_ctrl; ARCHITECTURE?trans?OF?miaobaio_ctrl?IS ??? ???SIGNAL?state???????????:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ??? ???SIGNAL?Millisecond_cnt?:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?second_cnt??????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?minute_cnt??????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; BEGIN --計時狀態(tài)機 ???PROCESS?(clk_50M) ???BEGIN ??????IF?(clk_50M'EVENT?AND?clk_50M?=?'1')?THEN ?????????IF?((NOT(reset))?=?'1')?THEN ????????????state?<=?"011";--復位狀態(tài) ?????????ELSE ????????????CASE?state?IS ???????????????WHEN?"011"?=>--復位狀態(tài) ??????????????????state?<=?"000"; ???????????????WHEN?"000"?=>--空閑狀態(tài) ??????????????????IF?((NOT(start))?=?'1')?THEN ?????????????????????state?<=?"001"; ??????????????????ELSE ?????????????????????state?<=?"000"; ??????????????????END?IF; ???????????????WHEN?"001"?=>--計時狀態(tài) ??????????????????IF?((NOT(stop))?=?'1')?THEN ?????????????????????state?<=?"010"; ??????????????????ELSE ?????????????????????state?<=?"001"; ??????????????????END?IF; ???????????????WHEN?"010"?=>--暫停狀態(tài) ??????????????????IF?((NOT(start))?=?'1')?THEN ?????????????????????state?<=?"001"; ??????????????????ELSE ?????????????????????state?<=?"010"; ??????????????????END?IF; ???????????????WHEN?OTHERS?=> ????????????END?CASE; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???PROCESS?(clk_50M) ???BEGIN ??????IF?(clk_50M'EVENT?AND?clk_50M?=?'1')?THEN ?????????IF?(state?=?"011")?THEN ????????????minute_cnt?<=?"00000000"; ?????????ELSIF?(state?=?"001"?AND?clk_100Hz?=?'1')?THEN--計時狀態(tài) ????????????IF?(Millisecond_cnt?=?"01100011"?AND?second_cnt?=?"00111011")?THEN--59秒99‘時向前記1分 ???????????????IF?(minute_cnt?<?"00111011")?THEN ??????????????????minute_cnt?<=?minute_cnt?+?"00000001";--計時到990ms,下一次就到1秒了 ???????????????ELSE ??????????????????minute_cnt?<=?"00000000"; ???????????????END?IF; ????????????ELSE ???????????????minute_cnt?<=?minute_cnt; ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???PROCESS?(clk_50M) ???BEGIN ??????IF?(clk_50M'EVENT?AND?clk_50M?=?'1')?THEN ?????????IF?(state?=?"011")?THEN--復位狀態(tài) ????????????second_cnt?<=?"00000000"; ?????????ELSIF?(state?=?"001"?AND?clk_100Hz?=?'1')?THEN--計時狀態(tài) ????????????IF?(Millisecond_cnt?=?"01100011")?THEN--990ms時向前記1秒 ???????????????IF?(second_cnt?<?"00111011")?THEN ??????????????????second_cnt?<=?second_cnt?+?"00000001";--計時到990ms,下一次就到1秒了 ???????????????ELSE ??????????????????second_cnt?<=?"00000000"; ???????????????END?IF; ????????????ELSE ???????????????second_cnt?<=?second_cnt; ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???PROCESS?(clk_50M) ???BEGIN ??????IF?(clk_50M'EVENT?AND?clk_50M?=?'1')?THEN ?????????IF?(state?=?"011")?THEN--復位狀態(tài) ????????????Millisecond_cnt?<=?"00000000"; ?????????ELSIF?(state?=?"001"?AND?clk_100Hz?=?'1')?THEN--計時狀態(tài) ????????????IF?(Millisecond_cnt?<?"01100011")?THEN--計時到990ms,下一次就到1秒了 ???????????????Millisecond_cnt?<=?Millisecond_cnt?+?"00000001"; ????????????ELSE ???????????????Millisecond_cnt?<=?"00000000";--計時到990ms,下一次就到1秒了 ????????????END?IF; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???Millisecond?<=?Millisecond_cnt; ???second?<=?second_cnt; ???minute?<=?minute_cnt; ??? END?trans;
設計文檔:
設計文檔2.doc
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 仿真圖
整體仿真圖
分頻模塊
控制模塊
顯示模塊
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=202
閱讀全文