名称:Quartus频率仿真Verilog代码AX301开发板(文末获取)
软件:Quartus
语言:Verilog
代码功能:
6位频率计设计,测量范围1Hz~999999KHz
频率分2档,1Hz和1KHz,当检测到频率大于1MHz时,自动切换到KHz单位
本代码已在AX301开发板验证,开发板如下,其他开发板可以修改管脚适配:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. Testbench
7. 仿真图
整体仿真图
分频模块
计数模块
锁存模块
单位选择模块
超量程指示模块
数码管显示模块
部分代码展示:
//顶层模块 module frequency_detect( input clk_in,//输入50M基准时钟 input reset_p,//复位信号 input signal_in,//待测频率输入 output gear_led,//单位指示灯 output over_load_led,//超量程指示灯 output div_signal_1,//12.5M output div_signal_2,//1.5625M output div_signal_3,//0.1953125M output [5:0]en,//数码管位选 output [7:0]dataout//数码管段选 ); //分频信号,用于自测 signal_out i_signal_out( . clk(clk_in), . div_signal_1(div_signal_1), . div_signal_2(div_signal_2), . div_signal_3(div_signal_3) ); wire doors_open; wire [31:0] total_frequency; wire [31:0] CNT1_buf;//基准时钟计数器寄存器 wire [31:0] CNT2_buf;//待测频率计数器寄存器 wire [31:0] display_frequency;//显示数值 分频模块,产生闸门信号 div_doors i_div_doors( . clk_in(clk_in),//输入50M基准时钟 . reset_p(reset_p),//复位信号 . doors_open(doors_open)//闸门信号 ); //计数模块 count_cal i_count_cal( . clk_in(clk_in),//输入50M基准时钟 . signal_in(signal_in),//待测频率输入 . doors_open(doors_open), . CNT1_buf(CNT1_buf),//输出基准时钟计数器 . CNT2_buf(CNT2_buf)//输出待测频率计数器 ); //锁存模块 latch_buf i_latch_buf( . clk_in(clk_in),//输入50M基准时钟 . doors_open(doors_open), . total_frequency(total_frequency),//输出频率 . CNT1_buf(CNT1_buf),//输出基准时钟计数器 . CNT2_buf(CNT2_buf)//输出待测频率计数器 ); //单位选择模块 gear_position i_gear_position( . clk(clk_in), . total_frequency(total_frequency),//频率 . gear_led(gear_led),//单位指示灯 . display_frequency(display_frequency)//显示数值 ); //超量程指示模块 over_load i_over_load( . clk(clk_in), . total_frequency(total_frequency),//频率 . over_load_led(over_load_led)//超量程指示灯 ); //数码管显示模块 display i_display( . clk(clk_in), . dataout(dataout),//数码管段选 . en(en),//数码管位选 . display_frequency(display_frequency)//输出频率 ); endmodule
源代码
扫描文章末尾的公众号二维码