Posts Issued on May 22, 2024

BSVのサブインタフェース

posted by sakurai on May 22, 2024 #802

BSVの先進的な話題のひとつにサブインタフェースがあります。これはインタフェースの階層化であり、インタフェース階層に別のインタフェースを入れ子で持つものです。ただしその実装はモジュールの中で定義するので、インタフェースを共通化しつつも実装を変える(ポリモーフィズム)などということが可能です。

DumpFSMモジュール内にUartを内蔵する例を図802.1に示します。

図%%.1
図802.1 モジュール内Uart端子のサブインタフェース化

DUmpFSMモジュールのインタフェース部は、図のように端子を並べることも当然できますが、別の方法としてサブインタフェースを用いて記述することができます。Uartのインタフェースは定義済みなので、端子を書き並べる代わりに再利用します。このように一行で書き表せ、誤りも起こりにくいのがメリットです。

interface DumpFSM_ifc;
:
  interface Uart_ifc uart_ifc; // サブインターフェースの宣言
endinterface

そして、モジュール最後のmethod定義の後にサブインタフェースを定義します。ただし端子の一部しか外部に表れていないため、コンパイル時に外部に出力していないread及びwrite端子が不足する旨の警告が出ます。

   // Uartインタフェースのうち、外部端子に出るもののみを定義
   interface Uart_ifc uart_ifc;
      method Bit#(1) sout; // serial output
         return uart.sout;
      endmethod
      method Action sin(Bit#(1) nidata); // serial input
         uart.sin(nidata);
      endmethod
      method Bool pdone;
         return uart.pdone;
      endmethod
      method Bool gdone;
         return uart.gdone;
      endmethod
   endinterface

コンパイルすると以下の警告が表示されます。

$ bsc -sim DumpFSM.bsv
Warning: "DumpFSM.bsv", line 208, column 14: (T0054)
  Field not defined: `read'
Warning: "DumpFSM.bsv", line 208, column 14: (T0054)
  Field not defined: `write'
Elaborated module file created: mkDumpFSM.ba

ただしread及びwriteは未定義ではなくモジュール内部で使用しており、警告にも関わらず正しく内部で接続されています。


左矢前のブログ 次のブログ右矢