我试图在 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): 非法表达式primary [4.2(IEEE)]
我也得到非法的左值语法 [9.2[IEEE)]
我需要计算前导零。我实际上并没有粘贴我的真实代码,我只需要一些方法来计算前导零,但我有一些特殊情况必须放在 for 循环之外。
太感谢了!