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