Syntax 如何为模块实例化忽略一个或多个输出总线引脚

Syntax 如何为模块实例化忽略一个或多个输出总线引脚,syntax,system-verilog,Syntax,System Verilog,我想忽略SystemVerilog中模块的数组参数中的一个或多个位 module x(in a, out [0:3] z); ... endmodule module tb; logic my_a; logic [1:3] my_z; // I want to stop having to do this next line: logic ignore_this_bit; x myx(.a(my_a), .z({ignore_this_bit, my_z})); endmo

我想忽略SystemVerilog中模块的数组参数中的一个或多个位

module x(in a, out [0:3] z);
...
endmodule

module tb;
  logic my_a;
  logic [1:3] my_z;
  // I want to stop having to do this next line:
  logic ignore_this_bit;
  x myx(.a(my_a), .z({ignore_this_bit, my_z}));
endmodule
执行此操作的正确语法是什么?正如上面所示,我一直在做一个声明
忽略这个位
,只是从来没有连接到那个网络。但似乎应该有一个更简单的方法。比如在模块实例化的参数中只使用逗号而不使用变量名,或者使用类似于
1'bX
的内容而不是输出参数位,或者类似的内容

这是否受我对向量使用大端位排序这一事实的影响?(我讨厌它,但我正在为一个使用这种排序的旧CPU构建代码,而且将我的代码与现有的代码进行匹配要比修复它容易得多。)


这是一个很难找到的概念,我已经尝试过了。有没有人有专业知识可以帮助我知道如何以“正确的方式”做到这一点?谢谢。

您不需要在这里做任何事情。截断MSB z[0]时,这应该可以正常工作

x myx(.a(my_a), .z(my_z));
将输出端口视为隐式连续赋值

assign my_z = myx.z;

但是,如果MSB不是要忽略的位,则没有简单的解决方案。您可能需要查看net
alias
功能

在verilog中并没有忽略输出位的特殊方法。因此,将concat与不需要的变量一起使用是一种很好的方法(
{ignore_this_bit,my_z}
)。出于可读性原因,此变量的命名很重要

它不受范围描述顺序的影响。看起来您忽略了最左边的部分。无论您如何描述范围,位的顺序始终相同:

bits:   0011
[3:0]:  3  0
[0:3]:  0  3
concat: {ign, 0, 1, 1};
另一种方法是使用足够大的变量连接到输出,然后使用其位:

logic [1:3] my_z;
logic [0:3] their_z;
 x myx(.a(my_a), .z(their_z));
 assign my_z = their_z[1:3];

你的方法是最好的。没有特殊语法可以忽略输出端口的位。谢谢Serge。我担心这就是答案。也许你应该把你的答案写成这个问题的答案(单独的帖子,这里不是评论),这样我就可以把它标记成这样。我真希望做这件非常常见的事情的语法不要那么冗长。谢谢你指向
别名
功能的指针。这是我一直想要的东西。不过,这对解决这个问题没有多大帮助。此外,忽略总线中的任何位也是我真正需要的。我应该在我的询问中这样说。如果我有一个驱动八个输出的多路复用器,我想忽略其中三个(在中间),我必须声明一组
逻辑
变量来实现这一点。这比应该的更痛苦。