我有一个实现接口数组的低级模块。在更高的层次上,我想打破那个接口阵列并将其分配给各个端口(代码只是一个例子......没有特定的功能)。
// -------- 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.
两个问题:
答案 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
})
语句将各个接口端口的信号连接到接口信号数组中的信号。
你最好不使用接口,也许使用结构代替。