【发布时间】:2017-07-24 23:59:29
【问题描述】:
我正在尝试为 109 位树比较器编写 Verilog 代码,但我仍然是生成循环的新手。
到目前为止,我已经编写了一些代码,但出现了一些错误。另外,我不确定是否可以将二维数组用于 g 和 l 信号?
parameter NUM_OF_BITS = 109;
parameter NUM_OF_LEVELS = 7;
genvar i;
for (x=0; x<NUM_OF_LEVELS; x=x+1) begin:
generate for (i=0; i<NUM_OF_BITS/((2*x)+1); i=i+1) begin: MCs
mag_comp2_1 mc (in0[2*i+1:2*i],in1[2*i+1:2*i],g[x][i],l[x][i]);
end
endgenerate
NUM_OF_BITS = NUM_OF_BITS/2;
end
【问题讨论】:
-
i) 告诉我们错误是什么会对我们有所帮助。 ii)
generate语句的格式在 IEEE 1364-2001 和 IEEE 1364-2005 之间发生了变化。您似乎在两者之间有一种奇怪的混合语法。把generate和endgenerate放在外面怎么样? -
iii)
x也必须是genvar。 iv) 我希望您需要静态地 计算NUM_OF_BITS,换句话说,我希望您必须删除NUM_OF_BITS = NUM_OF_BITS/2;行,而是计算for语句中的内部循环限制。 -
你在使用
system verilog吗?在这种情况下,第一个 for 循环已经是一个生成块。生成块内的generate关键字可能是一个问题。去掉它。如果您使用的是普通的verilog,仍然从它所在的位置删除generate,并将它放在整个循环结构周围。如果您愿意,您也可以在系统 verilog 中执行此操作。 -
@MatthewTaylor 我不明白生成外部 for 循环的需要。外部 for 循环仅用于关卡,据我所知,生成块用于为我用于 2:1 幅度比较器的模块生成实例。谁能解释一下?
-
@Serge 我使用的是verilog而不是系统verilog。你能解释一下我是否需要为外部 for 循环生成密钥。我不能在另一个循环中生成一个 for 循环吗?
标签: for-loop verilog comparator