(57)【特許請求の範囲】
【請求項１】
複数のプロセッサモデルと記憶モデルとで構成されるＬＳＩモデルを記憶する記憶装置とプロセッサとを有し、前記ＬＳＩモデルのサイクルシミュレーションを実行するシミュレータが、
前記複数のプロセッサモデルの中の第１のプロセッサモデルが所定数の命令を実行した場合、前記プロセッサにより、前記所定数の命令の終了時のサイクル数を検出する第１の検出工程と、
前記プロセッサにより、前記複数のプロセッサモデルの中の第２のプロセッサモデルの現在実行中の命令が前記記憶モデルからの読出し命令であるか否かを判断する第１の判断工程と、
前記第１の判断工程によって前記記憶モデルからの読出し命令であると判断された場合、前記プロセッサにより、前記第１のプロセッサモデルが前記所定数の命令のいずれかの命令により前記記憶モデルにデータを書き込んだアドレスと前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第１の判定工程と、
前記第１の判定工程によって一致すると判定された場合、前記プロセッサにより、前記第２のプロセッサモデルの現在のサイクル数と、前記第１の検出工程によって検出されたサイクル数とを比較する第１の比較工程と、
前記第１の比較工程により前記現在のサイクル数が大きい場合、前記プロセッサにより、前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスおよび当該アドレスに記憶されているデータを、前記記憶モデルとは異なる記憶領域に格納する格納工程と、
前記第２のプロセッサモデルが所定数の命令を実行した場合、前記プロセッサにより、前記第２のプロセッサモデルの前記所定数の命令の終了時のサイクル数を検出する第２の検出工程と、
前記プロセッサにより、前記第２のプロセッサモデルの所定数の命令の実行後における前記第１のプロセッサモデルの現在実行中の命令が、前記記憶モデルからの読出し命令であるか否かを判断する第２の判断工程と、
前記第２の判断工程によって前記記憶モデルからの読出し命令であると判断された場合、前記プロセッサにより、前記第２のプロセッサモデルが前記記憶モデルから前記データを読み出したアドレスと前記第１のプロセッサの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第２の判定工程と、
前記第２の判定工程によって一致すると判定された場合、前記プロセッサにより、前記第１のプロセッサモデルの現在のサイクル数と、前記第２の検出工程によって検出されたサイクル数とを比較する第２の比較工程と、
前記第２の比較工程により前記現在のサイクル数が小さい場合、前記プロセッサにより、前記記憶領域に記憶された、前記記憶モデルのアドレスから当該アドレスに記憶されているデータを読み出す工程と、
を実行することを特徴とするサイクルシミュレーション方法。
【請求項２】
複数のプロセッサモデルと記憶モデルとで構成されるＬＳＩモデルを記憶する記憶装置とプロセッサとを有し、前記ＬＳＩモデルのサイクルシミュレーションを実行するシミュレータに、
前記複数のプロセッサモデルの中の第１のプロセッサモデルが所定数の命令を実行した場合、前記所定数の命令の終了時のサイクル数を検出する第１の検出工程と、
前記複数のプロセッサモデルの中の第２のプロセッサモデルの現在実行中の命令が前記記憶モデルからの読出し命令であるか否かを判断する第１の判断工程と、
前記第１の判断工程によって前記記憶モデルからの読出し命令であると判断された場合、前記第１のプロセッサモデルが前記所定数の命令のいずれかの命令により前記記憶モデルにデータを書き込んだアドレスと前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第１の判定工程と、
前記第１の判定工程によって一致すると判定された場合、前記第２のプロセッサモデルの現在のサイクル数と、前記第１の検出工程によって検出されたサイクル数とを比較する第１の比較工程と、
前記第１の比較工程により前記現在のサイクル数が大きい場合、前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスおよび当該アドレスに記憶されているデータを、前記記憶モデルとは異なる記憶領域に格納する格納工程と、
前記第２のプロセッサモデルが所定数の命令を実行した場合、前記第２のプロセッサモデルの前記所定数の命令の終了時のサイクル数を検出する第２の検出工程と、
前記第２のプロセッサモデルの所定数の命令の実行後における前記第１のプロセッサモデルの現在実行中の命令が、前記記憶モデルからの読出し命令であるか否かを判断する第２の判断工程と、
前記第２の判断工程によって前記記憶モデルからの読出し命令であると判断された場合、前記第２のプロセッサモデルが前記記憶モデルから前記データを読み出したアドレスと前記第１のプロセッサの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第２の判定工程と、
前記第２の判定工程によって一致すると判定された場合、前記第１のプロセッサモデルの現在のサイクル数と、前記第２の検出工程によって検出されたサイクル数とを比較する第２の比較工程と、
前記第２の比較工程により前記現在のサイクル数が小さい場合、前記プロセッサにより、前記記憶領域に記憶された、前記記憶モデルのアドレスから当該アドレスに記憶されているデータを読み出す工程と、
を実行させることを特徴とするサイクルシミュレーションプログラム。
【請求項３】
複数のプロセッサモデルと記憶モデルとで構成されるＬＳＩモデルを記憶する記憶装置とプロセッサとを有し、前記ＬＳＩモデルのサイクルシミュレーションを実行するシミュレータであって、
前記複数のプロセッサモデルの中の第１のプロセッサモデルが所定数の命令を実行した場合、前記プロセッサにより、前記所定数の命令の終了時のサイクル数を検出する第１の検出処理と、
前記プロセッサにより、前記複数のプロセッサモデルの中の第２のプロセッサモデルの現在実行中の命令が前記記憶モデルからの読出し命令であるか否かを判断する第１の判断処理と、
前記第１の判断処理によって前記記憶モデルからの読出し命令であると判断された場合、前記プロセッサにより、前記第１のプロセッサモデルが前記所定数の命令のいずれかの命令により前記記憶モデルにデータを書き込んだアドレスと前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第１の判定処理と、
前記第１の判定処理によって一致すると判定された場合、前記プロセッサにより、前記第２のプロセッサモデルの現在のサイクル数と、前記第１の検出処理によって検出されたサイクル数とを比較する第１の比較処理と、
前記第１の比較処理により前記現在のサイクル数が大きい場合、前記プロセッサにより、前記第２のプロセッサモデルの現在実行中の命令で前記記憶モデルから読み出すアドレスおよび当該アドレスに記憶されているデータを、前記記憶モデルとは異なる記憶領域に格納する格納処理と、
前記第２のプロセッサモデルが所定数の命令を実行した場合、前記プロセッサにより、前記第２のプロセッサモデルの前記所定数の命令の終了時のサイクル数を検出する第２の検出処理と、
前記プロセッサにより、前記第２のプロセッサモデルの所定数の命令の実行後における前記第１のプロセッサモデルの現在実行中の命令が、前記記憶モデルからの読出し命令であるか否かを判断する第２の判断処理と、
前記第２の判断処理によって前記記憶モデルからの読出し命令であると判断された場合、前記プロセッサにより、前記第２のプロセッサモデルが前記記憶モデルから前記データを読み出したアドレスと前記第１のプロセッサの現在実行中の命令で前記記憶モデルから読み出すアドレスとが一致するか否かを判定する第２の判定処理と、
前記第２の判定処理によって一致すると判定された場合、前記プロセッサにより、前記第１のプロセッサモデルの現在のサイクル数と、前記第２の検出処理によって検出されたサイクル数とを比較する第２の比較処理と、
前記第２の比較処理により前記現在のサイクル数が小さい場合、前記プロセッサにより、前記記憶領域に記憶された、前記記憶モデルのアドレスから当該アドレスに記憶されているデータを読み出す処理と、
を実行することを特徴とするシミュレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＬＳＩモデルを構成する複数の実行ブロックのサイクルを同期させて並列にシミュレーションをおこなうサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータに関する。
【背景技術】
【０００２】
近年、パーソナル・コンピュータ用の汎用ＣＰＵ（中央処理装置）と同様に、組み込み型プロセッサにおいてもＣＰＵはマルチコア化へシフトしている。また、ますます複雑化するシステムＬＳＩの開発期間の短縮のために、設計の早い段階からハードウェアとソフトウェアの協調設計を行うことが重要である。しかし、既存のシミュレータでは十分なシミュレーション速度が得られていないため、高速なソフトウェア／ハードウェア協調シミュレータの開発が課題となっている。
【０００３】
ここで、従来のサイクルモデルについて説明する。図１２は、シミュレーション対象となるＬＳＩモデルを示す説明図である。図１２において、ＬＳＩモデルは、プロセッサコアモデルＰＥ＃（＃は番号、図１２では「０」および「１」）と、周辺ブロックモデルＰＢと、からなる実行ブロックを有している。ここで、図１２に示したＬＳＩモデルを命令レベルシミュレータ（ＩＳＳ：Instruction Set Simulator）により実行した場合のサイクルモデルについて説明する。
【０００４】
図１３は、図１２に示したＬＳＩモデルをＩＳＳシミュレータにより実行した場合のサイクルモデルを示す説明図である。図１３において、ＰＥ♯は、図１２に示したプロセッサコアモデルＰＥ＃の命令実行処理時間（サイクル数）をあらわしている。同様に、ＰＢも、図１２に示した周辺ブロックモデルＰＢの命令実行処理時間（サイクル数）をあらわしている。
【０００５】
また、図１３中、Ｃ＃（＃は番号、図１３では０，１，２…）対応する命令実行処理時間における所要サイクル数をあらわしている。たとえば、サイクル数Ｃ０は、プロセッサコアモデルＰＥ０を実行する場合の所要サイクル数をあらわしている。図１３に示した従来のサイクルモデルでは、サイクルの加算をおこなってサイクル期間内で差分をとり、サイクルを計算することとなる。なお、上記従来のシミュレータに関連する従来技術としては、たとえば、下記特許文献１〜３の従来技術が挙げられる。
【０００６】
【特許文献１】特開平５−３５５３４号公報
【特許文献２】特開平４−３５２２６２号公報
【特許文献３】特開２００１−２５６２６７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、図１３に示した従来のサイクルモデルでは、シリアルに命令実行されるため、数珠繋ぎ式にシミュレーション時間が増加するという問題があった。一方、シミュレーション処理時間の短縮化のため各実行ブロックを並列に実行する場合、メモリモデルやレジスタモデルに対しデータが正確に反映されず、誤ったシミュレーションを実行してしまうという問題があった。
【０００８】
図１４は、並列シミュレーションを示す説明図である。図１４では、説明を簡略化するため、プロセッサコアモデルＰＥ０，ＰＥ１のみを用いて説明する。まず、実行ブロックとしてプロセッサコアモデルＰＥ０を実行する。この場合の所要サイクル数Ｃ０を１００とする。この時点では、メモリモデルのアドレスＲｅｇＡにデータＤ１が書き込まれているとする。
【０００９】
プロセッサコアモデルＰＥ０の実行終了後、（Ｂ）において、プロセッサコアモデルＰＥ１を実行する。この場合の所要サイクル数Ｃ１を１５０とする。プロセッサコアモデルＰＥ１はその実行中、１２０サイクル目に、データＤ１が書き込まれているメモリモデルのアドレスＲｅｇＡにデータＤ２を書き込んでいる。
【００１０】
プロセッサコアモデルＰＥ１の実行終了後、再度プロセッサコアモデルＰＥ０を選択して、（Ｃ）において、プロセッサコアモデルＰＥ０を実行する。このとき、この場合の所要サイクル数をＣ３とすると、このＣ３の期間中、たとえば、１１０サイクル目に、メモリモデルのアドレスＲｅｇＡに書き込まれているデータの読み出しをおこなうとする。
【００１１】
この場合、プロセッサコアモデルＰＥ０としては、メモリモデルのアドレスＲｅｇＡに書き込まれているデータＤ１を読み出したいにもかかわらず、先に実行されたプロセッサコアモデルＰＥ１により書き込まれたデータＤ２を読み出してしまうこととなり、誤ったシミュレーションを実行してしまうという問題があった。
【００１２】
この発明は、上述した従来技術による問題点を解消するため、シミュレーション時間の短縮化およびシミュレーションの高精度化を図ることができるサイクルシミュレータ、サイクルシミュレーション方法、サイクルシミュレーションプログラム、および記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、この発明にかかるサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータは、ＬＳＩモデルを構成する複数の実行ブロックのサイクルを同期させて並列にシミュレーションをおこなうサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータであって、前記複数のハードウェアモデルの中から選ばれた一の実行ブロックの所定数の命令が実行された場合、当該一の実行ブロックの前記所定数の命令の終了時のサイクル数を検出し、前記一の実行ブロックの後に選ばれた他の実行ブロックの現在実行中の命令が記憶モデルにアクセスする命令であるか否かを判断し、その判断結果に基づいて、前記一の実行ブロックが前記記憶モデルにアクセスしたアドレスと前記他の実行ブロックの現在実行中の命令が前記記憶モデルにアクセスするアドレスとが一致するか否かを判定し、その判定結果に基づいて、前記他の実行ブロックの現在のサイクル数と、前記検出工程によって検出されたサイクル数とを比較し、その比較結果に基づいて、前記他の実行ブロックの現在実行中の命令によりアクセスする前記記憶モデルのアドレスおよび当該アドレスに記憶されているデータを、前記記憶モデルとは異なる記憶領域に記憶することを特徴とする。
【００１４】
また、上記発明において、前記他の実行ブロックの所定数の命令が実行された場合、当該他の実行ブロックの前記所定数の命令の終了時のサイクル数を検出し、前記他の実行ブロックの後に再度選ばれた前記一の実行ブロックの現在実行中の命令が前記記憶モデルにアクセスする命令であるか否かを判断し、その判断結果に基づいて、前記他の実行ブロックが前記記憶モデルにアクセスしたアドレスと前記一の実行ブロックの現在実行中の命令が前記記憶モデルにアクセスするアドレスとが一致するか否かを判定し、その判定結果に基づいて、前記一の実行ブロックの現在のサイクル数と、他の実行ブロックの前記所定数の命令の終了時のサイクル数とを比較し、その比較結果に基づいて、前記記憶領域に記憶された、前記記憶モデルのアドレスおよび当該アドレスに記憶されているデータにアクセスすることとしてもよい。
【００１５】
この発明によれば、記憶モデル（メモリモデルやレジスタモデル）へのデータの反映を正確におこなうことができる。
【発明の効果】
【００１６】
本発明にかかるサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータによれば、シミュレーション時間の短縮化およびシミュレーションの高精度化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１７】
以下に添付図面を参照して、この発明にかかるサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータの好適な実施の形態を詳細に説明する。この実施の形態にかかるサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータは、図１４に示したように、各実行ブロックを順次選択しながらサイクルを同期させて並列に実行することで、サイクルシミュレーションをおこなう。
【００１８】
（サイクルシミュレータのハードウェア構成）
まず、この発明の実施の形態にかかるサイクルシミュレータのハードウェア構成について説明する。図１は、この発明の実施の形態にかかるサイクルシミュレータのハードウェア構成を示すブロック図である。
【００１９】
図１において、サイクルシミュレータは、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００２０】
ここで、ＣＰＵ１０１は、サイクルシミュレータの全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。
【００２１】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータをサイクルシミュレータに読み取らせたりする。
【００２２】
また、着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２３】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２４】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２５】
スキャナ１１２は、画像を光学的に読み取り、サイクルシミュレータ内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２６】
（サイクルシミュレーション処理手順）
つぎに、この発明の実施の形態にかかるサイクルシミュレーション処理手順について説明する。図２−１は、この発明の実施の形態にかかるサイクルシミュレーション処理手順を示すフローチャートである。図２−１において、まず初期化して（ステップＳ２０１）、サイクルシミュレーションの命令実行処理をおこなう（ステップＳ２０２）。このあと、後処理をおこなう（ステップＳ２０３）。
【００２７】
つぎに、命令実行処理（ステップＳ２０２）について詳細に説明する。図２−２は、命令実行処理手順を示すフローチャートである。ここでは、実行ブロックの番号をｉとすると、ｉ番目の実行ブロックはＢｉであらわされる。たとえば、図１２に示したＬＳＩモデルを例に挙げると、プロセッサコアモデルＰＥ０が実行ブロックＢ１、プロセッサコアモデルＰＥ１が実行ブロックＢ２、周辺ブロックモデルＰＢが実行ブロックＢ３となる。
【００２８】
図２−２において、まず、ｉ＝０とし（ステップＳ２１１）、サイクルシミュレーションの終了か否かを判断する（ステップＳ２１２）。この判断は、ユーザからの終了入力の有無で判断してもよく、また、すべての命令実行の終了検出の有無で判断してもよい。終了する場合（ステップＳ２１２：Ｙｅｓ）、ステップＳ２０３に移行して後処理を実行する。
【００２９】
一方、終了しないと判断された場合（ステップＳ２１２：Ｎｏ）、ｉをインクリメントし（ステップＳ２１３）、ｉ＞ｎであるか否かを判断する（ステップＳ２１４）。ここで、ｎは実行ブロックＢｉの総数である。たとえば、図１２ではｎ＝３である。
【００３０】
ｉ＞ｎである場合（ステップＳ２１４：Ｙｅｓ）、ステップＳ２１１に戻る。これにより、ｉ＝０にリセットすることができ、ステップＳ２１２およびステップＳ２１３をおこなうことで、再度、先頭の実行ブロックＢ１を選択することができる。
【００３１】
一方、ｉ＞ｎでない場合（ステップＳ２１４：Ｎｏ）、実行ブロックＢｉを選択したあと（ステップＳ２１５）、ｊ＝１とする（ステップＳ２１６）。ここで、ｊは選択された実行ブロックＢｉの命令実行の番号である。
【００３２】
そして、ｊ＞Ｎか否かを判断する（ステップＳ２１７）。ここで、Ｎは、選択された実行ブロックＢｉの命令実行数である。ｊ＞Ｎである場合（ステップＳ２１７：Ｙｅｓ）、ｉ＝ｎか否かを判断する（ステップＳ２１８）。ｉ＝ｎである場合（ステップＳ２１７：Ｙｅｓ）、ステップＳ２１１に戻り、つぎの実行ブロックを選択する（ステップＳ２１１〜Ｓ２１５）。一方、ｉ≠ｎである場合（ステップＳ２１８：Ｎｏ）、ステップＳ２１２に戻る。
【００３３】
また、ステップＳ２１７において、ｊ＞Ｎでない場合（ステップＳ２１７：Ｎｏ）、ｊ番目の命令実行処理をおこなう（ステップＳ２１９）。ｊ番目の命令実行処理が終わると、ｊをインクリメントして（ステップＳ２２０）、ステップＳ２１７に戻る。なお、上述したステップＳ２１７とステップ２１８の処理順序については、ステップ２１８を先におこなうこととしてもよい。
【００３４】
つぎに、図２−２に示したｊ番目の命令実行処理について詳細に説明する。図３は、ｊ番目の命令実行処理手順を示すフローチャートである。図３において、ｊ番目の命令がメモリアクセスコールか否かを判断する（ステップＳ３０１）。メモリアクセスコールでない場合（ステップＳ３０１：Ｎｏ）、当該命令を実行し（ステップＳ３０２）、図２に示したステップＳ２１９に移行する。
【００３５】
一方、メモリアクセスコールである場合（ステップＳ３０１：Ｙｅｓ）、アクセスするアドレスが、実行ブロックＢｋがアクセスしたアドレスと一致するか否かを判断する（ステップＳ３０３）。実行ブロックＢｋ（ｋ＜ｉ）とは、現在実行中の実行ブロックＢｋよりも先に実行された実行ブロックである。
【００３６】
アドレスが不一致である場合（ステップＳ３０３：Ｎｏ）、命令実行し（ステップＳ３１０）、そのときの所要サイクル数を加算して（ステップＳ３１１）、ステップＳ２１９へ移行する。一方、アドレスが一致した場合（ステップＳ３０３：Ｙｅｓ）、現在実行中の実行ブロックＢｉのサイクルが、実行ブロックＢｋよりサイクルが進んでいるか否かを判断する（ステップＳ３０４）。
【００３７】
たとえば、図１４に示した（Ｃ）において、現在実行中の実行ブロックＢｉをプロセッサコアモデルＰＥ１、実行ブロックＢｋをプロセッサコアモデルＰＥ０とすると、プロセッサコアモデルＰＥ１における現在のサイクルと、プロセッサコアモデルＰＥ０のサイクルＣ０（＝１００）を比較する。
【００３８】
実行ブロックＢｋよりサイクルが進んでいる場合（ステップＳ３０４：Ｙｅｓ）、メモリモデルにアクセスする（ステップＳ３０５）。たとえば、このアクセスがライトである場合には、メモリモデルのアドレスのデータを書き換える。
【００３９】
そして、現在のサイクル数にｊ番目の命令実行の所要サイクル数を加算して（ステップＳ３０６）、今回のアクセス時（書換前）のアドレス、サイクル、データ、データサイズを遅延テーブルに書き込む（ステップＳ３０７）。そして、ステップＳ２１９に移行する。
【００４０】
一方、ステップＳ３０４において、実行ブロックＢｋよりサイクルが進んでいない場合（ステップＳ３０４：Ｎｏ）、アクセス先のアドレスを手掛かりとして遅延テーブルにアクセスする（ステップＳ３０８）。
【００４１】
たとえば、このアクセスがリードである場合には、今回のアクセス時のアドレス、サイクル、データ、データサイズを遅延テーブルから読み出す。そして、現在のサイクル数にｊ番目の命令実行の所要サイクル数を加算して（ステップＳ３０９）、ステップＳ２２０に移行する。
【００４２】
ここで、遅延テーブルについて説明する。図４は、この発明の実施の形態にかかる遅延テーブルを模式的に示した説明図である。図４において、遅延テーブルは、実サイクル、アドレス、データ（あるいはポインタ）、データサイズなどの各種情報が格納され、実サイクルの若い順にソートされる。図５は、メモリモデルを示す説明図である。メモリモデルにおいても、実サイクル、アドレス、データ（あるいはポインタ）、データサイズなどの各種情報が格納される。
【００４３】
たとえば、ステップＳ３０４において、実行ブロックＢ２（プロセッサコアモデルＰＥ１）の現在のサイクル（１２０）は、実行ブロックＢ１（プロセッサコアモデルＰＥ０）のサイクルよりも進んでいるとする。
【００４４】
ここで、図１４の（Ｃ）に示したように、実行ブロックＢ２（プロセッサコアモデルＰＥ１）により、１２０サイクルでアドレスＲｅｇＡにデータサイズｓ１のデータＤ１を書き込むという命令であった場合、ステップＳ３０５に示したように、メモリモデルには書き込み後におけるサイクル数（１２０サイクル）、アドレスＲｅｇＡ、データＤ２、データサイズｓ２を書き込む（図５を参照。）。
【００４５】
一方、遅延テーブルには、書き込み前におけるサイクル数（１２０サイクル）、アドレスＲｅｇＡ、データＤ１、データサイズｓ１を書き込む（図４を参照。）。このあと、実行ブロックＢ１（プロセッサコアモデルＰＥ０）が選択され、図１４の（Ｃ）に示したように、サイクル期間Ｃ３の１１０サイクルでアドレスＲｅｇＡに保持されているデータを読み込む際、メモリモデルではなくアドレスＲｅｇＡを手掛かりとして遅延テーブルを読み込む。これにより、各実行ブロックＢｉによるデータの反映を正確におこなうことができる。
【００４６】
図６は、サイクル管理テーブルを示す説明図である。サイクル管理テーブルは、所定範囲のアドレスごとに遅延テーブルを有している。メモリアクセスコールでデータサイズを指定するが、そのデータサイズとアドレスで以下のどのグループの遅延テーブルにアクセスするかを決定する。
【００４７】
また、モデルとなるシステム全体で１つのメモリマップを持つ場合と、各プロセッサコアモデルＰＥ０，ＰＥ１にあるメモリ範囲が与えられて処理する場合がある。その場合に、分割的にもっていると１つのメモリモデルにアクセスする必要がなく分散して別メモリとして持てるという利点もある。
【００４８】
図７は、サイクル管理テーブルの概念を示す説明図である。図７では、たとえば、２００サイクルだけを保持する。このサイクル範囲は変更可能である。２５０サイクルのデータｎ４が発生し、そのデータｎ４を遅延テーブルに挿入する。そして、次のシミュレーションが実行され、そのベースサイクル１００のノードが追加される。このとき、２００サイクルの期間だけ保持されるため、サイクル３００〜１００の間が遅延テーブルに残り、それ以下のサイクルのデータは破棄される。
【００４９】
これにより、ＳｏＣなどのように各マスターが共有リソースをアクセスするときの順位を管理することでデータの不整合を防ぐことが可能である。また、古いサイクルデータは破棄するため計算機のメモリの消費を減らすことができる。
【００５０】
つぎに、並列動作の仕組みについて説明する。並列動作とは、複数のハードウェアを並列に動作させる処理である。ここで、ハードウェアＨＷ０を起動するレジスタは以下の通りである。
・ＲｅｇＨ［３１］＝０ｘ８ｘｘｘ＿ｘｘｘｘまたはＲｅｇＨ．ｖ＝１
【００５１】
また、ハードウェアＨＷ１を起動するレジスタは以下の通りである。
・ＲｅｇＷ［３１］＝０ｘ８ｘｘｘ＿ｘｘｘｘまたはＲｅｇＷ．ｖ＝１
【００５２】
ただし、ｘは０か１のどちらかを指す。ＲｅｇＨ.ｖはデータ構造体を指す。あるサイクル単位ｃで遅延テーブルかメモリモデルをチェックして動作させることができる。このｃはｃ＝１だと、毎サイクルハードウェア起動フラグ（ＲｅｇＨ．ｖおよびＲｅｇＷ．ｖ）をチェックすることになる。シミュレーションのパフォーマンス向上のためにｃ＝１０サイクルなどにしてレジスタチェックサイクルを間引く。
【００５３】
図８は、並列動作を示す概念図である。図８において、ハードウェアＨＷ０，ＨＷ１はスレーブになっているが、ハードウェアＨＷ０，ＨＷ１がプロセッサコアモデルＰＥ＃と同じマスターでもかまわない。
【００５４】
この例での遅延テーブルは、例えばハードウェアＨＷ０が他のプロセッサコアモデルＰＥ０、ＰＥ１、ハードウェアＨＷ１とメモリ競合がない場合である。ハードウェアＨＷ１も同様である。但し、プロセッサコアモデルＰＥ０，ＰＥ１ではメモリ競合がある。そのため、この例での遅延テーブルはＰＥ０，ＰＥ１でどちらが先に実行されているかで範囲が決定される。
【００５５】
遅延テーブルＴａは、ベースサイクル０のときに用いられるテーブルである。この場合、ハードウェアＨＷ０，ＨＷ１が並列に実行している。ベースサイクルが１００になっていないので、ハードウェアＨＷ１は実行さない。
【００５６】
遅延テーブルＴｂはベースサイクルが１００のときに用いられるテーブルである。この場合は、ハードウェアＨＷ０が実行されている。ハードウェアＨＷ１はｃサイクル単位でチェックされてサイクル単位内に１３０が入った時にチェックされて実行される。
【００５７】
遅延テーブルＴｃはベースサイクルが２００のときに用いられるテーブルである。この場合はプロセッサコアモデルＰＥ０，ＰＥ１から、同時に同じハードウェアＨＷ０への実行レジスタへアクセスが発生した例である。
【００５８】
この場合は、設計仕様に依存するため、仕様に従ってどちらが実行するかあるいは実行しないかに対応すればよい。この例では競合という合図のみで、競合実行するところまで規定しない。
【００５９】
遅延テーブルＴｄはベースサイクル３００のときに用いられる遅延テーブルである。この場合、プロセッサコアモデルＰＥ０からの要求でハードウェアＨＷ１が実行され、プロセッサコアモデルＰＥ１の要求がきたが、ハードウェアＨＷ１が実行し終えていない例である。
【００６０】
たとえば、ハードウェアＨＷ１が１つの命令しか実行できない場合、後続の実行要求をキャンセルの場合または待機させる場合に分けられる。キャンセルの場合は、当該命令は実行しない。待機させる場合は、先の実行が終了後直ちに当該命令の実行に移る。
【００６１】
つぎに、図８に示した並列動作処理手順について説明する。図９は、この発明の実施の形態にかかる並列動作処理手順を示すフローチャートである。図９において、まず、Ｐｒｅ＿ｃｙｃｌｅの更新をおこなう（ステップＳ９０１）。
【００６２】
具体的には、ステップＳ９０１では、図８のシミュレーション期間の開始サイクル数を設定する。Ｐｒｅ＿ｃｙｃｌｅは図８の期間内の開始時はｂａｓｅ＿ｃｙｃｌｅになる。Ｐｒｅ＿ｃｙｃｌｅは遅延テーブル参照範囲のための開始サイクルを意味する。
【００６３】
つぎに、ｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅを設定する（ステップＳ９０２）。ｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅはｂａｓｅ＋ｂａｓｅ＿ｃｙｃｌｅで算出される。ｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅとは、次の期間の開始サイクルである。たとえば、図８において、期間Ａならば１００である。
【００６４】
ｂａｓｅとは、ベースサイクルの間隔（Ｎステップ数）である。図８では１００になる。また、ｂａｓｅ＿ｃｙｃｌｅとは、遅延テーブルの開始サイクル値であり、図８の各ベースサイクル値（０，１００，２００，３００…）である。
【００６５】
つぎに、遅延テーブルを参照する範囲を決定する（ステップＳ９０３）。具体的には、サーチサイクル数ｃを加算して範囲の先頭サイクル数ｃｈｅｃｋ＿ｃｙｃｌｅを決定する。サーチサイクル数ｃとは、遅延テーブルをチェックするとき、どのくらいの範囲でサーチするかを意味する。プログラム的にはいつサーチするのかを意味し、サーチ処理を間引くサイクル数である。また、ｃｈｅｃｋ＿ｃｙｃｌｅとは、遅延テーブルからサーチするときの範囲を示す。たとえば、Ｐｒｅ＿ｃｙｃｌｅからｃｈｅｃｋ＿ｃｙｃｌｅまでをサーチする。
【００６６】
つぎに、プロセッサコアモデルＰＥ０，ＰＥ１を実行する（ステップＳ９０４）。すなわち、プロセッサコアモデルＰＥ０，ＰＥ１の命令をＮ個実行する。このときに、遅延テーブルが更新される。
【００６７】
つぎに、範囲判定をおこなう（ステップＳ９０５）。この処理では、Ｐｒｅ＿ｃｙｃｌｅ〜ｃｈｅｃｋ＿ｃｙｃｌｅの範囲がｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ〜ｂａｓｅ＿ｃｙｃｌｅ内であるか否かをチェックする。範囲内である場合は（ステップＳ９０５：Ｙｅｓ）、ステップＳ９０６に移行し、範囲外であれば、ハードウェアＨＷ０，ＨＷ１は実行しないため、ステップＳ９０８に移行する。
【００６８】
ステップＳ９０６では、ＨＷ実行判定をおこなう。ハードウェアＨＷ０，ＨＷ１を起動すると判定された場合は（ステップＳ９０６：Ｙｅｓ）、ステップＳ９０７に移行する。一方、ハードウェアＨＷ０，ＨＷ１を起動しないと判定された場合は（ステップＳ９０６：Ｎｏ）、ステップＳ９０８に移行する。
【００６９】
ＨＷ実行判定では、具体的には、Ｐｒｅ＿ｃｙｃｌｅ〜ｃｈｅｃｋ＿ｃｙｃｌｅの範囲でハードウェアＨＷ０，ＨＷ１が起動するためのレジスタ（たとえば、ＲｅｇＨ．ｖやＲｅｇＷ．ｖ）などを遅延テーブルからサーチする。遅延テーブルにない場合、メモリモデルも読み出し、ＲｅｇＨ．ｖ＝１やＲｅｇＷ．ｖ＝１かどうかをチェックする。メモリモデルは１つしかないので読み出すだけである。
【００７０】
レジスタ（たとえば、ＲｅｇＨ．ｖやＲｅｇＷ．ｖ）がサーチされれば、ハードウェアＨＷ０，ＨＷ１を起動すると判定し、サーチされなければ起動しないと判定される。また、遅延テーブルになくても、ＲｅｇＨ．ｖ＝１やＲｅｇＷ．ｖ＝１であれば、ハードウェアＨＷ０，ＨＷ１を起動すると判定し、そうでなければ起動しないと判定される。
【００７１】
ここで、ＨＷ実行判定を高速に実現する方法について説明する。Ｐｒｅ＿ｃｙｃｌｅ〜ｃｈｅｃｋ＿ｃｙｃｌｅのサイクル範囲は決まっているのでそのサイクル範囲についてＲｅｇＨ．ｖやＲｅｇＷ．ｖの値をＨＷ判定フラグとしてパラメータを用意することでサイクルに関していちいちサーチしなくても判定ができる。図１０は、上述したサイクル範囲とＨＷ実行フラグとの対応関係を示す図表である。
【００７２】
また、図９において、ステップＳ９０６においてハードウェアＨＷ０，ＨＷ１を起動すると判定された場合は（ステップＳ９０６：Ｙｅｓ）、ＨＷ実行処理をおこなう（ステップＳ９０７）。ＨＷ実行処理（ステップＳ９０７）の詳細については後述する。
【００７３】
ＨＷ実行処理（ステップＳ９０７）のあと、完了判定をおこなう（ステップＳ９０８）。完了判定では、プロセッサコアモデルＰＥ０，ＰＥ１およびハードウェアＨＷ０，ＨＷ１が一通り実行した後、ｃｕｒｒｅｎｔ＿ｃｙｃｌｅがｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ以上になったかどうか判定する。
【００７４】
ｃｕｒｒｅｎｔ＿ｃｙｃｌｅがｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ未満であれば（ステップＳ９０８：Ｎｏ）、プロセッサコアモデルＰＥ０，ＰＥ１はまだ図８のｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ〜ｂａｓｅ＿ｃｙｃｌｅ（あるいはｃｕｒｒｅｎｔ＿ｃｙｃｌｅ）のサイクル期間内に位置していることがわかり、まだ実行できることを意味する。この場合、ステップＳ９０９に移行する。
【００７５】
一方、ｃｕｒｒｅｎｔ＿ｃｙｃｌｅがｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ以上であれば（ステップＳ９０８：Ｙｅｓ）、つぎのｎｅｘｔ＿ｂａｓｅ＿ｃｙｃｌｅ〜ｂａｓｅ＿ｃｙｃｌｅのサイクル期間または遅延テーブルＴａ，Ｔｂ，Ｔｃ，Ｔｄ，に移動できる。この場合、ステップＳ９０１に戻る。
【００７６】
また、ステップＳ９０９では、ｃｕｒｒｅｎｔ＿ｃｙｃｌｅの更新をおこなう。ｃｕｒｒｅｎｔ＿ｃｙｃｌｅ（図８を参照。）とは、現在の絶対サイクル数である。Ｎステップ（＝サイクル）単位で実行されるので、シミュレーション中のＮステップ後のサイクル値を意味する。
【００７７】
また、ステップＳ９０９では、シミュレーションの現在サイクル数を更新する。このサイクル数は、図８のプロセッサコアモデルＰＥ０，ＰＥ１のサイクル数のうちいずれか下位のサイクル数に設定する。なお、ｃｕｒｒｅｎｔ＿ｃｙｃｌｅはシミュレーション起動時に初期化されて０からスタートする。ステップＳ９０９のあとは、ステップＳ９０３に戻る。
【００７８】
つぎに、上述したＨＷ実行処理手順について具体的に説明する。図１１は、ＨＷ実行処理手順を示すフローチャートである。図１１において、まず、前終了サイクルチェックをおこなう（ステップＳ１１０１）。
【００７９】
図８の遅延テーブルＴｄに示したように、前のプロセッサコアモデルＰＥ０が実行させたハードウェアＨＷ＃（＃は数字）の処理と、プロセッサコアモデルＰＥ１が実行させたハードウェアＨＷ＃の処理とが重なる場合がある。前終了サイクルチェックでは、この場合、処理が終わったかどうかをチェックしている。チェックするために前回の終了処理時間（サイクル）とプロセッサコアモデルＰＥ１による起動時のサイクルとを比較すれば確認することができる。
【００８０】
重なっていた場合は（ステップＳ１１０１：Ｎｏ）、待機判断処理をおこなう（ステップＳ１１０２）。待機判断処理（ステップＳ１１０２）では、たとえば、ハードウェアＨＷ１が１つの命令しか実行できない場合を想定している。
【００８１】
この場合において、ＨＷ実行を待機させられるのであれば（ステップＳ１１０２：Ｙｅｓ）、ステップＳ１１０１に戻る。すなわち、前処理の終了サイクル後に直ちに実行できるということであるが、起動時サイクル値を待ちサイクル数を加算した値にシフトし、再度ＨＷ実行をおこなう。キャンセルされる場合は（ステップＳ１１０２：Ｎｏ）、ＨＷ実行をおこなわずに図９に示したステップＳ９０８に移行する。
【００８２】
そして、ステップＳ１１０１において重なっていた場合は（ステップＳ１１０１：Ｙｅｓ）、前処理を実行する（ステップＳ１１０３）。前処理では、終了予定サイクルなどを保存する。このあと、ＨＷ実行、すなわち、ハードウェアＨＷ０，ＨＷ１を実行する（ステップＳ１１０４）。
【００８３】
以上説明したように、この発明の実施の形態にかかるサイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータによれば、シミュレーション時間の短縮化およびシミュレーションの高精度化を図ることができる。
【００８４】
なお、本実施の形態で説明したサイクルシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【産業上の利用可能性】
【００８５】
以上のように、本発明にかかるサイクルシミュレータ、サイクルシミュレーション方法、およびサイクルシミュレーションプログラムは、プロセッサコアモデル、ペリフェラルブロックなどの複数の実行ブロックによってモデル化されたＬＳＩモデルのサイクルシミュレーションに有用である。
【図面の簡単な説明】
【００８６】
【図１】この発明の実施の形態にかかるサイクルシミュレータのハードウェア構成を示すブロック図である。
【図２−１】この発明の実施の形態にかかるサイクルシミュレーション処理手順を示すフローチャートである。
【図２−２】命令実行処理手順を示すフローチャートである。
【図３】ｊ番目の命令実行処理手順を示すフローチャートである。
【図４】この発明の実施の形態にかかる遅延テーブルを模式的に示した説明図である。
【図５】メモリモデルを示す説明図である。
【図６】サイクル管理テーブルを示す説明図である。
【図７】サイクル管理テーブルの概念を示す説明図である。
【図８】並列動作を示す概念図である。
【図９】この発明の実施の形態にかかる並列動作処理手順を示すフローチャートである。
【図１０】サイクル範囲とＨＷ判定フラグとの対応関係を示す図表である。
【図１１】ＨＷ実行処理手順を示すフローチャートである。
【図１２】シミュレーション対象となるＬＳＩモデルを示す説明図である。
【図１３】図１２に示したＬＳＩモデルをＩＳＳシミュレータにより実行した場合のサイクルモデルを示す説明図である。
【図１４】並列シミュレーションを示す説明図である。
【符号の説明】
【００８７】
Ｂｉ，Ｂｋ  実行ブロック
ＰＢ  周辺ブロックモデル
ＰＥ＃  プロセッサコアモデル
１２００  ＬＳＩモデル
【図１】
0004820654.tif 000002
【図２−１】
0004820654.tif 000003
【図２−２】
0004820654.tif 000004
【図３】
0004820654.tif 000005
【図４】
0004820654.tif 000006
【図５】
0004820654.tif 000007
【図６】
0004820654.tif 000008
【図７】
0004820654.tif 000009
【図８】
0004820654.tif 000010
【図９】
0004820654.tif 000011
【図１０】
0004820654.tif 000012
【図１１】
0004820654.tif 000013
【図１２】
0004820654.tif 000014
【図１３】
0004820654.tif 000015
【図１４】
0004820654.tif 000016