Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
2011-11-07 15:38
239 查看
一般的,在Verilog中最常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码。
二进制码和格雷码是压缩状态编码。 若使用格雷编码,则相邻状态转换时只有一个状态位发生翻转,这样不仅能消除状态转换时由多条状态信号线的传输延迟所造成的毛刺,又可以降低功耗。
二进制编码也可称连续编码,也就是码元值的大小是连续变化的。如S0=3'd0,S1=3'd1,S2=3'd2,S3=3'd3....
格雷码的相邻码元值间只有一位是不同的,如S0=3'b000,S1=3'b001,S2=3'b011,S3=3'b010....
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。虽然使用较多的触发器,但由于状态译码简单,可减少组合逻辑且速度较快, 这种编码方式还易于修改,增加状态或改变状态转换条件都可以在不影响状态机的其它部分的情况下很方便地实现。另外,它的速度独立于状态数量。与之相比,压缩状态编码在状态增加时速度会明显下降。
独热码值每个码元值只有一位是'1',其他位都是'0',如S0=3'b001,S1=3'b010,S2=3'b100
二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。
为了进一步提高独热编码的速度,可以使用并行 CASE语句"即在case(1‘b1) 后添加综合器可以辨认的并行CASE注释语句。注意:并行CASE 只推荐在独热编码时使用,在二进制编码和格雷编码时使用有时反而会增大面积降低速度。
在CPLD中,由于器件拥有较多的地提供组合逻辑资源,所以CPLD多使用二进制编码或格雷码,而FPGA更多地提供触发器资源,所以在FPGA中多使用独热码编码。当然,这并不是说在FPGA中就非得用独热编码,在CPLD中不能用独热编码,一般的,对于小型设计(状态数小于4)使用二进制编码,当状态数处于4-24之间时,宜采用独热码编码,而大型状态机(状态数大于24)使用格雷码更高效。
二进制码和格雷码是压缩状态编码。 若使用格雷编码,则相邻状态转换时只有一个状态位发生翻转,这样不仅能消除状态转换时由多条状态信号线的传输延迟所造成的毛刺,又可以降低功耗。
二进制编码也可称连续编码,也就是码元值的大小是连续变化的。如S0=3'd0,S1=3'd1,S2=3'd2,S3=3'd3....
格雷码的相邻码元值间只有一位是不同的,如S0=3'b000,S1=3'b001,S2=3'b011,S3=3'b010....
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。虽然使用较多的触发器,但由于状态译码简单,可减少组合逻辑且速度较快, 这种编码方式还易于修改,增加状态或改变状态转换条件都可以在不影响状态机的其它部分的情况下很方便地实现。另外,它的速度独立于状态数量。与之相比,压缩状态编码在状态增加时速度会明显下降。
独热码值每个码元值只有一位是'1',其他位都是'0',如S0=3'b001,S1=3'b010,S2=3'b100
二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。
为了进一步提高独热编码的速度,可以使用并行 CASE语句"即在case(1‘b1) 后添加综合器可以辨认的并行CASE注释语句。注意:并行CASE 只推荐在独热编码时使用,在二进制编码和格雷编码时使用有时反而会增大面积降低速度。
在CPLD中,由于器件拥有较多的地提供组合逻辑资源,所以CPLD多使用二进制编码或格雷码,而FPGA更多地提供触发器资源,所以在FPGA中多使用独热码编码。当然,这并不是说在FPGA中就非得用独热编码,在CPLD中不能用独热编码,一般的,对于小型设计(状态数小于4)使用二进制编码,当状态数处于4-24之间时,宜采用独热码编码,而大型状态机(状态数大于24)使用格雷码更高效。
相关文章推荐
- Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
- Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
- 常用计数器的verilog实现(binary、gray、one-hot、LFSR、环形、扭环形)
- python 中one—hot 三种编码方式
- Verilog基础知识11(异步FIFO为什么使用格雷码(gray-code) )
- python类别变量(class_label)转换为One_Hot的几种方式
- 对python sklearn one-hot编码详解
- 二维码-可以识别的code(官网实现了的编码方式)
- 递归生成格雷码 gray code generation using recursion(c++)
- UCS-2与UTF8之间的选择(4)--linux中各编码字符串的C/C++输出支持及方式比较
- Gray Code & One_hot encoding
- 机器学习之离散型特征处理--独热码(one_hot_encoding)
- 数据库选择编码方式(GBK、UTF-8)
- one-hot编码(独热编码)
- Verilog--二进制编码到格雷码的转换
- 条码编码方式-----Code 39与code 128条形码的区别
- Spark MLlib特征处理:OneHotEncoder OneHot编码 ---原理及实战
- 处理离散型特征和连续型特征共存的情况 归一化 论述了对离散特征进行one-hot编码的意义
- One-hot 编码/TF-IDF 值来提取特征,LAD/梯度下降法(Gradient Descent),Sigmoid
- LeetCode Gray Code 格雷码