13-设计可综合状态机的指导原则

发布时间:2024年01月17日

设计可综合状态机的指导原则

一、注意:

1,大多数FPGA内部的触发器数目相当多,又加上独热码状态机的译码逻辑最为简单,所以在设计采用FPGA实现的状态机时,往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。
2,设计异步状态机。如果设计要求必须有不同的时钟触发的状态机,采用方法:
(1)编写另一个模块,在那个模块内使用另一个时钟;
(2)用实例引用的方法在另一个模块中把它们连接起来。
(3)为使设计比较简单、调试比较容易,应该尽量使这两个状态机的时钟有一定的关系;例如甲模块的时钟是乙模块时钟同步计数器的输出。
3,千万不要使用综合工具来设计异步状态机。因为目前大多数综合工具在对异步状态机进行逻辑优化时会胡乱地简化逻辑,使综合后的异步状态机不能正常工作。

二、综合的一般原则:

1,综合之前一定要进行仿真,这是因为仿真会暴露逻辑错误。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。
2,每一次布局布线之后都要进行仿真,在器件编程或流片之前要做最后的仿真。
3,用Verilog HDL描述的异步状态机是不能综合的,因此应该避免用综合器来设计;如果一定要设计异步状态机,则可用电路图输入的方法来设计。
4,如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。

三、语言指导原则:

1,always块:
(1)每个always块只能有一个事件控制“@(event-expression)”,而且要紧跟在always关键字的后面。
(2)always块可以表示时序逻辑或者组合逻辑;但不建议使用always块既表示电平敏感的透明锁存器又同时表示组合逻辑,虽然always块这样使用不会有语法错误,但是这容易产生电路功能的错误和多余电平敏感的透明锁存器。
(3)带有posedge或negedge关键字的事件表达式表示沿触发的时序逻辑,没有posedge或negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两种都表示。
(4)每个表示时序always块只能由一个时钟跳变沿触发,置位或复位最好也由该时钟跳变沿触发。
(5)每个在always块中赋值的信号都必须定义成reg型或整型。
整型变量默认是32位,使用Verilog操作符可对其进行二进制求补的算术运算。综合器还支持整型变量的范围说明,这样就允许产生不是32位的整型量。句法结构是:integer [ : ]。
(6)always块中应该避免组合反馈回路。
每次执行always块时,在生成组合逻辑的always块中赋值的所有信号必须有明确的值;否则,需要设计者在设计中加入电平敏感的锁存器来保持赋值前的最后一个值。只有这样,综合器才能正常生成电路,如果不这样做,综合器会发出警告,提示设计中插入了锁存器。如果在设计中存在综合器认为不是电平敏感锁存器的组合回路时,综合器会发出错误信息(例如在设计异步状态机时)。

四、对上述原则的简化解释:

用always块设计纯组合逻辑电路时,在生成组合逻辑的always块中参与赋值的所有信号都必须有明确的值,即在赋值表达式右端参与赋值的信号都必须在always@(敏感电平列表)中列出。如果赋值表达式右端参与赋值的信号没在always@(敏感电平列表)中列出,这就会形成一个透明的锁存器。但是,该信号的变化不会立刻显现出来,而必须等到敏感电平列表中某个信号变化时,它的作用才会显现出来,也就是相当于存在着一个透明锁存器,即把该信号的变化暂存起来,待敏感电平列表中某个信号变化再起作用,纯组合逻辑不可能做到这一点。
这样,综合后所得的电路已经不是纯组合逻辑电路了,这时综合器又会发出警告,提示设计中插入了锁存器。

1,

2,

3,

文章来源:https://blog.csdn.net/qq_21952195/article/details/135656018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。