1つの記事でVivadoHLSについて学ぶ

次のコンテンツは時間厳守から抜粋したものです:「ナビゲーターZYNQHLS開発ガイド」

新製品をできるだけ早く市場に投入するために、デジタルシステムの設計者は、設計と開発のサイクルを加速する方法を検討する必要があります。デザインの加速は、主に「デザインの再利用」と「抽象化レベルの向上」の2つの側面から考えることができます。ザイリンクスのVivadoHLSツールは、C、C ++、またはSystem Cを直接使用してザイリンクスシリーズFPGAをプログラムできるため、抽象化レベルが向上し、従来のRTL記述を使用したFPGA開発に必要な時間が大幅に短縮されます。

1.高レベルの包括的な紹介

ここに画像の説明を挿入します
図1.1.1に示すように、FPGAデザインには、構造、RTL、動作、および高レベルの順に、下から上に4つの抽象化レベルがあります。最下位レベルの抽象化(構造)には、論理ゲートなどの基盤となるハードウェアユニット、さらには低レベルのLUTまたはフリップフロップの直接インスタンス化が含まれます。設計者は、「レジスタ転送レベル(レジスタ転送レベル、RTL)」での設計によく使用されます。このレベルの抽象化は、基礎となる詳細を隠し、レジスタとレジスタ間で実行できる操作を記述します。上位レベルの「動作」記述は、回路のアルゴリズムによる記述です。つまり、各レジ​​スタの動作方法を記述するのではなく、回路が示す機能(動作)の種類を記述します。

上記で紹介したいくつかの抽象化レベルはすべて、ハードウェア記述言語HDLを使用して設計されています。抽象化レベルが高くなると、設計の最終的なハードウェア実装の詳細が徐々に弱くなることがわかります。この章で焦点を当てている「高水準」設計方法では、C / C ++などの高水準言語を直接使用して設計し、Vivado HLSコンパイラーがCコードをHDL記述に合成し、最後に論理合成を実行してネットリスト。このネットリストは最終的に特定のFPGAデバイスにマップされます。

C言語または他の高位言語が異なるプロセッサアーキテクチャ用に異なるコンパイラを持っているように、ザイリンクスVivado高位合成(HLS)ツールも一種のコンパイラですが、CまたはC ++を変換するために使用されますプログラムがデプロイされます従来のプロセッサではなくFPGAで。

Virginia HLSの設計と開発には、C、C ++、SystemCの3つの言語を使用できます。

2.HLS設計プロセス

Virginia HLSの機能は、C、C ++、またはSystemCデザインをRTL実装に変換するだけで、ザイリンクスFPGAまたはZynqチップのプログラマブルロジックで合成および実装できます。C / C ++で行われる設計は、プロセッサ(ZYNQのARMプロセッサまたはMicroBlazeソフトコアプロセッサ)で実行されるソフトウェアコードとは完全に異なることに注意してください。HLSでは、すべてのCデザインをプログラマブルロジックで実装する必要があります。つまり、ハードウェアデザインはまだ行っていますが、ハードウェア記述言語は使用していません。

次の図に、Vivado HLSを使用したデザインプロセスを示します。HLSデザイン
ここに画像の説明を挿入します
の主な入力は、C / C ++ / SystemCデザインとCベースのテストセット(TestBench)です。最初にC言語の本質が関数であることを知っておく必要があります。次に、このテストセットを使用してC設計の関数を検証します。検証プロセスには、「ゴールデンリファレンス」が必要です。この「ゴールデンリファレンス」は標準的な回答に似ており、Cデザインの関数によって生成された出力を比較するために使用されます。

HLSデザインを合成する前に、まず「機能検証」、つまりCシミュレーションを実行する必要があります。その目的は、HLSによって入力されたCコードの正しい機能を検証することです。確認する方法は、TestBenchでC設計の関数を呼び出し、その出力を「ゴールデンリファレンス」と比較することです。ゴールデンリファレンスとの違いがある場合は、最初にCデザインを変更してデバッグする必要があります。

次のステップは、HLSプロセス自体であるデザインの高位合成です。このプロセスには、Cベースのコードの分析と処理に加えて、RTL記述を作成するためにユーザーが指定した指示と制約が含まれます。高位合成後、VeilogまたはVHDL言語で記述されたRTLデザインファイルを含む一連の出力ファイルが生成されます。

