ハードウェア エミュレーションは、SystemC と RTL 協調シミュレーションを組み合わせて使用して、シミュレーションの精度と速度のバランスを調整します。SystemC モデルは、純粋関数モデルとパフォーマンス概要モデルを組み合わせたモデルです。ハードウェア エミュレーションは、ハードウェア精度を 100% を模倣するわけではないので、エミュレーションの実行とハードウェア上でのアプリケーションの実行の間には、動作に多少の違いがあるはずです。これにより、アプリケーションのパフォーマンスに大きな違いが生じる可能性があり、場合によっては、機能の違いを確認できることもあります。
ハードウェアとの機能的な違いは、通常、競合状態やデザイン内の予測不可能な動作になるので、ハードウェアで発生する問題がハードウェア エミュレーションで再現できるとは限りません。ただし、ホストとアクセラレータ間またはアクセラレータとメモリ間の送受信に関連するほとんどの動作は、ハードウェア エミュレーションで再現可能です。このため、ハードウェア エミュレーションは、ハードウェア上で実行する前にアクセラレータの問題をデバッグするための優れたツールといえます。
次の表は、ハードウェア プラットフォームとその精度レベルを模倣するために使用されるモデルを示しています。
ハードウェア機能 | 説明 |
---|---|
ホストからカードへの
PCIe®
接続と DMA (XDMA、SlaveBridge) |
データセンター プラットフォームでは、PCIe を使用した x86 ホスト サーバーへの接続は純粋関数モデルとして実行されるので、パフォーマンス モデリングはありません。したがって、PCIe 帯域幅に関連する問題は、ハードウェア エミュレーションの実行に反映されません。 |
UltraScale™ DDR メモリ、SmartConnect | DDR メモリ コントローラー、AXI SmartConnect、およびその他のデータパス IP 用の SystemC モデルでは、通常スループットは概算です。通常、ハードウェア IP の正確な遅延はモデル化されません。このモデルを使用すると、アプリケーションやアクセラレータ カーネルを変更する際の相対的なパフォーマンス傾向を測定できます。 |
AI エンジン | AI エンジン SystemC モデルはサイクル概算ですが、サイクル精度は 100% にはなりません。AI エンジン シミュレータとハードウェア エミュレーション間では共通のモデルが使用されるため、2 つのステージは妥当に比較できます。 |
Versal NoC および DDR モデル | Versal NoC および DDR SystemC モデルは、サイクル概算です。 |
Arm Processing Subsystem (PS、CIPS) | Arm PS は、純粋関数の実行モデルである QEMU を使用してモデル化されます。詳細は、QEMU を参照してください。 |
ユーザー カーネル (アクセラレータ) | ハードウェア エミュレーションは、ユーザー アクセラレータに RTL を使用します。次のように、アクセラレータの動作自体は 100% 正確です。ただし、アクセラレータはほかの概算モデルに囲まれています。 |
その他の I/O モデル | ハードウェア エミュレーションには、エミュレーション プロセスとインターフェイスできる汎用 Python または C ベースのトラフィック ジェネレーターがあります。デザインの I/O を模倣する AXI プロトコル レベルで抽象トラフィックを生成できます。これらのモデルは抽象的なものであるため、特定のハードウェア ボードで見られた問題はハードウェア エミュレーションでは表示されません。 |
ハードウェア エミュレーションは RTL 協調シミュレーションを実行モデルとして使用するため、実行速度は実際のハードウェアと比較してかなり遅くなります。ザイリンクスでは、小さなデータ バッファーを使用することをお勧めしています。たとえば、コンフィギャラブルなベクター加算があり、ハードウェアで 1024 のエレメントの vadd
を実行している場合、エミュレーションでは 16 のエレメントに制限できます。これにより、アクセラレータを使用してアプリケーションをテストしつつ、妥当な時間内に実行を完了できます。