
集積回路設計において、ハードウェアエミュレーションとは、1つまたは複数のハードウェア(通常は設計中のシステム)の動作を、別のハードウェア(通常は専用のエミュレーションシステム)で模倣するプロセスです。エミュレーションモデルは通常、ハードウェア記述言語(例:Verilog)のソースコードに基づいており、エミュレーションシステムで使用される形式にコンパイルされます。その目的は通常、設計中のシステムのデバッグと機能検証です。多くの場合、エミュレータは十分に高速であるため、まだ製造されていないチップの代わりに動作中のターゲットシステムに接続でき、システム全体をライブデータでデバッグできます。これは、インサーキットエミュレーションの特殊なケースです。
ハードウェアエミュレーションは、ソフトウェアエミュレーションの機能を支援するハードウェアプロセッサを搭載した拡張カードなどのハードウェアデバイスと混同されることがある。例えば、異なるプロセッサファミリーのマザーボード上でx86 OSを実行できるようにする、x86チップを搭載した古いドーターボードなどが挙げられる。
シリコン集積回路の再設計やステップアップの大部分は、設計プロセスのRTL段階で意図せず導入された機能エラーやバグに少なくとも部分的に起因しています。したがって、包括的な機能検証は、開発コストを削減し、製品を期日通りに納品するための鍵となります。設計の機能検証は、多くの場合、ロジックシミュレーションやフィールドプログラマブルゲートアレイ(FPGA)上でのプロトタイピングを使用して行われます。それぞれに長所と短所があり、多くの場合両方が使用されます。ロジックシミュレーションは、簡単、正確、柔軟、低コストです。しかし、シミュレーションは大規模な設計には十分な速度ではなく、ハードウェア設計に対してアプリケーションソフトウェアを実行するにはほとんどの場合遅すぎます。FPGAベースのプロトタイプは高速で安価ですが、大規模な設計を複数のFPGAに実装するには非常に時間がかかり、エラーが発生しやすくなります。設計上の欠陥を修正するための変更も実装に時間がかかり、ボード配線の変更が必要になる場合があります。従来のベンダーツールでは、FPGAプロトタイプのデバッグ機能は限られており、FPGA内部の信号をリアルタイムでプローブすることは非常に困難で、プローブを移動するためにFPGAを再コンパイルするには時間がかかりすぎます。信号の可視性に関する制限を取り除く、より高度なFPGAプロトタイプデバッグツール[ 1 ]の登場により、この状況は変化しつつあります。一般的な妥協策は、バグや修正が頻繁に発生する検証プロセスの初期段階でシミュレーションを使用し、設計がほぼ完了し、残っているシステムレベルのバグを発見するために十分なテストを行うスピードが必要な開発サイクルの終盤でプロトタイピングを使用することです。FPGAプロトタイピングは、ソフトウェアのテストにも広く利用されています。
シミュレーションの高速化は、シミュレーションのパフォーマンス上の欠点をある程度解消できます。ここでは、設計がハードウェアアクセラレータにマッピングされてはるかに高速に実行され、テストベンチ(および動作設計コード)はワークステーション上のシミュレータで引き続き実行されます。高帯域幅で低遅延のチャネルがワークステーションとアクセラレータを接続し、テストベンチと設計の間で信号データを交換します。アムダールの法則によれば、チェーンの中で最も遅いデバイスが達成可能な速度を決定します。通常、これはシミュレータ内のテストベンチです。非常に効率的なテストベンチ(C言語で記述されているか、トランザクションベース)の場合、チャネルがボトルネックになる可能性があります。場合によっては、トランザクションレベルのテストベンチは、エミュレートされている設計に「ライブ」刺激と同量のデータを供給できます。
インサーキットエミュレーションは、FPGAプロトタイプの実装時間をいくらか短縮し、包括的で効率的なデバッグ機能を提供します。ただし、FPGAプロトタイプ(7万5千ドル)と比較すると、エミュレーションは実行速度とコスト(100万ドル以上)が高くなります。エミュレーションを別の角度から見ると、シミュレーションされたテストベンチの代わりに「ライブ」刺激を用いることで、アクセラレーションのパフォーマンスが向上します。この刺激は、ターゲットシステム(開発中の製品)またはテスト機器から得ることができます。シミュレーションの1万倍から10万倍の速度で、エミュレーションは包括的なハードウェアデバッグ環境を提供しながら、アプリケーションソフトウェアのテストを可能にします。
シミュレーションとプロトタイピングは、実行方法が異なる2つのスタイルを伴います。シミュレーションではRTLコードが逐次的に実行されますが、プロトタイプでは完全に並列的に実行されます。これにより、デバッグ方法に違いが生じます。シミュレーションでは、次のようになります。
プロトタイプを使用:
アクセラレーションとエミュレーションは、RTL実行とデバッグの観点から見ると、プロトタイピングとシリコンに近いと言えます。なぜなら、設計全体がシリコン上で実行されるのと同様に同時に実行されるからです。シミュレーションのアクセラレーションとインサーキットエミュレーションの両方に同じハードウェアが使用されることが多いため、これらのシステムは、大きく異なる2つのデバッグスタイルを融合させたものとなります。
ハイエンドのハードウェアエミュレータは、ロジックシミュレータに見られる多くの機能を備えたデバッグ環境を提供し、場合によってはロジックシミュレータのデバッグ機能を凌駕することさえあります。
シミュレーションとアクセラレーションおよびエミュレーションのもう1つの違いは、アクセラレータが実装にハードウェアを使用していることに起因する 。アクセラレータは2つの論理状態しか持たず 、製造されたシリコンと同じように動作する。これは次のことを意味する。
これらのタスクは、論理シミュレーション中、または静的タイミング解析ツールを使用して適切に実行されます。
エミュレータと FPGA プロトタイピング システムの従来からの重要な違いは、エミュレータは豊富なデバッグ環境を提供するのに対し、プロトタイピング システムはデバッグ機能がほとんどまたは全くなく、主に設計のデバッグ後にシステム分析やソフトウェア開発のために複数のコピーを作成するために使用されるという点である。小さな FPGA LUT の影響で RTL 信号を完全に可視化し、深いキャプチャ深度を可能にし、マルチチップおよびクロック ドメイン分析を提供する新しいツールが登場しており、エミュレータに匹敵する効率的なデバッグが可能になっている。[ 2 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)