当实例化接口时,通常可以访问modport
例如:
interface intf1;
reg a3, c3;
modport mp3 (output a3, c3);
assign c3 = a3;
endinterface
interface intf2(intf1.mp3 p2);
assign p2.a3 = 1'b1; // access to modports available
endinterface
module top(input din,output reg dout);
assign dout = din;
intf1 INTF1 ();
intf2 INTF2 (INTF1);
endmodule
但是当使用数组对inerface进行实例化时,我无法访问接口intf2中的modport,是否有办法在intf2中访问多实例接口的moports?
interface intf1;
reg a3, c3;
modport mp3 (output a3, c3);
assign c3 = a3;
endinterface
interface intf2(intf1.mp3 p2[3]);
//assign p2[3].a3 = 1'b1; // compiler reports Invalid bounds count
endinterface
module top(input din,output reg dout);
assign dout = din;
intf1 INTF1 [3:1] ();
intf2 INTF2 (INTF1);
endmodule
答案 0 :(得分:2)
这是当前标准的限制。见http://www.eda.org/svdb/view.php?id=2975
我的建议是不要使用modports。如果必须使用它们进行合成,则不能将它们与接口数组一起使用
答案 1 :(得分:1)
检查
interface intf2(intf1.mp3 p2[3]);
assign p2[0].a3 = 1'b1;
assign p2[1].a3 = 1'b1;
assign p2[2].a3 = 1'b1; // compiler reports Invalid bounds count
endinterface
另请查看以下链接。现在它似乎正常工作。