Verilog

您所在的位置:网站首页 低码和高码的区别 Verilog

Verilog

2023-12-10 20:49| 来源: 网络整理| 查看: 265

博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------

 

在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个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。虽然使用较多的触发器,但由于状态译码简单,可减少组合逻辑且速度较快, 这种编码方式还易于修改,增加状态或改变状态转换条件都可以在不影响状态机的其它部分的情况下很方便地实现。另外,它的速度独立于状态数量。与之相比,压缩状态编码在状态增加时速度会明显下降。

二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消。

为了进一步提高独热编码的速度,可以使用并行 CASE语句"即在case(1‘b1) 后添加综合器可以辨认的并行CASE注释语句。注意:并行CASE 只推荐在独热编码时使用,在二进制编码和格雷编码时使用有时反而会增大面积降低速度。

在CPLD中,由于器件拥有较多的地提供组合逻辑资源,所以CPLD多使用二进制编码或格雷码,而FPGA更多地提供触发器资源,所以在FPGA中多使用独热码编码。当然,这并不是说在FPGA中就非得用独热编码,在CPLD中不能用独热编码,一般的,对于小型设计(状态数小于4)使用二进制编码,当状态数处于4-24之间时,宜采用独热码编码,而大型状态机(状态数大于24)使用格雷码更高效。

 

在设计状态机时有几种状态编码方法:二进制,格雷码(gray)和独热码(one hot code)。

独热格雷二进制4'b00014'b00004‘b00004'b00104'b00014’b00014'b01004'b00114‘b00104'b10004'b00104’b0011

格雷码:相邻之间只变1bit,编码密度高。 独热码:任何状态只有1bit为1,其余皆为0,编码密度低。 比如说,表示4个状态,那么状态机寄存器采用格雷码编码只需要2bit:00(S0),01(S1),11(S2),10(S3); 采用独热码需要4bit:0001(S0),0010(S1),0100(S2),1000(S3)。所以很明显采用格雷码可以省2bit寄存器。

难理解的是,为什么独热码更节省组合逻辑: 其实很简单,

例一: 假如我们要在代码中判断状态机是否处于某状态S1, 对于格雷码的状态机来说,代码是这样的:assign S1 = (STATUS==2'b01); 对于独热码来说,代码是这样的就行:assign S1=STATUS[1]; 所以独热码的译码非常简单。

 

例二: 考虑最简单的跳变,当A为1时,状态机会从S0跳到S1:。 采用格雷码写: STATUS[1:0]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3