计数器的原理,设计及verilog实现

若计数器由n个触发器组成,则计数器的位数为n,所能计数的最大模数为2的n次幂。以下为同步二进制加法计数器电路;

驱动方程:状态图

状态方程(此时的Q0,Q1为上一次状态值):

下例是同步4位2进制计数器的设计:该计数器具有异步清零,同步置数的功能,具有时钟端:clk;置数端:s;清零端:r;使能端:en;置数端: d[3:0];输出端:q [3:0];进位端:co。

module counter(clk,co,q,r,s,en,d);
input clk,r,s,en;  // 时钟,清零端,置数端,使能端
input[3:0] d; // 置数输入端
output co;  // 进位端
output[3:0] q; // 计数输出端
reg[3:0] q;  //4  位的计数寄存器
reg co;  //1  位进位寄存器
always@(posedge clk)  // 时钟上升沿触发
if(r) // 判断清零端是否为 1
begin q=0;end // 是的话把计数寄存器清 0
else
begin
if(s) // 判断置数端是否为 1
begin q=d;end// 是的话把置数输入端的值赋予计数寄存器
else
if(en)  // 判断使能端是否为 1
begin
q=q+4‘b1;  // 是的话 q  自加 1
if(q==4‘b1111) // 判断 q  是否计满
begin co=1;end  // 是的话进位端置 1
else
begin co=0;end  // 否的话进位端置 0
end
else
begin  q=q;end //  q  保持原值
end
endmodule

时序仿真图:

在编程时关于阻塞赋值和非阻塞赋值注意点:

1.阻塞赋值操作用“=”,阻塞是指在在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是后面的语句必须等到当前的赋值语句执行完毕才能执行。赋值时实时的,计算完后面的马上赋值给左边的,然后再执行下一句,操作是串行的,且在一个always内完成。从理论上讲,它与后面的赋值语句只有概念上的先后,而无实质上的延迟。

always@(posedge clk)
begin
x=next_x;
y=x;
end

当执行”x=next_x“,x会立即到next_x,而下一句y=x之后执行,由于两条语句没有延迟(为导线),导致”y=next_x”。

2.非阻塞赋值用<=表示,非阻塞是指在进程语句中,当前的赋值不会阻断其后的语句,在进入进城后,所有的非阻塞语句同时赋值。

当执行“x<=next_x”时,并不会阻断“y<=x”的执行。因此语句”y<=x”中的x的值与语句“x<=next_x”的值不同,语句”x<=next_x”中的x的值是D触发器经过一个同步脉冲后的输出值,“y<=x”的x是第一个D触发器的初值。

综上总结即是:阻塞赋值是按需执行,非阻塞赋值是并行执行。

在verilog编程中,谨记以下八条原则:

1) 时序电路建模时,用非阻塞赋值。

2) 锁存器电路建模时,用非阻塞赋值。

3) 用always块建立组合逻辑模型时,用阻塞赋值。

4) 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。

5) 在同一个always块中不要既用非阻塞赋值又用阻塞赋值。

6) 不要在一个以上的always块中为同一个变量赋值。

7) 用$strobe系统任务来显示用非阻塞赋值的变量值

8) 在赋值时不要使用 #0 延迟

Tips:1.在always块内部的每一个信号都必须定义成寄存器类型;

2.if else的使用

if (表达式1)语句1;

else if (表达式2)语句2;

else if (表达式3)语句3;

….

else 语句n;

3.在每个always块里,必须要有begin…end。其他如if…else,case的分支语句,超过一句的也都要有begin…end.

时间: 2024-08-05 01:13:38

计数器的原理,设计及verilog实现的相关文章

从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理

从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理 作者:naaoveGI-    文章来源:http://www.cnblogs.com/naaoveGIS/    点击数:2453    更新时间:2014-9-12 摘要:前面我不厌其烦的给大家说了很多本节的题外话,现在言归正传,我们开始这个系列中的第一个问题,地图比例尺换算原理.想要从底层实现瓦片的显示,我们首先必须了解瓦片本身.我们用arcgis切完图后,打开发布的服务或者打开config

从底层谈WebGIS 原理设计与实现(一):开篇

