上篇文章介绍了信号编码的作用和一些编码的原理,这篇文章继续看几种编码;
64b/66b:这种编码和之前的8b/10b不太一样了,是将64bit的序列变为66bit,只在序列前边添加了2bit的同步头,然后再对后边的序列进行扰码;
同步头分为01和10两种,00和11表示错误,01表示后边全是数据,而10表示后边是数据和控制信息的混合,如下图:
10后边的第一个字节为后边的序列类型,涵盖了后边的数据和控制信号的混合情况,S是数据开始位,T是数据结束位,S只能在D0字节或者D4字节,T可以在任意字节;
这种编码的关键在扰码,扰码是对原序列进行重新排列的一种运算,由移位寄存器和异或运算组成,目的是拆散连续的0和1,尽量使生成的数据序列随机化;
扰码器由移位寄存器和异或运算组成,下面看一下三个寄存器的异或运算:
上图(网上找的)就演示了三个移位寄存器的扰码运算,进行异或运算的是X2、X3两个寄存器,输入寄存器的初始值为111,扰码后,为11100101...
一个设置良好的扰码器,可以有效地打散原序列中的连0和连1,生成比较随机的序列;
64b/66b采用的扰码器为:X58 X39 1
这种编码有一定的直流平衡能力,但是效率很高;
128b/130b:这种编码和64b/66b类似,在128bit的序列前边加2bit同步头,01和10,在PCIE3.0中,01表示接下来的数据为order set类型数据,10表示接下来的数据是非order set数据,总之,这两个bit用作特殊字符,此编码的关键也是对后边的数据进行扰码,扰码器和扰码规则根据不同协议规定而定;
例如PCIE3.0的扰码器如下:
USB3.0的扰码器如下:
USB4.0的扰码器如下:
可见,只要速率差不多,不同协议的扰码器也大致相同,毕竟有专家已经计算好了一组合适的组合;
64/66b和128/130b这种编码主要靠扰码进行码型序列的随机排布,和之前的8/10b的映射表不同,这种编码的DC平衡能得到一定的保证,最主要的是编码效率极高;
PRBS:Pseudo random binary sequence,即伪随机码,和扰码器是一个东西,由移位寄存器和异或运算组成,进行异或运算的寄存器称为taps,寄存器的初始值称为seed;
PRBS码型有一定的规律,比如PRBS5,则可由此推断出,此随机码序列共有2^5-1个bit组成,而且最长连1的bit数为5,最长连0的bit数为4,PRBS码不会出现全是0的情况,这样不管怎么进行异或运算,最后都还是0;
ADS仿真软件中使用的PRBS为:
所以PRBS码有一定的规律,PRBSn,n的值越大,整个序列越长,随机程度越大,同时连续出现1和0的长度也越长,因此在一些高速的串行信号(如QSFP28 25Gserdes)的一致性测试中就采用了PRBS31来暴露通道的缺点,这个要根据实际信号来选择;
在一些一致性测试和仿真中都是用的PRBS码模拟实际数据序列,这对眼图、抖动等都有一定的影响,因此要选择合适PRBS码;
下篇文章为大家介绍常用协议的一致性测试码型;