(57)【特許請求の範囲】
【請求項１】
計算機シミュレーション上でプロセッサのモデルによりプログラムを実行する際に、該プロセッサのモデルがアクセスするメモリ領域のメモリ要素の各々に対して、該メモリ要素への書き込みが既に行われたか否かを示すフラグを割り当て、複数の該メモリ要素を含む単一の連続する割付空間を複数個離散的に割り当てることにより該メモリ領域を管理し、該単一の連続する割付空間の各々に対して、対応する該メモリ要素の全てに対して書き込みが既に行われたか否かを示すフラグを割り当て、該単一の連続する割付空間の各々に対して、対応する該メモリ要素のうちで書き込みが既に行われたメモリ要素の数を示すカウント数を割り当てることを特徴とする計算機シミュレーションプログラム。
【請求項２】
該メモリ領域を単一の連続する割付空間として管理し、該単一の連続する割付空間は複数の該メモリ要素を含むことを特徴とする請求項１記載の計算機シミュレーションプログラム。
【請求項３】
指定アドレスのメモリ要素に対して読み出し動作を実行する際に、該指定アドレスのメモリ要素に対応する該フラグが未書き込みを示す場合に、未初期化領域からの読み出し動作が発生した旨を検出することを特徴とする請求項１記載の計算機シミュレーションプログラム。
【請求項４】
該プログラムの命令をフェッチするフェッチ段階と、該命令をデコードするデコード段階と、該デコードされた命令を実行する命令実行段階を含み、該読み出し動作は該フェッチ段階と該命令実行段階で実行されることを特徴とする請求項３記載の計算機シミュレーションプログラム。
【請求項５】
未初期化領域からの読み出し動作が発生した旨をエラーログとして記録することを特徴とする請求項３記載の計算機シミュレーションプログラム。
【請求項６】
論理検証プログラムを作成し、
計算機シミュレーション上でプロセッサのモデルがアクセスするメモリ領域のメモリ要素の各々に対して該メモリ要素への書き込みが既に行われたか否かを示すフラグを割り当て、複数の該メモリ要素を含む単一の連続する割付空間を複数個離散的に割り当てることにより該メモリ領域を管理し、該単一の連続する割付空間の各々に対して、対応する該メモリ要素の全てに対して書き込みが既に行われたか否かを示すフラグを割り当て、該単一の連続する割付空間の各々に対して、対応する該メモリ要素のうちで書き込みが既に行われたメモリ要素の数を示すカウント数を割り当てる命令レベルシミュレータで該論理検証プログラムを実行し、
該フラグをチェックすることで未初期化領域からの読み出し動作が実行されたか否かを判定し、
未初期化領域からの読み出し動作が検出された場合には該論理検証プログラムを修正する
各段階を含む命令レベルシミュレータによるプロセッサのモデルの検証方法。
【請求項７】
計算機シミュレーション上でプロセッサのモデルによりプログラムを実行する際に、該プロセッサのモデルがアクセスするメモリ領域のメモリ要素の各々に対して、該メモリ要素への書き込みが既に行われたか否かを示すフラグを割り当て、
複数の該メモリ要素を含む単一の連続する割付空間を複数個離散的に割り当てることにより該メモリ領域を管理し、
該単一の連続する割付空間の各々に対して、対応する該メモリ要素の全てに対して書き込みが既に行われたか否かを示すフラグを割り当て、
該単一の連続する割付空間の各々に対して、対応する該メモリ要素のうちで書き込みが既に行われたメモリ要素の数を示すカウント数を割り当てる
各段階を含むことを特徴とする計算機シミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機シミュレーションプログラムに関し、詳しくは命令レベルで計算機プロセッサのシミュレーションを実行する計算機シミュレーションプログラムに関する。
【従来の技術】
一般に、計算機上で動作するプログラムは、テキスト領域（テキスト・セクション）、データ領域（データ・セクション）、ＢＳＳ領域（ＢＳＳセクション）、スタック領域、ヒープ領域を有する。テキスト領域は、命令列を保持する領域であり、プログラム実行時に初期値を有する。データ領域は、初期値が定まっているデータを保持する領域であり、プログラム実行時に初期値を有する。ＢＳＳ領域は、初期値が定まっていないデータを保持する領域であり、本来は初期値を有さないが、一般的にはＯＳ或いは初期化ルーチン等によって零に初期化される場合が多い。スタック領域は、手続き呼び出しのフレーム及びスタック変数を保持する領域であり、プログラム実行時に初期値を有さない。ヒープ領域は、動的なメモリ領域として用いる領域であり、プログラム実行時に初期値を有さない。動的なメモリ領域の獲得及び解放は、malloc関数及びfree関数等の専用のＡＰＩ（Application Program Interface）を介して実現される。
【０００２】
プログラム実行時にこれらの領域に対する読み書き操作を考えた場合、初期値を有する領域に対しては、書き込み操作を行う前に読み出し操作を行っても、プログラムの動作が不安定になることはない。しかし初期値を有さない領域に対しては、書き込み操作を行う前に読み出し操作を行った場合、プログラムの動作が不安定になる可能性がある。従って、正常に動作するプログラム（動作が不安定にならないプログラム）を実現するためには、不当な未初期化領域からの読み出し操作を行ってはならない。
【０００３】
ここでは、不当な未初期化領域からの読み出し操作を含むプログラムを「正しくないプログラム」と呼び、不当な未初期化領域からの読み出し操作を含まないプログラムを「正しいプログラム」と呼ぶ。
【０００４】
一般に、計算機が実行するメモリ領域への読み書き操作には、命令フェッチ、ロード命令によるデータ・ロード、ストア命令によるデータ・ストア、命令プリフェッチ、メモリから命令キャッシュへのキャッシュ・ブロックの読み出し、メモリからデータ・キャッシュへのキャッシュ・ブロックの読み出し、データ・キャッシュからメモリへのキャッシュ・ブロックの書き込み等がある。ここで、命令プリフェッチ及びメモリから命令キャッシュへのキャッシュ・ブロックの読み出し以外の操作については、「正しいプログラム」であればプログラムの動作が不安定になることはない。しかし命令プリフェッチ及びメモリから命令キャッシュへのキャッシュ・ブロックの読み出し操作については、「正しいプログラム」であっても、プリフェッチ対象領域が初期化されていない場合が考えられる。この場合、プログラムの動作が不安定になることはないが、若干の性能劣化が考えられる。
【発明が解決しようとする課題】
プロセッサを設計する場合、プロセッサの設計情報（モデル）は、ハードウェア記述言語にて記述されることが多い。この際、プロセッサモデルの設計の確からしさを確認する作業として、ハードウェア記述言語を取り扱えるシミュレータ上で、論理検証プログラムをプロセッサモデルにより実行することにより、論理検証作業を実行することが多い。
【０００５】
ここで、論理検証プログラムが「正しくないプログラム」であった場合を考えると、不当な未初期化領域が読み出されるので、モデルが期待の動作をしない可能性がある。また、論理検証プログラムが「正しいプログラム」であったとしても、プリフェッチ対象領域が初期化されていない場合等には、不定として表現される未初期化領域が読み出されるので、モデルが期待の動作をしない可能性がある。
【０００６】
このように論理検証プログラムが未初期化領域を読み出す場合にはモデルが期待の動作をしないので、そのような論理検証プログラムを使用したのでは、プロセッサモデルの設計について正当な検証作業を行うことが出来ない。従って、未初期化領域を読み出すような論理検証プログラムが作成された場合には、未初期化領域を読み出している旨を検出して、論理検証プログラムを修正することが望ましい。
【０００７】
以上を鑑みて、本発明は、未初期化領域の読み出しを検出することが可能な計算機シミュレーションプログラムを提供することを目的とする。
【課題を解決するための手段】
本発明による計算機シミュレーションプログラムは、計算機シミュレーション上でプロセッサのモデルによりプログラムを実行する際に、該プロセッサのモデルがアクセスするメモリ領域のメモリ要素の各々に対して、該メモリ要素への書き込みが既に行われたか否かを示すフラグを割り当て、複数の該メモリ要素を含む単一の連続する割付空間を複数個離散的に割り当てることにより該メモリ領域を管理し、該単一の連続する割付空間の各々に対して、対応する該メモリ要素の全てに対して書き込みが既に行われたか否かを示すフラグを割り当て、該単一の連続する割付空間の各々に対して、対応する該メモリ要素のうちで書き込みが既に行われたメモリ要素の数を示すカウント数を割り当てることを特徴とする。
【０００８】
上記計算機シミュレーションプログラムにおいては、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設ける。従って、メモリ読み出し動作を実行時にこのフラグをチェックすることで、未初期化領域からの読み出し動作が発生した場合には、これを検出することが可能になる。
【０００９】
また本発明によるプロセッサのモデルの検証方法は、論理検証プログラムを作成し、計算機シミュレーション上でプロセッサのモデルがアクセスするメモリ領域のメモリ要素の各々に対して該メモリ要素への書き込みが既に行われたか否かを示すフラグを割り当て、複数の該メモリ要素を含む単一の連続する割付空間を複数個離散的に割り当てることにより該メモリ領域を管理し、該単一の連続する割付空間の各々に対して、対応する該メモリ要素の全てに対して書き込みが既に行われたか否かを示すフラグを割り当て、該単一の連続する割付空間の各々に対して、対応する該メモリ要素のうちで書き込みが既に行われたメモリ要素の数を示すカウント数を割り当てる命令レベルシミュレータで該論理検証プログラムを実行し、該フラグをチェックすることで未初期化領域からの読み出し動作が実行されたか否かを判定し、未初期化領域からの読み出し動作が検出された場合には該論理検証プログラムを修正する各段階を含む。
【００１０】
上記プロセッサのモデルの検証方法においては、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設け、計算機シミュレータで論理検証プログラムを実行時にこのフラグをチェックすることで、「未初期化領域からの読み出し動作」が発生した旨を検出することが可能である。これにより、論理検証プログラムを適宜修正して、適切な論理検証作業を実行することが出来る。
【発明の実施の形態】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１１】
図１は、本発明による命令レベルの計算機シミュレータのフローチャートである。
【００１２】
本発明による命令レベルシミュレータは、ステップＳＴ１で、命令フェッチを行い、実行する命令を命令レジスタに格納する。次にステップＳＴ２で、命令デコードを行い、実行する命令を解釈する。最後にステップＳＴ３で、命令実行を行う。
【００１３】
図２は、命令フェッチのフローチャートである。
【００１４】
命令フェッチ段階では、まずステップＳＴ１で、フェッチすべき命令アドレスの計算を行う。次にステップＳＴ２で、計算されたアドレスに対応するメモリ領域から命令を読み出す。最後にステップＳＴ３で、読み出した命令を命令レジスタに格納する。
【００１５】
図３は、命令実行のフローチャートである。
【００１６】
命令実行段階では、まずステップＳＴ１で、命令の種別を判別する。
【００１７】
実行すべき命令がロード命令であった場合、ステップＳＴ２で、レジスタの読み出し結果に基づき実効アドレスを計算する。ステップＳＴ３で、計算した実効アドレスに対応するメモリ領域を読み出す。ステップＳＴ４で、読み出した内容をロード・データとしてレジスタに書き込む。
【００１８】
実行すべき命令がストア命令であった場合、ステップＳＴ５で、レジスタの読み出し結果に基づき実効アドレスを計算する。ステップＳＴ６で、レジスタからストア・データを読み出す。ステップＳＴ７で、ストア・データを実効アドレスに対応するメモリ領域に書き込む。
【００１９】
実行すべき命令が演算命令であった場合、ステップＳＴ８で、レジスタを読み出す。ステップＳＴ９で、読み出し結果に基づき演算を行う。ステップＳＴ１０で、演算結果をレジスタに書き込む。
【００２０】
実行すべき命令が分岐命令であった場合、ステップＳＴ１１で、レジスタを読み出す。ステップＳＴ１２で、読み出し結果に基づき、分岐アドレスを計算する。ステップＳＴ１３で、計算した結果をプログラムカウンタ（レジスタ）に書き込む。
【００２１】
本発明による命令レベルシミュレータにおいては、図２の命令フェッチ段階のステップＳＴ２及び図３の命令実行段階のステップＳＴ３にあるメモリ読み出し動作、及び図３の命令実行段階のステップＳＴ７にあるメモリ書き込み動作において、未初期化領域読み出し検出を可能にするための処理を行う。
【００２２】
図４は、本発明によるメモリ書き込み動作の第１実施例を示すフローチャートである。図５は、本発明によるメモリ読み出し動作の第１実施例を示すフローチャートである。
【００２３】
まず準備段階として、命令シミュレータの命令シミュレータの起動時に、メモリの各要素に対応するフラグを０に初期化する。図６は、第１実施例に対応するデータ構造を示す図である。図６に示されるように、メモリ領域１０は、メモリ値を格納する領域であるメモリ要素１０ａとそれに対応するフラグ領域１０ｂが、複数個集まった単一の纏まりとして割り当てられる。このフラグ領域１０ｂの各々を、命令シミュレータの起動時に０に初期化する。以降、フラグ領域１０ｂのフラグをフラグＡと呼ぶ。
【００２４】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１０ａに対して書き込みを行うメモリ書き込み動作を実行すると、まず図４のステップＳＴ１で、書き込み対象のメモリ要素１０ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ２でフラグAを１に変更し、ステップＳＴ３に進む。フラグAが０でなければ、そのままステップＳＴ３に進む。ステップＳＴ３で、指定アドレスのメモリ要素１０ａに書き込みデータを書き込む。
【００２５】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１０ａに対して読み出しを行うメモリ読み出し動作を実行すると、まず図５のステップＳＴ１で、読み出し対象のメモリ要素１０ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ２で未初期化領域に対する読み出し動作を検出し、ステップＳＴ３に進む。フラグAが０でなければ、そのままステップＳＴ３に進む。ステップＳＴ３で、指定アドレスのメモリ要素１０ａからデータを読み出す。
【００２６】
このように、本発明のメモリ書き込み動作及びメモリ読み出し動作の第１実施例においては、複数のメモリ要素を一纏まりの記憶空間として管理する場合に、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設けることで、未初期化領域からの読み出し動作を検出することが可能になる。
【００２７】
図７は、本発明によるメモリ書き込み動作の第２実施例を示すフローチャートである。図８は、本発明によるメモリ読み出し動作の第２実施例を示すフローチャートである。
【００２８】
図９は、第２実施例に対応するデータ構造を示す図である。図９に示されるように、メモリ領域１２は離散的に割り当てられる複数のメモリ割付領域１３を含み、各メモリ割付領域１３は、メモリ値を格納する領域であるメモリ要素１３ａとそれに対応するフラグ領域１３ｂが、複数個集まった単一の纏まりとして割り当てられる。以降、フラグ領域１３ｂのフラグをフラグＡと呼ぶ。
【００２９】
図１０は、図９の離散メモリ領域を管理するデータ構造を示す図である。図１０に示されるようにメモリ割付管理テーブル１４を設け、各メモリ割付領域１３の先頭アドレスをテーブルエントリ１４ａとし、各先頭アドレスに対応するメモリ割付領域１３へのポインタを更なるテーブルエントリ１４ｂとする。このようにしてメモリ割付管理テーブル１４により記憶領域を管理することで、計算機シミュレーションを実行しながら、随時必要に応じてメモリ割付領域１３を増やしていくことが出来る。
【００３０】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１３ａに対して書き込みを行うメモリ書き込み動作を実行すると、まず図７のステップＳＴ１で、書き込み対象のメモリ要素１３ａを含むメモリ割付領域１３が既に割り当てられ確保されているかを判定する。確保されている場合には、ステップＳＴ２で、書き込み対象のメモリ要素１３ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ３でフラグAを１に変更し、ステップＳＴ６に進む。フラグAが０でなければ、そのままステップＳＴ６に進む。またステップＳＴ１でメモリ割付領域１３が確保されていないと判定された場合には、ステップＳＴ４で、メモリ割付領域１３を割り付けて、割り付けたメモリ割付領域１３内の全てのフラグＡを０に初期化する。その後ステップＳＴ５で、書き込み対象のメモリ要素１３ａに対応するフラグＡを１に変更する。ステップＳＴ６で、指定アドレスのメモリ要素１３ａに書き込みデータを書き込む。
【００３１】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１３ａに対して読み出しを行うメモリ読み出し動作を実行すると、まず図８のステップＳＴ１で、読み出し対象のメモリ要素１３ａを含むメモリ割付領域１３が既に割り当てられ確保されているかを判定する。確保されている場合には、ステップＳＴ２で、読み出し対象のメモリ要素１３ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ３で未初期化領域に対する読み出し動作を検出し、ステップＳＴ６に進む。フラグAが０でなければ、そのままステップＳＴ６に進む。またステップＳＴ１でメモリ割付領域１３が確保されていないと判定された場合には、ステップＳＴ４で、メモリ割付領域１３を割り付けて、割り付けたメモリ割付領域１３内の全てのフラグＡを０に初期化する。その後ステップＳＴ５で、未初期化領域に対する読み出し動作を検出する。ステップＳＴ６で、指定アドレスのメモリ要素１３ａからデータを読み出す。
【００３２】
このように、本発明のメモリ書き込み動作及びメモリ読み出し動作の第２実施例においては、複数のメモリ要素を一纏まりのメモリ割付領域として複数のメモリ割付領域を離散的に割り当てて管理する場合に、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設けることで、未初期化領域からの読み出し動作を検出することが可能になる。
【００３３】
図１１は、本発明によるメモリ書き込み動作の第３実施例を示すフローチャートである。図１２は、本発明によるメモリ読み出し動作の第３実施例を示すフローチャートである。
【００３４】
図１３は、第３実施例に対応するデータ構造を示す図である。図１３に示されるデータ構造は、フラグ領域１３ｃが各メモリ割付領域１３に対して設けられていることを除いて、図９に示される離散メモリ領域を管理する場合のデータ構造と同一である。以降、フラグ領域１３ｃのフラグをフラグＢと呼ぶ。
【００３５】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１３ａに対して書き込みを行うメモリ書き込み動作を実行すると、まず図１１のステップＳＴ１で、書き込み対象のメモリ要素１３ａを含むメモリ割付領域１３が既に割り当てられ確保されているかを判定する。確保されている場合には、ステップＳＴ２で、書き込み対象のメモリ要素１３ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ３でフラグAを１に変更し、ステップＳＴ６に進む。フラグAが０でなければ、ステップＳＴ９に進む。またステップＳＴ１でメモリ割付領域１３が確保されていないと判定された場合には、ステップＳＴ４で、メモリ割付領域１３を割り付けて、割り付けたメモリ割付領域１３内の全てのフラグＡを０に初期化する。その後ステップＳＴ５で、書き込み対象のメモリ要素１３ａに対応するフラグＡを１に変更し、ステップＳＴ６に進む。
【００３６】
ステップＳＴ６で、書き込み対象のメモリ要素１３ａを含むメモリ割付領域１３のフラグＢが０であるか否かを判定する。フラグＢが０であるならば、ステップＳＴ７に進む。フラグＢが０でなければ、ステップＳＴ９に進む。
【００３７】
ステップＳＴ７で、書き込み対象のメモリ要素１３ａを含むメモリ割付領域１３の全てのフラグＡが１であるか否かを判定する。全てのフラグＡが１であるならば、ステップＳＴ８で対応するフラグＢを１に変更して、その後ステップＳＴ９に進む。少なくとも１つのフラグＡが１でなければ、そのままステップＳＴ９に進む。
【００３８】
ステップＳＴ９で、指定アドレスのメモリ要素１３ａに書き込みデータを書き込む。
【００３９】
命令レベルシミュレータでのプログラム実行時に、指定アドレスのメモリ要素１３ａに対して読み出しを行うメモリ読み出し動作を実行すると、まず図１２のステップＳＴ１で、読み出し対象のメモリ要素１３ａを含むメモリ割付領域１３が既に割り当てられ確保されているかを判定する。確保されている場合には、ステップＳＴ２で、当該メモリ割付領域１３のフラグＢが０であるか否かを判定する。フラグＢが０であるならば、ステップＳＴ３に進む。フラグＢが０でなければ、ステップＳＴ７に進む。
【００４０】
ステップＳＴ３で、読み出し対象のメモリ要素１３ａに対応するフラグＡが０であるか否かを判定する。フラグAが０であるならば、ステップＳＴ４で未初期化領域に対する読み出し動作を検出し、ステップＳＴ７に進む。フラグAが０でなければ、そのままステップＳＴ７に進む。
【００４１】
またステップＳＴ１でメモリ割付領域１３が確保されていないと判定された場合には、ステップＳＴ５で、メモリ割付領域１３を割り付けて、割り付けたメモリ割付領域１３内の全てのフラグＡを０に初期化すると共に、対応するフラグＢを０に初期化する。その後ステップＳＴ６で、未初期化領域に対する読み出し動作を検出する。
【００４２】
ステップＳＴ７で、指定アドレスのメモリ要素１３ａからデータを読み出す。以上で処理を終了する。
【００４３】
このように、本発明のメモリ書き込み動作及びメモリ読み出し動作の第３実施例においては、複数のメモリ要素を一纏まりのメモリ割付領域として複数のメモリ割付領域を離散的に割り当てて管理する場合に、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設けると共に、メモリ割付領域毎に全てのメモリ要素が既に書き込み済みか否かを示すフラグを設ける。これにより、メモリ割付領域内の全てのメモリ要素が既に書き込み済みである場合には、各メモリ要素のフラグを逐一チェックすることなく、未初期化領域からの読み出し動作を検出することが可能になる。
【００４４】
図１４は、本発明によるメモリ書き込み動作の第４実施例を示すフローチャートである。図１５は、本発明によるメモリ読み出し動作の第４実施例を示すフローチャートである。
【００４５】
図１６は、第４実施例に対応するデータ構造を示す図である。図１６に示されるデータ構造は、カウント領域１３ｄが各メモリ割付領域１３に対して設けられていることを除いて、図１３に示される離散メモリ領域を管理する場合のデータ構造と同一である。カウント領域１３ｄは、未初期化領域であるメモリ要素１３ａに書き込み動作を実行する度に１ずつカウントアップするカウント数Ｃを格納する。
【００４６】
図１４に示されるメモリ書き込み動作の第４実施例のフローチャートは、図１１に示されるメモリ書き込み動作の第３実施例のフローチャートに対して、ステップＳＴ７がステップＳＴ７ＡとＳＴ７Ｂとに変更されていることが異なる。
【００４７】
ステップＳＴ６でフラグＢが０であると判定されると、ステップＳＴ７Ａで、カウント数Ｃを１だけインクリメントする。その後ステップＳＴ７Ｂで、カウント数Ｃがメモリ割付領域１３のメモリ要素数に等しいか否かを判定する。両者が等しければ、全てのフラグＡが１であることになるので、ステップＳＴ８で対応するフラグＢを１に変更する。両者が等しくなければ、少なくとも１つのフラグＡが１でないことになるので、そのままステップＳＴ９に進む。
【００４８】
図１５に示されるメモリ読み出し動作の第４実施例のフローチャートは、図１２に示されるメモリ読み出し動作の第３実施例のフローチャートと同一であるので説明を省略する。
【００４９】
このように、本発明のメモリ書き込み動作及びメモリ読み出し動作の第４実施例においては、複数のメモリ要素を一纏まりのメモリ割付領域として複数のメモリ割付領域を離散的に割り当てて管理する場合に、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設けると共に、メモリ割付領域毎に全てのメモリ要素が既に書き込み済みか否かを示すフラグと、既に書き込み済みのメモリ要素の数を示すカウンタとを設ける。これにより、各メモリ要素のフラグを逐一チェックすることなく、カウンタをチェックするだけで、メモリ割付領域内の全てのメモリ要素が既に書き込み済みになったか否かを容易に判定することが出来る。従って、未初期化領域からの読み出し動作を効率的に検出することが可能になる。
【００５０】
図１７は、本発明による計算機シミュレータを用いた検証作業のフローチャートである。
【００５１】
ステップＳＴ１で、論理検証プログラムを作成する。ステップＳＴ２で、論理検証プログラムを命令レベルシミュレータで実行する。即ち、図１に示される命令レベルシミュレータを実行することにより、ステップＳＴ１で作成された論理検証プログラムをシミュレータ上で実行する。この際、データ書き込み及びデータ読み出し動作に関しては、前述の第１乃至第４実施例の何れかの実施例を用いる。
【００５２】
ステップＳＴ３で、論理検証プログラムが正常に終了し、且つ、未初期化領域のアクセスが検出されなかったか否かを判定する。前述の第１乃至第４実施例において、未初期化領域からの読み出し動作が検出されると、「未初期化領域からの読み出し動作」を実行した旨を、読み出しアドレス等の情報と共に例えばエラーログに記録する。このエラーログを確認することにより、「未初期化領域からの読み出し動作」があったか否かを確認することが出来る。またこの「未初期化領域からの読み出し動作」が発生した旨の情報は、発生ごとに計算機シミュレータのディスプレイに逐次表示してよい。
【００５３】
ステップＳＴ３の判定がＮＯの場合、論理検証プログラムに問題があるので、ステップＳＴ４で論理検証プログラムを修正し、ステップＳＴ２以降の処理を繰り返す。ステップＳＴ３の判定がＹＥＳの場合、論理検証プログラムに問題がないので、ステップＳＴ５で論理検証プログラムを用いた検証作業を実行する。
【００５４】
以上で処理を終了する。
【００５５】
このように本発明においては、計算機シミュレータで論理検証プログラムを実行時に、「未初期化領域からの読み出し動作」が発生した旨を検出することが可能であるので、論理検証プログラムを適宜修正して、適切な論理検証作業を実行することが出来る。
【００５６】
図１８は、本発明による計算機シミュレーションを実行する装置の構成を示す図である。
【００５７】
図１８に示されるように、本発明による計算機シミュレーションを実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図１８の装置は、コンピュータ５１０と、コンピュータ５１０に接続されるディスプレイ装置５２０、通信装置５２３、及び入力装置よりなる。入力装置は、例えばキーボード５２１及びマウス５２２を含む。コンピュータ５１０は、ＣＰＵ５１１、ＲＡＭ５１２、ＲＯＭ５１３、ハードディスク等の二次記憶装置５１４、可換媒体記憶装置５１５、及びインターフェース５１６を含む。
【００５８】
キーボード５２１及びマウス５２２は、ユーザとのインターフェースを提供するものであり、コンピュータ５１０を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置５２０は、コンピュータ５１０で処理された結果等を表示すると共に、コンピュータ５１０を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置５２３は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
【００５９】
本発明による計算機シミュレーション方法は、コンピュータ５１０が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置５１５に装着可能な記憶媒体Ｍに記憶されており、記憶媒体Ｍから可換媒体記憶装置５１５を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体（図示せず）に記憶されており、この記憶媒体から通信装置５２３及びインターフェース５１６を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。
【００６０】
キーボード５２１及び／又はマウス５２２を介してユーザからプログラム実行指示があると、ＣＰＵ５１１は、記憶媒体Ｍ、遠隔地記憶媒体、或いは二次記憶装置５１４からプログラムをＲＡＭ５１２にロードする。ＣＰＵ５１１は、ＲＡＭ５１２の空き記憶空間をワークエリアとして使用して、ＲＡＭ５１２にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおＲＯＭ５１３は、コンピュータ５１０の基本動作を制御するための制御プログラムが格納されている。
【００６１】
上記コンピュータプログラムを実行することで、上記各実施例で説明されたように、命令レベルの計算機シミュレーション方法を実行する。またこの計算機シミュレーション環境が、計算機シミュレータである。
【００６２】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【発明の効果】
本発明による計算機シミュレーションプログラムにおいては、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設ける。従って、メモリ読み出し動作を実行時にこのフラグをチェックすることで、未初期化領域からの読み出し動作が発生した場合には、これを検出することが可能になる。
【００６３】
また本発明によるプロセッサのモデルの検証方法においては、メモリ要素の内容が既に書き込み済みか否かを示すフラグを各メモリ要素に対して設け、計算機シミュレータで論理検証プログラムを実行時にこのフラグをチェックすることで、「未初期化領域からの読み出し動作」が発生した旨を検出することが可能である。これにより、論理検証プログラムを適宜修正して、適切な論理検証作業を実行することが出来る。
【図面の簡単な説明】
【図１】本発明による命令レベルの計算機シミュレータのフローチャートである。
【図２】命令フェッチのフローチャートである。
【図３】命令実行のフローチャートである。
【図４】本発明によるメモリ書き込み動作の第１実施例を示すフローチャートである。
【図５】本発明によるメモリ読み出し動作の第１実施例を示すフローチャートである。
【図６】第１実施例に対応するデータ構造を示す図である。
【図７】本発明によるメモリ書き込み動作の第２実施例を示すフローチャートである。
【図８】本発明によるメモリ読み出し動作の第２実施例を示すフローチャートである。
【図９】第２実施例に対応するデータ構造を示す図である。
【図１０】図９の離散メモリ領域を管理するデータ構造を示す図である。
【図１１】本発明によるメモリ書き込み動作の第３実施例を示すフローチャートである。
【図１２】本発明によるメモリ読み出し動作の第３実施例を示すフローチャートである。
【図１３】第３実施例に対応するデータ構造を示す図である。
【図１４】本発明によるメモリ書き込み動作の第４実施例を示すフローチャートである。
【図１５】本発明によるメモリ読み出し動作の第４実施例を示すフローチャートである。
【図１６】第４実施例に対応するデータ構造を示す図である。
【図１７】本発明による計算機シミュレータを用いた検証作業のフローチャートである。
【図１８】本発明による計算機シミュレーションを実行する装置の構成を示す図である。
【符号の説明】
５１０  コンピュータ
５１１  ＣＰＵ
５１２  ＲＡＭ
５１３  ＲＯＭ
５１４  二次記憶装置
５１５  可換媒体記憶装置
５１６  インターフェース
５２０  ディスプレイ装置
５２１  キーボード
５２２  マウス
５２３  通信装置
【図１】
0003848171.tif 000002
【図２】
0003848171.tif 000003
【図３】
0003848171.tif 000004
【図４】
0003848171.tif 000005
【図５】
0003848171.tif 000006
【図６】
0003848171.tif 000007
【図７】
0003848171.tif 000008
【図８】
0003848171.tif 000009
【図９】
0003848171.tif 000010
【図１０】
0003848171.tif 000011
【図１１】
0003848171.tif 000012
【図１２】
0003848171.tif 000013
【図１３】
0003848171.tif 000014
【図１４】
0003848171.tif 000015
【図１５】
0003848171.tif 000016
【図１６】
0003848171.tif 000017
【図１７】
0003848171.tif 000018
【図１８】
0003848171.tif 000019