我根据[1]中的抽头编写了一个32位LFSR。我想问下面的描述是否适用于带有抽头32,22,2和1的32位LFSR。
module lfsr (
input logic clk_i,
input logic rst_i,
output logic [31:0] rand_o
);
logic[31:0] lfsr_value;
assign rand_o = lfsr_value;
always_ff @(posedge clk_i, negedge rst_i) begin
if(~rst_i) begin
lfsr_value <= '0;
end else begin
lfsr_value[31:1] <= lfsr_value[30:0];
lfsr_value[0] <= ~(lfsr_value[31] ^ lfsr_value[21] ^ lfsr_value[1] ^ lfsr_value[0]);
end
end
endmodule
[1] http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
答案 0 :(得分:0)
看起来不错。你也可以使用异或,而不是XNOR,只要你重置为其他东西(XOR版本锁定在所有0&#39; s,XNOR在所有1&#39;)。
对于许多应用程序,伪随机输出是您移出的单个位(在您的情况下为31),而不是整个寄存器。向右移动也会(更多?)共同,并将XOR数据放在最高位,并使用位0输出作为PR数据。
您的代码特别是SystemVerilog,而不是Verilog,因此我删除了Verilog代码。