LFSR(斐波那契大战伽罗瓦)
线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成。其主要应用在:伪随机数,伪噪声序列,计数器,BIST,数据的加密和CRC校验等。
Part.1
线性反馈移位寄存器(LFSR)主要包括两大类:斐波那契(外部LFSR),又称many-to-one;伽罗瓦(内部LFSR),又称one-to-many。
如下图(模2的多项式:x8+x6+x4+1):
Part.2
抽头(tap):影响线性反馈寄存器下一个状态的比特位叫做抽头,抽头的设定会决定线性反馈寄存器最大的输出序列长度,抽头通常用有限域算数中模2的多项式来表示(例如模2的多项式为:x8+x6+x4+1)。
通常N bits的线性反馈寄存器能产生最长的不重复序列为2N-1。因为当所有寄存器的输出为全零状态时,线性反馈寄存器陷入死循环,故Nbit的线性反馈寄存器的输出状态有2N-1。
抽头的位置会影响LSFR的最大输出状态的个数,例如:3bit的抽头为【3,2】会产生7个状态(多项式对应为:x3+x2+1),若抽头为【3,1】会产生2个状态(多项式对应为:x3+x+1)。
当N bits下,抽头的设定产生的最大输出序列长度为2N-1时,此时对应的模2多项式为本原多项式,能达到最长序列的多项式不是唯一的。下表为不同的bits下,抽头的设定(对应不同的本原多项式)和最大的输出状态个数关系表。
Part.3
上面提到N bits的LFSR能产生最大输出状态的个数为2N-1,N越大,随机性就越大。如果输出状态包括全零的状态,最大输出状态的个数可达到2N,那么通过对LFSR做如下图的修改,即如果检测到Q[7]-Q[0]输出状态为全零时,经过~|Q[6:0]^Q[7]逻辑运算后输出的结果为1,进而保证线性反馈寄存器不会陷入死循环中,此处的死循环意思是指输出状态总保持全0或者全1,LFSR本身是可以无限循环的。需要说明的是,最后一位必须参与反馈。与此同时,对于斐波那契线性反馈移位寄存器,若采用异或反馈,全0为非法状态,若采用同或反馈,全1为非法状态,不管是斐波那契还是伽罗瓦TFSR,为避免非法,种子可选取全1或全0之外的组合。
Part.4
在实际的应用中,例如crc的校验,会用到模2的多项式的运算,遵循如下的计算原则:
Part.5
其主要应用在:伪随机数,伪噪声序列,计数器,BIST,数据的加密和CRC校验等。
伪随机数:前面已经提到,LFSR最多可产生2^N-1个序列,这些序列之间看似是随机产生的,之所以称之为伪随机,是因为这些数是通过具体的关系式产生,而非像random()这样产生真正的随机数,且最终会实现循环。
伪噪声序列用于扰码和解码:
- 什么是加扰(scrambler)?
所谓加扰是将源数据流与一个随机序列异或后,再发送出去,异或操作完成后的数据流基本是伪随机的。
Scranbker的主要作用就是通过“加扰”的方法消减EMI噪声,所谓加扰是将源数据流与一个随机序列异或后,再发送出去。此时被发出的数据流也基本是伪随机的,从而降低了发送数据时产生的EMI噪声。 - 异或使用的随机序列是如何产生的?
以PCIE 为例,PCIE总线通过一个16位线性反馈移位寄存器(Linear Feedback Shift register, LFSR),产生为随机序列,该移位寄存器的表达式如下所示:
G(x)=X16+X5+X4+X3+1
该公式是一个本原多项式(具有最大周期的不可以约多项式),使用该公式可以产生一个周期为216-1的伪随机序列。对应的,由本预案多项式作为生成多项式所产生的LFST序列为最大周期序列。这些序列一般被称为m-序列,在m-序列中“0”和“1”所占的比例相对均衡,但是1的个数比0的个数多1,因为全0不能作为初始值,,也不可能是中间状态。
源数据流与这个伪随机序列中的字符流进行异或操作,从而称为一个相对较为随机的字符流,从而降低了数据流的EMI噪声。 - 什么是解扰(de-scrambler)?
PCIE数据发送端有加扰,数据接收端也有解扰操作,解扰与加扰使用相同的公式,必须完全同步,即LFSR使用相同的初始值。在PCIE链路的两端,该初始值为0xFFFF。PCIE链路两端设计每次加解扰一个8b数据后,LFSR进行8次移位操作。
LFSR计数器:
优点:传统的二进制计数器用复杂的或大扇入逻辑产生进位信号,LFSR以牺牲二进制计数序列为代价,用相当简单的结构与逻辑实现很高的速度(逻辑资源少,速度高),这种移位寄存器又称为伪随机序列发生器;LFSR计数器的计数序列就是伪随机序列,
缺点:LFSR的缺点是本原形式必须初始化为有效状态,计数序列不是通常的递增或递减,这样就不易预测,而且某些场合二进制计数器更加适用。
数据加密的原理跟扰码器和解扰器一样,没懂请看上文分解。
检错与纠错看我的另外一篇博文<检错码与纠错码,一码归一码>里。
哈姆雷特,请保持前行!