SystemVerilog中的参数化端口声明

时间:2018-04-30 14:25:27

标签: templates hardware system-verilog

我正在尝试开发一个可以将两个接口之一作为端口的模块。模块的行为变化非常小,具体取决于使用哪两个接口,因此我希望将其作为单个模块实现。

module m(
    input logic clock,
    input logic reset,

`ifdef IF1
    if1.receiver link
`else
    if2.receiver link
`endif
...
);

上面的代码工作正常,但我想选择参数,因为我可能想在设计中实例化该模块的不同版本。

这样的事情:

module m #(parameter IF = 0)(
    input logic clock,
    input logic reset,

generate
    if (IF1)
        if1.receiver link
    else
        if2.receiver link
endgenerate
...
);

现在第二个例子不起作用但是这可以在system-verilog中实现吗?我在语言规范中找不到明确的答案。

1 个答案:

答案 0 :(得分:1)

您可以使用通用interface端口,而不是指定if1if2。然后,只要所有对名称的引用对所有类型都有效,您就可以将任何类型的接口连接到该端口。所以在你的例子中,两个接口都需要一个接收器模口。