数字频率计的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实现相关推荐

  1. 简易数字频率计(verilog HDL设计)(2020维护版本)

    目录 前言 简易数字频率计原理 结语 前言 这篇博客大概是2017年写的,目前已经是2020年8月不到,今天维护了一下但是并未保存,很受伤,不得不重新在维护一次. 最近看到很多评论,说程序有问题,于是 ...

  2. verilog编写数字频率计

    一个简易的数字频率计主要由一个分频器和计数器构成 ,它的基本原理就是计算 1 秒钟内被测时钟上升沿的个数即作它的频率值. 1.   分频器的作用是由fpga时钟得到我们想要的时钟 ,这里假设fpga的 ...

  3. Verilog HDL|实验项目六例

    实验一 EDA 设计软件的使用 实验内容 实现1 位全加器 图 1 在顶层编辑窗中设计好全加器 程序代码 module MULT4B(RX,AX,BX);output [3:0] RX; input ...

  4. 基于FPGA的数字频率计(设计全过程)

    小序: 前几天看全国大学生电子设计竞赛历年试题,无意间发现了一道题目<简易数字频率计>,跟之前我用verilog写的一个频率计差不多,于是想尝试做一下,题目具体要求如下图中所示,我所用的开 ...

  5. 课程学习——数字频率计的设计

    简易数字频率计 原理:数字频率计的原理十分简单,简单的就是一句话和一幅图而已. 一句话:测量被测信号的频率,要清楚频率的定义,一言以蔽之,就是1s中信号的周期数,这不就是周期的倒数吗? 根据频率的定义 ...

  6. CASE_03 基于FPGA的等精度数字频率计

             该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1. 简介 2.数字频率计的基本原理 2.1 数字频率计的设 ...

  7. 基于FPAG的简易数字频率计设计

    一.设计要求 1. 设计四位十进制的简易数字频率计,能够利用系统时钟产生1KHZ-9999KHZ方波信号,并且设计模块对1KHZ-9999KHZ的方波信号进行频率测量: 2.测量的方波频率值要在4位数 ...

  8. 基于matlab的数字频率计设计 --毕业论文,等精度数字频率计的设计和分析开题报告_毕业论文范文网-论文范文...

    毕业论文范文题目:等精度数字频率计的设计和分析开题报告(一),论文范文关键词:等精度数字频率计的设计和分析开题报告(一) 等精度数字频率计的设计和分析开题报告(一)毕业论文范文介绍开始: 1.本课题的 ...

  9. HEU大三数字电路综合实验--简易数字频率计

    实验技术指标要求 利用硬件描述语言 VerilogVerilogVerilog (或 VHDLVHDLVHDL ).图形描述方式.IP核,结合数字系统设计方法,在 QuartusQuartusQuar ...

最新文章

  1. 北京学python去哪里好_北京想学习Python应该去哪里好
  2. 随机分配效果在task中的应用,公司内部代码片
  3. Python 条件判断
  4. python blp模型 估计_第三章 BLP模型(Bell-La Padula模型) | 学步园
  5. C++(九)——职工信息管理系统
  6. 高校青年教师:不好意思,没有活成别人眼中的“卖家秀”
  7. 7-10 A-B (20 分)
  8. 重磅:《Python可以这样学》正式出版
  9. linux 环境下git的安装与配置
  10. win11天气小组件如何开启 Windows11开启天气组件的设置方法
  11. nginx过滤post请求头_Nginx Header,实现对HTTP/S请求、响应进行添加、修改、删除等操作...
  12. 代理服务器-贪心算法
  13. 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
  14. 纯蓝ICON_学习教程
  15. socket文件传输
  16. 2022年全球市场MEMS惯性测量单元(IMU)总体规模、主要生产商、主要地区、产品和应用细分研究报告
  17. 半导体激光器的工作原理
  18. python电子邮件_Python 电子邮件
  19. 两数之和(JavaScript三种算法)
  20. Eclipse等IDE配置Anaconda/Python3开发环境(win10_x64)

热门文章

  1. Java高并发编程详解系列-线程安全数据同步
  2. Onvif之设备发现-基于gsoap2.8.27
  3. mybatis中经典的9种设计模式
  4. datax实现mysql数据同步
  5. springboot之rabbitmq
  6. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
  7. 全新Wijmo5中文学习指南正式上线
  8. Eclipse的使用总结
  9. 一个相当好的状态机(DFA, 确定有限状态机)的编码实现,相当简洁漂亮
  10. Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理) - willian12345...