HDLBits网址:https://hdlbits.01xz.net/wiki/Main_Page
移位寄存器是产生信号和序列的常用设备,它分为线性和非线性两大类。其中,线性反馈移位寄存器(linear feedback shift register, LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。
线性反馈移位寄存器的应用包括生成伪随机数,伪随机噪声序列,快速数字计数器,还有扰频器。线性反馈移位寄存器在硬件和软件方面的应用都非常得普遍。循环冗余校验中用于快速校验传输错误的数学原理,就与线性反馈移位寄存器密切相关。
The following diagram shows a 5-bit maximal-length Galois LFSR with taps at bit positions 5 and 3. (Tap positions are usually numbered starting from 1). Note that I drew the XOR gate at position 5 for consistency, but one of the XOR gate inputs is 0.
看图设计,直接贴码
module top_module(
input clk,
input reset, // Active-high synchronous reset to 5'h1
output [4:0] q
);
always@(posedge clk) begin
if(reset)
q <= 5'h1;
else begin
q <= {q[0],q[4],q[3]^q[0],q[2:1]};
end
end
endmodule
Build a 32-bit Galois LFSR with taps at bit positions 32, 22, 2, and 1.
与上面的原理一样,代码如下:
module top_module(
input clk,
input reset, // Active-high synchronous reset to 32'h1
output [31:0] q
);
always@(posedge clk) begin
if(reset) q <= 32'h1;
else begin
q <= {q[0],q[31:23],q[22]^q[0],q[21:3],q[2]^q[0],q[1]^q[0]};
end
end
endmodule
建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,做公众号的目的就是记录自己的学习过程,很多东西回过头来可能就忘记了,为了记住知识和分享知识,希望自己可以保持更新,有兴趣的朋友可以关注一下!