【发布时间】:2021-06-18 11:53:54
【问题描述】:
我有以下几行 Verilog 代码:
mySwitch simblock_out_a_inst0 (.aa(simblock_if_h[0].simblock_out_a),.bb(BLOCK_out_a_inst0),.CloseIfHi(simblock_if_h[0].enable));
mySwitch simblock_out_b_inst0 (.aa(simblock_if_h[0].simblock_out_b),.bb(BLOCK_out_b_inst0),.CloseIfHi(simblock_if_h[0].enable));
mySwitch simblock_out_c_inst0 (.aa(simblock_if_h[0].simblock_out_c),.bb(BLOCK_out_c_inst0),.CloseIfHi(simblock_if_h[0].enable));
mySwitch simblock_out_d_inst0 (.aa(simblock_if_h[0].simblock_out_d),.bb(BLOCK_out_d_inst0),.CloseIfHi(simblock_if_h[0].enable));
mySwitch simblock_out_a_inst1 (.aa(simblock_if_h[1].simblock_out_a),.bb(BLOCK_out_a_inst1),.CloseIfHi(simblock_if_h[1].enable));
mySwitch simblock_out_b_inst1 (.aa(simblock_if_h[1].simblock_out_b),.bb(BLOCK_out_b_inst1),.CloseIfHi(simblock_if_h[1].enable));
mySwitch simblock_out_c_inst1 (.aa(simblock_if_h[1].simblock_out_c),.bb(BLOCK_out_c_inst1),.CloseIfHi(simblock_if_h[1].enable));
mySwitch simblock_out_d_inst1 (.aa(simblock_if_h[1].simblock_out_d),.bb(BLOCK_out_d_inst1),.CloseIfHi(simblock_if_h[1].enable));
上述方法确实有效。但以上仅针对 2 个实例,并且代码可以随着多个实例而增加,我希望避免这种情况。另外,我想参数化实例的数量。
我正在考虑使用generate 语句,但由于BLOCK_out_d_inst1 之类的网络名称(即非数组格式),我不知道如何实现它。
有什么建议吗?我可以创建一个变量,比如var_net,并将其值用作网络吗?例如:
var_net = BLOCK_out_d_inst1;
mySwitch simblock_out_d_inst1 (.aa(simblock_if_h[1].simblock_out_d),.bb(var_net),.CloseIfHi(simblock_if_h[1].enable));
【问题讨论】:
-
simblock_if_h是如何声明的? -
simblock_if_h 是一个接口对象。为了消除复杂性,我们可能想忽略界面。我们或许可以简单地把它看成“mySwitch simblock_out_a_inst0 (.aa(out_a[0]),.bb(BLOCK_out_a_inst0),.CloseIfHi(enable));”