2016-10-19 6 views
0

Ich habe ein 64-Bit-lfsr entworfen, aber ich denke, es zeigt nicht zufällig. Es ist eine Art regelmäßiges Muster. Kann jemand bitte meinen Code überprüfen und sehen ob er korrekt ist. (TAP 64,63,61,60)64-Bit-LFSR-Design

module lfsr (out, clk, rst); 

output reg [63:0] out; 
input clk, rst; 

wire feedback1,feedback2,feedback3; 

assign feedback1 = ~(out[63]^out[62]); 
assign feedback2 = ~(out[62]^out[60]); 
assign feedback3 = ~(out[60]^out[59]); 

always @(posedge clk, posedge rst) 
begin 
    if (rst) 
    out = 64'b0; 
    else 
    out = {out[60:0],feedback3,feedback2,feedback1}; 
    end 
endmodule 
+1

Verwenden Sie nicht blockierende Zuweisungen ('<=') in Ihrem Block always. – toolic

Antwort

1

Ihre Armaturen sind korrekt (64,63,61,60) für eine maximale Länge LFSR, aber Sie haben sie nicht richtig angeschlossen. Dies ist, was Sie brauchen:

module lfsr (out, clk, rst); 

    output reg [63:0] out; 
    input clk, rst; 

    wire feedback; 

    assign feedback = ~(out[63]^out[62]^out[60]^out[59]); 

    always @(posedge clk, posedge rst) 
    begin 
    if (rst) 
     out <= 64'b0; 
    else 
     out <= {out[62:0],feedback}; 
    end 

endmodule 

Siehe this playground, die für einen 6-tap LFSR implementiert ist, weil ein 64-tap LFSR eher eine lange Zeit zu simulieren nehmen würde.