在Verilog的生成块中使用if-else条件

在Verilog的生成块中使用if-else条件,verilog,Verilog,我有一个使用递归的代码 module mult(a,b,c) generate always @(*) begin /* a few calculations */ if(x < 10) flag = 1; else flag = 0; end if( flag == 1) mult(x,y,z); else z = x*y; endgenerate en

我有一个使用递归的代码

module mult(a,b,c)
  generate
    always @(*) begin
     /* a few calculations */
     if(x < 10)
       flag = 1;
     else
       flag = 0; 
    end
     if( flag == 1)
        mult(x,y,z);
     else
        z = x*y;
  endgenerate
endmodule
多模块(a、b、c)
生成
始终@(*)开始
/*一些计算*/
if(x<10)
flag=1;
其他的
flag=0;
结束
如果(标志==1)
mult(x,y,z);
其他的
z=x*y;
最终生成
端模
但是,此代码返回一个错误,说明标志不是常量。我理解,通过使用寄存器、连线或整数,不能在always块之外使用if else。但是,还有其他方法可以实现代码吗


递归似乎只在generate块中有效,但在always块之外有效

生成块中的条件在精化时需要保持不变。通常,它们要么定义模块的参数

在您的示例中根本没有声明“x”。。。事实上,有许多错误会阻止编译。足以让我们很难理解你的意图。你能提供一些细节吗