私は Verilog に不慣れで、以下に引用されている私のコードの一部を合成しようとしたときに発生するエラーについて、あなたの意見を知りたいです:
input [31:0] A;
reg [31:0] X,Y;
reg [15:0] width;
input action;
always@*
begin
width= A [31:16];
if (action==1)
begin
case (width)
16'b0: X=0;
default:
begin
for (i=32; i>=width+1 ; i=i-1)
X[i]=0;
for (i=width; i>=0; i=i-1)
X[i]=1;
end
endcase
Y=X >> 1;
end
end
Cadence合成ツールを使用していますが、コードのこの部分に次のようなエラーが表示されます。
インデックス 'X[-1]' は、宣言 [31:0] の有効な範囲内にありません
width=0
for ループを使用してはならない特別なケースがある場合でも、理解できません。また、制限をwidth +2
に増やしてみましたが、同じエラーが発生しました。width +1
shift the quantity X by 2
前もって感謝します!