首页 > 解决方案 > 使用变量值作为网络名称

问题描述

我有以下几行 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));

标签: verilogsystem-verilog

解决方案


假设您的BLOCK_out_a_inst0等信号是 1 位宽,您可以创建新的总线,将信号连接在一起,然后使用generate

wire [1:0] BLOCK_out_a_inst = {BLOCK_out_a_inst1, BLOCK_out_a_inst0};
wire [1:0] BLOCK_out_b_inst = {BLOCK_out_b_inst1, BLOCK_out_b_inst0};
wire [1:0] BLOCK_out_c_inst = {BLOCK_out_c_inst1, BLOCK_out_c_inst0};
wire [1:0] BLOCK_out_d_inst = {BLOCK_out_d_inst1, BLOCK_out_d_inst0};

genvar i
for (i=0; i<2; i=i+1) begin : switch_num
    mySwitch simblock_out_a_inst (.aa(simblock_if_h[i].simblock_out_a), .bb(BLOCK_out_a_inst[i]), .CloseIfHi(simblock_if_h[i].enable));
    mySwitch simblock_out_b_inst (.aa(simblock_if_h[i].simblock_out_b), .bb(BLOCK_out_b_inst[i]), .CloseIfHi(simblock_if_h[i].enable));
    mySwitch simblock_out_c_inst (.aa(simblock_if_h[i].simblock_out_c), .bb(BLOCK_out_c_inst[i]), .CloseIfHi(simblock_if_h[i].enable));
    mySwitch simblock_out_d_inst (.aa(simblock_if_h[i].simblock_out_d), .bb(BLOCK_out_d_inst[i]), .CloseIfHi(simblock_if_h[i].enable));
end

推荐阅读