使用循环访问生成的模块

问题描述 投票:0回答:1

我有以下示例设计:

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 行很容易,但在现实生活中的例子中,我最终会写太多行。

verilog system-verilog
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.