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

时间:2012-12-11 09:22:56

标签: 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
endmodule

但是,此代码返回一个错误,指出该标志不是常量。我知道通过使用寄存器或连线或整数,不能在always块之外使用if-else。但是,有没有其他方法可以实现代码?

递归似乎仅在生成块中有效,但在always块之外。

1 个答案:

答案 0 :(得分:1)

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

您的示例中根本没有声明'x'...事实上,有许多错误会阻止编译。够了,我们很难想出你的意图。你能提供一些细节吗?