FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLHDの論文を読む (3. ツールフローのインテグレーションと評価)

LLHDの論文の続き。

SystemVerilogは非常に高機能な言語であるので、これをLLHDに落とし込んだうえでハードウェアシミュレーションを行うためのツールを開発した。LLHD-SimはLLHD IRを用いたシミュレーション、LLHD-BlazeはさらにJITを加えたバージョンでハードウェアシミュレーションを行った。いくつかのベンチマークプログラムはLLHDのシミュレータはハードウェアシミュレータよりも高速であるが、RISC-Vコアのシミュレーションは商用シミュレータと比較して低速であった。

一方、これらの簡単なハードウェアであるが、すべてのSystemVerilog記述においてコンパイルを行い、商用シミュレータと同一の結果を出力できたことは非常に重要なことであると言える。

f:id:msyksphinz:20210428224313p:plain

6 Evaluation

我々は、MooreコンパイラとLLHDを垂直方向の研究用プロトタイプとして実装しました。MooreコンパイラはSystemVerilog規格の十分な部分をカバーしており、オープンソースのハードウェア設計の自明なセットでメリットを発揮します。具体的には、表2に示した設計を検討しています。これらの設計は、単純な算術プリミティブから、先入れ先出しFIFO)キュー、クロックドメインクロッシング(CDC)、データフローブロックを経て、完全なRISC-Vプロセッサコアにまで及びます[29]。表2のSystemVerilogコードのライン(LoC)は,それぞれのハードウェアの複雑さを示す目安となります.デザインは,Moore社のコンパイラを用いてSystemVerilogからBehavioural LLHDにマッピングされ,最適化は行われていません.

6.1 回路シミュレーション

回路シミュレーションについては上記で評価したとおりである。

6.2 他のハードウェアIRとの比較

他のハードウェアIRと比較し、ここまで高機能なIRはこれまでに存在しない。

f:id:msyksphinz:20210428224332p:plain

6.3 サイズ効率

ハードウェアIRの重要な点は、ディスク上の表現とメモリ内の表現の両方において、使用されるメモリの観点からいかに効率的にデザインを捉えるかということです。表4は,これまでに紹介したデザインが使用したサイズ(kB)を示しています.

ディスク上の表現については、SystemVerilog HDLコードをベースラインとしています(最初の数値列)。まず、Mooreコンパイラが-O0フラグ(対応するClang/GCCフラグに相当)を用いて出力した最適化されていないLLHDテキスト(2列目)は、SystemVerilogに比べて著しく大きいことがわかります。これは、Moore社がコード生成をできるだけシンプルにしようとするため、多くの冗長な演算を出力していることが原因です。さらに、SystemVerilogでは暗黙の了解となっている、式の型キャストや値の切り捨て/拡張などの多くの演算は、LLHDでは明示的なアノテーションが必要です。今後の最適化により、冗長な演算を減らし、よりコンパクトな命令を作成することができ、大幅な小型化が期待できます。LLHDの最適化されていないビットコードとして表現されたコンパイル済みのHDL入力は、すでに入力ソースコードと同等のサイズになっていますが、代わりにバイナリの「ビットコード」表現(3列目)を利用することで、ディスク上のデザインサイズを大幅に削減することができます。ビットコード自体はまだ実装されていません。サイズはLLVMのビットコードと同様に、数値のランレングスエンコーディング、文字列と型のインターニング、頻繁に使用されるプリミティブ型のコンパクトエンコーディング、値の参照などのテクニックを考慮して推定されます。これにより、LLHDはテストベンチやシミュレーション、フォーマル検証、合成などの設計フローの初期段階にデザインを移行するための有効なフォーマットとなっています。

f:id:msyksphinz:20210428224350p:plain