数字频率计的verilog实现
数字频率计的verilog实现,输入时钟为1Hz的标准时钟。
1 module frequency_meter(rst_n, 2 clk, 3 //count_en, 4 test_clk, 5 count_clr, 6 freq_load, 7 freq_out 8 ); 9 input rst_n; 10 input clk; 11 input test_clk; 12 13 output freq_load; 14 output count_clr; 15 output [15:0] freq_out; 16 17 wire count_en; 18 19 wire [3:0] g; 20 wire [3:0] s; 21 wire [3:0] b; 22 wire [3:0] q; 23 24 wire s_clk; 25 wire b_clk; 26 wire q_clk; 27 28 freq_meter_ctrl u1_freq_meter_ctrl ( 29 .rst_n(rst_n), 30 .clk(clk), 31 .count_en(count_en), 32 .count_clr(count_clr), 33 .freq_load(freq_load) //没用到该信号 34 ); 35 36 counter10 u1_counter10 ( 37 .clk(test_clk), 38 .rst_n(rst_n), 39 .clr(count_clr), 40 .en(count_en), 41 .cnt(g), 42 .cout(s_clk) 43 ); 44 45 counter10 u2_counter10 ( 46 .clk(s_clk), 47 .rst_n(rst_n), 48 .clr(count_clr), 49 .en(count_en), 50 .cnt(s), 51 .cout(b_clk) 52 ); 53 54 counter10 u3_counter10 ( 55 .clk(b_clk), 56 .rst_n(rst_n), 57 .clr(count_clr), 58 .en(count_en), 59 .cnt(b), 60 .cout(q_clk) 61 ); 62 63 counter10 u4_counter10 ( 64 .clk(q_clk), 65 .rst_n(rst_n), 66 .clr(count_clr), 67 .en(count_en), 68 .cnt(q), 69 .cout() 70 ); 71 72 latch_out u1_latch_out ( 73 .rst_n(rst_n), 74 //.load(freq_load), 75 .clk(clk), 76 .din({q,b,s,g}), 77 .dout(freq_out) 78 ); 79 80 endmodule
子模块:
1 module freq_meter_ctrl(rst_n, 2 clk, 3 count_en, 4 count_clr, 5 freq_load 6 ); 7 input rst_n; 8 input clk; 9 10 output count_en; 11 output count_clr; 12 output freq_load; 13 14 reg count_en; 15 reg freq_load; 16 17 always@(posedge clk) 18 if(!rst_n) 19 begin 20 //count_en <= 1'b0; //阻塞赋值or非阻塞? 21 count_en = 1'b0; 22 freq_load = 1'b0; 23 end 24 else 25 begin 26 //count_en <= ~count_en; 27 //freq_load <= ~count_en; 28 count_en = ~count_en; 29 freq_load = ~count_en;//控制,用阻塞,否则控制信号时序不对 30 end 31 32 assign count_clr = ~clk & freq_load; 33 34 endmodule
计数子模块:
1 module counter10(clk, 2 rst_n, 3 clr, 4 en, 5 cnt, 6 cout 7 ); 8 input clk; 9 input rst_n; 10 input clr; 11 input en; 12 13 output [3:0] cnt; 14 output cout; 15 16 reg [3:0] cnt; 17 reg cout; 18 19 /* 20 always@(posedge clk or negedge rst_n or posedge clr) 21 if(!rst_n) 22 begin 23 cnt <= 4'd0; 24 cout <= 1'b0; 25 end 26 else if(clr) //异步清零 27 begin 28 cnt <= 4'd0; 29 cout <= 1'b0; 30 end 31 else if(en) //同步使能 32 if(cnt == 4'd9) 33 begin 34 cnt <= 4'd0; 35 cout <= 1'b1; 36 end 37 else 38 begin 39 cnt <= cnt + 1'b1; 40 cout <= 1'b0; 41 end 42 43 */ 44 //使用阻塞赋值与非阻塞放着结果都正确,区别是什么?? 45 always@(posedge clk or negedge rst_n or posedge clr) 46 if(!rst_n) 47 begin 48 cnt = 4'd0; 49 cout = 1'b0; 50 end 51 else if(clr) //异步清零 52 begin 53 cnt = 4'd0; 54 cout = 1'b0; 55 end 56 else if(en) //同步使能 57 if(cnt == 4'd9) 58 begin 59 cnt = 4'd0; 60 cout = 1'b1; 61 end 62 else 63 begin 64 cnt = cnt + 1'b1; 65 cout = 1'b0; 66 end 67 68 endmodule
锁存子模块:
1 module latch_out(rst_n, 2 clk, 3 //load, 4 din, 5 dout 6 ); 7 8 input rst_n; 9 input clk; 10 //input load; 11 input [15:0] din; 12 13 output [15:0] dout; 14 15 reg [15:0] dout; 16 17 always@(posedge clk) 18 if(!rst_n) 19 dout <= 16'd0; 20 else 21 dout <= din; 22 23 endmodule
testbench:
1 module frequency_meter_tb; 2 3 // Inputs 4 reg rst_n; 5 reg clk; 6 reg test_clk; 7 8 // Outputs 9 wire count_clr; 10 wire freq_load; 11 wire [15:0] freq_out; 12 13 // Instantiate the Unit Under Test (UUT) 14 frequency_meter uut ( 15 .rst_n(rst_n), 16 .clk(clk), 17 .test_clk(test_clk), 18 .count_clr(count_clr), 19 .freq_load(freq_load), 20 .freq_out(freq_out) 21 ); 22 23 parameter CLK_PERIOD = 1000; 24 parameter TEST_CLK_PERIOD = 18; 25 26 27 initial begin 28 rst_n = 0; 29 clk = 1; 30 test_clk = 1; 31 32 #1000; 33 rst_n = 1; 34 35 end 36 37 always #(CLK_PERIOD/2) clk = ~clk; 38 always #(TEST_CLK_PERIOD/2) test_clk = ~test_clk; 39 40 endmodule
仿真结果:
转载于:https://www.cnblogs.com/youngforever/archive/2013/06/03/3115609.html
数字频率计的verilog实现相关推荐
- 简易数字频率计(verilog HDL设计)(2020维护版本)
目录 前言 简易数字频率计原理 结语 前言 这篇博客大概是2017年写的,目前已经是2020年8月不到,今天维护了一下但是并未保存,很受伤,不得不重新在维护一次. 最近看到很多评论,说程序有问题,于是 ...
- verilog编写数字频率计
一个简易的数字频率计主要由一个分频器和计数器构成 ,它的基本原理就是计算 1 秒钟内被测时钟上升沿的个数即作它的频率值. 1. 分频器的作用是由fpga时钟得到我们想要的时钟 ,这里假设fpga的 ...
- Verilog HDL|实验项目六例
实验一 EDA 设计软件的使用 实验内容 实现1 位全加器 图 1 在顶层编辑窗中设计好全加器 程序代码 module MULT4B(RX,AX,BX);output [3:0] RX; input ...
- 基于FPGA的数字频率计(设计全过程)
小序: 前几天看全国大学生电子设计竞赛历年试题,无意间发现了一道题目<简易数字频率计>,跟之前我用verilog写的一个频率计差不多,于是想尝试做一下,题目具体要求如下图中所示,我所用的开 ...
- 课程学习——数字频率计的设计
简易数字频率计 原理:数字频率计的原理十分简单,简单的就是一句话和一幅图而已. 一句话:测量被测信号的频率,要清楚频率的定义,一言以蔽之,就是1s中信号的周期数,这不就是周期的倒数吗? 根据频率的定义 ...
- CASE_03 基于FPGA的等精度数字频率计
该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1. 简介 2.数字频率计的基本原理 2.1 数字频率计的设 ...
- 基于FPAG的简易数字频率计设计
一.设计要求 1. 设计四位十进制的简易数字频率计,能够利用系统时钟产生1KHZ-9999KHZ方波信号,并且设计模块对1KHZ-9999KHZ的方波信号进行频率测量: 2.测量的方波频率值要在4位数 ...
- 基于matlab的数字频率计设计 --毕业论文,等精度数字频率计的设计和分析开题报告_毕业论文范文网-论文范文...
毕业论文范文题目:等精度数字频率计的设计和分析开题报告(一),论文范文关键词:等精度数字频率计的设计和分析开题报告(一) 等精度数字频率计的设计和分析开题报告(一)毕业论文范文介绍开始: 1.本课题的 ...
- HEU大三数字电路综合实验--简易数字频率计
实验技术指标要求 利用硬件描述语言 VerilogVerilogVerilog (或 VHDLVHDLVHDL ).图形描述方式.IP核,结合数字系统设计方法,在 QuartusQuartusQuar ...
最新文章
- 北京学python去哪里好_北京想学习Python应该去哪里好
- 随机分配效果在task中的应用,公司内部代码片
- Python 条件判断
- python blp模型 估计_第三章 BLP模型(Bell-La Padula模型) | 学步园
- C++(九)——职工信息管理系统
- 高校青年教师:不好意思,没有活成别人眼中的“卖家秀”
- 7-10 A-B (20 分)
- 重磅:《Python可以这样学》正式出版
- linux 环境下git的安装与配置
- win11天气小组件如何开启 Windows11开启天气组件的设置方法
- nginx过滤post请求头_Nginx Header,实现对HTTP/S请求、响应进行添加、修改、删除等操作...
- 代理服务器-贪心算法
- 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
- 纯蓝ICON_学习教程
- socket文件传输
- 2022年全球市场MEMS惯性测量单元(IMU)总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 半导体激光器的工作原理
- python电子邮件_Python 电子邮件
- 两数之和(JavaScript三种算法)
- Eclipse等IDE配置Anaconda/Python3开发环境(win10_x64)
热门文章
- Java高并发编程详解系列-线程安全数据同步
- Onvif之设备发现-基于gsoap2.8.27
- mybatis中经典的9种设计模式
- datax实现mysql数据同步
- springboot之rabbitmq
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
- 全新Wijmo5中文学习指南正式上线
- Eclipse的使用总结
- 一个相当好的状态机(DFA, 确定有限状态机)的编码实现,相当简洁漂亮
- Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理) - willian12345...