Systemverilog breakout接口数组

时间:2015-11-19 21:39:24

标签: arrays system-verilog

我有一个实现接口数组的低级模块。在更高的层次上,我想打破那个接口阵列并将其分配给各个端口(代码只是一个例子......没有特定的功能)。

// -------- 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])。 。 。但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

SystemVerilog中不允许这样做。接口存在一个真正的问题,即您无法从其他接口的集合中构成一个接口。

唯一的解决方法是使用waferlist [1] "L2MLQ" "L2MIW" "L2MK0" "L2ML6" "L2MO2" "L2MHE" "L2MK4" "L2MN9" "L2MLZ" dec2base( strtoi(waferlist,36)+1, 36) [1] "L2MLR" "L2MIX" "L2MK1" "L2ML7" "L2MO3" "L2MHF" "L2MK5" "L2MNA" "L2MM0" dec2base <- Vectorize( function(x, base) { n<-ceiling(log(x+1, base)) z <- c(0:9, LETTERS) r <- vector("character", n) for (j in n:1) { r[j] <- z[x %% base + 1] if (j > 1) x <- x %/% base } r <- paste(r, collapse="") r }) 语句将各个接口端口的信号连接到接口信号数组中的信号。

你最好不使用接口,也许使用结构代替。