このデモはMPEG-4デコーダを実際にエミュレーションしたものです。以下に詳細を解説します。
ZeBuはEVE が提供するハードウェア支援型のプラットフォームのパイオニアで、独自の「ソフトエミュレーション・プロトタイプ」を体現しています。これはプロトタイピングボードとハードウェアエミュレータとソフトウェアデバッガを融合させたものです。ZeBuは内部ロジックを網羅的に視認できるFPGAをベースにしており、ハードウェア設計者が必要とするものをほぼすべて用意しています。
ZeBuは、高性能システムレベルHW/SW協調検証環境の実現を可能にする、トランザクション・ベースのコ・エミュレーションをサポートします。詳細なビットレベル通信はエミュレータ・ハードウェアにマッピングされ、そして高速インタフェースによってホストPC上で実行されるテストベンチとのトランザクションレベル通信が行われます。これにより、インサーキット・エミュレーションおよびプロトタイプ・システムでしか通常達成できない速度での動作を行う、トランザクション・ベースのコ・エミュレーション環境が実現されます。
今までのハードウェアエミュレータが高価なのとは違い、ZeBuの価格はソフトウェア開発者からハードウェア設計者まで、各開発者に持たせることが可能で、しかも開発プロセスのどの時点でも活用できます。ハードウェア設計チームはFPGAに回路をマッピングしてペリフェラルモジュールをテストします。同時に、ソフトウェア開発者は重要なコードの一部を実行してペリフェラル・ドライバを開発します。どちらも同じモデルを使用しているので、回路のバグフィックスはソフト開発側でも活かされます。同様に、ペリフェラル・ドライバを書き終わると同時にハード設計側に渡して、より網羅的な統合テストが運用できます。
究極的には、ソフトウェア開発者とハードウェア設計者が、各自が使い慣れたインタフェースを介しつつ、協力し合います。ソフトウェア開発者はZeBuに関する知識を持たずにCコードのデバッガに「xt-gdb」(標準的なGNUツールをXtensaプロセッサ向けに修正したもの)を使い、ZeBuでデザインをエミュレーションします。ハードウェア設計者はZeBuのグラフィカルツールでシミュレーションの論理部を制御します。各回路バスおよび信号の波形とモニタはいつでも確認でき、内部メモリの内容も、FPGAの奥深くに埋め込まれているものでも、実行中はいつでも確認と修正が可能です。回路のクロックはグラフィカルインタフェースから管理します。シミュレーションをサイクルごとに実行して回路動作の微妙な変化も逃さず観察したり、数100万サイクルを一度に走らせたりすることができます。
ソフトウェアとハードウェアの間でシミュレーションの制御を共有するのは難題です。ソフトウェア開発者はCコードにブレークポイントを入れてシミュレーションを止めようとするのに対して、ハードウェア設計者は回路を特定の状態に入ったときに止めたいと考えるかもしれません。この問題はZeBuのトランザクタのサポートでなら、ハードとソフトの同期を維持しながら解決できます。
例として、無線機器向けに省電力のMPEG-4デコーダを開発することを想定しましょう。携帯電話に映画の予告編を表示させるためには、消費電力の低い小型のMPEG-4デコーダが必要です。デコーダのデザインは、Open Source Initiative (OSI) の発行するMoMuSysなどの、MPEG-4規格の参照用Cコードの上に成り立っています。チップはTensilicaのコンフィギャラブル・プロセッサXtensaをベースにします。MPEG-4のデータフローを復号するのに最適化を2つ適用します。逆離散コサイン変換(iDCT)アクセラレータの定義と、ベクタ処理(SIMD)、ビットの操作と抽出(ビットストリーム)およびYCbCrとRGBとの色形式変換で使用する命令セットです。
結果は要件を満足させるものでした。約12万ゲートの再利用可能なコンポーネントで、20万行のCコードからなるプログラムを実行するプロセッサを搭載し、しかもプロセッサリソースは10%以下しか使用されません。プロセッサの動作周波数は200 MHzで、15フレーム/秒のQCIFフォーマットのビデオをリアルタイムで復号可能です。
この回路の検証では、いくつか面白い問題が発生しました。「Monsters Inc」などの映画の予告編を全部表示するには、およそ10億クロックサイクルかかります。今までは、ソフトウェア開発者とハードウェア設計者の要望をどちらも満たす方法はありませんでした。
MPEG-4デコーダは合成されてZeBuにマッピングされました。ペリフェラルとメモリコントローラは簡単なソフトウェアコードを用いてハードウェアレベルで検証しました。完成したデコーダのコードはプロセッサに置かれ、ソフトウェアデバッガにつなぎました。4時間かけてトランザクタを作成し、これを使って各フレームの画像をデコーダのフレームバッファからPCのウィンドウにリアルタイムにキャプチャしました。
ZeBu上のXtensaプロセッサは30 MHzで動作し、1秒間にビデオピクチャを約20フレーム作成します。この性能では実モーションをカクカクした動作を発生させずに生成でき、高速化の比率はISSに比べて約50倍です。
ZeBuのような検証プラットフォームでは、ハードとソフトの共同使用を最適化するために特定のタスクの実行方法を修正することができます。ビデオデコーダでは、CのテストプログラムにはMPEG-4のデータフローかまたは数MBのデータが含まれているのが普通です。JTAGインタフェースからこのプログラムを読み込むには10分かかります。データフローの読み込みプロセスをハードウェアに移せば時間が節約できます。ZeBuではPCIバスから回路のメモリに直接アクセスできます。ハードのインタフェースを介せば、MPEG-4ビデオは数秒でダウンロードできます。一方でCのプログラムはソフトウェアデバッガとJTAGインタフェースから読み込みを続けます。
最後に、ZeBuはハードウェア/ソフトウェアの協調検証には最適なソリューションのようですが、本当にバグの発見・特定・修正が効率的にできるのかどうかという疑問が残ります。
ZeBuのツールのハードウェアデバッグ機能の一例として、ペリフェラルのメモリコントローラのデザインエラーを迅速に発見したことを挙げましょう。このバグは読み込みと書き込みのシーケンスが立て続けに発生したときに2個のデータが混ざってしまうというものです。問題の兆候は、モジュールテストでは発見されませんでしたが、200万サイクル後デコーダの画像に、未復号の衛星テレビの画面のように、むらが発生するところに現れました。
ZeBuの問題解析用の3種類の機能を使うことで、バグを迅速に発見して修正できました。3つの機能とは、コードがどうしているかを突き止めるためのC コードのブレークポイント(ソフトウェア側)と、メモリの内容を取得して不正ワードを即時に表示させる機能とメモリコントローラの内部信号を表示する機能(ハードウェア側)です。
ハード設計とソフト開発を同時に結び付けることができなければ、このバグの修正は時間に間に合わず、プロジェクトのスケジュールに深刻な影響を与えたかもしれません。