【问题标题】:Using variable value as net name使用变量值作为网络名称
【发布时间】: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));”

标签: verilog system-verilog


【解决方案1】:

假设你的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多