生成循环中Verilog中的条件代码

时间:2014-06-20 18:26:19

标签: variables conditional verilog

我正在尝试在生成循环中编码Verilog语句的条件行为。例如,下面的代码返回错误。

module <something> (out);

parameter [4:0] someParam = 0;
output [5:0] out;
genvar l, m;

for(l=0; l<5; l=l+1) begin:STAGE_1
  m = 0;  
  if(someParam[l] < 2)   
    m = l+2;
  else begin  
    m = l-2;
  end
  if (m>16) assign out[l] = 1'b0;  
  else assign out[l] = 1'b1;   
end
endmodule

问题是变量m不是常量而代码出错。有没有什么方法可以在generate语句中使用编译时变量,这将允许某些功能,如上面的变量m

感谢。

1 个答案:

答案 0 :(得分:0)

由于您的代码中存在一些错误,我不明白您打算计算什么。

通常,要在语句中使用参数,可以使用带有if语句的always块,如下所示:

module <something> (out);
parameter [4:0] someParam = 0;
output out;      // in this case out is only one bit. it can be more of course.
integer l,m;     // no need for genver when not using generate

always (*) begin
  m = 0;
  for (l=0; l<5; l=l+1) begin:STAGE_1
    if (someParam[l] == 1'b1) // nothing good comes for checking if a bit is less then 2
      m = m+1;                // just counting bits in someParam. doing +-2 does not make sense.
  end
  if (m >= 3)
     out = 1'b1;
  else
     out = 1'b0;
end

以上是多数功能。

祝你好运