How does VCS support parameterized virtual interface?

来源:互联网 发布:ubuntu的password 编辑:程序博客网 时间:2024/05/22 06:18
Answer:1. Following is an example of using a parameterized virtual interface with    legal or illegal assignments which works as mentioned(in comments/LRM)    in VCS:-------------------------------------------------------------------------------                    interface PBus #(WIDTH=8);  // A parameterized bus interface         logic req, grant;         logic [WIDTH-1:0] addr, data;         modport phy(input addr, ref data);        endinterface        module top;         PBus #(16) p16();         PBus #(32) p32();         virtual PBus V8;         virtual PBus #(35) V35;         virtual PBus #(16) v16;         virtual PBus #(16).phy v16_phy;         virtual PBus #(32) v32;         virtual PBus #(32).phy v32_phy;         initial begin        //following is legal as parameter values match          v16 = p16;         //following is legal as parameter values match           v32 = p32;         //following is illegal as parameter values do not match          //v16 = p32;         //following is illegal as parameter values do not match          //v16 = v32;         //following is a legal assignment from no selected modport         //to selected modport          v16_phy = v16;         //following is an illegal assignment from selected modport         //to no selected modport          //v16 = v16_phy;         //following is a legal assignment from no selected modport         //to selected modport          v32_phy = p32;         //to no selected modport          //v32 = p32.phy;           end        endmodule--------------------------------------------------------------------------------2. Following is an example of virtual interface being used as a type parameter    of a parameterized class, which is supported by VCS:--------------------------------------------------------------------------------        interface PBus #(WIDTH=8);  // A parameterized bus interface         logic req, grant;         logic [WIDTH-1:0] addr, data;         modport phy(input addr, ref data);        endinterface        module top;         PBus #(16) p16();         PBus #(32) p32();         prog pg(p16);        endmodule        program prog(interface I);        //Parameter can be overridden at type declaration if required         class cls#(type Tp = virtual PBus #(16));          Tp vpbus;          function new;        // need to assign a proper interface instance depending on the         //parameter value being overridden            vpbus = I;          endfunction         endclass        endprogram