从底层谈WebGIS 原理设计与实现(一):开篇 作者:naaoveGI-    文章来源:http://www.cnblogs.com/naaoveGIS/    点击数:4773    更新时间:2014-9-12 摘要:我相信大家对百度地图,谷歌地图等相关应用已经是非常熟悉了.通过这些应用,我们可以浏览地图.定位我们自己的位置.查找我们想知道的兴趣点.搜索交通路线等等.而其实,这些功能便是WebGIS的一些最基本的功能.那么什么是WebGIS呢,说到这里,我还是首先给大家讲讲什么是GIS.

全数字锁相环(PLL)的原理简介以及verilog设计代码

随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁相环的直流零点漂移.器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向. 所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路. 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,

[每日电路图] 2、红外遥控电路原理设计与解析【转+解读】

          楼主说:本文主要讲一个红外遥控电路的原理及设计,第四部分是重点,用电路图说明具体过程——接收,计数,满足条件触发控制电路! from elecfans:http://www.elecfans.com/article/88/131/198/2015/20151215394306.html 一.概述: 红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波:红外接收电路由红外接收二极管.三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器.

数据库系统原理设计--论坛系统

论坛信息管理系统 摘要:随着科学技术的发展,基本上全部的具有一定数量数据的机构都 開始使用计算机数据库来管理.现现在网络盛行,BBS 论坛已成为人们生活 中的一种信息交流渠道,它通过在计算机上执行服务软件.同意用户使用终端 程序通过电话调制解调器拨号或者 Internet 来进行连接,运行下载数据或程 序.上传数据.阅读新闻.与其它用户交换消息等功能. 本文主要介绍利用 SQL Sever 2008 作为设计工具,理解并运用课程中关 于数据库设计的相关理论,依照设计流程要求完毕完整的论坛信息管理

明德扬至简设计法--verilog综合器和仿真器

Verilg是硬件描述语言,顾名思义,就是用代码的形式描述硬件的功能.而我们最终是要在电路上实现该功能的.当Verilog描述出硬件功能后,我们需要综合器对Verilog代码进行解释,将代码转化成实际的电路来表示,最终实际的电路,我们称之为网表.这种将Verilog代码转成网表的工具,就是综合器.上图左上角是一份verilog代码,该代码描述了一个加法器功能.该代码经过综合器解释后,转化成一个加法器电路.QUARTUS.ISE和VIVADO都是综合器,集成电路常用的综合器是DC. 我们在FPGA

MySQL计数器表的设计

如果应用在表中保存计数器,则在更新计数器时可能碰到并发问题.计数器表在web应用中非常常见.可以用这个表缓存一个用户的朋友书.文件下载次数等.创建一张独立的表存储计数器是一种非常好的做法,这样可以使计数器表小并且快.使用独立的表可以帮助避免查询缓存失效.如下面这个例子: 假设有一个计数器表,只有一行数据,记录网站的点击次数. CREATE TABLE hit_counter( cnt int unsigned not null ) ENGINE=InnoDB; 网站的每次点击都会导致对计数器的更

一致性哈希算法原理设计

原文出处: 知致智之   欢迎分享原创到伯乐头条 一.前言 一致性哈希(Consistent Hashing),最早由MIT的Karger于1997年提出,主要用于解决易变的分布式Web系统中,由于宕机和扩容导致的服务震荡.现在这个算法思路被大量应用,并且在实践中得到了很大的发展. 二.算法设计 1.问题来源 一个由6台服务器组成的服务,每台Server负责存储1/6的数据,当Server1出现宕机之后,服务重新恢复可用时的场景. 如下表格可以很清楚的看到,当Server1宕机时,Hash1的服

Java泛型的内部原理设计泛型的好处

分享一些工作的经验:不存在脱离业务的技术.所有新技术都是为了解决一些业务痛点,让特定业务更爽. 当我们掌握足够多的技术,在遇到问题时就可以选择适合的技术进行解决.反之,如果没有技术储备,就会手足无措,又或者说选择一些不太恰当的技术进行解决,最终都会走一些弯路.踩一些坑.走弯路.踩坑固然是所有项目都会遇到的一个问题,一个人走弯路.踩坑也许不是什么大问题,但整个项目走弯路,这个最终苦的还是我们这些技术人员. 技术储备至关重要,不论是团队还是个人.有了足够的技术储备,才可以游刃有余,做到胸有成竹,遇到