接口的类似继承的功能

时间:2014-03-07 20:02:55

标签: system-verilog

SystemVerilog的一个重要特性是继承,AFAIK仅限于类。

我想知道是否有办法模仿接口的继承和重载。

例如,假设interface2具有在interface1 pluse sig1001和modport2中定义的所有信号。在不重写所有内容的情况下定义interface2的最佳方法是什么?

interface interface1;
   logic sig1;
   ...
   logic sig1000;

   modport modport1(....);
   task task1;
   ...
   endtask
endinterface

interface interface2;
   logic sig1;                    //similar to interface1
   ...
   logic sig1000;                 //similar to interface1
   logic sig1001;

   modport modport1(....);        //similar to interface1
   modport modport2(....);

   task task1;                   //similar to interface1
   ...
   endtask
endinterface

我需要它可以合成。我的目标是在我的代码发展过程中不维护多个接口 我在考虑定义一个参数并使用if / generate。欢迎任何想法。

2 个答案:

答案 0 :(得分:2)

通过使用继承或分层封装它们,无法从其他interface编写SystemVerilog interface。实现类似功能的唯一方法是将interface的部分放在单独的文件中,并根据需要放置`include

如果您需要为测试平台执行此操作,那么最好使用类。

答案 1 :(得分:0)

即使您在内部执行参数和生成语句,这仍然不是继承。这种参数化接口的每个特化都会创建一个与另一种类型不兼容的自有类型,即:

interface some_interface #(int some_parameter = 1);
  //...
endinterface

some_interface #(2) intf1;
virtual some_interface vif;  // per default some_parameter is 1
vif = intf1;  // this is illegal because some_interface #(1) and some_interface #(2) are not type compatible

如果您的想法是在类中使用参数化ifs,那么您只能将类本身定义为参数化。