Verilog设计之状态编码

Verilog设计之状态编码

时序机需要多个触发器来表示状态,还需给每一个状态分配唯一的二进制码。

状态编码决定了保存状态所需要的触发器数量,它会影响状态机的下一状态和输出组合逻辑的复杂程度。

状态分配方案

将码值分配给状态机各状态的任务称为状态分配状态编码

分配方案的数量随状态个数呈指数规律增长,除简单的状态机外,要想例举所有的方案是不现实的,综合工具内嵌了各种算法以寻找优化的状态分配方案。

设计者也可以采取手动方式进行状态编码的分配。手动分配状态编码通常有以下几条原则:

  1. 如果对于某个给定的输入,两个状态会跳转到相同的下一状态,则给他们分配相邻的码字
  2. 对相邻的状态分配相邻的码字
  3. 对于某个给定的输入具有相同输出的装填,分配相邻的码字

这些原则可以简化用于输出和下一状态功能的组合逻辑,但并不保证一定是最简。

常见的状态分配编码

在一个有限状态机中,触发器的数量必须足以用二进制形式来表示状态的数量。

例如,一个具有8种状态的状态机至少需要三个触发器,状态使用二进制数表示。

设计者可以选择手动方式,也可以使用综合工具来优化状态分配。当然,状态机的设计也可以不用通用的综合工具,而由装用的状态机设计工具及其配套的优化器来完成。下表列除了几种常见读状态分配编码。
在这里插入图片描述

如果设计者完成了状态分配,综合工具则把状态机当作一个普通的随机逻辑来对待,而不会再去寻找更优化的分配方式。

存储位数量

一个有N种状态的的状态机至少需要log2N个触发器来存储状态编码,但实际可能更多。

例如,有64个状态的状态机至少需要8个触发器来存储状态编码。

使用BCD码的状态机通过简单地将状态码加1来得到下一状态的编码。它使用的触发器最少,单用于译码的下一状态和输出的组合逻辑却不一定是最优的。

当状态数大于16时,二进制码将导致相对规模较大的状态转移逻辑,其速度也比采用其他编码的方式慢。

Gray码与二进制编码所需的位数相同,其特点是两个相邻编码仅有一个位不同,这可以减少电路中的噪声。

Johnson码也是有同样的特点,但是要用更多的位数。

减少中间状态过渡时间

相邻码间仅有一位不同的编码,可以减少相邻物理信号同时变化的情况,从而减少电路串扰的可能

在实际硬件操作中发生状态变化时,这些编码能减少通过中间状态的过渡时间。

中间过渡态的问题主要是由状态寄存器中的触发器不同步变化所引起的。

当状态转移时有多位发生改变,且这些位不在同一时刻变化,则状态寄存器就会出现一个暂时的中间状态,这可能产生不希望的结果。

One-Hot编码

One-Hot编码(高电平有效逻辑,对应的低电平有效的逻辑成为One-Cold编码)是一种流行的设计方法,他使用的触发器数目相对较多,实际上每个状态都采用一个触发器来表示。

在One-Hot状态机中,因为只需要对寄存器中的单个位进行译码,而不是矢量译码,所以它的译码逻辑比较简单

One-Hot状态编码比其他编码方式使用了更多的触发器,但它的状态跳转和输出译码逻辑更简单(更少的级数)。当设计中加入更多的状态时,One-Hot机的译码逻辑不会变的更加复杂。因此,状态机的速度不会受制于状态译码的时间。

One-Hot状态机速度更快,且额外的触发器占用的晶片面积可被译码电路节省的面积所抵消。

修改One-Hot设计也非常容易,因为增加或去除一个状态不会影响到其余状态的编码。

同样,由于不需要对状态转移表进行编码,因此设计工作量减少了,只要有状态转移图就足够了。

使用case语句来描述One-Hot编码可能与使用if语句来描述产生不同的结果。case语句隐含着要对所有位进行判断,而仅检测单个位的if语句可能生成更加单的译码逻辑。

FPGA中的状态编码

One-Hot编码通常不是最佳的状态编码,但它会在某些应用中却很有优势。

例如,可编程逻辑(如FPGA)具有固定数量的触发器和组合逻辑资源,这时节约资源并没有必然的好处。

在第8章将要讨论到的Xilinx结构中,可配置的逻辑块(CLB)使用查找表来实践组合逻辑。当译码逻辑所需要的资源大于单个CLB时,必须使用更多的CLB来实现。

而更好的方法是使用One-Hot编码来减少状态机所用的CLB数量,同时减少CLB间互连资源的使用。

One-Hot编码比二进制编码更可靠,因为它使用较少的位来实现状态转移。然而,在大型状态机中One-Hot编码将会有多个未用状态,需要使用比其他编码方法更多的寄存器(在寄存器资源充足的FPGA中这个不是问题)。

对于状态数大于32的状态机,建议使用Gray编码,以方便它比One-Hot编码需要的触发器更少,另一方面它比二进制编码更可靠。

注意

注意,如果一个状态编码没有覆盖所有码值,那么需要附加的逻辑来检查不消状态,并从无效状态中恢复。这种跳转是不应该发生的,而可能是由于噪声将状态机带入了无效状态。状态机应该具有从无效状态中恢复并重新运行的能力。这种附加逻辑会影响实现设计所需的总(电路)面积。

参考书籍

《Verilog HDL数字设计与综合(第二版)》

猜你喜欢

转载自blog.csdn.net/sinat_31206523/article/details/109701936