(57)【要約】ハードウェア加速型シミュレータは、シミュレーションプロセッサにより別々にアクセス可能であるストレージメモリとプログラムメモリとを含む。プログラムメモリは、チップをシミュレーションするために実行される命令を格納する。ストレージメモリはユーザメモリをシミュレーションするために使用される。プログラムメモリとストレージメモリは、シミュレーションプロセッサによって別々にアクセス可能であるため、ユーザメモリへの読み書きのシミュレーションは、プログラムメモリとシミュレーションプロセッサとの間のメモリ送信を妨害せず、シミュレーションを加速し、したがって、ある態様においては、ユーザメモリアドレスは、ユーザメモリアドレスに対して固定の設定済みオフセットを追加することによって、メモリアドレスを格納するようにマッピングされる。したがって、実行時にはアドレス変換が要求されない。
2009517783.tif 000002
【特許請求の範囲】
【請求項１】
ユーザチップ設計の機能シミュレーションのための方法であって、該ユーザチップ設計は、ユーザロジックとユーザメモリとを含み、該方法は、
該ユーザチップ設計の記述をプログラムにコンパイルすることであって、該プログラムはユーザロジックをシミュレーションする命令を含み、かつ該ユーザメモリへのアクセスをシミュレーションする命令を含む、ことと、
該命令をシミュレーションプロセッサ上で実行することと
を含む、方法。
【請求項２】
前記ユーザチップ設計の記述をプログラムにコンパイルするステップは、
ユーザメモリアドレスを、前記シミュレーションプロセッサに連結されたストレージメモリのためのストレージメモリアドレスにマッピングすることと、
特定のユーザメモリアドレスにおけるユーザメモリへのアクセスを、該対応するストレージメモリアドレスにおけるストレージメモリにアクセスする命令にコンパイルすることと
を含む、請求項１に記載の方法。
【請求項３】
ユーザメモリの少なくとも１つのインスタンスに対して、前記対応するストレージメモリアドレスは、前記ユーザメモリアドレスから選択されたビットを含み、該対応するストレージメモリアドレスへの該ユーザメモリアドレスの変換は前記命令の実行時には実施されない、請求項２に記載の方法。
【請求項４】
ユーザメモリの少なくとも１つのインスタンスに対して、前記対応するストレージメモリアドレスは、前記ユーザメモリアドレスから選択されたビットと連結された固定オフセットを含む、請求項２に記載の方法。
【請求項５】
ユーザメモリの少なくとも１つのインスタンスに対して、前記対応するストレージメモリのアドレスは、前記ユーザメモリアドレスの最下位ビットを固定数だけ含む、請求項２に記載の方法。
【請求項６】
ユーザメモリの少なくとも１つのインスタンスに対して、前記対応するストレージメモリアドレスは、該ユーザメモリアドレスの最下位ビットをｃｅｉｌ（ｌｏｇ２（Ｎ））個含み、Ｎは該ユーザメモリのインスタンスにおけるユーザメモリアドレスの個数である、請求項２に記載の方法。
【請求項７】
ユーザメモリの少なくとも１つのインスタンスに対して、前記対応するストレージメモリアドレスは、該ユーザメモリアドレスのすべてのビットを含む、請求項２に記載の方法。
【請求項８】
前記ユーザチップ設計の記述をプログラムにコンパイルするステップは、ユーザメモリアドレスを、該ユーザメモリアドレスに適用された単純なロジック機能に基づいたストレージメモリアドレスにマッピングすることを含む、請求項２に記載の方法。
【請求項９】
シミュレーションプロセッサ上で前記命令を実行するステップは、前記シミュレーションプロセッサと、前記ストレージメモリから分離されたプログラムメモリとの間の命令の送信を妨害せずに、該ストレージメモリにアクセスすることを含む、請求項２に記載の方法。
【請求項１０】
シミュレーションプロセッサ上で前記命令を実行するステップは、前記シミュレーションプロセッサによってその他の命令の実行を妨害せずに、前記ストレージメモリにアクセスすることを含む、請求項２に記載の方法。
【請求項１１】
シミュレーションプロセッサ上で前記命令を実行するステップは、
ストレージメモリのトランザクションをトリガする命令を実行することを含み、該命令は、該ストレージメモリのトランザクションをさらに指定するストレージメモリ命令を含む該シミュレーションプロセッサのローカルメモリ内の場所を指示する、請求項２に記載の方法。
【請求項１２】
前記ストレージメモリの命令は、該命令によってシミュレーションされている前記ユーザメモリアドレスに対応するストレージメモリアドレスを含む、請求項１１に記載の方法。
【請求項１３】
前記ストレージメモリのアドレスは、前記対応するユーザメモリアドレスから選択されたビットが連結される該対応するユーザメモリに対する固定オフセットを含む、請求項１２に記載の方法。
【請求項１４】
前記ストレージメモリの命令は、前記ストレージメモリのトランザクションが読み出し操作であるか書き込み操作であるかを示すフィールドを含む、請求項１１に記載の方法。
【請求項１５】
前記ストレージメモリの命令は、前記ストレージメモリのトランザクションが有効になっているか否かを示すフィールドを含む、請求項１１に記載の方法。
【請求項１６】
前記ストレージメモリの命令は、ビットマスキングが有効になっているか否かを示すフィールドを含む、請求項１１に記載の方法。
【請求項１７】
前記ストレージメモリの命令は、該ストレージメモリにおいて任意の動的に生成されるフィールドが無効であるか否かを示すフィールドを含む、請求項１１に記載の方法。
【請求項１８】
前記ユーザロジックおよび前記ユーザメモリのシミュレーションは４−状態のシミュレーションであって、前記ストレージメモリの命令は、該ストレージメモリ命令において任意の動的に生成されるフィールドがＸまたはＺを含むか否かを示すフィールドを含む、請求項１１に記載の方法。
【請求項１９】
前記ユーザロジックおよび前記ユーザメモリのシミュレーションは４−状態のシミュレーションであって、前記ストレージメモリの命令はメモリ有効フィールドを含む、請求項１１に記載の方法。
【請求項２０】
前記ユーザチップ設計におけるユーザメモリの記述は、該ユーザメモリの動作モデルを含む、請求項１に記載の方法。
【請求項２１】
前記ユーザチップ設計におけるユーザロジックの記述は、該ユーザロジックのゲートレベルのネットリストを含む、請求項２０に記載の方法。
【請求項２２】
前記プログラムは、読み出し専用ベースのシミュレーションプロセッサに連結されたストレージメモリからデータを読み出す命令をさらに含む、請求項１に記載の方法。
【請求項２３】
前記ストレージメモリから読み出された前記データは、前記ユーザチップ設計の前記機能シミュレーションのための刺激データである、請求項２２に記載の方法。
【請求項２４】
ホストコンピュータは、前記シミュレーションプロセッサの操作を一時停止することなく、前記刺激データを前記ストレージメモリに書き込む、請求項２３に記載の方法。
【請求項２５】
前記プログラムは、書き込み専用ベースのシミュレーションプロセッサに連結されたストレージメモリにデータを書き込む命令をさらに含む、請求項１に記載の方法。
【請求項２６】
前記ストレージメモリに書き込まれる前記データは、前記ユーザチップ設計の前記機能シミュレーションのための履歴データを含む、請求項２５に記載の方法。
【請求項２７】
ホストコンピュータは、前記シミュレーションプロセッサの操作を一時停止することなく、前記ストレージメモリから前記履歴データを読み出す、請求項２６に記載の方法。
【請求項２８】
ユーザチップ設計の機能をシミュレーションするハードウェア加速型シミュレーションシステムであって、該ユーザチップ設計はユーザロジックとユーザメモリとを含み、該シミュレーションされる機能は、ユーザメモリへの書き込みとユーザメモリからの読み出しとを含んでおり、該ハードウェア加速型シミュレーションシステムは、
該ユーザロジックをシミュレーションするように構成可能なプロセッサ要素を含むプロセッサユニットをｎ個含んでいるシミュレーションプロセッサと、
該ユーザメモリをシミュレーションする該シミュレーションプロセッサによってアクセス可能なストレージメモリと、
該ユーザロジックと該ユーザメモリへのアクセスとの両方をシミュレーションする命令を含むプログラムを格納するために、該シミュレーションプロセッサによって別々にアクセス可能なプログラムメモリであって、該命令は該シミュレーションプロセッサによって実行可能である、プログラムメモリと
を備える、ハードウェア加速型シミュレーションシステム。
【請求項２９】
ユーザメモリへの書き込みとユーザメモリからの読み出しとは、それぞれ、ストレージメモリへ書き込む命令とストレージメモリから読み出す命令によってシミュレーションされ、さらに、該ストレージメモリからの読み出しと該ストレージメモリへの書き込みとは、前記プログラムメモリと前記シミュレーションプロセッサとの間の命令の送信を妨害しない、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項３０】
ユーザメモリへの書き込みとユーザメモリからの読み出しは、それぞれ、ストレージメモリへ書き込む命令とストレージメモリから読み出す命令とによってシミュレーションされ、さらに、該ストレージメモリからの読み出しと該ストレージメモリへの書き込みとは、ユーザロジックをシミュレーションする命令の実行を妨害しない、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項３１】
前記シミュレーションプロセッサは、ローカルメモリをさらに備え、
特定のユーザメモリアドレスにおいてユーザメモリへの書き込みまたはユーザメモリからの読み出しをシミュレーションする前記命令は、ローカルメモリアドレスを含み、該ローカルメモリアドレスの該ローカルメモリは、該ユーザメモリアドレスに対応するストレージメモリアドレスにおいて該ストレージメモリにアクセスするストレージメモリ命令を含む、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項３２】
前記ストレージメモリアドレスは、前記ユーザメモリアドレスから選択されたビットを含む、請求項３１に記載のハードウェア加速型シミュレーションシステム。
【請求項３３】
前記ストレージメモリのアドレスは、前記対応するユーザメモリアドレスから選択されたビットと連結された前記ユーザメモリのための所定の固定オフセットを含む、請求項３２に記載のシステム。
【請求項３４】
前記ローカルメモリアドレスを含む前記命令は、１つだけのプロセッサユニットによって実行されるが、前記ローカルメモリに含まれる前記ストレージメモリ命令は、２つ以上のプロセッサユニットの前記ローカルメモリに影響を与える、請求項３１に記載のハードウェア加速型シミュレーションシステム。
【請求項３５】
ユーザメモリへの書き込みをシミュレーションする命令は、前記ローカルメモリから前記ストレージメモリにデータを書き込むことを含む、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項３６】
前記プロセッサユニットは、専用ローカルメモリを含み、ユーザメモリへの書き込みをシミュレーションする命令は、２つ以上の専用ローカルメモリから前記ストレージメモリに書き込むことを含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項３７】
前記プロセッサユニットは、専用ローカルメモリを含み、ユーザメモリへの書き込みをシミュレーションする命令は、それぞれの専用ローカルメモリから正確に１ビットだけを前記ストレージメモリに書き込むことを含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項３８】
前記プロセッサユニットは、専用ローカルメモリを含み、ユーザメモリへの書き込みをシミュレーションする命令は、１つだけの専用ローカルメモリから正確に１語だけを前記ストレージメモリに書き込むことを含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項３９】
前記プロセッサユニットは、専用ローカルメモリを含み、ユーザメモリへの書き込みをシミュレーションする命令は、少なくとも１つの専用ローカルメモリから少なくとも１ビットを前記ストレージメモリに書き込むことを含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項４０】
ユーザメモリへの書き込みをシミュレーションする少なくとも１つの命令は、ローカルメモリから前記ストレージメモリへの単独のデータ送信を含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項４１】
ユーザメモリへの書き込みをシミュレーションする少なくとも１つの命令は、ローカルメモリから前記ストレージメモリへの２つ以上のデータ送信を含む、請求項３５に記載のハードウェア加速型シミュレーションシステム。
【請求項４２】
ユーザメモリからの読み出しをシミュレーションする前記命令は、前記ストレージメモリから前記ローカルメモリにデータを読み出すことを含む、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項４３】
ユーザメモリからの読み出しをシミュレーションする前記命令は、前記ストレージメモリから２つ以上の専用ローカルメモリにデータを読み出すことを含む、請求項４２に記載のハードウェア加速型シミュレーションシステム。
【請求項４４】
前記シミュレーションプロセッサの一部であるローカルメモリに連結された読み出しレジスタであって、データが前記ストレージメモリにさらに送信されるために、該ローカルメモリから該読み出しレジスタへのデータ送信が可能である、読み出しレジスタと、
前記プロセッサユニットと該ローカルメモリとに連結された書き出しレジスタであって、データが該プロセッサユニットまたは該ローカルメモリにさらに送信されるために、該ストレージメモリからのデータ送信が可能である、書き込みレジスタと、
をさらに備える、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項４５】
前記ローカルメモリは、各プロセッサユニットに対する専用ローカルメモリを備え、データは、前記ストレージメモリにさらに送信されるために、該専用ローカルメモリから前記読み出しレジスタに送信可能であるとともに、データは、該プロセッサユニットまたは該専用ローカルメモリにさらに送信されるために、該ストレージメモリから前記書き込みレジスタに送信可能である、請求項４４に記載のハードウェア加速型シミュレーションシステム。
【請求項４６】
前記書き込みレジスタから前記読み出しレジスタへの経路へのループ転送経路をさらに備え、プロセッサユニットを迂回する、請求項４４に記載のハードウェア加速型シミュレーションシステム。
【請求項４７】
前記シミュレーションプロセッサの一部であるローカルメモリに連結された読み出しレジスタであって、データが前記ストレージメモリにさらに送信されるために、該ローカルメモリから前記読み出しレジスタへのデータ送信が可能である、読み出しレジスタと、
前記プロセッサユニットに連結された書き込みレジスタであって、データが前記プロセッサユニットにさらに送信されるために、該ストレージメモリからのデータ送信が可能である、書き込みレジスタと
をさらに備える、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項４８】
前記読み出しレジスタを迂回するマルチプレクサをさらに備える、請求項４７に記載のハードウェア加速型シミュレーションシステム。
【請求項４９】
前記書き込みレジスタを迂回するマルチプレクサをさらに備える、請求項４７に記載のハードウェア加速型シミュレーションシステム。
【請求項５０】
前記読み出しレジスタから前記書き込みレジスタへのループバック経路をさらに備え、前記ストレージメモリを迂回する、請求項４７に記載のハードウェア加速型シミュレーションシステム。
【請求項５１】
前記読み出しレジスタと前記書き込みレジスタとの間に連結された例外処理機能をさらに備える、請求項４７に記載のハードウェア加速型シミュレーションシステム。
【請求項５２】
前記例外処理機能は、プロセッサコアを備える、請求項５１に記載のハードウェア加速型シミュレーションシステム。
【請求項５３】
前記例外処理機能は、演算ユニットを備える、請求項５１に記載のハードウェア加速型シミュレーションシステム。
【請求項５４】
前記シミュレーションプロセッサは、例外処理機能を含む、請求項５１に記載のハードウェア加速型シミュレーションシステム。
【請求項５５】
前記例外処理機能は、前記シミュレーションプロセッサに対する外部回路として実装される、請求項５１に記載のハードウェア加速型シミュレーションシステム。
【請求項５６】
前記シミュレーションプロセッサと前記ストレージメモリとの間のインターフェースをさらに備え、
該シミュレーションプロセッサへの読み出しと書き込みとを制御するために、該シミュレーションプロセッサに連結されたシミュレーションプロセッサ部分と、
該ストレージメモリへの読み出しと書き込みとを制御するために、該ストレージメモリに連結されたストレージメモリ部分と、
該ストレージメモリ部分と該シミュレーションプロセッサ部分とを連結する中間インターフェースと
を備える、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項５７】
前記シミュレーションプロセッサは、ホストコンピュータに差し込み可能な基板上に実装される、請求項２８に記載のハードウェア加速型シミュレーションシステム。
【請求項５８】
前記シミュレーションプロセッサは、前記ホストコンピュータのメインメモリへの直接アクセスを有する、請求項５７に記載のハードウェア加速型シミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、概して、半導体チップとも呼ばれる、半導体集積回路の設計のシミュレーションのためにハードウェア加速システムにおいて使用することができるシミュレーションプロセッサなど、ＶＬＩＷ（超長命令語）プロセッサに関する。ある態様において、本発明は、半導体チップのロジックとメモリとの両方をシミュレーションするようなシステムの使用に関する。
【背景技術】
【０００２】
（関連技術の記述）
典型的に、半導体チップの設計のシミュレーションは、設計の大量のロジック、大量のオンチップメモリと外部メモリ、および、最新の半導体チップの設計には典型的な高速の操作によって、高速の処理速度と多数の実行ステップとを必要とする。シミュレーションに対する典型的な手法は、ソフトウェアベースのシミュレーション（つまり、ソフトウェアシミュレータ）である。この手法では、チップのロジックとメモリ（以下、ユーザロジックとユーザメモリと呼ぶ）は、汎用ハードウェア上で実行するコンピュータソフトウェアによってシミュレーションされる。ユーザロジックは、ロジック機能を模倣するソフトウェアの命令の実行によってシミュレーションされる。ユーザメモリは、汎用ハードウェアのメインメモリを割り当てることによってシミュレーションされて、シミュレーションの必要に応じて、これらのメモリ場所とデータを相互に送信する。残念ながら、ソフトウェアシミュレータは、典型的に、非常に速度が遅い。チップ上で大量のロジックをシミュレーションするには、大量の演算や結果、これに対応して実行するためにメインメモリから汎用プロセッサに送信される大量のソフトウェアの命令が必要である。チップ上の大量のメモリをシミュレーションするには、チップ記述に使用されるアドレスと汎用ハードウェアのメインメモリで使用される対応のアドレスとの間で大量のデータ送信とアドレス変換が必要である。
【０００３】
チップシミュレーションの別の手法は、ハードウェアベースのシミュレーション（つまり、ハードウェアシミュレータ）である。この手法では、ユーザロジックとユーザメモリは、エミュレータのハードウェア回路に対して専用ベースでマップされて、ハードウェア回路がシミュレーションを実施する。ユーザロジックは、エミュレータの特定のハードウェアゲートにマップされ、ユーザメモリは、エミュレータの特定の物理的メモリにマップされる。残念ながら、エミュレータで必要なハードウェア回路の数は、シミュレーションされるチップ設計のサイズに応じて増加するため、ハードウェアエミュレータは、典型的に、コストが高い。例えば、オンチップロジックはエミュレータの物理的ロジックに専用ベースでマッピングされるため、ハードウェアエミュレータは、典型的に、チップ上に存在するロジックと同じ量が必要である。大量のユーザロジックが存在すると、エミュレータには同じ大量の物理的ロジックが存在しなければならない。さらに、ユーザメモリは、エミュレータにもマッッピングしなければならず、さらに、ユーザメモリからハードウェアエミュレータの物理的メモリへの専用マッピングも必要である。典型的に、エミュレータメモリは、ユーザメモリを模倣するようにインスタンス化されてパーティションされる。これは、各メモリが物理的アドレスとデータポートを使用するので、極めて非効率である。典型的に、マッピングすることが可能なユーザロジックとユーザメモリの量は、エミュレータの設計特徴に依存するが、ユーザロジックとユーザメモリの両方は、エミュレータに含まれる物理的リソースを要求し、設計サイズによって増大する。これは、エミュレータのコストを引き上げる。また、パフォーマンスを低下させて、エミュレータの設計を複雑化させる。エミュレータのメモリは、典型的に、高速であるが小型である。大型のユーザメモリは、多数のエミュレータメモリで分散しなければならない場合がある。この場合には、異なるエミュレータメモリ間での同期が必要となる。
【０００４】
ロジックシミュレーションのまた別の手法は、ハードウェア加速型シミュレーションである。ハードウェア加速型シミュレーションは、典型的に、ロジック設計をエミュレーションまたはシミュレーションするように構成可能なプロセッサ要素を含む特殊なハードウェアシミュレーションシステムを利用する。コンパイラは、典型的に、ロジック設計（例えば、ネットリストまたはＲＴＬ（レジスタ変換言語））を、プロセッサ要素にロードされる命令を含むプログラムに変換するために提供される。ロジック設計を細分化して、ロジック設計のこれらの部分をシミュレーションプロセッサにロードする多様な技術を利用することができるので、ハードウェア加速型シミュレーションは、ロジック設計のサイズに伴い増大しなくてもよい。結果として、ハードウェア加速型シミュレータは、典型的に、ハードウェアエミュレータに比較するとコストがかなり低い。さらに、ハードウェア加速型シミュレータは、シミュレーションプロセッサによって生まれるハードウェア加速によって、典型的に、ソフトウェアシミュレータよりも高速である。ハードウェア加速型シミュレーションの一例は、特許文献１に記述されており、参照により援用される。
【０００５】
しかしながら、ハードウェア加速型シミュレータは、ユーザメモリのシミュレーションが困難な場合がある。それらは典型的に、ユーザメモリのモデリング問題を、上記のように、エミュレータと同様に、ユーザメモリをモデル化するために、インスタンス化ベースで物理的メモリを使用することによって、解決する。
【０００６】
ハードウェア加速型シミュレータの別の手法は、ユーザロジックのハードウェア加速型シミュレーションとユーザメモリのソフトウェアシミュレーションを組み合わせることである。この手法では、ユーザロジックは、特定のプロセッサ要素上で命令を実行することによってシミュレーションされるが、ユーザメモリは、汎用ハードウェアのメインメモリを使用することによってシミュレーションされる。しかしながら、この手法は、ユーザメモリのシミュレーションに必要な大量のデータ送信とアドレス変換のために速度が遅い。この種の変換は、汎用ハードウェアとの間の待ち時間によってパフォーマンスを低下させるので、高速化を無効にすることがよくある。さらに、データは、ユーザロジックとユーザメモリとの間で送信されることがよくある。例えば、ロジックゲートの出力は、ユーザメモリに格納される場合があり、または、ロジックゲートへの入力は、ユーザメモリによってもたらされる場合がある。合成手法では、これらの形の送信は、特殊なハードウェアシミュレーションシステムと、汎用ハードウェアのメインメモリとの間の送信が必要である。これは、複雑であるとともに速度が遅い可能性がある。
【特許文献１】米国特許出願公開第２００３／０１０５６１７号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、ユーザロジックおよびユーザメモリの両方をシミュレーションし、上記の欠点の一部またはすべてを克服する手法に対する必要性が存在する。
【課題を解決するための手段】
【０００８】
ある態様において、本発明は、シミュレーションプロセッサによって別々にアクセス可能なストレージメモリとプログラムメモリを含むハードウェア加速型シミュレータを提供することによって、先行技術の限界を克服する。プログラムメモリは、チップをシミュレーションするために実行される命令を格納する。ストレージメモリはユーザメモリをシミュレーションするために使用される。つまり、ユーザメモリへのアクセスは、ストレージメモリの対応部分へのアクセスによってシミュレーションされる。プログラムメモリとストレージメモリは、シミュレーションプロセッサによって別々にアクセス可能であるため、ユーザメモリからの読み出しや書き込みのシミュレーションは、プログラムメモリとシミュレーションプロセッサとの間の命令の送信を妨害しないので、シミュレーションの速度が上昇する。
【０００９】
本発明のある態様において、ユーザメモリアドレスのストレージメモリアドレスへのマッピングは、実行時のアドレス変換をほとんどあるいはまったく必要としない方式において実施されることが好ましい。ある手法では、ユーザメモリの各インスタンスは、実行時前、典型的にはシミュレーションプログラムのコンパイル中に、固定のオフセットに割り当てられる。対応するストレージメモリアドレスは、ユーザメモリアドレスから選択されたビットで付加された固定オフセットとして決定される。例えば、ユーザメモリアドレスが［ＡＢ］で与えられ、ＡとＢはそれぞれ言語アドレスとビットアドレスのビットであるが、対応するストレージメモリアドレスは［ＣＡＢ］の場合があり、Ｃはユーザメモリの特定のインスタンスに対して割り当てられた固定オフセットである。固定オフセットは、実行時前に決定されて、シミュレーション中固定される。シミュレーション中、ユーザメモリアドレス［ＡＢ］は、シミュレーションの一部として決定することができる。対応するストレージメモリアドレスは、オフセットＣを演算したアドレス［ＡＢ］に追加することによって容易かつ迅速に決定される。アドレス変換オーバーヘッドの削減によって、シミュレーションの速度が上昇する。
【００１０】
本発明の別の態様では、シミュレーションプロセッサはローカルメモリを含み、ストレージメモリへのアクセスはローカルメモリから行われる。つまり、ストレージメモリに書き込まれるデータは、ローカルメモリからストレージメモリに書き込まれる。同様に、ストレージメモリから読み出されるデータは、ストレージメモリからローカルメモリに読み出される。ある特定の手法では、シミュレーションプロセッサは、ｎ個のプロセッサ要素を含み、データは、プロセッサ要素に対応するローカルメモリの間でインターリーブする。例えば、ｎビットがローカルメモリからストレージメモリに読み出される場合、プロセッサ要素０のローカルメモリからのｎビットすべてを読み出す代わりに、ｎ個のプロセッサ要素のそれぞれのローカルメモリから１ビットを読み出す可能性がある。同様の手法は、ストレージメモリからローカルメモリにデータを書き込むために使用することが可能である。代わりの手法では、データはインターリーブされない。代わりに、ローカルメモリから読み出される、またはローカルメモリに書き込まれるデータは、ある特定のプロセッサ要素に関連付けられたローカルメモリと相互に送信される。別の変形では、両方の手法がサポートされるので、インターリーブとインターリーブ以外のフォーマットとの間でデータを転換することができる。
【００１１】
別の態様では、ローカルメモリは、命令を間接的に使用することが可能である。ストレージメモリへの書き込みまたはストレージメモリからの読み出し（つまり、ストレージメモリの命令）が望まれる場合、シミュレーションプロセッサによって受信された命令のストレージメモリ命令全体を含む代わりに、シミュレーションプロセッサにより受信された命令は、ローカルメモリのアドレスをポイントする。ストレージメモリ命令全体は、このローカルメモリアドレスに含まれる。この間接命令によって、シミュレーションプロセッサに対して示される命令を短くすることができるので、シミュレーションプロセッサの全体的な処理能力が向上する。
【００１２】
ある特定の実装では、シミュレーションプロセッサは、ホストコンピュータに差し込み可能な基板上に実装されて、シミュレーションプロセッサは、プログラムメモリとして機能している、ホストコンピュータのメインメモリに直接アクセスする。このように、命令は、ＤＭＡアクセスを使用してかなり迅速にシミュレーションプロセッサに送信することが可能である。シミュレーションプロセッサは、別のインターフェースによってストレージメモリにアクセスする。ある設計では、このインターフェースは、シミュレーションプロセッサからの読み出しと書き込みを制御するインターフェースと、ストレージメモリからの読み出しと書き込みを制御するインターフェースとの２つの部分に分けられる。２つの部分は、中間インターフェースから相互に通信する。この手法は、モジュール式設計になる。各部分は、シミュレーションプロセッサまたはストレージメモリそれぞれ特定の追加の機能を含むように設計される。
【００１３】
本発明のその他の態様は、上記の手法に対応する機器やシステム、これらの機器やシステムのアプリケーション、および、前述のすべてに対応する方法を含む。本発明の別の態様は、半導体シップのシミュレーション以外を目的とする同様のアーキテクチャを備えるＶＬＩＷプロセッサを含む。
【００１４】
本発明は、以下の添付図面を参照すると、以下の詳細説明および添付の請求項から容易に示されるその他の利点や特徴を有する。
【００１５】
図は、図説のみを目的として、本発明の実施形態を表す。当業者は、以下の検討から、説明される発明の原則から逸脱せずに、ここで図説される代わりの実施形態の構造や方法を採用することができることを容易に理解する。
【発明を実施するための最良の形態】
【００１６】
図１は、本発明のある実施形態によるハードウェア加速型ロジックシミュレーションシステムを図説する模式図である。ロジックシミュレーションシステムは、専用ハードウェア（ＨＷ）シミュレータ１３０、コンパイラ１０８、およびＡＰＩ（アプリケーションプログラムインターフェイス）１１６を含む。ホストコンピュータ１１０は、ＣＰＵ１１４とメインメモリ１１２を含む。ＡＰＩ１１６は、ソフトウェアインターフェースで、これによって、ホストコンピュータ１１０がハードウェアシミュレータ１３０を制御する。専用ＨＷシミュレータ１３０は、プログラムメモリ１２１、ストレージメモリ１２２およびシミュレーションプロセッサ１００を含む。シミュレーションプロセッサ１００は、プロセッサ要素１０２、内蔵型ローカルメモリ１０４、ハードウェア（ＨＷ）メモリインターフェースＡ１４２およびハードウェア（ＨＷ）メモリインターフェースＢ１４４を含む。
【００１７】
図１に示されたシステムは、次のように機能する。コンパイラ１０８は、設計のＲＴＬ（レジスタ変換言語）記述またはネットリスト記述などのユーザチップまたは設計の記述１０６を受信する。記述１０６は、チップ内（つまりユーザロジック）およびオンチップメモリ上（つまりユーザメモリ）の両方のロジック機能の記述を含む。記述１０６は、典型的に、グラフのノードが設計のハードウェアブロックに対応している有向グラフとしてユーザロジック設計を表し、典型的に、動作または機能的（つまり合成不可能な）記述によって（合成可能な記述も処理可能ではあるが）ユーザメモリを表す。コンパイラ１０８は、設計の記述１０６をプログラム１０９にコンパイルする。プログラムは、ユーザロジックをシミュレーションする命令とユーザメモリをシミュレーションする命令を含む。命令は、典型的に、ユーザロジックの機能をシミュレーションするために、設計１０６内のユーザロジックをシミュレーションプロセッサ１００内のプロセッサ要素１０２に対してマッピングする。コンパイラ１０８によって受信される記述１０６は、典型的に、チップまたは設計以上を表す。シミュレーションの目的で設計を刺激するために使用されるテスト環境を表すこともよくある（つまり、テストベンチ）。システムは、チップ設計とテストベンチ（テストベンチがユーザメモリのブロックを必要とする場合を含む）の両方をシミュレーションするために設計することが可能である。
【００１８】
命令は、典型的に、設計１０６内のユーザメモリを、ストレージメモリ１２２内の場所に対してマッピングする。ストレージメモリ１２２からのデータは、プロセッサ要素１０２の必要に応じて、ローカルメモリ１０４との間で相互に送信される。シミュレーションの目的においては、ユーザメモリにアクセスする機能は、ストレージメモリの対応する場所にアクセスする命令によってシミュレーションされる。例えば、一定のユーザメモリアドレスでユーザメモリに書き込む機能は、対応するストレージメモリアドレスでストレージメモリに書き込む命令によってシミュレーションされる。同様に、一定のユーザメモリアドレスでユーザメモリから読み出す機能は、対応するストレージメモリアドレスでストレージメモリから読み出す命令によってシミュレーションされる。
【００１９】
典型的なコンパイラ１０８の詳細説明は、２００３年６月５日に発行された米国特許出願公開第２００３／０１０５６１７（Ａ１）号、「Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｓｉｍｕｌａｔｉｏｎ」にあり、参照によって援用される。特に、１９１−２５２段落と対応する図面を参照する。プログラム１０９の命令はメモリ１１２に格納される。
【００２０】
シミュレーションプロセッサ１００は、ユーザロジックのロジックゲートをシミュレーションするための複数のプロセッサ要素１０２、および、プロセッサ要素１０２のために命令とデータを格納するためのローカルメモリ１０４を含む。ある実施形態では、ＨＷシミュレータ１３０は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）とＤＭＡ（ダイレクトメモリアクセス）コントローラと共にＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）を使用する汎用ＰＣＩ基板上に実装されるので、ＨＷシミュレータ１３０は、当然、ホストコンピュータ１１０である任意の汎用コンピュータシステムに差し込まれる。シミュレーションプロセッサ１００は、ＨＷシミュレータ１３０の一部を形成する。シミュレーションプロセッサ１００は、ＡＰＩ１１６からホストコンピュータ１１０によって制御されている操作によってホストコンピュータ１１０のメインメモリ１１２への直接アクセスを有する。ホストコンピュータ１１０は、メインメモリ１１２とＨＷシミュレータ１３０上のメモリ１２１、１２２の間でＤＭＡ送信を命令することが可能であるが、メインメモリ１１２とメモリ１２２との間のＤＭＡはオプションにすることができる。
【００２１】
ホストコンピュータ１１０は、ユーザおよびコンパイラ１０８によって入力として生成されるプログラム１０９によって指定されたシミュレーションベクトル（非表示）を受け取って、シミュレーションプロセッサ１００のために基板レベルの命令１１８を生成する。シミュレーションベクトル（非表示）は、シミュレーションされるネットリスト１０６に対する入力の値を含む。基板レベルの命令１１８は、ＤＭＡによって、メインメモリ１１２からＨＷシミュレータ１３０のプログラムメモリ１２１に送信される。メモリ１２１は、メインメモリ１１２に送信するためのシミュレーションの結果１２０も格納する。ストレージメモリ１２２はユーザメモリデータを格納するとともに、あるいは（オプションで）シミュレーションベクトル（非表示）または結果１２０を格納する。メモリインターフェース１４２、１４４は、それぞれ、メモリ１２１、１２２にアクセスするように、プロセッサ要素１０２のためにインターフェースを提供する。プロセッサ要素１０２は、命令１１８を実行して、ある時点で、シミュレーション結果１２０をＤＭＡによってホストコンピュータ１１０に返す。中間結果は、その後の命令によって使用するために基板上に残すことができる。すべての命令１１８を実行すると、１つのシミュレーションベクトルのためのネットリスト１０６全体をシミュレーションする。図１に示したようなハードウェア加速型シミュレーションシステムの操作の詳細検討は、２００３年６月５日に発行された米国特許出願公開第２００３／０１０５６１７（Ａ１）号にあり、全体が参照により援用される。
【００２２】
図２は、本発明のある実施形態によるハードウェア加速型シミュレーションシステムのシミュレーションプロセッサ１００を図説する模式図である。シミュレーションプロセッサ１００は、相互接続システム１０１によって互いに通信するプロセッサユニット１０３（プロセッサユニット１、プロセッサユニット２、・・・プロセッサユニットｎ）を含む。この例では、相互接続システムは、非妨害クロスバーである。各プロセッサユニットは、クロスバーから２つまでの入力を受け取ることができるので、ｎ個のプロセッサユニットでは、２ｎの入力信号が使用可能であり、入力信号が２ｎ個の信号から選択することが可能である（スラッシュと「２ｎ」の注釈のある内向き矢印によって示されている）。各プロセッサユニットは、クロスバーのために最高２つまでの出力を生成することが可能である（外向き矢印によって示されている）。ｎ個のプロセッサユニットの場合、これは、２ｎ個の出力信号を作成する。このように、クロスバーは、２ｎ（プロセッサユニットからの出力）×２ｎ（プロセッサユニットへの入力）クロスバーであり、各プロセッサユニット１０３の各入力が任意のプロセッサユニット１０３の任意の出力に連結できるようにする。この方式では、あるプロセッサユニットによって演算される中間値は、その他任意のプロセッサユニットによる演算のための入力として利用させることが可能である。
【００２３】
ｎ個のプロセッサユニットを含むシミュレーションプロセッサ１００の場合、それぞれは２つの出力を有するので、非妨害アーキテクチャのクロスバーにおいては、２ｎ個の信号が選択可能であることが必要である。各プロセッサユニットが同一である場合、それぞれは、２つの変数をクロスバーに入力することが好ましい。これにより、２ｎ×２ｎの非妨害クロスバーが生まれる。しかしながら、このアーキテクチャは不要である。妨害アーキテクチャ、非同種アーキテクチャ、最適化アーキテクチャ（特定の設計スタイルに対して）、共有アーキテクチャ（プロセッサユニットは、アドレスビットを共有するか、クロスバーへの入力または出力ラインを共有する）は、非妨害２ｎ×２ｎクロスバー以外の相互接続システム１０１が好まれる場合の一部の例である。
【００２４】
プロセッサユニット１０３のそれぞれは、プロセッサ要素（ＰＥ）、ローカルキャッシュ、および、そのメモリとしてローカルメモリ１０４の対応部分を含む。したがって、各プロセッサユニット１０３は、ユーザロジックの少なくとも１つのロジックゲートをシミュレーションするとともに、シミュレーション中に中間または最終値を格納するように構成可能である。
【００２５】
図３は、本発明による、ユーザメモリアドレスのストレージメモリアドレスへの一つのマッピングを図説する。半導体チップは、大量のメモリインスタンスを有する可能性があり、それぞれのインスタンスは、異なるサイズである。かなり小型（例えば、内部ＦＩＦＯ）から非常に大型（例えば内部ＤＲＡＭまたは外部メモリ）までさまざまである。メモリインスタンスは、典型的に、一定の数の語を含み、それぞれの語は一定の数のビットを有するとして説明される。例えば、ユーザメモリの１つのインスタンスは、ｒｅｇ［ｌｅｎｇｔｈ］ｍ［＃ｗｏｒｄｓ］という命名によって説明することができるが、ここで、「ｌｅｎｇｔｈ」は各語の長さを定義し、「＃ｗｏｒｄｓ」はメモリインスタンスの中の語の数を定義する。
【００２６】
典型的に、長さのフィールドはビットパックフィールドで、各語の長さをビット数で表す。例えば、［３：０］は、長さが４ビットであることを定義し、［９：３］は長さが７ビットであることを定義する（ビット３から９を使用する）。＃ｗｏｒｄｓフィールドはアンパックで、メモリの有効な範囲をリストするだけである。例えば、［０：３１］は、＃ｗｏｒｄｓが３２（語）であることを定義し、［１０２４：１０２８］は、１０２４の値から開始して、＃ｗｏｒｄｓが５（語）であることを定義する。
【００２７】
例えば、ｒｅｇ［６：２］ｍ［０：５］は、図３に示されているように、合計で６語（範囲０：５によって定義される）を有するユーザメモリのインスタンスで、それぞれの長さは５ビット（範囲６：２により定義される）である。図の中で、各行は、１つの語を表し、０から５の数字（またはバイナリでは０００から１０１）は語のアドレスを表す。各語には、２から６の数字（または０１０から１１０）によって表されるように、５つのビットがある。便宜を図るために、語のアドレスはビットａ０、ａ１、ａ２などによって表すことができるが、ａ０は最下位ビットである。同様に、ビットアドレスは、ビットｂ０、ｂ１、ｂ２などによって表すことができる。図３の例では、語のアドレスは、ａ２、ａ１、ａ０の３つのビットを含み、ビットアドレスも３つのビットｂ２、ｂ１、ｂ０を含む。メモリインスタンスのアドレスが語ベースである場合、ビットアドレスはゼロになるので（つまり、ｂ２＝０、ｂ１＝０、およびｂ０＝０）、語のアドレスだけを指定することが必要である。特定のビットのアドレスが指定されている場合、語アドレスとビットアドレスの両方が使用される。この例では、個別のビットのアドレスが指定されている場合、相対的ユーザメモリアドレスは、［ａ２  ａ１  ａ０  ｂ２  ｂ１  ｂ０］になる。アドレス全体の長さは、語のアドレスの長さ（この例では３ビット）とビットアドレスの長さ（この例ではこれも３ビット）の和である。
【００２８】
この説明は、２−状態のロジックシミュレーションにも適用される。この場合には、回路のビット（例えば、ゲートの入力ビットまたは出力ビット）は、シミュレーション中の可能性のある２−状態（例えば、０または１）のいずれかをとることができる。したがって、ビットの状態は、シミュレーション中は単独のビットによって表すことが可能である。対照的に、４−状態のロジックシミュレーションでは、回路のビットは、可能性のある４−状態（例えば、０、１、ＸまたはＺ）のうちの１つをとる可能性があるため、シミュレーション中は２ビットによって表される。４−状態のシミュレーションのためのアドレスは、２−状態のアドレスに１ビットを追加することによって実現可能である。例えば、［ａ２，ａ１，ａ０，ｂ２，ｂ１，ｂ０］が特定のビットの２−状態のアドレスである場合（あるいは、さらに正確には特定ビットの状態）、ビットの４−状態のアドレスとしては、［ａ２，ａ１，ａ０，ｂ２，ｂ１，ｂ０，４ｓｔ］が使用できる。ここで、「４ｓｔ」は、４−状態のシミュレーションに追加される追加ビットであり、４ｓｔ＝１は、２ビット状態のｍｓｂであり、４ｓｔ＝０は１ｓｂである。４−状態のコード化を、ｌｏｇｉｃ０＝００、ｌｏｇｉｃ１＝０１、ｌｏｇｉｃＸ＝１０およびｌｏｇｉｃＺ＝１１と想定する。ビット［ａ２，ａ１，ａ０，ｂ２，ｂ１，ｂ０］の状態がＸであれば、［ａ２，ａ１，ａ０，ｂ２，ｂ１，ｂ０，１］でのビットは、１（Ｘコード化のｍｓｂ）で、［ａ２，ａ１，ａ０，ｂ２，ｂ１，ｂ０，０］でのビットは０になる（Ｘコード化の１ｓｂ）。同様の手法は、その他の複数状態のシミュレーションに拡張するために使用することが可能である。明確化のために、この説明の大部分は、２−状態のシミュレーションに関して行われるが、原則は、４−状態やその他の数の状態に同様に適用可能である。
【００２９】
１つの半導体チップは、典型的に、多数のメモリインスタンスを有し、それぞれは図３に説明されているように定義されて、アドレスが決められる。これらのユーザメモリは、シミュレーションの目的でストレージメモリ１２２にマッピングされる。ユーザメモリのあるインスタンスは、ストレージメモリ１２２のある領域にマッピングされ、ユーザメモリの別のインスタンスは、ストレージメモリ１２２の異なる領域にマッピングされる、ということになる。
【００３０】
図３は、このマッピングのある実装を図説する。ストレージメモリ１２２は、典型的に、ユーザメモリのどの単独のインスタンスよりもはるかに大きい。したがって、ストレージメモリアドレスは、ユーザメモリアドレスよりも長い。例えば、ストレージメモリが１ＧＢであれば、ストレージメモリアドレスは、ビット単位のアドレスが望まれる場合には３３ビットを含む。対照的に、図３に示されるユーザメモリは、６ビットだけのアドレスを有する。６ビットユーザメモリアドレスは、ユーザメモリアドレスに２７ビットのオフセットを追加することによって、３３ビットのストレージメモリアドレスに転換される。このオフセットは、ビットｃ０、ｃ１、ｃ２などによって示される。１０ビットのメモリアドレスは、２３ビットのオフセットを追加することによって、３３ビットのストレージメモリアドレスに転換される。オフセットは、ユーザメモリの異なるインスタンスがストレージメモリの異なる領域にマッピングされるように選択される。つまり、ユーザメモリの２つの異なるインスタンスが、ストレージメモリの同じ場所に格納されてはならない。
【００３１】
さらに、オフセットは、ストレージメモリのパッキングの効率性を向上するように選択されることが好ましい。この点を図説する簡単な例として、以下に示すように、さまざまな長さのアドレスを有するユーザメモリのインスタンスを５つ有する半導体チップを想定する。
【００３２】
【表１】
2009517783.tif 000003
また、ストレージメモリアドレスは１３ビットと想定する。上記のユーザメモリインスタンスは、以下のように、ストレージメモリにマッピングされている可能性がある。
【００３３】
【表２】
2009517783.tif 000004
しかしながら、さらに効率的なマッピングは以下のようになる。
【００３４】
【表３−１】
2009517783.tif 000005
【００３５】
【表３−２】
2009517783.tif 000006
このマッピングによって、パックが緊密になり、ストレージメモリの無駄なスペースが少なくなる。その他のパック手法も使用することが可能である。
【００３６】
上記の手法の１つの利点は、シミュレーション中、ユーザメモリアドレスからストレージメモリアドレスへの変換の必要がないことである。シミュレーション中、関数への演算子は、シミュレーション中にすでに演算されているユーザメモリアドレスに存在することができる。上記の手法では、オフセットは、コンパイラによって前もって割り当てられ、シミュレーション中一定である。したがって、シミュレーション中演算子のユーザメモリアドレスがいったん決定されると、対応するストレージメモリアドレスは、決定されたオフセットを演算したユーザメモリアドレスに付加することによって迅速に決定することが可能である。対照的に、ユーザメモリアドレスとストレージメモリアドレスとの転換に変換が必要な場合、この変換が実行される間に待ち時間が発生する。
【００３７】
この手法のもう１つの利点は、さまざまなサイズのユーザメモリなど、多数のユーザメモリが共通のストレージメモリにマッピングされる。結果として、ユーザメモリの増加は、ストレージメモリを追加することだけによって実現することが可能である。
【００３８】
上記の手法だけが考えられるマッピングではない。例えば、ユーザメモリアドレスを直接使用する代わりに、対応するストレージメモリアドレスは、ユーザメモリアドレスに適用される簡単なロジック関数に基づくことが可能である。例えば、ストレージメモリアドレスは、対応するユーザメモリアドレスに対して、設定済みの「オフセット値」の加算に基づく可能性がある。ユーザメモリの各インスタンスのオフセット値はコンパイラによって決定され、待ち時間を少なくするように加算はハードウェアに実装されることが好ましい。オフセット値は、拡張される場合には、メモリヘッダ情報から検索される可能性がある。あるいは、参照テーブルを使用して検索される可能性がある。ユーザメモリの各インスタンスにはメモリＩＤが割り当てられて、参照テーブルはメモリＩＤを対応するオフセット値にマッピングする。メモリＩＤとオフセット値は実行時前にコンパイラによって演算されるので、参照テーブルは入力済みの可能性がある。
【００３９】
ロジック関数は「単純」であることが好ましい。つまり、実行時に迅速に評価することが可能で、単独のクロックサイクルまたは多くても数クロック周期以下であることが好ましい。さらに、ロジック関数の評価は、クロック周期に待ち時間を追加しないことが好ましい。この手法の１つの利点は、完全なソフトウェアシミュレータに比較すると、ソフトウェアシミュレータは、典型的に、ユーザメモリをシミュレーションするために多数の操作が必要なことである。ソフトウェアシミュレータでは、メインメモリ１１２の一部は、ユーザメモリをシミュレーションするために割り当てられる。正しいメモリアドレスを演算してから、メインメモリ１１２のそのアドレスにアクセスすると、典型的に、大幅な待ち時間が発生する。ハードウェアエミュレータに比較すると、上記の手法は、単純で拡張性が高い。ハードウェアエミュレータでは、ユーザメモリは、さまざまなハードウェア「ブロック」の間でパーティションされ、それぞれが、独自の物理的場所とアクセス方法を有することができる。パーティション自体は複雑になる可能性があり、ユーザからの手動支援が必要な可能性がある。さらに、シミュレーション中のユーザメモリへのアクセスは、正しいハードウェアブロックをまず特定することが必要で、その特定のハードウェアブロックに対するアクセス方法を使用することが必要であるため、さらに複雑になる可能性がある。
【００４０】
上記の例は、根本原則を図説するために、簡単なユーザメモリ宣言を基本とした。さらに複雑な変形が明らかである。例えば、ＳｙｓｔｅｍＶｅｒｉｌｏｇやＳｙｓｔｅｍＣなどさまざまな言語では、ｒｅｇ［  ］ｍ［  ］宣言の拡張がサポートされる。ｒｅｇ［４：０］［１２：９］［５：０］ｍ［０：５］［１０：１２］は、多次元宣言（ＳｙｓｔｅｍＶｅｒｉｌｏｇのパックとアンパック）の例である。この宣言は、１８語（［０：５］の６に、［１０：１２］の３を乗じる）のユーザメモリを定義し、それぞれの語の長さは１２０ビット（［４：０］の５に、［１２：９］の４、［５：０］の６を乗じる）である。ユーザメモリ全体では、１８×１２０＝２１６０ビットを含む。この場合、２＾１２＝４０９６であるため、１２ビットずつアドレスを決定することが可能であるが、典型的には、定義されたユーザメモリアドレスと対応する１２ビットとの間でさらに複雑な変換が必要になる。
【００４１】
代わりに、簡単なメモリ宣言に関する上記のように、ストレージメモリアドレスを取得するために、ユーザメモリにオフセットを加えることが可能である。このように、対応するストレージメモリアドレスは、［Ｃ  ａ２２  ａ２１  ａ２０  ａ１１  ａ１０  ｂ２２  ｂ２１  ｂ２０  ｂ１１  ｂ１０  ｂ０２  ｂ０１  ｂ００］のように定義することが可能で、Ｃは定数のオフセットで、ａｘｘビットは語のアドレスに対応して、ｂｘｘビットはビットアドレスに対応する。この例では、［ａ２２  ａ２１  ａ２０］は、ｍ［０：５］［  ］に対応する３ビットで、［ａ１１  ａ１０］はｍ［  ］［１０：１２］に対応する２ビットである。ビット［ｂ２２  ｂ２１  ｂ２０］は、ｒｅｇ［４：０］［  ］［  ］に対応して、［ｂ１１  ｂ１０］はｒｅｇ［  ］［１２：９］［  ］に対応し、［ｂ０２  ｂ０１  ｂ００］はｒｅｇ［  ］［  ］［５：０］に対応する。このマッピングには、最低の１２ビットではなく、１３ビット必要である。
【００４２】
上記の例では、アドレス［０：５］は、バイナリでは０００から１０１で、操作を行わずに、３ビット［ａ２２  ａ２１  ａ２０］として直接使用することが可能である。しかしながら、アドレス［１０：１２］は、バイナリでは１０１０から１１００で、２ビットではなく４ビットであるため、２ビット［ａ１１  ａ１０］として直接使用することはできない。代わりに、２ビット［ａ１１  ａ１０］にマッピングされるが、これは、多数の異なる方式において実現することが可能である。ある手法では、［ａ１１  ａ１０］は、１アドレスから１０を引いて計算される。すると、アドレス１０は［０  ０］にマッピングされて、アドレス１１は、［０  １］にマッピングされ、アドレス１２は［１  ０］にマッピングされる。
【００４３】
別の手法では、［ａ１１  ａ１０］は、アドレス［１０：１２］の最下位ビットを基本とする。例えば、アドレス範囲［１０２４：１０２７］は、アドレス［１００００００００００，１０００００００００１，１００００００００１０，１００００００００１１］を含む。最初の９ビットは、範囲のすべてのアドレスで同じである。したがって、１１ビットすべてを使用する代わりに、最後の２ビットだけを使用することが可能で、最初の９ビットは破棄される。アドレス１０２４は、ストレージメモリアドレスの［０  ０］にマッピングされ、１０２５は［０  １］にマッピングされ、１０２６は［１  ０］にマッピングされて、１０２７は［１  １］にマッピングされる。
【００４４】
ここで、アドレス範囲［１０２３：１０２６］を考えると、アドレスでは［０１１１１１１１１１１，１００００００００００，１０００００００００１，１００００００００１０］である。この例では、すべての１１ビットが異なる。しかしながら、最後の２つのビットは、それでも範囲の各アドレスを固有に特定する。アドレス１０２３は、［１  １］にマッピングされ、１０２４は［０  ０］にマッピングされ、１０２５は［０  １］にマッピングされ、１０２６は［１  ０］にマッピングされる。このように、ストレージメモリアドレスは、これらの２ビットが付加された固定オフセットを基本にすることが可能である。一般的に、アドレス範囲にＮ個のアドレスがあれば、ｃｅｉｌ（ｌｏｇ２（Ｎ））個の最下位ビットが範囲の各アドレスを固有に特定する。
【００４５】
ストレージメモリアドレスのユーザメモリアドレスを全く操作せずに直接使用することが望ましい場合は、さらに多くのビットが必要となる可能性がある。この例では、ｍ［０：５］［  ］は３ビットを使用し、ｍ［  ］［１０：１２］は４ビットを使用する（上記の例の２ビットではなく）。同様に、ｒｅｇ［４：０］［  ］［  ］、ｒｅｇ［  ］［１２：９］［  ］、ｒｅｇ［  ］［  ］［５：０］に対して、それぞれ、３、４、３ビットを使用する。この場合、全体では、最低の１２ではなく、３＋４＋３＋４＋３＝１７ビットとなる。マッピングはさらに少なくなる。しかしながら、介在する未使用ストレージメモリアドレスは、典型的には、その他のユーザメモリアドレスによって使用することが可能である。例えば、［４：０］［１２：９］［５：０］ｍ［０：５］［１０：１２］とｒｅｇ［４：０］［７：２］［５：０］ｍ［０：５］［１０：１２］は、ストレージメモリで衝突することなく、同様のオフセットＣにマッピングすることが可能である。
【００４６】
図４−８は、ストレージメモリ１２２、ローカルメモリ１０４とプロセッサ要素１０２の相互作用の例を図説する。図４は、本発明の第１の実施形態によるハードウェア加速型ロジックシミュレーションシステムのシミュレーションプロセッサ１０３の単独のプロセッサユニット１０３を図説する回路図である。各プロセッサユニット１０３は、プロセッサ要素（ＰＥ）３０２、ローカルキャッシュ３０８（この例ではシフトレジスタとして実装されている）、オプションの専用メモリ３２６、マルチプレクサ３０４、３０５、３０６、３１０、３１２、３１４、３１６、３２０、３２４およびフリップフロップ３１８、３２２を含む。プロセッサユニット１０３は、命令１１８によって制御され、その関連部分は図４の３８２として示されている。命令３８２は、この例では、Ｐ０、Ｐ１、Ｂｏｏｌｅａｎ  Ｆｕｎｃ、ＥＮ、ＸＢ１、ＸＢ２、およびＸｔｒａ  Ｍｅｍ（エキストラメモリ）のフィールドがある。各フィールドＸには、Ｘビットの長さを持たせる。命令の長さは、この例では、Ｐ０、Ｐ１、Ｂｏｏｌｅａｎ  Ｆｕｎｃ（ブーリアン関数）、ＥＮ、ＸＢ１、ＸＢ２、およびＸｔｒａ  Ｍｅｍの和となる。クロスバー１０１は、プロセッサユニット１０３に相互接続する。クロスバー１０１には、シミュレーションプロセッサ１００のＰＥ３０２またはプロセッサユニット１０３の数がｎで、各プロセッサユニットにクロスバーに対して２つの入力と２つの出力がある場合、２ｎ本のバスラインがある。
【００４７】
２−状態の実装では、ｎは、バイナリ（０または１）であるｎ個の信号を表す。４−状態の実装では、ｎは、４−状態のコード（０、１、ＸまたはＺ）または二重ビットコード（例えば、００、０１、１０、１１）であるｎ個の信号を表す。この場合、接続されているのは、実際には２ｎ個の電子（バイナリ）信号であるが、ｎをｎ個の信号とも呼ぶ。同様に、３ビットコード化（８つの状態）では、３ｎ個の電子信号、などとなる。
【００４８】
ＰＥ３０２は、２以下の入力（たとえば、ＮＯＴ、ＡＮＤ、ＮＡＮＤ、ＯＲ、ＮＯＲ、ＸＯＲ、定数１、定数０など）で任意のロジックゲートをシミュレートするように構成可能な構成可能ＡＬＵ（演算ロジックユニット）である。ＰＥ３０２がシミュレーションするロジックゲートの種類は、ＰＥ３０２がロジックゲートの特定の種類をシミュレーションするようにプログラムする、Ｂｏｏｌｅａｎ  Ｆｕｎｃに依存する。これは、３つ以上の入力でＰＥを使用することによって、３つ以上の入力のブーリアン操作に拡張することが可能である。
【００４９】
マルチプレクサ３０４は、Ｐ０ビットを有する選択信号Ｐ０に応答して、クロスバー１０１の２ｎバスラインのうちの１つから入力データを選択する。そして、マルチプレクサ３０６は、Ｐ１ビットを有する選択信号Ｐ１に応答して、クロスバー１０１の２ｎバスラインのうち１つから入力データを選択する。データがストレージメモリ１２２から読み取られていない場合、ＰＥ３０２は、演算子としてマルチプレクサ３０４、３０６によって選択された入力データを受信して（つまり、マルチプレクサ３０５はマルチプレクサ３０４の出力を選択する）、Ｂｏｏｌｅｎ  Ｆｕｎｃ信号によって示された構成ロジック関数にしたがって、シミュレーションを実施する。図４の例では、各プロセッサユニット１０３に対するマルチプレクサ３０４、３０６のそれぞれは、２ｎバスラインのうちのいずれかを選択することが可能である。クロスバー１０１は、必要ではないが、完全に非妨害で、完全に接続する。
【００５０】
データがストレージメモリ１２２から読み出されている間、マルチプレクサ３０５は、マルチプレクサ３０４の出力ではなく、ストレージメモリ１２２から出ている（直接的または間接的に）入力ラインを選択する。この方式では、ストレージメモリ１２２からのデータは、以下に詳細を説明するように、プロセッサユニットに入力することが可能である。
【００５１】
シフトレジスタ３０８の深さはｙ（ｙ個のメモリセルを有する）で、シミュレータプロセッサ１００のＰＥ３０２内が複数サイクルのロジック設計１０６の大量のゲートをシミュレーションする間に生成される中間値を格納する。
【００５２】
図４に示された実施形態では、マルチプレクサ３１０は、ＰＥ３０２の出力３７１−３７３、または、信号ＥＮのビットｅｎ０に応答してシフトレジスタ３０８の最後のエントリ３６３−３６４のいずれかを選択して、シフトレジスタ３０８の第１のエントリは、マルチプレクサ３０８の出力３５０を受信する。出力３７１を選択すると、ＰＥ３０２の出力がシフトレジスタ３０８に送信される。最後のエントリ３６３を選択すると、シフトレジスタ３０８の最後のエントリ３６３は、シフトレジスタ３０８の最後から外れて失われることなく、シフトレジスタ３０８の先頭に再循環される。この方式では、シフトレジスタ３０８は更新される。その他の実施形態では、マルチプレクサ３１０はオプションで、シフトレジスタ３０８は、ＰＥ３０２から直接入力データを受信することが可能である。
【００５３】
シフトレジスタ３０８の外側では、マルチプレクサ３１２は、シフトレジスタ３０８の１つの出力３５２としてＸＢ１ビットを有する選択信号ＸＢ１に応答して、シフトレジスタ３０８のｙ個のメモリセルのうちから１つを選択する。同様に、マルチプレクサ３１４は、シフトレジスタ３０８の出力３５８としてＸＢ２ビットを有する選択信号ＸＢ２に応答して、シフトレジスタ３０８のｙ個のメモリセルのうちから１つを選択する。マルチプレクサ３１６と３２０の状態に応じて、選択した出力は、プロセッサユニット１０３のデータ入力によって使用されるために、クロスバー１０１に送られる。
【００５４】
専用のローカルメモリ３２６はオプションである。シフトレジスタ３０８が処理できるよりもはるかに大型の設計を処理することができる。ローカルメモリ３２６は、入力ポートＤＩと出力ポートＤＯがあり、サイズが制限されているためにシフトレジスタ３０８がスピルオーバーできるように、データを格納する。つまり、シフトレジスタ３０８のデータは、メモリ３２６からロードおよび／または格納することができる。格納することができる中間信号値の数は、メモリ３２６の全体のサイズによって制限される。メモリ３２６は、比較的コストが低く高速であるため、この方式は、ロジックシミュレーションのための拡張可能、高速でコストが低い解決策を提供する。メモリ３２６は、ＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍから構成されるアドレス信号３７７によってアドレスが決定される。ＸＢ１とＸＢ２の信号は、それぞれ、マルチプレクサ３１２と３１４からの選択信号としても使用されたことに注意する。このように、これらのビットは、命令の残りの部分に応じて、異なる意味を有する。これらのビットは、図４では２度示されている。１度は全体的な命令３８２の一部として、もう一度は、ローカルメモリ３２６のアドレスを示すために使用されている３８０である。
【００５５】
入力ポートＤＩは、ＰＥ３０２の出力３７１−３７２−３７４を受信するように連結される。ＰＥ３０２によって演算される中間値は、シフトレジスタ３０８に送信されるが、ｙ位相後にシフトレジスタ３０８の最後から外れる（再循環されないと想定する）。このように、最終的には使用されるが、位相が発生する前には使用されない中間値の実行可能な代案としては、値をＰＥ３０２から専用ローカルメモリ３２６に直接送信して、シフトレジスタ３０８を完全に迂回する（値は、経路３７１−３７２−３７６−３６８−３６２からクロスバー１０１に同時に使用可能にする可能性があるが）。別のデータ経路では、シフトレジスタ３０８に送信される値は、その後、シフトレジスタ３０８からクロスバー１０１に出力することによって、メモリ３２６に移動して（データ経路３５２−３５４−３５６または３５８−３６０−３６２から）から、ＰＥ３０２からメモリ３２６に再入力する。シフトレジスタ３０８の最後で外れている値は、同様の経路３６３−３７０−３５６によってメモリ３２６に移動することが可能である。
【００５６】
出力ポートＤＯは、マルチプレクサ３２４に連結される。マルチプレクサ３２４は、信号ＥＮのビットｅｎ０の補足（〜ｅｎ０）に応答して、出力３６８として、ＰＥ３０２の出力３７１−３７２−３７６またはメモリ３２６の出力３６６のいずれかを選択する。この例では、信号ＥＮは２ビット、ｅｎ０とｅｎ１を含む。マルチプレクサ３２０は、信号ＥＮの別のビットｅｎ１に応答して、マルチプレクサ３２４の出力３６８またはマルチプレクサ３１４の出力３６０のいずれかを選択する。マルチプレクサ３１６は、信号ＥＮの別のビットｅｎ１に応答して、マルチプレクサ３１２の出力３５４またはシフトレジスタの最終エントリ３６３、３７０のいずれかを選択する。フリップフロップ３１８、３２２は、クロスバー１０１への出力のために、それぞれ、マルチプレクサ３１６、３２０の出力３５６、３６２をバッファする。
【００５７】
専用のローカルメモリ３２６は、第２の出力ポート３２７もあり、ストレージメモリ１２２に最終的につながる。この特定の例では、出力ポート３２７は、ローカルメモリのデータ出力を１度に１語ずつ読み出すために使用することが可能である。
【００５８】
図４に示された命令３８２を参照すると、フィールドは、一般的に、次のように分けることが可能である。Ｐ０とＰ１は、クロスバーからＰＥ３０２への入力を決定する。ＥＮは、主に２ビットのｏｐｃｏｄｅである。Ｂｏｏｌｅａｎ  Ｆｕｎｃは、ＰＥ３０２によって実装されるロジックゲートを決定する。ＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍのいずれかは、クロスバー１０１へのプロセッサユニットの出力を決定するか、または、ローカルメモリ３２６のメモリアドレス３７７を決定する。
【００５９】
ある実施形態において、４つの異なる操作モード（評価、操作なし、格納、およびロード）は、以下の表４に示されているように、信号ＥＮのビットｅｎ１とｅｎ０に従って、プロセッサユニット１０３でトリガすることが可能である。
【００６０】
【表４−１】
2009517783.tif 000007
【００６１】
【表４−２】
2009517783.tif 000008
一般的に、評価モードの主な機能は、ＰＥ３０２がロジックゲートをシミュレーションすることである（つまり、２つの入力を受け取って、２つの入力上で特定のロジック関数を実施して出力を生成する）。操作無しモードでは、ＰＥ３０２は操作を実施しない。このモードは、例えば、その他のプロセッサユニットが、このシフトレジスタ３０８からのデータに基づいた評価機能であるが、ＰＥが空回転している場合などに有用である。ロードと格納モードでは、データは、ローカルメモリ３２６からロードまたは格納される。ＰＥ３０２は、評価も実施している場合がある。ＷａｔｔとＶｅｒｈｙｅｙｅｎによって２００５年９月２８日に提出された米国特許出願第１１／２３８、５０５号、「Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｌｏｇｉｃ  Ｓｉｍｕｌａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ  ａｓ  Ｌｏｃａｌ  Ｃａｃｈｅ」には、これらのモードがさらに説明されており、参照により組み入れる。
【００６２】
この例では、ストレージメモリ１２２からの読み出しと書き込み（ローカルメモリ３２６からのロードや格納とは異なる）は、ＰＥ０上の特定のＰ０／Ｐ１フィールドオーバーロードによってトリガされる。ある実施形態では、ＰＥ０がＥＮ＝０１（つまり、操作無しモード）とＰ０＝Ｐ１＝００００の命令を受信すると、図５に示されているように、メモリトランザクションがトリガされる。メモリトランザクションをトリガするには、その他の命令も使用することが可能である。図５は、ｎ個のプロセッサ要素１０２Ａ−１０２Ｎとして表されているシミュレーションプロセッサ１００とローカルメモリ１０４を示す。図５では、ローカルメモリ１０４は、特定のプロセッサ要素専用のｎ個の個別のメモリ（図４のように）としてではなく、単独の構造として示されている。これは、単に図説を目的として行われた。図５に示された単独のローカルメモリ１０４は、図４に示されたｎ個のローカルメモリ３２６の連結である。図５は、書き込みレジスタ５１０と読み出しレジスタ５２０、およびデコーダ５２５も示す。書き込みレジスタ５１０は、ストレージメモリ１２２から読み出されたデータを、シミュレーションプロセッサ要素１０２に書き込むためのインターフェースを提供する。読み出しレジスタ５２０は、ストレージメモリ１２２に書き込まれるデータを、シミュレーションプロセッサ要素１０２から読み出すためのインターフェースを提供する。デコーダ５２５と制御回路５３５は、ストレージメモリのトランザクションの制御を助ける。
【００６３】
メモリトランザクショントリガ命令を受信すると、ＰＥ０命令のＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍのフィールドは、ローカルメモリ１０４へのアドレスとして解釈される。この特定の例では、アドレスは、語アドレスとビットアドレスを含む。例えば、フィールドＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍの一定数のビットは、語アドレスを表すことができ、残りのビットハビットアドレスを表す。図５では、アドレスは、ビット文字列０１０１０１０１（例に過ぎない）によって表される。制御回路５３５は、このメモリアドレスの語アドレス部分を、ｎ個すべてのプロセッサ要素に対応するローカルメモリ１０４の出力部分３２７に適用して、このローカルメモリアドレスに格納されたｎ個の語を読み出す。図５では、これらの語は、シンボル５４０Ａから５４０Ｎによって表される。語５４０Ａは、専用のローカルメモリ３２６Ａ（ＰＥ１０２Ａに対応）のアドレス１０１０１０１０の語アドレス部分に存在する語である。語５４０Ｂは，専用のローカルメモリ３２６Ｂ（ＰＥ１０２Ｂに対応）の同じアドレスに存在する語である。この特定の例では、ローカルメモリがその他の理由のために設計されているので、５４０Ａから５４０Ｎの語全体が読み出される。
【００６４】
しかしながら、ストレージメモリのトランザクションの場合、すべてのビットは必要ではない場合がある。この特定の例では、各語の影を付けた欄で示されるように、５４０Ａから５４０Ｎの各語の第１のビットだけが使用される。ビットアドレスは、第１のビットを選択するように、マルチプレクサ（図５には非表示）に対する出力として使用される。その他の実装では、その他あるいは追加のビットを使用することができる。これらの第１のビットは、読み出しレジスタ５２０に送信されて、ｎ個のＰＥのそれぞれから１ビットずつ存在するので、長さがｎの命令を共に形成する。別の実装では、これらの同じｎ個のビットは、語５４０Ａ、５４０Ｂ、５４０Ｃなど、使用可能なｎ個のビットの全体の長さ、またはその一部を使用して、取得することが可能である。この命令がストレージメモリトランザクションを決定する。ストレージメモリトランザクションは、ＰＥ０だけへの命令によってトリガされたことに注意する。一方で、残りのＰＥは、その他の命令を受信して実行することができるので、シミュレーションプロセッサ全体の効率を向上させる。
【００６５】
図６は、ｎビットストレージメモリ命令６４０の書式を示し、ストレージメモリアドレス、Ｒ／Ｗ（読み出し／書き込み）、ＥＮ（有効）、ＣＳ（チップ選択）、ＢＭ（ビットマスク有効）、ＸＰ（Ｘ／Ｚ状態あり）、ＭＶ（メモリ有効）、＃全行および最後のデータ長のフィールドを含む。
【００６６】
フィールドストレージメモリアドレスによって、影響があるストレージメモリの場所の完全なアドレスが与えられる。アドレスには、２段階の間接アドレスがあることに注意する。ＰＥに対する最初の命令は、アドレスＸＢ１，ＸＢ２、Ｘｔｒａ  Ｍｅｍを含んでいたが、これらは、ローカルメモリ１０４の場所をポイントする。ローカルメモリ１０４のその場所には、ストレージメモリアドレスのフィールドが含まれていて、このフィールドは、ストレージメモリ１２２の場所をポイントする。この間接性によって、ＰＥに送信される命令はかなり短縮されるが、完全なストレージメモリアドレスは、典型的に、フィールドＸＢ１、ＸＢ２、Ｘｔｒａ  Ｍｅｍよりかなり長い。これは、任意のある時点ですべてのユーザメモリをシミュレーションすることが必要ではないからでもある。例えば、チップは、典型的に、一度に１つのクロックドメインがシミュレーションされる。結果として、ローカルメモリは、典型的に、現在シミュレーションされているクロックドメインにはないユーザメモリのストレージメモリアドレスを含む必要がない。
【００６７】
フィールドＲ／Ｗは、メモリトランザクションの種類、読み出しか書き込みかを決定する。Ｒ／ＷがＷ（書き込み）に設定されていると、書き込み操作が指定されて、ストレージメモリアドレスフィールドによって指定される場所で、データがストレージメモリ１２２に書き込まれる。Ｒ／ＷがＲ（読み出し）に設定されていると、読み出し操作が指定されて、ストレージメモリアドレスフィールドによって指定される場所で、ストレージメモリ１２２からデータが読み出される。
【００６８】
データ量は、フィールドＢＭ、＃Ｆｕｌｌ−Ｒｏｗｓ（全行数）、Ｌａｓｔ  Ｄａｔａ−Ｌｅｎｇｔｈ（最後のデータ長）によって決定される。全行数のフィールドは、送信されるデータを含む６４１Ａから６４１Ｉのすべての行の数を決定する。最後のデータ長のフィールドは、データ送信に関与する最後の行の６４１Ｊの長さを決定する。各行６４１Ａから６４１Ｉは、ｎビットの長さと考えられるが、最後の行６４１Ｊは、最後のデータ長によって決定される。これにより、ｎの倍数ではない件数のデータが送信される。このように、任意のサイズデータの幅がサポートされる。データが２−状態としてモデル化される場合、送信されるデータの全体量は、ユーザが指定したデータ幅のサイズに等しい。４−状態では、２ビットが各単独ビットの状態を表すために使用されるので、全体量はこの２倍になり、その他の数の状態ではその数の倍になる。
【００６９】
ＢＭが設定されていない場合、ビットマスキングが無効であり、この場合、６４１Ａから６４１Ｊの各行はデータとして解釈される。ＢＭが設定されている場合、ビットマスキングが有効で、この場合、１行おきの６４１Ａ、Ｃ、Ｅなどがビットマスクと解釈されて、データの次の行６４１Ｂ、Ｄ、Ｆなどに適用される。ビットは１ビットずつマスクされることがよくあるため、ビットマスクは、典型的に、データと同じ幅を有する。従って、ビットマスキングは、設定されると、データの全体量を２倍にする。これは、例えば、ユーザはビットマスキングを現在の状態を表すビット未満に適用することができるので、複数の状態のシミュレーションの場合には真とは言えない。例えば、４−状態では、各ビットの状態は２ビットで表されるので、ビットマスキングは２ビットの１つだけに適用することができる。
【００７０】
ＥＮとＣＳとは、メモリ操作を実際に実施するかどうかを決定するために、実行時に専用ハードウェア１３０によって使用されるフィールドである。ＥＮとＣＳとは、典型的に、コンパイラによって演算されていない。しかし、シミュレーション中早い段階で演算される。ＥＮとＣＳの両方は、特定のメモリ操作が発生するためには、有効であることが必要である。書き込み時、ＥＮまたはＣＳが無効になっていると、メモリ操作（必要な可能性があるため以前にコンパイラによって予定された）は発生しない。ＥＮビットの意味はＲ／Ｗビットに依存する。Ｒ／Ｗビットが読み出し操作を指定していると、ＥＮは、「出力有効」ビットとして操作する。Ｒ／Ｗビットが書き込み操作を指定していると、ＥＮは、「書き込み有効」ビットとして操作する。
【００７１】
フィールドＸＰとＭＶはオプションである。４−状態のシミュレーション中に使用される。４−状態のシミュレーションでは、変数は、０（ロジック低）または１（ロジック高）に加えて、値Ｘ（未初期化または不一致）またはＺ（非駆動）の値をとることが可能である。例えば、シミュレーション中、ＥＮビットは、０または１の代わりにＸまたはＺにすることができる。同様に、ストレージメモリアドレスのビットは、０または１の代わりにＸまたはＺにすることができる。これは、一般的に、実行時に動的に生成されるすべての値について真である。しかしながら、これらの変数のすべての４−状態の値を表すには、２倍のビットが必要となる。４−状態のＥＮ信号には１ビットではなく２ビット、４−状態のＣＳ信号のためには１ビットではなく２ビット、さらに、ストレージメモリアドレスのビットのａ０のそれぞれにも２倍のビットとなるので、４−状態のストレージメモリアドレスのサイズの２倍となる。完全な４−状態の表現は、ストレージメモリ命令６４０の長さを大幅に増加させる。
【００７２】
代わりに、この例では、ストレージメモリ命令６４０は、ローカルメモリ１０４の４−状態の表現に格納される。しかしながら、読み出しレジスタ５２０は、２−状態の表現だけを受信する。これは必要ではないが、最適化する。これらの変数のすべての４−状態の表現を変換させる代わりに、２−状態の表現だけを変換して、フィールドＸＰまたはＭＶは、動的に生成される変数のいずれかがＸまたはＺであれば無効に設定する。４−状態のコード化は、ロジック低では００、ロジック高では０１、Ｘでは１０、Ｚでは１１と想定する。１ｓｂは、ロジックレベルが有効である（つまり、ＸまたはＺではない）と想定して、ロジックレベル（０または１）として解釈することが可能で、ｍｓｂは、ロジックレベルが有効であるかどうかを示すとして解釈することが可能である。状態はＸまたはＺであるため、ｍｓｂ＝１は、無効なロジックレベルを示し、ｍｓｂ＝０は有効なロジックレベルを示す。２−状態の表現は、４−状態コード化のｌｓｂだけを送信し、各変数の各ｍｓｂを送信する代わりに、２つの変数ＸＰとＭＶが無効な変数を示すために使用される。
【００７３】
ＸＰまたはＭＶのいずれかを無効に設定すると、ストレージメモリアドレス、ＥＮ、ＣＳなどのいずれかのビットが無効であるため、メモリの書き込み操作は実施されない。メモリの読み出し操作は、エラーを示すために、データ値にＸを返す。エラー処理のケースを促進するために、この実装では、２つの別々のビットＸＰとＭＶが使用された。無効なＸＰは、ハードウェアメモリインターフェースＢ１４４に、無効なアドレスまたは制御が存在することを示す。無効なＭＶは、ハードウェアメモリインターフェースＢ１４４に、メモリが現在無効な状態にあることを示す。両方のフィールドは、操作の間持続し、動的（例えば、ユーザロジック制御により）または静的（例えば、コンパイラによるスケジュール）にリセットすることが可能である。例えば、メモリが無効な状態にある場合、エラー処理は、メモリ全体が無効に見えることを（メモリがＸアウトする）要求することができる。このためにＭＶビットを使用することが可能である。ＭＶビットは、エラーが発生すると、無効に設定される。これにより、メモリが有効ではないことと、そのように処理されなければならないことを示す。ＭＶビットは、例えば、直接メモリをリセット、または次の有効な書き込みリクエストが発生した場合に有効にリセットすることが可能である。メモリリセット操作はハードウェア、ソフトウェアまたはドライバレベルで実装することが可能である。メモリは、書き込みリクエストの実行前にＸ（エラー状況を示す）で入力されて、その後のユーザのロジックが有効なドレスで書き込まれたデータを正しく読み出すが、その他任意のアドレス場所での読み出し時にはＸを読み出すように影響する。これは、ＭＶとＸＰフィールドの使用の一例である。追加の動作を必要に応じて実装することができる。ＭＶフィールドは、動的制御信号として使用することが可能で、一定のユーザロジックまたはコンパイラが原因のエラーのサポートを可能にする。
【００７４】
ＸＰに関しては、４−状態のコード化のｍｓｂは、ビットが有効であるか無効であるかどうかを示すことがすでに示された。有効な場合、実際のビット値は、４−状態のコード化のｌｓｂによって与えられる。従って、ユーザアドレスビットの４−状態のコード化のｌｓｂ（つまり、２−状態の表現）は、ストレージメモリアドレスフィールドにコピーされる。さらに、４−状態のコード化のｍｓｂの値は、ＸまたはＺを検出するようにチェックされる。このように、４−状態のモードでは、レジスタ５４０Ａから５４０Ｎは、４−状態の表現を格納していて、つまり、ｍｓｂとｌｓｂがある。ｌｓｂビットは、読み出しレジスタ５２０にコピーされるが、ｍｓｂビットはコピーされない。しかし、ＸＰは、すべてのｍｓｂビット（ＭＶのｍｓｂを除く）の論理ＯＲとしてハードウェア内で演算される。この演算は同じクロック周期で実施されるので、待ち時間を発生させない。ＸＰ値がすでにロジック１に設定されていた場合、あるいは、ロジックＸまたはロジックＺがｍｓｂビットのいずれかで検出されて不一致が発生した場合、メモリ命令６４０のＸＰビットは、ロジック１（つまり無効）に設定される。ロジック１値は、単独ビット（２−状態）として読み出しレジスタ５２０にコピーされるが、２−ビット（４−状態）値としてローカルメモリ１０４（非表示の別の操作によって）に再び書き込まれる。これによって、追加の動的ロジックエラー操作もトリガされる（例えば、＄ｄｉｓｐｌａｙ（）関数）。
【００７５】
ストレージメモリトランザクションが、ストレージメモリへの書き込みである場合、書き込み操作に使用されるデータ（およびビットマスク）（図６の行６４１Ａから６４１Ｊに含まれている）は、ローカルメモリ１０４内の連続したメモリ場所に含まれている。つまり、メモリ命令は、アドレスＸＢ１、ＸＢ２、Ｘｔｒａ  Ｍｅｍに存在する。このデータ命令が書き込み命令で、Ｊ行が指定されると、データは、ＸＢ１、ＸＢ２、Ｘｔｒａ  Ｍｅｍの後のＪメモリ場所に存在する。データは、ローカルメモリ１０４に、インターリーブまたはその他の方式で格納することができるので、「後の」は、必ずしも直後（つまり、１度にビット１つだけを増加）を意味しないことに注意する。ストレージメモリ１２２に書き込まれるデータは、ローカルメモリ１０４から読み出しレジスタ５２０に送信され、図５に示された同じ経路をたどってストレージメモリ１２２へ向かう。
【００７６】
ストレージメモリのトランザクションがストレージメモリからの読み出しであれば、行６４１Ａから６４１Ｊは不要である（有効になっている場合のビットマスキングを除く）。ストレージメモリアドレスは、ストレージメモリに渡されて、データはストレージメモリからシミュレーションプロセッサに戻される。データ量は、ＢＭ、全行数および最後のデータ長によって決定される。ストレージメモリから呼び出されたデータは、シミュレーションプロセッサに書き込むことが可能になるまで、書き込みレジスタ５１０に格納される。
【００７７】
図６は例である。その他の書式が明らかである。例えば、フィールドＸＰとＭＶは、２−状態の操作がシミュレーションされている場合には、不要である。別の例として、フィールドＥＮとＣＳは、２つの別々のビットではなく、単独のＥＮビットとして実装される可能性がある。最後の例として、ＢＭは、ビットマスキング機能がサポートされていない場合、排除される可能性がある。
【００７８】
図７を参照すると、データが準備できると、データを受信するＰＥは、ＥＮ＝１１（つまり格納モード）とＰ０＝Ｐ１＝ＦＦＦＦで命令を受信する。メモリトランザクションがトリガに関して、この特定の命令は例であり、データをロードするその他の命令を使用できる。これらのＰＥもすべて同じＸＢ１、ＸＢ２、Ｘｔｒａ  Ｍｅｍフィールドを受信する。図４を参照すると、格納モードでは、データは専用のローカルメモリ３２６に格納される。Ｐ０＝Ｐ１＝ＦＦＦＦを設定すると、マルチプレクサ３０５をトリガして、書き込みレジスタ５１０から入力ラインを選択して、ストレージメモリから受信したデータを、ＸＢ１、ＸＢ２、Ｘｔｒａ  Ｍｅｍによって決定されたアドレス（図７では０１０１０１０１）でローカルメモリ１０４に書き込む。図７の例では、すべてのＰＥは、データを受信するようにスケジュールされるが、これは不要である。データは、ＰＥのサブセットのみによって受信される。典型的に、ストレージメモリからの読み出しがまずリクエストされたときと、呼び出したデータが書き込みレジスタ５１０で使用可能になるときとの間には待ち時間が存在する。しかしながら、この待ち時間は決定論的である。コンパイラ１０８は、この待ち時間を演算することが可能で、これらの２つの命令の間に十分な時間の待ち時間を確保する。
【００７９】
送信されるデータのタイプはコンテキストに依存する。典型的に、ユーザメモリに格納されるデータは、シミュレーションを実行するために、ストレージメモリとシミュレーションプロセッサの間を相互に送信される。しかしながら、その他の種類のデータも送信される可能性がある。例えば、メインメモリ１１２、ストレージメモリ１２２からのＤＭＡには、データを「予めロード」することが可能である。このデータは、ユーザメモリのＲＯＭタイプと同様に、読み出し専用にすることができる。また、ユーザメモリに全く格納されないデータである可能性もある。この能力は、刺激データそのものは大型データである可能性があるため、刺激生成として有用である。
【００８０】
図８は、シミュレーションプロセッサ１００とストレージメモリ１２２の間のインターフェースの例を図説する模式図である。この特定の例は、８１０と８２０の２つの部分に分けられ、それぞれ、独自の読み出しＦＩＦＯ、書き込みＦＩＦＯおよび制御がある。８１０と８２０の２つの部分は、中間インターフェース８５０から相互に通信する。この区分は必要ないが、この手法の１つの利点は設計がモジュール化されることである。例えば、ストレージメモリ側８２０の追加の回路は、例えば、異なる種類のユーザメモリの特徴をシミュレーションするためなど、さらに多くの機能性を導入するために付加することが可能である。さまざまな種類のユーザメモリの例には、ビットマスキング（メモリ語の選択されたビットだけが格納される）やコンテンツアドレスメモリ（読み出し操作は、ハードコードされたアドレスではなくデータを検索する）を含む。同じことは、シミュレーションプロセッサ側８１０でも実行できる。
【００８１】
図８のインターフェースは、次のように機能する。ストレージメモリのトランザクションがストレージメモリへの書き込みである場合、ストレージメモリアドレスは、読み出しレジスタ５２０から書き込みＦＩＦＯ８１２、インターフェース８５０、読み出しＦＩＦＯ８２４、メモリ制御装置８２８へと流れる。データは同じ経路に沿って流れ、最終的に、ストレージメモリ１２２に書き込まれる。ストレージメモリトランザクションがストレージメモリからの読み出しである場合、ストレージメモリアドレスは、以前と同じ経路に沿って流れる。しかし、ストレージメモリ１２２からのデータは、メモリ制御装置８２８を通って、書き込みＦＩＦＯ８２２からインターフェース８５０、読み出しＦＩＦＯ８１４、書き込みレジスタ５１０、シミュレーションプロセッサ１００に流れる。
【００８２】
ストレージメモリ１２２からの読み出しと書き込みは、プログラムメモリ１２１からシミュレーションプロセッサ１００への命令の送信と干渉せず、シミュレーションプロセッサ１００による命令の実行とも干渉しない。シミュレーションプロセッサ１００がストレージメモリ命令からの読み出しに出会うと、次の命令を実行する前に、その命令の完了を待機する必要はない。事実、シミュレーションプロセッサ１００は、ストレージメモリへの読み出しや書き込みがインターフェース回路の残りの部分でパイプラインされて実行されている間（データの依存性がないことを想定）、続けてその他の命令を実行することができる。これは、処理性能のかなりの利点となる。
【００８３】
また、シミュレーションプロセッサ１００上で命令の実行するための操作頻度と、ストレージメモリ１２２にアクセスするためのデータ送信頻度（帯域幅）は、一般的に異なることにも注意する。実際には、命令はプログラムメモリ１２１から呼び出されるので、命令実行の操作頻度は、典型的には、プログラムメモリ１２１への帯域幅によって限定される。ストレージメモリ１２１へ／からのデータ送信頻度は、典型的に、ストレージメモリ１２１への帯域帯（例えば、制御装置８２８とストレージメモリ１２１の間）、シミュレーションプロセッサ１００へのアクセス（読み出しレジスタ５１０と書き込みレジスタ５２０から）、または、帯域帯全体のインターフェース８５０のいずれかにより制限される。
【００８４】
図９−１４は、図５−８に示されたアーキテクチャのある変形を示す。図９は、図５に示されているメモリアーキテクチャの代わりのアーキテクチャを示す。図９のアーキテクチャは図５のアーキテクチャに類似する。両方のアーキテクチャは、書き込みレジスタ５１０、読み出しレジスタ５２０およびシミュレーションプロセッサ１００を含む。さらに、シミュレーションプロセッサ１００は、１０２Ａから１０２ＮのＰＥとローカルメモリ１０４を含む。
【００８５】
しかし、図９のアーキテクチャは以下の点で異なる。まず、ローカルメモリ１０４は、二重ポートメモリである。データ語５４０Ａから５４０Ｎは、ポート３２７Ａ―３２７Ｎからローカルメモリ１０４から読み出されるとともに、ポート３２７Ａ−３７２Ｎからローカルメモリ１０４に再び書き込まれる。これは、直接書き込みと呼ぶことができる。実際の実装においては、各ポート３２７は、２つの別々のポートとして実現することができるが、図９では、便宜上単独の双方向ポートとして示されている。また、ローカルメモリ１０４は、単独構造として示されているが、この例では、特定のプロセッサ要素専用のｎ個の個別のメモリ３２６として実装されている（図４のように）ことも思い出されたい。
【００８６】
この例では、各データ語は、ｍビットの長さで、読み出しレジスタ５２０と書き込みレジスタ５１０によって処理される語はｎビットの長さである。さらに、ｍとｎの間には任意の関係がサポートされるが、ｍ＞ｎであることを想定する。５４０Ａから５４０Ｎの各データ語の最初のｎビットは、読み出しレジスタ５２０の場合には、１対１で、ｎビットにマッピングされる。データ語５４０の残りのビットは、アーキテクチャに応じて、任意の方式で、ｎ個の読み出しレジスタビットにマッピングすることが可能である。さらに、５４０Ａから５４０Ｎの各データ語の最初のビットも、読み出しレジスタ５２０の対応するビットにマッピングすることができる。つまり、データ語５４０Ａの最初のビットは、ビットｂ０にマッピングすることができ、データ語５４０Ｂの最初のビットはビットｂ１、データ語５４０Ｃの最初のビットはビットｂ２に、とマッピングすることが可能である。この代わりのマッピングは、図９において、各最初のビットから伸びる２つの線によって表されている。データ語５４０Ｂの場合、最初の直線は最初のビットから伸びて、ビットｂ０に接続し、３つのセグメントのある２番目の線は最初のビットから伸びてビットｂ１に接続する。物理的に、この機能性は、マルチプレクサとデマルチプレクサによって実装することが可能である。図１０−１４に示されるように、このアーキテクチャでは、ビットレベルまたは語レベルでデータ処理に柔軟性が生まれる。
【００８７】
別の違いは、図９のアーキテクチャで、ストレージメモリ１２２を迂回するループバック経路９１０を含む。ループバック経路９１０を有効にすることによって、データは、ストレージメモリ１２２を通過せずに、読み出しレジスタ５２０から、書き込みレジスタ５１０に直接送信することが可能である。アナログ式では、ループ転送経路９２０によって、データは、ＰＥファブリック１０２を通過せずに、相互接続システム１０１から、メモリポート３２７に直接送信することができる。ある変形においては、データがローカルメモリ１０４からシミュレーションプロセッサ１００の入力にループバックされると、ループバック経路９１０は、読み出しレジスタ５２０または書き込みレジスタ５１０を迂回できるので、ループバックデータ送信の待ち時間が少なくなる。
【００８８】
図１０−１４は、図９のアーキテクチャによって実装可能な別の読み出しと書き込み操作を図説する。図１０は、図５と同じ操作を示す。ＰＥ１０２の１つは、「スカラーからストレージメモリへ」のトランザクションをトリガする命令を受信する。「スカラーからストレージメモリへ」というラベルは、ローカルメモリ１０４のデータがスカラー方式（３２７Ａから３２７Ｎの各ポートで１ビット）で処理されるために使用されて、（例えば、書き込みレジスタ５１０ではなく）データはローカルメモリ１０４とストレージメモリ１２２との間で送信される。図５のように、命令のＸＢ１、ＸＢ２とＸｔｒａ  Ｍｅｍのフィールドは、ローカルメモリ１０４へのアドレスとして解釈される。制御回路５３５は、このメモリアドレスの語アドレス部分を、すべてのｎ個のプロセッサ要素に対応するローカルメモリ１０４の出力ポート３２７に適用して、このローカルメモリアドレスで格納されているｎ個のデータ語５４０を読み出す。ハードウェアは、図１０の太線によって示されているように、対応する読み出しレジスタのビットｂｎに対して、各データ語５４０の最初のビットを接続するようにトリガされる。デコーダ５２５は、図６に関する上記のように、メモリの命令を解釈する。
【００８９】
図１１は、「ベクトルからストレージメモリへ」のトランザクションを示す。操作は、図１０に類似するが、命令は、５４０Ａから５４０Ｎの各データ語からの１ビットではなく、単独のデータ語５４０Ｊ内の多数のビットからであることを指定している点が違う。従って、これは、「ベクトル」メモリ操作と呼ばれる。
【００９０】
ローカルメモリ１０４とストレージメモリ１２２の間でデータを送信するのではなく、その他の操作がデータを書き込みレジスタ５１０に送信する可能性がある。「スカラーから書き込みレジスタへ」のトランザクションは、図１０に類似しているが、マルチプレクサがデータを読み出しレジスタ５２０から、デコーダ５２５へではなく、書き込みレジスタ５１０へ送る点が異なる。同様に、「ベクトルから書き込みレジスタへ」のトランザクションは図１１に類似しているが、データは、デコーダ５２５へではなく、書き込みレジスタ５１０に送られる点が異なる。これらの「書き込みレジスタ」トランザクションでは、ストレージメモリが関与しないので、データはストレージメモリ命令（図６に表示されているように）ではない可能性が高い。しかし、これらの操作は、ＰＥ１０２が使用するために、ローカルメモリ１０４からデータを送信するためだけに使用することができる。
【００９１】
図１２と１３は、ローカルメモリ１０４にデータを書き込む２つの例を示す。どちらの例でも、データは、書き込みレジスタ５１０からローカルメモリ１０４に書き込まれる。図１２では、操作は、書き込みレジスタ５１０からのデータが５４０Ａから５４０Ｎの各データ語に１ビットずつ書き込まれて、専用ローカルメモリ３２６Ａ−３２６Ｎのそれぞれに１ビットとして格納されているので（ポート３２７Ａ−３２７Ｎから）、「スカラーへの書き込みレジスタ」トランザクションである。図１３では、書き込みレジスタ５１０からのデータは、すべて、単独のデータ語５４０Ｊと対応する専用ローカルメモリ３２６Ｊに書き込まれているので（ポート３２７Ｊから）、操作は、「書き込みレジスタからベクトルへ」のトランザクションである。図１４は、図７と同様である「書き込みレジスタからＰＥへ」のトランザクションを示す。
【００９２】
これらの操作は組み合わせて、高速ベクトルからスカラー、スカラーからベクトルへの変換を実装することができる。データが、専用ローカルメモリ３２６Ｊの「ベクトル」フォーマットに格納されている場合、「ベクトルから書き込みレジスタへ」のトランザクションと「書き込みレジスタからスカラーへ」のトランザクションを組み合わせることによって、スカラー書式に変換することができる。同様に、スカラーからベクトルへの変換は、「スカラーから書き込みレジスタへ」のトランザクションと「書き込みレジスタからベクトルへ」のトランザクションを組み合わせることによって、実装できる。これは、ベクトルとスカラーのモード操作をスイッチする場合には利点である。
【００９３】
図９−１４の例は、図５、図１５Ａおよび１５Ｂに比較するとデータ処理が複雑になり、さらに複雑な関数をサポートする例外処理機能を使用するアーキテクチャの回路図である。図１５Ａでは、例外処理機能１５１０が、ループバック経路９１０の代用経路として挿入される。直接のループバックの場合、データは読み出しレジスタ５２０から書き込みレジスタ５１０に直接送信される。代用経路では、データは、読み出しレジスタ５２０から例外処理機能１５１０、書き込みレジスタ５１０に送信される。例外処理機能は、多数のさまざまな関数を処理することができて、例えば、その他の回路、プロセッサまたはデータソース／シンクに接続するその他のポートを有する場合がある。図１５Ｂは、代わりのアーキテクチャを示し、読み出しレジスタ５２０と書き込みレジスタ５１０の相互作用は、例外処理機能１５１０によって処理される。読み出しレジスタ５２０から書き込みレジスタ５１０への直接ループバック経路、ストレージメモリ１２２との相互作用などは、すべて、例外処理機能１５１０によって処理される。
【００９４】
例外処理機能１５１０は、典型的に、マルチビットイン、マルチビットアウト機器である。ある設計においては、例外処理機能１５１０は、ＰｏｗｅｒＰＣコア（あるいはその他のマイクロプロセッサまたはマイクロ制御装置コア）を使用して実装される。その他の設計では、例外処理機能１５１０は、（汎用）演算ユニットとして実装できる。設計に応じて、例外処理機能１５１０は、さまざまな場所に実装できる。例えば、例外処理機能１５１０がＶＬＩＷシミュレーションプロセッサ１００の一部として実装されると、その操作は、ＶＬＩＷ命令１１８によって制御することができる。図４を参照すると、ある実装においては、一部のプロセッサユニット１０３は、ＰＥ３０２が、マルチプレクサ３０５、３０６から、単独のビット入力ではなく、マルチビット入力を受信するように、修正される。ＰＥ３０２は、その後、受信したベクトルデータ上で演算関数を実行できる。データは、例えば、図１０−１３に図説した技法を使用して、ベクトル形式とスカラー形式との間を変換できる。
【００９５】
代わりの手法においては、例外処理機能１５１０は、ＶＬＩＷシミュレーションプロセッサ１００外部の回路（および／またはソフトウェア）によって実装することができる。例えば、図８を参照すると、例外処理機能１５１０は、８１０上ではあるが、シミュレーションプロセッサ１００の外部の回路上に実装することができる。この手法の１つの利点は、例外処理機能１５１０はＶＬＩＷ命令１１８によって機能しないので、シミュレーションプロセッサ１００の残りの部分によってロックステップにおいて操作される必要がないことである。さらに、例外処理機能１５１０は、シミュレーションプロセッサのアーキテクチャによる制限を直接受けないので、大量のデータ操作を処理するように容易に設計できる。
【００９６】
別の変形では、上記のメモリトランザクションは、ビットレベルではなく、語レベルで実装される。例えば、図５では、各語５４０Ａから５４０Ｎの１ビットがメモリトランザクションに関与した。この変形では、語全体（あるいはさらに一般的には、ビットの任意のサブセット）が関与する。この変形では、ＰＥは、同じ幅のデータ上で操作するように構成されることが好ましい。例えば、ＰＥは、２ビットで表現されるそれぞれ４−状態の演算を備えて、４−状態変数上で操作するように構成することができる。この場合、メモリトランザクションは、５４０Ａ−５４０Ｎの語から２ビットを検索することができる。４−状態とその他の複数状態の操作に関する詳細は、２００５年１０月３１日に提出された米国仮特許出願第６０／７２３，０７８号、「ＶＬＩＷ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  Ｕｓｉｎｇ  Ｍｕｌｔｉ−Ｓｔａｔｅ  Ｌｏｇｉｃ」に説明されており、参照して組み入れる。
【００９７】
本発明は、いくつかの実施形態に関して上記に説明したが、本発明の範囲内でさまざまな変更を行うことができる。例えば、本発明は、同じＰＥのコンテキストで説明されたが、代わりの実施形態は、異なる種類のＰＥと異なる数のＰＥを使用することができる。また、ＰＥは、同じ接続性を有する必要はない。また、ＰＥはリソースを共有することもできる。例えば、２つ以上のＰＥは、同じシフトレジスタおよび／またはローカルメモリに書き込むことができる。この逆も真であり、単独のＰＥは、２つ以上のシフトレジスタおよび／またはローカルメモリに書き込むことができる。
【００９８】
別の例として、図４に示された命令３８２は、Ｐ０、Ｐ１などの個別のフィールドを示す。また、命令セットの操作全体が、４つの主要な操作モードのコンテキストで説明された。これは、図説の明確化のために行われた。さまざまな実施形態では、命令セットのさらに高度なコード化によって、フィールドが重なり合う命令、または、物理的な構造または操作モードと１対１の対応を持たないフィールドの命令にすることができる。フィールドＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍの使用において、一例が示された。これらのフィールドは、命令の残りの部分に応じて、異なる意味になる。ローカルメモリアドレスは、ＸＢ１、ＸＢ２およびＸｔｒａ  Ｍｅｍ以外のフィールドによって決定される場合がある。さらに、操作の対称性または双対性は、命令を短くするために使用することもできる。
【００９９】
別の態様では、本発明のシミュレーションプロセッサ１００は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）またはＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）またはその他の種類の集積回路で実現することができる。また、別の回路基板上で実装したり、ホストコンピュータ１１０に差し込む必要もない。別のホストコンピュータ１１０はない場合がある。例えば、図１を参照すると、ＣＰＵ１１４とシミュレーションプロセッサ１００はさらに密接に集積させることができ、または、おそらく、単独の集積演算デバイスとして実装することさえできる。
【０１００】
別の例として、ストレージメモリ１２２は、中間結果意外の情報を格納するために使用することができる。例えば、ストレージメモリ１２２は、刺激生成のために使用することができる。シミュレーションされている設計の刺激データは、ホストコンピュータ１１０からのＤＭＡアクセスを使用して、ストレージメモリ１２２に格納することができる。実行時に、このデータは、上記のメモリアクセス方法によってストレージメモリ１２２から受信される。この例では、刺激はＲＯＭ（読み出し専用メモリ）としてモデル化される。逆数も利用することができる。例えば、一定のデータ（例えば、関数シミュレーションの履歴）をキャプチャして、ホストコンピュータ１１０からのＤＭＡを使用して検索するためにストレージメモリ１２２に格納することができる。この場合、メモリは、ＷＯＭ（書き込み専用メモリ）としてモデル化される。代わりの手法では、ホストコンピュータ１１０は、刺激データを、シミュレーションプロセッサ１００に対してＲＯＭとしてモデル化されたストレージメモリ１２２に送信して、シミュレーションプロセッサ１００に対してＷＯＭとしてモデル化されたストレージメモリ１２２からの応答データを取得することができる。
【０１０１】
ロジックシミュレーションのために設計されたある実装では、プログラムメモリ１２１とストレージメモリ１２２は、異なる帯域幅とアクセス方法を有する。図８を参照すると、８１０と８２０の２つの部分は、インターフェース８５０によって接続されたメインプロセッサ８１０とコプロセッサ８２０としてモデル化できる。プログラムメモリ１２１は、メインプロセッサ８１０に直接接続して、１秒あたり２０００億ビットを超える帯域帯で実現されている。ストレージメモリ１２２は、コプロセッサ８２０に接続して、１秒あたり２００億ビットを超える帯域帯で実現されている。ストレージメモリ１２２は、メインプロセッサ８１０に直接接続されているので、待ち時間（インターフェース８５０を含む）は１つの因子である。ある特殊な設計では、プログラムメモリ１２１は、ｒｅｇ［２，５６０］ｍｅｍ［８Ｍ］として物理的に実現され、ストレージメモリ１２２は、ｒｅｇ［２５６］ｍｅｍ［１２５Ｍ］として物理的に実現されているが、ハードウェアとソフトウェアロジックにより、ｒｅｇ［６４］ｍｅｍ［５００Ｍ］にさらに分割される。相対的には、プログラムメモリ１２１は、広く（語あたり２，５６０ビット）て浅い（８００万語）が、ストレージメモリ１２２は、狭く（語あたり６４ビット）て深い（５億語）。これは、データ送信の量や頻度に対してどのＤＭＡ送信（プログラムメモリ１２１とストレージメモリ１２２のいずれか）を使用するかを決定する場合に考慮しなければならない。このために、ＶＬＩＷプロセッサは、共同シミュレーションモードまたは刺激モードで操作することができる。
【０１０２】
共同シミュレーションモードでは、ソフトウェアシミュレータは、内部変数のためにメインメモリ１１２を使用して、ホストのＣＰＵ１１４上で実行されている。ハードウェアのマッピングされた部分のシミュレーションが必要な場合、ソフトウェアシミュレータは、現在の入力データに基づいて（その時のステップで）ハードウェアのマッピングされた部分からの応答データに対してリクエストを気道する。このモードでは、ソフトウェアドライバ（ソフトウェアプログラムでソフトウェアシミュレータに直接通信して、ハードウェアシミュレータ１３０へのＤＭＡインターフェースに対するアクセスを有する）が、プログラムメモリ１２１へのＤＭＡを使用して、ソフトウェアシミュレータから、ハードウェアシミュレータ１３０に現在の入力データ（単独の刺激ベクトル）を送信する。この入力データセットの実行を完了すると、リクエストした応答データ（単独の応答ベクトル）もプログラムメモリ１２１に格納される。そして、ソフトウェアドライバは、ＤＭＡを使用して、応答データをプログラムメモリ１２１から検索して、ソフトウェアシミュレータに再度通信する。
【０１０３】
刺激モードでは、ソフトウェアシミュレータをホストＣＰＵ１１４上で実行する必要がない。ソフトウェアドライバだけが使用される。このモードでは、ハードウェア加速装置１３０は、刺激データを準備し（ホストコンピュータ１１０からハードウェアシミュレータ１３０へのＤＭＡ）、実行し（起動コマンドを発行）、さらに、刺激応答を取得する（ハードウェアシミュレータ１３０からホストコンピュータ１１０へのＤＭＡ）データ駆動型マシンとして考えることができる。
【０１０４】
２つの利用モードは異なる特徴を有する。ソフトウェアシミュレータとの共同シミュレーションでは、ソフトウェアシミュレータ自体の実行時や通信時間に、かなりのオーバーヘッドが見られる。ソフトウェアシミュレータは、ＣＰＵ１１４の実行に基づいて、かなり大量の刺激データを生成または読み出している。どの時点でも、ハードウェアシミュレータ１３０に送信されるデータセットは、ハードウェアシミュレータ１３０にマッピングされたロジック部分へのＩ／Ｏを反映する。典型的に、多数のＤＭＡリクエストがハードウェアシミュレータ１３０に出入りするが、データセットは典型的に小さい。従って、プログラムメモリ１２１は広くて浅いので、プログラムメモリ１２１の使用は、このデータ通信にはストレージメモリ１２２の使用より好ましい。科学的演算の例には、天候のモデル化、石油やガス爆発の地球物理学および地震分析、核シミュレーション、計算流体力学、粒子物理学、金融のモデル化や物質化学、有限要素モデル化、および、ＭＲＩなどのコンピュータ断層撮影がある。生命科学や生物技術では、計算化学や生物学、生物系のタンパク質フォールディングやシミュレーション、ＤＮＡ塩基配列決定法、薬理ゲノム学、コンピュータ内での薬物発見などの例がある。ナノ技術アプリケーションは、分子モデル化やシミュレーション、密度関数理論、原子と原子の動力学、および量子力学的解析を含むことができる。デジタルコンテンツの例は、アニメーション、合成や描画、ビデオ処理や編集、および画像処理を含む。従って、本発明の開示は、本発明の範囲の図説を意図するものであって、制限するものではなく、以下の請求項に記載される。
【図面の簡単な説明】
【０１０５】
【図１】図１は、本発明のある実施形態によるハードウェア加速型シミュレーションシステムを図説する模式図である。
【図２】図２は、本発明のある実施形態によるシミュレーションプロセッサを図説する模式図である。
【図３】図３は、本発明による、ユーザメモリアドレスのストレージメモリアドレスへのあるマッピングを図説する図である。
【図４】図４は、本発明の第１の実施形態によるシミュレーションプロセッサの単独プロセッサユニットを図説する回路図である。
【図５】図５は、ストレージメモリトランザクションと、ローカルメモリからストレージメモリへのデータの書き込みのトリガを図説する回路図である。
【図６】図６は、ストレージメモリトランザクションの命令の書式を図説するビットマップである。
【図７】図７は、ストレージメモリからローカルメモリへのデータの読み出しを図説する回路図である。
【図８】図８は、シミュレーションプロセッサとストレージメモリとの間のインターフェースのある実施形態を図説する模式図である。
【図９】図９は、代わりのメモリアーキテクチャの回路図である。
【図１０】図１０−１４は、図９に示されたアーキテクチャのさまざまな読み出しと書き込み操作を図説する回路図である。
【図１１】図１０−１４は、図９に示されたアーキテクチャのさまざまな読み出しと書き込み操作を図説する回路図である。
【図１２】図１０−１４は、図９に示されたアーキテクチャのさまざまな読み出しと書き込み操作を図説する回路図である。
【図１３】図１０−１４は、図９に示されたアーキテクチャのさまざまな読み出しと書き込み操作を図説する回路図である。
【図１４】図１０−１４は、図９に示されたアーキテクチャのさまざまな読み出しと書き込み操作を図説する回路図である。
【図１５Ａ】図１５Ａと１５Ｂは、更なるメモリアーキテクチャの回路図である。
【図１５Ｂ】図１５Ａと１５Ｂは、更なるメモリアーキテクチャの回路図である。
【図１】
2009517783.tif 000009
【図２】
2009517783.tif 000010
【図３】
2009517783.tif 000011
【図４】
2009517783.tif 000012
【図５】
2009517783.tif 000013
【図６】
2009517783.tif 000014
【図７】
2009517783.tif 000015
【図８】
2009517783.tif 000016
【図９】
2009517783.tif 000017
【図１０】
2009517783.tif 000018
【図１１】
2009517783.tif 000019
【図１２】
2009517783.tif 000020
【図１３】
2009517783.tif 000021
【図１４】
2009517783.tif 000022
【図１５Ａ】
2009517783.tif 000023
【図１５Ｂ】
2009517783.tif 000024
【国際調査報告】
2009517783.tif 000025