在Verilog中,编码方式选择至关重要。常用编码包括二进制、格雷码及独热码。二进制和格雷码在压缩状态时发挥显著作用。格雷码相邻状态间仅一位变化,有效降低状态转换毛刺并节省功耗。二进制编码则为连续变化的码元值,适用于状态连续的场景。格雷码相邻码元间差异仅一位,如S0=3'b000, S1=3'b001, S2=3...
二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。虽然在需要表示同样的状态数时,独热编码占用较多的位,也就是消耗较多的触发器,但这些额外触发器占用的面积可与译码电路省下来的面积相抵消...
1)采用格雷码: 在ISE中,综合后,得到的RTL Schematic: 2)采用独热码: 程序和上面的几乎一样,只需要改下,各个状态对应的编码值即可,还有最后的default:state 《= Idle; 还是给出程序吧: 上面两个程序的主要不同点是状态编码,2)采用了独热编码,而1)则采用Gray码,究竟采用哪一种编码好要看具体情况而定。对于...
1)采用格雷码: 在ISE中,综合后,得到的RTL Schematic: 2)采用独热码: 程序和上面的几乎一样,只需要改下,各个状态对应的编码值即可,还有最后的default:state 《= Idle; 还是给出程序吧: 上面两个程序的主要不同点是状态编码,2)采用了独热编码,而1)则采用Gray码,究竟采用哪一种编码好要看具体情况而定。对于...
独热码适合写条件复杂但是状态少的状态机; 格雷码适合写条件不复杂但是状态多的状态机。 另一位大牛只说了一句话,但很有启发: 因为,独热码实际上相当于已经译码过后的信号。 把数电书翻出来看看3-8译码器,看看译码以后的信号长什么样。 那我把3—8译码器的真值表给出来,确实如此。
所以独热码的译码非常简单。 例二: 考虑最简单的跳变,当A为1时,状态机会从S0跳到S1:。 采用格雷码写: STATUS[1:0] <= (STATUS==2'h00) & A ? 2'h01 : 2'h00; 采用独热码写: STATUS[1] <= STATUS[0] & A; 有人怀疑这里的逻辑,认为只check独热码的一个bit有问题。当然是没问题的,0110...