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

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

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

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
    下载

相关推荐