2017-01-05 5 views
-1

どのようにwdata [((8 * j)+7)を書くことができます:(8 * i)] = $ random; Verilogプログラミング言語で?ここでiとjはreg型変数です。 Modelsimは、一定範囲変数に対してエラーを返します。私はそれをどのようにして適切な方法で書くことができますか?Verilogでのビットスライシング

答えて

0

を、より詳細な説明を見つけることができます。

ここには1つの解決策があります。それがあなたを助けることを願っています。

module temp(clk); 
    input clk; 
    reg i, j; 
    reg [23:0] register, select; 
    wire [23:0] temp; 

    initial 
    begin 
     i = 'd1; 
     j = 'd1; 
    end 

    generate 
    for(genvar i = 0; i<24; i++) 
    begin 
     assign temp[i] = select[i] ? $random : register[i]; 
    end 
    endgenerate 

    always @ (posedge clk) 
    begin 
     register <= temp; 
    end 

    always @ * 
    begin 
     select = (32'hffff_ffff << ((j<<3)+8))^(32'hffff_ffff << (i<<3)); 
    end 
endmodule 
+0

あなたのお手伝いがありがとうございます。 – Xeroxpop

+0

問題が解決した場合は、質問に答えを記入してください。 –

0

アレイスライシング構造を使用してください。あなたは、あなたが解決のための将来のハードウェアから考えなければならないArray slicing Q&A

bit [7:0] PA, PB; 
int loc; 

initial begin 
    loc = 3; 
    PA = PB;      // Read/Write 
    PA[7:4] = 'hA;    // Read/Write of a slice 
    PA[loc -:4] = PA[loc+1 +:4]; // Read/Write of a variable slice equivalent to PA[3:0] = PA[7:4]; 
end 

のVerilog 2001構文で

[M -: N] // negative offset from bit index M, N bit result 
[M +: N] // positive offset from bit index M, N bit result 
+0

ご協力ありがとうございます。 – Xeroxpop