在设计状态机时有几种状态编码方法:二进制,格雷码(gray)和独热码(one hot code)。
独热 格雷 二进制
4'b0001 2'b00 2‘b00
4'b0010 2'b01 2’b01
4'b0100 2'b11 2‘b10
4'b1000 2'b10 2’b11
one hot,独热嘛,一看就明白,就是只有一位是高电平。独热码 使用的触发器较多,但可减少实现状态机的组合逻辑数目,减少复杂性,提高系统的速度,即工作时钟频率可以做到最高。格雷码是使用最小数目的触发器来编码状态机,但形成的组合逻辑比较复杂。
使用独热码编码时,会出现很多未使用的状态,而使用二进制编码和格雷码编码时,如果状态机的状态数不是2的指数次方时,也会出现未使用状态。
格雷码每个相邻的状态切换只有一个bit的信号跳变,适用于异步握手的情况,比如异步FIFO的指针计数。