我试图理解为什么我们在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 循环为每次迭代生成一个实例。这意味着在您的示例中将有 3 个 Always block (而不是常规循环情况下的 1 个 block )。
需要生成的代码的一个很好的示例是:
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 实例的工作。
在您的示例中,您可以通过两种方式获得所需的结果。 (只要你修复一些小错误:))
关于verilog - 在verilog中使用for循环生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924485/