我有以下示例设计:
module test_module();
logic data;
task set_data(input logic data_i);
data = data_i;
endtask
endmodule
module test();
for (genvar i = 0; i < 2; i++) begin: module_gen
test_module module_instance();
end
endmodule
如果我想为
set_data
的所有实例调用 test_module
,有没有办法使用某种 for
循环来进行调用?
这样调用任务很乏味:
module_gen[0].module_instance.set_data(1'b0);
module_gen[1].module_instance.set_data(1'b0);
我想做一些类似的事情:
for (int i = 0; i < 2; i++) begin
module_gen[i].module_instance.set_data(1'b0);
end
我明白为什么这是不可能的。但有什么解决办法吗?
请记住,这是一个解释问题的玩具示例;是的,写 2 行而不是 1 行很容易,但在现实生活中的例子中,我最终会写太多行。
将
i
声明为 genvar
,并在 initial
块中进行赋值。 这对我来说在 2 个不同的模拟器上编译没有错误:
module test_module();
logic data;
task set_data(input logic data_i);
data = data_i;
endtask
for (genvar i = 0; i < 2; i++) begin
initial module_gen[i].module_instance.set_data(1'b0);
end
endmodule