简单数字频率技术器

数字频率计数器

  • 前言
  • 一、什么是数字频率技术器?
  • 二、简易数字频率计设计要求和原理介绍
    • 1.数字频率器结构设计
    • 2.结构
  • 3、各结构代码
    • LED模块
    • 前段模块
  • # 总结
    • 引脚分配

前言

简易数字频率计基本指标

  1. 测频范围1KHz-10MHz,误差+/-0.5%
  2. 测量信号幅度Vp-p :10mV-5V
  3. 信号类型,方波、正弦波、三角波、锯齿波
  4. 输出8位数码管动态扫描显示,显示无明显闪烁感
  5. 系统可提供标准的1KHz、10KHz、100KHz、1MHz、10MHz,50MHz六种测试信号输出,幅度Vp-p:>3V。

一、什么是数字频率技术器?

简易数字频率计基本原理
频率:周期信号在单位时间(秒)内变化的次数。
若在一定时间间隔T内,周期信号重复变化的次数为N,则该信号的频
率为:F=N/T。
次数:计数器。
单位时间:定时器(计数器),产生固定的时间长度控制计数器
控制计数器:计数时能,计数器清零,计数器结果显示。

二、简易数字频率计设计要求和原理介绍

1.数字频率器结构设计

设计分析

1.可将上图的闸门单元和计数器单元合并,将门控信号作为计数器的计数使能信号,控制计数器的工作。BCD计数器 vs 二进制计数器
2.显示电路采用8位LED动态扫描显示电路,扫描时钟频率可采用400Hz。
3.锁存器采用一组D触发器用于保存计数器的计数值。
4.控制信号电路在50MHz时钟驱动下,产生必须的计数使能(门控)、清零、
锁存信号。

2.结构


代码程序图


3、各结构代码

LED模块

①扫描计数器cnt2模块:

module cnt2(clk,Q,cy);
input clk;
output cy;
output [3:0]Q;
reg [3:0]Q;
reg cy;
always@(posedge clk)
beginif(Q==3)beginQ<=0;cy=1;endelsebeginQ<=Q+1;cy=0;end
end
endmodule

②数据选择器 Encode模块:

module Encode(clk,Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,F);
input [2:0]clk;
input [3:0]Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7;
output [3:0]F;
reg [3:0]F;
always@(clk)
begin
case({clk})4'b000:{F}=Q0;4'b001:{F}=Q1;4'b010:{F}=Q2;4'b011:{F}=Q3;4'b100:{F}=Q4;4'b101:{F}=Q5;4'b110:{F}=Q6;4'b111:{F}=Q7;default:{F}=Q0;endcase
end
endmodule

该处使用8选1的数据选择。


③3-8译码器decode_38模块:

module decode_38(B,Y);
input [3:0]B;
output [7:0]Y;
reg [7:0]Y;
always@(B)
begin
case(B)3'b000:Y=8'b0111_1111;3'b001:Y=8'b1011_1111;3'b010:Y=8'b1101_1111;3'b011:Y=8'b1110_1111;3'b100:Y=8'b1111_0111;3'b101:Y=8'b1111_1011;3'b110:Y=8'b1111_1101;default:Y=8'b1111_1110;
endcase
end
endmodule


④BCD7段译码器BCD_7SEG模块:

module BCD_7SEG(BCD,SEG);
input [2:0]BCD;
output [7:0]SEG;
reg [7:0]SEG;
always@(BCD)
begincase(BCD)4'd0:SEG=8'b1100_0000;4'd1:SEG=8'b1111_1001;4'd2:SEG=8'b1010_0100;4'd3:SEG=8'b1011_0000;4'd4:SEG=8'b1001_1001;4'd5:SEG=8'b1000_0010;4'd6:SEG=8'b1000_0010;4'd7:SEG=8'b1111_1000;4'd8:SEG=8'b1000_0000;4'd9:SEG=8'b1001_0000;default:SEG=8'b1111_1111;endcase
end
endmodule

到此LED 模块子程序全部搞定。


⑤LED顶层文件:

