名称:数字频率计设计Verilog代码Quartus SF-CY4 开发板(文末获取)
软件:Quartus
语言:Verilog
代码功能:
基于FPGA设计一个数字频率计,基本要求如下:
(1) 测量方波的频率,频率测量范围为0HZ—999KHZ (2) 具有2个量程:0HZ—999HZ,1KHZ—999KHZ。 (3) 用3位数码管显示测量值,用LED灯指示超量程
(4)使用等精度测量
(5)在代码里写一个信号发生器用于输出波形
(6)Verilog语言
使用说明:
4表示超量程
1表示1档,单位Hz
2表示2档,单位Khz
超量程就显示全0
测得频率是内部产生的测试信号
内部产生了各个档位的频率信号
本代码已在SF-CY4 开发板验证,SF-CY4 开发板如下,其他开发板可以修改管脚适配:
工程文件
程序文件
程序编译
RTL图
Testbench
仿真图
显示模块
闸门模块
频率计算模块
待测信号输出模块
整体仿真
部分代码展示:
//频率计算模块 module frequency_calculate( input clk_in,//输入基准时钟 input signal_in,//待测频率输入 input doors_open, output [31:0]total_frequency//输出频率 ); wire door_1s; assign door_1s=doors_open; reg [31:0] CNT1=32'd0;//基准时钟计数器 reg [31:0] CNT2=32'd0;//待测频率计数器 reg [31:0] CNT1_buf=32'd0;//基准时钟计数器寄存器 reg [31:0] CNT2_buf=32'd0;//待测频率计数器寄存器 reg [31:0] CNT1_bufc=32'd0;//基准时钟计数器寄存器 reg [31:0] CNT2_bufc=32'd0;//待测频率计数器寄存器 always@(posedge clk_in) if(door_1s==1)begin CNT1<=CNT1+32'd1;//基准时钟计数器 end else begin CNT1<=32'd0; end always@(posedge signal_in) if(door_1s==1)begin CNT2<=CNT2+32'd1;//待测频率计数器 end else begin CNT2<=32'd0; end reg door_1s_buf=0; always@(posedge clk_in) door_1s_buf<=door_1s; wire door_1s_negedge; assign door_1s_negedge=~door_1s & door_1s_buf;//闸门信号下降沿 always@(posedge clk_in) begin CNT1_buf<=CNT1;//基准频率计数 CNT2_buf<=CNT2;//待测频率计数 end
源代码
点击下方的公众号卡片获取