(57)【要約】【課題】テスト中のマイクロプロセッサ設計のキャッシュ部分の初期化を改良する。【解決手段】テスト中のマイクロプロセッサ設計のキャッシュ表現を初期化する。キャッシュ表現は、アドレス−ウェイペアから一意に参照されるキャッシュエントリを含む。テストケースは、キャッシュエントリ参照・初期キャッシュエントリ値（キャッシュ初期化記録）を含む。キャッシュエントリ参照は、アドレス識別子・ウェイ識別子を含む。イニシャライザは、キャッシュ初期化記録を読み出し、有効なアドレス−ウェイペアを含む記録でキャッシュエントリを初期化する。イニシャライザは、残りの記録を使用して、キャッシュエントリを初期化する。有効なウェイ識別子は、キャッシュエントリが２回以上初期化されないように選択される。【選択図】　　　　　図１
2004030638.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサ設計（１１０）におけるキャッシュ表現（ｃａｃｈｅ　ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）（１１６）を含むシステム（１００）において、前記キャッシュ表現（１１６）を初期化するコンピュータ実施方法であって、
（Ａ）第１のキャッシュエントリ参照および第１の初期キャッシュエントリ値を含む第１のキャッシュ初期化記録を識別するステップ（４２４）であって、前記第１のキャッシュエントリ参照は、第１のアドレス識別子および第１のウェイ識別子を含む、識別するステップ（４２４）と、
（Ｂ）前記第１のウェイ識別子が無効なウェイ識別子を含むかどうかを判断するステップ（４２８）と、
（Ｃ）前記第１のウェイ識別子が前記無効なウェイ識別子を含まないと判断される場合、
（１）前記第１のアドレス識別子および前記第１のウェイ識別子によって指定される、前記キャッシュ表現中のキャッシュエントリを識別するステップ、および
（２）前記ステップ（Ｃ）（１）において識別された前記キャッシュエントリを、前記第１の初期キャッシュエントリ値で初期化するステップ、
を行うステップ（４３２）と
を含む方法。
【請求項２】
（Ｄ）前記第１のウェイ識別子が前記無効なウェイ識別子を含むと判断される場合、前記第１のキャッシュ初期化記録を初期化延期リストに格納するステップ（４３０）を
さらに含む請求項１記載の方法。
【請求項３】
（Ｄ）前記ステップ（Ａ）、（Ｂ）、および（Ｃ）を複数のキャッシュ初期化記録それぞれについて行うステップ（４２２）を
さらに含む請求項１記載の方法。
【請求項４】
（Ｅ）前記第１のウェイ識別子が前記無効なウェイ識別子を含むと判断される場合、前記第１のキャッシュ初期化記録を初期化延期リストに格納するステップ（４３０）をさらに含み、
前記ステップ（Ｄ）は、前記ステップ（Ａ）、（Ｂ）、（Ｃ）、および（Ｅ）を前記複数のキャッシュ初期化記録それぞれについて行うステップ（４２４）を
含む請求項３記載の方法。
【請求項５】
（Ｆ）前記初期化延期リスト中の複数のキャッシュ初期化記録それぞれについて、
（１）第２のキャッシュエントリ参照および第２の初期キャッシュエントリ値を含む第２のキャッシュ初期化記録を識別するステップ（４２４）であって、前記第２のキャッシュエントリ参照は、第２のアドレス識別子および第２のウェイ識別子を含む、識別するステップ（４２４）と、
（２）前記第２のウェイ識別子が無効なウェイ識別子を含むかどうかを判断するステップ（４２８）と、
（３）前記第２のウェイ識別子が前記無効なウェイ識別子を含まないと判断される場合、
（ｉ）前記第２のアドレス識別子および前記第２のウェイ識別子によって指定される、前記キャッシュ表現中のキャッシュエントリを識別するステップ、および
（ｉｉ）前記ステップ（Ｆ）（３）（ｉ）において識別された前記キャッシュエントリを、前記第２の初期キャッシュエントリ値で初期化するステップ
を行うステップ（４３２）と、
（４）前記第２のウェイ識別子が前記無効なウェイ識別子を含むと判断される場合、
（ｉ）第３のウェイ識別子を、前記第２のアドレス識別子および前記第３のウェイ識別子が、前記キャッシュ表現中の初期化されていないキャッシュエントリを指定するように選択するステップ（４４６）、および
（ｉｉ）前記初期化されていないキャッシュエントリを前記第２の初期キャッシュエントリ値で初期化するステップ（４４４）
を行うステップと
を行うステップ（４０８）
をさらに含む請求項４記載の方法。
【請求項６】
前記ステップ（Ｆ）（４）（ｉ）は、
（ａ）前記第３のウェイ識別子をランダムに選択するステップ（４４６）と、
（ｂ）前記第２のアドレス識別子および前記第３のウェイ識別子が、前記キャッシュ表現中の初期化されているキャッシュエントリを指定するかどうかを判断するステップ（４４８）と、
（ｃ）前記第２のアドレス識別子および前記第３のウェイ識別子が、前記キャッシュ表現中の初期化されているキャッシュエントリを指定すると判断される場合、前記ステップ（Ｆ）（４）（ｉ）（ａ）および（Ｆ）（４）（ｉ）（ｂ）を繰り返すステップと
を含む請求項５記載の方法。
【請求項７】
前記システムは、前記複数のキャッシュ初期化記録を含むテストケースファイルをさらに備え、前記ステップ（Ｄ）は、前記テストケースファイルから前記複数のキャッシュ初期化記録を順次読み出すステップを
含む請求項３記載の方法。
【請求項８】
前記無効なウェイ識別子は、ヌル値を含む
請求項１記載の方法。
【請求項９】
システム（１００）であって、
マイクロプロセッサ設計（１１０）内のキャッシュ表現（１１６）と、
第１のキャッシュエントリ参照および第１の初期キャッシュエントリ値を含む第１のキャッシュ初期化記録を識別する（４２４）識別手段であって、前記第１のキャッシュエントリ参照は、第１のアドレス識別子および第１のウェイ識別子を含む識別手段と、
前記第１のウェイ識別子が無効なウェイ識別子を含むかどうかを判断する（４２８）第１の判断手段と、
前記第１のウェイ識別子が前記無効なウェイ識別子を含まないと判断される場合、以下のステップ：（１）前記第１のアドレス識別子および前記第１のウェイ識別子によって指定される、前記キャッシュ表現中の第１のキャッシュエントリを識別するステップ、および（２）前記第１のキャッシュエントリを、前記第１の初期キャッシュエントリ値で初期化するステップを行う（４３２）初期化手段と
を備えるシステム。
【請求項１０】
前記第１のウェイ識別子が前記無効なウェイ識別子を含むと判断される場合、前記第１のキャッシュ初期化記録を初期化延期リストに格納する（４３０）手段
をさらに備える請求項９記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、集積回路の設計に関し、特に、テスト中のマイクロプロセッサ設計のキャッシュ部分の初期化に関する。
【０００２】
【従来の技術】
マイクロプロセッサおよび他の回路の設計のために、様々な電子設計自動化（ＥＤＡ）ソフトウェアツールが存在している。
かかるツールは、回路設計者が設計中の回路の仮想モデルを作成し変更できるようにする。
回路設計者は、たとえば、ＶｅｒｉｌｏｇやＶＨＤＬ等のハードウェア記述言語（ＨＤＬ）で書かれたテキスト記述を使用して、あるいはグラフィカルユーザインタフェースを使用して回路設計のグラフィック表現を操作することにより、回路設計を指定する。
【０００３】
ソフトウェアツールは、回路設計のテストにも頻繁に使用される。
回路テストツールは、回路設計の動作を通常シミュレートするため、テストツールのこのシミュレーションを行う部分は「シミュレータ」と呼ばれる。
たとえば、マイクロプロセッサの設計をテストするために、回路設計者は通常、１つまたは複数の「テストケース」を作成する。
テストケースは通常、マシン資源（レジスタ、キャッシュ、および主記憶装置）の初期値セット、およびシミュレータが実行するマイクロプロセッサテスト命令セットを指定する。
テストケースは、初期値に基づいてテスト命令を実行した結果生じると期待される出力も含む場合がある。
【０００４】
「イニシャライザ」と呼ばれるソフトウェアプログラムがテストケースを読み出し、テストケースによって指定される初期状態値を反映するように、シミュレートされたプロセッサ設計の初期状態を変更する。
プロセッサ設計が初期化されると、シミュレータはテストケースによって指定される命令の実行をシミュレートし、期待される出力が結果として生成されることを確認する。
かかるシミュレータをテストに使用することの大きな利点は、費用および時間がかかる回路自体の製造前に、エラーを検出することができることである。
【０００５】
マイクロプロセッサ速度の高速化は、主記憶装置（ＤＲＡＭ等）にアクセスできる速度を上回り続けている。
その結果、マイクロプロセッサの設計におけるキャッシュの重要性が増している。
キャッシュはＳＲＡＭ等の高速メモリであり、頻繁にかつ／または最近使用された主記憶装置ロケーションのコンテンツを格納する。
一般的に、キャッシュ待ち時間（アクセス時間）は５０倍またはそれ以上（ａ　ｆａｃｔｏｒ　ｏｆ）、主記憶装置待ち時間よりも短い。
マイクロプロセッサのロードおよび格納動作は、より高い帯域の利用するために、可能な場合は常にキャッシュを使用しようとする。
最近のマイクロプロセッサは、レベル１（Ｌ１）およびレベル２（Ｌ２）キャッシュと呼ばれる少なくとも２つのレベルのキャッシュを通常含む。
キャッシュメモリは、通常、その高い帯域により主記憶装置よりも高価である。
したがって、マイクロプロセッサ設計の一態様は、速度とコストとのトレードオフに基づいて、それぞれの種類のキャッシュをプロセッサ設計にどの程度含めるかを決めることを含む。
【０００６】
数種類のキャッシュアーキテクチャが、一般に、マイクロプロセッサの設計に使用される。
たとえば、「直接マッピングキャッシュ」では、主記憶装置が等サイズの部分に論理的に細分化され、これがそれぞれ特定のキャッシュラインにマッピングされる。
キャッシュライン（本明細書では「キャッシュエントリ」とも呼ばれる）はキャッシュでの個々の格納単位であり、最近のキャッシュではそれぞれ、通常２５６ビット（３２バイト）幅である。
読み出し動作が特定の主記憶ロケーションに格納されている値を要求すると、プロセッサがそのメモリロケーションのアドレスを、対応するキャッシュラインアドレスにマッピングし、そのキャッシュラインがメモリロケーションに有効な値を含むかどうかを判断する。
キャッシュラインがメモリロケーションに有効な値を含まない場合、メモリロケーションの値が主記憶装置から読み出され、続く読み出し動作に使用するためにキャッシュラインに格納される。
格納動作は、同じ方法でメモリアドレスをキャッシュラインにマッピングする。
【０００７】
「完全アソシアティブキャッシュ」では、特定のキャッシュラインと主記憶装置の特定部分との間に固定のマッピングがない。
むしろ、完全アソシアティブキャッシュでは、任意のキャッシュラインを任意のメモリロケーションのコンテンツに格納することができる。
完全アソシアティブキャッシュでのメモリアドレスとキャッシュラインアドレスとの間のマッピングを維持し査定するために、各種技法が開発されている。
【０００８】
「Ｎウェイアソシアティブキャッシュ」では、キャッシュがそれぞれＮ個のキャッシュラインセットに分割される。
但し、Ｎは２、４、または８などの数である。
たとえば、各セットは、同じ下位ビットを共有する主記憶装置の部分に対応することができる。
セット内の各キャッシュラインは「ウェイ」と呼ばれる。
主記憶装置内の各メモリロケーションは、通常、主記憶装置ロケーションの下位ビットに関連するキャッシュラインセットにマッピングされる。
特定のメモリロケーションのコンテンツは、特定のキャッシュアドレスにおける任意のウェイ（キャッシュライン）に格納することができる。
【０００９】
主記憶装置の部分がキャッシュラインセット（すなわちキャッシュアドレス）に直接マッピングされるが、Ｎウェイアソシアティブキャッシュは各セット内でアソシアティブである。
このため、直接マッピングキャッシュアーキテクチャおよび完全アソシアティブキャッシュアーキテクチャは双方とも、Ｎウェイアソシアティブキャッシュアーキテクチャの特殊なケースである。
たとえば、直接マッピングキャッシュは、Ｎが１に等しいＮウェイアソシアティブキャッシュである。
同様に、完全アソシアティブキャッシュは、Ｎがキャッシュラインの数に等しいＮウェイアソシアティブキャッシュである。
マイクロプロセッサ設計の一態様は、当業者に周知の各種設計考慮事項に基づいて、どのタイプのキャッシュを使用するかを決めることを含む。
【００１０】
上述したように、テスト中のマイクロプロセッサ設計は、キャッシュを含め、マイクロプロセッサの資源をモデリングする。
Ｎウェイアソシアティブキャッシュでは、各キャッシュラインをアドレス−ウェイペア（Ａ，Ｗ）によって一意に参照することができる。
但し、Ａはキャッシュラインのアドレスであり、Ｗはキャッシュラインのウェイである。
したがって、マイクロプロセッサ設計におけるキャッシュモデルは、通常、二次元データ構造として表される。
キャッシュモデルの各インデックス（Ａ，Ｗ）に格納される値は、キャッシュのインデックス（Ａ，Ｗ）に格納される値を表す。
したがって、キャッシュモデルは、特定の時点でのキャッシュの状態を表す。
【００１１】
上述したように、回路設計テストツールは、テスト中のマイクロプロセッサ設計の初期状態を指定するテストケースを入力として通常受け取る。
テストケースの一部分が、マイクロプロセッサキャッシュの初期値を通常指定する。
テストケースのこの「キャッシュ部分」は、通常、初期化記録リストを含み、記録はそれぞれ以下を含む：（１）アドレスＡ、（２）ウェイＷ、および（３）キャッシュモデルのインデックス（Ａ，Ｗ）に格納すべき初期値Ｉ。
イニシャライザは、この初期化記録リストを順次読み出し、マイクロプロセッサキャッシュモデル内の各キャッシュラインエントリを、指定された初期値で初期化する。
【００１２】
テストケース中の１つまたは複数の初期化記録は、キャッシュアドレスを指定することができるが、ウェイを指定することはできない。
テストケース設計者は、たとえば、テストケースの実行の成功に必要なのは、指定された初期値を特定のアドレスに格納することだけであり、指定された初期値を特定のウェイに格納する必要はないことから、特定の初期化記録においてウェイを指定しなくてもよい。
アドレスは指定するが、ウェイを指定しないキャッシュ初期化記録は、従来のイニシャライザに問題を呈する。
イニシャライザは、キャッシュアドレスＡを指定するがウェイを指定しない初期化記録に直面すると、たとえば、ある所定の方法を利用してウェイＷを選び、指定された初期値をキャッシュモデルのインデックス（Ａ，Ｗ）に格納する。
しかし、続く初期化記録が同じアドレス−ウェイペア（Ａ，Ｗ）を指定する場合、イニシャライザは、インデックス（Ａ，Ｗ）がすでに初期化されているため、指定された初期値をキャッシュモデルのインデックス（Ａ，Ｗ）に格納することができない。
テストケースにより指定される特定のアドレス−ウェイペアに初期値を格納できないと、テストケースの実行（シミュレータによる）が誤作動する原因になることがある。
【００１３】
【発明が解決しようとする課題】
したがって、必要なのは、テスト中のマイクロプロセッサ設計のキャッシュ部分を初期化する改良された技法である。
【００１４】
【課題を解決するための手段】
テスト中のマイクロプロセッサ設計におけるキャッシュ表現（ｒｅｐｒｅｓｅｎｔａｔｉｏｎ　ｏｆ　ａ　ｃａｃｈｅ）を初期化する技法が開示される。
キャッシュ表現は、アドレス−ウェイペアによってそれぞれ一意に参照される複数のキャッシュエントリを含む。
テストケースは、キャッシュエントリ参照および初期キャッシュエントリ値をそれぞれ含む複数のキャッシュ初期化記録を含む。
各キャッシュエントリ参照は、アドレス識別子およびウェイ識別子を含む。
イニシャライザは、キャッシュ初期化記録を読み出し、有効なアドレス−ウェイペアを含む記録を使用してキャッシュ表現のキャッシュエントリを初期化する。
次いで、イニシャライザは、ウェイ識別子が無効（たとえば、ＮＵＬＬ（ヌル））値である残りの記録を使用して、キャッシュ表現のキャッシュエントリを初期化する。
有効なウェイ識別子は、キャッシュエントリが確実に２回以上初期化されないようにこれら記録に選択される。
【００１５】
本発明の各種態様および実施形態の他の特徴および利点は、以下の説明および特許請求の範囲から明白になろう。
【００１６】
【発明の実施の形態】
図１を参照して、シミュレートマイクロプロセッサ設計１１０を初期化しテストする、本発明の一実施形態によるシステム１００を示す。
マイクロプロセッサ設計１１０は、テスト中のハードウェアモデルまたはテスト中の設計（ＤＵＴ）とも呼ばれ、マイクロプロセッサのソフトウェア（シミュレートされた）モデルである。
マイクロプロセッサ設計１１０は、マイクロプロセッサの動作（たとえば、マイクロプロセッサの入力と出力との間の機能的関係）、ならびにレジスタ、キャッシュ、および主記憶装置等マイクロプロセッサのマシン資源の特定の時点での状態の双方をモデリングする。
「マシン資源表現」なる用語は、本明細書では、マイクロプロセッサ設計１１０内に含まれる特定のマシン資源のモデルを指す。
【００１７】
マイクロプロセッサ設計１１０は、マルチコアおよび／またはマルチスレッドマイクロプロセッサアーキテクチャを有することができ、この場合、マイクロプロセッサ設計１１０がアーキテクチャに各コアおよび／またはスレッドの状態をモデリングする。
マイクロプロセッサ設計１１０は、たとえば、コンピュータのメモリのデータ構造で、あるいはハードディスクまたは他のコンピュータ可読媒体に格納されているファイルで実施することができる。
【００１８】
システム１００は、各マイクロプロセッサ設計のマシン資源それぞれの属性を定義し、かかる資源それぞれにデフォルト値も提供しうる資源データベース１０４も備える。
特に、資源データベース１０４は、マイクロプロセッサ設計１１０内のキャッシュの数および各キャッシュ内のアドレスおよびウェイの数を定義することができる。
【００１９】
システム１００はテストケース１０２を備え、テストケース１０２は、マイクロプロセッサ設計１１０の（シミュレートされる）マシン資源の初期値、およびマイクロプロセッサ設計１１０が（シミュレーションにおいて）実行すべきテスト命令の双方を指定するテストベクトルを含む。
テストケース１０２は、たとえば、コンピュータ可読媒体に格納されるファイルで、またはコンピュータのメモリのデータ構造として実施することができる。
テストケース１０２によって提供される初期マシン資源値の例については、図５に関連付けて以下により詳細に述べる。
【００２０】
システム１００は、イニシャライザ１０６およびシミュレータ１１２も備え、これらは双方とも、Ｃプログラミング言語等任意の適切なプログラミング言語で書かれたソフトウェアプログラムとして実施することができる。
イニシャライザ１０６は、テストケース１０２に提供される初期マシン資源値および資源データベース１０４に提供されるマシン資源定義に基づいてマイクロプロセッサ設計１１０の状態を初期化する。
たとえば、一実施形態では、イニシャライザ１０６は、入力としてテストケース１０２および資源データベース１０４を受け取り、出力としてシミュレータ入力１０８を生成する。
シミュレータ入力１０８は、マイクロプロセッサのマシン資源の初期値、実行すべきテスト命令、およびかかる命令の実行によって生成される期待出力を、シミュレータ１１２への入力に適したフォーマットで指定する。
【００２１】
シミュレータ１１２は、マイクロプロセッサ設計１１０と併せて、マイクロプロセッサの独立アーキテクチャ参照モデルを提供する。
シミュレータ１１２は、シミュレータ入力１０８を受け取り、マイクロプロセッサ設計１１０の（シミュレートされる）マシン資源を、シミュレータ入力１０８において指定される初期値で初期化する。
あるいは、イニシャライザ１０６は、テストケース１０２によって指定される初期マシン資源値でマイクロプロセッサ設計１１０を直接初期化することができる。
【００２２】
マイクロプロセッサ設計１１０が初期化されると（イニシャライザ１０６によるか、またはシミュレータ１１２により）、シミュレータ１１２は、シミュレータ入力１０８におちえ指定される命令の実行をマイクロプロセッサ設計１１０上でシミュレートする。
シミュレータ１１２は、シミュレーションが進行すると、それに従ってマイクロプロセッサ設計１１０の状態を変更する。
シミュレータ１１２は、たとえば、テスト命令の実行によって生成された出力が、シミュレータ入力１０８によって指定される期待出力に整合するかどうかを示すテストケース結果１１４を生成する。
【００２３】
これより、システム１００の動作について、システム１００の各種実施形態のうちの特定の実施形態に関連付けてより詳細に述べる。
たとえば、マイクロプロセッサ設計１１０はキャッシュ表現１１６を含む。
キャッシュ表現１１６は、Ｃ等のプログラミング言語で定義されるデータ構造として実施することができ、マイクロプロセッサキャッシュの構造および状態を表す。
たとえば、図２Ａを参照して、キャッシュ表現１１６の一実施形態を示す。
図２Ａに示すキャッシュ表現１１６は単一キャッシュを表すが、マイクロプロセッサ設計１１０は、属性の任意の組み合わせを有するキャッシュを表す任意の数のキャッシュ表現を含むことができる。
【００２４】
キャッシュ表現１１６は、例を目的として４ウェイセットアソシアティブキャッシュ（すなわち、Ｎが４に等しいＮウェイセットアソシアティブキャッシュ）を表す。
キャッシュ表現１１６は、列２０２ａ〜ｄおよび行２０４ａ〜ｈを有する表の形態で示される。
特に、各行２０４ａ〜ｈは特定のキャッシュアドレスに対応する。
列２０６ａは、キャッシュアドレス２０４ａ〜ｈの、０から順に付番された数値インデックスを示す。
説明し易いように８つのキャッシュアドレス２０６ａしか図２Ａに示さないが、キャッシュは通常、何千というアドレスを含む。
各列２０２ａ〜ｄは、特定のキャッシュウェイに対応する。
キャッシュウェイ２０２ａ〜ｄは、０から３まで順次付番される数値インデックス２０６ｂを使用して付番される。
特定のアドレス−ウェイインデックスペアは、キャッシュ表現１１６における特定のエントリを一意に参照する。
たとえば、アドレス−ウェイインデックスペア（３、１）は、キャッシュ表現１１６の行２０４ｄおよび列２０２ｂにおけるエントリを一意に参照する。
【００２５】
合計で３２個のエントリ（ライン）がキャッシュ表現１１６にあり、図２Ａ〜図４に示すアドレスインデックス２０６ａおよびウェイインデックス２０６ｂは、キャッシュ表現１１６へのインデックスとして使用されるが、キャッシュ表現１１６のコンテンツ（すなわちキャッシュデータ）の部分を構成しないことを理解されたい。
アドレスインデックス２０６ａは、本明細書ではより一般的に「アドレス識別子」と呼ばれ、ウェイインデックス２０６ｂは、本明細書ではより一般的に「ウェイ識別子」と呼ばれる。
【００２６】
図２Ａは、イニシャライザ１０６によって初期化される前のキャッシュ表現１１６の状態を表す。
キャッシュ表現１１６のすべてのエントリは、初期化されていないことを示すために、図２Ａでは空で表される。
初期化されていないエントリ値は、たとえば、ＮＵＬＬ値を使用して、またはエントリが初期化されたかどうかを示すフラグを各エントリに関連付けることによって実施することができる。
【００２７】
ここより図５を参照して、テストケース１０２の一実施形態を示す。
テストケース１０２は、列３０２ａ〜ｃ（あるいはフィールドと呼ばれる）および列３０４ａ〜ｌを有する表の形態で示される。
実際には、テストケース１０２は、テキストファイル、文書処理または表計算ソフトウェアによって作成される表、ヘッダファイルもしくはＣ等プログラミング言語で書かれた他のソースコードファイル、またはデータベースファイル等多種多様な形態のいずれかで実施することが可能である。
【００２８】
例のために、図５に示す表は、キャッシュ表現１１６のエントリのうちのいくつかを初期化するためにイニシャライザ１０６が使用すべき初期値を提供する。
実際には、テストケース１０２は、通常、マイクロプロセッサ設計１１０内のすべてのマシン資源（レジスタおよび主記憶装置等）の初期値、ならびにシミュレータ１１２が実行すべきテスト命令を含む。
例示および説明を容易にするために、初期キャッシュ値の選択のみを図５に示す。
さらに、図５に示す特定の値は、例示目的のみのために選ばれたものである。
【００２９】
各行３０４ａ〜ｌは、特定のキャッシュエントリの初期値を指定する。
したがって、本明細書において、行３０４ａ〜ｌは「キャッシュ初期化記録」とも呼ばれる。
各キャッシュ初期化記録３０４ａ〜ｌは以下を含む：（１）アドレスフィールド３０２ａ−この値は、対応するキャッシュエントリのアドレスＡを示す、（２）ウェイフィールド３０２ｂ−この値は、対応するキャッシュエントリのウェイＷを示す、および（３）初期値フィールド３０２ｃ−この値は、キャッシュ表現１１６中のインデックス（Ａ，Ｗ）におけるキャッシュエントリの初期化にイニシャライザ１０６が使用すべき値を指定する。
【００３０】
本明細書では、アドレスＡおよびウェイＷの組み合わせを「キャッシュエントリ参照」と呼ぶ。
したがって、キャッシュ初期化記録は、キャッシュエントリ参照および初期キャッシュエントリ値の双方を含む。
【００３１】
これより、テストケース１０２について、キャッシュ初期化記録３０４ａ〜ｌの代表的な例を参照してより詳細に述べる。
たとえば、アドレスゼロ（列３０２ａ）およびウェイゼロ（列３０２ｂ）を有するキャッシュエントリを指す初期化記録３０４ａを考える。
初期化記録３０４ａは、インデックス（０，０）におけるキャッシュエントリを値１（列３０２ｃ）で初期化すべきことを示している。
同様に、初期化記録３０４ｂは、インデックス（０，１）におけるキャッシュエントリを値２で初期化すべきことを示している。
初期化記録３０４ｃおよび３０４ｄは、インデックス（０，２）および（０，３）それぞれにおけるキャッシュエントリに初期値３および４を指定する。
【００３２】
次に、アドレス１およびウェイＮＵＬＬを指定する初期化記録３０４ｅを考える。
値ＮＵＬＬは、定義されていない、または範囲外（すなわち、ウェイ数Ｎ以上）である、−１など任意の値で表すことができる。
初期化記録３０４ｅは、初期値５を指定する。
したがって、初期化記録３０４ｅは特定のキャッシュアドレスを指し、そのキャッシュアドレスに格納すべき初期値を指定しているが、初期値を格納すべきキャッシュアドレス内の特定のウェイを示していない。
初期化記録３０４ｆ、３０４ｇ、および３０４ｌについても同じことが当てはまる。
本明細書では、かかる記録を「指定不十分」キャッシュエントリ、または「不十分に指定される」と言う。
対照的に、本明細書では、有効なアドレスおよびウェイを含む記録を「明確に指定される」と言う。
【００３３】
これより、テストケース１０２が指定不十分なキャッシュ参照を含む場合にキャッシュ表現１１６を初期化するために使用することのできる技法の例について述べる。
図６を参照して、テストケース１０２によって指定される初期キャッシュエントリ値に基づいて、キャッシュ表現１１６を初期化するために、本発明の一実施形態におけるイニシャライザ１０６が行う方法４００のフローチャートを示す。
イニシャライザ１０６の目的は、シミュレータ１１２の実行前に、マイクロプロセッサ設計１１０のすべてのマシン資源に初期値を定義することである。
したがって、イニシャライザ１０６は、図６に示すものの他に初期化を行うが、初期化は本発明に関連しないため、本明細書では省略する。
【００３４】
方法４００は、テストケース１０２のキャッシュ部分Ｃを識別する（ステップ４０２）。
キャッシュ部分Ｃは、たとえば、図５に示すリストなど、アドレス−ウェイペアおよび初期値のリストとして表すことができる。
たとえば、テストケース１０２がテキストファイルとして実施される場合、テキストファイルは、単一のキャッシュ初期化記録にそれぞれ対応する一連のラインを含む。
あるいは、テキストファイルの各ラインは、たとえば、キャッシュ初期化記録の単一のフィールド（アドレスフィールド３０２ａ、ウェイフィールド３０２ｂ、または値フィールド３０２ｃ）に対応する場合もある。
たとえば、方法４００は、キャッシュ部分Ｃを表すテストケース１０２のラインを順次読み出し、そこに含まれるテキストを解析し、初期化記録３０４ａ〜ｌ（図５）のリストを表すデータ構造をメモリに作成する。
【００３５】
方法４００は、一時初期化記録リストＴを作成する（ステップ４０４）。
より詳細に後述するように、一時リストＴは、キャッシュアドレスを指定するが、ウェイを指定しない初期化記録（すなわち、指定不十分な初期化記録）を一時的に格納するために使用される。
たとえば、一時リストＴは、コンピュータのメモリでのデータ構造（リストまたはアレイ等）として実施することができる。
一時リストＴは、テストケースのキャッシュ部分Ｃと同じ論理構造を有することができる。
換言すれば、一時リストＴは、アドレスフィールド、ウェイフィールド、および初期値フィールドをそれぞれ有する、ゼロ以上のキャッシュ初期化記録を含むことができる。
ステップ４０４は、空の一時リスト（すなわち、記録のない状態のリスト）を作成する。
【００３６】
再び図６を参照すると、方法４００は、キャッシュ部分Ｃによって指定される初期化を２段階で行う。
第一段階において、方法４００は、パラメータＣ（テストケース１０２のキャッシュ部分）、Ｔ（一時キャッシュ初期化記録リスト）、および値ＴＲＵＥを有するＬｏａｄＣａｃｈｅという名称のサブルーチンを呼び出す（ステップ４０６）。
ＬｏａｄＣａｃｈｅサブルーチンは、キャッシュ部分Ｃの明確に指定されるあらゆるキャッシュ初期化記録によって示されるすべての初期化を行う。
【００３７】
たとえば、図７を参照して、本発明の一実施形態により、ＬｏａｄＣａｃｈｅサブルーチン４２０によって行われる方法のフローチャートを示す。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、入力として３つのパラメータを採用する：（１）キャッシュ表現１１６のキャッシュエントリの初期化に使用すべきキャッシュ初期化記録を含む初期化リストＬ、（２）指定不十分なキャッシュ初期化記録をいずれも一時的に格納するための一時リストＴ、および（３）初期化方法４００の第１または第２段階中にＬｏａｄＣａｃｈｅサブルーチン４２０が呼び出されているかどうかを指定するブール値Ｆ。
Ｆの値がＴＲＵＥの場合、ＬｏａｄＣａｃｈｅ４２０は第一段階中に呼び出されており、Ｆの値がＦＡＬＳＥの場合、ＬｏａｄＣａｃｈｅ４２０は第２段階中に呼び出されている。
【００３８】
ＬｏａｄＣａｃｈｅサブルーチン４２０は、リストＬ中の各キャッシュ初期化記録Ｒにわたるループに入る（ステップ４２２）。
たとえば、第１初期化段階（図６のステップ４０６によって開始される）中、初期化リストＬはテストケース１０２のキャッシュ部分Ｃである。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、初期化記録Ｒによって指定されるキャッシュアドレスＡ、ウェイＷ、および初期値Ｉを識別する（ステップ４２４）。
【００３９】
Ｆの値がＴＲＵＥの場合（すなわち、これが初期化方法４００の第１段階である場合）（ステップ４２６）、ＬｏａｄＣａｃｈｅサブルーチン４２０は、Ｗの値がＮＵＬＬであるかどうか（すなわち、初期化記録Ｒがウェイを指定するかどうか）を判断する（ステップ４２８）。
Ｗの値がＮＵＬＬの場合、ＬｏａｄＣａｃｈｅサブルーチン４２０は、初期化方法４００の第２段階中に使用するために初期化記録Ｒを一時リストＴに加える（ステップ４３０）。
【００４０】
初期化記録Ｒは、様々な方法のいずれでも一時リストＴに加えることができる。
たとえば、初期化記録ＲのコンテンツをリストＴにコピーすることもでき、または初期化記録Ｒへのポインタ（参照）をリストＴに加えることによって、初期化記録ＲのコンテンツをリストＴにコピーする必要性をなくすこともできる。
あるいは、ステップ４３０の作用は、ステップ４３２（後述）後に、明確に指定された各初期化記録を初期化リストＬから除去し、それによってＬｏａｄＣａｃｈｅサブルーチン４２０の完了の際に初期化リストＬ中の指定不十分な初期化記録のみを残すことによって実現することができる。
より一般的には、一時リストＴは、初期化方法４００の第２段階まで、指定不十分な初期化記録の適用を延ばす任意の技法を使用して実施することができる。したがって、本明細書では、一時リストＴを「初期化延期リスト」とも呼ぶ。
【００４１】
Ｗの値がＮＵＬＬではない場合、初期化記録Ｒはキャッシュエントリを明確に指定しており、ＬｏａｄＣａｃｈｅサブルーチン４２０は、パラメータＡ、Ｗ、およびＩを有するＩｎｉｔｉａｌｉｚｅＣａｃｈｅという名称のサブルーチンを呼び出す（ステップ４３２）。
図８に関連付けてさらに詳細に後述するように、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチンは、キャッシュ表現１１６内のインデックス（Ａ，Ｗ）におけるキャッシュエントリを初期値Ｉで初期化する。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、リストＬに残っている初期化記録Ｒについてステップ４２４〜４３２を繰り返す（ステップ４３４）。
次いで、制御権が初期化方法４００（図６）に戻る。
【００４２】
図８を参照して、本発明の一実施形態によるＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０によって行われる方法のフローチャートを示す。
ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、Ｗの値がＮＵＬＬかどうかを判断する（ステップ４４２）。
Ｗの値がＮＵＬＬではない場合（すなわち、Ｗの特定の値が指定される場合）、サブルーチン４４０は、キャッシュ表現１１６中のインデックス（Ａ，Ｗ）におけるキャッシュエントリに初期値Ｉを格納する（ステップ４４４）。
【００４３】
Ｗの値がＮＵＬＬ（すなわち、指定不十分）の場合、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、ゼロからＮ−１までの間（ゼロとＮ−１を含む）でランダムウェイＷを選択する（ステップ４４６）。
（Ａ，Ｗ）によりここで指定されるインデックスにおけるキャッシュエントリがすでに初期化されている場合（ステップ４４８）、新しいランダムウェイＷが選択される（ステップ４４６）。
ステップ４４６および４４８は、インデックス（Ａ，Ｗ）がキャッシュ表現１１６中の初期化されていないエントリを識別するまで繰り返される。
次いで、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、インデックス（Ａ，Ｗ）におけるキャッシュ表現エントリに初期値Ｉを格納することによって初期化する。
【００４４】
ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、ステップ４４６においてウェイＷをランダムに選択する必要がない。
あるいは、たとえば、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、最初に利用可能（初期化されていない）ウェイを求めてアドレスＡを探索し、ステップ４４６において、この初期化されていないウェイをウェイＷとして選択してもよい。
【００４５】
第１段階中（すなわち、初期化方法４００のステップ４０６によって呼び出される場合）のＬｏａｄＣａｃｈｅサブルーチン４２０の動作については、キャッシュ部分Ｃのコンテンツが図５に示される特定の例に関連付けてより詳細に説明する。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、この例で呼び出されると、キャッシュ部分Ｃ中の各初期化記録Ｒにわたるループに入る（ステップ４２２）。
このループの最初の反復中、初期化記録Ｒは初期化記録３０４ａ（図５）である。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、記録３０４ａによって指定されるアドレスＡ（０）、ウェイＷ（０）、および初期値Ｉ（１）を識別する（ステップ４２４）。
本例においてＦはＴＲＵＥであるため（ステップ４２６）、ＬｏａｄＣａｃｈｅサブルーチン４２０は、Ｗの値がＮＵＬＬであるかどうかを判断する（ステップ４２８）。
この場合、Ｗの値はＮＵＬＬでないため（すなわち、ゼロに等しいため）、ＬｏａｄＣａｃｈｅサブルーチン４２０は、パラメータ値０、０、および１を有するＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチンを呼び出すことにより、インデックス（０，０）におけるキャッシュエントリを値１で初期化する（ステップ４３２）。
【００４６】
図３を参照して、たとえば、初期化方法４００の第１段階完了の際（すなわち、図６のステップ４０６完了の際）のキャッシュ表現１１６のコンテンツを示す。
図３に示すように、初期値「１」がインデックス（０，０）（行２０４ａ、列２０２ａ）に格納される。
【００４７】
ＬｏａｄＣａｃｈｅサブルーチン４２０は、キャッシュ部分Ｃにおける初期化記録３０４ｂ〜ｄのすべてがアドレスおよび有効なウェイの双方を指定するため、これら記録についても同様に動作する。
初期化記録３０４ｄ〜ｂによって指定される初期値は、図３の行２０４ａに示す対応するキャッシュエントリに反映される。
【００４８】
しかし、ＬｏａｄＣａｃｈｅサブルーチン４２０が初期化記録３０４ｅに直面するとき、アドレスＡは１であり、ウェイＷはＮＵＬＬであり、初期値Ｉは５である。
この場合、ＬｏａｄＣａｃｈｅサブルーチン４２０は、ステップ４２８において、Ｗの値がＮＵＬＬであると判断し、したがって初期化記録３０４ｅを一時リストＴに加える（ステップ４３０）。
【００４９】
図９を参照して、たとえば、初期化方法４００の第１段階完了の際に一時リストＴ５００のコンテンツ例を示す。
図９に示すように、初期化記録３０４ｅを一時リストＴに加えた（ステップ４３０）ことは、リスト５００中の初期化記録５０４ａの存在によって反映される。
【００５０】
上記説明に基づいて、第一段階の残りでは、ＬｏａｄＣａｃｈｅサブルーチン４２０は初期化記録３０４ｆ、３０４ｇ、および３０４ｌを一時リストＴに加え（記録５０４ｂ、５０４ｃ、および５０４ｄそれぞれにより図９に表される）、またＬｏａｄＣａｃｈｅサブルーチン４２０が初期化記録３０４ｈ〜３０４ｋによって指定される値を使用して、キャッシュ表現１１６中の対応するキャッシュエントリを初期化する（図３に反映されるように）ことがわかる。
したがって、図３は、第１初期化段階完了（ステップ４０６）の際にキャッシュ表現１１６のコンテンツを示し、図９は、第１初期化段階完了の際に一時リストＴのコンテンツを示す。
【００５１】
図６を参照すると、第２初期化段階において、方法４００はＬｏａｄＣａｃｈｅサブルーチン４２０を再び呼び出す（ステップ４０８）。
しかし、この場合、初期化方法４００は、パラメータＴ、ＮＵＬＬ、およびＦＡＬＳＥを有するＬｏａｄＣａｃｈｅサブルーチン４２０を呼び出す。
換言すれば、初期化方法４００は、ＬｏａｄＣａｃｈｅサブルーチン４２０に一時リストＴ内に含まれる初期化記録（第１段階中に初期化に使用されなかったもの）を使用してキャッシュ表現１１６のコンテンツを初期化するように命令し、また、ＬｏａｄＣａｃｈｅサブルーチン４２０に、これが初期化プロセスの第２段階であることを伝える。
【００５２】
第２初期化段階中（すなわち、方法４００のステップ４０８により呼び出される場合）のＬｏａｄＣａｃｈｅサブルーチン４２０の動作について、一時リストＴのコンテンツが図９に示すものであり、キャッシュ表現１１６のコンテンツが図３に示すものである特定の例に関連付けてより詳細に説明する。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、この例で呼び出されると、一時リストＴ中の各初期化記録Ｒにわたるループに入る（ステップ４２２）。
このループの最初の反復中、初期化記録Ｒは初期化記録５０４ａ（図９）である。
ＬｏａｄＣａｃｈｅサブルーチン４２０は、記録５０４ａによって指定されるアドレスＡ（１）、ウェイＷ（ＮＵＬＬ）、および初期値Ｉ（５）を識別する（ステップ４２４）。
本例においてＦはＦＡＬＳＥであるため（ステップ４２６）、ＬｏａｄＣａｃｈｅサブルーチン４２０は、パラメータ１、ＮＵＬＬ、および５それぞれを有するＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０を呼び出す（ステップ４３２）。
【００５３】
再び図８を参照すると、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、Ｗの値がＮＵＬＬであると判断し（ステップ４４２）、したがってゼロからＮ−１までの間（ゼロおよびＮ−１を含む）でランダムなウェイＷを選択する（ステップ４４６）。
ここで（Ａ，Ｗ）によって指定されるインデックスにおけるキャッシュエントリが初期化されている場合（ステップ４４８）、新しいランダムウェイＷが選択される（ステップ４４６）。
ステップ４４６および４４８は、インデックス（Ａ，Ｗ）がキャッシュ表現１１６中の初期化されていないエントリを識別するまで繰り返される。
次いで、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、インデックス（Ａ，Ｗ）におけるキャッシュ表現エントリに初期値Ｉを格納することによって初期化する。
【００５４】
たとえば、ステップ４４６において、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０が最初にゼロのランダムウェイ値Ｗを選択したものと仮定する。
インデックス（１，０）におけるキャッシュエントリはすでに初期化されている（図３に示すように値８で）ため、別のランダムウェイＷが選択される（ステップ４４６）。
例のために、生成される２番目のランダムウェイ値が２であるものと仮定する。
インデックス（１，２）におけるキャッシュエントリは初期化されていないため（図２）、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０はインデックス（１，２）におけるキャッシュエントリに初期値（５）を格納する。
【００５５】
図４を参照して、たとえば、初期化方法４００の第２段階の完了の際に（すなわち、図６のステップ４０８の完了の際に）キャッシュ表現１１６のコンテンツを示す。
図４に示すように、初期値「５」がインデックス（１，２）におけるエントリに格納される。
ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、ステップ４３４においてＬｏａｄＣａｃｈｅサブルーチン４２０に制御権を戻す。
【００５６】
ＬｏａｄＣａｃｈｅサブルーチン４２０は、一時リストＴに残っているキャッシュ初期化記録５０４ｂ〜ｄも同様に処理する。
例のために、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０がキャッシュ初期化記録５０４ｂ〜ｄに選択するウェイ値は１、３、および３それぞれであるものと仮定する。
かかる場合、初期化記録５０４ｂ〜ｄによって指定される初期値（６、７、および１２それぞれ）が図４において反映される。
ステップ４０８の完了の際、初期化方法４００が完了する。
【００５７】
一実施形態では、資源データベース１０４は、Ｃプログラミング言語のソースコードファイルとして実施される。
本実施形態では、資源データベース１０４は、キャッシュ表現１１６を作成してマイクロプロセッサ設計１１０に加えるキャッシュ表現作成関数への呼び出しを含む。
マイクロプロセッサ設計１１０が複数のキャッシュ表現を含む場合、資源データベース１０４は、各キャッシュ表現に１つの関数呼び出しを含むことができる。
キャッシュ表現作成関数は、作成すべきキャッシュ表現中のアドレス数およびウェイ数をパラメータとして含むことができる。
キャッシュ作成関数を呼び出す結果は、たとえば、図２Ａに示すキャッシュ表現１１６等、初期化されていない（すなわち空の）キャッシュ表現の作成であることができる。
キャッシュ表現１１６は、同じ機能を行うようにＣプログラミング言語の二次元アレイまたは他のデータ構造として実施することができる。
たとえば、キャッシュ表現１１６は、当業者に周知の技法を使用してリンクされたリストとして実施される場合がある。
【００５８】
イニシャライザ１０６およびシミュレータ１１２は、Ｃプログラミング言語または任意の他のプログラミング言語で書かれたソフトウェアプログラムとして実施しうる。
方法４００、ＬｏａｄＣａｃｈｅサブルーチン４２０、およびＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０は、Ｃプログラミング言語または任意の他のプログラミング言語での関数として実施することができる。
マイクロプロセッサ設計１１０は、コンピュータのメモリ、またはハードディスク等の記憶媒体に格納されるデータ構造として実施することができる。
【００５９】
【発明の効果】
本発明の利点のうちの１つまたは複数は以下である。
【００６０】
本明細書に開示する技法の１つの利点は、すべての明確に定義されたキャッシュ初期化記録をまず処理することにより、かかる記録によって指定される初期値が、参照するキャッシュエントリに正確に格納されることをイニシャライザ１０６が保証することである。
上述したように、従来のシーケンシャルイニシャライザによっては、指定不十分な初期化記録にウェイをランダムに選択することから、特定のキャッシュエントリを、後続する明確に指定された初期化記録による初期化に潜在的に利用できないようにしてしまうものがある。
その結果、テストケースが適宜実行することができなくなる場合がある。
対照的に、本明細書に開示する技法は、すべての明確に指定された初期化記録を処理した後に指定不十分な初期化記録を処理することから、指定不十分な初期化記録が、テストケース１０２の他のどこかにある明確に指定された初期化記録によって参照されるキャッシュエントリの初期化に使用されないように保証される。
【００６１】
本明細書に開示する技法の別の利点は、テストケースを順次（すなわち、単一パスで）解析するイニシャライザと統合できるため、指定不十分なキャッシュ初期化記録を適宜処理しながら、順次解析の恩恵を保つことである。
指定不十分な初期化記録が順次解析イニシャライザに提起する問題は、かかる記録に直面すると、テストケース１０２中の続く明確に指定される初期化記録が同じアドレスおよびウェイを指定しないように保証しつつ、記録によって指定される初期値を格納するウェイを選択することができない（ランダムに、またはある他の方法を通して）ことである。
【００６２】
この問題はマルチパスまたは非順次パーサ使用することで解消することができるが、様々な理由によりテストケースを順次解析することが望ましい。
たとえば、順次解析は、テストケース１０２をディスクから一度だけ読み出し、それによってディスクアクセスを最小化するとともに解析速度を増大させることを含む。
さらに、順次解析の実行に必要な計算の数は、テストケース１０２中の初期化記録の数に比例する。
本明細書に記載の技法を実施して、これらを利点を保持することができる。
たとえば、イニシャライザ１０６は、ディスクから一度だけテストケース１０２のキャッシュ部分を順次読み出すことができる（図６のステップ４０２）。
一時リストＴは、メモリのデータ構造として作成することができ、ディスク読み出しおよび／または書き込みを必要とすることなくアクセスすることができる。
さらに、テストケース１０２中の指定不十分な初期化記録の数が小さい場合、一時リストＴに対する情報の格納および呼び出しを行うためにサブルーチン４２０（図７）および４４０（図８）によって行われる演算の付加的な数は、比較的小さくなる。
その結果、初期化方法４００によって行われる演算の総数は、従来の順次解析方法によって行われる演算の総数に匹敵しうる。
【００６３】
本発明について、特定の実施形態に関して上述したが、上記実施形態は、例示のみのために提供され、本発明の範囲を制限または規定しないことを理解されたい。
以下を含むが、それに制限されない他の各種実施形態も特許請求の範囲内にある。
【００６４】
本明細書における記載は、たとえば、キャッシュ初期化記録３０４ａ〜ｌ（図５）、キャッシュ初期化記録５０４ａ〜ｄ（図９）、ならびにサブルーチン４２０（図７）および４４０（図８）におけるウェイＷの値に関して、ＮＵＬＬ値の使用を参照する。
ＮＵＬＬ値は、任意の様々な方法で実施することができる。
たとえば、ＮＵＬＬ値は、有効なウェイ値を表さない、−１などの値で表すことができる。
かかる値は、たとえば、範囲外（すなわち、ゼロ未満またはＮ−１よりも大きい）であるかためか、または不明確な値であるために有効ではない。
あるいは、コンピュータプログラミング環境によっては、ＮＵＬＬ値として使用可能な非数値（算術あふれを示す値等）を定義するものもある。
ＮＵＬＬ値は、値がないことによって表すこともできる。
たとえば、各ラインがキャッシュ初期化記録フィールドに対応するテキストファイルとして、テストケース１０２が表される場合、ＮＵＬＬ値は、特定のキャッシュ初期化記録のウェイフィールドを表すラインがないことによって表すことができる。
【００６５】
様々な技法のうちの任意のものを使用して、ＬｏａｄＣａｃｈｅサブルーチン４２０（図８）は、ウェイＷがＮＵＬＬに等しいかどうかを判断する（図７のステップ４２８）ことができ、ＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０（図８）は、ウェイＷがＮＵＬＬに等しいかどうかを判断する（図８のステップ４４２）ことができる。
たとえば、システム１００の要素が、Ｃプログラミング言語を使用して実施される場合、テストケース１０２、ＬｏａｄＣａｃｈｅサブルーチン４２０、およびＩｎｉｔｉａｌｉｚｅＣａｃｈｅサブルーチン４４０に使用するためのＮＵＬＬ値を定義する共通のＣヘッダファイルを提供することができる。
【００６６】
方法４００のステップ４０８において（図６）、パラメータとしてＬｏａｄＣａｃｈｅサブルーチン４２０に渡されるＮＵＬＬ値は、指定されていないウェイを示すために使用されるＮＵＬＬ値と同じでなくともよいことに留意する。
たとえば、ステップ４０８において渡されるＮＵＬＬ値は、値ゼロであっても、またはＣプログラミング言語に従って定義されるｖｏｉｄポインタであってもよい。
【００６７】
本明細書において述べる要素および構成要素は、さらなる構成要素にさらに分割しても、また一緒に結合して、同じ機能を行うより少数の構成要素を形成してもよい。
【００６８】
本明細書において述べる例はマイクロプロセッサ設計１１０に関連して述べたが、本明細書に記載する技法は、他の種類の回路設計により広く適用しうることを理解されたい。
【００６９】
上述した技法は、たとえば、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせで実施することができる。
上述した技法は、プロセッサと、プロセッサ可読記憶媒体（たとえば、揮発性メモリ、不揮発性メモリ、および／または記憶要素を含む）と、少なくとも１つの入力装置と、少なくとも１つの出力装置と、を備えるプログラマブルコンピュータで実行される１つまたは複数のコンピュータプログラムで実施することができる。
プログラムコードは、入力装置を使用して入れられた入力に適用されて、上述した関数を実行して出力を生成することができる。
出力は、１つまたは複数の出力装置に提供することができる。
【００７０】
併記の特許請求の範囲内の各コンピュータプログラムは、アセンブリ言語、機械語、高水準手続きプログラミング言語、またはオブジェクト指向プログラミング言語等、任意のプログラミング言語で実施することが可能である。
たとえば、プログラミング言語は、コンパイラ型またはインタプリタ型のプログラミング言語であることができる。
【００７１】
かかるコンピュータプログラムはそれぞれ、コンピュータプロセッサによる実行のために、マシン可読記憶装置において有形に具現されるコンピュータプログラム製品で実施することができる。
本発明の方法ステップは、コンピュータ可読媒体に有形に具現されるプログラムを実行して、入力を操作して出力を生成することによって、本発明の機能を実行するコンピュータプロセッサによって行うことができる。
例として、適したプロセッサとしては、汎用マイクロプロセッサおよび専用マイクロプロセッサの双方が挙げられる。
一般に、プロセッサは、命令およびデータを読み出し専用メモリおよび／またはランダムアクセスメモリから受け取る。
コンピュータプログラム命令の有形具現に適した記憶装置としては、たとえば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリ装置を含む、半導体メモリ装置等すべての形態の不揮発性メモリと、内部ハードディスクおよびリムーバブルディスク等の磁気ディスクと、光磁気ディスクと、ＣＤ−ＲＯＭと、が挙げられる。
上述したものはいずれも、特別に設計されたＡＳＩＣ（特定用途向け集積回路）で捕捉しても、またＡＳＩＣに組み込んでもよい。
コンピュータは、一般に、内部ディスク（図示せず）またはリムーバブルディスク等の記憶媒体からもプログラムおよびデータを受け取ることができる。
これら要素は、任意のデジタルプリントエンジン、マーキングエンジン、ディスプレイモニタ、または用紙、フィルム、表示画面、もしくは他の出力媒体上にカラーまたはグレースケールピクセルを生成可能な他のラスタ出力装置、と組み合わせて使用することのできる従来のデスクトップまたはワークステーションコンピュータ、ならびに本明細書に記載の方法を実施するコンピュータプログラムの実行に適した他のコンピュータにも見られよう。
【図面の簡単な説明】
【図１】シミュレートマイクロプロセッサ設計を初期化しテストする、本発明の一実施形態によるシステムのデータ流れ図である。
【図２】本発明の一実施形態による非初期化キャッシュ表現の図である。
【図３】本発明の一実施形態による２段階初期化プロセスの第１段階後のキャッシュ表現の図である。
【図４】本発明の一実施形態による２段階初期化プロセスの第２段階後のキャッシュ表現の図である。
【図５】本発明の一実施形態によるテストケースのキャッシュ部分の図である。
【図６】本発明の一実施形態によるマイクロプロセッサ設計でのキャッシュ表現を初期化するためにイニシャライザによって行われる方法のフローチャートである。
【図７】本発明の一実施形態による図６の初期化プロセスの第１段階および第２段階それぞれを行うために、図６の方法によって使用される方法のフローチャートである。
【図８】図８は、本発明の一実施形態によるキャッシュ表現での単一キャッシュエントリを初期化するためにイニシャライザによって行われる方法のフローチャートである。
【図９】本発明の一実施形態による図６の初期化プロセスによって使用されるキャッシュ初期化記録の一時的なリストの図である。
【符号の説明】
１０２・・・テストケース、
１０４・・・資源データベース、
１０６・・・イニシャライザ、
１０８・・・シミュレータ入力、
１１０・・・マイクロプロセッサ設計、
１１２・・・シミュレータ、
１１４・・・テストケース結果、
１１６・・・キャッシュ、
２０２・・・ウェイ、
【図１】
2004030638.tif 000003
【図２】
2004030638.tif 000004
【図３】
2004030638.tif 000005
【図４】
2004030638.tif 000006
【図５】
2004030638.tif 000007
【図６】
2004030638.tif 000008
【図７】
2004030638.tif 000009
【図８】
2004030638.tif 000010
【図９】
2004030638.tif 000011