• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的简易等精度频率计设计Verilog代码VIVADO仿真

08/05 08:03
488
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240614203043552.doc

共1个文件

名称:基于FPGA的简易等精度频率计设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:简易等精度频率计设计

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序代码

3. 程序综合

4. RTL图

5. 测试代码

6. 仿真图

部分代码展示:

`timescale?1ns?/?1ps
//////////////////////////////////////////////////////////////////////////////////
//?Company:?
//?Engineer:?
//?
//?Create?Date:?2019/01/13?15:33:36
//?Design?Name:?
//?Module?Name:?Frequency_Calculator
//?Project?Name:?
//?Target?Devices:?
//?Tool?Versions:?
//?Description:?
//?
//?Dependencies:?
//?
//?Revision:
//?Revision?0.01?-?File?Created
//?Additional?Comments:
//?
//////////////////////////////////////////////////////////////////////////////////
module?Frequency_Calculator(
input????reset_n,?//系统复位信号
input????clk_200M,//系统时钟信号,这里采用200MHz
????
input????frequency_in,//待测信号输入????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
output???[59:0]?Frequency_out//输出频率,单位Hz
);
parameter??Gate_div_number=32'd400000;//闸门信号计数值,为便于仿真取400000(1ms),若取400000000则为1s
reg?clk_100M=0;?????????????//已知频率的标准输入信号100M
always@(posedge?clk_200M)
????if(reset_n==0)
????????clk_100M<=0;
????else
????????clk_100M<=~clk_100M;//200M分频到100M
reg?Gate=0;???????????//闸门信号输入,取1ms
reg?[31:0]?Gate_time_cnt=32'd0;
always@(posedge?clk_200M)
if(reset_n==0)
????Gate_time_cnt<=32'd0;
else
????if(Gate_time_cnt==Gate_div_number-1)
????????Gate_time_cnt<=32'd0;
????else
????????Gate_time_cnt<=Gate_time_cnt+32'd1;
????????
always@(posedge?clk_200M)
if(reset_n==0)
????Gate<=0;
else
????if(Gate_time_cnt>=Gate_div_number/2)
?????????Gate<=1;//闸门信号输入
????else
?????????Gate<=0;
reg[29:0]F_in_cycle;???//待测信号的周期个数
reg[29:0]clk_in_cycle;???//标准输入信号周期个数
reg?Data_Done;?//待测信号和标准输入信号的周期数计算完成
//同步待测信号输入
reg?frequency_in_temp0,frequency_in_temp1;
always@(posedge?clk_200M?or?negedge?reset_n)
if(!reset_n)begin
????frequency_in_temp0?<=?1'b0;
????frequency_in_temp1?<=?1'b0;????
end
else?begin
????frequency_in_temp0?<=?frequency_in;
????frequency_in_temp1?<=?frequency_in_temp0;????
end?
????
//检测待测信号变化
wire?frequency_in_change;
assign?frequency_in_change?=?(frequency_in_temp0?!=?frequency_in_temp1)?1'b1:1'b0;
//同步闸门信号输出
reg?Sync_Gate=0;
always@(posedge?clk_200M?or?negedge?reset_n)
if(!reset_n)
????Sync_Gate?<=?1'b0;
else?if(frequency_in_change?&&?(!frequency_in_temp1))begin
????if(Gate)

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=872

  • 2-240614203043552.doc
    下载

相关推荐