system-verilog - 在 systemverilog 中的模块接口(interface)上连接解压数组的最简单方法

标签 system-verilog

下面是一个示例

module a_mod ( u );
input bit [2:0] u [1:0];
...
endmodule

module b_mod ();

bit [2:0] c1, c2;
a_mod a_mod_inst ( 
  .u ( {c1,c2} ) // won't work
);

endmodule

进行连接以使 u[0] == c2 且 u[1] == c1 的最简单方法是什么?

顺便说一句,我知道我可以执行下面所示的操作,但正在寻找更优雅的替代方案

bit [2:0] tmp_u [1:0];
assign tmp_u[0] = c2;
assign tmp_u[1] = c1;

a_mod a_mod_inst (
.u ( tmp_u )  // works for sure
);

最佳答案

尝试:

bit [2:0] c1, c2;
a_mod a_mod_inst ( 
  .u ( '{c1,c2} ) // note the single quote before the open curly bracket
);

请参阅 IEEE1800-2012 第 10.9 节。 '{ 用于分配或传递解包数组。

关于system-verilog - 在 systemverilog 中的模块接口(interface)上连接解压数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134255/

相关文章:

hardware - 编译器的bug,还是对SystemVerilog的误解?未声明的端口类型在模拟中工作

random - 如何随机化一个非常大的内存的内容?

verilog - 在verilog中使用 '<='运算符

hardware - 卷积编码器的终止与状态寄存器重置

system-verilog - UVM testbench - 将两个不同的驱动程序连接到同一接口(interface)的 "UVM"方法是什么?

syntax - 在模块声明中选择接口(interface)参数

verilog - 如何了解Cadence XMVLOG编译器支持哪些SystemVerilog?

recursion - Verilog中可以递归实例化吗?

verilog - 将初始时间偏移应用于时钟信号

verilog - 基于接口(interface)参数化模块 (SystemVerilog)