Verilog 三种计数器写法
时钟周期 频率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 三种计数器写法相关推荐
- WPF之Binding的三种简单写法
环境 类代码 public class Person:INotifyPropertyChanged { private string name; public string Name { get { ...
- JavaScript三种注释写法
JavaSciprt注释不会被浏览器读取,会自动跳过,写注释对自己以后回过头来快速检查具有重要作用,写注释时尽量要写简明详细,下面来说一下注释的基本的三种方式 这是看的书上的(主要没见过第三种,其实第 ...
- Java中线程的三种匿名内部类写法
public class Demo01 { public static void main(String[] args) { new Thread() {//1public void run() {} ...
- Excel vba引用工作表的三种写法
文章介绍vba引用工作表名称的三种不同写法. vba引用工作表是我们在学习VBA过程中很常用. 本文提供三种vba引用工作表的代码,通过这三种方式都可以实现vba引用工作表名. 方法一:Sheets( ...
- CSS三种写法的优先级
在HTML文件中引入CSS样式有三种方法: 外部样式:通过link标签引入CSS样式: 内页样式:写在HTML页面里面的style标签里面: 行内样式:写在对应标签的style属性里面. 我知道一般情 ...
- verilog实现二进制计数器,约翰逊(Johnson)计数器,环形计数器
https://github.com/zsylov/verliog-study/blob/master/2019.5.6%E8%AE%A1%E6%95%B0%E5%99%A8.md 用verilog实 ...
- verilog 有限状态机的基本概念和三种写法介绍
"硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的 ...
- JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式
JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...
- 七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果)
七种计数器总结 一.可复位/置数计数器 1.1 可复位/置数计数器 1.2 Verilog代码 1.3 Testbench 1.4 仿真结果 二.双向(可加可减)计数器 2.1 双向(可加可减)计数器 ...
最新文章
- 你和区块链的距离就差这篇文章!
- Eclipse如何导入maven项目,以及配置maven
- Protobuf在Unity中的通讯使用
- windows 下远程登录ubuntu服务器--realVNC
- 因果推断 - 反事实
- 上传图片之上传前判断文件格式与大小
- WebView无法自动播放h5的video视频标签解决办法
- QMarkDowner编译
- 【做题记录】人类智慧
- “Python字符串index()方法应用案例”文末三道思考题答案
- js 高级 constructor构造函数
- button组件 untiy_Unity自定义Button组件Transition
- 二进制编译安装mysql(centos6、7)和源码编译bind
- 一款非常优秀的内存数据库——lmdb
- TINA仿真系列之555定时器
- topic是短语还是句子_词组、短语、句子--Unit 3 Topic 3
- Crackme之Acid burn.exe
- 记一次修改开源1078音视频服务器兼容粤标音视频的变更
- C语言判断字符是否为数字 如果是输出yes 如果为字母 则大写转换小写 小写转换大写
- DeprecationWarning: count is deprecated. Use Collection.count_documents instead