我的测试平台声明为
module test_circuit
logic a,b,c;
logic y;
circuit UUT (.*); //what does this line mean?
initial begin
//something here
end
endmodule
我还没有找到可以告诉我这意味着什么的教程。我看过语言参考手册,它说这是一个“通配符模式”,但是没有足够详细的介绍。
否则,在任何搜索引擎中都很难搜索特殊字符,而我发现的结果似乎仅与其他语言有关。
答案 0 :(得分:4)
实际上,SystemVerilog LRM中对它进行了广泛的描述。请看第23.3.2.4节,使用通配符命名的端口连接(。*)连接模块实例。引用本节的第一部分:
SystemVerilog可以对实例端口名称与连接端口名称匹配且其数据类型等效的所有端口使用。*通配符语法隐式实例化端口。这样就无需列出连接声明的名称和类型与实例端口的名称和等效类型匹配的任何端口。
将其反映到您的示例中:假设模块circuit
具有端口a
,b
,y
和d
。
您可以按照LRM中第23.3.2.2节中的描述将它们完全显式连接。如果名称或宽度不匹配,这是必需的:
circuit UUT
(.a (a),
.b (b),
.c (c),
.y (y));
您还可以使用隐式命名端口连接(LRM的23.3.2.3节):
circuit UUT
(.a,
.b,
.c,
.y);
但是,如果不想键入所有端口,最快的方法是确保信号名称和类型在层次结构中匹配。然后,您只需使用通配符命名的端口连接即可:
circuit UUT
(.*);
请记住,后一种方法 可能会使调试RTL变得困难,因为它会在较高水平上变得更难跟踪信号。
奖金:除了LRM,还请查看Sutherland&Mills的论文Synthesizing SystemVerilog - Busting the Myth that SystemVerilog is only for Verification。第7节对端口连接的不同类型以及点名和点星型连接的优点进行了很好的总结。
答案 1 :(得分:4)
除了Silicon1602的答案之外,您还可以执行此操作,这意味着变量aa
连接到端口a
,而其他所有端口连接到同名变量:
circuit UUT
(.a(aa),
.*);