|
1.设计可综合的状态机的指导原则:
(1)采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。
(2)建议采用case,casex或casez语句来建立状态机的模型,因为这样语句表达清晰,可以方便的从当前的状态分支转向下一个状态并设置输出。
(3)不要忘记在写上case语句的最后一个分支default,并将状态变量设为'bx,这就告知综合器(case语句已经指定了所有的状态)。
(4)一个always块中只有一个事件触发的状态机。
(5)把异步触发电路转化成同步触发电路。
2.综合的一般原则:
(1)综合前一定要进行仿真。
(2)每一次布线之后都要进行仿真。
(3)不要用Verilog描述异步状态机,如果一定要设计异步状态机可以用电路图的输入方式在设计。
(4)如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。
3.语言指导原则
(1)always块
1)每个always块只能有一个事件控制“@(event-expression)”,并且要紧跟在always关键字的后面。
2)always块可以表示时序逻辑或者组合逻辑,也可以用always块即表示电平敏感的透明锁存器又同时表示组合逻辑,但不推荐使用这种描述方法。
3)带有posedge或negedge关键字的事件表示沿触发的的时序逻辑。否则表示组合逻辑电路或电平敏感的锁存器,或者两种都表示。他们之间用“or”连接。
4)每个表示时序always块只能由一个时钟跳变沿触发,置位或复位最好也由该时钟沿触发。
5)每个在always块赋值的信号都必须定义为reg型或整型。
6)always块中应该避免组合反馈回路。
(2)赋值
1)对一个寄存器型和整型变量给定位的赋值,只允许在一个always块内进行。
2)把某一信号赋为'bx,综合器就把它解释成无关状态,因而综合器为其生成的硬件电路最简洁。
4.状态机的置位与复位
(1)状态机的异步置位与复位
异步置位与复位是与时钟无关的。当异步置位与复位来到时它们就立即置位或复位。
(2)状态机的同步置位与复位
同步置位与复位是指只有在时钟的有效跳变沿时刻置位或复位。不要把SET和RESET信号列入事件控制表达式中。