2016-10-18 18 views
0

LFSRから64ビット出力を取得しようとしています。私はネットでコードを見つけ、それを64ビット編集しました。しかし、私は出力を得ていません。Verilogで64ビットLFSR出力

module LFSR8_8E(reset_, clock, q, lfsr_to); 
    input clock, reset_; 
    output [63:0] q, lfsr_to; 

    reg [63:0] LFSR; 
    wire lfsr_to; 
    assign lfsr_to = (LFSR == 64'h9C69832196724182); 

    always @(posedge clock or negedge reset_) 
    begin 
    if (!reset_) LFSR[63:0] <= 64'h0000000000000000; 
     else 
    begin 
    if (lfsr_to) LFSR[63:0] <= 64'h0000000000000000; 
    else 
    begin 
    LFSR[63:63] <= LFSR[62:62]^LFSR[61:61]; 
    LFSR[62:62] <= LFSR[61:61]^LFSR[60:60]; 
    LFSR[61:61] <= LFSR[60:60]^LFSR[59:59]; 
    LFSR[60:60] <= LFSR[59:59]^LFSR[58:58]; 
    LFSR[59:59] <= LFSR[58:58]; 
    LFSR[58:58] <= LFSR[57:57]; 
    LFSR[57:57] <= LFSR[56:56]; 
    LFSR[56:56] <= LFSR[55:55]; 
    LFSR[54:54] <= LFSR[53:53]; 
    LFSR[53:53] <= LFSR[52:52]; 
    LFSR[52:52] <= LFSR[51:51]; 
    LFSR[51:51] <= LFSR[50:50]; 
    LFSR[49:49] <= LFSR[48:48]; 
    LFSR[48:48] <= LFSR[47:47]; 
    LFSR[47:47] <= LFSR[46:46]; 
    LFSR[46:46] <= LFSR[45:45]; 
    LFSR[45:45] <= LFSR[44:44]; 
    LFSR[44:44] <= LFSR[43:43]; 
    LFSR[43:43] <= LFSR[42:42]; 
    LFSR[42:42] <= LFSR[41:41]; 
    LFSR[41:41] <= LFSR[40:40]; 
    LFSR[39:39] <= LFSR[38:38]; 
    LFSR[38:38] <= LFSR[37:37]; 
    LFSR[37:37] <= LFSR[36:36]; 
    LFSR[36:36] <= LFSR[35:35]; 
    LFSR[35:35] <= LFSR[34:34]; 
    LFSR[34:34] <= LFSR[33:33]; 
    LFSR[33:33] <= LFSR[32:32]; 
    LFSR[32:32] <= LFSR[31:31]; 
    LFSR[31:31] <= LFSR[30:30]; 
    LFSR[29:29] <= LFSR[28:28]; 
    LFSR[28:28] <= LFSR[27:27]; 
    LFSR[27:27] <= LFSR[26:26]; 
    LFSR[26:26] <= LFSR[25:25]; 
    LFSR[25:25] <= LFSR[24:24]; 
    LFSR[24:24] <= LFSR[23:23]; 
    LFSR[23:23] <= LFSR[22:22]; 
    LFSR[22:22] <= LFSR[21:21]; 
    LFSR[21:21] <= LFSR[20:20]; 
    LFSR[29:29] <= LFSR[28:28]; 
    LFSR[28:28] <= LFSR[27:27]; 
    LFSR[27:27] <= LFSR[26:26]; 
    LFSR[26:26] <= LFSR[25:25]; 
    LFSR[25:25] <= LFSR[24:24]; 
    LFSR[24:24] <= LFSR[23:23]; 
    LFSR[23:23] <= LFSR[22:22]; 
    LFSR[22:22] <= LFSR[21:21]; 
    LFSR[21:21] <= LFSR[20:20]; 
    LFSR[20:20]<= LFSR[19:19]; 
    LFSR[19:19] <= LFSR[18:18]; 
    LFSR[18:18] <= LFSR[17:17]; 
    LFSR[17:17] <= LFSR[16:16]; 
    LFSR[16:16] <= LFSR[15:15]; 
    LFSR[15:15] <= LFSR[14:14]; 
    LFSR[14:14] <= LFSR[13:13]; 
    LFSR[13:13] <= LFSR[12:12]; 
    LFSR[12:12] <= LFSR[11:11]; 
    LFSR[11:11] <= LFSR[10:10]; 
    LFSR[10:10]<= LFSR[9:9]; 
    LFSR[9:9] <= LFSR[8:8]; 
    LFSR[8:8] <= LFSR[7:7]; 
    LFSR[7:7] <= LFSR[6:6]; 
    LFSR[6:6] <= LFSR[5:5]; 
    LFSR[5:5] <= LFSR[4:4]; 
    LFSR[4:4] <= LFSR[3:3]; 
    LFSR[3:3] <= LFSR[2:2]; 
    LFSR[2:2] <= LFSR[1:1]; 
    LFSR[1:1] <= LFSR[0:0]; 
    LFSR[0:0] <= LFSR[63:63]; 
    end 
    end 
    end 

    assign q = LFSR; 
    endmodule 

FPGAの64入力回路を駆動するために64ビット出力を取得しようとしています。 私はLFSRを省略したコードを合成します。

[シンセ8から3332]順序素子(LFSR_reg [63])は未使用であり、モジュールLFSR8_8Eから削除されます。(このような63以上)

この作業を取得する方法を任意のアイデア。それが正しく機能するためにアドバンス

SIMULATION

答えて

0

初期値やLFSRの種子で

おかげで非常に重要です。上記の設計では、LFSRレジスタにリセット値または '0'を割り当てます。 「0」の初期値では、各クロックエッジにおいて、XOR演算によって計算されるLFSRの新しい値も「0」となる。従って、LFSRは常に「0」の値を有する。

合成ツールはコードを解析し、コード内のどの操作もLFSRレジスタの値を変更しないことを確認します。したがって、LFSRレジスタ全体がトリミングされるため、警告が表示されます。[Synth 8-3332]

LFSRの値は、すべて0になるべきではありません。リセット値を64'hffff_ffff_ffff_ffffに変更すると、LFSRは正しく動作します。

変更されたコードは次のとおりです。私が指摘したいと思い

module LFSR8_8E(reset_, clock, q, lfsr_to); 
    input clock, reset_; 
    output [63:0] q; 
    output lfsr_to; 

    reg [63:0] LFSR; 
    wire lfsr_to; 

    assign lfsr_to = (LFSR == 64'h9C69832196724182); 

    always @(posedge clock or negedge reset_) 
    begin 
    if (!reset_) 
     LFSR[63:0] <= 64'hffff_ffff_ffff_ffff; 
    else if (lfsr_to) 
     LFSR[63:0] <= 64'hffff_ffff_ffff_ffff; 
    else 
    begin 
     LFSR[63:0] <= {(LFSR[62]^LFSR[61]), 
        (LFSR[61]^LFSR[60]), 
        (LFSR[60]^LFSR[59]), 
        (LFSR[59]^LFSR[58]), 
        LFSR[58:0], 
        LFSR[63]}; 
    end 
    end 

    assign q = LFSR; 
endmodule 

もうひとつは、LFSRは、最大長LFSRであれば、条件

else if (lfsr_to) 
     LFSR[63:0] <= 64'hffff_ffff_ffff_ffff; 

が必要ではないということです。 LFSRレジスタは自動的に初期値にロールオーバします。コードを見ると、私はLFSR多項式が最大長を生成しないと考えています。あなたは、外部信号に基づいてLFSRを無効にする必要がある場合は、ここで https://www.edaplayground.com/x/5NpK

EDAの遊び場にあなたのデザインのシミュレーションをチェックWikipedia

に標準LFSR多項式のいくつかを見てしたいことがあり 変更されたコードはhttps://www.edaplayground.com/x/n7Qにあります。

+0

ありがとうございました。ウェブで私は64ビットLFSRの64,63,62,61ビットをタップする必要があることを発見しました。また、私はVerilogやこのようなものを初めて知り、知識はほとんどありません。私はこのlfsrを使ってベンチマークコードを動かしたいと思っています。だから私は基本的に64ビット出力を与えるlfsrを設計したい。私はコードを変更しました –

+0

@EmilyBlake私が提供したコードは、ほとんどまたはまったく変更することなく使用することができます。上記の答えでEDAの遊び場のリンクをたどると、私が設計をテストするために使ったテストベンチが表示されます。 – Prashant

+0

@prasantリセット信号が高い間にLFSRをディセーブルする方法はありますか? 2つのLFSRが一緒に動作する必要があり、1つはいつか無効にする必要があります –

関連する問題