基于verilog的数字频率计数器
简单数字频率技术器
数字频率计数器
- 前言
- 一、什么是数字频率技术器?
- 二、简易数字频率计设计要求和原理介绍
- 1.数字频率器结构设计
- 2.结构
- 3、各结构代码
- LED模块
- 前段模块
- # 总结
- 引脚分配
前言
简易数字频率计基本指标
- 测频范围1KHz-10MHz,误差+/-0.5%
- 测量信号幅度Vp-p :10mV-5V
- 信号类型,方波、正弦波、三角波、锯齿波
- 输出8位数码管动态扫描显示,显示无明显闪烁感
- 系统可提供标准的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的数字频率计数器相关推荐
- Verilog设计实例(7)基于Verilog的数字电子钟设计
博文目录 写在前面 正文 设计要求 设计思想 设计文件 仿真文件 参考资料 交个朋友 写在前面 前段时间,有几个小伙伴向我请教数字电子钟设计的问题,这个问题我在之前的BCD计数器以及数码管显示问题中已 ...
- 基于 Verilog 的经典数字电路设计(12)串并转换器
基于 Verilog 的经典数字电路设计(12)串并转换器 版权所有,新芯设计,转载文章,请注来源 引言
- 基于 Verilog 的经典数字电路设计(13)并串转换器
基于 Verilog 的经典数字电路设计(13)并串转换器 版权所有,新芯设计,转载文章,请注来源 引言
- 基于Verilog使用Quartus设计数字秒表和数字时钟
目录 一.数字秒表 1.1 新建工程 1.2 添加 Verilog 文件 1.3 添加 VWF 文件 1.4 波形仿真 二.多功能数字钟 三.总结 本文内容:使用 Quartus 基于 Verilog ...
- 基于 Verilog 的经典数字电路设计(4)编码器
基于 Verilog 的经典数字电路设计(4)编码器 版权所有,新芯设计,转载文章,请注来源 引言
- 基于 Verilog 的经典数字电路设计(2)比较器
基于 Verilog 的经典数字电路设计(2)比较器 版权所有,新芯设计,转载文章,请注来源 引言
- 基于Verilog HDL的数字秒表、波形发送器等设计
基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...
- 基于Verilog HDL的数字时钟
目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...
- 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论
1 Verilog HDL 数字设计总论 1.1 几个重要的概念 EDA(Electronic Design Automation) 电子技术自动化 EDA工具 类似于软件工程中的IDE(集成开发环境 ...
最新文章
- 第一次作业+105032014116
- 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )
- 第七天2017/04/14(C++对C的扩充,C++与C的区别,C++的基础知识)
- 史上最详细Docker安装Mysql 带每一步详图及解释 并教你Docker 打印容器日志!!!相信值得你的阅读!!!
- 内存的字符与打印出来的字符集的区别
- zhlan--Python中常见的几种格式化输出
- 【PAT】B1070 结绳(25 分)
- Bootstrap 学习笔记8 下拉菜单滚动监听
- 聊聊3种最常见的响应式设计问题
- 书籍-微服务架构与实践
- paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用
- VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案
- 软件测试之软件配置项测试
- MATLAB(矩阵转置等操作)
- 编译问题:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecur
- Unity游戏开始界面制作教学
- linux:常用命令
- 蓝牙扫描startLeScan测试
- Labview各版本软件下载链接
- html中背景简写,css中background简写属性
热门文章
- 批处理(bat)脚本语言(4) - FOR循环
- 美通社2022年9月最受关注新闻稿 | 星巴克、麦当劳、默沙东、宁德时代、腾讯音乐等发布重磅消息...
- ios设备苹果手机 js时间字符串转时间戳后显示错误NAN
- less和sass的定义和区别
- windows下python运行的方法
- C#在获得客户端ip的时候,获得的ip地址为::1
- 了解RabbitMQ
- error C2059: 语法错误:“常量”解决方案
- 浅谈Activity启动流程
- c语言sqar是double,C语言怎么编写正弦波