在 SystemVerilog 中,(.*) 是什么意思?

Pap*_*bad 2 system-verilog

我有一个测试平台声明为

module test_circuit
    logic a,b,c;
    logic y;

    circuit UUT (.*);    //what does this line mean?

    initial begin
    //something here
    end
endmodule
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何教程告诉我这意味着什么。我查看了语言参考手册,它说它是一个“通配符模式”,但没有详细说明。

否则……在任何搜索引擎中都很难搜索到特殊字符,而且我发现的结果似乎只与其他语言有关。

Sil*_*602 6

它实际上在SystemVerilog LRM中有相当广泛的描述。查看第 23.3.2.4 节使用通配符命名端口连接 (.*) 连接模块实例。引用本节的第一部分:

SystemVerilog 可以使用 .* 通配符语法为所有端口隐式实例化端口,其中实例端口名称与连接端口名称匹配并且它们的数据类型是等效的。这消除了列出连接声明的名称和类型与实例端口的名称和等效类型匹配的任何端口的要求。

为了反映这一到您的例子:假设该模块circuit具有的端口aby,和d

您可以按照 LRM 中的第 23.3.2.2 节所述完全明确地连接它们。如果名称或宽度不匹配,则这是必要的:

circuit UUT 
(.a (a),
 .b (b),
 .c (c),
 .y (y));
Run Code Online (Sandbox Code Playgroud)

您还可以使用隐式命名端口连接(LRM 的第 23.3.2.3 节):

circuit UUT 
(.a,
 .b,
 .c,
 .y);
Run Code Online (Sandbox Code Playgroud)

但是,如果您不想输入所有端口,最快的方法是确保信号的名称和类型在层次结构中匹配。然后,您可以简单地使用通配符命名端口连接:

circuit UUT
(.*);
Run Code Online (Sandbox Code Playgroud)

请记住,最后一种方法可能会使调试 RTL 变得困难,因为它在高级别跟踪信号变得更难。

奖励:除了 LRM 之外,看看 Sutherland & Mills 的论文Synthesizing SystemVerilog - Busting the Myth that SystemVerilog is only for Verification。第 7 节对不同类型的端口连接以及 dot-name 和 dot-star 连接的优势进行了很好的总结。


Mat*_*lor 5

除了Silicon1602的答案,你也可以这样做,这意味着变量aa连接到端口a,每个其他端口都连接到同名变量:

circuit UUT 
(.a(aa),
 .*);
Run Code Online (Sandbox Code Playgroud)