频率计数计 FPGA 设计 Verilog Vivado ISE/Vivado

名称:频率计数计 FPGA 设计 Verilog Vivado ISE/Vivado

软件:ISE/Vivado

语言:Verilog

功能介绍

本设计实现基于 FPGA 的频率计数计功能,采用测频法对输入或板内分频产生的测试信号进行计数测量,并将测量结果送至数码管显示。设计目标是完成可综合、可仿真、可上板调试的频率测量工程,适合用于 FPGA 数字系统课程设计、实验项目和频率测量类 Verilog 工程参考。 系统围绕频率测量、计数控制、数据锁存和显示输出展开。计数模块负责在规定测量窗口内统计待测信号脉冲数,控制模块负责协调测量周期、清零、锁存等工作,显示模块将结果转换为数码管可显示的数据形式。由于显示部分面向 8 位数码管,工程适合展示多位频率结果,便于观察测量过程和输出状态。 工程同时包含仿真工程和板级工程,可用于先在 Vivado 中进行行为仿真,再结合约束文件完成综合、实现和比特流生成。对于需要理解测频法、数码管动态显示以及 FPGA 工程完整流程的用户,该设计具有较好的学习和二次开发价值。

运行环境

开发语言:Verilog 开发软件:Vivado / ISE 相关工程文件 工程类型:FPGA 频率计数计设计,包含仿真工程、板级工程、约束文件和实现结果文件。

设计思路

设计采用典型测频法思路:在固定的闸门时间或控制周期内,对待测信号的上升沿或有效脉冲进行累计计数,测量窗口结束后将计数结果锁存,再进入下一轮清零和重新计数。这样可以把输入信号频率转换为单位时间内的脉冲个数,便于在 FPGA 内部用计数器和寄存器完成实现。 系统结构上将频率测量流程拆分为多个功能模块。控制模块产生测量节拍和状态控制信号,计数模块完成待测信号计数,数据存储模块在测量结束时保存稳定结果,显示模块负责将结果送往数码管显示。模块化写法便于单独调试各部分逻辑,也方便根据实际需求调整测量窗口、显示位数或输入信号来源。 测试信号可通过板内分频方式产生,用于完成基本测量验证。该方式不依赖外部信号源即可观察频率计的计数与显示效果,适合实验室和课程设计场景。工程还包含 Vivado 仿真相关文件,可通过测试平台观察计数、锁存和显示数据变化,帮助确认测频流程是否符合预期。

模块结构

主要模块包括: Freq_test:频率计数计顶层相关模块,连接计数、控制、存储和显示逻辑。 counter:计数模块,用于在测量周期内统计待测信号脉冲数量。 Frq_Ctrl:频率测量控制模块,用于产生测量、清零、锁存等控制节拍。 data_store:数据存储模块,用于保存测量结果,避免显示过程中数据抖动。 LED_DISP:数码管显示模块,用于将测量结果输出到数码管显示端。 div_clk:分频模块,可用于产生内部测试或控制所需时钟。 Freq_34_cui_vlg_tst:仿真测试平台,用于对频率计逻辑进行行为仿真。

开发板验证

工程包含开发板管脚约束文件,可用于完成 FPGA 引脚分配、综合实现和板级调试流程。约束内容覆盖时钟、复位、数码管显示及相关外设信号,配合已生成的实现与 bit 文件,可作为上板验证和二次移植时的重要参考。 板级验证重点可放在数码管显示结果是否随待测分频信号变化、复位后系统是否能重新开始测量、计数结果锁存是否稳定等方面。用户可根据实际开发板接口继续调整约束文件中的管脚分配。

演示视频

包含仿真视频,可用于观察频率计数计在仿真环境下的运行过程和波形变化,重点参考测量控制、计数结果更新以及显示数据变化。

仿真图/仿真说明/设计文档图片

包含 Vivado 仿真工程、测试平台文件和仿真运行结果文件,可用于查看行为仿真流程。仿真部分适合验证计数窗口、清零锁存时序、结果更新以及数码管显示数据输出是否符合设计逻辑。 设计文档要求包含仿真波形、综合后原理图和开发板调试内容,因此工程可作为从代码编写、仿真验证到综合实现的完整流程参考。

部分代码

以下展示顶层模块 at7 的部分代码,完整源码请下载压缩包查看。

module at7(
			input sys_clk_i,	//外部输入100MHz时钟信号
			input ext_rst_n,	//外部输入复位信号,低电平有效			
			input chnl_sw ,		// UART接收数据信号		
			output rtc_iic_sck,	//RTC芯片的IIC时钟信号
			inout rtc_iic_sda,	//RTC芯片的IIC数据信号
            output [7:0] rtc_rdsecd    //RTC芯片的IIC时钟信号	
		);

wire clk_12m5;	//PLL输出12.5MHz时钟
wire clk_25m;	//PLL输出25MHz时钟
wire clk_50m;	//PLL输出50MHz时钟
wire clk_100m;	//PLL输出100MHz时钟
wire sys_rst_n;	//PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作

//PLL例化
  clk_wiz_0 	u1_clk_wiz_0
   (
   // Clock in ports
    .clk_in1(sys_clk_i),      // input clk_in1
    // Clock out ports
    .clk_out1(clk_25m),     // output clk_out1
    // Status and control signals
    .reset(!ext_rst_n), // input reset
    .locked(sys_rst_n));      // output locked

reg [7:0] clk_cnt;
always @(posedge clk_25m or negedge sys_rst_n) 
	if(!sys_rst_n)
	begin
	    clk_cnt <= 8'd0;
	end
	else
    begin
          clk_cnt <=  clk_cnt+ 1'b1;
    end
//
pcf8563  pcf8563(
.mclk (clk_cnt[5]),
.reset (sys_rst_n),
.scl   (rtc_iic_sck),
.sda   (rtc_iic_sda),
.s_reg (rtc_rdsecd ),
.led   (),
.seg  (),
.com  ());
 
endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 频率计数计 FPGA 设计 Verilog Vivado ISE/Vivado

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员