所有关于电路
技术文章

比较二进制,灰色和单热编码

2021年1月5日通过爱德华多Corpeno

本文显示了使用二进制,灰色和单热编码来实现FPGA中的状态机的实现的比较。这些编码通常由合成和实施工具进行评估和应用,因此了解为什么软件制定这些决策是很重要的。

有限状态机(FSMS)是几乎每个数字系统的一个非常常见的一部分。这就是为什么综合工具经常检查代码以检测FSMS并执行可能修改状态编码的优化。如果您仔细选择和指定在源代码中实现状态的值并不重要,合成工具可以替换这些值,其中甚至可以具有与原始编码不同的比特长度的其他值。

如果您想温习一下在Verilog中实现状态机,您应该阅读我的文章在Verilog中创建有限状态机


状态编码:灰色、二进制和一热

FSM状态的三种最流行的编码是二进制、灰色和一热。

二进制编码

当您按顺序为状态赋值时,二进制编码是一种直观的方法。这样,您就可以使用尽可能少的比特来编码您的状态。

一个单热编码的例子。图像中史蒂夫asrar

灰色的编码

格雷码由一个序列组成,其中一个值和下一个值之间只有一位变化。除了也使用最小的比特数,如果状态序列是遵循最佳的,这种编码将最小化动态功耗。

灰色的代码轮。从图片玛丽global

在一个炎热的编码

最后,单热编码是使用一个比特表示每个状态,因此在任何时刻,一个状态将被编码为表示当前状态的比特中的1,以及所有其他比特中的0。由于所使用的比特数和过多的无效状态,这在一开始可能看起来不是很有效。然而,one-hot编码非常擅长简化触发器的刺激逻辑,因为不需要解码状态。的位美国。

一个单热编码的例子。图像中史蒂夫asrar

有关状态编码的更多信息,您可能想查看这篇文章在VHDL中编码有限状态机的状态由史蒂夫asrar。

哪种编码是最好的?

这是一个棘手的问题,主要是因为每种编码都有其优点和缺点,所以它归结为一个取决于大量因素的优化问题。

  • 如果一个非常简单的系统在不同编码之间产生非常相似的结果,那么原始编码是最好的选择。
  • 如果FSM在一条路径上循环它的状态(如计数器),那么灰色代码是一个非常好的选择。
  • 如果FSM有任意一组状态转换,或者期望在高频率下运行,那么可能采用单热编码。

现在,所有这些说法都是有根据的猜测,而找到最优状态分配是一个复杂的问题。因此,我的官方建议是让编译器为您决定。也就是说,我决定在三种不同的开发工具和三种不同的状态机上对这三种编码的结果进行比较。

在下一篇文章中,我们将讨论我的实验结果。

1评论