在高速链路测试中,我们常用的测试码型就是PRBS,即Pseudo-Random Binary Sequence,伪随机二进制序列。PRBS码常用的阶数有7、9、11、15、23、31,也就是我们常说的PRBS7、PRBS9、PRBS11、PRBS15、PRBS23、PRBS31等。PRBS码是由LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)产生的,因此可以根据前一个码型来确定下一个码型。
下面我们以PRBS7为例,介绍其逻辑运算实现原理。
PRBS7的对应的特征多项式为:
其LFSR为:
比如我们要产生64位宽的PRBS7[63:0],其LFSR就是:
可以得到如下的公式:
产生64bit位宽的PRBS7的公式就为:
可以使用Matlab或者Python计算。
使用Python计算代码如下:
import numpy as np
M=np.diagflat(np.ones(63),-1)
M[0,(5,6)]=1
M64=np.linalg.matrix_power(M,64)
M64=M64%2
M64只有前7列为非0值,其他的列都为0,取前9列。

结果就是:
偶数个同一比特异或后还是0,所以结果为:
所以可以将M64简化为M64%2,即对M64的每个元素进行模2取值。
最后PRBS7[63:0]的逻辑运算式就为:
prbs(0) <= prbs(2) ^ prbs(3) ^ prbs(5) ^ prbs(6) ;
prbs(1) <= prbs(0) ^ prbs(3) ^ prbs(4) ;
prbs(2) <= prbs(1) ^ prbs(4) ^ prbs(5) ;
prbs(3) <= prbs(2) ^ prbs(5) ^ prbs(6) ;
prbs(4) <= prbs(0) ^ prbs(3) ;
prbs(5) <= prbs(1) ^ prbs(4) ;
prbs(6) <= prbs(2) ^ prbs(5) ;
prbs(7) <= prbs(3) ^ prbs(6) ;
prbs(8) <= prbs(0) ^ prbs(4) ^ prbs(6) ;
prbs(9) <= prbs(0) ^ prbs(1) ^ prbs(5) ^ prbs(6) ;
prbs(10) <= prbs(0) ^ prbs(1) ^ prbs(2) ;
prbs(11) <= prbs(1) ^ prbs(2) ^ prbs(3) ;
prbs(12) <= prbs(2) ^ prbs(3) ^ prbs(4) ;
prbs(13) <= prbs(3) ^ prbs(4) ^ prbs(5) ;
prbs(14) <= prbs(4) ^ prbs(5) ^ prbs(6) ;
prbs(15) <= prbs(0) ^ prbs(5) ;
prbs(16) <= prbs(1) ^ prbs(6) ;
prbs(17) <= prbs(0) ^ prbs(2) ^ prbs(6) ;
prbs(18) <= prbs(0) ^ prbs(1) ^ prbs(3) ^ prbs(6) ;
prbs(19) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(4) ^ prbs(6) ;
prbs(20) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(3) ^ prbs(5) ^ prbs(6) ;
prbs(21) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(3) ^ prbs(4) ;
prbs(22) <= prbs(1) ^ prbs(2) ^ prbs(3) ^ prbs(4) ^ prbs(5) ;
prbs(23) <= prbs(2) ^ prbs(3) ^ prbs(4) ^ prbs(5) ^ prbs(6) ;
prbs(24) <= prbs(0) ^ prbs(3) ^ prbs(4) ^ prbs(5) ;
prbs(25) <= prbs(1) ^ prbs(4) ^ prbs(5) ^ prbs(6) ;
prbs(26) <= prbs(0) ^ prbs(2) ^ prbs(5) ;
prbs(27) <= prbs(1) ^ prbs(3) ^ prbs(6) ;
prbs(28) <= prbs(0) ^ prbs(2) ^ prbs(4) ^ prbs(6) ;
prbs(29) <= prbs(0) ^ prbs(1) ^ prbs(3) ^ prbs(5) ^ prbs(6) ;
prbs(30) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(4) ;
prbs(31) <= prbs(1) ^ prbs(2) ^ prbs(3) ^ prbs(5) ;
prbs(32) <= prbs(2) ^ prbs(3) ^ prbs(4) ^ prbs(6) ;
prbs(33) <= prbs(0) ^ prbs(3) ^ prbs(4) ^ prbs(5) ^ prbs(6) ;
prbs(34) <= prbs(0) ^ prbs(1) ^ prbs(4) ^ prbs(5) ;
prbs(35) <= prbs(1) ^ prbs(2) ^ prbs(5) ^ prbs(6) ;
prbs(36) <= prbs(0) ^ prbs(2) ^ prbs(3) ;
prbs(37) <= prbs(1) ^ prbs(3) ^ prbs(4) ;
prbs(38) <= prbs(2) ^ prbs(4) ^ prbs(5) ;
prbs(39) <= prbs(3) ^ prbs(5) ^ prbs(6) ;
prbs(40) <= prbs(0) ^ prbs(4) ;
prbs(41) <= prbs(1) ^ prbs(5) ;
prbs(42) <= prbs(2) ^ prbs(6) ;
prbs(43) <= prbs(0) ^ prbs(3) ^ prbs(6) ;
prbs(44) <= prbs(0) ^ prbs(1) ^ prbs(4) ^ prbs(6) ;
prbs(45) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(5) ^ prbs(6) ;
prbs(46) <= prbs(0) ^ prbs(1) ^ prbs(2) ^ prbs(3) ;
prbs(47) <= prbs(1) ^ prbs(2) ^ prbs(3) ^ prbs(4) ;
prbs(48) <= prbs(2) ^ prbs(3) ^ prbs(4) ^ prbs(5) ;
prbs(49) <= prbs(3) ^ prbs(4) ^ prbs(5) ^ prbs(6) ;
prbs(50) <= prbs(0) ^ prbs(4) ^ prbs(5) ;
prbs(51) <= prbs(1) ^ prbs(5) ^ prbs(6) ;
prbs(52) <= prbs(0) ^ prbs(2) ;
prbs(53) <= prbs(1) ^ prbs(3) ;
prbs(54) <= prbs(2) ^ prbs(4) ;
prbs(55) <= prbs(3) ^ prbs(5) ;
prbs(56) <= prbs(4) ^ prbs(6) ;
prbs(57) <= prbs(0) ^ prbs(5) ^ prbs(6) ;
prbs(58) <= prbs(0) ^ prbs(1) ;
prbs(59) <= prbs(1) ^ prbs(2) ;
prbs(60) <= prbs(2) ^ prbs(3) ;
prbs(61) <= prbs(3) ^ prbs(4) ;
prbs(62) <= prbs(4) ^ prbs(5) ;
prbs(63) <= prbs(5) ^ prbs(6) ;

