线性移位寄存器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
功能和时序仿真如下:
路漫漫其修远兮,吾将上下而求索