2

modelSim で Verilog を使用していますが、別の reg 変数の別の部分に reg 変数を割り当てようとすると、次のエラーが発生します。

** Error: Range width must be greater than zero.
** Error: Range width must be constant expression.

関連するコードは次のとおりです。

 integer f; //zd, qd, R and Q are regs

    always @ * begin 
    f = 52 - zd; 
    R = qd[f +:0]; 
    Q = qd[63 -:f+1]; 
    end

Rにqd(0からfまで)を含め、Qを(残りの)qd(f + 1から63まで)にしたい。どうやってするの?ありがとう。

4

1 に答える 1

4

あなたがやろうとしていることは、Verilog 2001 では合法ではありません。

あなたの警告が言うようにRange width must be constant expression、つまり、可変長部分を選択することはできません。

開始点を変更する固定長部分を選択できます (つまり、 から始まる 8 ビットを選択しますf) が、その構文は次のとおりです。

vector_name[starting_bit_number +: part_select_width]
vector_name[starting_bit_number -: part_select_width]

ハードウェアでは、バスのサイズは固定サイズでなければなりません。レジスタの内容に基づいてシリコン内のワイヤの数を変更することはできません:)

于 2012-04-06T17:01:59.047 に答える