(57)【要約】【課題】  ランダムアクセスメモリを有する回路設計をデバッグするための方法及び装置を提供する。【解決手段】  回路設計は、ハードウェア論理エミュレータによりエミュレートされる。エミュレータによってエミュレートされるＲＡＭは、以前の状態にリワインドされ、その後、再生される。また、エミュレータによってエミュレートされるＲＡＭは、ＲＡＭがトレースウィンドウ中のいくつかのポイントにおいて保持されている状態に再構築される。【選択図】    図１
2004227571.tif 000002
【特許請求の範囲】
【請求項１】
ランダムアクセスメモリ（ＲＡＭ）により構成される回路設計が所望の機能を実行することを検証する方法であって、ＲＡＭは、少なくとも１つの書込ポート及びデータを蓄積する複数のメモリ位置を有し、複数のメモリ位置の各々はアドレスを有しており、
回路設計をハードウェア論理エミュレーションシステム内にエミュレートし、
ＲＡＭ内の複数のメモリ位置の中の選択された１つにデータを書き込む前に、ＲＡＭ内の複数のメモリ位置の中の当該選択された１つに蓄積されているデータを読み出し、
ＲＡＭ内の複数のメモリ位置の中の前記選択された１つから読み出されたデータを、バッファ内に蓄積されているデータがラストイン−ファーストアウトで出力されるようにそれぞれが配列されている、バッファ内の選択されたメモリ位置に蓄積し、
チェックポイントの後で、前記バッファ内の前記選択されたメモリ位置に蓄積されているデータを、ＲＡＭ内の複数のメモリ位置の中の前記選択された１つに移動させる。
【請求項２】
請求項１の方法であって、前記移動ステップの後で、ＲＡＭ内の複数のメモリ位置の中の前記選択された１つに蓄積されているデータを観察する。
【請求項３】
請求項１の方法であって、
ＲＡＭ内の複数のメモリ位置の中の前記選択された１つに蓄積されているデータを読み出すステップでは、
ＲＡＭ内の少なくとも１つの書込ポートのそれぞれに対して、対応するシャドウ読出ポートを回路設計内に挿入し、
ＲＡＭ内の複数のメモリ位置の中の前記選択された１つに蓄積されているデータが前記対応するシャドウ読出ポートによって読み出されるように、前記対応するシャドウ読出ポートによって読出動作を実行する。
【請求項４】
請求項１の方法であって、前記移動ステップでは、更に、
前記バッファ内の前記選択されたメモリ位置のそれぞれがラストイン−ファーストアウト方法で読み出されるように、前記バッファへのアドレス入力をデクリメントし、
前記バッファ内の前記選択されたメモリ位置のそれぞれからのデータを、ＲＡＭの少なくとも１つの書込ポートの中の１つに配置し、
ＲＡＭの少なくとも１つの書込ポートの中の１つに配置されている、前記バッファ内の前記選択されたメモリ位置のそれぞれからのデータをＲＡＭ内の複数のメモリ位置の中の前記選択された１つに書き込む。
【請求項５】
請求項４の方法であって、前記観察ステップでは、更に、
前記書込ステップの後に、ＲＡＭ内のメモリ位置の中の少なくともいくつかにおいて観察する。
【請求項６】
回路設計が所望の機能を実行することを検証する装置であって、回路設計は、データ入力とアドレス入力を有する書込ポート、読出ポート及びデータを蓄積する複数のメモリ位置を有するＲＡＭにより構成され、複数のメモリ位置のそれぞれはアドレスを有しており、
書込ポートに対応し、アドレス入力からのアドレスを受信するアドレス入力及びデータ出力を有するシャドウ読出ポートと、
ＲＡＭのアドレス入力及び前記シャドウ読出ポートの前記データ出力に接続され、アドレス出力及びデータ出力を有するバッファと、
前記バッファの前記アドレス出力に接続されている第１入力及びＲＡＭのアドレス入力に接続されている第２入力を有し、アドレス入力を書込ポートに送る第１マルチプレクサと、
前記バッファの前記データ出力に接続されている第１入力及びＲＡＭのデータ入力に接続されている第２入力を有し、データ入力を書込ポートに送る第２マルチプレクサを備え、
前記第１マルチプレクサ及び第２マルチプレクサは、それぞれ第１モードと第２モードの間を切り替える選択入力を有している。
【請求項７】
請求項６の装置であって、前記バッファは、ステートマシンに接続されている。
【請求項８】
請求項６の装置であって、前記第１モードは、前記第１マルチプレクサによって、ＲＡＭのアドレス入力からの信号が書込ポートのアドレス入力に送られることを可能とするとともに、第２マルチプレクサによって、ＲＡＭのデータ入力からの信号が書込ポートのデータ入力に送られることを可能とする。
【請求項９】
請求項８の装置であって、前記第２モードは、前記第１マルチプレクサによって、前記バッファの前記アドレス出力からの信号が書込ポートのアドレス入力に送られることを可能とするとともに、前記第２マルチプレクサによって、前記バッファのデータ出力からの信号が書込ポートのデータ入力に送られることを可能とする。
【請求項１０】
請求項９の装置であって、更に、前記バッファに接続されているステートマシンを備えている。
【請求項１１】
請求項１０の装置であって、前記ステートマシンは、装置が前記第２モードにある時、前記バッファに蓄積されているデータ及びアドレスの、前記バッファの前記アドレス出力及び前記データ出力からの読み出しを制御する。
【請求項１２】
回路設計が所望の機能を実行することを検証する装置であって、回路設計は、第１データ入力及び第１アドレス入力を有する第１書込ポートと、第２データ入力及び第２アドレス入力を有する第２書込ポートと、第１設計データ入力と、第１設計アドレス入力と、第２設計データ入力と、第２設計アドレス入力と、データを蓄積する複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成され、複数のメモリ位置のそれぞれはアドレスを有しており、
第１書込ポートに対応し、第１設計アドレス入力からのアドレスを受信するアドレス入力及びデータ出力を有する第１シャドウ読出ポートと、
第２書込ポートに対応し、第２設計アドレス入力からのアドレスを受信するアドレス入力及びデータ出力を有する第２シャドウ読出ポートと、
第１設計アドレス入力及び前記第１シャドウ読出ポートの前記データ出力に接続され、アドレス出力及びデータ出力を有する第１バッファと、
第２設計アドレス入力及び前記第２シャドウ読出ポートの前記データ出力に接続され、アドレス出力及びデータ出力を有する第２バッファと、
前記第２バッファの前記アドレス出力に接続されている第１入力及び第１設計アドレス入力に接続されている第２入力を有し、第１アドレス入力を第１書込ポートに送る第１マルチプレクサと、
前記第２バッファの前記データ出力に接続されている第１入力及び第１設計データ入力に接続されている第２入力を有し、第１データ入力を第１書込ポートに送る第２マルチプレクサと、
前記第１バッファの前記アドレス出力に接続されている第１入力及び第２設計アドレス入力に接続されている第２入力を有し、第２アドレス入力を第２書込ポートに送る第３マルチプレクサと、
前記第１バッファの前記データ出力に接続されている第１入力及び第２設計データ入力に接続されている第２入力を有し、第２データ入力を第２書込ポートに送る第４マルチプレクサを備え、
前記第１マルチプレクサ、前記第２マルチプレクサ、前記第３マルチプレクサ及び前記第４マルチプレクサは、それぞれ第１モードと第２モードの間を切り替える選択入力を有している。
【請求項１３】
ランダムアクセスメモリ（ＲＡＭ）により構成される回路設計を、デバッグ可能に製造する方法であって、ＲＡＭは、書込ポート及びデータを蓄積する複数のメモリ位置を有し、複数のメモリ位置のそれぞれはアドレスを有しており、
回路設計からのアドレスを受信するアドレス入力及びデータ出力を有するシャドウ読出ポートを、書込ポートに対応する回路設計に挿入し、
データを選択されたメモリアドレスに書込ポートにより書き込む前に、前記選択されたメモリアドレスに蓄積されているデータを前記シャドウ読出ポートにより読み出すように計画し、
前記シャドウ読出ポートの前記データ出力を、データ出力及びアドレス出力を有し、前記計画ステップにおいて読み出されたデータを選択されたメモリ位置に蓄積するバッファに相互接続し、
回路設計からのアドレス入力に接続されている第１入力を有する第１マルチプレクサが、アドレス入力を書込ポートに送るように、第１マルチプレクサを回路設計に挿入し、
回路設計からのデータ入力に接続されている第１入力を有する第２マルチプレクサが、データ入力を書込ポートに送るように、第２マルチプレクサを回路設計に挿入し、
前記バッファの前記アドレス出力を前記第１マルチプレクサの第２入力に接続し、
前記バッファの前記データ出力を前記第２マルチプレクサの第２入力に接続し、
チェックポイントの後に、前記バッファ内の前記選択されたメモリ位置に蓄積されているデータを、ＲＡＭ内の複数のメモリ位置の中の選択された１つに移動させる。
【請求項１４】
請求項１３の方法であって、前記移動ステップでは、更に、
ＲＡＭ内の複数のメモリ位置の中の選択された１つのそれぞれが前記チェックポイントの前に保持されているステートにリワインドされるように、前記バッファ内の前記選択されたメモリ位置に蓄積されているデータをラストイン−ファーストアウトの順序で送る。
【請求項１５】
請求項１３の方法であって、更に、前記移動ステップの後で、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されている、少なくともいくつかのデータを観察する。
【請求項１６】
回路設計が所望の機能を実行することを機能検証システムを用いることによって検証する方法であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）によって構成されており、
回路設計を機能検証システム内で実行させ、
データをＲＡＭに書き込む前にデータを読み出し、
前記データをバッファに蓄積し、
チェックポイントにおいて、前記バッファに蓄積されているデータを、前記データが前記バッファに書き込まれた順序と逆の順序で読み出し、
前記データが前記バッファから読み出される時、前記データを前記ＲＡＭに書き込む。
【請求項１７】
請求項１６の方法であって、機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項１８】
請求項１７の方法であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項１９】
請求項１７の方法であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項２０】
請求項１６の方法であって、機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項２１】
回路設計が所望の機能を実行することを検証する装置であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を機能検証システム内で実行させる手段と、
データをＲＡＭ内に書き込む前にデータを読み出す手段と、
前記データをバッファに蓄積する手段と、
前記バッファに蓄積されているデータを、チェックポイントにおいて前記バッファに書き込まれたデータから逆の順序で読み出す手段と、
前記データが前記バッファから読み出される時、前記データを前記ＲＡＭに書き込む手段を備えている。
【請求項２２】
請求項２１の装置であって、前記機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項２３】
請求項２２の装置であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項２４】
請求項２２の装置であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項２５】
請求項２１の装置であって、機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項２６】
回路設計が所望の機能を実行することを検証する方法であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を第１機能検証システム内で実行させ、
新しいデータをＲＡＭ内のアドレスに書き込む前に、前記ＲＡＭ内の前記アドレスに以前に蓄積されたデータを読み出し、
前記以前に蓄積されたデータを第１機能検証システムから外部システムに移動させ、
チェックポイントにおいて、設定された時点におけるＲＡＭの複数のメモリ位置に対応する、再構築されたメモリを生成するために、前記外部システム内の前記以前に蓄積されたデータを再構築し、
前記再構築ステップは、
前記以前に蓄積されたデータをラストイン−ファーストアウトの順序で読み出し、
前記以前に蓄積されたデータを前記外部システム内のメモリに書き込むことによって前記再構築されたメモリを生成する。
【請求項２７】
請求項２６の方法であって、更に、
前記データを再構築した後に、前記再構築されたメモリを前記第１機能検証システムに移動させ、
前記再構築されたメモリをＲＡＭに書き込む。
【請求項２８】
請求項２６の方法であって、更に、前記データを再構築した後に、前記再構築されたメモリを第２機能検証システムに移動させる。
【請求項２９】
請求項２８の方法であって、前記第２機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項３０】
請求項２６の方法であって、前記第１機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項３１】
回路設計が所望の機能を実行することを機能検証システムを用いて検証する方法であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を機能検証システム内で実行させ、
書込動作が実行された順序に対応する時間的な順序で蓄積されたアドレス及び当該アドレスに蓄積されるデータにより構成される書込動作の全てをバッファに蓄積し、
前記バッファに蓄積されている前記書込動作のそれぞれを再生することによってＲＡＭのイメージを再構築し、
前記イメージを前記機能検証システムに書き込む。
【請求項３２】
請求項３１の方法であって、機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項３３】
請求項３２の方法であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項３４】
請求項３２の方法であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項３５】
請求項３１の方法であって、機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項３６】
回路設計が所望の機能を実行することを第１機能検証システムを用いて検証する方法であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を第１機能検証システム内で実行させ、
書込動作が実行された順序に対応する時間的な順序で蓄積されたアドレス及び当該アドレスに蓄積されるデータにより構成される書込動作の全てをバッファに蓄積し、
前記バッファに蓄積されている前記書込動作のそれぞれを再生することによって、前記各書込動作中に書き込まれた、少なくとも前記アドレスの前記データにより構成される、ＲＡＭのイメージを再構築し、
前記イメージを第２機能検証システムに書き込む。
【請求項３７】
請求項３６の方法であって、第１機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項３８】
請求項３７の方法であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項３９】
請求項３７の方法であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項４０】
請求項３６の方法であって、第１機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項４１】
請求項３６の方法であって、第２機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項４２】
請求項３６の方法であって、第２機能意検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項４３】
回路設計が所望の機能を実行することを機能検証システムを用いて検証する装置であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を機能検証システム内で実行させる手段と、
書込動作が実行された順序に対応する時間的な順序で蓄積されたアドレス及び当該アドレスに蓄積されるデータにより構成される書込動作の全てをバッファに蓄積する手段と、
前記バッファに蓄積されている前記書込動作のそれぞれを再生することによって、前記各書込動作中に書き込まれた、少なくとも前記アドレスの前記データにより構成される、ＲＡＭのイメージを再構築する手段と、
前記イメージを前記機能検証システム内に書き込む手段とを備える。
【請求項４４】
請求項４３の装置であって、機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項４５】
請求項４４の装置であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項４６】
請求項４４の装置であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項４７】
請求項４３の装置であって、機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項４８】
回路設計が所望の機能を実行することを第１機能検証システムを用いて検証する装置であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を第１機能検証システム内で実行させる手段と、
書込動作が実行された順序に対応する時間的な順序で蓄積されたアドレス及び当該アドレスに蓄積されるデータにより構成される書込動作の全てをバッファに蓄積する手段と、
前記バッファに蓄積されている前記書込動作のそれぞれを再生することによって、前記各書込動作中に書き込まれた、少なくとも前記アドレスの前記データにより構成される、ＲＡＭのイメージを再構築する手段と、
前記イメージを第２機能検証システム内に書き込む手段とを備える。
【請求項４９】
請求項４８の装置であって、第１機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項５０】
請求項４９に記載の装置であって、前記ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムである。
【請求項５１】
請求項４９の装置であって、前記ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムである。
【請求項５２】
請求項４８の装置であって、第１機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項５３】
請求項４８の装置であって、第２機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項５４】
請求項４８の装置であって、第２機能検証システムは、ハードウェア論理検証システムにより構成されている。
【請求項５５】
回路設計が所望の機能を実行することを検証する装置であって、回路設計は、少なくとも１つの書込ポート及び複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されており、
回路設計を第１機能検証システム内で実行させる手段と、
新しいデータをＲＡＭ内のアドレスに書き込む前に、ＲＡＭ内の前記アドレスに以前に蓄積されたデータを読み出す手段と、
前記以前に蓄積されたデータを第１機能検証システムから外部のシステムに移動させる手段と、
設定時点におけるＲＡＭの複数のメモリ位置に対応する、再構築されたメモリを生成するために、チェックポイントにおける前記外部システム内の前記以前に蓄積されたデータを再構築する手段を備え、
前記再構築手段は、
前記以前に蓄積されたデータをラストイン−ファーストアウトの順序で読み出す手段と、
前記以前に蓄積されたデータを前記外部システム内のメモリに書き込むことによって、前記再構築されたメモリを生成する手段を有している。
【請求項５６】
請求項５５の装置であって、更に、
前記データを再構築した後に、前記再構築されたメモリを前記第１機能検証システムに移動させる手段と、
前記再構築されたメモリをＲＡＭに書き込む手段を備えている。
【請求項５７】
請求項５５の装置であって、更に、前記データを再構築した後に、前記再構築されたメモリを第２機能検証システムに移動させる手段を備えている。
【請求項５８】
請求項５７の装置であって、前記第２機能検証システムは、ソフトウェアシミュレータにより構成されている。
【請求項５９】
請求項５５の装置であって、前記第１機能検証システムは、ハードウェア論理検証システムにより構成されている。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般的には、集積回路及び電気システムの設計の検証に用いられるハードウェア論理エミュレーションシステムに関し、より詳しくは、任意のチェックポイントから過去の時点までのデジタル回路設計部分を形成する記憶回路に蓄積されているデータを再積するための方法及び装置に関する。
【関連する出願】
【０００２】
２００３年１月２３日に出願された米国仮出願第６０／４４２１７６号の内容は、その全てが参照として本明細書に組み込まれる。
【背景技術】
【０００３】
ハードウェア論理エミュレーションシステムは、ユーザ設計を多くのプログラマブル集積回路内に配設する周知の装置である。このような論理エミュレーションシステムは、ケイデンス・デザイン・システムズ・インコーポレイテッド（アメリカ合衆国、カリフォルニア州、サンノゼ）等の多くの販売会社から販売されている。
典型的なエミュレーションシステムは、プログラム可能に相互接続されるプログラマブル論理チップあるいはプロセッサチップを用いている。プログラマブル論理チップ（例えば、フィールドプログラマブルゲートアレイ(field  programmable  gate  array)、すなわちＦＰＧＡ）ベースのエミュレーションシステム(FPGA  based  emulation  system)では、ユーザ設計（以下では、“検証対象である設計(design  under  verification)”、すなわち“ＤＵＶ”という）に含まれている論理は、ＤＵＶ内に設けられた論理がプログラマブル論理装置内で実際に作動するように、論理チップ内にプログラムされる。プロセッサベースのエミュレーションシステム(processor-based  emulation  system)では、ユーザ設計は、設計の出力を計算することによって、ユーザ設計の機能がプロセッサ内に生成されて見えるように処理される。論理自身は、プロセッサベースのエミュレーションシステム内に配設されない。すなわち、ＤＵＶは、プロセッサ内で実際に動作する形式をとらない。
プログラマブル論理装置を用いるハードウェア論理エミュレーションシステムは、米国特許第５１０９３５３号、第５０３６４７３号、第５４７５８３０号及び第５９６０１９１号等に示されている。米国特許第５１０９３５３号、第５０３６４７３号、第５４７５８３０号及び第５９６０１９１号は、参照として本明細書に組み込まれる。プロセッサチップを用いるハードウェア論理エミュレーションシステムは、米国特許第５５５１０１３号、第６０３５１１７号及び第６０５１０３０号等に示されている。米国特許第５５５１０１３号、第６０３５１１７号及び第６０５１０３０号は、参照として本明細書に組み込まれる。
【０００４】
ＤＵＶは、通常、設計のネットリスト記述(netlist  description)の形式で提供される。ネットリストは、ハードウェア記述言語を含む多くのソースから得られる。ネットリスト記述（当業者は、“ネットリスト”と呼んでいる）は、回路の構成要素及び構成要素間の電気的相互接続の記述である。構成要素は、結合論理（例えば、ゲート）やシーケンシャル論理（例えば、フリップフロップやラッチ）等の、論理回路を実装するのに必要な全ての回路要素を含む。
ケイデンス・デザイン・システムズ・インコーポレイテッドによって製造、販売されている従来のエミュレーションシステムでは、ネットリストは、エミュレーションシステムによって使用可能な形式にコンパイルされる。ＦＰＧＡベースのエミュレータでは、ＤＵＶは、論理ゲート（シーケンシャル及び結合の両方）がＦＰＧＡに実装可能な形式にコンパイルされる。プロセッサベースのエミュレーションシステムでは、ＤＵＶは、プロセッサチップ上のプロセッサによって実行される一連のステートメント(statement)にコンパイルされる。論理は、プロセッサ内に実装されない。
【０００５】
ハードウェア論理エミュレーションシステムの主な使用の１つは、実際にシリコン内に組み付けられたユーザ設計が機能エラーを含まないように、ＤＵＶをデバッグすることである。回路設計者は、代わりとなるシミュレーションがエミュレーションに比べて非常に遅いため、これまで、このようなデバッグを実行するためにエミュレータを用いてきた。
シミュレーションは、ソフトウェアベースの接近法である。シミュレーションでは、設計及びテストベンチ(testbench)が、マシン実行可能モデルにコンパイルされ、ワークステーションあるいはパソコン内で実行される。エミュレータ内のテストベンチは、しばしば、ＤＵＶと直接に相互作用するターゲットボード(target  board)として表される。
【０００６】
ＤＵＶをデバッグするために、設計者は、数時間に渡って設計信号の活動を調査する必要がある。その理由は、デジタル回路は、１あるいは複数のクロックによって駆動され、また、エラーは、設計、すなわち、ＤＵＶを駆動するクロックの種々の移行時に発生するからである。
設計者は、数時間にわたって設計信号を評価する時、少なくとも２つの問題点に遭遇する。１つの問題点は、どの信号を観察するか（すなわち、ＤＵＶ内のどのモードを観察するか）である。第２の問題点は、何時（すなわち、トリガと呼ばれる、どのクロックの移動時及び／またはどのイベント合流時）信号を観察するかである。これらの２つの問題点は、シミュレーション及びエミュレーション手段に対する重大な要求を強いる。第１は、回路設計が、典型的には非常に大きい（例えば、数百万個のゲート）ことである。第２は、設計者が観察する信号の数が、比例して大きいことである。第３は、設計信号を観察する必要があるタイムウィンドウ（時間窓）(time  window)（以下では、“トレースウィンドウ(trace  window）“と呼ぶ)は、シミュレーションあるいはエミュレーションの前に予言困難であるため、設計をデバッグする設計者は、できるだけ大きいトレースウィンドウを選ぶことである。
【０００７】
これらの問題点を扱うために、回路設計者は、種々の接近法を用いてきた。
１つの接近法は、ＤＵＶロックステップ(lockstep)をシミュレータ内で実行させることである。この接近法では、シミュレーションの実行は、相互作用動作で設計者によって制御される。設計者は、シミュレーションの実行、停止及び信号の観察、続行及び処理の繰り返しを行うことができる。シミュレーションが停止すると、設計者は、設計内の任意の信号のステート(state)を検査することができる。
第２の接近法は、信号ダンプとともにシミュレーションを自由に実行させることである。この“フリーランニング”接近法では、シミュレーションは、ユーザの介在なしに自由に実行され、シミュレーション中に観察される信号は、シミュレーション中にダンプ(damp)される。ダンプされる信号は、シミュレーションの開始前に特定されなければならないということを知ることが重要である。これらのシミュレーション接近法は、有効ではあるが、非常に遅い。
第３の接近法は、トレースウィンドウの固定サイズに対して十分に視認可能であるエミュレータを用いて、ＤＵＶをエミュレートすることである。この接近法では、エミュレータは、自由に実行し、全視野に対して視認可能であるエミュレータ内のＤＵＶによって生成された信号は、任意の期間蓄積される。
最後の接近法は、制限された視認性を有するエミュレータを用いてＤＵＶをエミュレートし、再生することである。この接近法では、制限された情報が、エミュレーション中に蓄積される。設計者は、分析のための十分な情報を入手するために、エミュレーションを数回実行させる必要がある。
【０００８】
設計検証産業は、ＤＵＶ内に視認性を提供するために、数年に渡って努力をしてきた。従来のエミュレーションシステムは、この分野にいくつかの機能性を提供する。最も近い従来のエミュレータは、ＤＵＶ内の種々のノードにおいて信号が観察できるように、種々のノードを“調査”するための種々の異なる方法を提供する。例えば、Ｌｉｕらによる米国特許第５４２５０３６号には、多くのＥＰＧＡ内の“リードバック(readback)”機能を用いて信号を調査可能であることが開示されている。Ｂａｒｂｉｅｒらによる米国特許５７７７４８９号では、ＦＰＧＡは、全てのステートエレメント(state  element)をＦＰＧＡにトレース(trace)することを可能とする、ＦＰＧＡに組み付けられたスキャンチェーン(scan  chain)を有している。また、ステートエレメントの選択されたサブセットのトレースを可能とするように、スキャンチェーンをＦＰＧＡ内にプログラムする他の方法が、米国特許第５９４３４９０号に開示されている。Ｗａｎｇらによる米国特許第６４４６２４９号では、各論理要素（ＤＵＶ内に論理を実装する）は、その内容が調査ストリーム(probe  stream)で読み出される調査シーケンスメモリ(probe  sequence  memory)によってランダムにアクセス可能である、対応する調査フリップフロップ(probe  flip-flop)を有している。
【０００９】
従来のシステムの方法は、ＤＵＶによって生成される種々の信号の値を捕獲するために用いられているが、メモリを含むＤＵＶの部分に対するデバッグ設備を提供する従来のシステムは存在しない。事実、この問題を考慮している従来のエミュレータは、このようなメモリを“ブラックボックス”として扱っている。このことは、従来のエミュレータは、ＤＵＶ内のメモリを単純に無視し、また、ブラックボックスの出力信号の捕獲を単に許容していることを意味している。例えば、Ｍａｒａｎｔｚらによる米国特許第６０６１５１１号（特に、６欄、２１−３０行）を参照。
【特許文献１】米国特許第５４２５０３６号
【特許文献２】米国特許第５７７７４８９号
【特許文献３】米国特許第５９４３４９０号
【特許文献４】米国特許第６４４６２４９号
【特許文献５】米国特許第６０６１５１１号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
メモリは、ＤＵＶの重要な部分であるため、エミュレータが、ＤＵＶ内の任意のメモリ位置に蓄積されているデータの全てを再蓄積することを可能とするデバッグ方法が必要である。
また、期間的なスナップショット(snapshot)を蓄積するために検証処理を中断させあるいはスローダウンさせる必要がないデバッグ環境が必要である。
本発明は、エミュレートされる回路設計内のメモリを再蓄積することによって、メモリに蓄積されているデータを視認可能とする、新規な方法を提供する。
【発明の要約】
【００１１】
本発明の種々の実施の形態は、エミュレートされる回路設計内のメモリを再蓄積し、それによって、メモリ内に蓄積されているデータを視認可能とする、新規な方法を提供する。
これらの実施の形態は、メモリが、予め設定されている時間間隔内の過去の任意のチェックポイント（すなわち、トリガが発生するポイント）に対して再蓄積されることを許容する。従来技術と異なり、各設計メモリに対する全ての書込動作が捕獲されるので、種々の実施の形態がこれを実行可能である。好ましい実施の形態では、書込動作は、循環バッファ(circular  buffer)内で捕獲される。設計内のチェックポイントが発生する時、メモリの再生は、捕獲された（すなわち、蓄積された）書込動作をＤＵＶに対して逆の順序で（必要であれば、クロックサイクル内で）適用することによって、実行される。全ての書込動作が再生された後、各設計メモリの内容は、書込動作を捕獲した循環バッファのボトム(bottom)（あるいは、第１エントリー）に対応する時点に蓄積していたものを保持するために再蓄積される。メモリを再蓄積するための時間間隔の長さは、前記循環バッファのデプス（深さ）(depth)によって決定される。
【００１２】
従来技術と比較すると、本発明の種々の実施の形態は、フリップフロップや結合信号等内の視認性を許容する。ＤＵＶの全てのメモリは、トレースウィンドウの全期間にわたって見ることができる。また、回路設計者が望むポイントにおいて再生を開始することもできる。
【００１３】
１つのアスペクトでは、回路設計が所望の機能を実行することを検証するための方法が開示されている。回路設計は、ランダムアクセスメモリ（ＲＡＭ）により構成されている。ＲＡＭは、少なくとも１つの書込ポートとデータを蓄積する複数のメモリ位置を有している。複数のメモリ位置のそれぞれは、アドレスを有している。
本方法は、ハードウェア論理エミュレーションシステム内の回路設計をエミュレーションする。本方法は、ＲＡＭ内の複数のメモリ位置の中の選択された１つにデータを書き込む直前に、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されているデータを読み出す。また、本方法は、ＲＡＭ内の複数のメモリ位置の中の選択された１つから読み出されたデータを、バッファ内の選択されたメモリ位置に蓄積する。本方法は、チェックポイントの後で、バッファ内の選択されたメモリ位置に蓄積されているデータを、ＲＡＭ内の複数のメモリ位置の中の選択された１つに移動させる。また、本方法は、移動ステップの後で、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されているデータを観察する。
【００１４】
他のアスペクトでは、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されているデータを読み出すステップで、ＲＡＭ内の少なくとも１つの書込ポートのそれぞれに対して、対応するシャドウ読出ポート(shadow  read  port)を回路設計に挿入し、また、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されているデータが、対応するシャドウ読出ポートによって読み出されるように、対応するシャドウ読出ポートによって読出動作を実行する。
【００１５】
他のアスペクトでは、蓄積ステップで、更に、バッファに蓄積されているデータがラストイン−ファーストアウト(last  in  first  out)方法で出力されるように、バッファ内の選択されたメモリ位置を配列する。
【００１６】
また、他のアスペクトでは、移動ステップで、更に、バッファ内の選択されたメモリ位置のそれぞれがラストイン−ファーストアウト方法で読み出されるように、バッファに対するアドレス入力をデクリメントする。また、本方法は、バッファ内の選択されたメモリ位置のそれぞれからのデータを、ＲＡＭの少なくとも１つの書込ポートの１つに配置する。また、本方法は、ＲＡＭの少なくとも１つの書込ポートの１つに配置されている、バッファ内の選択されたメモリ位置のそれぞれからのデータを、ＲＡＭ内の複数のメモリ位置の中の選択された１つに書き込む。
【００１７】
他のアスペクトでは、観察ステップで、書込ステップの後で、ＲＡＭ内のメモリ位置のそれぞれを観察する。
【００１８】
他のアスペクトでは、蓄積ステップで、バッファに蓄積されているデータがファーストイン−ファーストアウト方法で蓄積されるように、バッファ内の選択されたメモリ位置を配列する。
【００１９】
更に他のアスペクトでは、移動ステップで、更に、バッファ内の選択されたメモリ位置のそれぞれがファーストイン−ファーストアウト(first  in  first  out)方法で読み出されるように、バッファに対するアドレス入力をインクリメントする。また、本方法は、バッファ内の選択されたメモリ位置のそれぞれからのデータを、ＲＡＭの少なくとも１つの書込ポートの１つに配置する。また、本方法は、ＲＡＭの少なくとも１つの書込ポートの１つに配置されている、バッファ内の選択されたメモリ位置のそれぞれからのデータを、ＲＡＭ内の複数のメモリ位置の中の選択された１つに書き込むことによって、ＲＡＭ内の各メモリ位置を、予め定められている時間に各メモリ位置に蓄積されているステートに再蓄積する。
【００２０】
他のアスペクトでは、回路設計が所望の機能を実行することを検証するための装置が開示されている。回路設計は、ランダムアクセスメモリ（ＲＡＭ）により構成されている。ＲＡＭは、データ入力とアドレス入力を有する書込ポート、読出ポート及びデータを蓄積する複数のメモリ位置を有している。複数のメモリ位置のそれぞれは、アドレスを有している。書込ポートは、データ入力及びアドレス入力を有している。
本装置は、書込ポートに対応するシャドウ読出ポートを有している。シャドウ読出ポートは、書込ポートのアドレス入力からのアドレスを受信するアドレス入力と、データ出力を有している。また、本装置は、バッファを備えている。バッファは、ＲＡＭのアドレス入力に接続されている。また、バッファは、シャドウ読出ポートのデータ出力に接続されている。バッファは、アドレス出力とデータ出力を有している。また、本装置は、アドレス入力を書込ポートに送る第１マルチプレクサを備えている。第１マルチプレクサは、バッファのアドレス出力に接続されている第１入力を有している。第１マルチプレクサは、ＲＡＭのアドレス入力に接続されている第２入力を有している。本装置は、データ入力を書込ポートに送る第２マルチプレクサを備えている。第２マルチプレクサは、バッファのデータ出力に接続されている第１入力を有している。第２マルチプレクサは、ＲＡＭのデータ入力に接続されている第２入力を有している。第１マルチプレクサ及び第２マルチプレクサは、それぞれ、第１モードと第２モードの間を切り替える選択入力を有している。
【００２１】
他のアスペクトでは、バッファは、ステートマシン(state  machine)に接続されている。
【００２２】
他のアスペクトでは、第１モードは、第１マルチプレクサによって、ＲＡＭのアドレス入力からの信号を書込ポートのアドレス入力に送ることを可能とし、第２マルチプレクサによって、ＲＡＭのデータ入力からの信号を書込ポートのデータ入力に送ることを可能とする。
【００２３】
他のアスペクトでは、第２モードは、第１マルチプレクサによって、バッファのアドレス出力からの信号を書込ポートのアドレス入力に送ることを可能とし、第２マルチプレクサによって、バッファのデータ出力からの信号を書込ポートのデータ入力に送ることを可能とする。
【００２４】
他のアスペクトでは、装置は、バッファに接続されているステートマシンを備えている。
【００２５】
他のアスペクトでは、ステートマシンは、装置が第２モードにある時に、バッファに蓄積されているデータ及びアドレスの、バッファのアドレス出力及びデータ出力からの読み出しを制御する。
【００２６】
他のアスペクトでは、回路設計が所望の機能を実行することを検証する装置が開示されている。回路設計は、第１書込ポートと第２書込ポートを有するＲＡＭにより構成されている。第１書込ポートは、第１データ入力と第１アドレス入力を有している。第２書込ポートは、第２データ入力と第２アドレス入力を有している。また、ＲＡＭは、第１設計データ入力、第１設計アドレス入力、第２設計データ入力、第２設計アドレス入力、データを蓄積する複数のメモリ位置を有している。複数のメモリ位置のそれぞれは、アドレスを有している。
本装置は、第１書込ポートに対応する第１シャドウ読出ポートを有している。第１シャドウ読出ポートは、第１設計アドレス入力からのアドレスを受信するアドレス入力を有している。第１シャドウ読出ポートは、更に、データ出力を有している。また、本装置は、第２書込ポートに対応する第２シャドウ読出ポートを有している。第２シャドウ読出ポートは、第２設計アドレス入力からのアドレスを受信するアドレス入力を有している。第２シャドウ読出ポートは、更に、データ出力を有している。
また、第１設計アドレス入力と第１シャドウ読出ポートのデータ出力に接続されている第１バッファが設けられている。第１バッファは、アドレス出力とデータ出力を有している。本装置は、更に、第２バッファを備えている。第２バッファは、第２設計アドレス入力に接続されている。また、第２バッファは、第２シャドウ読出ポートのデータ出力に接続されている。第２バッファは、アドレス出力とデータ出力を有している。
第１マルチプレクサは、第１アドレス入力を第１書込ポートに送る。第１マルチプレクサは、第２バッファのアドレス出力に接続されている第１入力を有している。第１マルチプレクサは、第１設計アドレス入力に接続されている第２入力を有している。第２マルチプレクサは、第１データ入力を第１書込ポートに送る。第２マルチプレクサは、第２バッファのデータ出力に接続されている第１入力を有している。第２マルチプレクサは、第１設計データ入力に接続されている第２入力を有している。第３マルチプレクサは、第１アドレス入力を第２書込ポートに送る。第３マルチプレクサは、第１バッファのアドレス出力に接続されている第１入力を有している。第３マルチプレクサは、第２設計アドレス入力に接続されている第２入力を有している。第４マルチプレクサは、第１データ入力を第２書込ポートに送る。第４マルチプレクサは、第１バッファのデータ出力に接続されている第１入力を有している。第４マルチプレクサは、第２設計データ入力に接続されている第２入力を有している。第１マルチプレクサ、第２マルチプレクサ、第３マルチプレクサ及び第４マルチプレクサは、それぞれ、第１モードと第２モードの間を切り替える選択入力を有している。
【００２７】
他のアスペクトでは、回路設計がデバッグ可能となるように、ＲＡＭにより構成される回路設計を処理するための方法が開示されている。ＲＡＭは、１つの書込ポートとデータを蓄積する複数のメモリ位置を有している。複数のメモリ位置のそれぞれは、アドレスを有している。
本方法は、シャドウ読出ポートを、書込ポートに対応する回路設計に挿入する。シャドウ読出ポートは、集積回路設計からのアドレスを受信するアドレス入力を有している。シャドウ読出ポートは、更に、データ出力を有している。また、本方法は、データを、選択されたメモリアドレスに書込ポートによって書き込む前に、選択されたメモリアドレスに蓄積されているデータをシャドウ読出ポートが読み出すように計画する。また、本方法は、シャドウ読出ポートのデータ出力をバッファに相互接続する。バッファは、計画ステップで読み出されたデータを、選択されたメモリ位置に蓄積する。バッファは、データ出力とアドレス出力を有している。
また、本方法は、第１マルチプレクサがアドレス入力を書込ポートに送るように、第１マルチプレクサを回路設計に挿入する。第１マルチプレクサは、回路設計からのアドレス入力に接続されている第１入力を有している。また、本方法は、第２マルチプレクサがデータ入力を書込ポートに送るように、第２マルチプレクサを回路設計に挿入する。第２マルチプレクサは、回路設計からのデータ入力に接続されている第１入力を有している。また、本方法は、バッファのアドレス出力を第１マルチプレクサの第２入力に相互接続する。本方法は、チェックポイントの後で、バッファ内の選択されたメモリ位置に蓄積されているデータを、ＲＡＭ内の複数のメモリ位置の中の選択された１つに移動させる。そして、本発明は、移動ステップの後で、ＲＡＭ内の複数のメモリ位置の中の選択された１つに蓄積されているデータを観察する。
【００２８】
他のアスペクトでは、移動ステップで、更に、ＲＡＭ内の複数のメモリ位置の中の選択された１つのそれぞれが、チェックポイントの前に保持されているステートにリワインド(rewind)されるように、バッファ内の選択されたメモリ位置に蓄積されているデータをラストイン−ファーストアウトの順序で送る。
【００２９】
他のアスペクトでは、観察ステップで、更に、ＲＡＭ内の複数のメモリ位置の中の選択された１つのそれぞれが、チェックポイントの前に保持されているステートに再蓄積されるように、バッファ内の選択されたメモリ位置に蓄積されているデータをファーストイン−ラストアウト(first  in  last  out)の順序で送る。
【００３０】
更に他のアスペクトでは、ランダムアクセスメモリ（ＲＡＭ）により構成されている回路設計が所望の機能を実行することを、機能検証システムを用いることによって検証するための方法が開示されている。ＲＡＭは、少なくとも１つの書込ポートと複数のメモリ位置を有している。
本方法は、回路設計を機能検証システム内で実行させる。データをＲＡＭ内に書き込む前に、データを読み出す。また、本方法は、データをバッファに蓄積する。チェックポイントでは、バッファに蓄積されているデータは、データがバッファに書き込まれた順序と逆の順序で読み出される。データがバッファから読み出されると、データは、ＲＡＭに書き込まれる。
【００３１】
他のアスペクトでは、機能検証システムは、ハードウェア論理検証システムにより構成されている。
【００３２】
更に他のアスペクトでは、ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムにより構成されている。また、ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）により構成されている。
【００３３】
更に他のアスペクトでは、機能検証システムは、ソフトウェアエミュレータにより構成されている。
更に他のアスペクトでは、回路設計が所望の機能を実行することを検証するための方法が開示されている。回路設計は、ランダムアクセスメモリ（ＲＡＭ）により構成されている。ＲＡＭは、少なくとも１つの書込ポートと複数のメモリ位置を有している。
本方法は、回路設計を第１機能検証システム内で実行させる。データをＲＡＭ内に書き込む前に、このデータは読み出される。データは、第１機能検証システムから外部のシステムに送られる。チェックポイントでは、外部システム内のデータは、あらかじめ定められた時点におけるＲＡＭの複数のメモリ位置に対応する、再構築(reconstruct)されたメモリを生成するために再構築される。再構築ステップでは、以前に蓄積されたデータをラストイン−ファーストアウトの順序で読み出し、以前に蓄積されたデータを外部のシステム内のメモリに書き込むことによって、再構築されたメモリを生成する。
【００３４】
さらに他のアスペクトでは、データを再構築した後、再構築されたメモリは、第１機能検証システムに送られる。再構築されたメモリは、ＲＡＭに書き込まれる。
【００３５】
他のアスペクトでは、データを再構築した後、再構築されたメモリは、第２機能検証システムに送られる。第１機能検証システムは、ハードウェア論理検証システムにより構成可能であり、第２機能検証システムは、ソフトウェアシミュレータにより構成可能である。
【００３６】
他のアスペクトでは、回路設計が所望の機能を実行することを、機能検証システムを用いることによって検証するための方法が開示されている。回路設計は、少なくとも１つの書込ポートと複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）により構成されている。
本方法は、回路設計を機能検証システム内で実行させ、全ての書込動作をバッファ内に蓄える。書込動作のそれぞれは、アドレスと当該アドレスに蓄積されるデータを有している。アドレスと当該アドレスに蓄積されるデータは、書込動作が実行された順序に対応する時間的な順序で蓄積される。書込動作中にデータが変化したアドレスを少なくとも有する、ＲＡＭのイメージ(image)が、バッファに蓄積される書込動作のそれぞれを再生することによって再構築される。
【００３７】
他のアスペクトでは、機能検証システムは、ハードウェア論理検証システムにより構成可能である。ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムであってもよい。また、ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムであってもよい。また、機能検証システムは、ソフトウェアシミュレータにより構成可能である。
【００３８】
他のアスペクトでは、回路設計が所望の機能を実行することを、第１機能検証システムを用いることによって検証するための方法が開示されている。回路設計は、少なくとも１つの書込ポートと複数のメモリ位置を有するランダムアクセスメモリ（ＲＡＭ）によって構成されている。
本方法は、回路設計を第１機能検証システム内で実行させ、全ての書込動作をバッファに蓄える。書込動作のそれぞれは、アドレスと当該アドレスに蓄積されるデータを有している。アドレスと当該アドレスに蓄積されるデータは、前記書込動作が実行された順序に対応する時間的な順序で蓄積される。書込動作中にデータが変化したアドレスを少なくとも有する、ＲＡＭのイメージが、バッファ内に蓄積される書込動作のそれぞれを再生することによって再構築される。イメージは、第２機能検証システムに書き込まれる。
【００３９】
さらに他のアスペクトでは、第１機能検証システムは、ハードウェア論理検証システムにより構成可能である。ハードウェア論理検証システムは、プロセッサベースのエミュレーションシステムであってもよい。ハードウェア論理検証システムは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ベースのエミュレーションシステムであってもよい。また、第１機能検証システムは、ソフトウェアシミュレータにより構成可能である。
【００４０】
他のアスペクトでは、第２機能検証システムは、ソフトウェアシミュレータにより構成可能である。また、第２機能検証システムは、ハードウェア論理検証システムにより構成可能である。
【００４１】
要素の配設及び結合の種々の新規な詳細を含む、本発明の前記の特徴及び他の好ましい特徴は、添付の図面を参照してより詳しく説明され、また、請求項に記載されている。本発明を実施する特別の方法及び回路は、本発明を説明するためにのみ示されており、本発明を限定するために示されているものでないことが理解できる。当業者であれば、本発明の原理及び特徴が、本発明の範囲から離脱することなく、種々の及び多くの実施の形態で実現可能であることを理解することができる。
【発明を実施するための最良の形態】
【００４２】
本発明の、現時点で好ましい装置及び方法を、以下に説明する。
【００４３】
１つの実施の形態は、３つの主要な構成要素を有している。これらの構成要素は、“捕獲(capture)”、“リワインド(rewind)”または“再構築(reconstruction)”、“再生(replay)”である。
捕獲は、ＤＵＶがエミュレータ内で実行されている間に実行され、本発明の種々の実施の形態では、メモリ書込動作の捕獲として参照されている。以下に示されているように、メモリ書込動作データは、循環バッファ内に捕獲される。この循環バッファのデプスは、リワインドあるいは再構築の時間間隔の長さ、すなわち、トレースウィンドウを決定する。
【００４４】
先ず、種々の実施の形態に関する以下の説明の大部分は、論理ゲートと関連付けてなされていることに注意する。
プロセッサベースのエミュレーションシステムでは、本方法は、プロセッサによって実行される、論理のブーラン表現へのコンパイルによって、実施される。エミュレーションシステムのユーザにとって、プロセッサベースのエミュレータの出力は、ＦＰＧＡベースのエミュレータの出力と同じである。しかしながら、エミュレータの出力が生成される方法は、異なっている。ＦＰＧＡベースのエミュレーションシステムでは、以下で言及する論理は、論理要素（構成可能な論理ブロック(configurable  logic  block)、すなわちＣＬＢと呼ばれることもある）によって実行される。以下に開示されている種々の実施の形態は、両タイプのエミュレータに適用可能である。
【００４５】
メモリ書込動作が捕獲される方法を、図１を参照して説明する。
前述したように、今日では、ほとんど全てのＤＵＶは、メモリ回路２０を含んでいる。典型的なメモリ回路２０は、複数のメモリ位置（図示していない）を有するように配列される。各メモリ位置は、所定数のビットを蓄積可能なアドレスを有している。
メモリ回路は、典型的には、メモリ回路が有しているメモリ位置の数（メモリ回路の“デプス”と呼ばれる）と、各位置に蓄積可能なビットの数（メモリ回路の“幅(width)”と呼ばれる）によって区分けされる。したがって、各位置が８ビットである３２０００位置を有するメモリ回路は、“３２０００×８”（すなわち、３２Ｋ×８）メモリ回路と呼ばれる。メモリ回路が複数のポートを有している場合には、メモリ回路は、更に、書込ポートの数と読出ポートの数によって定義される。ＤＵＶ内に設けられる典型的なマルチポートメモリでは、データは、複数の書込ポートを介してメモリ位置に書き込まれ、また、複数の読出ポートを介してメモリ位置から読み出される。
【００４６】
メモリ書込動作を捕獲するために、ＤＵＶのネットリストが修正される。ＤＵＶ内の各メモリ内の全ての書込ポート２０に対して、シャドウ読出ポート３０が生成され、ＤＵＶ内に挿入される。シャドウ読出ポート３０の生成及びＤＵＶ内への挿入は、他の時間に実行可能であるが、コンパイル中に実行するのが好ましい。シャドウ読出ポート３０は、アドレス入力３２とデータ出力３８を有している。
書込ポート２０は、ＤＵＶのメモリに書き込まれるデータを受信するデータ入力２４と、データが書き込まれる特別のメモリ位置を指示するアドレス入力２２を備えている。アドレスデータは、アドレスネット３４によってアドレスポート２２に供給される。書込データは、ネット３６によってデータ入力２４に供給される。
【００４７】
さらに、循環バッファ４０が用いられる。オンチップメモリ(on-chip  memory)を有するプロセッサモジュールあるいはＦＰＧＡは、その上に循環バッファを含むように設計可能であるが、循環バッファ４０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のような、別々のメモリチップであるのが好ましい。
プロセッサベースのエミュレータでは、ＤＵＶ内の各メモリ書込動作は、シャドウ読出ポート３０を介する実行サイクル内の全てのステップにおいて捕獲される。実行サイクルは、現時点で好ましいプロセッサベースのエミュレータ内では、以下のように発生する。
エミュレーション中、プロセッサを含む各モジュール（例えば、集積回路）上のシーケンサは、エミュレーショサポート設備によって停止されるまで、プログラムされたステップ数だけインクリメントし、そして繰り返す。シーケンサの１回転は、エミュレートされる設計の１クロックサイクルに対応する。シーケンサは、エミュレートされるパスクロックサイクル(path  clock  cycle）を、各ステップが、エミュレートされる設計の１つの論理ゲートの評価に対応する複数（例えば、２５６）のステップに効果的に分割する。
ＦＰＧＡベースのエミュレータ内では、何も実行されない。
【００４８】
プロセッサベースのシステムと比べると、ＦＰＧＡベースのシステムは、実行サイクルを定めるために用いられる１つの中心クロックを用いていない。ＦＰＧＡシステムは、通常、非同期であるクロックのセットを受け取る。このことは、各クロックは、通常、他のクロックから生成されないことを意味する。いくつかのＦＰＧＡシステムでは、どの信号がクロック信号であるかを知ることさえ困難である。いずれかの入力信号が、クロックとして動作する。
【００４９】
また、図１に示すように、ＤＵＶは、ＤＵＶ内のメモリのアドレスポート２２に通常接続されるＤＵＶ内のアドレスネット３４が、シャドウ読出ポート３０のアドレスポート３２と循環バッファ４０のデータ入力４２に接続されるように修正される。同様に、シャドウ読出ポート３０のデータピン３８は、メモリから読み出されたデータを、データネット３５に出力する。このデータは、循環バッファ４０に入力される。後述するように、循環バッファ４０は、メモリリワインドのために用いられる。
これらの修正は、アドレスネット３４及びデータネット３５が、ブロートオフチップ(brought  off  chip)であり、別々のメモリチップであることが好ましい循環バッファ４０に接続されるようなものである。
【００５０】
ＤＵＶ内のメモリアクセスは決定論的であることが好ましいことに注意する。これにより、エミュレータがＤＵＶを実行させている間、各シャドウ読出ポート３０の読出動作は、対応する書込ポート２４を介するメモリの書込動作より前に実行されるように計画される。この理由は、ＤＵＶがデータをメモリ２０内のアドレスに書き込んでいる時、メモリ２０の読出ポートは、書き込みが発生する前に、そのアドレスを“読み出す”ためにセットされるからである。
このシャドウ読出動作の結果は、循環バッファ４０に蓄積される（そのアドレスに蓄積されているデータとアドレス自身の両方が蓄積される）。読出動作の結果は、循環バッファ４０に蓄積される。
これにより、循環バッファ４０は、ユーザ設計内のメモリの内容（各メモリ位置に対して、アドレスと一緒に蓄積されるデータ）を保持する。書込アドレスネット３４とシャドウ読出ポート３０の出力ピン３８が、同期してこの情報を循環バッファ４０に書き込むため、これが適切に機能していることに注意する。
【００５１】
図１に示されているように、循環バッファ４０は、アドレスピンを有している。以下に説明する概念がプロセッサベースのエミュレーションシステムに設けられる時、循環バッファ４０のアドレスピンは、蓄積されるデータのアドレスを制御するステートマシン４５に接続される。
このステートマシンは、各実行サイクル毎にアドレス（すなわち、各メモリ位置に対して、ＤＵＶ内のメモリ２０からのアドレスと一緒にデータが蓄積される位置）をインクリメントする。図1〜３を参照して以下に説明されているリワインドモードでは、ステートマシンは、各実行サイクル毎にアドレスをデクリメントする。
【００５２】
リワインドモードを、図２を参照して説明する。
リワインドは、最初の設計実行が、ユーザが定めたチェックポイントに到達した後に、実行される。リワインドは、トレースウィンドウ中に捕獲された全てのメモリ書込動作を再生する。勿論、いくつかの実施の形態では、書込動作の選択された数のみが再生される必要がある。リワインドを作動させるために、現時点で好ましい実施の形態では、付加的なリワインド論理がＤＵＶ内に存在する必要がある。シャドウ読出ポート３０と同様に、現時点で好ましい実施の形態は、好ましくはコンパイル中に、このリワインド論理をＤＵＶ内に挿入する。
【００５３】
シャドウ読出ポート３０をＤＵＶ内に挿入することに加えて、リワインド論理が、好ましくはコンパイル時に、ＤＵＶ内に挿入される。
リワインド論理は、好ましくは、第１マルチプレクサ５０と第２マルチプレクサ５２により構成される。第1マルチプレクサ５０は、循環バッファ４０からのデータ出力である第1入力と、ＤＵＶからのアドレス信号である第２入力を有する２入力マルチプレクサであることが好ましい。第１マルチプレクサ５０に対する選択入力５４は、ノーマルエミュレーションモードあるいはリワインドモードのいずれかに対してセットされる信号である。また、第２マルチプレクサ５２は、循環バッファからのデータ出力である第1入力と、ＤＵＶからのデータ信号である第２入力を有する２入力マルチプレクサであることが好ましい。選択入力５４は、第１マルチプレクサ５０と同じ、すなわち、ノーマルエミュレーションモードとリワインドモードの間を選択する信号である。
エミュレータがエミュレーションモードにある時には、第１マルチプレクサ５０と第２マルチプレクサ５２は、ＤＵＶからのアドレス信号と設計信号を選択する、選択入力上の信号を受信する。このことは、メモリ２０が、図1に示されているように動作することを意味している。
一方、エミュレータがリワインドモードにある時には、第１マルチプレクサ５０と第２マルチプレクサ５２は、循環バッファ４０からのアドレス信号と設計信号を選択する、選択入力上の信号を受信する。ほぼ同時に、このリワインド信号は、第１マルチプレクサ５０と第２マルチプレクサ５２の選択入力上に現われ、循環バッファ４０を駆動するクロックは、循環バッファ４０に蓄積されているデータ情報とアドレス情報が、それぞれ第１マルチプレクサ５０の対応するデータ入力と第２マルチプレクサ５２の対応するアドレス入力に出力されるように、デクリメントを開始する。
【００５４】
ＤＵＶ内のメモリの動作を、図１及び図２を参照して説明する。
トレースウィンドウの間、ＤＵＶは、１あるいは複数のクロック信号の他、ターゲットシステム(target  system)、テストベクタ(test  vector)、シミュレーションスティムラス(simulation  stimulus)からの信号等の外部信号によって作動する。エミュレートされる設計が、第１書込ポート２０を介してメモリにデータを書き込む時には、データ（例えば、蓄積されるワード）は、データネット３６のメモリに入力され、一方、当該ワードに対するアドレスは、アドレスネット３４のメモリに入力される。データ信号は、データネット３６を介してマルチプレクサ５２の第２入力に入力され、アドレスは、アドレスネット３４を介してマルチプレクサ５０の第２入力に入力される。
トレースウィンドウの間、第１マルチプレクサ５０及び第２マルチプレクサ５２に対する選択入力５４は、第１マルチプレクサ５０及び第２マルチプレクサ５２がユーザ設計からの入力を選択するようにセットされることに注意する。
【００５５】
メモリリワインドを可能とするために、シャドウ読出動作が各書込動作の前に計画される。シャドウ読出動作は、シャドウ読出ポート３０を用い、書込ポート２０を用いて書き込まれるアドレスと同じアドレスを含む。これにより、書込ポート２０に送られるアドレスは、シャドウ読出ポート３０にも入力される。このアドレスをシャドウ読出ポート３０に送信することによって、当該アドレスに蓄積されるデータは、シャドウ読出ポートのデータ出力３８を介して循環バッファ４０に出力される。
メモリリワインドの実施の形態では、アドレス及びデータは、ラストイン−ファーストアウト（“ＬＩＦＯ”）配列で循環バッファ４０に蓄積される。これにより、ユーザは、トレースウィンドウの開始位置に到達するまで、ＤＵＶ内のメモリのステートをステップ順ベース(step  by  step  basis)（１ステップは、実行サイクルの一部である）でデクリメントすることができる。前述したように、循環バッファ４０のアドレスピンに接続されているステートマシン４５がこれを制御する。
【００５６】
シャドウ読出動作が特別のメモリアドレスに対して実行された直後に、同じメモリアドレスに対する書込動作が実行される（書込動作の直前にシャドウ読出動作が実行される）。しかしながら、そのメモリアドレスに蓄積されていた以前の値は、循環バッファ４０に蓄積されるため、後で再蓄積が可能である。
書込動作の間、アドレスネット３４からのメモリアドレスは、マルチプレクサ５０を介して、書込ポート２０のアドレス入力に入力される。同様に、そのアドレスに書き込まれるデータは、ネット３６を通り、マルチプレクサ５２を介して、そのデータをメモリの選択されたアドレスに書き込む書込ポート２０に入力される。
【００５７】
エミュレータは、通常、チェックポイントに達すると、リワインドモードに移行する。このようなチェックポイントは、トリガ、イベントの収集、ユーザが選択する特別の時間ポイントあるいは他の状態である。
リワインドモードに移行するために、第１マルチプレクサ５０及び第２マルチプレクサ５２の選択入力５４が、メモリアドレスとそのアドレスに蓄積されるデータが、それぞれマルチプレクサ５０及び５２を介して書込ポート２０に入力されるように、セットされる。選択信号が、リワインドに切り替えられると、エミュレータは、リワインドモードで動作する。
リワインドモードでは、循環バッファ４０のアドレスピンに接続されているステートマシン４５がデクリメントを開始する。これにより、蓄積されるＤＵＶ内のメモリの内容は、所望のポイントに到達するまで順次デクリメントされる。メモリの内容は、トレースウィンドウの開始時におけるステートまでしかリワインドできないことに注意する。これは、循環バッファが、トレースウィンドウの外部に蓄積されていたメモリ内容を蓄積しないからである。
選択入力５４の値は、再生モード時に、循環バッファ４０内のメモリアドレスとそのアドレスに蓄積されているデータが第１及び第２マルチプレクサ５０及び５２を通過するように、第１及び第２マルチプレクサ５０及び５２の選択入力５４が設定される値であるため、書込ポート２０は、循環バッファ４０に蓄積されているデータを適切なアドレスに書き込む。循環バッファ４０がＬＩＦＯ配列を有しているため、ユーザは、実行サイクル内でステップ順に、メモリのステートをリワインド可能である。これにより、設計がトレースウィンドウを介して実行された順序と逆の順序で、設計のステートをデクリメントすることができる。
【００５８】
全ての設計内容（すなわち、メモリに蓄積されているデータ、ステート装置に蓄積されているデータ、ＤＵＶの主入力の値）が、ターゲット実行サイクルにおいて有していた値に再蓄積された後、エミュレータは再生モードに移行する。
ターゲット実行サイクルは、設計をデバッグするためにユーザがメモリステートの可視性を必要としている設計のエミュレーション内の時間ポイントである。例えば、特別の時間ポイントあるいはメモリの特別のステート等が可能である。
ステート装置の内容及び主入力の値を蓄積する方法は、本発明の範囲外である。
【００５９】
本明細書に開示されている概念を用いてマルチポートメモリを配列する方法を、図３を参照して説明する。
前述したように、本明細書に開示されている種々の実施の形態は、各書込ポートに対して、シャドウ読出ポートをＤＵＶ内に挿入することによってＤＵＶを修正する。１以上の書込ポートを有するマルチポートメモリでは、１以上のシャドウ読出ポートが挿入される。言い換えれば、好ましい実施の形態では、ユーザ設計のメモリ内の各書込ポートに対して１つのシャドウ読出ポートが存在する。また、前述したように、種々の実施の形態は、リワインド論理を、アドレスとデータ入力を書込ポートに送るマルチプレクサにより構成されるのが好ましいＤＵＶ内に挿入する。
【００６０】
図３の論理図は、２つの書込ポートを有するＤＵＶからのメモリ１００の実施の形態を示す。図３の例は、単なる１例であり、本発明の種々の実施の形態は２つの書込ポートのみを有するメモリに限定されるものではない。
第１書込ポート１２０ａは、アドレス入力とデータ入力を有している。第１書込ポート１２０ａのアドレス入力は、マルチプレクサ１５０ａの出力である。第１書込ポート１２０ａのデータ入力は、マルチプレクサ１５２ａの出力である。前述した実施の形態のように、マルチプレクサ１５０ａは、第１入力がＤＵＶ内のメモリ内の第１書込ポートに対して書込アドレスを運ぶネットである、２つの入力を有するのが好ましい。マルチプレクサ１５０ａへの第２入力は、第２循環バッファ１４０ｂに蓄積されるアドレスである。第２循環バッファ１４０ｂからのアドレス出力をマルチプレクサ１５２ａの入力に配置する理由は、以下に説明する。
マルチプレクサ１５２ａは、２つの入力を有するのが好ましい。マルチプレクサ１５２ａへの第１入力は、ＤＵＶのメモリ内に蓄積されるデータを運ぶネットである。マルチプレクサ１５２ａへの第２入力は、第２循環バッファ１４０ｂに蓄積されているデータである。第２循環バッファ１４０ｂからの出力であるデータをマルチプレクサ１５２ａの入力に配置する理由は、以下に説明する。
マルチプレクサ１５０ａ及び１５２ａは、ノーマルモードとリワインドモードの間を選択する“スイッチ(switch)”を選択入力として有している。マルチプレクサ１５０ａ及び１５２ａは、コンパイル時に挿入されるのが好ましい。
同様に、第１シャドウ読出ポート１３０ａは、コンパイル時にＤＵＶ内に挿入されるのが好ましい。第１シャドウ読出ポート１３０ａへの入力は、ＤＵＶのメモリ内の第１書込ポート１２０ａに対する書込アドレスを運ぶネット１３４ｂである。第１シャドウ読出ポート１３０ａの出力は、第１循環バッファ１４０ａのデータ入力に入力される。
第１循環バッファ１４０ａは、第１ステートマシン１４５ａからの出力を受信する入力を有している。前述したように、第１ステートマシン１４５ａは、リワインド中、第１循環バッファ１４０ａ内のメモリ位置をアドレスする。前述したように、第１シャドウ読出ポート１３０ａの出力は、メモリアドレスにメモリアドレスと共に蓄積されているデータである。
【００６１】
第２書込ポート１２０ｂのアドレス入力は、マルチプレクサ１５０ｂの出力である。第２書込ポート１２０ｂのデータ入力は、マルチプレクサ１５２ｂの出力である。前述した実施の形態におけるように、マルチプレクサ１５０ｂは、第１入力がＤＵＶ内のメモリ内の第２書込ポートに対する書込アドレスを運ぶネットである、２つの入力を有している。マルチプレクサ１５０ｂへの第２入力は、第１循環バッファ１４０ａに蓄積されているアドレスである。第１循環バッファ１４０ａからのアドレス出力をマルチプレクサ１５２ｂの入力に配置する理由は、以下に説明する。
マルチプレクサ１５２ｂも、２つの入力を有している。マルチプレクサ１５２ｂへの第１入力は、ＤＵＶのメモリ内に蓄積されるデータを運ぶネットである。マルチプレクサ１５２ｂへの第２入力は、第１循環バッファ１４０ａに蓄積されているデータである。第１循環バッファ１４０ａからの出力であるデータをマルチプレクサ１５２ｂの入力に配置する理由は、以下に説明する。
マルチプレクサ１５０ｂ及び１５２ｂはノーマルモードとリワインドモードの間を選択する“スイッチ(switch)”を選択入力として有している。マルチプレクサ１５０ｂ及び１５２ｂは、コンパイル時に挿入されるのが好ましい。
同様に、第２シャドウ読出ポート１３０ｂは、コンパイル時にＤＵＶ内に挿入されるのが好ましい。第２シャドウ読出ポート１３０ｂへの入力は、ＤＵＶのメモリ内の第１書込ポートに対する書込アドレスを運ぶネットである。第２シャドウ読出ポート１３０ｂの出力は、メモリアドレスにメモリアドレスと共に蓄積されているデータである。
【００６２】
図３に例示するような、複数の書込ポートを有するメモリに対しては、各書込ポート（例えば、書込ポート１２０ａ及び１２０ｂ）は、ミラー書込ポート(mirror  write  port)と呼ばれる他の書込ポートに対応するシャドウ読出ポートからのデータが送られる。
図３に示す例では、第１循環バッファ１４０ａは、ＤＵＶ内のメモリの第１書込ポートに対してＤＵＶに挿入される第１シャドウ読出ポート１３０ａからのデータを捕獲する。同様に、第２循環バッファ１４０ｂは、ＤＵＶ内のメモリの第２書込ポートに対してＤＵＶに挿入される第２シャドウ読出ポート１３０ｂからのデータを捕獲する。
第２循環バッファ１４０ｂは、第２ステートマシン１４５ｂからの出力を受信する入力を有している。前述したように、第２ステートマシン１４５ｂは、リワインド中、第２循環バッファ１４０ｂ内のメモリ位置をアドレスする。
メモリリワインド中、第１循環バッファ１４０ａは、第２書込ポート１２０ｂを介して同じメモリインスタンス(memory  instance)（例えば、メモリアドレスに蓄積されているデータと一緒にそのメモリアドレス）を送る。
これにより、本実施の形態では、リワインド中、第２書込ポート１２０ｂは、第１書込ポート１２０ａに対するミラー書込ポートとして機能する。同様に、第１書込ポート１２０ａは、第２書込ポート１２０ｂに対するミラー書込ポートとして機能する。
【００６３】
ミラー化された書込ポートを用いる理由を、以下に説明する。
トレースウィンドウの間、ＤＵＶは、ターゲットシステム、テストベクタ、シミュレーションスティムラスからの信号等の外部信号によって作動する。
エミュレートされる設計が、第１書込ポート１２０ａを介してデータをメモリに書き込む時には、データ（例えば、蓄積されるワード）はデータネット１３６ａのメモリに入力され、アドレスはアドレスネット１３４ａのメモリに入力される。
トレースウィンドウの間、アドレスとそのアドレスに対するデータが、マルチプレクサ１５０ａ及び１５２ａを介して第１書込ポート１２０ａに入力されるように、マルチプレクサ１５０ａ及び１５２ａの選択入力１５４が設定される。
メモリリワインドを可能とするために、シャドウ読出動作が全ての書込動作の前に計画される。シャドウ読出動作は、第１シャドウ読出ポート１３０ａを用い、第１書込ポート１２０ａを用いて書き込まれるアドレスと同じアドレスを含んでいる。
これにより、第１書込ポート１２０ａに送られるアドレスも、第１シャドウ読出ポート１３０ａに入力される。このアドレスを第１シャドウ読出ポート１３０ａに送ることにより、ＤＵＶ内のそのアドレスに蓄積されるデータは、第１シャドウ読出ポート１３０ａのデータ出力１３８を介する第１循環バッファ１４０ａへの出力である。
【００６４】
特別のメモリアドレスに対するシャドウ読出動作の実行直後に、同じメモリアドレスに対する書込動作が実行される。しかしながら、そのメモリアドレスに蓄積されていた以前の値は、第１循環バッファ１４０ａ内に蓄積されるため、後で再蓄積可能である。
書込動作の間、アドレスネット１３４ａからのメモリアドレスは、マルチプレクサ１５０ａを介して、第１書込ポート１２０ａに対するアドレス入力に入力される。同様に、そのアドレスに書き込まれるデータは、ネット１３６ａを通り、マルチプレクサ１５２ａを介して、そのデータをメモリの選択されたアドレスに書き込む第１書込ポート１２０ａに入力される。
【００６５】
前述したように、エミュレータがリワインドモードに移行する時、第１循環バッファ１４０ａに蓄積されているメモリアドレスとそのアドレスに蓄積されているデータが、それぞれ、第１及び第２マルチプレクサ１５０ｂ及び１５２ｂを介して第２書込ポート１２０ｂに入力されるように、第１マルチプレクサ１５０ａ及び第２マルチプレクサ１５２ａの選択入力１５４が設定される。そして、第２書込ポート１２０ｂは、このデータを適切なアドレスに書き込む。言い換えれば、リワインド時には、第２書込ポート１２０ｂは、第１書込ポート１２０ａに対するミラー書込ポートとして機能する。
ミラー書込ポートを用いる理由は、以下の通りである。エミュレータがトレースウィンドウを介して実行するとき、データはメモリ内の位置に書き込まれる。各書込動作中、これらの位置に蓄積されるデータは、シャドウ読出ポートによってＤＵＶ内のメモリから読み出され、循環バッファ１４０ａ、１４０ｂ内に、アドレスと同様に蓄積される。メモリがリワインドされる時、実行サイクルは後方に実行される。このことは、特別のアドレスに蓄積されるデータは、ミラー書込ポートを介して書き込まれることを意味している。
【００６６】
ミラー書込ポートが用いられない場合には、プロセッサベースのエミュレーションシステム内でのメモリ書込は、決定論的には正しくない。
例えば、２つの書込ポートメモリの双方が同じアドレスＡに書き込む数サイクルを仮定する。更に、ポート１が、ポート２による書込データＤ２が続くデータＤ１を書き込む場合を想定する。また、これらの書込動作の前におけるアドレスＡのデータがＤであった場合を想定する。
シャドウ読出ポート１は、アドレスＡに対するデータＤを蓄積し、そして、シャドウ読出ポート２は、同じアドレスＡに対するデータＤ１を蓄積する。リワインドの間、書込ポートがミラー化されていない場合には、ポート１は、ポート２による書込データＤ１が続くデータＤを書き込む。これらの２つの書込動作の後、アドレスＡは、正しい初期値Ｄの代わりに、正しくない値Ｄ１を蓄積する。一方、ポートがミラー化されている場合には、リワインドの間、ポート１は、シャドウ読出ポート２を介して捕獲され、シャドウ読出ポート１を介して捕獲された書込データ、すなわちデータＤがポート２によって後続する、データＤ１を書き込む。この場合、両書き込みの後のアドレスＡには、正しい初期値Ｄが蓄積される。
【００６７】
書込ポートのミラー化は、１実行サイクル内のスケジューリングに対応する設計コンパイルの間設定されることに注意する。実行サイクルの開始から前方にカウントして、Ｎ番目のステップで書き込みを行うように計画されている書込ポートに対しては、実行サイクルの終わりから後方にカウントして、Ｎ番目のステップで書き込みを行うように計画されているポートがそのミラー書込ポートである。
【００６８】
図３に示されているマルチポートメモリは単なる例示であることに注意する。奇数のポートを含む多くのポートを用いることができる。例えば、ポート１、ポート２、ポート３、ポート４及びポート５の５つのポートを有するマルチポートメモリでは、ポート５がポート１に対するミラー書込ポートとして機能し（逆も可）、ポート４がポート２に対するミラー書込ポートとして機能し（逆も可）、ポート３がそれ自身に対するミラー書込ポートとして機能する。
【００６９】
ＤＵＶ内のメモリの内容を再蓄積する方法を、図４を参照して説明する。
この実施の形態では、各書込ポートに対するデータ及びアドレス値は、捕獲ステージ中に、エミュレーション時間あるいはシミュレーション時間の開始（時間「０」）から直接に記録される。データは、記録されるデータの量を減少させるために、各主クロックサイクルあるいはメモリへの書込要求があった時にのみ捕獲してもよい。書込要求があった時にのみデータを捕獲する場合には、各ブロックの開始時間のみを再蓄積ステージで知る必要があるように、データをブロック内で編成可能である。
【００７０】
この特別の実施の形態では、シャドウ読出ポートは用いられない。しかしながら、ＤＵＶは、追加の論理の挿入によって修正される。この実施の形態では、ＤＵＶは、第１マルチプレクサ６２及び第２マルチプレクサ６４の挿入によって修正される。
第１マルチプレクサ６２は、その出力がアドレス入力を書込ポート２０に送る、２入力マルチプレクサであることが好ましい。第２マルチプレクサ６４は、その出力がデータ入力を書込ポート２０に送る、２入力マルチプレクサであることが好ましい。第１マルチプレクサ６２への第１入力は、ＤＵＶ（すなわち、ユーザ設計）からのアドレスネット３４である。第２マルチプレクサ６４への第１入力は、ＤＵＶからのデータネット３６である。
この実施の形態では、エミュレータは、線形バッファ(linear  buffer)６０として機能するメモリ回路（例えば、メモリチップ）を設ける。線形バッファ６０は、アドレスネット３４からのアドレスデータと、データネット３６からの、そのアドレスに蓄積されるデータを受信する。線形バッファ６０は、メモリアドレスを第１マルチプレクサ６２の第２入力に送る第１出力を有している。また、線形バッファは、特別なメモリアドレスに対するデータを第２マルチプレクサ６４の第２入力に出力する第２出力を有している。第１マルチプレクサ６２及び第２マルチプレクサ６４は、共に、ノーマルモードと再構築モードの間を切り替える選択入力を有している。
【００７１】
再蓄積ステージに移行するために、第１マルチプレクサ６２及び第２マルチプレクサ６４への選択入力５４が再構築モードに切り替えられる。これにより、第１マルチプレクサ６２及び第２マルチプレクサ６４は、線形バッファ６０から入力されたデータを出力する。
線形バッファ６０は、ＦＩＦＯ配列で配列されるのが好ましい。このことは、書込動作が、トレースウィンドウの時間「０」から、ユーザが再蓄積を望む時間ポイントまで実行されることを意味する。これにより、前述した循環バッファ４０と異なり、線形バッファ６０を駆動するステートマシン６５はデクリメントする必要がない。ステートマシン６５は、線形バッファ６０がＤＵＶ内のメモリ２０内の書込動作に同期して自身のメモリ位置をインクリメントするように、ＤＵＶを駆動するクロックと同期化されるのが好ましい。
メモリチップ（あるいは、この配列が用いられる場合にはオンチップメモリ）は、トレースウィンドウの時間「０」からメモリによって発生される全てのデータを捕獲するのに十分な大きさを有している必要があることに注意する。
この方法は大量のメモリを必要とするため、線形バッファ６０の部分は、エミュレータ内に配設され、線形バッファ６０の他の部分は、エミュレータを制御するワークステーション内に配設可能である。
【００７２】
図４を参照して説明した実施の形態の変更例は、ＤＵＶ内の全てのメモリの内容を期間的に蓄積する（メモリの全ての内容の“スナップショット”をとることと類似である）。このスナップショットをとるための期間は、非常に長い期間（例えば、数１０万サイクルあるいは数百万サイクル）であるのが好ましい。
この実施の形態では、再蓄積プロセスは、まず、最も遅く蓄えられたスナップショットからのメモリ内容をＤＵＶのメモリに再蓄積する。再蓄積されるスナップショットは、ユーザが再蓄積を望む時間ポイントの直前にとられたスナップショットであるのが好ましい。スナップショットを有するメモリ内容を再蓄積した後に、ＤＵＶは、前述した方法を用いて、スナップショット時間から書き込み動作を再生する。
この実施の形態の利点は、トレースウィンドウの時間「０」からの書込動作の全ての履歴を蓄積するための線形バッファ６０を必要としないことである。これにより、より小さい線形バッファ６０を使用することができる。
【００７３】
前述した概念は、ＦＰＧＡベースのエミュレーションシステムに対して本明細書に開示されている方法を実行するために適用可能である。
実行に際して、以下に説明するいくつかの相違点がある。実行の際における大部分の相違点は、ＦＰＧＡベースのシステム内では、プロセッサベースのシステム内に存在するような基本サイクルを決定するために用いられる１つの中心クロックが存在しないことに起因する。ＦＰＧＡシステムは、通常、非同期であるクロック（すなわち、他のクロックから生成されないクロック）のセットを受け入れる。一方、プロセッサベースのエミュレータは、非同期クロックを用いて設計をエミュレート可能であるが、内部では同期して動作する。実際に、いくつかのＦＰＧＡシステムでは、システムは、エミュレータに入力されるどの信号がクロック信号であるかを知ることさえできない。任意の入力信号がクロックとして作用する。
【００７４】
また、同時に発生する２つの書込ポート間の書込順序は２つの書込要求間の極小の時間差によって決定されるため、マルチポートメモリ内の書込動作がＦＰＧＡベースのシステム内で実行される順序が問題となる。書込要求が中心クロックによって時間制御されていないため、異なる書込ポート間の書込順序を扱うためには、より精巧なメカニズムを構築する必要がある。
【００７５】
本明細書で開示されている概念をＦＰＧＡベースのシステムに用いる方法としては、少なくとも２つの方法がある。
第１の方法は、図５〜７を参照して説明されており、“イベント駆動(event  driven)”方法論に依存している。図５は、２つの書込ポートを有するマルチポートメモリを示している。書込ポート１は、アドレス入力Ａ１とデータ入力Ｄ１を有している。書込ポート２は、アドレス入力Ａ２とデータ入力Ｄ２を有している。ＦＰＧＡベースのシステムでは、サイクルを決定する基準クロックが存在しない（すなわち、前述したように、実行サイクルが存在しない）。代わりに、ＤＵＶ内のＲＡＭに蓄積されているデータを除く、ＤＵＶの全てのステートの内容のスナップショットが、エミュレーション中の特別の設定ポイントにおいて循環バッファに蓄積される（図６）。これは、図７に、エミュレーションの開始、第１設定ポイント及び第２設定ポイントを有するタイム線で示されている。エミュレーションの間、各書込動作は、ＤＵＶのＲＡＭ及び循環バッファに同時に蓄積される。
いくつかの実施の形態では、書込動作からのデータは、ＤＵＶのステートの他の内容とは異なる循環バッファに蓄積されることに注意する。
プロセッサベースの装置と同様に、他の装置も可能であるが、シャドウ読出ポートが、この動作に対して使用可能である。循環バッファへの各書込の後、循環バッファアドレスは、「１」だけ加算される。各設定ポイントでは、循環バッファ内のその位置に蓄積されている書込動作が設定ポイントに対応していることを示すマーカーが、循環バッファに書き込まれる。これは、図６に示されている。設定ポイントは、検証システムのユーザによって設定されるのが好ましい。
【００７６】
データが、異なる書込ポートを介して同じメモリ位置に書き込まれる時、データは、メモリ位置に書き込まれている順序と同じ順序で循環バッファに順次蓄積される。言い換えれば、異なる書込ポートからのデータは、ＤＵＶ内のＲＡＭのメモリ位置に書き込まれた順序に従って循環バッファに順次書き込まれる。これにより、リワインド中、ＤＵＶに書き込まれたデータが、正しい順序で循環バッファに蓄積されるため、どの書込ポートがデータを特別のメモリ位置に書き込んだかを知る必要がない。このことは、リワインド段階では、エミュレートされるＤＵＶのＲＡＭにデータを書き込むために１つの書込ポートのみが必要であることを意味している。
【００７７】
この装置は、ミラー書込ポートの使用を必要としないことに注意する。この理由は、プロセッサベースのシステムと異なり、循環バッファから書き込まれたデータの正しい順序が、リワインド中、ポートを逆の順序で（すなわち、書込ポートのミラー化を介して）再接続することによって実行される必要がないからである。
この実施の形態では、循環バッファに蓄積される書込動作の時間的な順序が、正しい順序を実行するために当てにされる。このことは、ＤＵＶ内のＲＡＭが実際にどのくらいの書込ポートを有しているかに拘わらず、循環バッファに蓄積されているデータが、１つの書込ポートのみを介してＲＡＭに書き込まれる場合に、特に正しい。
同様の構成がプロセッサベースのシステムに用いられる場合には、書込ポートのミラー化は、プロセッサベースのシステムには必要でないことに注意する。
また、この実施の形態は、プロセッサベースのシステムにも用いることができることに注意する。プロセッサシステムは、プロセッサベースの検証システムの使用時に、ミラー書込ポートの使用の必要性を除去する。
【００７８】
この方法では、循環バッファに書き込まれるアドレスの数は、書込動作の数（ＤＵＶが何を実行すかによって変化する）に依存する。この方法は、各メモリインスタンスがそれ自身の循環バッファを有することを必要とし、それにより、他のメモリインスタンスの循環バッファと独立して進行可能である。
【００７９】
代わりの実施の形態を説明する。
この実施の形態では、基準クロックは、システムによって内部で発生される。この基準クロックは、システム内の最も速いクロックを移送し損なうことなく、全てのネットを抽出するのに十分な速さ（例えば、十分に高い周波数）を有している必要がある。言い換えれば、この基準クロックの周波数は、ＤＵＶ内の信号が基準クロックの1サイクルの間に1回以上変化しないように、十分高く設定される必要がある。検証システムのユーザはＤＵＶを熟知しているので、ユーザが基準クロックの周波数を選択すべきである。基準クロックを“サイクル”を決定するために用いることにより、基準クロックの各サイクルを、プロセッサベースのシステムの実行サイクルに類似させることができる。
このような基準クロックの各サイクル中では、任意のメモリの各書込ポートに対して、１回の書込動作のみが実行される。これにより、書込動作は、プロセッサベースのシステムと同じ方法で蓄積される。
他は、多かれ少なかれ、プロセッサベースのシステムで実行されるのと同じである。
【００８０】
ＤＵＶ内の各メモリがただ１つの書込ポートを有している限り、プロセッサベースのシステムに関して前述した方法が使用可能である。しかしながら、ＤＵＶ内のメモリが複数の書込ポートを有する時は、異なる接近法が必要である。基準クロックの同じサイクル中にＤＵＶ内のメモリにデータを書き込むために２あるいはそれ以上の書込ポートが用いられる時に、問題が発生する。前述したように、種々の書込ポートを介する書込順序が維持されない場合には、メモリ再構築が正確に実行されない。
【００８１】
他の変更例は、書込動作をモニタし、異なる書込ポートからの実際の書込順序を決定し、そして、各サイクル内で再構築ステージが正確に逆順序でデータを再生可能な方法でデータを記録する特別の回路をメモリインスタンスの操舵論理(steering  logic)に付加することである。この実施の形態は、正しい順序で異なる書込ポートに対してデータを書き込む際に所望の書込効果を達成するために、再構築ステージでの書込動作の時間的な順序に依存する。
図８は、システムが書込動作の時間的な順序の形跡を保持する方法の１例を示すテーブルである。これは、時間領域でデータを正しく配列させることによって順序が決定されるため、再構築ステージが、循環バッファからの全てのデータを１つの書込ポートを介してメモリインスタンスに実際に書き戻すことを意味する。再び、本方法は、ミラーポートの必要性を除去する。
【００８２】
図８は、２ポートメモリに対するメモリ書込動作を示している。第１の２列は、任意のサイクルに対する第１の書込動作を示し、第２の２列は、任意のサイクルに対する第２の書込動作を示している。図８に示す例に戻り、第１行である第１サイクルでは、ポート１はポート２より前に書き込まれる。第２のサイクルでは、ポート１のみが書込動作を有している。第３のサイクルでは、ポート１は、書込動作を受ける。第４のサイクルでは、ポート２は、ポート１より前の書込動作を有している。第５サイクルでは、ポート１及びポート２のいずれも、書込動作を受けない。最後のサイクルでは、ポート１のみが、書込動作を受ける。
【００８３】
多くの場合、エミュレーションシステムは、“ラッパー(wrapper)”方法を用いることによって、複数の書込ポートを有するメモリ（“論理メモリセル”と呼ぶ）を実装可能である。ラッパーは、少ない書込ポート（典型的にはただ１つの書込ポート）２００を有する簡単なメモリ構造（“物理メモリセル”と呼ぶ）を用いる。時間領域多重化を用いて書込ポートを論理メモリセル２００に多重化する論理回路が用いられる。これは、設計の１つのクロックサイクルの間に、論理メモリセル書込ポートがより高い周波数クロックを用いて多重化され、それにより、各書込ポートが異なる時間スロットを用いて物理メモリセルに書き込むことを意味する。このようなラッパー方法を用いる場合には、本明細書に開示されている、メモリ内容をリワインド及び再構築する任意の方法が、論理メモリセルの書込ポートあるいは物理メモリセルの書込ポートのいずれかに適用可能である。
【００８４】
ラッパー方法を、図９を参照して説明する。
メモリセル２００は、アドレス入力Ａ、データ入力Ｄ及び書込イネーブル入力ＷＥを有する１ポートメモリである。このメモリセル２００をデュアルポートメモリに変更するために、追加の回路が付加されている。マルチプレクサ２０５は、アドレス入力をメモリ２００に送る。マルチプレクサ２１０は、データ入力をメモリセル２００に送る。マルチプレクサ２０５は、ポート１のアドレス入力Ａ１からの第１入力と、ポート２のアドレス入力Ａ２からの第２入力を有している。マルチプレクサ２１０は、ポート１のデータ入力Ｄ１からの第１入力と、ポート２のデータ入力Ｄ２からの第２入力を有している。
ステートマシン２１５は、ポート１の書込イネーブルＷＥ１からの第１入力と、ポート２の書込イネーブルＷＥ２からの第２入力を有している。ステートマシン２１５は、エミュレータが実行される周波数よりはるかに速い周波数を有するのが好ましい高速クロック信号を受信するクロック入力を有している。ステートマシン２１５は、マルチプレクサ２０５及び２１０の選択入力を駆動する第１出力を有している。ステートマシン２１５は、マルチプレクサ２２０の選択入力を駆動する第２出力を有している。ポート１からの書込イネーブルＷＥ１は、マルチプレクサ２２０の第１入力を駆動し、ポート２からの書込イネーブルＷＥ２は、マルチプレクサ２２０の第２入力を駆動する。
【００８５】
本明細書に開示されている種々の実施の形態は、メモリ再蓄積を実行するためにエミュレータのハードウェアを使用する観点で説明されている。しかしながら、本明細書に開示されている種々の実施の形態は、エミュレータハードウェア内ではなくワークステーション上のソフトウェアによっても実行可能である。メモリ再蓄積を実行するためにソフトウェアを使用する方法は、以下の通りである。
再構築されるメモリが、ＤＵＶが本来実行されるエミュレータではなく、検証システムに書き込まれる時、捕獲ステージ中に書込動作から記録されたデータと共にＤＵＶ内のメモリの内容が、エミュレータを制御するワークステーションに移送される。そして、ソフトウェアプログラムは、前述した方法を用いてメモリの内容を再構築し、再構築されたメモリの内容を、代わりの検証システムに移送する。
ソフトウェアシミュレータのような代替の論理検証システムは、ＤＵＶのメモリ動作をシミュレータを用いて解析可能とする。再構築されたメモリが、本来ＤＵＶを実行させる同じエミュレータに書き戻される時、ＲＡＭの内容はワークステーション内に読み出される必要はない。
バッファ（トレースあるいは線形）の内容は、メモリが再構築されるワークステーションに移送される。再構築の後、ワークステーションは、変化したアドレスのみをエミュレータに戻す。
この方法を用いる場合には、書き込まれたアドレスが分かるようにアドレスを追跡し、データが間違っているアドレスに書き込まれるのを防止する必要があることに注意する。再構築されたメモリが他のエミュレータやソフトウェアエミュレータ等のエミュレータあるいは他の検証システムに移送されるか否かに拘わらず、この再構築処理は、メモリの全ての内容あるいは捕獲ステージ（すなわち、トレースウィンドウ）中に書込動作によって影響を受けるメモリの部分のいずれかで実行可能である。トレースウィンドウ中に書込動作によって影響を受ける、ＤＵＶ内のメモリの部分でのみ再構築を選択的に実行することによって、エミュレータとワークステーションとの間で前方あるいは後方に移送される必要があるデータ量が著しく減少する。更に、例えば、マルチプレクサ（例えば、マルチプレクサ５０、５２）が書込ポートへの入力において必要とされないため、必要なネットリストの取り扱いが少なくなる。
【００８６】
また、本明細書で開示されている方法は、特別のハードウェアあるいはソフトウェアシミュレータ用いるシミュレーション加速エンジンのような、設計をシミュレートするための他のシステムにおいても使用可能であることに注意する。しかしながら、いくつかの修正は必要である。例えば、ソフトウェアシミュレータでは、本来の設計書込動作と再蓄積書込動作（すなわち、循環あるいは線形バッファからのデータの書き込み）との間の選択のためのマルチプレクサは不要である。更に、ソフトウェアシミュレータ内のメモリの内容を再蓄積する時、メモリ再蓄積方法は、シミュレータの部分ではない別のプログラムによって実行される。
【００８７】
これにより、本明細書に開示されている種々の実施の形態は、デジタル設計のシミュレートあるいはエミュレートのいずれに対しても使用可能である。更に、本明細書に開示されている種々の実施の形態は、テストベクタを用いて設計をエミュレートする時あるいはエミュレータがターゲットシステムと共に動作する時（すなわち、回路エミュレーション中）に有益である。
【００８８】
本明細書に開示されている種々の実施の形態は、一連の指示からなるコンピュータプログラムの形式をとってもよい。これらの指示は、コンピュータが使用可能な媒体に供給される。コンピュータ使用可能媒体の一般的な形態は、例えば、フロッピーディスク（登録商標）、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、ＣＤ−ＲＯＭ、他の光学媒体、パンチカード、紙テープ、ホールパターンを有する他の物理媒体、ＲＡＭ、ＲＯＭ、ＰＲＯＭ（すなわち、プログラマブル読出専用メモリ）、ＦＬＡＳＨ−ＥＰＲＯＭを含むＥＰＲＯＭ（すなわち、消去可能なプログラマブル読出専用メモリ）、他のメモリメモリチップあるいはカートリッジ、搬送波(carrier  wave)、他の媒体が含まれる。
【００８９】
以上のように、本発明の種々の実施の形態は、特別の実施の形態を参照して説明されている。しかしながら、本発明のより広い精神及び概念を超えない範囲で、各実施の形態に対して種々の修正及び変更を行うことができることは明らかである。例えば、読者は、本明細書に開示されている処理フロー図に示されている処理動作の特別な順序や組み合わせは単に説明のためのものであること、本発明は、異なるあるいは付加的な処理動作、処理動作の異なる組み合わせあるいは順序を用いて実行可能であることを理解できる。したがって、明細書及び図面は、限定的な意味ではなく説明のためのものであり、本発明は、特許請求の範囲及びそれらの法的な均等の範囲に従うことを除いては、限定あるいは制限されない。
【図面の簡単な説明】
【００９０】
【図１】シャドウ読出ポートが挿入された後のＤＵＶ内のメモリを示す論理図である。
【図２】リワインド論理が挿入されたＤＵＶ内のメモリを示す論理図である。
【図３】シャドウ読出ポートとリワインド論理が挿入されたＤＵＶ内のマルチポートメモリを示す論理図である。
【図４】ＤＵＶ内に蓄積されているメモリの再構築を可能とする回路を示す論理図である。
【図５】マルチポートメモリを説明するブロック図である。
【図６】循環バッファに蓄積されたメモリがどのように体系付けられるかを示す図である。
【図７】メモリリワインドが時間期間に亘ってどのように実行されるかを説明するタイム線図である。
【図８】本明細書に開示されている実施の形態において、システムが時間的な順序の経過あるいは書込動作をどのように保持するかを説明する表である。
【図９】１ポートＲＡＭを有するマルチポートメモリを実装するために用いられる回路の概略図である。
【符号の説明】
【００９１】
２０、１２０ａ、１２０ｂ  書込ポート
３０、１３０ａ、１３０ｂ  シャドウ読出ポート
４０、１４０ａ、１４０ｂ  循環バッファ
４５、６５、１４５ａ、１４５ｂ、２１５  ステートマシン
５０、５２、６２、６４、１５０ａ、１５０ｂ、１５２ａ、１５２ｂ、２０５、２１０、２２０  マルチプレクサ
６０  線形バッファ
【図１】
2004227571.tif 000003
【図２】
2004227571.tif 000004
【図３】
2004227571.tif 000005
【図４】
2004227571.tif 000006
【図５】
2004227571.tif 000007
【図６】
2004227571.tif 000008
【図７】
2004227571.tif 000009
【図８】
2004227571.tif 000010
【図９】
2004227571.tif 000011