@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそ、すべては、SystemC v0.9公開から始まった
はじめに
2021年7月19日に、UHDM と UHDM-Verilator Integrationのビルド ということで、UHDM (Universal Hardware Data Model) と Verilator の Integration を行いました。
上記のブログでは、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の混在シミュレーションができるということのようです。