名稱:量程自動轉(zhuǎn)換數(shù)字式頻率計設(shè)計VHDL代碼Quartus仿真
軟件:Quartus
語言:VHDL
代碼功能:
設(shè)備及軟件:裝有 Quartus‖軟件完成設(shè)計數(shù)字系統(tǒng)的計算機
目的:
1.了解系統(tǒng)相關(guān)功能電路圖與印劇電路圖的設(shè)計、繪制,并完成相關(guān)流程的設(shè)計以及硬件描述語VHDL程序的編寫,設(shè)計與綜合和調(diào)試仿真工作。
2.學會 Quartus‖軟件完成設(shè)計系統(tǒng)的設(shè)計與綜合。
3.掌握該數(shù)字電路系統(tǒng)的仿真調(diào)試,分析系統(tǒng)功能實現(xiàn)的可行性等。
任務(wù):
1.設(shè)計一個3位十進制數(shù)字式頻率計,其測量范圍為1MHZ。量程分10HZ,100kHZ和1MHz三檔(最讀數(shù)分別為99kHZ,999Z,999KHZ)。被測信號由信號發(fā)生器提供。
2.要求量程可以根據(jù)被測量的大小自動轉(zhuǎn)換,規(guī)則如下:
1)當讀數(shù)大于999時,頻率計處于超量程狀態(tài)。此時顯示器發(fā)出溢出指示(最高位顯示F,其余各位不顯示數(shù)字),下一次測量時,量程自動增大一檔。
2)讀數(shù)小于000時,頻率計處于欠量程狀態(tài)。下次測量時,量程減小一檔。
3.要求實現(xiàn)溢出報警功能。即當讀數(shù)大于999KHZ時,頻率計處于超量程狀態(tài),產(chǎn)生一個報警信號,點亮led報警燈。
4.顯示方式如下:
1)用記憶顯示方式,即計數(shù)過程中不顯示數(shù)據(jù),待計數(shù)過程結(jié)束后,顯示計數(shù)結(jié)果,并將此顯示結(jié)果保持到下一次計數(shù)結(jié)束。顯示時間應(yīng)不小于1秒。
2)小數(shù)點位置隨量程變更自動移位。
提示:
1、脈沖信號的頻率就是在單位時間內(nèi)所產(chǎn)生的脈沖個數(shù),其表達式為,f為被測信號的頻率,N為計數(shù)器所累計的脈沖個數(shù),T為產(chǎn)生N個脈沖所需的時間。所以,在1秒時間內(nèi)計數(shù)器所記錄的結(jié)果,就是被測信號。
2、被測頻率信號取自實驗箱品體振蕩器輸出信號,加到主控門的輸入端。
3、再取昆體振蕩器的另一標準頻率信號,經(jīng)分頻后產(chǎn)生各種時基脈沖:1ms,10ms,0.1s,1s等,時基信號的選擇可以控制,即量程可以改變。
4、時基信號經(jīng)控制電路產(chǎn)生閘門信號至主控門,只有在閘門信號采樣期間內(nèi)(時基信號的一個周期輸入信號才通過主控門。
5、f=NT,改變時基信號的周期T,即可得到不同的測頻范圍。
6、當主控門關(guān)閉時,計數(shù)器停止計數(shù),顯示器顯示記錄結(jié)果,此時控制電路輸出一個置零信號,將計數(shù)器和所有觸發(fā)器復(fù)位,為新的一次采樣做好準備。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計文檔:
1、工程文件
2、程序文件
3、程序編譯
4、RTL圖(頂層框圖)
5、Testbench
6、仿真圖
整體仿真圖
控制模塊
頻率計算模塊
頻率鎖存模塊
顯示模塊
部分代碼展示:
LIBRARY?ieee; USE?ieee.std_logic_1164.all;? LIBRARY?work; --頻率計頂層模塊 ENTITY?frequence_test?IS? PORT ( reset?:??IN??STD_LOGIC;--復(fù)位 clk?:??IN??STD_LOGIC;--時鐘 signal_in?:??IN??STD_LOGIC;--輸入頻率 LED_over?:??OUT??STD_LOGIC;--溢出報警 COM?:??OUT??STD_LOGIC_VECTOR(2?DOWNTO?0);--數(shù)碼管位選 HEX?:??OUT??STD_LOGIC_VECTOR(7?DOWNTO?0)?--數(shù)碼管段選 ); END?frequence_test; ARCHITECTURE?bdf_type?OF?frequence_test?IS? --控制模塊 COMPONENT?control PORT(clk?:?IN?STD_LOGIC; ?door_1s?:?OUT?STD_LOGIC; ?clear?:?OUT?STD_LOGIC; ?latch_en?:?OUT?STD_LOGIC ); END?COMPONENT; --頻率計算 COMPONENT?freq_cnt PORT(signal_in?:?IN?STD_LOGIC; ?door_1s?:?IN?STD_LOGIC; ?clear?:?IN?STD_LOGIC; ?frequency_data?:?OUT?STD_LOGIC_VECTOR(31?DOWNTO?0) ); END?COMPONENT; --頻率鎖存 COMPONENT?latch_freq PORT(lat?:?IN?STD_LOGIC; ?reset?:?IN?STD_LOGIC; ?frequency_data?:?IN?STD_LOGIC_VECTOR(31?DOWNTO?0); ?frequency_latch?:?OUT?STD_LOGIC_VECTOR(31?DOWNTO?0) ); END?COMPONENT; --數(shù)碼管顯示 COMPONENT?display PORT(clk?:?IN?STD_LOGIC; ?frequency_latch?:?IN?STD_LOGIC_VECTOR(31?DOWNTO?0); ?LED_over?:?OUT?STD_LOGIC; ?COM?:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0); ?HEX?:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ); END?COMPONENT; SIGNALdoor_1s?:??STD_LOGIC; SIGNALclear?:??STD_LOGIC; SIGNALlatch_en?:??STD_LOGIC; SIGNALfrequency_data?:??STD_LOGIC_VECTOR(31?DOWNTO?0); SIGNALfrequency_latch?:??STD_LOGIC_VECTOR(31?DOWNTO?0); BEGIN? --控制模塊 b2v_inst?:?control PORT?MAP(clk?=>?clk, ?door_1s?=>?door_1s, ?clear?=>?clear, ?latch_en?=>?latch_en); --頻率計算 b2v_inst2?:?freq_cnt PORT?MAP(signal_in?=>?signal_in, ?door_1s?=>?door_1s, ?clear?=>?clear, ?frequency_data?=>?frequency_data);
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1520