[FPGA]基于FPGA的数字跑表
基于FPGA的數字跑表的設計與實現
一、設計要求
用FPGA設計并實現一個數字跑表,范圍為0~59分59.99秒。可以實現數字跑表進行啟動、停止計時和顯示讀數三個操作,可以在數碼管上顯示讀數。
二、設計任務
2.1基本部分
(1)了解FPGA開發板,了解數字跑表的功能。
(2)VHDL語言編程實現數字跑表系統的功能模塊,數字跑表進行啟動、停止、顯示讀數操作,并具有計時清零功能;
(3)程序編譯正確,在Modelsim中仿真正確;
(4)采用FPGA開發板作為開發平臺,能夠下載驗證。
2.2提高部分
能夠采用原理圖設計法設計。
三、設計原理
圖3.1系統框圖
如圖,如果要實現計時范圍為0~59分59.99秒的數字跑表并在數碼管上顯示讀數,那么需要設計時鐘電路、分頻電路、計數器電路、譯碼顯示1電路。將DE1-SOC開發套件中提供的50MHZ時鐘進行分頻至100HZ后送入100進制計數器,計數器計滿100后發出進位信號送入計秒模塊的60進制計數器,計數器滿60后發出進位信號送入計分模塊的60進制計數器,每個計數器分別連接不同的數碼管顯示電路,實時顯示計時效果。因此使用原理圖輸入設計法,使用QuartusII軟件編寫元件代碼和繪制原理圖,而后進行綜合仿真。
四、設計方案
4.1 硬件設計
本設計需要用到一個穩定的50MHZ的時鐘,一個500000分頻的分頻器,一個100進制計數器,兩個60進制計數器,兩個撥碼開關,六個7段數碼管。綜上所述,DE1-SOC開發套件提供的FPGA芯片可滿足對分頻器和計數器的設計需求,豐富的外部設備可滿足對數碼管和撥碼開關的需求。
圖4.1 DE1-SOC開發板實物圖
4.2 軟件設計
一百進制計數器采用兩個十進制計數器級聯的方式實現,六十進制計數器采用十進制和六進制計數器級聯的方式實現。
4.2.1 分頻器
4.2.2 數碼管顯示電路
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY HEX IS PORT( HEXIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HEXOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END HEX; ARCHITECTURE RTL OF HEX IS BEGIN PROCESS(HEXIN) BEGINCASE HEXIN ISWHEN "0000" => HEXOUT <="1000000";WHEN "0001" => HEXOUT <="1111001";WHEN "0010" => HEXOUT <="0100100";WHEN "0011" => HEXOUT <="0110000";WHEN "0100" => HEXOUT <="0011001";WHEN "0101" => HEXOUT <="0010010";WHEN "0110" => HEXOUT <="0000010";WHEN "0111" => HEXOUT <="1011000";WHEN "1000" => HEXOUT <="0000000";WHEN "1001" => HEXOUT <="0010000";WHEN "1010" => HEXOUT <="0001000";WHEN "1011" => HEXOUT <="0000011";WHEN "1100" => HEXOUT <="1000110";WHEN "1101" => HEXOUT <="0100001";WHEN "1110" => HEXOUT <="0000110";WHEN OTHERS => HEXOUT <="1000000";END CASE;END PROCESS; END RTL;4.2.3 十進制計數器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER10 ISPORT(CLK,CLR,EN: IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT : OUT STD_LOGIC); END COUNTER10; ARCHITECTURE RTL OF COUNTER10 IS BEGINPROCESS(CLK,CLR,EN)VARIABLE Q : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLR = '1' THEN Q := (OTHERS => '0');ELSIF CLK'EVENT AND CLK = '1' THENIF EN = '1' THEN IF Q < 9 THEN Q := Q + 1;ELSE Q := (OTHERS => '0');END IF;END IF;END IF;IF Q = "0000" THEN COUT <= '1';ELSE COUT <= '0'; END IF;DOUT <= Q; END PROCESS; END RTL;4.2.4 六進制計數器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER6 IS PORT(CLK,CLR,EN: IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);CO : OUT STD_LOGIC); END COUNTER6; ARCHITECTURE RTL OF COUNTER6 IS BEGIN PROCESS(CLK,CLR,EN) VARIABLE Q : STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN IF(CLR='1')THENQ:="0000";CO<='0'; ELSIF(CLK'EVENT AND CLK = '1') THENIF(EN='1')THENIF(Q <5)THENQ := Q + 1;ELSEQ := (OTHERS => '0');END IF;END IF; END IF; IF Q = "0000" THEN CO <= '1'; ELSECO <= '0'; END IF; DOUT <= Q; END PROCESS; END RTL;
QQ:1187060103
總結
以上是生活随笔為你收集整理的[FPGA]基于FPGA的数字跑表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达《机器学习》学习笔记十一——应用机
- 下一篇: QT中信号和槽的简单解释