连接不同的端口宽度

时间:2019-02-11 09:54:38

标签: system-verilog synopsys-vcs

假设我的模块具有8位输入和8位输出

module MyModule (input logic [7:0] in, output logic [7:0] out);
    ...
endmodule : MyModule

如果我要连接一个1位输入并将其他位保留为零,则可以进行以下操作:

MyModule (.in({7'b0, a}), .out(b))

如果我想要1位输出而忽略其他位怎么办?像这样

MyModule (.in(a), .out({7'b0, b}))

vcs说它无效,并且连接b会直接发出警告。理想情况下,我希望不会发出警告的解决方案。

这就是我想到的:

  • 使用.out(b)并使用b[0]
  • 创建未使用的逻辑变量unused并使用有效的.out({unused, b})
  • 使用assign语句(我想避免这种情况)

有没有比这些更好的解决方案了?

2 个答案:

答案 0 :(得分:1)

您可以使用流式运算符:

MyModule M (.in(a), .out({<<{b}}));

但是我认为您的第一个想法是最简单的。

答案 1 :(得分:0)

您还可以使用参数化模块:

module MyModule #(IN_WDT = 8, OUT_WDT = 8)
  (input logic[IN_WDT-1:0] in, output logic [OUT_WDT -1 : 0] out);

...

MyModule #(8,1) M1(a8, b1); 

MyModule #(.OUT_WDT(1)) M1(.in(a8), .out(b1));