Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Multiple Inheritance


昨年(2012)のDVConのプレゼンテーション資料の8ページにある
SystemVerilog-2012の新機能(Multiple Inheritance)をModelSim Altera Editon 10.1bで確認しました。
Multiple Inheritanceは、Ready for SystemVerilog 2012で紹介した機能です。

確認したコードは、こちら。キューを使って、FIFOを実装しています。
  interface class Put;
    pure virtual function void put( int a );
  endclass

  interface class Get;
    pure virtual function int get();
  endclass

  class Fifo_A implements Put, Get; 
    int fifo[$]; 
    function new();
    endfunction
    virtual function void put( int a );
      fifo.push_back(a);
    endfunction 
    virtual function int get();
      return fifo.pop_front();
    endfunction
  endclass

  module test;
 
    Fifo_A fifo_a;      
 
    initial begin    
      fifo_a = new();    
     fifo_a.put(10);
      fifo_a.put(20);
      $display("fifo_a = %d", fifo_a.get() );
      $display("fifo_a = %d", fifo_a.get() );
    end
  endmodule

interfaceとimplementsを使っています。Javaのinterfaceとimplementsと似ていますね。

SystemVerilogでクラス(class)が導入され、extendsでクラスの継承ができるようになりました。
ただし、複数のクラスからの継承(Multiple Inheritance)はサポートしていませんでした。

SystemVerilog-2012では、extendsではく、interfaceとimplements違った形で対応しています。
どうしてでしょうかね?

検証、Verification、SysytemVerilog、Mentor