(57)【特許請求の範囲】
【請求項１】
回路の動作を模擬するエミュレータ部と、
模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換える置換部と、
前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給する供給部を有することを特徴とする回路エミュレーション装置。
【請求項２】
前記所定のビットパターンは、情報ビットが全てゼロであるデータに対する冗長ビットのビットパターンであることを特徴とする請求項１記載の回路エミュレーション装置。
【請求項３】
前記回路エミュレーション装置はさらに、
前記回路が前記メモリから読み出した前記データの前記情報ビット及び前記冗長ビットのうち少なくとも１ビットがゼロでない場合、前記情報ビットと前記冗長ビットとを前記読み出したデータとして前記回路に供給する供給部を有することを特徴とする請求項１又は２記載の回路エミュレーション装置。
【請求項４】
前記回路エミュレーション装置はさらに、
前記メモリの内容を前記回路エミュレーション装置に接続される記憶装置に記録し且つ前記記憶装置から前記メモリの内容を前記メモリに復元する場合、前記メモリに格納されるデータのうち全ビットがゼロであるデータを除いた全てのデータを前記記憶装置に記録する復元部を有することを特徴とする請求項１乃至３何れか一項記載の回路エミュレーション装置。
【請求項５】
回路エミュレータが、
回路の動作を模擬し、
模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換え、
前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給することを特徴とする回路エミュレーション方法。
【請求項６】
前記所定のビットパターンは、情報ビットが全てゼロであるデータに対する冗長ビットのビットパターンであることを特徴とする請求項５記載の回路エミュレーション方法。
【請求項７】
前記回路エミュレーション方法はさらに、
前記回路エミュレータが、
前記回路が前記メモリから読み出した前記データの前記情報ビット及び前記冗長ビットのうち少なくとも１ビットがゼロでない場合、前記情報ビットと前記冗長ビットとを前記読み出したデータとして前記回路に供給することを特徴とする請求項５又は６記載の回路エミュレーション方法。
【請求項８】
前記回路エミュレーション方法はさらに、
前記回路エミュレータが、
前記メモリの内容を前記回路エミュレータに接続される記憶装置に記録し且つ前記記憶装置から前記メモリの内容を前記メモリに復元する場合、前記メモリに格納されるデータのうち全ビットがゼロであるデータを除いた全てのデータを前記記憶装置に記憶することを特徴とする請求項５乃至７何れか一項記載の回路エミュレーション方法。
【請求項９】
回路エミュレーションプログラムにおいて、
回路エミュレータに、
回路の動作を模擬させ、
模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換えさせ、
前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給させることを特徴とする回路エミュレーションプログラム。
【請求項１０】
前記所定のビットパターンは、情報ビットが全てゼロであるデータに対する冗長ビットのビットパターンであることを特徴とする請求項９記載の回路エミュレーションプログラム。
【請求項１１】
前記回路エミュレーションプログラムはさらに、
前記回路エミュレータに、
前記回路が前記メモリから読み出した前記データの前記情報ビット及び前記冗長ビットのうち少なくとも１ビットがゼロでない場合、前記情報ビットと前記冗長ビットとを前記読み出したデータとして前記回路に供給させることを特徴とする請求項９又は１０記載の回路エミュレーションプログラム。
【請求項１２】
前記回路エミュレーションプログラムはさらに、
前記回路エミュレータに、
前記メモリの内容を前記回路エミュレータに接続される記憶装置に記録し且つ前記記憶装置から前記メモリの内容を前記メモリに復元する場合、前記メモリに格納されるデータのうち全ビットがゼロであるデータを除いた全てのデータを前記記憶装置に記憶させることを特徴とする請求項９乃至１１何れか一項記載の回路エミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、回路エミュレーション装置、回路エミュレーション方法及び回路エミュレーションプログラムに関する。
【背景技術】
【０００２】
ＬＳＩ回路（Large Scale Integrated circuit：大規模集積回路）のハードウェア開発のためには、設計した回路が正しく動作するか否かを検証するために、論理シミュレーションを行う。論理シミュレーションでは、例えばＶｅｒｉｌｏｇ等のハードウェア記述言語により検証対象の回路を記述し、その回路記述をコンパイルしてエミュレータ用の構成データを生成する。この生成した構成データをエミュレータにダウンロードして、検証対象の回路をエミュレータにマッピングすることにより、検証対象の回路をエミュレータ上に実現する。このエミュレータ上の回路を動作させることにより、回路が正しく動作するか否かを検証することができる。
【０００３】
一般に、ＣＰＵ（Central Processing Unit）等からメモリにデータを読み書きする場合、ＥＣＣ（エラー訂正コード）の計算により生成したＥＣＣビット（冗長ビット）を用いて、データのエラー検出及び訂正を行う。具体的には、データ書き込み動作時にデータをＥＣＣビットと共にメモリに書き込み、データ読み出し動作時にメモリから読み出したデータとＥＣＣビットとに基づいてデータに対するエラー検出及び訂正を行う。キャッシュメモリを有するプロセッサの場合には、キャッシュライン毎にメモリコントローラがＥＣＣビットを生成し、このＥＣＣビットとキャッシュラインのデータとをＤＩＭＭ（Dual Inline Memory Module）等のメモリに書き込む。データ読み出し動作時には、メモリから読み出したデータとＥＣＣビットとに基づいてメモリコントローラがＥＣＣ計算を実行することにより、データに対するエラー検出及び訂正を行う。なおエラー検出や訂正の為の冗長ビットは、ＥＣＣビットである必要はなく、例えばパリティー検査用のビットやＣＲＣ（巡回冗長符号）検査用のビット等であってよい。
【０００４】
論理シミュレーションの場合、検証対象の回路がアクセスするエミュレータのメモリ（物理的なメモリ）中のビットは、初期デフォールト状態において全てゼロになっている。即ち初期デフォールト状態においては、データビットが全てゼロであると共に、対応する冗長ビット（例えばＥＣＣビット）も全てゼロになっている。このとき、全ビットがゼロのデータに対する正しい冗長ビットが例えば“ｆｆ”であるとすると、冗長ビットの初期設定動作を実行しておくことが一般的には必要になる。即ち、エミュレータによる検査対象の回路の動作を開始する前に、これら全ビットがゼロである全てのメモリ領域に対して、冗長ビットを“ｆｆ”に初期設定しておく。何故なら、冗長ビットが“００”のままでは、これら全ビットがゼロであるメモリ領域からデータを読み出す際に、エラーが検出されてしまうからである。
【０００５】
検証対象のＣＰＵが実行するテストプログラムが格納されているメモリ領域以外のメモリ領域は、殆どが初期デフォールト状態においてゼロになっている。メモリ容量が増大すると、これらのゼロのメモリ領域の量も増大し、上記のように冗長ビットに正しい初期設定値（例えば“ｆｆ”）を書き込む動作に長い時間がかかってしまう、という問題がある。またエミュレータの動作においては、所定の復元ポイントから動作を再開するために、メモリのデータ内容を全て記録しておき、必要に応じて記録しておいたデータ内容をメモリに復元する処理が行われる。この際、全てのビットがゼロであるメモリ領域については、エミュレータによるデータ記録及び復元を省略することが可能である。しかしながら、上述のように冗長ビットに“ｆｆ”が書き込まれていると、エミュレータによるデータ記録及び復元を省略することができなくなり、データ記録及び復元に長い時間がかかってしまう、という問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−６４２３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
１つの側面では、本発明は、冗長ビットを備えたメモリに対して全ビットがゼロのデータの効率的な取り扱いを可能にする回路エミュレーション装置、回路エミュレーション方法及び回路エミュレーションプログラムが望まれる。
【課題を解決するための手段】
【０００８】
回路エミュレーション装置は、回路の動作を模擬するエミュレータ部と、模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換える置換部と、前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給する供給部を有することを特徴とする。
【０００９】
回路エミュレーション方法は、回路エミュレータが、回路の動作を模擬し、模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換え、前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給することを特徴とする。
【００１０】
回路エミュレーションプログラムは、回路エミュレーションプログラムにおいて、回路エミュレータに、回路の動作を模擬させ、模擬対象の前記回路が物理的なメモリから読み出したデータの情報ビット及び冗長ビットの全てがゼロの場合に、前記冗長ビットを所定のビットパターンで置き換えさせ、前記情報ビットと置き換えた前記所定のビットパターンとを前記読み出したデータとして前記回路に供給させることを特徴とする。
【発明の効果】
【００１１】
本願開示の１つの実施例によれば、冗長ビットを備えたメモリに対して全ビットがゼロのデータの効率的な取り扱いを可能にすることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、ホストマシンとエミュレータとの関係を示す図である。
【図２】エミュレータ上の検証対象の回路の構成の一例をメモリと共に示す図である。
【図３】メモリ中のＥＣＣビットの設定について説明する図である。
【図４】初期デフォールト値のゼロであるデータを読み出す際のＥＣＣエラーを回避する構成の一例を示す図である。
【図５】ＥＣＣ補間回路の構成の一例を示す図である。
【図６】エミュレーション動作に伴うメモリ内のデータ内容の変化を模式的に示す図である。
【図７】ホストマシンが実行する処理の流れを示すフローチャートである。
【図８】エミュレータが実行する処理の流れを示すフローチャートである。
【図９】ホストマシンの構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１４】
図１は、ホストマシンとエミュレータとの関係を示す図である。図１に示すように、ホストマシン１０がエミュレータ１１に接続されている。ホストマシン１０は、データとしてエミュレータデザイン１２及びテストプログラム１３を有する。ホストマシン１０はまた、エミュレータ１１の状態を示すデータ等を格納するための記憶装置１４を含む。論理シミュレーションでは、例えばＶｅｒｉｌｏｇ等のハードウェア記述言語により検証対象の回路を記述し、その回路記述をホストマシン１０によりコンパイルしてエミュレータ用の構成データを生成する。この生成した構成データがエミュレータデザイン（エミュレーションプログラム）１２である。ホストマシン１０は、エミュレータデザイン１２をエミュレータ１１にダウンロードし、エミュレータ１１上に検証対象の回路をマッピングする。即ち、エミュレータ１１のハードウェアリソースを用いて、エミュレータ１１上に検証対象の回路を構成する。図１では、エミュレータ１１上に構成された検証対象の回路がエミュレータデザイン１５として示されている。
【００１５】
エミュレータデザイン１５である検証対象の回路が例えばＣＰＵである場合には、ホストマシン１０が、エミュレータ１１のメモリ１６にテストプログラム１３を書き込む。エミュレータ１１上に構成された検証対象の回路は、メモリ１６に格納されたテストプログラム１３の各命令を随時フェッチして実行することにより、所定の動作を実行する。このようにして検証対象の回路の動作をエミュレータ１１により模擬し、その回路動作が正常に完了したか否かを、ホストマシン１０を介してチェックする。このホストマシン１０によるチェックにより、検証対象の回路の論理設計に問題があるか否かを確認することができる。なおメモリ１６は、エミュレーションにより実現される模擬回路ではなく、エミュレータ１１上の物理的なメモリである。このメモリ１６は、テストプログラム１３の格納領域として用いられると共に、検証対象の回路がその動作のために使用するワーク領域として用いられる。
【００１６】
図２は、エミュレータ１１上の検証対象の回路の構成の一例をメモリ１６と共に示す図である。図２において、図１と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図２に示すＣＰＵ２０が検証対象の回路である。ＣＰＵ２０は、２つのコア回路２１及び２２、キャッシュメモリ２３、及びメモリコントローラ２４を含む。ＣＰＵ２０は、メモリ１６に対するデータ読み出し動作及びデータ書き込み動作を実行する。図２において、ＣＰＵ２０はエミュレータ１１により実現された検証対象の回路であり、物理的に固定のハードウェアとして製造された回路ではなく、エミュレータ１１のハードウェアにマッピングされ論理合成された回路である。エミュレータ１１は、ＦＰＧＡ（Field Programmable Gate Array）ベースのエミュレータであってもよいし、或いはプロセッサベースのエミュレータであってもよい。ここでプロセッサベースのエミュレータは、複数の演算器をネットワーク回路で接続したダイナミックリコンフィギャラブル回路であってよい。そのようなダイナミックリコンフィギャラブル回路では、ネットワーク回路による演算器間の接続と演算命令とを、コンフィギュレーションデータに基づいて再構成可能に設定することができる。また図２において、メモリ１６は、エミュレータ１１のメモリであり、物理的に固定のハードウェアとして製造された半導体集積回路による記憶装置である。
【００１７】
図２に示すＣＰＵ２０の構成例は一例であり、この構成に限定されるものではない。この構成例では、２つのコア回路２１及び２２が設けられており、これらコア回路２１及び２２が１つのキャッシュメモリ２３を共有している。コア回路２１及び２２は、フェッチした命令をデコードし、デコード結果に応じて各種の算術論理演算を実行するプロセッサ部分である。キャッシュメモリ２３は高速なデータ読み書きが可能なメモリであり、主記憶であるメモリ１６に記憶される情報の一部をキャッシュメモリ２３にコピーしておくことで、この情報に対する高速なアクセスを可能にする。キャシュは複数のキャッシュラインを含み、主記憶からキャシュへの情報のコピーはキャシュライン単位で実行される。主記憶のメモリ空間はキャッシュライン単位で分割され、分割されたメモリ領域を順番にキャッシュラインに割当てておく。キャッシュの容量は主記憶の容量よりも小さいので、主記憶のメモリ領域を繰り返して同一のキャッシュラインに割当てることになる。
【００１８】
コア回路２１又は２２により、メモリ空間上のあるアドレスに最初のアクセスが実行されると、そのアドレスを含むキャッシュラインのデータをメモリ１６からキャッシュメモリ２３内の対応するキャッシュラインにコピーする。このようなコピー動作により既にアクセス対象のデータがキャッシュメモリ２３中に存在する場合には、アクセス動作は、キャッシュメモリ２３中の対応キャッシュデータ（１キャッシュライン分の所定ビット数のデータ）に対して実行される。アクセス対象のデータがキャッシュメモリ２３中に存在しない場合にはキャッシュミスとなる。キャッシュミスの場合には、必要に応じて置き換え対象のキャッシュデータをメモリ１６に書き込んだ後に、キャッシュデータ（１キャッシュライン分の所定ビット数のデータ）をメモリ１６からキャッシュメモリ２３にコピーする。
【００１９】
メモリコントローラ２４は、１キャッシュライン分のデータをメモリ１６に書き込む場合には、そのデータに対するＥＣＣ演算等により冗長ビットを生成し、データと共に冗長ビットをメモリ１６に格納する。メモリコントローラ２４は、１キャッシュライン分のデータをメモリ１６から読み出す場合には、対応する冗長ビットもメモリ１６から読み出し、データビット（情報ビット）と冗長ビットに対するＥＣＣ演算等を実行することにより、エラー検出や訂正を行う。以下においては、一例として、冗長ビットがＥＣＣビットであるものとして説明をするが、エラー検出や訂正の為の冗長ビットはＥＣＣビットに限定されるものではない。冗長ビットは、例えばパリティー検査用のビットやＣＲＣ（巡回冗長符号）検査用のビット等であってもよい。
【００２０】
図３は、メモリ１６中のＥＣＣビットの設定について説明する図である。図３（ａ）は、従来のメモリ中のＥＣＣビットの設定を示す図である。図３（ｂ）は、本実施例のメモリ１６中のＥＣＣビットの設定を示す図である。図３（ａ）及び図３（ｂ）において、各行はアドレスＡＤＲＳとそれに対応するデータＤＡＴＡが示される。データＤＡＴＡの幅は１４バイトであり、１つのキャッシュラインのデータ幅に相当する。アドレスＡＤＲＳは、順番に並ぶ１キャッシュライン分の所定ビット幅のデータ毎（即ち各行毎）に１つずつアドレスが増加する設定となっている。１４バイトのデータのうち、先頭の１バイトがＥＣＣビットであり、残りの１３バイトがデータビット（情報ビット）である。なお図３（ａ）及び図３（ｂ）において、各桁の数値は１６進数（０〜ｆ）であり、各桁が４ビットに相当する。またメモリにおいては、初期デフォールト状態では全てのデータ（全てのビット）がゼロになっている。
【００２１】
図３（ａ）に示されるように、従来のＥＣＣビットの設定では、ＥＣＣビット３１が全てのデータ（全ての１キャッシュライン分の所定ビット幅のデータ）に対して、適切なビット値に設定されている。即ち、１３バイトのデータビットに対してＥＣＣ演算を施して求められたＥＣＣビットの値が、ＥＣＣビット３１に設定されている。アドレス“００００００００”や“０００００ｆｆｆ”等のデータのように、初期デフォールト値“０”ではない書き込まれたデータに対しては、ＥＣＣビット３１のビット値の設定は、前述のように、メモリコントローラ２４が実行するＥＣＣ演算により計算される。この計算されたＥＣＣビットが、書き込み対象のデータビットとともに、メモリ１６に書き込まれている。またアドレス“０００００００２”や“０００１００００”等のデータのように、初期デフォールト値“０”のままであるデータに対しては、全てゼロのデータビットに対応するＥＣＣビット“ｆｆ”が、初期設定処理によりメモリ１６に書き込まれている。
【００２２】
図３（ｂ）に示されるように、本実施例によるＥＣＣビットの設定では、ＥＣＣビット３２は、ゼロでない全てのデータ（１キャッシュライン分の所定ビット幅のデータのうちゼロでない全てのデータ）に対して、適切なビット値に設定されている。即ち、アドレス“００００００００”や“０００００ｆｆｆ”等のデータのように、初期デフォールト値“０”ではない書き込まれたデータに対しては、ＥＣＣビット３２のビット値の設定は、メモリコントローラ２４が実行するＥＣＣ演算により計算される。この計算されたＥＣＣビットが、書き込み対象のデータビットとともに、メモリ１６に書き込まれている。それに対し、アドレス“０００００００２”や“０００１００００”等のデータのように、初期デフォールト値“０”のままであるデータに対しては、ＥＣＣビット３２のビット値も初期デフォールト値“００”のままである。
【００２３】
本実施例では、図３（ｂ）に示すように、ＥＣＣビット３２のビット値を初期デフォールト値“００”のままにしておく。つまり、図３（ａ）に示す従来技術の場合のように、ＥＣＣビットに対する初期設定動作を実行しない。これにより、エミュレータ１１のエミュレーション開始時に、種々の初期設定動作にかかる時間を短縮することができる。
【００２４】
図４は、初期デフォールト値のゼロであるデータを読み出す際のＥＣＣエラーを回避する構成の一例を示す図である。図４において、図１と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図４に示されるように、メモリコントローラ２４とメモリ１６との間には、メモリ１６からのデータ読み出し経路にＥＣＣ補間回路４１が設けられている。このＥＣＣ補間回路４１は、検証対象の回路即ちＣＰＵ２０に含まれる回路ではないが、物理的に固定のハードウェアとして製造された回路ではなく、エミュレータ１１のハードウェアにマッピングされ論理合成された回路であってよい。即ち、図１に示すシステムにおいて、エミュレータデザイン１２に付加回路としてＥＣＣ補間回路４１のデザインを含めておき、このＥＣＣ補間回路４１をＣＰＵ２０と共にエミュレータ１１にマッピングして、論理合成してよい。或いは、エミュレータ１１が、物理的に固定のハードウェアとして、ＥＣＣ補間回路４１に相当する組み込み機能を有していてもよい。
【００２５】
ＥＣＣ補間回路４１は、ＣＰＵ２０のメモリコントローラ２４がメモリ１６から読み出したデータのデータビット（情報ビット）及び冗長ビットの全ビットがゼロの場合に、冗長ビットを所定のビットパターンで置き換える。この置き換え処理により、ＥＣＣ補間回路４１は、データビット（情報ビット）と所定のビットパターンとを、読み出したデータとしてＣＰＵ２０のメモリコントローラ２４に供給する。またＥＣＣ補間回路４１は、メモリコントローラ２４がメモリ１６から読み出したデータのデータビット及び冗長ビットのうち少なくとも１ビットがゼロでない場合に、当該データビットと冗長ビットとを、読み出したデータとしてメモリコントローラ２４に供給する。これらのＥＣＣ補間回路４１による処理は、エミュレーション動作の一部として、エミュレータ１１によるＣＰＵ２０のエミュレーション動作において読み出し動作が発生したときに実行される。
【００２６】
図５は、ＥＣＣ補間回路４１の構成の一例を示す図である。図５に示すＥＣＣ補間回路４１は、ゼロ検出器５１、ＥＣＣ発生回路５２、一方の入力が正論理で他方の入力が負論理のＡＮＤ回路５３、両方の入力が正論理のＡＮＤ回路５４、及びＯＲ回路５５を含む。ゼロ検出器５１は、メモリ１６から読み出されたデータのデータビット（図５に示す読み出しデータ）とＥＣＣビット（図５に示すＥＣＣ）との両方共に全ビットが０であるときに、出力を１にする。上記データビットとＥＣＣビットとのうち少なくとも１つのビットが１であるときに、ゼロ検出器５１の出力は０となる。ゼロ検出器５１の出力は、そのままの正論理の値がＡＮＤ回路５４の一方の入力に印加されると共に、その負論理の値がＡＮＤ回路５３の一方の入力に印加される。ＡＮＤ回路５４の他方の入力は、ＥＣＣ発生回路５２からの出力を受け取り、ＡＮＤ回路５３の他方の入力は、メモリ１６から読み出されたＥＣＣビットを受け取る。ＡＮＤ回路５４の出力とＡＮＤ回路５３の出力とは、ＯＲ回路５５に入力される。このＯＲ回路５５の出力が、ＥＣＣビットとしてメモリコントローラ２４に供給される。またメモリ１６から読み出された読み出しデータは、そのままメモリコントローラ２４に読み出しデータとして供給される。なおＥＣＣのビット数をｎとすると、ＡＮＤ回路５３はｎ個のＡＮＤゲートを含み、その出力はｎビットである。同様に、ＡＮＤ回路５４もｎ個のＡＮＤゲートを含み、その出力はｎビットである。ＯＲ回路５５はｎ個のＯＲゲートを含み、その出力はｎビットである。
【００２７】
データビットとＥＣＣビットとの全ビットが０であれば、ＥＣＣ発生回路５２の出力が、ＥＣＣビットとしてメモリコントローラ２４に供給される。またデータビットとＥＣＣビットとのうち少なくとも１つのビットが１であれば、メモリ１６から読み出されたＥＣＣビットが、ＥＣＣビットとしてメモリコントローラ２４に供給される。ここでＥＣＣ発生回路５２の出力は、データビット（情報ビット）が全てゼロであるデータに対する正しい冗長ビットのビットパターンである。即ち図３（ｂ）の例の場合、ＥＣＣ発生回路５２の出力は“ｆｆ”となる。
【００２８】
このように、データビットとＥＣＣビットとの全ビットが０である場合、即ち初期デフォールト値のままのデータをメモリ１６から読み出した場合には、エラーが検出されないような正しい冗長ビットにより読み出した冗長ビットを置き換える。このようにして置き換えられた正しい冗長ビットと読み出したデータビットとを、メモリコントローラ２４に読み出しデータとして供給する。従って、図３（ｂ）に示すようにＥＣＣビット３２のビット値を初期デフォールト値“００”のままにしておいても、データを読み出した時にメモリコントローラ２４によりＥＣＣエラーが検出されることがない。
【００２９】
図６は、エミュレーション動作に伴うメモリ内のデータ内容の変化を模式的に示す図である。図６（ａ）は、従来のエミュレーション動作に伴うメモリ内のデータの変化を示す図である。図６（ｂ）は、本実施例のエミュレーション動作に伴うメモリ内のデータの変化を示す図である。時間Ｔ１は、エミュレーション開始時におけるメモリ空間の状態を示す。
【００３０】
図６（ａ）に示す従来のエミュレーション動作では、時間Ｔ１において、メモリ内の全てのメモリ領域は、全ビットにゼロが格納された初期デフォールト値領域６１となっている。時間Ｔ２において、テストプログラム６２が書き込まれる。このとき、テストプログラム６２が書き込まれていないメモリ領域は、初期デフォールト値領域６１のままである。時間Ｔ３において、初期設定動作により初期デフォールト値領域６１にＥＣＣビットを書き込むことにより、テストプログラム６２以外のメモリ領域は、ＥＣＣビット“ｆｆ”が格納された初期設定完了領域６３となる。時間Ｔ４で、テストプログラムがＣＰＵ２０（図２参照）により実行され、このテストプログラム実行の結果としてメモリ領域内に種々の実行結果データ６４が書き込まれる。
【００３１】
時間Ｔ５で、メモリのデータ内容を全て記録する動作が実行される。メモリのデータ内容を全て記録した先のメモリ状態が、図６（ａ）の時間Ｔ５に示されている。前述のように、エミュレータの動作においては、所定の復元ポイントから動作を再開するために、メモリのデータ内容を全て記録しておき、必要に応じて記録しておいたデータ内容をメモリに復元する処理が行われる。例えば図１のシステムの場合、メモリ１６の内容を全て記憶装置１４にコピーすることにより、メモリ１６のデータ内容を記録する。図６（ａ）の時間Ｔ５に示すのは、メモリ１６のデータ内容を記録した記憶装置１４内のメモリ領域の格納データである。メモリ１６の全てのデータ（テストプログラム６２、初期設定完了領域６３、実行結果データ６４）が記憶装置１４に格納されている。これは、メモリ１６の全てのアドレスにゼロでない何らかの値が書き込まれているために、全てのアドレスのデータが記録対象として、記憶装置１４にコピーされるからである。このような記録動作は、例えば所定の時間間隔（クロック間隔）で実行されてよい。
【００３２】
時間Ｔ６で、記録しておいたデータ内容をメモリに復元する動作が実行される。データが復元されたメモリ１６のメモリ状態が、図６（ａ）の時間Ｔ６に示されている。時間Ｔ５でデータ内容の記録動作が実行された後に、テストプログラム６２が引き続き実行され、メモリ１６のデータ内容は変更される。その後例えばエラーが発生すると、前回データ記録を行った時間に遡ってその時間からプログラム実行を再開するために、上記のデータ復元動作が実行される。この復元動作により、時間Ｔ６に示されるメモリ１６のメモリ状態は、時間Ｔ４におけるメモリ状態に等しい状態に戻されることになる。この復元動作においても、全てのデータ（テストプログラム６２、初期設定完了領域６３、実行結果データ６４）が記憶装置１４からメモリ１６に転送されることになる。
【００３３】
図６（ｂ）に示す本実施例のエミュレーション動作では、時間Ｔ１において、メモリ内の全てのメモリ領域は、全ビットにゼロが格納された初期デフォールト値領域７１となっている。時間Ｔ２において、テストプログラム７２が書き込まれる。このとき、テストプログラム７２が書き込まれていないメモリ領域は、初期デフォールト値領域７１のままである。本実施例のエミュレーション動作では、時間Ｔ３の初期設定動作は実行されない。時間Ｔ４で、テストプログラムがＣＰＵ２０（図２参照）により実行され、このテストプログラム実行の結果としてメモリ領域内に種々の実行結果データ７４が書き込まれる。
【００３４】
時間Ｔ５で、メモリのデータ内容を記録する動作が実行される。メモリのデータ内容を記録した先のメモリ状態が、図６（ｂ）の時間Ｔ５に示されている。図１のシステムの場合、メモリ１６の内容を記憶装置１４にコピーすることにより、メモリ１６のデータ内容を記録する。図６（ｂ）の時間Ｔ５に示すのは、メモリ１６のデータ内容を記録した記憶装置１４内のメモリ領域の格納データである。メモリ１６に格納されるテストプログラム７２、初期設定完了領域７３、及び実行結果データ７４のうち、テストプログラム７２及び実行結果データ７４のみがメモリ１６から記憶装置１４にコピーされている。即ち、初期デフォールト値領域７１のデータは全ビットがゼロであるので、そのように全ビットがゼロである格納データのアドレスを除いて、残りのアドレスのデータをメモリ１６から記憶装置１４にコピーする。このような選択的なコピー動作は、エミュレータ１１に設けられているデータ記録機能により実行される。
【００３５】
時間Ｔ６で、記録しておいたデータ内容をメモリに復元する動作が実行される。データが復元されたメモリ１６のメモリ状態が図６（ｂ）の時間Ｔ６に示されている。エラー発生後にこの復元動作を実行する際には、エミュレーション動作の再開に伴い、メモリ１６の内容が初期デフォールト状態に戻される。従って、復元動作においてテストプログラム７２及び実行結果データ７４のみを記憶装置１４からメモリ１６に転送することにより、時間Ｔ６に示されるメモリ１６のメモリ状態は、時間Ｔ４におけるメモリ状態に等しい状態に戻されることになる。このように、本実施例のエミュレーション動作においては、初期デフォールト状態のデータを格納するアドレスについて、データ記録動作及びデータ復元動作での記録及び復元の対象としない、即ちデータのコピー及び転送を行わない。
【００３６】
このように、メモリ１６の内容を記憶装置１４に記録し且つ記憶装置１４からメモリ１６の内容をメモリ１６に復元する記録復元動作において、メモリ１６に格納されるデータのうち全ビットがゼロであるデータを除いた全てのデータを記憶装置１４に記録する。これにより、データ記録動作及びデータ復元動作でのコピー及び転送するデータ量を削減し、効率的なエミュレーション動作が可能となる。
【００３７】
図７は、ホストマシンが実行する処理の流れを示すフローチャートである。シミュレーションが開始されると、ステップＳ１で、ホストマシン１０がエミュレータデザイン１２をエミュレータ１１にダウンロードする。これにより、エミュレータ１１上に検証対象の回路をマッピングする。即ち、エミュレータ１１のハードウェアリソースを用いて、エミュレータ１１上に検証対象の回路を構成する。例えばリコンフィギュラブル回路ベースのエミュレータの場合、エミュレータ１１は、リコンフィギュラブル演算器アレイ、シーケンサ、及びコンフィギュレーションメモリを含む。リコンフィギュラブル演算器アレイは、複数の演算器とこれら演算器間を再構成可能に接続するネットワーク回路とを含む。複数の演算器の各々が実行する演算はコンフィギュレーションデータ（エミュレータデザイン１２）中の演算命令により指定され、複数の演算器間の接続形態はコンフィギュレーションデータ中の接続データにより指定される。これらのコンフィギュレーションデータは、エミュレータ１１にダウンロードされ、エミュレータ１１のコンフィギュレーションメモリに格納される。シーケンサは、コンフィギュレーションメモリに格納される複数のコンフィギュレーションデータの内で、リコンフィギュラブル演算器アレイの現在の実行形態を指定するコンフィギュレーションデータを選択する。シーケンサにより指定されたコンフィギュレーションデータがリコンフィギュラブル演算器アレイに供給され、そのコンフィギュレーションデータに従った演算実行形態でリコンフィギュラブル演算器アレイが動作する。このようにして、再構成可能な回路を実現する。また例えばＦＰＧＡベースのエミュレータの場合であれば、上記の複数の演算器とネットワーク回路との代りに、複数の論理ゲートとこれら演算器間を再構成可能に接続するネットワーク回路とにより、再構成可能な回路を実現する。
【００３８】
ステップＳ２で、ホストマシン１０は、メモリ１６のデータ内容を復元するか否かを判定する。復元する場合（ステップＳ２でＹＥＳの場合）には、ホストマシン１０が記憶装置１４に格納されているデータをエミュレータ１１のメモリ１６に復元してから、処理はステップＳ５に進む。復元しない場合（ステップＳ２でＮＯの場合）には、ステップＳ３で、ホストマシン１０がエミュレータ１１に指示することにより、エミュレータ１１にエミュレータデザインをリセット処理させるとともに、必要な初期設定動作を実行させる。これにより、ＣＰＵ２０がテストプログラム１３を実行するためのプログラムカウンタのスタート番地の設定等が行われる。更にステップＳ４で、ホストマシン１０が、テストプログラム１３をエミュレータ１１のメモリ１６に書き込む。
【００３９】
ステップＳ５で、ホストマシン１０は、エミュレータ１１に対してクロック数を１０００に設定し、エミュレータ１１によるＣＰＵ２０の動作の実行を開始させる。ステップＳ６で、ホストマシン１０は、エミュレータ１１によるＣＰＵ２０の動作実行によりエラー発生したか、実行が終了したか、或いは１０００クロック分の動作を実行したか否かを監視する。ステップＳ６の監視において、１０００クロック分の動作の実行を検出した場合、ステップＳ７で、ホストマシン１０は、エミュレータ１１に指示することにより、エミュレータ１１の状態を記録させる。これにより、例えば、エミュレータ１１の状態（ＣＰＵ２０の回路の状態）を示す種々のデータと共に、エミュレータ１１のメモリ１６のメモリ内容がホストマシン１０の記憶装置１４に記録される。その後、ステップＳ５に戻り、以降の処理を繰り返す。またステップＳ６の監視において、エラー発生が検出された場合、ステップＳ８において、ホストマシン１０はエミュレータ１１の状態を示す種々のデータを収集する。またステップＳ６の監視において、ＣＰＵ２０の動作の終了を検出した場合、処理は終了する。
【００４０】
図８は、エミュレータが実行する処理の流れを示すフローチャートである。
【００４１】
ステップＳ１１において、メモリ１６のデータ内容を復元するか否かに応じて処理が異なる。復元する場合には、ステップＳ１２において、ホストマシン１０からの指示に応じて、エミュレータ１１が、ホストマシン１０の記憶装置１４からメモリ１６のデータ内容をエミュレータ１１のメモリ１６に復元する。また更に、エミュレータ１１上のＣＰＵ２０の回路の状態を、記録ファイルに基づいて復元する。復元しない場合には、ステップＳ１３において、エミュレータ１１はクロック数を１０００に設定し、エミュレータ１１によるＣＰＵ２０の動作の実行を開始する。ステップＳ１４で、エミュレータ１１は、ＣＰＵ２０の動作実行によりエラーが発生したこと、実行が終了したこと、或いは１０００クロック分の動作を実行したことを検出すると、処理を中断又は終了する。ステップＳ１５において１０００クロック分の動作の実行を検出した場合、ステップＳ１６で、ホストマシン１０からの指示に基づき、エミュレータ１１は回路の状態を記録する。例えば、エミュレータ１１の状態（ＣＰＵ２０の回路の状態）を示す種々のデータと共に、エミュレータ１１のメモリ１６のメモリ内容をホストマシン１０に送信し、ホストマシン１０は送信されたデータを記憶装置１４に記録する。またステップＳ１５において、ＣＰＵ２０の動作の終了を検出した場合、処理は終了する。
【００４２】
図９は、ホストマシンの構成の一例を示す図である。図９に示されるように、ホストマシンは、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図９の装置は、コンピュータ５１０と、コンピュータ５１０に接続されるディスプレイ装置５２０、通信装置５２３、及び入力装置よりなる。入力装置は、例えばキーボード５２１及びマウス５２２を含む。コンピュータ５１０は、ＣＰＵ５１１、ＲＡＭ５１２、ＲＯＭ５１３、ハードディスク等の二次記憶装置５１４、可換媒体記憶装置５１５、及びインターフェース５１６を含む。
【００４３】
キーボード５２１及びマウス５２２は、ユーザとのインターフェースを提供するものであり、コンピュータ５１０を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置５２０は、コンピュータ５１０で処理された結果等を表示すると共に、コンピュータ５１０を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置５２３は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
【００４４】
上記の実施例で説明したホストマシン１０の処理を実行する為のプログラムは、コンピュータ５１０が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置５１５に装着可能な記憶媒体Ｍに記憶されており、記憶媒体Ｍから可換媒体記憶装置５１５を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体（図示せず）に記憶されており、この記憶媒体から通信装置５２３及びインターフェース５１６を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。
【００４５】
キーボード５２１及び／又はマウス５２２を介してユーザからプログラム実行指示があると、ＣＰＵ５１１は、記憶媒体Ｍ、遠隔地記憶媒体、或いは二次記憶装置５１４からプログラムをＲＡＭ５１２にロードする。ＣＰＵ５１１は、ＲＡＭ５１２の空き記憶空間をワークエリアとして使用して、ＲＡＭ５１２にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおＲＯＭ５１３は、コンピュータ５１０の基本動作を制御するための制御プログラムが格納されている。
【００４６】
上記コンピュータプログラムを実行することにより、コンピュータ５１０が、ホストマシン１０として、上記実施例で説明された動作を実行する。
【００４７】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００４８】
１０  ホストマシン
１１  エミュレータ
１２  エミュレータデザイン
１３  テストプログラム
１４  記憶装置
１５  エミュレータデザイン
１６  メモリ
５１０  コンピュータ
５１１  ＣＰＵ
５１２  ＲＡＭ
５１３  ＲＯＭ
５１４  二次記憶装置
５１５  可換媒体記憶装置
５１６  インターフェース
５２０  ディスプレイ装置
５２１  キーボード
５２２  マウス
５２３  通信装置
【図１】
0005935319.tif 000002
【図２】
0005935319.tif 000003
【図３】
0005935319.tif 000004
【図４】
0005935319.tif 000005
【図５】
0005935319.tif 000006
【図６】
0005935319.tif 000007
【図７】
0005935319.tif 000008
【図８】
0005935319.tif 000009
【図９】
0005935319.tif 000010