线性移位寄存器LFSR电路设计
module LFSR
(
input clk,
input rst_n,
output out
);
reg [9:0] q=10'b1010101010;
wire tap = q[2]^q[9];
assign out = q[9];
always @ (posedge clk,negedge rst_n)
if(!rst_n)
q <= 10'b1010101010;
else
q <= {q[8:0],tap};
endmodule

将LFSR赋初始值1010101010,最低为q0=q2 xor q9,输出为最高位q9;
测试程序如下:
`timescale 1 ns/1 ns module LFSR_tb(); localparam T=20; // clock period reg clk,rst_n; wire out; LFSR LFSR_tb ( .clk(clk), .rst_n(rst_n), .out(out) ); always begin clk = 1'b1; #(T/2); clk = 1'b0; #(T/2); end initial begin rst_n = 1'b1; #(T/2); rst_n = 1'b1; #(100*T); $stop; end endmodule
功能和时序仿真结果如下:


测试文件如下:
`timescale 1 ns/1 ns module LFSR_tb(); localparam T=20; // clock period reg clk,rst_n; wire out; LFSR LFSR_tb ( .clk(clk), .rst_n(rst_n), .out(out) ); always begin clk = 1'b1; #(T/2); clk = 1'b0; #(T/2); end initial begin rst_n = 1'b0; #(T/2); rst_n = 1'b1; #(100*T); $stop; end endmodule
功能和时序仿真如下:


路漫漫其修远兮,吾将上下而求索
浙公网安备 33010602011771号