教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

基于FPGA的数字频率计的设计(4)

来源:网络收集 时间:2026-08-19
导读: 第3章 数字频率计模块设计 3.1 数字频率计设计指标 该频率计有三个输入信号fre_in,clk_50k,rstn其中clk_50k脚输入标准的50KHz方波信号,作为参考时钟fre_in为信号输入端,被测信号频率从这里送入,rstn为系统复位端

第3章 数字频率计模块设计

3.1 数字频率计设计指标

该频率计有三个输入信号fre_in,clk_50k,rstn其中clk_50k脚输入标准的50KHz方波信号,作为参考时钟fre_in为信号输入端,被测信号频率从这里送入,rstn为系统复位端,上电时该引脚需要保持一端时间低电平。该系统输出脚为a,b,c,d,e,f,g,unit,led_sel。a,b,c,d,e,f,g为数码管译码输出。unit表示当前显示数值的单位,可为1Hz,10Hz,100Hz,1kHz,10kHz。led_sel为数码管位选信号。该频率计测量范围为1Hz-99.99MHz,可根据输入信号频率自动调整显示数值的单位为合适的数值,并通过unit端口告知用户读数的单位。

本课题的数字频率计顶层RTL硬件电路图如图3-1所示。

图3-1顶层RTL硬件电路图

9

3.2 数字频率计各个模块

3.2.1 顶层模块fre_counter

顶层模块为本课题的最上层模块,由它来例化整个程序,把其它分开的小模块进行整合。其电路原理图如图3-2所示。

图3-2顶层模块原理图

根据模块实现的功能设计Verilog HDL源代码如下: module fre_counter(clk_50k,fre_in,rstn,led_sel,unit, a,b,c,d,e,f,g);

input clk_50k,fre_in,rstn; output[1:0] led_sel; output[2:0] unit; output a,b,c,d,e,f,g;

wire div_10,div_100,div_1000,div_10000,div_100000; clk_gen part_clk_gen(.rstn(rstn),.clk(clk_50k),.div_10(div_10),

.div_100(div_100),.div_1000(div_1000),.div_10000(div_10000),.div_100000(div_100000));

reg gate;

wire[3:0] count_a,count_b,count_c,count_d;

count_4units part_count(.clk(fre_in),.gate(gate),.out_a(count_a), .out_b(count_b),.out_c(count_c),.out_d(count_d)); reg[2:0] gate_sel; assign unit=gate_sel;

10

wire unit_H; reg unit_L;

always@(negedge count_a[3] or negedge gate) if(!gate) unit_L<=1'b0; else unit_L<=1'b1; assign

unit_H=((count_a==4'd0)&&(count_b==4'd0)&&(count_c==4'd0)&&(count_d==4'd0));

always@(negedge gate or negedge rstn) begin

if(!rstn) gate_sel<=3'd0;

else if(unit_L&&(gate_sel!=3'd4)) gate_sel<=gate_sel+3'd1; else if(unit_H&&(gate_sel!=3'd0)) gate_sel<=gate_sel-3'd1; else gate_sel<=gate_sel; end

always@(gate_sel or div_10 or div_100 or div_1000 or div_10000 or div_100000)

begin

case(gate_sel)

3'd0:gate=div_100000; 3'd1:gate=div_10000; 3'd2:gate=div_1000; 3'd3:gate=div_100; 3'd4:gate=div_10;

default:gate=div_100000; endcase end

wire d_n0_a,d_n0_b,d_n0_c,d_n0_d; wire a,b,c,d,e,f,g;

wire trans_ena_a,trans_ena_b,trans_ena_c,trans_ena_d;

11

wire ena_a,ena_b,ena_c,ena_d; wire clk_lock;

assign clk_lock=~gate;

transform part_tran_a(.d_n0(d_n0_a),.din(count_a),.clk_lock(clk_lock), .ena(trans_ena_a),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g));

transform part_tran_b(.d_n0(d_n0_b),.din(count_b),.clk_lock(clk_lock), .ena(trans_ena_b),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g));

transform part_tran_c(.d_n0(d_n0_c),.din(count_c),.clk_lock(clk_lock), .ena(trans_ena_c),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g));

transform part_tran_d(.d_n0(d_n0_d),.din(count_d),.clk_lock(clk_lock), .ena(trans_ena_d),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g)); wire clk_ledc;

assign clk_ledc=div_1000;

led_sel part_led_sel(.rstn(rstn),.clk_ledc(clk_ledc),

.led_ena({ena_a,ena_b,ena_c,ena_d}),.led_count(led_sel)); assign trans_ena_a=ena_a&d_n0_a;

assign trans_ena_b=ena_b&(d_n0_b|d_n0_a);

assign trans_ena_c=(d_n0_c|d_n0_b|d_n0_a)&ena_c; assign trans_ena_d=ena_d; endmodule

以上程序把clk_gen,count_4units,transform 和 led_sel这几个模块连起来进行了整个程序的整合。

3.2.2 分频模块clk_gen

这个模块主要是对给的总频率50khz进行了5次分频,通过这5个不同的频率来完成档位的自动转换。分频模块的电路原理图如图3-3所示。

12

图3-3分频模块原理图

根据模块实现的功能设计Verilog HDL部分源代码如下: always@(posedge clk or negedge rstn) begin

if(!rstn) count1<=3'd0;

else if(count1==3'd4) count1<=3'd0;

else count1<=count1+3'd1; end

reg d1;

always@(posedge count1[2] or negedge rstn) begin

if(!rstn) d1<=1'd0; else d1<=~d1; end

assign div_10=d1; reg[2:0] count2;

always@(posedge d1 or negedge rstn) begin

if(!rstn) count2<=3'd0;

else if(count2==3'd4) count2<=3'd0; else count2<=count2+3'd1; end

其中,div_10是把输入的clk_10分频,为了得到占空比50%的方波,我先把它5分频,再2分频。count1==3'd4,是因为count1有0,1,2,3,4。这5个状态,d1用于2分频。若输入的clk信号为50khz则div_100000的高

13

…… 此处隐藏:1291字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于FPGA的数字频率计的设计(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/454529.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)