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

Variables 生成循环中Verilog中的条件代码,variables,conditional,verilog,Variables,Conditional,Verilog,我试图在generate循环中为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

我试图在generate循环中为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
模块(out);
参数[4:0]someParam=0;
输出[5:0]输出;
genvar l,m;
对于(l=0;l16),分配出[l]=1'b0;
否则分配出[l]=1'b1;
结束
端模
问题是变量
m
不是常数,代码会出错。是否有任何方法可以在generate语句中使用编译时变量,从而允许像上面的变量
m
这样的功能


谢谢。

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

通常,要在语句中使用参数,可以将always块与if语句一起使用,如下所示:

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
模块(out);
参数[4:0]someParam=0;
输出输出;//在这种情况下,输出只有一位。当然,这可能更重要。
整数l,m;//不使用generate时不需要genver
总是(*)开始
m=0;

对于(l=0;lYour代码缺少一端。有两个
begin
s,但只有一个
end
存在太多的算法错误,无法给出属性答案。
(someParam[l]<2)
始终为false,
(m>16)
始终为false,
out[5]
从未分配。无论
someParam
的值是多少,out都将始终是
5'bz1111