Vengineerの妄想

人生を妄想しています。

UHDMは、Verilatorでどのように使われているのか?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

2021年7月19日に、UHDM と UHDM-Verilator Integrationのビルド ということで、UHDM (Universal Hardware Data Model) と Verilator の Integration を行いました。

vengineer.hatenablog.com

上記のブログでは、VerilatorのBuildまでだけでしたが、今回は UHDM が Verilator の中でどのように処理されているのかを見ていきます。

AntMicro の Verilatorのソースコードを覗いてみる

ここに ソースコード があります。追加されたファイルは下記の2つ。

この2つのファイルを使って、UHDM を Verilator のモデルに変換しています。

UHDM と 通常のVerilatorのパースの切り替えをV3Globa.cppにて行っています。コマンドラインのオプションにて、入力ファイルのフォーマットが UHDM の場合はこの部分が呼び出されています。

  • v3Global.opt.uhdmAst() : UHDM frontend
  • v3Global.opt.uhdmAstSv() : UHDM-SV frontend

UHDM frontend ではUHDMをパースし、UHDM-SV frontend ではUHDMとSystemVerilog(ファイルの拡張子が sv or vlt)をパースしています。拡張子がvltのファイルは、Verilator用のコマンドファイルです。

つまり、UHDMをVerilatorの内部モデルに変換している感じです。

UHDM frontend では UHDMだけを Verilator でシミュレーションするだけですが、UHDM-sv frontend では UHDMだけでなく、SystemVerilogも一緒にシミュレーションできるようです。ただし、現状ではUHDMはSystemVerilogの root 階層(トップ)階層に置いてある場合です。

おわりに

AntMicroのVerilator(UHDM-Integration)を使えば、UHDMとSystemVerilogの混在シミュレーションができるということのようです。