我正在尝试在生成循环中编码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
?
感谢。
答案 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
以上是多数功能。
祝你好运