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.
两个问题:
- 我该如何实现以上内容?
- 如何将一个接口分配给另一个相同类型的接口?即在上面的代码中,我尝试将数组接口分配和别名到中间接口(别名 i1 = ii[0])。 . .但我不知道该怎么做。
这在 SystemVerilog 中是不允许的。接口存在一个真正的问题,您不能从其他接口的集合中组合一个接口。
唯一的解决方法是使用 assign
语句将单个接口端口中的信号连接到接口信号数组中的信号。
你最好不要使用接口,也许改用结构。
我有一个较低级别的模块,它实现了一组接口。在更高的层次上,我想分解那个接口数组并将它分配给各个端口(代码只是一个例子......没有特殊的功能)。
// -------- 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.
两个问题:
- 我该如何实现以上内容?
- 如何将一个接口分配给另一个相同类型的接口?即在上面的代码中,我尝试将数组接口分配和别名到中间接口(别名 i1 = ii[0])。 . .但我不知道该怎么做。
这在 SystemVerilog 中是不允许的。接口存在一个真正的问题,您不能从其他接口的集合中组合一个接口。
唯一的解决方法是使用 assign
语句将单个接口端口中的信号连接到接口信号数组中的信号。
你最好不要使用接口,也许改用结构。