现在我正在尝试实施systemverilog教程here,
特别是,我指的是SystemVerilog的开关教程。
如果查看代码,则在testcase TC中使用有序端口列表(mem_intf,input_intf,output_intf [4]);但我想将它们更改为命名端口列表。 有谁知道如何从SystemVerilog中的有序端口列表更改为命名的有序端口列表?
答案 0 :(得分:3)
SytemVerilog中可以有四种种不同类型的端口连接,如下所示:
(1)使用位置端口连接。链接代码中显示的那个。在实例化模块中,端口按位置进行映射。
(2)使用命名端口连接。这是详细声明。港口的位置无关紧要。一个例子如下。请注意,该职位现在可以互换。
mymodule u1 (.data(data), .address(address));
// Is same as follows:
mymodule u1 (.address(address), .data(data));
(3)使用新的SystemVerilog .name 隐式端口连接。只要端口名称和大小匹配连接的网络或总线名称和大小,端口就会连接。这不是一种广泛使用的技术。
// Searches for address and data sized variables in current module
mymodule u1 (.address, .data);
(4)使用新的SystemVerilog 。 * 隐式端口连接。只要端口名称和大小匹配连接的网络或总线名称和大小,端口就会连接。
reg [2:0] address;
reg [15:0] data;
// Connect address data automatically. Provided the name is same.
mymodule u1 (.*);
因此,在您的情况下,以下等效。由于input_intf
,output_intf
和mem_intf
等接口实例的名称相同,因此.*
连接也可以正常工作。
testcase TC (.mem_intf(mem_intf),.input_intf(input_intf),.output_intf(output_intf));
testcase TC (.output_intf(output_intf),.mem_intf(mem_intf),.input_intf(input_intf));
testcase TC (.*);
有关详细信息,请参阅CummingsDesignCon2005_SystemVerilog_ImplicitPorts论文。
答案 1 :(得分:0)
要弄清命名的端口连接(我在Google上很难找到它):语法如下:
mygate gate0(.pin1(wire1), .pin2(wire2))
可以将导线视为门的外部,而将销钉置于门的内部或 的一部分。
这类似于python named/keyword arguments:
gate0(pin1=wire1, pin2=wire2)
但是,与在python中传递参数并返回函数返回值的python不同,在System Verilog中,端口可能是 input , output 或 inout 。
进一步阅读:http://web.engr.oregonstate.edu/~traylor/ece474/beamer_lectures/modules.pdf