(57)【特許請求の範囲】
【請求項１】
ホストシステムとエミュレータの間の帯域幅を削減するためにホストシステム上で実行するコンピュータ実施プロセスであって、
複数のセクションを備えたＩＣ（Integrated Circuit）の設計に対応するＤＵＴ（Design Under Test）のエミュレーションに基づき、エミュレータによってトレースされた第１信号を前記エミュレータから受信し、
前記エミュレータによってトレースされなかった前記ＤＵＴの第２信号を求めるリクエストを受信し、
前記第１信号と組み合わせてシミュレーションされた時に前記第２信号を生成する前記ＤＵＴの少なくとも１つのセクションを前記複数のセクションから特定し、
前記少なくとも１つの特定されたセクションを記述する複数のセクションファイルのうちの少なくとも１つを読み出し、前記エミュレータから受信した前記第１信号を少なくとも部分的に使用して、前記少なくとも１つの特定されたセクションをシミュレーションし、
前記第２信号を生成する、ことを備えるプロセス。
【請求項２】
請求項１に記載のプロセスにおいて、
リクエストされていない前記ＤＵＴの機能を評価するための第３信号を、前記シミュレーションに基づき、生成することをさらに備えるプロセス。
【請求項３】
請求項１に記載のプロセスにおいて、
前記第１信号は、前記ＤＵＴの前記エミュレーションの完了後、前記エミュレータから追加の信号とともに受信される、プロセス。
【請求項４】
請求項１に記載のプロセスにおいて、
前記少なくとも１つの特定されたセクションは、他のセクションの一部である、プロセス。
【請求項５】
請求項１に記載のプロセスにおいて、
前記少なくとも１つの特定されたセクションは、第１セクションと第２セクションとを含み、前記第１セクションは、前記第１信号に基づき、第３信号を生成し、前記第２セクションは、前記第３信号に基づき、前記第２信号を生成する、プロセス。
【請求項６】
請求項１に記載のプロセスにおいて、
複数の信号は、前記エミュレータから受信され、前記複数の信号は、前記第１信号を含み、前記プロセスは、さらに、
前記少なくとも１つの特定されたセクションに基づき、前記シミュレーションのための前記複数の信号から前記第１信号を選択することを備えるプロセス。
【請求項７】
請求項１に記載のプロセスにおいて、
多数の信号、又は、前記ホストシステムによって実行される多数のプロセスに基づき、前記複数のセクションを生成し、各セクションをシミュレーションすることをさらに備えるプロセス。
【請求項８】
命令を記憶する非一時的コンピュータ可読媒体であって、前記命令は、ホストシステムによって実行される時、前記ホストシステムに、
ＩＣ（Integrated Circuit）のデザインに対応するＤＵＴ（Design Under Test）のエミュレーションに基づき、エミュレータによってトレースされた第１信号を前記エミュレータから受信させ、
前記エミュレータによってトレースされなかった前記ＤＵＴの機能を評価するための第２信号を求めるリクエストを受信させ、
前記ＤＵＴの複数のセクションから、前記第２信号の生成をシミュレーションするための前記ＤＵＴのセクションのサブセットを判定させ、
前記第１信号に基づき、前記セクションのサブセットをシミュレーションさせ、
前記セクションのサブセットの前記シミュレーションに基づき、前記第２信号を生成させる、非一時的コンピュータ可読媒体。
【請求項９】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記命令は、さらに、前記ホストシステムに、シミュレーションに基づいて、リクエストされていない前記ＤＵＴの機能を評価するための第３信号を生成させる、非一時的コンピュータ可読媒体。
【請求項１０】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記第１信号は、前記セクションのサブセットに含まれるセクションの入力である非一時的コンピュータ可読媒体。
【請求項１１】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記第１信号は、前記ＤＵＴの前記エミュレーションの完了後、前記エミュレータから追加の信号とともに受信される非一時的コンピュータ可読媒体。
【請求項１２】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記セクションは、他のセクションの一部である非一時的コンピュータ可読媒体。
【請求項１３】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記セクションのサブセットは、第１セクションと第２セクションとを含み、前記第１セクションは、前記第１信号に基づいて第３信号を生成し、前記第２セクションは、前記第３信号に基づいて前記第２信号を生成する非一時的コンピュータ可読媒体。
【請求項１４】
請求項８に記載の非一時的コンピュータ可読媒体において、
複数の信号は、前記エミュレータから受信され、前記複数の信号は、前記第１信号を含み、前記命令は、さらに、前記ホストシステムに、
前記判定されたセクションのサブセットに基づき、前記シミュレーションを行うための前記複数の信号から前記第１信号を選択させる、非一時的コンピュータ可読媒体。
【請求項１５】
請求項８に記載の非一時的コンピュータ可読媒体において、
前記命令は、さらに、前記ホストシステムに、
多数の信号、又は前記ホストシステムによって実行される多数のプロセスに基づき、前記複数のセクションを生成させ、各セクションをシミュレーションさせる、非一時的コンピュータ可読媒体。
【請求項１６】
エミュレーションを行うＤＵＴ（Design Under Test）の受信に際して呼び出された時、ホストシステム上で実行するコンピュータ実施プロセスであって、
テストされるべきＩＣ（Integrated Circuit）のデザインに対応する前記ＤＵＴのエミュレーションに基づき、エミュレータによってトレースされた第１信号を前記エミュレータから受信し、
前記エミュレータによってトレースされなかった前記ＤＵＴの機能を評価するための第２信号を求めるリクエストを受信し、
前記ＤＵＴの複数のセクションから、前記第２信号の生成をシミュレーションするための前記ＤＵＴのセクションのサブセットを判定し、
前記第１信号に基づき、前記セクションのサブセットをシミュレーションし、
前記セクションのサブセットの前記シミュレーションに基づき、前記第２信号を生成する、ことを備えるプロセス。
【請求項１７】
請求項１６に記載のプロセスにおいて、
前記シミュレーションに基づき、リクエストされていない前記ＤＵＴの機能を評価するための第３信号を生成することをさらに備えるプロセス。
【請求項１８】
請求項１６に記載のプロセスにおいて、
前記セクションのサブセットは、第１セクションと第２セクションとを含み、前記第１セクションは、前記第１信号に基づいて第３信号を生成し、前記第２セクションは、前記第３信号に基づいて前記第２信号を生成するプロセス。
【請求項１９】
請求項１６に記載のプロセスにおいて、
複数の信号は、前記エミュレータから受信され、前記複数の信号は、前記第１信号を含み、前記プロセスは、さらに、
前記判定されたセクションのサブセットに基づき、前記シミュレーションのための前記複数の信号から前記第１信号を選択することを備えるプロセス。
【請求項２０】
請求項１６に記載のプロセスにおいて、
多数の信号、又は、前記ホストシステムによって実行される多数のプロセスに基づき、前記複数のセクションを生成し、各セクションをシミュレーションすることをさらに備えるプロセス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、回路のエミレーション全般に関し、特に、エミュレーション結果の取得に関する。
【背景技術】
【０００２】
エミュレータは、回路設計者が高度に複雑な集積回路の設計及びデバグを行うのをアシストするために開発されてきた。エミュレータは、ＤＵＴ（Design Under Test）の動作をともに模倣することのできる、ＦＰＧＡ（Field Programmable Gate Arrays）等、マルチプルに再構成可能な構成要素を含む。設計者は、ＤＵＴの動作を模倣するエミュレータを使用することにより、製造に先立って、ＤＵＴが種々の設計要件に対応していることを検証することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
エミュレーションの一態様は、ＤＵＴのエミュレーションを行うことと、エミュレータからエミュレーション結果を読み出すこととを含む。エミュレーション結果は、例えば、ＤＵＴのタイミング関係とデジタルロジック動作とを検証するために解析することができる。１つのアプローチによると、エミュレーション結果は、解析を実施するための他のシステムに転送される。例えば、エミュレーション結果の波形は、ＤＵＴのタイミング関係とデジタルロジック動作とをグラフィック表示するために、他のシステムで生成される。高度なプロセス（例えば、２２ｎｍ以下）において、ＤＵＴは、数十億のロジック回路と信号を含むことがある。このような複雑なＤＵＴのエミュレーションを行うことには、エミュレータから他のシステムに、マルチサイクルに対する数十億の信号の状態又は値を含む膨大な量のデータを転送することが含まれる。従って、従来のエミュレーション環境は、エミュレータシステムを減速させずにデータ転送を行うために採用されるハードウェアリソース及び通信リソースの点で不十分である。
【図面の簡単な説明】
【０００４】
開示の実施形態は、詳細な説明、添付のクレーム、添付の図（又は図面）からさらに容易に明らかとなる他の効果及び特徴を有する。図面の簡単な紹介については、以下の通りである。
【０００５】
【図１】一実施形態に係るエミュレーション環境のブロック図である。
【図２】一実施形態に係るＤＵＴの一例としての回路を備えたエミュレーション環境の一例を示す図である。
【図３】一実施形態に係るホストシステムのブロック図である。
【図４】一実施形態に係るＤＵＴのエミュレーションのために準備するホストシステムを示すフローチャートである。
【図５】一実施形態に係る、ホストシステム、及び、ＤＵＴの信号をトレースするエミュレータを構成するフローチャートである。
【図６】機械可読媒体から命令を読み出し、それらをプロセッサ（又はコントローラ）で実行することができる一例としての機械の構成要素の一実施形態を示す図である。
【発明を実施するための形態】
【０００６】
図面（図）及び以下の説明は、単なる例示としての好適な実施形態に関連する。以下の検討から、本明細書に開示の構造及び方法の代替実施形態が、クレームの原則から逸脱することなく採用されてもよい実行可能な代替として、容易に認識されるであろうことに留意しなければならない。
【０００７】
以下、添付の図面に例を示したいくつかの実施形態について、詳細に参照する。図面は、例示のみを目的として本開示のシステム（又は方法）の実施形態を示すものである。以下の説明より、本明細書に記載の原則から逸脱することなく、本明細書に示す構造及び方法の代替実施形態が採用されてもよいことを認識しなければならない。
【０００８】
図面では、同様の要素を特定するために同様の参照符号を使用している。「２３０Ａ」等、参照符号に続く文字は、本文がその特定の参照符号を有する要素を具体的に参照していることを示している。「２３０」等、本文中、後続の文字を伴わない参照符号は、その参照符号を持つ図中の要素のいずれか又は全部を参照している。
概要
【０００９】
本開示のエミュレーション環境は、ＤＵＴ（Design Under Test）の帯域幅及びリソース効率のよい解析を実施する。エミュレーション環境の一実施形態には、ホストシステムと、エミュレータとが含まれる。ホストシステムは、ＤＵＴのエミュレーションを行うようにエミュレータを構成し、エミュレータは、これに応じて、ＤＵＴのエミュレーションを行う。エミュレーション中、エミュレータは、ＤＵＴの限定的信号をトレースし、トレースされた信号の値（例えば、状態）を記憶する。一実施形態において、このトレース信号は、ＤＵＴのマルチサイクルを備える。ＤＵＴの特定の信号の値がＤＵＴの解析又は検証に必要とされるものの、それらの信号がエミュレータによってトレースされなかった時、ホストシステムは、信号をトレースさせるＤＵＴの１つ以上のセクションを決定し、未トレース信号（例えば、１つ以上のサイクルを備える）を生成するために、これらのセクションのシミュレーションを行う。エミュレータによってトレースされた（すなわち、エミュレーションされた）信号は、１つ以上のセクションのシミュレーションを行うのに使用される。従って、ホストシステムがＤＵＴのセクションのシミュレーションを行えることにより、ホストシステムは、追加のＤＵＴ信号の値を取得することができ、エミュレータがトレースする信号数は、より少なくて済む。さらに、エミュレータによってトレースされる信号の数が、より少なくて済むため、エミュレータとホストシステムとの間で交換される信号の数が、より少なくて済み、これにより、通信帯域幅の削減を達成できる。さらに、このソリューションは、非常に拡張性がある。要求された信号がシミュレーション演算と均衡可能であるため、このソリューションは、ＤＵＴがより大きく複雑になっても影響を受けない。例えば、トレースされる信号は、より少なくでき、より多くの信号をシミュレーションによって演算することができる。
【００１０】
本明細書中のエミュレーションとは、構成可能なハードウェア構成要素により、電子設計の挙動を模倣することをいう。
【００１１】
本明細書中のシミュレーションとは、ソフトウェアモデルにより、電子設計の挙動を模倣することをいう。
【００１２】
本明細書中の信号とは、搬送、モニタリング、又はトレースされる値を有するデザインのネット、ワイヤ、変数、ポート、又は要素をいうが、これに限定されるものでない。
【００１３】
本明細書中の信号をトレースする／生成するということは、電子設計のエミュレーション又はシミュレーションに基づき、信号の値を取得することをいう。さらに、本明細書中、信号について言及する時、これは、電子設計中の信号又はその信号の値をいう。
エミュレーション環境
【００１４】
図１は、一実施形態に係るエミュレーション環境１００を示すブロック図である。エミュレーション環境１００は、エミュレータ１１０と、ホストシステム１２０とを含む。エミュレータ１１０及びホストシステム１２０は、インタフェース１１５を介して通信する。
【００１５】
インタフェース１１５は、ホストシステム１２０とエミュレータ１１０との間の通信を可能にする通信媒体である。一実施形態において、インタフェース１１５は、電気的接続を備えた１つ以上のケーブルである。例えば、インタフェース１１５は、１つ以上のＲＳ２３２ケーブル、ＵＳＢケーブル、ＬＡＮケーブル、光学ケーブル、ＩＥＥＥ１３９４（ＦｉｒｅＷｉｒｅ）ケーブル、又は特注ケーブルである。他の実施形態において、インタフェース１１５は、無線通信媒体又は１つ以上のアクセスポイントを備えたネットワークである。他の例として、インタフェース１１５は、Ｂｌｕｅｔооｔｈ（登録商標）又はＩＥＥＥ８０２．１１プロトコルを採用した無線通信媒体であってもよい。一実施形態において、インタフェース１１５は、ホストシステム１２０及びエミュレータ１１０の動作中に有効化される。一実施形態において、インタフェース１１５は、ホストシステム１２０及びエミュレータ１１０が互いに情報交換を必要とする時に限り、有効化される。
【００１６】
エミュレータ１１０は、ＤＵＴ（Design Under Test）のエミュレーションを行うハードウェアシステムである。ＤＵＴは、１つ以上の回路デザインを含む。エミュレーションされるＤＵＴは、組み合わせ型、シーケンス型、又は双方の組み合わせのいずれかとすることができる。エミュレータ１１０は、ＤＵＴのエミュレーションを行うように構成可能なマルチプルＦＰＧＡ（Field-Programmable gate arrays）２２０を含む。各ＦＰＧＡ２２０は、エミュレーション中にＦＰＧＡ２２０によってトレースされる信号の値（例えば、エミュレーション中のＤＵＴ信号の状態）を記憶するトレースメモリ２９０（例えば、トレースバッファ）を含む。他の実施形態において、エミュレータ１１０は、ＦＰＧＡ２２０の代わりに構成可能な他の種類のロジック回路を含む。他の実施形態において、エミュレータ１１０は、ＦＰＧＡ２２０とは別に１つ以上のトレースメモリ２９０を含み、この場合、１つ以上のトレースメモリ２９０は、マルチプルＦＰＧＡ２２０がデータを記憶するのに使用可能である。他の実施形態において、エミュレータ１１０は、最適なトレースシステムを達成するために、ＦＰＧＡ２２０、又はその他の構成可能な回路の混合構造と、構成要素内又はそれらから離隔して配置されたメモリの混合構造とを含む。他の実施形態において、エミュレータ１１０は、トレースに特化されたメモリを含まず、デザインのモデル化するのに、又はトレースされたデータをインタフェース１１５上で直接ストリーミングするのに使用可能なメモリを使用する。エミュレータ１１０は、エミュレーションが終了した後、又はエミュレーション中に、１つ以上のトレースメモリ２９０に記憶されているトレース信号の値を、ホストシステム１２０に送信してもよい。エミュレータ１１０は、ホストシステム１２０からのリクエストの受信に反応して、又は、ホストシステム１２０からリクエストの受信に先立って、１つ以上のトレースメモリに記憶されているトレース信号の値も送信してよい。エミュレータ１１０によってホストシステム１２０に送信されるトレース信号の値は、マルチプルＤＵＴサイクルに及びうる。
【００１７】
エミュレーションされるべきＤＵＴについて、エミュレータ１１０は、ホストシステム１２０からインタフェース１１５を介して、ＤＵＴの記述（例えば、ＤＵＴのゲートレベル又はＨＤＬ（Hardware Description Language）レベル記述のマッピング）を含む１つ以上のバイナリファイルを受信する。このバイナリファイルは、ホストシステム１２０によって生成されたＤＵＴのパーティションとＦＰＧＡ２２０に対応付けられる各パーティションのマッピングとを記述する。エミュレータ１１０は、バイナリファイルに基づき、ＦＰＧＡ２２０にマッピング（割り当て）されたＤＵＴのパーティションをエミュレーションし、その各パーティションにおいて特定の信号をトレースするように、各ＦＰＧＡ２２０を構成する。複数のＦＰＧＡ２２０は、共同でＤＵＴのエミュレーションを行う。エミュレーション中にＦＰＧＡ２２０によってトレースされた信号の値は、インタフェース１１５を介してホストシステム１２０に転送される前に、ＦＰＧＡ２２０によってＦＰＧＡ２２０のトレースメモリ２９０に一時的に記憶される。これらの信号は、後述の通り、追加情報の生成及び／又はＤＵＴのエミュレーション結果の処理のために使用される。
【００１８】
ホストシステム１２０は、ＤＵＴ（Design Under Test）のエミュレーションを行うようにエミュレータ１１０を構成する。ホストシステム１２０は、単一のコンピュータであってもよく、マルチプルコンピュータの集合体であってもよい。ホストシステム１２０がマルチプルコンピュータからなる実施形態において、ホストシステム１２０によって実施されるものとして本明細書に記載の機能は、マルチプルコンピュータ間で分担されてもよい。ホストシステム１２０は、他のデバイス、他のコンピュータ、又は他のネットワークを介してエミュレータ１１０に間接的に接続されてもよい。
【００１９】
ホストシステム１２０は、ユーザから、エミュレータ１１０によってエミュレーションされるべきＤＵＴの記述を受信する。一実施形態において、ＤＵＴの記述は、ＲＴＬ（Resister Transfer Language）等、ＨＤＬの類いである。ホストシステム１２０は、ＤＵＴのＨＤＬ記述に基づき、ゲートレベルネットリストを生成する。ホストシステム１２０は、ＤＵＴをマルチプルパーティションに分けるのに、ＨＤＬ又はゲートレベルネットリストを使用する。ホストシステム１２０は、エミュレータ１１０に含まれる１つ以上のＦＰＧＡ２２０に各パーティションをマッピング（割り当て）する。複数のＦＰＧＡ２２０は共に、ＤＵＴのエミュレーションを行い、ＤＵＴの特定の信号をトレースするであろう。
【００２０】
ホストシステム１２０は、ＦＰＧＡ２２０をＤＵＴ及びマッピングに基づいて構成するための情報を含むバイナリファイルを生成する。バイナリファイルには、例えば、１つ以上のパーティションのデザイン記述（例えば、ゲートレベル記述又はＨＤＬ記述）、マッピング情報（例えば、パーティションのマッピング）、接続情報（例えば、ＤＵＴの構成要素間の接続及び／又はＦＰＧＡ間の接続）、及びＤＵＴに対する設計上の制約が含まれてもよい。
【００２１】
また、ホストシステム１２０は、ホストシステム１２０によるシミュレーションのために利用可能なＤＵＴのセクションを特定する。ＤＵＴのセクションは、パーティションの一部であってもよく、又はパーティション全体を包含してもよい。一実施形態において、セクションの集合は、ＤＵＴ全体を包含する。或いは、セクションの集合は、ＤＵＴの一部分を包含してもよい。他の実施形態において、ＤＵＴのセクションは、シミュレーションのために利用可能なマルチプルパーティションの一部であってもよい。一実施形態において、セクションの少なくとも１つのエッジ（例えば、回路又は信号）は、パーティションのエッジ（例えば、回路又は信号）に対応する。他の実施形態において、セクションのどのエッジ（例えば、回路又は信号）も、パーティションのエッジ（例えば、回路又は信号）に対応しなくてもよい。
【００２２】
必要な時にホストシステム１２０がセクションのシミュレーションを行い、ＤＵＴのエミュレーション中、エミュレータ１１０によってトレースされないＤＵＴセクションの特定の信号の値を取得することができるように、ＤＵＴのセクションは特定される。従って、ＤＵＴのセクションは、ＤＵＴのエミュレーション時にエミュレータ１１０によるエミュレーションが行われるが、ホストシステム１２０は、そのセクションのシミュレーションも行って、エミュレータ１１０によってトレースされなかった追加の信号を生成してもよい。一例として、ＤＵＴの解析を実施するために、特定の信号の値が望まれるものの、この信号は、ＤＵＴのエミュレーション中、エミュレータ１１０によってトレースされていないと仮定する。ホストシステム１２０は、この信号を含むＤＵＴのセクションのシミュレーションを行い、この所望の信号の値を得る（すなわち、信号を生成する）ことができる。一実施形態において、ホストシステム１２０は、生成（すなわち、シミュレーション）の必要がある各追加の信号について、セクションの特定及びシミュレーションを行う。他の実施形態において、ホストシステム１２０は、エミュレータ１１０によってトレースされなかったＤＵＴ信号のサブセット又はＤＵＴ信号全部について、そのセクションの特定及びシミュレーションを行う。
【００２３】
ホストシステム１２０は、特定された各セクションの回路を記述する１つ以上のセクションファイルを生成する。一実施形態において、セクションファイルは、特定されたセクション毎に生成される。例えば、セクションファイルは、信号のサブセットからデザインの部分的挙動のシミュレーションを可能にするオリジナルＨＤＬ、オリジナルＨＤＬから得られた修正ＨＤＬ、ゲートレベルネットリストから推定されたＨＤＬ、ゲートレベルネットリスト、システムＣモデル、Ｃ／Ｃ＋＋モデル、バイナリ表現、又はデザインの任意の表現とすることができる。ホストシステム１２０は、ホストシステム１２０によるシミュレーション時に、ＤＵＴの特定されたセクション毎に生成された信号と、エミュレータ１１０によるエミュレーション時に、パーティション毎にトレースされた信号と、を記述する信号情報も生成する。セクションについては、信号情報は、いずれの信号（又は信号の値）がセクションのシミュレーションを行うために必要とされるかも記述する。必要とされる信号は、エミュレーション中に、エミュレータ１１０によってトレースされる信号であってもよい。一実施形態において、エミュレーション中、エミュレータ１１０によってトレースされる信号は、特定されたセクションの入力である。必要とされる信号は、１つ以上の他のセクションのシミュレーションから得られた信号であってもよい。ホストシステム１２０は、このセクション及びバイナリファイルとともに、生成された信号情報を記憶する。
【００２４】
各々にマッピングされた各パーティションのエミュレーションを行うようにＦＰＧＡ２２０を、エミュレータ１１０が構成できるように、ホストシステム１２０は、バイナリファイルをエミュレータ１１０に送信する。ホストシステム１２０は、エミュレータ１１０にＤＵＴのエミュレーションを行うように命令する。各ＦＰＧＡ２２０は、各々のパーティションのエミュレーションを行い、エミュレーション中にトレースした信号の値を各々のトレースメモリ２９０に記憶する。一実施形態において、トレースメモリ２９０の内容は、ＦＰＧＡ２２０がＤＵＴのエミュレーション中でない時、エミュレータ１１０により、インタフェース１１５を介してホストシステム１２０に送信される。他の実施形態において、エミュレータ１１０は、ＦＰＧＡ２２０によるＤＵＴのエミュレーション中に、インタフェース１１５を介してホストシステム１２０に、トレースメモリ２９０の内容を送信することにより、ＤＵＴのエミュレーションと並行して、インタフェース１１５上でトレースされた情報のストリームの生成及び送信を行う。
【００２５】
さらに、ホストシステム１２０は、ＤＵＴの解析又は検証を実施するために必要なＤＵＴの信号の値を示す検証設定を受信する。検証設定は、例えば、ＤＵＴのデバグ又はテストのためにＤＵＴの特定の信号をトレースすることを求めるユーザからのリクエストであってもよい。検証設定は、ＤＵＴの性能を解析するために使用される状態機械も含んでもよい。検証設定は、デザインエミュレーション結果を解析するシステムＣモデル、Ｃ／Ｃ＋＋モデル、プログラム、又はスクリプトを含んでもよい。
【００２６】
ホストシステム１２０は、受信した検証設定に基づき、ＤＵＴの解析を実施するために得られる必要があるＤＵＴの信号の値を特定する。ホストシステム１２０は、記憶された信号情報に基づき、１つ以上の特定された信号の値をシミュレーション時に提供するＤＵＴのセクションを特定する。さらに、ホストシステム１２０は、エミュレータのＦＰＧＡ２２０によってトレースされた信号のうちのいずれが、特定されたセクションをシミュレーションするのに必要かを判定する。
【００２７】
ホストシステム１２０は、特定されたセクションのデザインを記述した記憶されている１つ以上のセクションファイルを読み出し、エミュレータ１１０から受信したトレース信号の値を使用して、特定されたセクションのシミュレーションを行う。特定されたセクションのシミュレーションにより、結果として、ホストシステム１２０がＤＵＴの解析を実施するために必要な特定された信号（例えば、マルチサイクルを備える）を生成する。一実施形態において、ホストシステム１２０は、波形として表示される、一つ以上の特定された信号を含むユーザインタフェースを生成する。一実施形態において、特定されたセクションのシミュレーションを行うのに必要な特定の信号がエミュレータ１１０によってトレースされなかった場合、ホストシステム１２０は、１つ以上の他のセクションのシミュレーションを行い、それらの信号を生成する。
【００２８】
ホストシステム１２０においてＤＵＴのセクションのシミュレーションを行うことにより、ホストシステム１２０は、これらの信号をトレースすべきエミュレータ１１０の代わりに、ＤＵＴの特定の信号を生成することができ、これによってエミュレータ１１０によってトレースされる信号の量を限定することができる。さらに、エミュレータ１１０によってトレースされる信号の数が、より少なくて済むため、ホストシステム１２０とエミュレータ１１０との間で交換される信号値の量を削減し、これにより、エミュレータ１１０とホストシステム１２０との間で同一量の広域情報を搬送するのに使用される帯域幅を削減できる。さらに、トレース又はホストシステム１２０に送信するために、デザイン内又は設計プロセス中に潜在的に加えられるロジックの量が削減される。
【００２９】
図２は、一実施形態に係るＤＵＴの一例としての回路を備えるエミュレーション環境１００の一例を示している。本例において、エミュレータ１１０は、２つのＦＰＧＡ２２０Ａ及び２２０Ｂを含む。ＦＰＧＡ２２０Ａは、トレースメモリ２９０Ａを含み、ＦＰＧＡ２２０Ｂは、トレースメモリ２９０Ｂを含む。ＦＰＧＡ２２０Ａは、ホストシステム１２０から受信したバイナリファイルに基づき、セクション２８５Ａ及び２８５Ｂを含むＤＵＴパーティション２７０Ａのエミュレーションを行うように構成される。さらに、ＦＰＧＡ２２０Ｂは、セクション２８５Ｃ及び２８５Ｄを含むＤＵＴパーティション２７０Ｂのエミュレーションを行うように構成される。各ＦＰＧＡ２２０は、その各々のパーティション２７０のエミュレーションを行い、エミュレーション中にトレースされた信号の値がＦＰＧＡ２２０により、トレースメモリ２９０に記憶される。本例において、ＦＰＧＡ２２０Ａがパーティション２７０Ａのエミュレーションを行う時、セクション２８５Ａの信号２３２、２３４、及び２３６は、トレースされて、トレースメモリ２９０Ａに記憶される（追加の信号が、セクション２８５Ｂについてトレースされてもよい）。本例において、各セクション２８５は、その対応するパーティション２７０において実現される。或いは、セクション２８５は、そのセクション２８５の一部分が一つのＦＰＧＡ２２０において実現され、且つ、同じセクション２８５の複数の部分が一つ又は多数の他のＦＰＧＡ２２０において実現されるように、多数のＦＰＧＡ２２０にわたって実現されてもよい。
【００３０】
ホストシステム１２０は、セクション２８５Ａを記述するセクションファイル２８０Ａと、セクション２８５Ｂを記述するセクションファイル２８０Ｂと、セクション２８５Ｃを記述するセクションファイル２８０Ｃと、セクション２８５Ｄを記述するセクションファイル２８０Ｄとを含む。本例において、セクション２８５Ａの信号２３３、２３５、２３７及び／又は２３８の値がＤＵＴの解析に必要である（例えば、ホストシステム１２０のユーザによってトレースがリクエストされる）と仮定する。ホストシステム１２０は、トレース信号２３２、２３４、及び２３６の値をトレースメモリ２９０Ａから読み出し、セクションファイル２８０Ａと信号２３２、２３４、及び２３６の読み出された値とを入力として使用して、セクション２８５Ａのシミュレーションを行うことができる。セクション２８５Ａのシミュレーションを行うことにより、ホストシステム１２０は、信号２３３、２３５、２３７、及び２３８を生成することができる。従って、セクション２８５ＡがＦＰＧＡ２２０Ａによって既にエミュレーションされていても、ホストシステム１２０は、信号２３３、２３５、２３７、及び２３８の値を取得するためにセクション２８５Ａのシミュレーションを行える。
【００３１】
他の例において、信号２３７の値のみがＤＵＴの解析に必要だとしても、ホストシステム１２０は、トレース信号２３２、２３４、及び２３６の値をトレースメモリ２９０Ａからさらに読み出して、セクション２８５Ａをシミュレーションする。ホストシステム１２０は、セクション２８５Ａのシミュレーションを行うことにより、信号２３７を生成する。さらに、ホストシステム１２０は、たとえ信号２３３及び２３５がリクエストされていなくても、これらの信号２３３及び２３５を生成することができる。
【００３２】
セクション２８５Ａのシミュレーションにより、ホストシステム１２０がこれらの信号２３３、２３５、２３７、及び２３８の値を取得することができるため、エミュレータ１１０は、これらの信号２３３、２３５、２３７、及び２３８のトレースを行うように構成される必要がない。数百万の信号がトレースされる環境において、ＤＵＴのセクションのシミュレーションを行うことができるホストシステム１２０を有することにより、ＦＰＧＡ２２０によってトレースされなければならない信号の量と、エミュレータ１１０とホストシステム１２０との間で交換される信号の値の量とを劇的に削減でき、ひいては、エミュレーションリソース、通信帯域幅を節約し、エミュレーション速度を向上しうる。
【００３３】
さらに、ホストシステム１２０は、必要とされる信号を取得するのに必要なこれらのセクション２８５のシミュレーションのみを行う。本例において、セクション２８５Ａからの信号の値のみが必要であるため、ホストシステム１２０は、セクション２８５Ａのシミュレーションのみを行い、セクション２８５Ｂ、２８５Ｃ、及び２８５Ｄのシミュレーションを行わないことにより、ホストシステム１２０のリソースを節約する。しかしながら、セクション２８５Ｂ、２８５Ｃ及び／又は２８５Ｄからの信号の値が必要であった場合には、これらのセクションを、セクション２８５Ａと同時に、又は順次、ホストシステム１２０によってシミュレーションすることができる。
【００３４】
一実施形態において、ホストシステム１２０は、セクション２８５の一部又はサブセクションのみのシミュレーションを行い、解析を実施するために必要な信号を取得する。例えば、他の信号２３４、２３５、２３６、２３７、及び２３８を用いずに、他のセクション２８５の解析又はシミュレーションを実施するために、セクション２８５Ａの信号２３３が必要とされてもよい。この場合、入力として信号２３２を用いてセクション２８５Ａのサブセクションのみがシミュレーションされて、セクション２８５Ａ全体のシミュレーションを行うことなく、信号２３３を生成することができる。結果として、シミュレーションを実施するためのハードウェアリソースを削減することができ、より高速に結果に達することができる。
【００３５】
図３は、一実施形態に係るホストシステム１２０をより詳細に示したブロック図である。ホストシステム１２０は、デザインコンパイラ３１０、マッピングモジュール３２０、ランタイムモジュール３３０、シミュレーションモジュール３４０、セクションモジュール３５０、結果モジュール３６０、及びストレージ３７０を含む。これらの構成要素は各々、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせとして実装されてもよい。
【００３６】
デザインコンパイラ３１０は、ＤＵＴのＨＤＬをゲートレベルロジックに変換する。エミュレーションされるべきＤＵＴについて、デザインコンパイラ３１０は、ＨＤＬにおけるそのＤＵＴの記述（例えば、ＲＴＬ又はその他の抽象レベル）を受信する。デザインコンパイラ３１０は、そのＤＵＴのＨＤＬを合成して、ゲートレベルロジックに関してそのＤＵＴの記述を備えたゲートレベルネットリストを生成する。
【００３７】
一実施形態において、デザインコンパイラ３１０は、ＤＵＴのエミュレーション中、エミュレータ１１０によってトレースされるＤＵＴの信号を特定する。一実施形態において、特定された信号は、ＤＵＴのすべての信号又はＤＵＴのすべての状態を含むわけではない。一実施形態において、情報は、ユーザから、又はトレースされるべきＤＵＴの信号を示す他のシステムから、受信される。デザインコンパイラ３１０は、信号トレースロジックをＤＵＴに組み込み、特定された各信号のトレースを可能にする。一実施形態において、デザインコンパイラ３１０は、ＨＤＬの合成に先立って、信号トレースロジックを組み込み、ネットリストを作成する。本実施形態において、合成に先立ち、デザインコンパイラ３１０は、ストレージ３７０から信号トレースロジックのＨＤＬを読み出し、ＤＵＴのＨＤＬを編集して信号トレースロジックの読み出されたＨＤＬを含ませる。
【００３８】
他の実施形態において、デザインコンパイラ３１０は、ＤＵＴのためのネットリスト作成後に、信号トレースロジックを組み込む。本実施形態において、デザインコンパイラ３１０は、ストレージ３７０から信号トレースロジックのゲートレベル記述を読み出し、ゲートレベルネットリストを編集して信号トレースロジック路のゲートレベル記述を含ませる。
【００３９】
他の実施形態において、デザインコンパイラ３１０で受信したＤＵＴの記述は、信号トレースロジックを既に含んでいる。従って、本実施形態において、デザインコンパイラ３１０は、特定された信号のトレースを行うために信号トレース論理を追加する必要がない。
【００４０】
マッピングモジュール３２０は、ＤＵＴをエミュレータ１１０のＦＰＧＡ２２０にマッピングする。デザインコンパイラ３１０が信号トレースロジックをＤＵＴに組み込んでゲートレベルネットリストを作成した後、マッピングモジュール３２０は、このネットリストを使用して、そのゲートレベルでＤＵＴを多数のパーティションに分ける。一実施形態において、マッピングモジュール３２０は、そのＤＵＴの解析を実施するのに必要である利用可能なセクション及び／又は信号に基づいてエミュレーションされるべきそのＤＵＴの１つ以上のパーティションを特定することにより、そのＤＵＴを分割する。マッピングモジュール３２０は、エミュレータ１１０によって最小数の信号しかトレースされないかもしれない方法で、１つ以上のパーティションを特定してもよい。一実施形態において、マッピングモジュール３２０は、インタフェースの利用可能な帯域幅に基づき、１つ以上のパーティションを特定する。或いは、マッピングモジュール３２０は、最小数のセクションしかホストシステム１２０によってシミュレーションされないかもしれない方法で、１つ以上のパーティションを特定してもよい。マッピングモジュール３２０は、各パーティションをエミュレータ１１０の対応する一つのＦＰＧＡ２２０にマッピングする。１つのアプローチによると、マッピングモジュール３２０は、以下のうちの１つ以上を使用して、パーティショニング及びマッピングを実施する。すなわち、設計ルール、設計上の制約（例えば、タイミング又は論理上の制約）、ＦＰＧＡ２２０における利用可能なリソース、トレースメモリ２９０上の制限、ＨＤＬの結果としてのゲート、ＨＤＬソースコード、ユーザ入力、及びエミュレータ１１０についての情報である。
【００４１】
マッピングモジュール３２０は、１つ以上のバイナリファイルを生成して、ＦＰＧＡ２２０の各パーティションのエミュレーションを行うようにそれらのＦＰＧＡ２２０を構成する。一実施形態において、マッピングモジュール３２０は、ＦＰＧＡ２２０の各々に対してバイナリファイルを生成する。マッピングモジュール３２０は、バイナリファイルをストレージ３７０に記憶する。マッピングモジュール３２０は、マッピングに基づき、いずれの信号が各ＦＰＧＡ２２０によりトレースされたかを示す信号情報もストレージ３７０に記憶する。
【００４２】
セクションモジュール３５０は、ホストシステム１２０のシミュレーションモジュール３４０によるシミュレーションのために利用可能となるＤＵＴのセクションを特定する。例えば、セクションモジュール３５０は、ＤＵＴを多数のセクションに分ける。マッピングモジュール３２０と同様に、セクションモジュール３５０は、以下のうちの１つ以上を使用してシミュレーションモジュール３４０によるシミュレーションを行うべきＤＵＴの複数のセクションを特定してもよい。すなわち、シミュレーション速度、ＨＤＬラインの数、ＨＤＬの結果としてのゲートの数、要求される入力信号の数、シミュレーション上の制約、設計ルール、設計上の制約、ユーザ入力、及びエミュレータ情報である。セクションモジュール３５０は、複数のセクションを生成して、設計自体を考慮して、ハードウェア容量を考慮せずに、シミュレーションの実施又はＤＵＴ解析の実施を早めてもよい。例えば、セクションモジュール３５０は、セクションの作成時、インタフェースのサイズ、信号の数、及び／又はセクションの信号のクロック周波数を考慮してもよい。また、セクションモジュール３５０は、セクションの作成時、あるセクションのシミュレーションを行うために１つ以上のプロセッサによって実行されるプロセスの時間又は数を考慮してもよい。セクションモジュール３５０は、ＤＵＴのセクションを特定した後、ＤＵＴの特定された各セクションのデザイン（例えば、回路）を記述するセクションファイルを生成する。一実施形態において、セクションモジュール３５０は、特定された各セクションについて一セクションファイルを生成する。セクションモジュール３５０は、そのセクションファイルをストレージ３７０に記憶する。セクションモジュール３５０は、特定された各セクションについて、そのセクションのシミュレーション時にトレースされたＤＵＴ信号と、そのセクションのシミュレーションに必要なＤＵＴの信号（例えば、入力信号）とを記述する信号情報もストレージ３７０に記憶する。
【００４３】
特定されたセクションは、パーティションの一部又はパーティション全体を含んでもよい。一実施形態において、特定されたセクションの集合は、そのＤＵＴ全体をモデル化する。しかしながら、後述の通り、このセクションのすべてが同時に、シミュレーションモジュール３４０によってシミュレーションされる必要はない。他の実施形態において、特定されたセクションの集合は、そのＤＵＴの一部分のみをモデル化する。さらに他の実施形態において、ＤＵＴの一部を多数のセクションに含ませることができる。
【００４４】
ランタイムモジュール３３０は、ＤＵＴのエミュレーションを実施するためのエミュレータ１１０を構成する。ランタイムモジュール３３０は、インタフェース１１５を介してエミュレータ１１０に、そのＤＵＴのためにストレージ３７０に記憶されたバイナルファイルを送信して、そのＤＵＴのエミュレーションを行うようにエミュレータ１１０のＦＰＧＡ２２０を構成する。ランタイムモジュール３３０は、そのＤＵＴのエミュレーションを行うようにエミュレータ１１０に命令する。一実施形態において、ランタイムモジュール３３０は、エミュレーションの開始に先立ち、又はＤＵＴのエミュレーション中、入力パラメータ及び／又は状態機械をエミュレータ１１０に送信して、そのＤＵＴのエミュレーションを構成及び制御する。
【００４５】
シミュレーションモジュール３４０は、ＤＵＴのセクションをシミュレーションする。シミュレーションモジュール３４０は、任意の種類のセクションをシミュレーションできる。シミュレーションモジュール３４０によってシミュレーションされるセクションは、組み合わせ型回路、シーケンス型回路、又は双方の種類の回路の組み合わせを含む。一実施形態において、シミュレーションモジュール３４０は、回路の非合成可能な部分をシミュレーションできる。他の実施形態において、シミュレーションモジュール３４０は、信号以外のものの演算を行うことができないソフトウェアであり、さらに、他の実施形態において、シミュレーションモジュール３４０は、エミュレータにコンパイルされる回路に限定されず、任意の種類の回路の演算に使用できる。
【００４６】
シミュレーションモジュール３４０は、ＤＵＴの解析または検証を実施するのに必要なそのＤＵＴの信号を示す検証設定を受信する。検証設定は、そのＤＵＴの解析のために使用される特定の信号又は状態機械をトレースすることを求めるリクエストを含んでもよい。検証設定は、ユーザから、又は他のシステムから受信されてもよく、あるいは、エミュレータ１１０又はＤＵＴの一部であってもよい。
【００４７】
シミュレーションモジュール３４０は、検証設定に基づき、得られる必要のあるＤＵＴの信号の値を特定する。シミュレーションモジュール３４０は、ストレージ３７０に記憶された信号情報から、ＤＵＴのいずれのセクションが、シミュレーション時、特定された信号のうちの１つ以上を生成するかを特定する。シミュレーションモジュール３４０は、さらに、特定されたセクションのシミュレーションを行うためにいずれの信号が必要とされるかを判定する。シミュレーションモジュール３４０は、エミュレータ１１０によってトレースされた必要とされる信号を特定する。必要とされる信号がエミュレータ１１０から依然として得られていない場合、シミュレーションモジュール３４０は、エミュレータ１１０からの信号を要求及び受信する。一実施形態において、特定されたセクションのシミュレーションを行うのに必要な信号がエミュレータ１１０によってトレースされない場合、シミュレーションモジュール３４０は、１つ以上のセクションのシミュレーションを行い、必要とされる信号を取得する。
【００４８】
シミュレーションモジュール３４０は、取得可能な信号の値と、各セクションのために必要とされる入力と、の間の対応関係に基づき、シミュレーションを行う複数のセクションを決定する。一実施形態において、シミュレーションモジュール３４０は、所望の信号を生成するのに、最小数のセクション又は最小数の入力信号を必要とするような方法で、シミュレーションされるべきセクション部分を特定する。或いは、シミュレーションモジュール３４０は、インタフェース１１５の利用可能な帯域幅に基づき、シミュレーションされるべきセクションを特定する。
【００４９】
一実施形態において、１つ以上のセクションについて、セクション全体のシミュレーションを行うと決定する代わりに、シミュレーションモジュール３４０は、特定された信号のうちの１つ以上を生成するために、ＤＵＴのセクションの一部分又はサブセクションのシミュレーションのみを行うと決定してもよい。セクション又はセクションのサブセクションは、最小数の信号がトレースされるか、最小数のセクションがシミュレーションされるように特定されてもよい。
【００５０】
シミュレーションモジュール３４０は、（例えば、エミュレータ１１０から、又は他のセクションのシミュレーションにより）得られた信号の値を使用して、特定されたセクションの各々のシミュレーションを行う。シミュレーションモジュール３４０は、（例えば、ユーザから）提供された入力パラメータを使用して、セクションをシミュレーションしてもよい。シミュレーションモジュール３４０は、このセクションのシミュレーション中にトレースされた信号の値をストレージ３７０に記憶する。一実施形態において、シミュレーションモジュール３４０は、ＤＵＴのエミュレーション時、エミュレータ１１０が既にトレースした検証設定で特定された信号の値もエミュレータ１１０から読み出す。シミュレーションモジュール３４０は、エミュレータ１１０から読み出されたトレース信号の値をストレージ３７０に記憶する。
【００５１】
例として、図２に戻り、検証設定に基づいて、セクション２８５Ａにおける信号２３７がトレースされる必要があるものの、信号２３７がエミュレータ１１０によってトレースされていないと仮定する。この場合、シミュレーションモジュール３４０は、信号２３７を得るために、セクション２８５Ａのシミュレーションを行う。
【００５２】
上述の通り、追加のセクションがシミュレーションされて、セクションのシミュレーションに必要とされる入力信号を生成してもよい。例えば、セクション２８５Ｄのシミュレーションを行い、セクション２８５Ｄから特定の信号値を取得するとの決定がなされると仮定する。さらに、セクション２８５Ａからの信号２３３は、セクション２８５Ｄの入力であると仮定する。セクション２８５Ｄのシミュレーションを可能にするには、セクション２８５Ａをまずシミュレーションして信号２３３を生成する。一旦信号２３３が得られると、セクション２８５Ｄをシミュレーションすることができる。
【００５３】
シミュレーションモジュール３４０が呼び出され、インタフェース１１５の状態に応じてトレース信号を読み出す。一実施形態において、エミュレータ１１０とホストシステム１２０との間のインタフェース１１５は、ＤＵＴのエミュレーション中、使用可能である。シミュレーションモジュール３４０は、エミュレータ１１０によって実施されるＤＵＴのエミュレーション中、エミュレータ１１０によってトレースされた信号の値を読み出す。シミュレーションモジュール３４０は、ＤＵＴのエミュレーション中、特定されたセクションのシミュレーションも行う。
【００５４】
一実施形態において、エミュレータ１１０は、インタフェース１１５が使用可能な間、トレースされた値の全部又は一部をストレージ３７０に記憶する。シミュレーションモジュール３４０は、ＤＵＴのエミュレーション中であるか否かを問わず、未だ記憶されていない信号値を提供するために、エミュレータ１１０によってストレージ３７０に記憶された信号の値を読み出し、ＤＵＴのいくつかのセクションのシミュレーションを行うことができる。シミュレーションモジュール３４０は、その後、シミュレーションした信号値をストレージ３７０に記憶するか、若しくはこれらの値のいずれかをリクエストしたであろう、ＧＵＩインタフェース上に、又はホストシステム１２０上で動作中のスクリプト又はソフトウェアプログラムに、これらの値を提供することができる。
【００５５】
一実施形態において、ホストシステム１２０とエミュレータ１１０との間のインタフェース１１５は、エミュレーション中に使用禁止となり、エミュレーションの完了後に使用可能になる。シミュレーションは、ホストシステム１２０がＤＵＴ又はそのＤＵＴの一部分のエミュレーションを完了した後に実施される。シミュレーションモジュール３４０は、エミュレーションの完了時、インタフェース１１５を介してエミュレーション中にトレースされた信号を読み出し、特定されたセクションのシミュレーションを行う。
【００５６】
一実施形態において、シミュレーションモジュール３４０は、呼び出されて、トレース信号を双方向モードで読み出す。双方向モードにおいて、シミュレーションモジュール３４０は、信号又は信号のセットを少し、その時点でモニタリングしているユーザから呼び出される。ユーザは、典型的にはシノプシス社のＶｅｒｄｉ波形ビューア等のようなＧＵＩインタフェースにおいて、所望の信号をリクエスト又は選択する。シミュレーションモジュール３４０は、モニタリングされた信号に基づくシミュレーションを通じて、追加の信号値を取得する。シミュレーションは、Ｖｅｒｄｉの稼働に使用されるシステム（例えば、ホストシステム）上で局所的に実施されてもよい。
【００５７】
一実施形態において、シミュレーションモジュール３４０は、呼び出されて、トレース信号を非双方向モードで読み出す。シミュレーションモジュール３４０は、ユーザリクエストを伴うことなく動作してもよいが、代わりに、エミュレーションに先立って提供されるスクリプトに基づいて動作してもよい。非双方向モードは、信号のセットが多い場合に、デザイン全体にまで及んで採用されてもよい。
【００５８】
結果モジュール３６０は、ＤＵＴのエミュレーションとそのＤＵＴのセクションのシミュレーションとから得られた結果を提供する。結果モジュール３６０は、ＤＵＴセクションのシミュレーションによって生成されるトレース信号の値と、エミュレータ１１０から読み出されるトレース信号の値とを処理する。一実施形態において、結果モジュール３６０は、ストレージ３７０からトレース信号の値を読み出し、トレース信号の値の表現を含むユーザインタフェースをユーザへの表示のために生成する。一実施形態において、結果モジュール３６０は、表示のためにトレース信号の波形を生成する波形ビューアである。一実施形態において、結果モジュール３６０は、ユーザに表示するためにトレース信号の視覚的波形を生成するＡＰＩを含む。トレース信号の処理には、結果モジュール３６０により、トレース信号に基づくイベントを計数することも含まれてよい。他の実施形態において、結果モジュール３６０は、信号値を処理して、その信号値に基づく情報又はその情報の表示を生成する（システムＣモデル、Ｃ／Ｃ＋＋モデル、又はその他任意のソフトウェア言語から得られた）バイナリプログラム又はスクリプトを含む。
【００５９】
一実施形態において、ホストシステム１２０の１つ以上の機能は、他のコンピュータ（例えば、所望のコンピュータ又は機械の集合体）で実現されてもよい。例えば、デザインコンパイラ３１０及びマッピングモジュール３２０は、ＤＵＴのコンパイル及びパーティショニングのための他のコンピュータに含まれてもよい。
【００６０】
図４は、一実施形態に係る、ホストシステム１２０が行う、ＤＵＴのエミュレーションの準備を示すフローチャートである。他の実施形態では、図４のステップを他の順序で実行することができる。さらに、他の実施形態では、本明細書に記載のステップとは異なるステップ及び／又は追加ステップを含むことができる。
【００６１】
ホストシステム１２０は、ＨＤＬにおけるＤＵＴの記述をユーザから取得する（４１０）。ホストシステム１２０は、そのＤＵＴの記述に基づき、エミュレータ１１０におけるそのＤＵＴのエミュレーションのために、及びホストシステム１２０におけるセクションのシミュレーションのために、コンフィギュレーションファイルを生成する。ホストシステム１２０は、エミュレータ１１０のＦＰＧＡ２２０にロードされるバイナリファイルと、１つ以上のセクションをシミュレーションするのに必要とされる時、ホストシステム１２０によって使用されるべきセクションファイルを生成することが好ましい。一実施形態において、ホストシステム１２０は、バイナリファイル及びセクションファイルを並行して生成する。
【００６２】
ホストシステム１２０は、バイナリファイルを生成するために、ＤＵＴのＨＤＬ記述を合成して、ゲートレベルネットリストを生成する（４２０）。一実施形態において、ホストシステム１２０は、エミュレーション中にトレース可能であるべきＤＵＴの信号の所定リストも取得する。ホストシステム１２０は、各信号をトレースできるように、信号トレースロジックをＤＵＴに組み込む。一実施形態において、ホストシステム１２０は、ＨＤＬ記述の合成に先立って、ＤＵＴのＨＤＬ記述を編集することにより、信号トレースロジックを組み込む。他の実施形態において、信号トレースロジックは、ネットリストの編集によってＨＤＬ記述を合成した後に組み込まれる。他の実施形態において、ホストシステム１２０によって取得されたＤＵＴの記述は、信号トレースロジックを含む。
【００６３】
ホストシステム１２０は、ゲートレベルネットリストを使用して、ゲートレベルでＤＵＴを多数のパーティションに分ける（４３０）。一実施形態において、ホストシステム１２０は、ＤＵＴの解析を実施するのに必要とされる利用可能なセクション及び／又は信号に基づいてエミュレーションされるべきＤＵＴの１つ以上のパーティションを特定することにより、ＤＵＴを分ける。ホストシステム１２０は、最小数の信号しかトレースされないかもしれない方法で、１つ以上のパーティションを特定してもよい。或いは、ホストシステム１２０は、最小数のセクションしかホストシステム１２０によってシミュレーションされる必要がないであろう方法で、１つ以上のパーティションを特定してもよい。ホストシステム１２０は、各パーティションをエミュレータ１１０のＦＰＧＡ２２０にマッピングする（４４０）。ホストシステム１２０は、ＦＰＧＡ２２０を構成して、それらのＤＵＴのマッピングされたパーティション各々をエミュレーションするための情報を含むバイナリファイルを生成する（４５０）。
【００６４】
ホストシステム１２０は、セクションファイルを生成するために、シミュレーションに利用可能となるべきＤＵＴのセクションを特定する（４６０）（例えば、ＤＵＴを多数のセクションに分ける）。ホストシステム１２０は、ＤＵＴのセクションを特定した後、そのセクションのデザインを記述するセクション毎にセクションファイルを生成する（４７０）。ホストシステム１２０は、セクションファイルを記憶する。ＤＵＴのセクションを特定することは、各々のステップ４２０、４３０、及び４４０におけるＤＵＴの合成、パーティショニング、及びマッピングのうちの少なくともいずれか１つに基づいてもよい。ＤＵＴの特定されたセクションにおける信号のリストは、各々のステップ４２０、４３０、４４０、及び４５０におけるＤＵＴの合成、パーティショニング、マッピング、及びバイナリファイルの生成のうちの少なくともいずれか１つのために使用されてもよい。
【００６５】
ＦＰＧＡ２２０のためのバイナリファイルとシミュレーションモジュール３４０のためのセクションファイルの双方を生成した後、ホストシステム１２０は、パーティションのエミュレーション時に、いずれの信号がトレースされるかを示すパーティション毎の信号情報を記憶する（４８０）。ホストシステム１２０は、セクションのシミュレーション時、いずれの信号がトレースされるかを示すセクション毎の信号情報と、いずれの入力信号がセクションのシミュレーションのために必要とされるかを示す情報も記憶する。この記憶すること（４８０）は、１つ又は多数のデータベース、ファイル、ハードディスク、メモリ、又は外部記憶装置において行われてもよい。
【００６６】
図５は、一実施形態に係るＤＵＴの特定の信号をトレースするためにホストシステム１２０及びエミュレータ１１０を構成するフローチャートである。他の実施形態では、図５のステップを異なる順に実施することができる。さらに、他の実施形態では、本明細書に記載のステップとは異なるステップ及び／又は追加ステップを含むことができる。
【００６７】
ホストシステム１２０は、バイナリファイルをエミュレータに送信して（５１０）、にエミュレータ１１０のＦＰＧＡ２２０を構成してＤＵＴをエミュレーションする。ホストシステムは、エミュレータ１１０にＤＵＴのエミュレーションを行うように命令を送信する（５２０）。
【００６８】
ホストシステム１２０は、ＤＵＴの解析に（例えばユーザ又はシステムによって）必要とされるＤＵＴの信号を特定する（５３０）。ホストシステム１２０は、特定された信号に基づき、その特定された信号を得ることのできるセクションのプールから、いずれのセクションをシミュレーションするかを決定する（５４０）。ホストシステム１２０は、最小数のセクション又は最小数の入力信号（又はトレース信号）が所望の信号の生成に必要とされるような方法で、シミュレーションされるべきセクションを決定する。ホストシステム１２０は、シミュレーションを行うため、シミュレーション時、特定された信号のうちの１つ以上を生成するセクションを決定する。ホストシステム１２０は、セクション全体でなく、セクションのサブセクションのシミュレーションを行うことを決定してもよい。ホストシステム１２０は、エミュレータ１１０によってトレースされた信号も確定し、確定されたセクションをシミュレーションのために読み出す（５５０）。
【００６９】
ホストシステム１２０は、確定されたトレース信号をエミュレータ１１０から取得する（５６０）。ＤＵＴの解析に必要な信号がエミュレータ１１０によって既にトレースされている場合、ホストシステム１２０は、エミュレータ１１０から、その信号も取得する。ホストシステム１２０は、エミュレータ１１０から取得したトレース信号と、セクションのデザインを記述するセクションファイルとを使用して、ＤＵＴの決定されたセクションをシミュレーションする（５７０）。これらのセクションのシミュレーションに基づき、必要とされるＤＵＴの信号が取得／トレースされる。
演算機械アーキテクチャ
【００７０】
図６を参照すると、機械可読媒体から命令を読み取り、１つ以上のプロセッサ（又は、コントローラ）においてそれらを実行することのできる一例としての機械の構成要素を示すブロック図である。具体的には、図６は、機械に図１〜図５を用いて説明した方法論のうちのいずれか１つ以上を実施（実行）させる命令６２４（例えば、ソフトウェア又はプログラムコード）を備えたコンピュータシステム６００の一例としての形態における機械の図式的表示を示している。また、コンピュータシステム６００は、図１のエミュレーション環境１００に示される実体のうちの１つ以上（例えば、ホストシステム１２０、エミュレータ１１０）に使用されてもよい。
【００７１】
この例のコンピュータシステム６００は、バス６０８を介して互いに通信するように構成された、プロセッサ６０２（例えば、ＣＰＵ（Central Processing Unit）、ＧＰＵ（Graphics Processing Unit）、ＤＳＰ（Digital Signal Processor）、１つ以上のＡＳＩＣ（Application Specific Integrated Circuits）、１つ以上のＲＦＩＣ（Radio-Frequency Integrated Circuits）、又はこれらのうちのいずれかの組み合わせ）と、メインメモリ６０４と、スタティックメモリ６０６とを含む。コンピュータシステム６００は、さらに、グラフィクス表示部６１０（例えば、ＰＤＰ（Plasma Display Panel）、ＬＣＤ（Liquid Crystal Display）、プロジェクタ、ＣＲＴ（Cathode Ray Tube））を備えてもよい。コンピュータシステム６００は、バス６０８を介して通信するように構成される、英数字入力装置６１２（例えば、キーボード）と、カーソル制御装置６１４（例えば、マウス、トラックボール、ジョイスティック、動きセンサ、又はその他のポインティング機器）と、記憶部６１６と、信号生成装置６１８（例えば、スピーカ）と、ネットワークインタフェース装置６２０とを含んでもよい。さらに、コンピュータシステム６００は、タッチセンサ式ディスプレイであってもよい。
【００７２】
記憶部６１６は、本明細書に記載の方法論又は機能のうちのいずれか１つ以上を具体化する命令６２４（例えば、ソフトウェア）を記憶した機械可読媒体６２２を含む。命令６２４（例えば、ソフトウェア）は、コンピュータシステム６００による実行中、メインメモリ６０４内、又はプロセッサ６０２内（例えば、プロセッサのキャッシュメモリ内）に全部又は少なくとも部分的に設けられてもよく、メインメモリ６０４及びプロセッサ６０２は、機械可読媒体も構成する。命令６２４（例えば、ソフトウェア）は、ネットワークインタフェース装置６２０を介してネットワーク６２６上で送受信されてもよい。
【００７３】
機械可読媒体６２２は単一媒体として例としての実施形態に示されているが、「機械可読媒体」という用語は、命令（例えば、命令６２４）を記憶することのできる単一媒体又はマルチプル媒体（例えば、中央データベース又は分散データベース、若しくは関連するキャッシュとサーバ）を含むものとして理解されなければならない。「機械可読媒体」という用語は、機械によって実行される命令（例えば、命令６２４）を記憶することができ、機械に、本明細書に開示の方法論のうちのいずれか１つ以上を実施させる、いずれかの媒体を含むものとしても理解されなければならない。「機械可読媒体」という用語は、固体メモリ、光学媒体、及び磁気媒体の形態のデータレポジトリを含むが、これに限定されない。
【００７４】
当分野で既知の通り、コンピュータシステム６００は、図６に示されるものとは異なる構成要素及び／又は他の構成要素を有することができる。また、コンピュータシステム６００から、図示の特定の構成要素を省くことができる。例えば、エミュレータ１１０として動作するコンピュータシステム６００は、他の構成要素の中でも、１つ以上のハードウェアプロセッサ６０２、マルチプル記憶部６１６、ネットワークインタフェース装置６２０、及びマルチプルに構成可能なロジック回路（図１を参照して上述した）を含んでもよく、英数字入力装置６１２及びカーソル制御装置６１４を省いてもよい。他の例として、ホストシステム１２０として動作するコンピュータシステム６００は、１つ以上のハードウェアプロセッサ６０２を含んでもよい。マルチプルプロセッサ６０２を備えたホストシステム１２０は、マルチプルなシミュレーションをマルチプルなスレッド、プロセス、及び／又は機械上で並行して実施してもよい。セクションのサブセットは、ユーザにより、又は自動的にソフトウェアプログラムによって分担されて、並行に実施されるシミュレーションを通じて、信号の入力セットに基づき、信号のセットを生成してもよい。
追加構成についての考慮
【００７５】
有利なことに、開示のシステム及び方法は、エミュレーション及びシミュレーションのリソースを削減することができる。エミュレータから僅かな信号（例えば、セクションの境界）をトレースすることにより、エミュレータは、すべての信号をトレースする必要がない。このように、より少ない信号の値がエミュレータとホストシステムとの間で交換されるので、通信帯域幅又はスループットを節約することができる。僅かなトレース信号を使用することは、エミュレーション及び検証されるＤＵＴのサイズを拡張させる。また、解析を実施するために所望の信号を生成すべく、最小数のセクション又は最小数の入力信号を有するセクションを選択することにより、エミュレーション及びシミュレーションのリソースを削減することができ、所望の信号の値を得る速度を改善できる。
【００７６】
デジタル回路及びシステムのエミュレーションのためのエミュレーション環境という観点から主題について記載したが、記載した原則は、任意にデジタル電子装置の分析に適用されてもよいことに留意する。さらに、本明細書に記載の例は、ＦＰＧＡを含むエミュレーション環境という状況におけるものであったが、本明細書に記載の原則は、その他、任意のデジタルロジック回路のハードウェア実装又はＥＤＡ等のソフトウェアシミュレーションの解析に適用することができる。
【００７７】
本明細書を通じて、単一の場合として説明した構成要素、動作、構造を複数で実装してもよい。１つ以上の方法の個々の動作について、別個の動作として図示及び説明したが、個々の動作の１つ以上は、同時に実施されてもよく、動作が図示の順通りに実施される必要はない。例としての構成において別個の構成要素として表された構造及び機能は、組み合わせの構造又は構成要素として実施されてもよい。同様に、単一の構成要素として表された構造及び機能が、別個の構成要素として実施されてもよい。これらの変動、修正、追加、及び改良並びにその他の変動、修正、追加、及び改良は、本明細書に記載の主題に範囲内である。
【００７８】
本明細書では、例えば、図１〜図５に示される通り、ロジック、あるいは、多数の構成要素、モジュール（本明細書中、「ツール」と称することもある）、又は機構を含むものとして、特定の実施形態について説明している。モジュールは、ソフトウェアモジュール（例えば、機械可読媒体上、又は送信信号内に実装されたコード）又はハードウェアモジュールのいずれかからなってもよい。ハードウェアモジュールは、特定の動作を実施することができる有形ユニットであり、特定の方法で構成または配置されてもよい。例としての実施形態において、１つ以上のコンピュータシステム（例えば、スタンドアロンコンピュータシステム、クライアントコンピュータシステム、又はサーバコンピュータシステム）又はコンピュータシステムの１つ以上のハードウェアモジュール（例えば、プロセッサ、又はプロセッサ群）は、本明細書に記載の通り、特定の動作を実施するように動作するハードウェアモジュールとして、ソフトウェア（例えば、アプリケーション又はアプリケーション部分）によって構成されてもよい。
【００７９】
いくつかの実施形態において、ハードウェアモジュールは、電子的に実施されてもよい。例えば、ハードウェアモジュールは、特定の動作を実施するように、（例えば、ＦＰＧＡ（Field Programmable Gate Array）又はＡＳＩＣ（Application-Specific Integrated Circuit）など、特殊目的用プロセッサとして）永続的に構成された専用回路又はロジックを備えてもよい。ハードウェアモジュールは、特定の動作を実施するように、ソフトウェアによって一時的に構成された（例えば、汎用プロセッサ又はその他のプログラマブルプロセッサ内に含まれるものとして）プログラマブルロジック又は回路を備えてもよい。本明細書において実施されるハードウェアモジュールは、専用の永続的に構成された回路で実施されてもよく、又は一時的に構成された（例えば、ソフトウェアによって構成された）回路で実施されてもよい。
【００８０】
本明細書に記載の例としての方法の種々の動作は、少なくとも部分的に、関連動作を実施するように一時的に（例えば、ソフトウェアによって）構成されるか、又は永続的に構成された、例えば、プロセッサ６０２等の１つ以上のプロセッサによって実施されてもよい。一時的に構成されるか、又は永続的に構成されるかを問わず、このようなプロセッサは、１つ以上の動作又は機能を実施するように動作するプロセッサ実施モジュールを構成してもよい。本明細書において参照したモジュールは、いくつかの例としての実施形態において、プロセッサ実施モジュールからなってもよい。
【００８１】
１つ以上のプロセッサは、「クラウドコンピューティング」環境において、又は「ＳａａＳ（Software As A Service）」として関連動作の実施をサポートするよう動作してもよい。例えば、少なくともいくつかの動作は、コンピュータ群（プロセッサを含む機械の例として）によって実施されてもよく、これらの動作は、ネットワーク（例えば、インターネット）を介して、且つ、１つ以上の適切なインタフェース（例えば、アプリケーションプログラムインタフェース（ＡＰＩｓ（Application Program Interfaces））を介してアクセス可能である。
【００８２】
特定の動作の実施は、単一の機械内に設けられるものだけでなく、多数の機械に亘って展開される１つ以上のプロセッサで分担されてもよい。いくつかの例としての実施形態において、１つ以上のプロセッサ又はプロセッサ実施モジュールは、単一の地理的位置（例えば、住宅環境、オフィス環境、又はサーバファーム内等）に配置されてもよい。他の例としての実施形態において、１つ以上のプロセッサ又はプロセッサ実施モジュールは、多数の地理的位置にわたって分散されてもよい。
【００８３】
本明細書の一部分は、機械メモリ（例えば、コンピュータメモリ）内にビット又はバイナリデジタル信号として記憶されるデータ上の動作を表すアルゴリズム又はシンボル表現で表される。これらのアルゴリズムまたはシンボル表現は、データ処理分野の当業者が、自らの作業の内容を当分野の他の者に伝える際に使用される手法の例である。本明細書で使用される「アルゴリズム」は、自己一致型の動作手順、又は所望の結果に導く同様な処理である。これに関連して、アルゴリズム及び動作は、物理量の物理的操作を含む。通常、このような量は、機械による記憶、アクセス、転送、結合、比較、又はその他の操作が可能な、電気信号、磁気信号、又は光学信号の形態をとってもよい。時として、主として一般的使用という理由により、このような信号を「データ」、「内容」、「ビット」、「値」、「要素」、「符号」、「文字」、「用語」、「数」、「数値」等の単語を使用して参照するのが便利である。しかしながら、このような単語は、単に便利なラベルであり、適切な物理量と関連付けられるべきものである。
【００８４】
特段の指摘のない限り、「処理すること」、「演算すること」、「計算すること」、「判定すること」、「提示すること」、「表示すること」等の用語を使用した本明細書中の議論は、１つ以上のメモリ（例えば、揮発性メモリ、不揮発性メモリ、又はそれらの組み合わせ）、レジスタ、又は情報を受信、記憶、送信、又は表示する他の機械構成要素内で、物理的（例えば、電子、磁気、又は光学）量として表現されるデータを操作又は変換する機械（例えば、コンピュータ）の動作又はプロセスをいうものであってもよい。
【００８５】
本明細書で使用している「一実施形態」又は「１つの実施形態」という任意の参照は、その実施形態と関係して説明される特定の要素、特徴、構造、又は特性が、少なくとも１つの実施形態に含まれることを意味する。明細書の様々な箇所で現れる「一実施形態において」というフレーズは、必ずしもすべてが同一の実施形態について言及しているものでない。
【００８６】
いくつかの実施形態は、「連結された」又は「接続された」という表現をそれらの派生語とともに使用して説明されているかもしれない。例えば、いくつか実施形態は、２つ以上の要素が物理的又は電気的に直接接触をしていることを示すために、「連結された」という用語を使用して説明されているかもしれない。しかしながら「連結された」という用語は、２つ以上の要素が互いに直接接触しておらず、しかしながら依然として互いに協働するか又は相互作用することを意味することもある。実施形態は、この文脈において限定されるものでない。
【００８７】
本明細書において使用される「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、又はそれらの他の任意の活用語は、非排他的包含をカバーすることが意図されている。例えば、列挙される要素を備えたプロセス、方法、項目、又は装置は、これらの要素のみに必ずしも限定されるものでなく、明示的に列挙されないか、又は、そのようなプロセス、方法、項目、又は装置に本来含まれている、他の要素を含んでもよい。さらに、反対の旨の明示的な指摘のない限り、「又は」は、排他的な「又は」でなく、包含的な「又は」をいう。例えば、条件Ａ又は条件Ｂは、以下のうちのいずれか１つによって満たされる。つまり、Ａが真（又は存在）でＢが偽（又は不存在）、Ａが偽（又は不存在）でＢが真（又は存在）、及びＡとＢの双方が真（又は存在）である。
【００８８】
また、不定冠詞の使用は、本明細書における実施形態の要素及び構成要素を説明するために採用されている。これは、単に簡便さのために使用したものであり、発明に一般的な意味を与えるためである。この記載は、１つ又は少なくとも１つを含むものとして読まれなければならず、単数は、単数である旨の明示のない限り、複数も含む。
【００８９】
本開示を熟読することにより、当業者は、本明細書に記載の原則を実施するための追加且つ代替の構造的設計及び機能的設計を想到するであろう。そこで、特定の実施形態及び適用例について図示及び説明したが、本開示の実施形態は、本開示の精密な構築物及び構成要素に限定されるものでないことを理解しなければならない。添付のクレームに規定の主旨及び範囲から逸脱することなく、当業者にとって明らかとなる種々の修正、変更、及び変動が本明細書に開示の配置、動作、並びに方法及び装置の詳細においてなされてもよい。
【図１】
0006600011.tif 000002
【図２】
0006600011.tif 000003
【図３】
0006600011.tif 000004
【図４】
0006600011.tif 000005
【図５】
0006600011.tif 000006
【図６】
0006600011.tif 000007