Systemverilog 突破接口数组

Systemverilog breakout array of interfaces

我有一个较低级别的模块,它实现了一组接口。在更高的层次上,我想分解那个接口数组并将它分配给各个端口(代码只是一个例子......没有特殊的功能)。

// -------- INTERFACE --------
interface my_if;
    logic   d;
endinterface

// -------- INTERMEDIATE MODULE --------
module intermediate(
    my_if   i1,
    my_if   i2
    );

    sub mySub(
        .a   ('{i1,i2}),
        .w1  (1'b1)
    );
endmodule

// -------- SUB MODULE --------
module sub(
    my_if         a[2],
    input wire    w1
    );

    assign a[0].d = w1;
    assign a[1].d = ~w1;
endmodule

以上代码报错:

The interface port 'a' of module 'sub' whose type is interface 'my_if' is illegally connected.

两个问题:

  1. 我该如何实现以上内容?
  2. 如何将一个接口分配给另一个相同类型的接口?即在上面的代码中,我尝试将数组接口分配和别名到中间接口(别名 i1 = ii[0])。 . .但我不知道该怎么做。

这在 SystemVerilog 中是不允许的。接口存在一个真正的问题,您不能从其他接口的集合中组合一个接口。

唯一的解决方法是使用 assign 语句将单个接口端口中的信号连接到接口信号数组中的信号。

你最好不要使用接口,也许改用结构。