我试图理解为什么我们在verilog 中使用generate 和for 循环。
一起使用生成和 for 循环:
reg [3:0] temp;
genvar i;
generate
for (i = 0; i < 3 ; i = i + 1) begin:
always @(posedge sysclk) begin
temp[i] <= 1'b0;
end
end
endgenerate
仅使用 for 循环:
reg [3:0] temp;
genvar i;
always @(posedge sysclk) begin
for (i = 0; i < 3 ; i = i + 1) begin:
temp[i] <= 1'b0;
end
end
我正在考虑这两个片段基本上会产生相同的结果,即 temp[0] 到 temp[10] 等于值 0。在这种情况下,我们通过使用生成语句看到的差异/优点是什么?
一般来说,generate for 循环和常规 for 循环之间的主要区别在于,generate for 循环为每次迭代生成一个实例。意思是说在your例如,将有 3 个 Always 块(而不是常规循环情况下的 1 个块)。
一个很好的代码示例requires生成为:
module A();
..
endmodule;
module B();
parameter NUM_OF_A_MODULES = 2; // should be overriden from higher hierarchy
genvar i;
for (i=0 i<NUM_OF_A_MODULES; i=i+1) {
A A_inst();
}
endmodule;
在此示例中,常规 for 无法完成创建 NUM_OF_A_MODULES 实例的工作。
In your例如,您可以通过两种方式达到所需的结果。 (只要你修复一些小错误:))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)