线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成。其主要应用在:伪随机数,伪噪声序列,计数器,BIST,数据的加密和CRC校验等。
线性反馈移位寄存器(LFSR)主要包括两大类
- 伽罗瓦(内部LFSR),又称one-to-many
- 斐波那契(外部LFSR),又称many-to-one
- 其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;这里的反馈系数决定了产生随机数的算法的不同。用反馈函数表示成
y = a0x^0 + a1x + a2x^2…,反馈函数为线性的叫线性移位反馈序列,否则叫非线性反馈移位序列。- Q1、Q2、Q3、Qn为LFSR的输出,M(x)是输入的码字多项式,如M(x)=x^4+ x^1+ 1,表示输入端的输入顺序为11001,同样,LFSR的结构也可以表示为多项式G(x),称为生成多项式:
G(x) = gn*x^n+ …+g1*x^1+ g0;
抽头选择与状态个数最大
- 影响线性反馈寄存器下一个状态的比特位叫做抽头,选取的“某些位”构成的序列叫做抽头序列,理论表明,要使LFSR得到最长的周期,这个抽头序列构成的多项式加1必须是一个本原多项式(所有系数的最大公因数为1的多项式),也就是说这个多项式不可约,如:
f(x) = x^4 + x + 1 - n个D触发器最多可以提供2^(n-1)个状态(不包括全0的状态),为了保证这些状态没有重复,gn的选择必须满足一定的条件。下面以n=3,g0=1,g1=1,g2=0,g3=1为例,说明LFSR的特性,具有该参数的LFSR结构如下图:
假设在开始时,D2D1D0=111(seed),那么,当时钟到来时,有:
D2=D1_OUT=1;
D1=D0_OUT^D2_OUT=0;
D0=D2_OUT=1;
即D2D1D0=101;同理,又一个时钟到来时,可得D2D1D0=001.……画出状态转移图如下:从图可以看出,正好有2^3-1=7个状态,不包括全0;
如果您理解了上图,至少可以得到三条结论:
1)初始状态是由SEED提供的;
2)当反馈系数不同时,得到的状态转移图也不同;必须保证gn===1,否则哪来的反馈?
3)D触发器的个数越多,产生的状态就越多,也就越“随机”;
- 抽头的位置会影响LSFR的最大输出状态的个数,例如:3bit的抽头为【3,2】会产生7个状态(多项式对应为:x3+x2+1),若抽头为【3,1】会产生2个状态(多项式对应为:x^3+x+1)。
当N bits下,抽头的设定产生的最大输出序列长度为2^N-1时,此时对应的模2多项式为本原多项式。下表为不同的bits下,抽头的设定(对应不同的本原多项式)和最大的输出状态个数关系表。
参考文章:
LFSR的工作原理以及LFSR在CRC上的应用;
线性反馈移位寄存器原理