如何在systemverilog中将有序端口列表更改为命名端口列表?

时间:2016-02-22 04:40:26

标签: system-verilog

现在我正在尝试实施systemverilog教程here

特别是,我指的是SystemVerilog的开关教程。

如果查看代码,则在testcase TC中使用有序端口列表(mem_intf,input_intf,output_intf [4]);但我想将它们更改为命名端口列表。 有谁知道如何从SystemVerilog中的有序端口列表更改为命名的有序端口列表?

2 个答案:

答案 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_intfoutput_intfmem_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