UHDMというのは、ハードウェアを表現するためのデータモデルで、YAML形式で表現されている。 エコシステム全体でSystemVerilogをサポートするための共通オブジェクトフォーマットとして、UHDMが定義されており、このための論文を読んでみることにした。
体裁は論文っぽくないけど。何となく読んでみる。ざっくりとDeepLで翻訳しながら読んだ。
https://woset-workshop.github.io/PDFs/2020/a10.pdf
Universal Hardware Data Model
Alain Dargelas, PhD, Data Model Solutions, LLC, Santa Clara, CA, USA alain.dargelas@gmail.com
Henner Zeller, Google, Mountain View, CA, USA, hzeller@google.com
概要 -- Universal Hardware Data Model (UHDM) [1]オープンソース・プロジェクトは、オープンソースのElectronic Design Automation (EDA)ツールがSystemVerilog 2017 Standard [2]全体をサポートできるようにすることを目的としています。一方ではSureLog [3]のようなパーサーがUHDMモデルを解析してポピュレートし、他方では合成、シミュレーション、リンターなどのクライアントツールがコンパイルされたモデルから読み返してそれぞれのタスクを実行します。
Keywords—SystemVerilog 2017, Open-source Verilog Parser, Persistent Data Model, Verilog Procedural Interface.
3. SURELOG
A. プリプロセッサ・パーサ
UHDMオブジェクトモデルを生成するパーサーの最初の実装はSureLogパーサーであると述べた。SureLogは、Antlr4.7[11]ベースのマルチスレッドまたはマルチプロセスのプリプロセッサであり、SystemVerilog 2017全体のパーサです。文法ファイルは、広範囲のオープンソース・コアとSystemVerilog UVMテストベンチ・コードでテストされています。
プリプロセッサもパーサーもインクリメンタルで、変更のあったソースコードのみを再コンパイルし、構文木をAntlrの上に著者が開発したメカニズムを使ってディスク上に永続化します。これにより、最初のコンパイルは比較的遅くても、その後のインクリメンタル・コンパイルは非常に速くなります。構文木は、0終端の子兄弟IDスキームで表現されており、その後のコンパイルや精緻化のフェーズで使用されるエレガントで高速なツリートラバーサルを可能にしています。
パーサーは、UVMおよびOVMパッケージのシンタックスツリーをプリコンパイルし、ユーザーデザインのコンパイル時に高速なリカバリーを可能にします。UVMパッケージのプリコンパイルにはシングルスレッドで約70秒、ディスクからの取り出しには約300msかかります。
プリプロセッサ/パーサは、Verilogのコンパイルセマンティックである "Interpreted "と、オプションの "Separate Compilation Unit "の両方をサポートしています。また、ライブラリやコンフィグレーションもサポートしています。
B. コンパイラ
このコンパイラは現在、言語のすべての合成可能なサブセット、かなりの量のアサーション、クラス定義をコンパイルし、UHDMモデルの制約やその他のテストベンチ関連の概念のプレースホルダーを作成しています。最終的な目標は、この言語のテストベンチ全体のUHDMモデルをコンパイルすることです。
C. SurelogとUHDMのエラボレータ
SureLog Elaborator は,defparams を含むあらゆる種類のパラメータ パッシングをサポートしています.SureLog Elaborator は,生成文の評価と階層ツリーの展開を行います.例えば、UHDMモデルの結果には、if-else生成文のアクティブな分岐のみが含まれますが、SureLogはUHDMにその文の非アクティブな分岐を追加しません。私たちは、BlackParrot [12]やOpenTitan [7]など、これらの機能をうまく利用したデザインでテストしました。SureLog Elaboratorは、インスタンスの一意化のみを行い、ネットの一意化は行いません。
SureLog Elaborator を実行しても,モデルはまだ Folded Model のままである.モデルを完全に展開するタスクはUHDM Elaboratorに任されており、UHDM Elaboratorは一意のネットIDを作成し、インスタンスツリーのすべてのステートメントをディープクローンする。
D. デザインカバレッジ
SureLogは、UHDMで表現されたオブジェクトをオリジナルのシンタックスツリーと比較してカバ レッジし、SureLogからUHDMへの翻訳において、コンパイルや推敲が行われていない箇所や、 サポートされていない文をハイライトする。
凡例。
- 灰色は、UHDMモデルでカバーされているオブジェクトに対応するソーステキスト
- 白は全く処理されていない原文(コメント欄のようなAST表現がないもの、「end statement」のようなUHDMモデルで対応するオブジェクトを必要としない記述が残っているもの)。
- 赤はUHDMでは表現されていないがParser ASTでは存在するソーステキストです。以下のケースでは、if-else generate文のelseブランチはアクティブではないため、UHDMモデルに組み込まれていません。UHDMに対応するオブジェクトがあるのは、ifブランチ(SureLog Elaboratorがアクティブと判断したもの)だけです。この場合、コードがUHDMに存在しなくても問題ありません。しかし、目で見て確認できるように赤で表示しています。ユーザーは自分自身に質問することができます。「ユーザーは「このコードは本当に省かれるべきものなのか?一方で、サポートされていない記述はOKではなく、新しいデザインをサポートする際には私たちの側で注意が必要です。
コンパイルされたすべてのファイルとそのUHDMカバレッジが掲載された、便利なハイパーリンク付きのトップレベル・ページが生成されます。下の例では、カバレッジが低いのはgenerateステートメントの中に不活性なブランチがあるためです。クイック・ビューでは、「カバーされていないコード」のみを閲覧することができ、サポートされていないコンストラクトを特定することができます。この仕組みにより、新しいRTLデザインをサポートする際に、注意が必要なコンパイラの部分を素早く特定することができます。
4. Surelog-UHDM-Verilator
この記事を書いている時点では、SureLog-UHDM-Verilatorのフローを使って、OpenTitanのコアデザインのシミュレーションを積極的に行っています。VerilogモデルはVerilatorで収束し、モジュールごとに動作させています。
5. Surelog-UHDM-Yosys
この記事を書いている時点では、SureLogUHDM-Yosys フローを使用して、OpenTitan コア・デザインの合成を積極的に行っています。デザインのすべてのモジュールがコンパイルされ、モジュールごとにロジック・エラーをデバッグしている段階です。
6. SV-Tests カバレッジ
SureLogは、リグレッションフレームワークであるsv-tests[13]の一部として動作しており、すべてのオープンソースパーサーの中で、合格したテストの数でトップの座を占めています。また、C++のAntlrランタイムを使用していることや、完全なコンパイルとシリアライズを行っていることから、最も低速です。
今後の課題としては、Antlrランタイムを最適化して解析速度を向上させること、コンパイル済みのUHDMモデルの言語サポートを完了させること、オープンソースの人気デザインとそのUVMテストを完全にサポートすることなどが挙げられます。