module Disp_LED(cp,cin0,cin1,cin2,cin3,cin4,cin5,cin6,cin7,LED_Bit,LED_Seg);
input cp;//接收400Hz分频信号
input [3:0]cin0,cin1,cin2,cin3,cin4,cin5,cin6,cin7;//链接锁存器
output [3:0]LED_Bit;
output [7:0]LED_Seg;
wire [3:0]scan_cnt;
wire [3:0]Data_BCD;cnt2 U1(.clk(cp),.Q(scan_cnt));Encode U2(.clk(scan_cnt),.Q0(cin0),.Q1(cin1),.Q2(cin2),.Q3(cin3),.Q4(cin4),.Q5(cin5),.Q6(cin6),.Q7(cin7),.F(Data_BCD));decode_38 U3(.B(scan_cnt),.Y(LED_Bit));BCD_7SEG U4(.BCD(Data_BCD),.SEG(LED_Seg));
endmodule

到此LED 模块全部搞定,仿真得到的模块图如下:


前段模块

①控制按钮ctr模块:
实现功能

module ctr(clk,en,rst,lat);
input clk;
output reg en,rst,lat;
reg [25:0]cnt;
always@(posedge clk)
beginif(cnt==53000000)//控制计数器的en端cnt<=0;elsecnt<=cnt+1;
end
always@(posedge clk)
beginif(cnt<50000000)//控制计数器的en端en<=1;elseen<=0;if((cnt>50000100)&&(cnt<50000200))//控制锁存器的锁存lat<=1;elselat<=0;if((cnt>50000300)&&(cnt<50000400))//控制计数器的清零rst<=1;elserst<=0;
end
endmodule

②计数器子模块cnt10模块:

module cnt10(clk,en,rst,Q,Cy);
input clk,en,rst;
output [3:0]Q;
reg [3:0]Q;
output Cy;
always@(posedge clk or posedge rst)
beginif(rst)Q<=0;else if(en)beginif(Q==9)beginQ<=0;endelsebeginQ<=Q+1;endend
end
assign Cy=(Q==9)?1:0;
endmodule

此次需要实现8位的计数器所以需要链接8个的计数器头文件实现此功能:

module cnt10_8(clk,rst,en,q0,q1,q2,q3,q4,q5,q6,q7);
input clk,rst,en;
output [3:0] q0,q1,q2,q3,q4,q5,q6,q7;
wire cy0,cy1,cy2,cy3,cy4,cy5,cy6,cy7;cnt10  U0(.clk(clk),.en(en),.rst(rst),.Q(q0),.Cy(cy0));
cnt10   U1(.clk(clk),.en(en&cy0),.rst(rst),.Q(q1),.Cy(cy1));
cnt10   U2(.clk(clk),.en(en&cy0&cy1),.rst(rst),.Q(q2),.Cy(cy2));
cnt10   U3(.clk(clk),.en(en&cy0&cy1&cy2),.rst(rst),.Q(q3),.Cy(cy3));
cnt10   U4(.clk(clk),.en(en&cy0&cy1&cy2&cy3),.rst(rst),.Q(q4),.Cy(cy4));
cnt10   U5(.clk(clk),.en(en&cy0&cy1&cy2&cy3&cy4),.rst(rst),.Q(q5),.Cy(cy5));
cnt10   U6(.clk(clk),.en(en&cy0&cy1&cy2&cy3&cy4&cy5),.rst(rst),.Q(q6),.Cy(cy6));
cnt10   U7(.clk(clk),.en(en&cy0&cy1&cy2&cy3&cy4&cy5&cy6),.rst(rst),.Q(q7),.Cy(cy7));endmodule

计数器模块结束。


③锁存器模块:

module latch_s(lat,c_in0,c_in1,c_in2,c_in3,c_in4,c_in5,c_in6,c_in7,c_out0,c_out1,c_out2,c_out3,c_out4,c_out5,c_out6,c_out7);
input lat;
input [3:0]c_in0,c_in1,c_in2,c_in3,c_in4,c_in5,c_in6,c_in7;
output reg[3:0]c_out0,c_out1,c_out2,c_out3,c_out4,c_out5,c_out6,c_out7;
always@(posedge lat)
beginc_out0<=c_in0;c_out1<=c_in1;c_out2<=c_in2;c_out3<=c_in3;c_out4<=c_in4;c_out5<=c_in5;c_out6<=c_in6;c_out7<=c_in7;end
endmodule