合成プロセスの終了後に取得されたRTLモデルは、VivadoHLSでのC / RTL協調シミュレーションに使用して、合成されたRTLデザインの正確さをさらに検証できます。このプロセスでは、Vivao HLSが自動的にテストセットを生成してRTLデザインの入力を提供し、その出力を期待値と比較します。C機能検証とC / RTL協調シミュレーションの違いを次の図に示します。

ここに画像の説明を挿入します
図1.2.2の左側の機能検証(Cシミュレーション)では、元のテストセットはユーザーが入力したテストファイルTestBenchです。右側のC / RTL協調シミュレーションに必要なRTLテストセットは、Vivado HLSによって自動的に生成されるため、手動で作成する必要はありません。生成されたテストセットには、元のテストセットとテスト中のRTLモジュールが含まれます。データ転送。

機能の検証に加えて、RTL設計の実装とパフォーマンスも評価します。たとえば、FPGAに必要なリソースの数、デザインの遅延、およびサポートされている最高のクロック周波数が要件を満たしているかどうかなどです。要件が満たされていない場合、設計者は、図1.2.1の右側のループに示すように、命令と制約を変更してから、高位合成を再度実行する必要があります。設計では、「最良の」ソリューションを見つけるために、複数のHLS設計の反復が必要になる場合があります。必要に応じて、設計者は戻ってC設計コードを変更し、最初から設計を再検証することもできます。

設計が検証され、実現が目的の設計目標も満たすと、より大きなシステムに統合できます。HLSプロセスで生成されたRTLファイル(VHDLまたはVerilogコード)を直接使用できます。VivadoHLSのIPパッケージ機能を使用すると便利です。Virginia HLSによって生成された出力をパッケージ化することは、HLSデザインをVivadoのIPインテグレーターなどのIPコアの形式で他のザイリンクスツールに導入できることを意味します。これらの2つのタイプの出力を次の図に示します。
ここに画像の説明を挿入します

3、インターフェース統合

HLSを実行する場合、設計者は設計の2つの主要な側面を分析する必要があります。

  • 設計されたインターフェース、つまりその最上位の接続。
  • デザインの機能、つまり、デザインが実装するアルゴリズム。

図1.3.1に示すように、HLS設計のインターフェースと機能の概念図を示します。
ここに画像の説明を挿入します
上の図では、両端の緑色の領域はデザインの入力インターフェイスと出力インターフェイスを表しており、RAMインターフェイス、FIFOインターフェイス、バスタイプインターフェイスなどのいくつかのインターフェイスタイプを示しています。これらのインターフェイスは、ツールによってインターフェイス合成を介してコードから取得できます。または、設計者は特定のインターフェイスタイプを手動で指定できます。

図の中央にある黄色の領域は、HLS設計で実現できる特定の機能を表しています。アプリケーションごとに、その機能も異なります。Virginia HLSデザインでは、関数はアルゴリズム合成のプロセスを通じて入力コードから取得されます。

ここでは、最初にインターフェイス合成について簡単に紹介します。名前が示すように、インターフェイス合成とは、HLSデザインでのインターフェイスの合成を指します。合成されたインターフェイスは、システム内の他のモジュールと通信でき、システム内のプロセッサと通信する必要がある場合もあります。

ここでのインターフェースの概念には、使用されるポートとプロトコルの両方が含まれます。すべてのポートの詳細(タイプ、ビット幅、方向など)は、C / C ++ファイルのトップレベル関数のパラメーターと戻り値から推測されます。プロトコルは、ポートのパフォーマンス(動作)から推測されます。たとえば、最も単純なインターフェイスは1ビットワイヤである場合がありますが、より複雑なインターフェイスはバスまたはRAMインターフェイスを使用する場合があります。インターフェイス合成によって推測できるインターフェイスタイプには、ライン、レジスタ、一方向および双方向のハンドシェイク信号、FIFO、メモリ、およびバスが含まれます。

以下に、Cで設計された単純なトップレベル関数を示します。この関数の名前はfind_average_of_best_X()であり、そのパラメーターを次の図に示します。

ここに画像の説明を挿入します
図1.3.2の関数の内部動作の詳細は重要ではありませんが、各パラメーターの読み取り/書き込み操作によって、合成されたポートの方向が決まります。この関数定義には3つのパラメーターが含まれています。配列「サンプル」と整数「X」は関数の入力であり、平均は関数の出力です。したがって、簡単に言うと、次の図に示すように、これら3つの関数パラメーターをHLSによって2つの入力インターフェイスと1つの出力インターフェイスに変換する必要があります。
ここに画像の説明を挿入します

