首页 > 解决方案 > SystemVerilog 中的参数化端口声明

问题描述

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

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 中实现吗?我在语言规范中找不到明确的答案。

标签: templateshardwaresystem-verilog

解决方案


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


推荐阅读