名称:量程自动转换数字式频率计设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
设备及软件:装有 Quartus‖软件完成设计数字系统的计算机
目的:
1.了解系统相关功能电路图与印剧电路图的设计、绘制,并完成相关流程的设计以及硬件描述语VHDL程序的编写,设计与综合和调试仿真工作。
2.学会 Quartus‖软件完成设计系统的设计与综合。
3.掌握该数字电路系统的仿真调试,分析系统功能实现的可行性等。
任务:
1.设计一个3位十进制数字式频率计,其测量范围为1MHZ。量程分10HZ,100kHZ和1MHz三档(最读数分别为99kHZ,999Z,999KHZ)。被测信号由信号发生器提供。
2.要求量程可以根据被测量的大小自动转换,规则如下:
1)当读数大于999时,频率计处于超量程状态。此时显示器发出溢出指示(最高位显示F,其余各位不显示数字),下一次测量时,量程自动增大一档。
2)读数小于000时,频率计处于欠量程状态。下次测量时,量程减小一档。
3.要求实现溢出报警功能。即当读数大于999KHZ时,频率计处于超量程状态,产生一个报警信号,点亮led报警灯。
4.显示方式如下:
1)用记忆显示方式,即计数过程中不显示数据,待计数过程结束后,显示计数结果,并将此显示结果保持到下一次计数结束。显示时间应不小于1秒。
2)小数点位置随量程变更自动移位。
提示:
1、脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为,f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。所以,在1秒时间内计数器所记录的结果,就是被测信号。
2、被測频率信号取自实验箱品体振荡器输出信号,加到主控门的输入端。
3、再取昆体振荡器的另一标准频率信号,经分频后产生各种时基脉冲:1ms,10ms,0.1s,1s等,时基信号的选择可以控制,即量程可以改变。
4、时基信号经控制电路产生闸门信号至主控门,只有在闸门信号采样期间内(时基信号的一个周期输入信号才通过主控门。
5、f=NT,改变时基信号的周期T,即可得到不同的测频范围。
6、当主控门关闭时,计数器停止计数,显示器显示记录结果,此时控制电路输出一个置零信号,将计数器和所有触发器复位,为新的一次采样做好准备。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
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;--复位 clk : IN STD_LOGIC;--时钟 signal_in : IN STD_LOGIC;--输入频率 LED_over : OUT STD_LOGIC;--溢出报警 COM : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--数码管位选 HEX : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --数码管段选 ); 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; --数码管显示 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
721