Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则
因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。建议采用case语句来建立状态机的模型,因为这些语句表达清晰明了,可以方便的由当前状态转向下一个状态并设置输出。记得:不要忘记在case语句的最后写上default分支,并将状态设置为'bx这就等于告诉综合器case语句已经指定了所有的状态。这样综合器就可以删除不必要的译码电路使生成的电路简洁。
如果将默认的状态设置为某一确定值的状态可不可以呢?
这样会导致,虽然综合器产生的逻辑和设置default:state=’bx;相同,但是状态机的Verilog模型综合前和综合后的仿真结果不一致。因为启动仿真器时,状态机的所有状态都不确定,因此立即进入default状态。这时便会导致开始的状态为state1,但是实际的硬件电路在通电以后,进入的状态是不确定的,很可能不是state1的状态,因此'bx更切合实际一些。但是再有多余状态的情况下,可以通过哦综合指令(高级教程)将默认状态设置为某一确定的有效状态,因为这样能够使得状态机在偶然进入多余状态后,仍能在下一时钟跳变沿返回正常工作状态,否则引起死锁。
目前大多数综合其往往不支持在一个always快中由多个事件触发的状态机(隐含状态机,implicit state machine),为了能综合出有效的电路,用Verilog描述的状态机应明确的由唯一时钟触发。如果比需要用到不同时钟触发的状态机,可以采用以下程序:编写另一个模块,并采用第二种时钟触发;然后用适中调用的方法再领一个模块中将它们连接起来。为了使设计更简单,调试更加容易,通常使得两个状态机的周期由一定的关系。
在Verilog中状态必须明确赋值,使用参数parameter和define都可以实现:
参数定义:parameter state1=2'0,state2=2'1;
...
current_state=state1;
宏定义:`define state1=2'b0,state2=2'b1;
....
current_state=`state2;
语言指导原则:
1)always块
(1)每个always块只能有一个事件控制@(event-control),而且要紧跟在always关键词后面。
(2)always块可以表示时序逻辑或者组合逻辑,也可以同时表示透明锁存器和组合逻辑,但是不建议使用,因为可能产生不希的透明锁存器。
(3)带有posedge和negedge关键词的事件表达式代表边沿触发的时序逻辑,没有这两种关键词的表示组合逻辑或者点评敏感的锁存器,如果有多个沿和电平,期间必须用or隔离。
(4)每个在always中复制的信号都必须定义成reg型或整型。整形变量默认位32位,可以对整形变量的范围进行规定,如 integer [7:0]amm;
(5)always块中应避免组合反馈回路。每个表示时序的always块只能有一个时钟沿跳变触发,置位和复位信号最好也由该时钟触发。
在用always块设计纯组合逻辑网络时,在生成组合逻辑的always中参与复制的所有信号都必须有明确的值,即在赋值表达式右边赋值信号必须都在always的敏感列表中列出。如果某一变量没有出现在变量列表中,那么在综合时将会该信号隐含的产生一个透明锁存器,这是因为该信号的变化并不能改变赋值的变化,而要先把该信号的变化存起来,等到敏感列表中的其他值发生变化时再起作用,纯组合逻辑不能做到这一点。这样综合后的电路就不是纯组合电路了,这时综合器会发出警告,提示设计插入了锁存器。见下例:
1 input a,b,c;
2 reg e,d;
3 always @(a or b or c)
4 begin
5 e=d&a&b;
6 /*因为d没有在敏感列表中列出,多以d变化时,e不能立刻变化,必须等到a或b或c变化时才体现出来。这就是说实际上相当于存在一个电平敏感的透明锁存器在起作用,把d的信号变化锁存在其中*/
7 d=e|c;
8 end
2)赋值
(1)对一个寄存器变量(reg)和整型(integer)变量给定位的赋值,只允许在一个alawys块内进行,如果在另一个always块中也赋值,这是非法的。
(1)把一个信号的值赋值为'bx,综合器就把他解释成无关状态,因而综合器为其生成的硬件电路最简洁。
Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则的更多相关文章
- Verilog学习笔记设计和验证篇(二)...............同步有限状态机
上图表示的就是数字电路设计中常用的时钟同步状态机的结构.其中共有四个部分产生下一状态的组合逻辑F.状态寄存器组.输出组合逻辑G.流水线输出寄存器组.如果状态寄存器组由n个寄存器组成,就可以记忆2^n个 ...
- Verilog学习笔记设计和验证篇(五)...............层次化事件队列
详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为 ...
- Verilog学习笔记设计和验证篇(一)...............总线和流水线
总线 总线是运算部件之间数据流通的公共通道.在硬线逻辑构成的运算电路中只要电路的规模允许可以比较自由的确定总线的位宽,从而大大的提高数据流通的速度.各个运算部件和数据寄存器组可以通过带有控制端的三态门 ...
- Verilog学习笔记设计和验证篇(四)...............状态机的置位与复位
1)状态机的异步置位和复位 异步置位与复位是于时钟无关的.当异步置位或复位信号来临时,他们立即分别置触发器的输出为1或0,不需要等待时钟沿的到来.要将他们列入always块的事件控制信号内就能触发al ...
- Verilog学习笔记简单功能实现(三)...............同步有限状态机
在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...
- Deep Learning(深度学习)学习笔记整理系列之(三)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记看另一篇吧】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3975 Solved: 2421[Submit][Stat ...
- Shiro:学习笔记(1)——身份验证
Shiro——学习笔记(1) 1.核心概念 1.Shiro不会自己去维护用户.维护权限:这些需要我们自己去设计/提供:然后通过相应的接口注入给Shiro.2.应用代码直接交互的对象是Subject,也 ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
随机推荐
- [原]quick集成spine动画
更新说明: 新增了骨骼绑定node用法 参考:http://blog.csdn.net/n5/article/details/21795265 在SkeletonRenderer.h 和cpp里面新加 ...
- Android之线程回掉更新ui
一:工作线程中的回掉更新UI public class MainActivity extends AppCompatActivity { private int i; private Callback ...
- windows7 中开启无线热点
我用的是移动的 CMCC-EDU 上网,但是这个只能在一个设备上登陆,那么问题就来了,当我电脑需要用网,手机也想要用网(不用 2/3/4G)该怎么办? 电脑操作系统:windows7 接下来是开启 w ...
- Auto CAD 2013的故障解决方法
一.问题的提出 Auto CAD 2013在使用过程中出现了错误:“安全系统(软件锁许可管理器) 不起作用或未正确安装.” 二.问题的分析 网络上很多地方转载了这么一个方法: 1) 启动Windows ...
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- 拼音 名字 排序 a-z的比较 ( sortUsingComparator )
NSMutableArray * array = [NSMutableArrayarrayWithObjects:@"ad",@"az",@"ac&q ...
- sql server还原数据库bak文件
RESTORE DATABASE CCC FROM DISK = 'AAA.bak' with replace, MOVE 'BBB' TO 'C:\Program Files\Microsoft ...
- JS中style属性
解决办法:1.先定义一个CSS规则,然后this.className=''2.document.getElementByIdx_x("a").style.cssText=" ...
- CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
转载自 http://laowafang.blog.51cto.com/251518/1364298 1.说明: ssh无密码用户远程登录,一直以来使用是debian操作系统,对用户目录权限要求没有关 ...
- 利用Cydia Substrate进行Android HOOK(二)
在前面关于Substrate的介绍中我们已经讲了用Substrate hook java代码,现在我们讲下怎么用它hook native代码.hook native代码我们需要编写Substrate ...