参考连接:添加链接描述
运算基础:模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。
使最大输出序列长度为2N-1的不可约多项式称为LFSR的本原多项式,本原多项式产生的寄存器序列为M序列。
`timescale 1ns/1ps module 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 begin rstn=1; clk=1; #20 rstn =0; #20 rstn =1; end always #(perd/2) clk =~clk; always @(posedge clk or negedge rstn) begin if(~rstn) begin o_out<=3'b101; end else begin //o_out<={
r1,r0,r1^r2}; o_out<={
o_out[1],o_out[0],o_out[1]^o_out[2]}; end end endmodule
测试和计算一样;

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220570.html原文链接:https://javaforall.net
