参考连接:添加链接描述
运算基础:模2运算;
线性反馈移位寄存器用于产生可重复的伪随机序列PRBS,该电路由n级除法器和异或门组成;
在k阶段,寄存器存在初值,(Rn-1, … R1, R0),称为seed
在k+1阶段,寄存器的值变为:
*k+1阶段
Rn-1 = Rn-2
Rn-2 = Rn-3
…
R0 = f(R1, R2, …, Rn-1) = (Rn-1gn)⊕(Rn-2gn-1)⊕…⊕(R0*g1)g0
也就是说寄存器存储的结果 (Rn-1, … R1, R0) 每个时钟周期改变一次,其中R1-Rn-1是位移产生,R0是线性反馈函数 f(Rn-1, … R1, R0) 产生,所以称为线性反馈移位寄存器。
线性反馈移位寄存器总是假定g0,gn为1,否则 (Rn-1, … R1, R0) 将在n个周期后恒定为0。
抽头和特征多项式:
f(Rn-1, … R1, R0) = (Rn-1gn)⊕(Rn-2gn-1)⊕…⊕(R0*g1)*g0 可以用多项式表示为:
G(x)=gnxn+gn-1xn-1+…+g1x+g0
G(x)称为LFSR的特征多项式
影响线性反馈寄存器下一个状态的 gi = 0 或1叫做抽头,抽头的设定会决定线性反馈寄存器存储的结果 (Rn-1, … R1, R0) 的变化规律。
通常N位的线性反馈寄存器最多有 2N 个不同的状态。但是如果出现初值为N个0的情况,线性反馈寄存器陷入死循环,要排除掉。所以N位线性反馈寄存器能产生最长的不重复序列为 2N-1。
抽头的位置会影响LSFR的最大输出状态的个数
例如:3位的抽头为(g3, g2, g1, g0) = (1, 1, 0, 1)会产生7个状态(多项式对应为:G(x)=x3+x2+1)
若抽头为(g3, g2, g1, g0) = (1, 0, 1, 1),会产生2个状态(多项式对应为:x3+x+1)。
使最大输出序列长度为2N-1的不可约多项式称为LFSR的本原多项式,本原多项式产生的寄存器序列为M序列。
当N位下,本原多项式不是唯一的。下表为不同的位下的本原多项式:
3阶线性反馈移位寄存器实例:
上图为3阶线性反馈移位寄存器
抽头为(g3, g2, g1, g0) = (1, 1, 0, 1)
多项式对应为:G(x)=x3+x2+1
线性反馈函数R0 = f(R2, R1, R0) = R1⊕R2
初始值为SEED = (R2, R1, R0) = (1, 0, 1)
3阶线性反馈移位寄存器周期为7:
k周期 (R2, R1, R0)
0 (1, 0, 1)
1 (0, 1, 1)
2 (1, 1, 1)
3 (1, 1, 0)
4 (1, 0, 0)
5 (0, 0, 1)
6 (0, 1, 0)
7 (1, 0, 1)
通过设定seed和抽头,LFSR最多可产生2N-1个序列,这些序列之间看似是随机产生的,之所以称之为伪随机,是因为这些数是通过具体的关系式产生,最终会实现循环。
上代码:
LSFR_3
`timescale 1ns/1psmodule LSFR_3(//input wire clk,//input wire rstn,//output wire [2:0] o//{r2,1,r0});reg clk;reg rstn;reg [2:0] o_out;parameter perd = 20;initial beginrstn=1;clk=1;#20 rstn =0;#20 rstn =1;endalways #(perd/2) clk =~clk;always @(posedge clk or negedge rstn) beginif(~rstn) begino_out<=3'b101;endelse begin//o_out<={r1,r0,r1^r2};o_out<={o_out[1],o_out[0],o_out[1]^o_out[2]};endendendmodule
测试和计算一样;