mailboxの定義を発見

このサイトに掲載しているmailboxは、型を渡さないサンプルになっています。

でもホントは、適切に使うならインスタンス時に型を渡すべきだと思っています。

例えばこんな感じで。

  class packet;
    byte header;
    byte payload;
    function new(header,payload);
      this.header  = header;
      this.payload = payload;
    endfunction
  endclass
  mailbox #(packet) pkt_mbx;

ところで、mailboxをすこしいじっているときに出てきたエラーに std.sv というのがありましたので開いてみたところ、SVの基本クラスが定義されているのを見つけました。ただ、無料で入手できる環境ではある けれど、ソースを公開していいかはわからないので、興味のある方はmodelsim-aseや商用のmodelsim, QuestaSimなどのインストールディレクトリあたりを探してみてください。

C:/altera/13.0/modelsim_ase/win32aloem/../verilog_src/std/std.sv

このコードを見る限りは、class mailboxは型を渡さないとintegerを型として認識するみたいなんですが、でもそれだと、型未指定のときに他の型、例えばbitやlogic、自作classなどをputしたらエラーになると思う のですが、問題なく動くんですね。コメントに「dynamic_singular_type」とありますが、これ、Simulator側でうまく処理しているんじゃないかと…。

なお、問題なく動くと言ってもそれはmodelsim-ase上での話です。QuestaSimやCadence、SynopsysなどのSimulatorではどうなるかわからないので、やはり「使用する型を明示」した上で使うのがマナー(予期 せぬエラーを回避)だと思います。