④被测信号产生模块:
功能如下图通过通过一个5分频和一个10分频组合
5分频:

module div_5(clk_in,clk_out);
input clk_in;
output reg clk_out;
reg [2:0]cnt;
always@(posedge clk_in)
beginif(cnt==4)begincnt<=0;clk_out<=1;endelsebegincnt<=cnt+1;clk_out<=0;endend
endmodule

10分频:

module div_10(clk_in,clk_out);
input clk_in;
output reg clk_out;
reg [3:0]cnt;
always@(posedge clk_in)
beginif(cnt==9)begincnt<=0;clk_out<=1;endelsebegincnt<=cnt+1;clk_out<=0;endend
endmodule

到此被测信号子模块全部搞定,接下来是信号顶层:

module tes_signal(clk,f_50M,f_10M,f_1M,f_100k,f_10k,f_1k);
input clk;
output f_50M,f_10M,f_1M,f_100k,f_10k,f_1k;
assign f_50M=clk;
div_5 U0(.clk_in(clk),.clk_out(f_10M));
div_10 U1(.clk_in(f_10M),.clk_out(f_1M));
div_10 U2(.clk_in(f_1M),.clk_out(f_100k));
div_10 U3(.clk_in(f_100k),.clk_out(f_10k));
div_10 U4(.clk_in(f_10k),.clk_out(f_1k));
endmodule

被测信号产生模块搞定。


⑤400Hz分频模块:

module div_400Hz(clk_in,clk_out);
input clk_in;
output reg clk_out;
reg [20:0]scan_cnt;
always@(posedge clk_in)
beginif(scan_cnt==62499)beginscan_cnt<=0;clk_out<=!clk_out;endelsebeginscan_cnt<=scan_cnt+1;clk_out<=clk_out;endend
endmodule

到此前段所有模块全部搞定。


⑥链接所有模块的顶层文件:

module TW(c_in,LED_BIT,LED_SEG,signal_in,ts_50M,ts_10M,ts_1M,ts_100k,ts_10k,ts_1k);input c_in,signal_in;
output ts_50M,ts_10M,ts_1M,ts_100k,ts_10k,ts_1k;
output [3:0]LED_BIT;
output [7:0]LED_SEG;
wire clk_400Hz;
wire [3:0]dip_data0,dip_data1,dip_data2,dip_data3,dip_data4,dip_data5,dip_data6,dip_data7;
wire [3:0]data0,data1,data2,data3,data4,data5,data6,data7;
wire EN,clear,lat;tes_signal U0(.clk(c_in),.f_50M(ts_50M),.f_10M(ts_10M),.f_1M(ts_1M),.f_100k(ts_100k),.f_10k(ts_10k),.f_1k(ts_1k));ctr U1(.clk(c_in),.en(EN),.rst(clear),.lat(lat));cnt10_8 U2(.clk(signal_in),.en(EN),.rst(clear),.q0(dip_data0),.q1(dip_data1),.q2(dip_data2),.q3(dip_data3),.q4(dip_data4),.q5(dip_data5),.q6(dip_data6),.q7(dip_data7));latch_s U3(.lat(lat),.c_in0(dip_data0),.c_in1(dip_data1),.c_in2(dip_data2),.c_in3(dip_data3),.c_in4(dip_data4),.c_in5(dip_data5),.c_in6(dip_data6),.c_in7(dip_data7),.c_out0(data0),.c_out1(data1),.c_out2(data2),.c_out3(data3),.c_out4(data4),.c_out5(data5),.c_out6(data6),.c_out7(data7));Disp_LED U4(.cp(c_in),.cin0(data0),.cin1(data1),.cin2(data2),.cin3(data3),.cin4(data4),.cin5(data5),.cin6(data6),.cin7(data7),.LED_Bit(LED_BIT),.LED_Seg(LED_Seg));
div_400Hz(.clk_in(c_in),.clk_out(clk_400Hz));
endmodule