図1.3.3は単純化されたインターフェース図にすぎないことに注意してください。次の図に示すように、使用するプロトコルに応じて、これらのインターフェイスにはデータポート自体以外の制御入力または出力が含まれる場合があります。
ここに画像の説明を挿入します
図1.3.4は、HLSを介して関数find_average_of_best_X()によって合成された完全なRTLモジュールのインターフェイス図です。 。この図から、関数の3つのパラメーターによって合成されたインターフェースには、ap_memoryプロトコル、ap_noneプロトコル、ap_vldプロトコルなどの独自のプロトコルがあることがわかります。同時に、モジュールには、ap_ctrl_hsプロトコルを使用するap_clkやap_rstなどのポートもいくつかあります。これらのプロトコルは、対応するインターフェイスがシステム内の他のモジュールとどのように相互作用するかを決定します。各プロトコルの具体的な意味とインターフェイスのプロトコルの選択方法については、以降の章で紹介します。

4、アルゴリズム合成

アルゴリズム合成は、設計の機能、つまり、入力C設計によって記述される設計の望ましい動作に焦点を合わせます。アルゴリズム合成は、コードからさまざまな算術演算を推測し、それらを一連のRTLステートメントに変換します。

アルゴリズム合成には、次の3つの主要な段階があります。

  1. データパスと制御回路を分析します。
  2. スケジューリングとバインディング。
  3. 最適化;

データパスと制御回路を分析します

HLSの最初の段階は、C / C ++ / SystemCコードを分析し、必要な機能を説明することです。多くの場合、Vivado HLSは、ロジックとアルゴリズムの操作、条件付きステートメントとブランチ、配列の操作とループなどの側面からプログラムを分析します。

結果の実装には、データパス要素と通常は制御要素が含まれます。ここでの「データパス」処理とは、データサンプルに対して実行される操作のことであり、「制御」とは、データストリーム処理と連携する必要のある回路のことです。アルゴリズムの本質はデータパスと制御要素を定義し、設計者はHLSで特別な手順を実行して、制御要素の複雑さを最小限に抑えることができます。

スケジューリングとバインディング

HLSは、スケジューリングとバインディングの2つの主要なプロセスで構成されています。次の図に示すように、これらは交互に実行され、相互に影響を及ぼします。
ここに画像の説明を挿入します

  • スケジューリングとは、Cコードの解釈によって取得されたRTLステートメントを一連の操作に変換することであり、各操作は、クロックサイクルの単位で特定の実行時間に関連付けられます。この段階で行われる決定は、クロック周波数と不確実性、ターゲットチップのテクノロジ、およびユーザーによって課される命令の影響を受けます。

  • バインディングは、スケジュールされた操作をターゲットチップ上の実際のリソースにリンクするプロセスです。これらのリソースの機能とタイミング特性がスケジューリングに影響を与える可能性があるため、バインディング情報はスケジューリングプロセスにフィードバックされます。たとえば、DSP48xリソースの使用は、クリティカルパスがロジックリソースを使用するソリューションよりも短いことを示します。

最適化

  • 制約:設計者は、設計の特定の指標に制限を課すことができます。たとえば、最低のクロック周期を指定できます。これにより、実装結果が統合されるシステムの要件を確実に満たすようになります。同様に、設計者は、アプリケーションの設計を最適化するために、リソース使用率またはその他のインジケーターを制限することを選択できます。

  • 指示:設計者は、指示を通じてRTLの実装パラメーターに対してより具体的な影響を与えることができます。コードの特定の特性にマップされるさまざまなタイプの命令があります。たとえば、設計者は、HLSエンジンがCコードで識別されるループまたは配列を処理する方法、または特定の操作の遅延を指定できます。これにより、RTL出力に大きな変化が生じる可能性があります。したがって、設計者は、指示の知識があれば、アプリケーションのニーズに応じて最適化を行うことができます。

5、HLSライブラリ

Virginia HLSには、一連のCライブラリ(CおよびC ++を含む)が含まれています。これは、C / C ++を使用して一般的に使用されるハードウェア構造または関数のモデリングに便利で、RTLに統合できます。Virginia HLSで提供されるCライブラリには、次のタイプがあります。

1.任意精度データ型ライブラリ
2、HLSストリームライブラリ
3、HLS数学ライブラリ
4、HLSビデオライブラリ
5、HLS IPライブラリ6、HLS線形代数ライブラリ

HLS設計でライブラリ内の関数を呼び出すと、開発効率を大幅に向上させることができます。

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/114411155