verilog - 使用变量值作为网络名称
问题描述
我有以下几行 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));
解决方案
假设您的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
推荐阅读
- database - 如何在 OSM 中显示来自 db 的坐标
- c# - 使用 Blazor 的“全选”复选框
- javascript - JS 链接函数
- python - LSTM 时间序列 - 奇怪的 val_accuarcy,使用哪种归一化方法以及在模型拟合后在生产中做什么
- sapui5 - UI5:如何在 sap.m.MessagePage 的图标属性中包含 png 图像
- python - ModuleNotFoundError:没有名为“pyttsx3.drivers”的模块
- reactjs - Redux-React 使用 api 调用填充 initialState
- c - C如何将指针分配给指针
- powerbi - 表格 DAX - 无论上下文如何,在日历中获取最小日期的最佳方法
- laravel - 我需要帮助编写 Advance Laravel Where 子句