时钟周期 频率50MHz 倒数为1/(5*108)s=20ns,凑够一秒需要5 * 108个。
ms us ns ps

0计数器设计要点

1 初始值
a) 复位值
b)每轮初始值

2 . 加1 条件

3 . 结束条件
a)返回初始值
b)结束一轮计数的条件,一般为加1条件并列

4 计数器位宽
与2的n次幂相比,如2<3<22,则取上限,2

当不定时计数时,采用自减计数器

1 时序逻辑和组合逻辑彻底分开

//模10计数器,0到10循环累加module Count_1
(input               clk                 ,input               rst_n               ,output reg [ 3:0]   cnt
);//----------------------------------------------------------------------
//--   组合电路
//----------------------------------------------------------------------
reg [ 3:0]              cnt_n                ;always @(*)beginif(cnt == 4'd9)cnt_n = 4'd0; elsecnt_n = cnt + 1'b1;
end//----------------------------------------------------------------------
//--   时序电路
//----------------------------------------------------------------------
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 4'b0;elsecnt <= cnt_n;
endendmodule/*
//----------------------------------------------------------------------
//--   组合电路也可以这样写
//----------------------------------------------------------------------
wire [ 3:0]             cnt_n               ;assign cnt_n = (cnt==4'd9)? 4'd0 : cnt+1'b1;*/

2最常见的写法


module Count_2
(input               clk                 ,input               rst_n               ,output reg [ 3:0]   cnt
);always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 4'd0;else if(cnt==4'd9)cnt <= 4'd0;elsecnt <= cnt + 1'b1;
endendmodule

3至简设计法

module Count_3
//---------------------<端口声明>---------------------------------------
(
input                   clk                 ,
input                   rst_n               ,
output reg [ 3:0]       cnt
);
//---------------------<信号定义>---------------------------------------
wire                    add_cnt             ;
wire                    end_cnt             ;//----------------------------------------------------------------------
//--   0-9计数
//----------------------------------------------------------------------
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 4'd0;else if(add_cnt)beginif(end_cnt)cnt <= 4'd0;elsecnt <= cnt + 1'b1;endelsecnt <= cnt;
endassign add_cnt = 1;
assign end_cnt = add_cnt && cnt==4'd9;endmodule

4 总结

由此可见,三种写法对应的RTL视图是完全一致的。

第一种写法优点是时序和组合彻底分开,代码直接映射成电路,非常直观。缺点是写法较为麻烦。第二种写法是最常见的写法,不仅是小梅哥,大多数人都是这种写法。第三种明德杨FPGA教程的写法,把加一条件和结束条件独立出来,非常方便使用。我这里为了保持一致把每一个数字都加了位宽,其实位宽是也是可以省略的。这样第三种写法甚至变成了一种模板:

always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt <= 0;endelse if(add_cnt)beginif(end_cnt)cnt <= 0;elsecnt <= cnt + 1;end
endassign add_cnt = 1;
assign end_cnt = add_cnt && cnt==x-1 ;

ref
https://www.cnblogs.com/xianyufpga/p/10908740.html
计数器用作分频及仿真
https://www.cnblogs.com/IClearner/p/7208871.html

Verilog 三种计数器写法相关推荐

  1. WPF之Binding的三种简单写法

    环境 类代码 public class Person:INotifyPropertyChanged { private string name; public string Name { get { ...

  2. JavaScript三种注释写法

    JavaSciprt注释不会被浏览器读取,会自动跳过,写注释对自己以后回过头来快速检查具有重要作用,写注释时尽量要写简明详细,下面来说一下注释的基本的三种方式 这是看的书上的(主要没见过第三种,其实第 ...

  3. Java中线程的三种匿名内部类写法

    public class Demo01 { public static void main(String[] args) { new Thread() {//1public void run() {} ...

  4. Excel vba引用工作表的三种写法

    文章介绍vba引用工作表名称的三种不同写法. vba引用工作表是我们在学习VBA过程中很常用. 本文提供三种vba引用工作表的代码,通过这三种方式都可以实现vba引用工作表名. 方法一:Sheets( ...

  5. CSS三种写法的优先级

    在HTML文件中引入CSS样式有三种方法: 外部样式:通过link标签引入CSS样式: 内页样式:写在HTML页面里面的style标签里面: 行内样式:写在对应标签的style属性里面. 我知道一般情 ...

  6. verilog实现二进制计数器,约翰逊(Johnson)计数器,环形计数器

    https://github.com/zsylov/verliog-study/blob/master/2019.5.6%E8%AE%A1%E6%95%B0%E5%99%A8.md 用verilog实 ...

  7. verilog 有限状态机的基本概念和三种写法介绍

    "硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的 ...

  8. JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式

    JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...

  9. 七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果)

    七种计数器总结 一.可复位/置数计数器 1.1 可复位/置数计数器 1.2 Verilog代码 1.3 Testbench 1.4 仿真结果 二.双向(可加可减)计数器 2.1 双向(可加可减)计数器 ...

最新文章

  1. 你和区块链的距离就差这篇文章!
  2. Eclipse如何导入maven项目,以及配置maven
  3. Protobuf在Unity中的通讯使用
  4. windows 下远程登录ubuntu服务器--realVNC
  5. 因果推断 - 反事实
  6. 上传图片之上传前判断文件格式与大小
  7. WebView无法自动播放h5的video视频标签解决办法
  8. QMarkDowner编译
  9. 【做题记录】人类智慧
  10. “Python字符串index()方法应用案例”文末三道思考题答案
  11. js 高级 constructor构造函数
  12. button组件 untiy_Unity自定义Button组件Transition
  13. 二进制编译安装mysql(centos6、7)和源码编译bind
  14. 一款非常优秀的内存数据库——lmdb
  15. TINA仿真系列之555定时器
  16. topic是短语还是句子_词组、短语、句子--Unit 3 Topic 3
  17. Crackme之Acid burn.exe
  18. 记一次修改开源1078音视频服务器兼容粤标音视频的变更
  19. C语言判断字符是否为数字 如果是输出yes 如果为字母 则大写转换小写 小写转换大写
  20. DeprecationWarning: count is deprecated. Use Collection.count_documents instead

热门文章

  1. VMware-重要设置-虚拟网络编辑器
  2. 使用Asponse.cells生成图片如何去掉水印
  3. 2021年山东省安全员C证新版试题及山东省安全员C证免费试题
  4. 太极图正确画法_道教知识:太极图的正确画法
  5. Oracle中如何记录访问数据库的登录信息?
  6. 蜡模精确成型在浇注中的实验性研究
  7. 13 MATLAB 三维图形绘制
  8. 银河麒麟系统FT2000 ARM64平台源码编译grub2并制作启动U盘 引导启动长城UF716笔记本
  9. HJ95 人民币转换
  10. IMPERVA - WAF syslog配置及注意事项