我根据1中的抽头写了一个32位LFSR。我想问一下,对于32位LFSR和抽头32、22、2和1,下面的描述是否正确。
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
endmodule1
发布于 2016-01-14 01:48:18
看起来没问题。您也可以使用XOR,而不是XNOR,只要您重置为其他值( XOR版本锁定在全0,XNOR锁定在全1)。
对于许多应用程序,伪随机输出是您移出的单个位(在本例中为31),而不是整个寄存器。它也是(更多?)通常向右移位,并将XOR数据放在最高位,并使用位0输出作为PR数据。
您的代码是明确的SystemVerilog,而不是Verilog,所以我删除了Verilog标记。
https://stackoverflow.com/questions/34745086
复制相似问题