到此数字频率计数器搞定,全体连接图如下:


以上就是这次课程设计的所有结果。

# 总结

大三了! 这是我的第一次使用 quartus || 所做的小项目。今后还有很多的东西需要各位大佬指点,希望今后能做更多的羡慕,下一次改为单片机的数字频率计数器,年后做的基于陀螺仪的姿态检测显示系统。多了解一下QT开发的基本语法知识。

引脚分配

基于verilog的数字频率计数器相关推荐

  1. Verilog设计实例(7)基于Verilog的数字电子钟设计

    博文目录 写在前面 正文 设计要求 设计思想 设计文件 仿真文件 参考资料 交个朋友 写在前面 前段时间,有几个小伙伴向我请教数字电子钟设计的问题,这个问题我在之前的BCD计数器以及数码管显示问题中已 ...

  2. 基于 Verilog 的经典数字电路设计(12)串并转换器

    基于 Verilog 的经典数字电路设计(12)串并转换器 版权所有,新芯设计,转载文章,请注来源 引言

  3. 基于 Verilog 的经典数字电路设计(13)并串转换器

    基于 Verilog 的经典数字电路设计(13)并串转换器 版权所有,新芯设计,转载文章,请注来源 引言

  4. 基于Verilog使用Quartus设计数字秒表和数字时钟

    目录 一.数字秒表 1.1 新建工程 1.2 添加 Verilog 文件 1.3 添加 VWF 文件 1.4 波形仿真 二.多功能数字钟 三.总结 本文内容:使用 Quartus 基于 Verilog ...

  5. 基于 Verilog 的经典数字电路设计(4)编码器

    基于 Verilog 的经典数字电路设计(4)编码器 版权所有,新芯设计,转载文章,请注来源 引言

  6. 基于 Verilog 的经典数字电路设计(2)比较器

    基于 Verilog 的经典数字电路设计(2)比较器 版权所有,新芯设计,转载文章,请注来源 引言

  7. 基于Verilog HDL的数字秒表、波形发送器等设计

    基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...

  8. 基于Verilog HDL的数字时钟

    目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...

  9. 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论

    1 Verilog HDL 数字设计总论 1.1 几个重要的概念 EDA(Electronic Design Automation) 电子技术自动化 EDA工具 类似于软件工程中的IDE(集成开发环境 ...

最新文章

  1. 第一次作业+105032014116
  2. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
  3. 第七天2017/04/14(C++对C的扩充,C++与C的区别,C++的基础知识)
  4. 史上最详细Docker安装Mysql 带每一步详图及解释 并教你Docker 打印容器日志!!!相信值得你的阅读!!!
  5. 内存的字符与打印出来的字符集的区别
  6. zhlan--Python中常见的几种格式化输出
  7. 【PAT】B1070 结绳(25 分)
  8. Bootstrap 学习笔记8 下拉菜单滚动监听
  9. 聊聊3种最常见的响应式设计问题
  10. 书籍-微服务架构与实践
  11. paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用
  12. VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案
  13. 软件测试之软件配置项测试
  14. MATLAB(矩阵转置等操作)
  15. 编译问题:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecur
  16. Unity游戏开始界面制作教学
  17. linux:常用命令
  18. 蓝牙扫描startLeScan测试
  19. Labview各版本软件下载链接
  20. html中背景简写,css中background简写属性

热门文章

  1. 批处理(bat)脚本语言(4) - FOR循环
  2. 美通社2022年9月最受关注新闻稿 | 星巴克、麦当劳、默沙东、宁德时代、腾讯音乐等发布重磅消息...
  3. ios设备苹果手机 js时间字符串转时间戳后显示错误NAN
  4. less和sass的定义和区别
  5. windows下python运行的方法
  6. C#在获得客户端ip的时候,获得的ip地址为::1
  7. 了解RabbitMQ
  8. error C2059: 语法错误:“常量”解决方案
  9. 浅谈Activity启动流程
  10. c语言sqar是double,C语言怎么编写正弦波