Verilog の case ステートメントでいくつかの条件を生成しようとしています。
MANT_WIDTH というパラメーターがあり、case ステートメントの条件の数は MANT_WIDTH の値によって異なります。
たとえば、私は持っています
always @(*) begin
case (myvariable)
{MANT_WIDTH{1'b1}}:
begin new_variable = {1'b0, {MANT_WIDTH{1'b1}}}; end
genvar n;
generate
for (n = 2; n <= MANT_WIDTH-1; n = n+1) begin: NORMALIZE
{(MANT_WIDTH-n){1'b0}},{n{1'b1}}}:
begin new_variable = {{n{1'b1}},1'b0;
end
endgenerate
default:
begin new_variable = {(MANT_WIDTH+1){1'b0}}; end
endmodule
end
このコードには意味をなさない条件 (ビット幅が正しくないなど) があるかもしれませんが、私がやろうとしていることの要点はここにあります。
私が抱えている問題は、ncverilog を使用してこのコードをシミュレートしようとすると、次のエラーが発生することです。
for (n = 2; n <= MANT_WIDTH-1; n = n+1) begin: NORMALIZE
|
ncvlog: *E, ILLPRI (fpmodule.v,278|6): 不正な式プライマリ [4.2(IEEE)]
また、不正な左辺値構文を取得します [9.2[IEEE)]
先行ゼロを数える必要があります。実際のコードは貼り付けませんでした。先頭のゼロを数える方法が必要なだけですが、for ループの外に配置する必要がある特殊なケースがいくつかあります。
どうもありがとうございます!