接口实例化数组时无法访问Modport

时间:2015-03-31 05:23:19

标签: verilog system-verilog

当实例化接口时,通常可以访问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

2 个答案:

答案 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

另请查看以下链接。现在它似乎正常工作。

http://www.edaplayground.com/x/PJ7