[FPGA]基于FPGA的数字跑表
基于FPGA的數(shù)字跑表的設(shè)計與實(shí)現(xiàn)
一、設(shè)計要求
用FPGA設(shè)計并實(shí)現(xiàn)一個數(shù)字跑表,范圍為0~59分59.99秒??梢詫?shí)現(xiàn)數(shù)字跑表進(jìn)行啟動、停止計時和顯示讀數(shù)三個操作,可以在數(shù)碼管上顯示讀數(shù)。
二、設(shè)計任務(wù)
2.1基本部分
(1)了解FPGA開發(fā)板,了解數(shù)字跑表的功能。
(2)VHDL語言編程實(shí)現(xiàn)數(shù)字跑表系統(tǒng)的功能模塊,數(shù)字跑表進(jìn)行啟動、停止、顯示讀數(shù)操作,并具有計時清零功能;
(3)程序編譯正確,在Modelsim中仿真正確;
(4)采用FPGA開發(fā)板作為開發(fā)平臺,能夠下載驗(yàn)證。
2.2提高部分
能夠采用原理圖設(shè)計法設(shè)計。
三、設(shè)計原理
圖3.1系統(tǒng)框圖
如圖,如果要實(shí)現(xiàn)計時范圍為0~59分59.99秒的數(shù)字跑表并在數(shù)碼管上顯示讀數(shù),那么需要設(shè)計時鐘電路、分頻電路、計數(shù)器電路、譯碼顯示1電路。將DE1-SOC開發(fā)套件中提供的50MHZ時鐘進(jìn)行分頻至100HZ后送入100進(jìn)制計數(shù)器,計數(shù)器計滿100后發(fā)出進(jìn)位信號送入計秒模塊的60進(jìn)制計數(shù)器,計數(shù)器滿60后發(fā)出進(jìn)位信號送入計分模塊的60進(jìn)制計數(shù)器,每個計數(shù)器分別連接不同的數(shù)碼管顯示電路,實(shí)時顯示計時效果。因此使用原理圖輸入設(shè)計法,使用QuartusII軟件編寫元件代碼和繪制原理圖,而后進(jìn)行綜合仿真。
四、設(shè)計方案
4.1 硬件設(shè)計
本設(shè)計需要用到一個穩(wěn)定的50MHZ的時鐘,一個500000分頻的分頻器,一個100進(jìn)制計數(shù)器,兩個60進(jìn)制計數(shù)器,兩個撥碼開關(guān),六個7段數(shù)碼管。綜上所述,DE1-SOC開發(fā)套件提供的FPGA芯片可滿足對分頻器和計數(shù)器的設(shè)計需求,豐富的外部設(shè)備可滿足對數(shù)碼管和撥碼開關(guān)的需求。
圖4.1 DE1-SOC開發(fā)板實(shí)物圖
4.2 軟件設(shè)計
一百進(jìn)制計數(shù)器采用兩個十進(jìn)制計數(shù)器級聯(lián)的方式實(shí)現(xiàn),六十進(jìn)制計數(shù)器采用十進(jìn)制和六進(jìn)制計數(shù)器級聯(lián)的方式實(shí)現(xiàn)。
4.2.1 分頻器
4.2.2 數(shù)碼管顯示電路
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 十進(jìn)制計數(shù)器
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 六進(jìn)制計數(shù)器
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
總結(jié)
以上是生活随笔為你收集整理的[FPGA]基于FPGA的数字跑表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达《机器学习》学习笔记十一——应用机
- 下一篇: MFC对话框绘制灰度直方图