第七章 有限状态机和可综合风格的Verilog HDL
----------------------------------------------------------------------------------------------------------------------
第七章 有限状态机和可综合风格的Verilog HDL
前言
由于Verilog HDL和 VHDL 行为描述用于综合的历史还只有短短的几年,可综合风格的Verilog HDL 和
VHDL的语法只是它们各自语言的一个子集。又由于HDL的可综合性研究近年来非常活跃,可综合子集的
国际标准目前尚未最后形成,因此各厂商的综合器所支持的HDL子集也略有所不同。本教材中有关可综
合风格的Verilog HDL的内容,我们只着重介绍RTL级、算法级和门级逻辑结构的描述,而系统级(数
据流级)的综合由于还不太成熟,暂不作介绍。由于寄存器传输级(RTL)描述是以时序逻辑抽象所得
到的有限状态机为依据的,所以把一个时序逻辑抽象成一个同步有限状态机是设计可综合风格的
Verilog HDL模块的关键。在本章中我们将通过各种实例由浅入深地来介绍各种可综合风格的Verilog
HDL模块,并把重点放在时序逻辑的可综合有限状态机的Verilog HDL设计要点。至于组合逻辑,因为
比较简单,只需阅读典型的用Verilog HDL描述的可综合的组合逻辑的例子就可以掌握。为了更好地掌
握可综合风格,还需要较深入地了解阻塞和非阻塞赋值的差别和在不同的情况下正确使用这两种赋值
的方法。只有深入地理解阻塞和非阻塞赋值语句的细微不同,才有可能写出不仅可以仿真也可以综合
的Verilog HDL模块。只要按照一定的原则来编写代码就可以保证Verilog模块综合前和综合后仿真的
一致性。符合这样条件的可综合模块是我们设计的目标,因为这种代码是可移植的,可综合到不同的
FPGA和不同工艺的ASIC中,是具有知识产权价值的软核。
7.1.有限状态机
有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态
所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向
哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。
(这里指的是米里Mealy型有限状态
机,而莫尔Moore型有限状态机究竟转向哪一状态只决于当前状态。)
在Verilog HDL中可以用许多种方法来描述有限状态机,最常用的方法是用always语句和case语句。下
面的状态转移图表示了一个有限状态机,例1的程序就是该有限状态机的多种Verilog HDL模型之一:
Idle
Start
Stop
Clear
A/G=0 !A
A/F=1
!Reset /F=0 G=0
!Reset /F=0 G=0
!Reset | !A/F=0 G=1
图7.1 状态转移图
!Reset /F=0 G=0
114