高位合成の利点 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

高位合成 (HLS) とは、デジタル システムの抽象的な動作仕様を受け取り、与えられた動作を実現するレジスタ転送レベルの構造を生成する自動設計プロセスのことです。

HLS を使用したよくあるフローは、次の手順で実行されます。

  1. 任意のアーキテクチャを考慮し、C/C++ を使用して抽象度の高いアルゴリズムを記述します。
  2. 動作レベルで機能を検証します。
  3. HLS ツールを使用して、任意のクロック スピード、入力制約で RTL を生成します。
  4. 生成された RTL の機能を検証します。
  5. 同じ入力ソース コードを使用してさまざまなアーキテクチャで検証します。

HLS を使用すると、手動でエラーのない RTL を記述するよりも、すばやく高品質の RTL が作成できます。

設計者は、C/C++ でアルゴリズムのマクロ アーキテクチャを高位レベルで作成する必要があります。つまり、設計意図とこのデザインが外部とどのように相互に作用するかを慎重に考慮する必要があります。HLS ツールでは、クロック周期、パフォーマンス制約などの入力制約も必要です。

ステート マシン、データパス、レジスタ パイプラインなどを作成するといったマイクロ アーキテクチャの決定は、高位レベルでは不要です。これらの詳細は HLS ツールが処理し、クロック スピード、パフォーマンス プラグマ、ターゲット デバイスなどの入力制約を提供することで、最適化された RTL が生成されます。

図 1. 設計プロセス

C/C++ アルゴリズムの定義されたマクロ アーキテクチャを使用して、設計者はさまざまな制約を用いて複数の RTL ソリューションを生成し、パフォーマンスとエリアのトレードオフを検討することも可能です。つまり、1 つのアルゴリズムから複数のインプリメンテーションを導き出すことが可能なため、設計者はアプリケーション全体の要件に合わせて最適なインプリメンテーションを選択できます。

生産性の向上

HLS では、設計者が高い抽象度で作業するため、HLS への入力として記述する必要のあるコード行数は少なくなります。C++ コードの記述にかかる時間が短縮され、短時間で完了するため、エラーが発生しにくく、設計全体の生産性を高めることができます。設計者は、機械的な RTL インプリメンテーション タスクを気にすることなく、より高位レベルで効率的な設計に時間を集中させることができます。

HLS を使用することで、デザインの生産性のみならず、検証における生産性も向上します。HLS では、テストベンチも高位レベルで生成または作成されるため、元の設計意図をすばやく検証できます。設計者は、C/C++ のドメイン内にフローが残っている場合、検証済みアルゴリズムの迅速な転向を検討できます。C/C++ でアルゴリズムが検証されると、同じテストベンチを使用して HLS ツールで RTL を生成できます。それでも、生成された RTL を既存の RTL 検証フローに統合することで、検証の適用範囲がより包括的なものとなります。

HLS の使用による設計および検証の利点をまとめると、次のようになります。

  • C レベルでアルゴリズムを開発および検証し、ハードウェア インプリメンテーションの詳細から抽象化レベルで設計。
  • C シミュレーションを使用してデザインを検証し、通常の RTL デザインよりもすばやくイテレーション。
  • C ソース コードおよびプラグマから複数のデザイン ソリューションを作成して、デザイン空間を試し、最適なソリューションを特定。

再利用性の高さ

高位合成用に作成されたデザインは汎用的で、インプリメンテーション用には記述されていません。これらのソースは、RTL のように特定のテクノロジ ノードやクロック周期に縛られることはありません。入力制約のアップデートが少なく、ソース コードの変更もないため、複数のアーキテクチャを検討できます。RTL で同様の手法を適用するのは、現実的ではありません。任意のクロック周期で RTL を作成し、派生製品のため変更が必要になった場合、それがどんなにわずかなものであっても、新しく複雑なプロジェクトが作成されます。HLS を使用して高位レベルで処理をすると、マイクロアーキテクチャなどを考慮する必要なく、新しい RTL を自動的に再生成させることができます。