LFSR描述对吗?

时间:2016-01-12 13:32:18

标签: system-verilog

我根据[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

1 个答案:

答案 0 :(得分:0)

看起来不错。你也可以使用异或,而不是XNOR,只要你重置为其他东西(XOR版本锁定在所有0&#39; s,XNOR在所有1&#39;)。

对于许多应用程序,伪随机输出是您移出的单个位(在您的情况下为31),而不是整个寄存器。向右移动也会(更多?)共同,并将XOR数据放在最高位,并使用位0输出作为PR数据。

您的代码特别是SystemVerilog,而不是Verilog,因此我删除了Verilog代码。