(57)【要約】【課題】シミュレーションの高精度化及び高速化を可能にするとともに、シミュレーションの誤動作を防止することが可能なシミュレーション方法を提供する。【解決手段】本発明に係るシミュレーション方法は、コア部１と、バス部２及びメモリ部３と、を有するシステムＬＳＩ部４０のシミュレーション方法であって、高精度モード、あるいは、高速モードのいずれかのシミュレーションモードに切り替え、バス部２及びメモリ部３は、シミュレーションモードが高精度モードから高速モードに切り替えられた場合、すでに高精度モードでコア部１から受け付けている受付済トランザクションを、切り替え後に高速モードでコア部１から受け付ける切替後トランザクションよりも優先的に実行するものである。【選択図】図１０
2013196245.tif 000002
【特許請求の範囲】
【請求項１】
マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、
前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
シミュレーション方法。
【請求項２】
前記受付済トランザクションの優先的な実行では、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項１に記載のシミュレーション方法。
【請求項３】
前記受付済トランザクションの優先的な実行では、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項２に記載のシミュレーション方法。
【請求項４】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、前記受付済トランザクションの処理を中断し、前記マスターブロックへ前記受付済トランザクションの完了を通知する、請求項２または３に記載のシミュレーション方法。
【請求項５】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、当該スレーブブロックとは別の他のスレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項２乃至４のいずれか一項に記載のシミュレーション方法。
【請求項６】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、当該スレーブブロックとは別の他のスレーブブロックから完了待ちのトランザクションが存在する場合、前記シミュレーションモードが切り替えられ、かつ、前記他のスレーブブロックからの完了通知を受けたタイミングで、前記他のスレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項５に記載のシミュレーション方法。
【請求項７】
前記他のスレーブブロックは、前記受付済トランザクションの要求を受けたタイミングで、前記受付済トランザクションの要求を通知したスレーブブロックに対し、前記受付済トランザクションの完了を通知する、請求項５または６に記載のシミュレーション方法。
【請求項８】
前記受付済トランザクションの優先的な実行では、
前記スレーブブロックは、前記スレーブブロックにおいて前記受付済トランザクションにより消費すべきシミュレーション時間を前記マスターブロックに通知し、
前記マスターブロックは、前記通知されたシミュレーション時間を所定のタイミングで消費する、請求項２乃至７のいずれかに記載のシミュレーション方法。
【請求項９】
前記通知されるシミュレーション時間は、前記受付済トランザクションの開始から終了までに消費すべき時間から、すでに消費された時間を差し引いた残りの時間である、請求項８に記載のシミュレーション方法。
【請求項１０】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項１に記載のシミュレーション方法。
【請求項１１】
前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項１０に記載のシミュレーション方法。
【請求項１２】
マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション装置であって、
前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替るモード切替部と、
前記スレーブブロックにおいて、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するスレーブ通信部と、
を備えるシミュレーション装置。
【請求項１３】
前記スレーブ通信部は、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項１２に記載のシミュレーション装置。
【請求項１４】
前記スレーブ通信部は、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項１３に記載のシミュレーション装置。
【請求項１５】
前記スレーブ通信部は、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項１２記載のシミュレーション装置。
【請求項１６】
前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項１５に記載のシミュレーション装置。
【請求項１７】
マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション処理をコンピュータに実行させるシミュレーションプログラムであって、前記シミュレーション処理は、
前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
シミュレーションプログラム。
【請求項１８】
前記受付済トランザクションの優先的な実行では、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項１７に記載のシミュレーションプログラム。
【請求項１９】
前記受付済トランザクションの優先的な実行では、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項１８に記載のシミュレーションプログラム。
【請求項２０】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項１７に記載のシミュレーションプログラム。
【請求項２１】
前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項２０に記載のシミュレーションプログラム。
【請求項２２】
マスターブロックと、前記マスターブロックとバスを介して接続するスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、
前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
前記スレーブブロックまたは前記バスは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
シミュレーション方法。
【請求項２３】
前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、前記受付済トランザクションの処理を中断し、前記マスターブロックへ前記受付済トランザクションの完了を通知する、請求項２２に記載のシミュレーション方法。
【請求項２４】
前記受付済トランザクションの優先的な実行では、前記バスは、前記シミュレーションモードが切り替えられたタイミングで、前記スレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項２２または２３に記載のシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション方法、シミュレーション装置及びシミュレーションプログラムに関し、特に、高速モードまたは高精度モードでシミュレーションを行うシミュレーション方法、シミュレーション装置及びシミュレーションプログラムに関する。
【背景技術】
【０００２】
近年、半導体集積回路の大規模集積化に伴い、複数のプロセッサコア、バス、メモリ等、多数の機能ブロックを１チップに搭載したシステムＬＳＩ、あるいは、Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ（ＳｏＣ）と呼ばれる半導体集積回路が広く知られている。
【０００３】
システムＬＳＩなどの半導体集積回路の設計においては、システムの動作を検証するためにコンピュータを用いたシミュレーションが行われている。シミュレーションでは、できるだけ実機と同様な動作をシミュレーションし精度よく動作検証することが要求される一方、半導体集積回路の大規模化・複雑化によりシミュレーション時間が長くなるため、高速にシミュレーションを行うことも要求されている。
【０００４】
このようなシミュレーションを実現するため、システムを記述する言語としてＳｙｓｔｅｍＣが使用されている。ＳｙｓｔｅｍＣでは、機能ブロック間のトランザクションをモデリングしたTLM（Transaction Level Modeling）により、機能ブロック間の通信動作を表現することができる。ＴＬＭは、非特許文献１や非特許文献２などに記載のように、OSCI（The Open SystemC Initiative）によって標準化が進められている。なお、トランザクションとは、メモリデータの読み出し処理や書き込み処理などのまとまった１つの処理単位において、機能ブロック間でやり取りされる一連のデータ通信処理である。
【０００５】
ＴＬＭには、トランザクションのアクセス方式（インタフェース）として、ノンブロッキングアクセスとブロッキングアクセスとが規定されている。ノンブロッキングアクセスは、複数に分離した通信フェーズによりトランザクションをシミュレーションする方式であり、ブロッキングアクセスは、通信フェーズが複数に分かれず、連続した通信フェーズによりトランザクションをシミュレーションする方式である。
【０００６】
非特許文献２（「２．５  ＴＬＭ標準化団体が提唱する抽象レベルとの関係」第２−１５頁）には、ＡＴコーディングスタイル（Approximately-timed coding style）では、ノンブロッキングアクセスを使用し、ＬＴコーディングスタイル（Loosely-timed coding style）では、ブロッキングアクセスを使用することが記載されている。ＬＴコーディングスタイルとは、サイクル時間と無関係なシミュレーションにより高速化を可能とする高速モードであり、ＡＴコーディングスタイルとは、サイクル時間に合わせたシミュレーションにより高精度化を可能とする高精度モードである。
【０００７】
図２３、図２４は、非特許文献２に記載された、ＡＴコーディングスタイル（高精度モード）、ＬＴコーディングスタイル（高速モード）における、イニシエータ９１０とターゲット９２０間の各トランザクションシーケンスを示している。なお、イニシエータのように、トランザクションを自ら要求する側の機能ブロックをマスターブロックといい、ターゲットのように、トランザクションを他から要求される側の機能ブロックをスレーブブロックという。
【０００８】
図２３に示されるように、ノンブロッキングアクセスを行う高精度モードの場合、まず、シミュレーション時間ｔ０において、イニシエータ９１０が、ノンブロッキング関数であるnb_transport_fw(p,BEGIN,t)を関数コールすることで、イニシエータ９１０からターゲット９２０へノンブロッキングアクセス要求を通知し、ターゲット９２０からイニシエータ９１０に関数リターンし（９０１）、イニシエータ９１０はターゲット９２０からの完了通知を待つ。このノンブロッキングアクセスを要求し、この要求を受け付けるフェーズが、ノンブロッキングアクセスの開始フェーズである。
【０００９】
ノンブロッキングアクセス要求を受けたターゲット９２０は、アクセス処理によって消費すべき時間ｔ１の経過を待って（９０２）、ｔ１経過後、ターゲット９２０は、ノンブロッキング関数であるnb_transport_bw(p,END,t)を関数コールすることで、ターゲット９２０からイニシエータ９１０へノンブロッキング完了通知を通知し、ターゲット９２０からイニシエータ９１０に関数リターンする（９０３）。このノンブロッキングアクセスの完了を通知し、この通知を受け付けるフェーズが、ノンブロッキングアクセスの終了フェーズである。
【００１０】
このように、ノンブロッキングアクセスでは、アクセス要求によりトランザクションを開始する開始フェーズと、完了通知によりトランザクションを終了する終了フェーズとが分かれており、開始フェーズと終了フェーズを経てトランザクションが完了する。なお、開始フェーズから終了フェーズまでの期間では、イニシエータ９１０は、トランザクション完了待ちの状態であり、ターゲット９２０は、トランザクション処理中の状態である。
【００１１】
ノンブロッキングアクセスでは、イニシエータ９１０が完了通知を受けた時、シミュレーション時間はｔ０＋ｔ１となり、トランザクション処理で消費されるべき時間とシミュレーション時間とが同期している。したがって、シミュレーション時間に合わせた精度の良いシミュレーションが可能である。
【００１２】
図２４に示されるように、ブロッキングアクセスを行う高速モードの場合、シミュレーション時間ｔ０において、イニシエータ９１０が、ブロッキング関数であるb_transport(p, t)を関数コールすることで、イニシエータ９１０からターゲット９２０へブロッキングアクセス要求が通知される（９０４）。
【００１３】
このとき、ターゲット９２０は、b_transport()に対し、ターゲット９２０がアクセス処理によって消費すべき時間ｔ２を引数tに設定し（９０５）、関数リターンすることで、ターゲット９２０からイニシエータ９１０へｔ２を含めたブロッキング完了通知を通知する（９０６）。
【００１４】
このように、ブロッキングアクセスでは、アクセス要求によりトランザクションを開始するフェーズと、完了通知によりトランザクションを終了するフェーズとが分かれず、連続した通信フェーズによりトランザクションが完了する。
【００１５】
ブロッキングアクセスでは、イニシエータ９１０が完了通知を受けた時、シミュレーション時間は進まずにｔ０のままであり、トランザクション処理で消費すべき時間とシミュレーション時間とがずれている。このため、イニシエータ９１０は、ずれている時間ｔ２が設定されたｔを引数としてwait()を関数コールすることで、時間をｔ２進めて時間を同期させる（９０７）。
【００１６】
ノンブロッキングアクセスとブロッキングアクセスとのシミュレーション速度の違いについて説明する。図２３，２４では、イニシエータとターゲットのみの構成を示しているが、速度の違いを分かりやすく説明するため、ここでは、マスタ（コア）とメモリとがバスを介して接続されているとする。
【００１７】
ノンブロッキングアクセスでは、マスタは、nb_transport_fw()を関数コールし完了待ちに入った後、バスは、既定時間経過後アービトレーションを実施し、メモリへnb_transport_fw()を関数コールし完了待ちとなる。さらに、メモリは、レーテンシ経過を待って、nb_transport_bw()を関数コールし、バスもnb_transport_fw()を関数コールすることにより、完了通知がバス経由でマスタに通知される。
【００１８】
このときシミュレーション時間の待ちがバスにおけるアービトレーションの前の待ちとメモリのレーテンシ待ちの２回発生するが、この間他に動作するプロセスがない場合、シミュレーションの待ち時間として実際にその時間待つのではなく、シミュレーション時間にその時間を単に加算するだけで、シミュレーションは一瞬で終了する。但し、このメモリアクセス間に起動されているプロセスはマスタのnb_transport_fw()を関数コールし完了待ちを行うプロセス、バスのアービトレーション後メモリへ送信するプロセス、メモリのレーテンシ経過待ち後完了を送信するプロセスの３つとなる。
【００１９】
ブロッキングアクセスでは、マスタがバス内に実装されているb_transport()を関数コールし、バスがメモリに実装されているb_transport()を関数コールし、これらの関数のリターンによりレーテンシを伝えて完了となる。ブロッキングアクセスでは、全て関数コールのみで行われるため、起動するプロセスはマスタの１プロセスだけとなる。
【００２０】
シミュレーション速度は、起動しているプロセスの数により影響を受ける。複数のプロセスが起動しているということはプロセスの切替が発生していることを意味する。このプロセスの切り替え時には、シミュレーションカーネルが動き、データの退避や、次にどのプロセスを動かすかのスケジューリングなど、時間のかかる複雑な処理が行われる。このプロセスの切り替えは、"コンテキストスイッチング"と呼ばれる。一般的にシミュレーション速度を向上させる一つの手段として、コンテキストスイッチングの回数を減らすことが行われている。コンテキストスイッチはプロセスがwaitに入った場合やプロセスが終了した際に発生する。
【００２１】
したがって、ノンブロッキングアクセスでは、プロセス数が多く、コンテキストスイッチング回数が多いため、シミュレーション速度が遅くなり、ブロッキングアクセスでは、プロセス数が少なく、コンテキストスイッチング回数も少ないため、シミュレーション速度が速くなる。例えば、１０回のメモリアクセスが実施される場合、ノンブロッキングアクセスの場合、３×１０回コンテキストスイッチングが発生するのに対し、ブロッキングアクセスの場合、レーテンシ時間を加算して、最後に一回だけ同期を取るようにすれば１回のコンテキストスイッチングですむということになりシミュレーションを高速化できる。
【００２２】
このように、ブロッキングアクセスでは、予め決まったレーテンシを関数の戻りと共にマスタへ伝達するため、マスタ側で後でまとめて同期をとることにより、コンテキストスイッチングの回数を減らすことができるため、シミュレーション速度を速くすることができる。
【００２３】
一方で、精度の高いノンブロッキングアクセスに対し、ブロッキングアクセスでは、精度を保つことが難しい。
【００２４】
これは、ブロッキングアクセスでは、バスやメモリにおけるアクセスの衝突を考慮できないためである。すなわち、上述のように、レーテンシを後でまとめてマスタ側で消費する(同期を取る)方式のブロッキングアクセスでは、マスタからの関数コールのみでアクセスが完了する。この間他のプロセスは動けないため、メモリやバスは予め決まった経過時間しかマスタへ返すことができない。これに対し、ノンブロッキングアクセスでは、マスタはnb_transport_fw()を関数コールした後、完了待ち(wait等)に入る。バスのアービトレーションを行うプロセスが起動するまでに、他のマスタプロセスが起動できるため、この間他のアクセスが発生した場合、他のマスタからもnb_transport_fw()が関数コールされる。バスは複数のアクセスを受け付けた後アービトレーションを実施し、バス調停を行うことができる。調停で負けたアクセスについては、新たに遅延が発生し、実機同様の時間経過を表現することができる。
【００２５】
また、ブロッキングアクセスのように、コンテキストスイッチングの回数を減らすため、同期の回数(waitをコールする回数)を減らし、一つのマスタプロセスの処理を次々に進めた場合、他のマスタプロセスの動ける隙間がなくなり、アクセス順序を狂わせる要因にもなり得る。
【００２６】
なお、ブロッキングアクセスとして図２５のようなアクセス方法もある。これは非特許文献２に記載された同期ＬＴコーディングスタイルである。この方法では、イニシエータ９１０は、b_transport()を関数コールすると（９０８）、ターゲット９２０は、消費すべき時間ｔ２の経過を待って（９０９）、関数リターンする（９１０）。このブロッキングアクセスでは、ノンブロッキングアクセスと同様に時間にずれが生じないため、ブロッキングアクセスにおいて、シミュレーション時間に同期して高精度なシミュレーションを行うことができる。本明細書では、特に断らない限り、ブロッキングアクセスとは図２４のような高速なアクセス方法をいう。
【００２７】
なお、特許文献１には、プロセッサの命令ごとにシミュレーションを行う命令レベルモデルと、クロックに同期してシミュレーションを行うサイクルアキュレートモデルとが記載されている。特許文献２には、バスを介してアクセスする高精度シミュレーションと、バスを介さずアクセスする抽象化シミュレーションとが記載されている。特許文献３には、実行サイクルごとにシミュレーションを行う論理シミュレーションと、命令ごとにシミュレーションを行う命令セットシミュレーションとが記載されている。特許文献４には、マルチプロセッサシステムのシミュレーションにおいて、ノンブロッキングアクセスを行うことが記載されている。
【先行技術文献】
【特許文献】
【００２８】
【特許文献１】特開２０００−１１０２２号公報
【特許文献２】特開２００７−２０７１７６号公報
【特許文献３】特開２００９−２５２１１３号公報
【特許文献４】特開２０００−１３２５２８号公報
【非特許文献】
【００２９】
【非特許文献１】The Open SystemC Initiative (OSCI)、"TLM-2.0 Reference Manual (TLM_2_0_LRM.pdf)"、インターネット<URL:http://www.systemc.org/downloads/standards/>
【非特許文献２】株式会社半導体理工学研究センター（ＳＴＡＲＣ）、「ＴＬモデリングガイド」、第２版  第２訂、２０１１年
【発明の概要】
【発明が解決しようとする課題】
【００３０】
上記のように、従来の半導体集積回路のシミュレーション方法では、高速モードでブロッキングアクセスを行うことにより高速なシミュレーションが可能であり、また、高精度モードでノンブロッキングアクセスを行うことにより高精度なシミュレーションが可能である。
【００３１】
しかしながら、高精度モードの場合、速度を速くすることは困難であり、また、高速モードの場合、精度を良くすることは困難である。すなわち、シミュレーションにおける精度と速度はトレードオフの関係にある。
【００３２】
そこで、本願発明者は、半導体集積回路のシミュレーション方法において、高速モードと高精度モードとを切り替え可能にすることで、高い精度を保ちつつ高速化を図ることができることを見出した。例えば、ユーザにとってあまり重要視しないシミュレーション期間は高速モードで素早く実行し、注目の必要な期間になった場合、高精度モードに切り替えて実行することで、シミュレーションの高精度化と高速化を両立することができる。
【００３３】
一方、上記のように、高速モードのブロッキングアクセスと高精度モードのノンブロッキングアクセスとでは、トランザクション処理が異なるため、モードを切り替えるタイミングによっては、シミュレータが誤動作するおそれがある。
【００３４】
したがって、従来のシミュレーション方法では、高精度かつ高速にシミュレーションを行うとともに、誤動作することなくシミュレーションを行うことが困難であるという問題があった。
【課題を解決するための手段】
【００３５】
本発明に係るシミュレーション方法は、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するものである。
【００３６】
本発明に係るシミュレーション装置は、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション装置であって、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替るモード切替部と、前記スレーブブロックにおいて、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するスレーブ通信部と、を備えるものである。
【００３７】
本発明に係るシミュレーションプログラムは、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション処理をコンピュータに実行させるシミュレーションプログラムであって、前記シミュレーション処理は、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するものである。
【００３８】
本発明では、シミュレーションモードを切り替え可能とすることにより、シミュレーションの高精度化及び高速化を図ることができ、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、すでに受け付けている受付済トランザクションを、モード切り替え後に受け付ける切替後トランザクションよりも優先的に実行することから、トランザクションの順序が保たれるため、シミュレーションの誤動作を防止することができる。
【発明の効果】
【００３９】
本発明によれば、シミュレーションの高精度化及び高速化を可能にするとともに、シミュレーションの誤動作を防止することが可能なシミュレーション方法、シミュレーション装置及びシミュレーションプログラムを提供することができる。
【図面の簡単な説明】
【００４０】
【図１】本発明の前提例に係るシミュレータを実現するコンピュータシステムのハードウェア構成を説明するための図である。
【図２】本発明の前提例に係るシミュレータの機能ブロックを説明するための図である。
【図３】本発明の前提例に係るシミュレータにおける各通信部の構成を説明するための図である。
【図４】本発明の前提例に係るシミュレータにおけるコア通信部の動作を説明するための図である。
【図５】本発明の前提例に係るシミュレータにおけるバス通信部の動作を説明するための図である。
【図６】本発明の前提例に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。
【図７】本発明の前提例に係るシミュレータのコーディング例を説明するための図である。
【図８】本発明の前提例に係るシミュレータのコーディング例を説明するための図である。
【図９】本発明の前提例に係るシミュレータの動作を説明するための図である。
【図１０】本発明の実施の形態１に係るシミュレータの機能ブロックを説明するための図である。
【図１１】本発明の実施の形態１に係るシミュレータにおける各通信部の構成を説明するための図である。
【図１２】本発明の実施の形態１に係るシミュレータにおけるコア通信部の動作を説明するための図である。
【図１３】本発明の実施の形態１に係るシミュレータにおけるバス通信部の動作を説明するための図である。
【図１４】本発明の実施の形態１に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。
【図１５】本発明の実施の形態１に係るシミュレータのコーディング例を説明するための図である。
【図１６】本発明の実施の形態１に係るシミュレータの動作を説明するための図である。
【図１７】本発明の実施の形態２に係るシミュレータの機能ブロックを説明するための図である。
【図１８】本発明の実施の形態２に係るシミュレータにおける各通信部の構成を説明するための図である。
【図１９】本発明の実施の形態２に係るシミュレータにおけるコア通信部の動作を説明するための図である。
【図２０】本発明の実施の形態２に係るシミュレータにおけるバス通信部の動作を説明するための図である。
【図２１】本発明の実施の形態２に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。
【図２２】本発明の実施の形態２に係るシミュレータの動作を説明するための図である。
【図２３】従来のシミュレータの動作を説明するための図である。
【図２４】従来のシミュレータの動作を説明するための図である。
【図２５】従来のシミュレータの動作を説明するための図である。
【発明を実施するための形態】
【００４１】
本発明の前提例
本発明の実施の形態について説明する前に、まず、本発明が適用されるに至るシミュレータ（シミュレーション装置）の前提例の問題点について、図１〜図９を用いて説明する。この前提例は、高精度モードと高速モードの切り替えを可能にするシミュレータの例である。
【００４２】
図１は、前提例におけるシミュレータが実現されるコンピュータシステムのハードウェア構成を示す図である。なお、後述する本発明の実施の形態に係るシミュレータも、図１のコンピュータシステムによって実現される。
【００４３】
このコンピュータシステム１００は、パーソナルコンピュータ等の情報処理装置である。図に示されるように、コンピュータシステム１００は、ＣＰＵ１０２、メインメモリ１０３、ハードディスク１０４等を内蔵した本体部１０１、本体部１０１からの指示により画面表示を行う表示装置１０５、このコンピュータシステムにユーザの指示や文字情報を入力するためのキーボード１０６、および表示装置の画面上における任意の位置を指定し、その位置に表示されていたアイコン等に応じた指示を入力するマウス１０７から構成される。
【００４４】
なお、ＣＰＵ１０２及びメインメモリ１０３は、プログラムを実行し各部を制御する制御部の一例であり、ハードディスク１０４は、プログラム等を記憶する記憶部の一例である。制御部と記憶部は、一つの装置でもよいし、複数の装置であってもよい。例えば、複数の制御装置や複数の記憶装置に分散されていてもよい。また、表示装置１０５は、ユーザに対し種々の出力を行う出力装置の一例であり、キーボード１０６、マウス１０７は、ユーザが種々の入力操作を行う入力装置の一例である。
【００４５】
ハードディスク１０４には、前提例のシミュレータの各機能を実現するためのシミュレーションプログラム１０８、シミュレーション等に必要なその他の各種データ１０９が格納される。なお、後述する本発明の実施の形態に係るシミュレータの場合には、そのシミュレータの各機能を実現するためのシミュレーションプログラム１０８が格納される。
【００４６】
シミュレーションを実行する際、シミュレーションプログラム１０８および各種データ１０９をメインメモリ１０３にロードし、ＣＰＵ１０２はメインメモリ１０３にロードされたシミュレーションプログラム１０８を実行することで、前提例のシミュレータが実現される。また、コンピュータシステム１００の基本動作は、ハードディスク１０４に格納された基本プログラムであるオペレーティングシステム（ＯＳ）を介して実行される。
【００４７】
図２は、前提例におけるシミュレータの機能構成を示すブロック図である。このシミュレータ２００は、コンピュータシステム１００上でシミュレーションプログラムが実行されて実現される。
【００４８】
図に示されるように、このシミュレータ２００は、システムＬＳＩの動作をシミュレーションするシステムＬＳＩ部４０と、システムＬＳＩ部４０のシミュレーション動作を制御するシミュレーション制御部５０とを備えている。
【００４９】
システムＬＳＩ部４０は、プロセッサコアの動作をシミュレーションするコア部１ａ〜１ｃ（いずれか一つをコア部１とも言う）、コアとメモリ間を接続するバスの動作をシミュレーションするバス部２ａ〜２ｂ（いずれか一つをバス部２とも言う）、メモリの動作をシミュレーションするメモリ部３ａ〜３ｂ（いずれかをメモリ部３とも言う）を備えている。この例では、コア部１ａは、バス部２ａを介して、メモリ部３ａ及び３ｂにアクセスし、コア部１ｂ及び１ｃは、バス部２ｂを介して、メモリ部３ａ及び３ｂにアクセスする。
【００５０】
コア部１、バス部２、メモリ部３は、システムＬＳＩの各機能を実現する機能ブロックである。また、コア部１がバス部２及びメモリ部３へ、トランザクションを要求するため、コア部１がマスターブロックとして動作し、バス部２もしくはメモリ部３がスレーブブロックとして動作する。
【００５１】
コア部１は、演算処理などプロセッサコアの基本機能を実行するコア機能部１０と、バスを介したメモリとの間でトランザクション処理（通信処理）を実行するコア通信部１１とを備えている。バス部２は、複数のコア部１からのバスアクセスに対し調停制御を実行するアービトレーション部２０と、コア及びメモリとの間でトランザクション処理を実行するバス通信部２１とを備えている。メモリ部３は、データの記憶処理などメモリの基本機能を実行するメモリ機能部３０と、バスを介したコアとの間でトランザクション処理を実行するメモリ通信部３１とを備えている。
【００５２】
すなわち、コア機能部１０、アービトレーション部２０、メモリ機能部３０は、各機能ブロックの主要な機能の動作をシミュレーションする機能部であり、コア通信部１１、バス通信部２１、メモリ通信部３１は、ＴＬＭのトランザクションアクセス（インタフェース）により、機能ブロック間の通信をシミュレーションする通信部である。
【００５３】
シミュレーション制御部５０は、シミュレーション時間やシミュレーションの基本動作を制御するシミュレーションカーネル部４と、シミュレーションモードを切り替えるモード切替部５とを備えている。ここでは、モード切替部５は、コア部１ａ〜１ｃに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。モード切替部５がシミュレーションモードを切り替えるタイミングは、ユーザが任意に設定できる。ユーザが切替操作するタイミングでもよいし、あらかじめ設定されたタイミングでもよい。精度が要求される部分のみ高精度モードでシミュレーションし、精度が要求されない部分は高速モードでシミュレーションすることで、要求される精度を保ちつつ、高速なシミュレーションが可能である。
【００５４】
図３は、前提例であるシミュレータ２００の各通信部の構成を示している。図に示されるように、コア通信部１１は、バス部２との間で高速モードにおけるトランザクション処理を実行する高速モード処理部１１１と、バス部２との間で高精度モードにおけるトランザクション処理を実行する高精度モード処理部１１２とから構成されている。コア通信部１１では、モード切替部５からの命令に従って、高速モード処理部１１１または高精度モード処理部１１２が動作する。高速モード処理部１１１では、ブロッキングアクセスによりデータ通信が行われ、高精度モード処理部１１２では、ノンブロッキングアクセスによりデータ通信が行われる。
【００５５】
バス通信部２１は、コア部１及びメモリ部３との間でブロッキングアクセスによるトランザクション処理を実行するブロッキングアクセス処理部２１１と、コア部１及びメモリ部３との間でノンブロッキングアクセスにおけるトランザクション処理を実行するノンブロッキングアクセス処理部２１２とから構成されている。コア部１からのアクセスがブロッキングであるかノンブロッキングであるかに応じてどちらかの処理部が実行される。また、コア部１からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部２１５も備えている。トランザクション保持部２１５にはアービトレーションに負けたトランザクション等が保持される。
【００５６】
メモリ通信部３１は、バス部２との間でブロッキングアクセスによるトランザクション処理を実行するブロッキングアクセス処理部３１１と、バス部２との間でノンブロッキングアクセスによるトランザクション処理を実行するノンブロッキングアクセス処理部３１２とから構成されている。バス部２からのアクセスがブロッキングであるかノンブロッキングであるかに応じてどちらかの処理部が実行される。また、バス部２からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部３１５も備えている。トランザクション保持部３１５にはアービトレーションに負けたトランザクション等が保持される。
【００５７】
図４は、前提例であるシミュレータ２００のコア通信部１１のトランザクション処理を示している。
【００５８】
コア通信部１１にて、コアメモリアクセス処理（Ｓ１００）が開始される。例えば、コアメモリアクセス処理は、コアからメモリにアクセスして、メモリからのデータ読み出しやデータ書き込みを行うためのトランザクション処理であり、コア機能部１０の要求によって開始する。
【００５９】
次いで、コア通信部１１にて、シミュレーションモードが高速モードかどうか判定される（Ｓ１０１）。
【００６０】
Ｓ１０１において、高速モードであると判定された場合、高速モード処理部１１１にて、バス部２に対しブロッキングアクセス処理が実行される（Ｓ１０２）。すなわち、バス部２のブロッキングアクセス処理（図５のＳ２００）の関数コールを行う。
【００６１】
次いで、高速モード処理部１１１にて、バス部２からブロッキングアクセスの完了通知を受けると、メモリアクセスで消費されるべきレーテンシ時間を計上し（Ｓ１０３）、ブロッキングアクセス処理（トランザクション）が終了する（Ｓ１０７）。すなわち、バス部２から関数リターンによって得られるメモリ及びバスのレーテンシ時間を保持し、必要に応じてシミュレーション時間に同期させる。
【００６２】
Ｓ１０１において、高速モードではなく、高精度モードであると判定された場合、高精度モード処理部１１２にて、バス部２に対しノンブロッキングアクセス処理が実行される（Ｓ１０４）。すなわち、バス部２のノンブロッキングアクセス処理（図５のＳ２１０）の関数コールを行う。これにより、バス部２へノンブロッキングアクセスが要求され開始フェーズが実行されたことになる。
【００６３】
次いで、高精度モード処理部１１２にて、バス部２からノンブロッキングアクセスの完了通知の受信を判定し（Ｓ１０５）、完了通知の受信を待ち続け（Ｓ１０６）、完了通知を受信するとブロッキングアクセス処理が終了する（Ｓ１０７）。すなわち、バス部２からの完了通知によりノンブロッキングアクセスの終了フェーズが実行されることになり、トランザクションが完了する。
【００６４】
図５は、前提例であるシミュレータ２００のバス通信部２１のトランザクション処理を示している。
【００６５】
バス通信部２１では、ブロッキングアクセス処理部２１１が、ブロッキングアクセス処理（Ｓ２００）を実行し、ノンブロッキングアクセス処理部２１２が、ノンブロッキングアクセス処理（Ｓ２１０）、アービトレーション処理（Ｓ２２０）、完了通知処理（Ｓ２３０）を実行する。なお、アービトレーションの具体的な調停処理は、アービトレーション部２０で行われるものであり、ここでは主にトランザクションに関連する部分について説明する。
【００６６】
ブロッキングアクセス処理部２１１では、ブロッキングアクセス処理が開始される（Ｓ２００）。このブロッキングアクセス処理（Ｓ２００）は、コア部１からの関数コールにより開始される。
【００６７】
次いで、ブロッキングアクセス処理部２１１にて、メモリ部３に対しブロッキングアクセス処理が実行される（Ｓ２０１）。すなわち、メモリ部３のブロッキングアクセス処理（図６のＳ３００）の関数コールを行う。
【００６８】
次いで、ブロッキングアクセス処理部２１１は、メモリ部３からブロッキングアクセスの完了通知を受けると、レーテンシ時間を含めてコア部１へ完了通知を行い（Ｓ２０２）、アクセス処理が終了する（Ｓ２０３）。すなわち、メモリから関数リターンによって得られるメモリのレーテンシ時間に、バスで消費されるべきバスのレーテンシ時間を加算した時間を、関数リターンによりコアへ伝達する。これにより、バス部２のブロッキングアクセス（トランザクション）が終了する。
【００６９】
また、ノンブロッキングアクセス処理部２１２では、ノンブロッキングアクセス処理が開始される（Ｓ２１０）。このノンブロッキングアクセス処理（Ｓ２１０）は、コア部１からの関数コールにより開始される。
【００７０】
次いで、ノンブロッキングアクセス処理部２１２にて、所定時間経過後にアービトレーション処理を起動する（Ｓ２１１）。すなわち、アービトレーション処理（Ｓ２２０）が所定時間後に起動されるように、イベント要求を行う。
【００７１】
次いで、ノンブロッキングアクセス処理部２１２にて、コア部１に対し、アクセスの受け付けをＡｃｋの返信により通知する（Ｓ２１２）。すなわち、コア部１へ関数リターンによりＡｃｋを通知する。
【００７２】
Ｓ２１１により、所定時間経過後にアービトレーション処理が開始されると（Ｓ２２０）、アービトレーションが実施される（Ｓ２２１）。そして、調停に勝った、すなわち、調停によりバス使用権を取得したトランザクションについて、ノンブロッキングアクセス処理部２１２は、メモリ部３に対しノンブロッキングアクセス処理を実行し（Ｓ２２２）、処理が終了する（Ｓ２２３）。すなわち、メモリ部３のノンブロッキングアクセス処理（図６のＳ３１０）の関数コールを行い、メモリ部３から完了通知を待つ。これにより、メモリ部３へノンブロッキングアクセスが要求され、バス部２における開始フェーズが実行されたことになる。
【００７３】
メモリ部３から完了通知を受けると、ノンブロッキングアクセス処理部２１２にて、完了通知処理が開始する（Ｓ２３０）。この処理は、メモリ部３からの関数コールにより開始される。
【００７４】
次いで、ノンブロッキングアクセス処理部２１２にて、コア部１へ完了通知を行い（Ｓ２３１）、処理が終了する（Ｓ２３２）。すなわち、メモリ部３からの完了通知によりノンブロッキングアクセスの終了フェーズが実行されことになり、バス部２におけるトランザクションが完了する。
【００７５】
図６は、前提例であるシミュレータ２００のメモリ通信部３１のトランザクション処理を示している。
【００７６】
メモリ通信部３１では、ブロッキングアクセス処理部３１１が、ブロッキングアクセス処理（Ｓ３００）を実行し、ノンブロッキングアクセス処理部３１２が、ノンブロッキングアクセス処理（Ｓ３１０）、完了通知処理（Ｓ３２０）を実行する。
【００７７】
ブロッキングアクセス処理部３１１では、ブロッキングアクセス処理が開始される（Ｓ３００）。このブロッキングアクセス処理（Ｓ３００）は、バス部２からの関数コールにより開始される。
【００７８】
次いで、ブロッキングアクセス処理部３１１にて、メモリで消費されるべきレーテンシ時間を含めてバス部２へ完了通知を行い（Ｓ３０１）、処理が終了する（Ｓ３０２）。すなわち、メモリで消費されるべきレーテンシ時間を、関数リターンにより伝達する。これにより、メモリ部３のブロッキングアクセス（トランザクション）が終了する。
【００７９】
また、ノンブロッキングアクセス処理部３１２にて、ノンブロッキングアクセス処理が開始される（Ｓ３１０）。このノンブロッキングアクセス処理（Ｓ３１０）は、バス部２からの関数コールにより開始される。
【００８０】
次いで、ノンブロッキングアクセス処理部３１２にて、レーテンシ時間経過後に完了通知処理を起動する（Ｓ３１１）。すなわち、完了通知処理（Ｓ３２０）がレーテンシ時間経過後に起動されるように、イベント要求を行う。
【００８１】
次いで、バス部２に対し、アクセスの受け付けをＡｃｋの返信により通知する（Ｓ３１２）。すなわち、バス部２へ関数リターンによりＡｃｋを通知する。バス部２からノンブロッキングアクセスが要求され、メモリ部３における開始フェーズが実行されたことになる。
【００８２】
Ｓ３１１により、レーテンシ時間経過後に完了通知処理が開始されると（Ｓ３２０）、ノンブロッキングアクセス処理部３１２にて、バス部２へ完了通知を行い（Ｓ３２１）、処理が終了する（Ｓ３２２）。すなわち、レーテンシ時間後にバス部２の完了通知処理（図５のＳ２３０）の関数コールを行う。バス部２への完了通知によりノンブロッキングアクセスの終了フェーズが実行されことになり、メモリ部３におけるトランザクションが完了する。
【００８３】
図７及び図８は、前提例であるシミュレータ２００のコーディング例を示している。
【００８４】
図７を用いて、図４〜図６で示した、高速モードにおけるブロッキングアクセスのトランザクションの流れを説明する。符号４０１はコア部１におけるプロセス関数であるprocess()、符号４０２はバス部２におけるブロッキング関数であるb_transport()、符号４０３はメモリ部３におけるブロッキング関数であるb_transport()についての各コーディング例である。
【００８５】
高速モードの場合、コア部１のprocess()において、メモリアクセスが発生すると、バス部２にブロッキングアクセスを要求するためバス部２のb_transport()を関数コールし（Ｃ１）、バス部２のb_transport()では、さらに、メモリ部３にブロッキングアクセスを要求するためb_transport()を関数コールする（Ｃ２）。
【００８６】
関数コールされたメモリ部３のb_transport()では、メモリに記憶されたデータを、b_transport()の引数pに設定し（Ｃ３）、メモリのレーテンシ時間αを引数tに設定し（Ｃ４）、関数リターンし、バス部２に完了を通知する（Ｃ５）。なお、図７は、メモリのデータを読み出すreadトランザクションの例である。メモリへデータを書き込むwriteトランザクションの場合には、メモリ部３のb_transport()は、b_transport()の引数pに設定されたデータを、メモリに書き込む（Ｃ３）。
【００８７】
バス部２のb_transport()では、メモリ部３のb_transport()から関数リターンすることで完了通知を受けると、引数tにバスのレーテンシ時間βを加算して（Ｃ６）、関数リターンし、コア部１に完了を通知する（Ｃ７）。
【００８８】
コア部１のprocess()では、バス部２のb_transport()から関数リターンすることで完了通知を受けると、その引数であるメモリ及びバスのレーテンシ時間tを判定する（Ｃ８）。これにより、ブロッキングアクセスのトランザクションが終了し、シミュレーション時間との同期が必要であれば、wait()を関数コールして時間を進め、シミュレーション時間と同期させる（Ｃ９）。
【００８９】
図８を用いて、図４〜図６で示した、高精度モードにおけるノンブロッキングアクセスのトランザクションの流れを説明する。符号４１１はコア部１におけるプロセス関数であるprocess()、符号４１２はコア部１におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号４１３はバス部２におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号４１４はバス部２におけるアービトレーション関数であるarb()、符号４１５はバス部２におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号４１６はメモリ部３におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号４１７はメモリ部３におけるプロセス関数であるprocess()についての各コーディング例である。
【００９０】
高精度モードの場合、コア部１のprocess()において、メモリアクセスが発生すると、バス部２にノンブロッキングアクセスを要求するためバス部２のnb_transport_fw()を関数コールする（Ｃ１１）。
【００９１】
そうすると、バス部２のnb_transport_fw()では、arb()によりアービトレーションを行うためarb_event.notify()によりイベント要求し（Ｃ１２）、コア部１に関数リターンして、アクセスを受け付けたことを通知する（Ｃ１３）。コア部１のprocess()では、バス部２のnb_transport_fw()が関数リターンすると、完了通知を待つために例えばwait()を関数コールする（Ｃ１４）。
【００９２】
バス部２のＣ１２で、arb()のイベントが要求されたため、所定時間経過後、アービトレーションが行われ、調停に勝ったトランザクションについて、メモリ部３にノンブロッキングアクセス要求するためメモリ部３のnb_transport_fw()を関数コールする（Ｃ１５）。
【００９３】
そうすると、メモリ部３のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し（Ｃ１６）、process()により完了通知を行うためprocess_event.notify()によりレーテンシ時間αを設定してイベント要求し（Ｃ１７）、バス部２に関数リターンして、アクセスを受け付けたことを通知する（Ｃ１８）。これにより、ノンブロッキングアクセスについて、トランザクションの開始フェーズが終了する。なお、図８は、図７と同様にreadトランザクションの例である。writeトランザクションの場合には、メモリ部３のnb_transport_fw()は、nb_transport_fw ()の引数pに設定されたデータを、メモリに書き込む（Ｃ１６）。
【００９４】
メモリ部３のＣ１７で、process()のイベントが要求されたため、レーテンシ時間α経過後process()が起動される。process()では、ノンブロッキング完了通知を通知するため、バス部２のnb_transport_bw()を関数コールする（Ｃ２０）。バス部２のnb_transport_bw()では、さらに、コア部１にノンブロッキング完了通知を通知するため、コア部１のnb_transport_bw()を関数コールする（Ｃ２１）。
【００９５】
そうすると、コア部１のnb_transport_bw()では、完了通知を受けた状態に遷移するため、変数completeをnotifyし（Ｃ２２）、バス部２に関数リターンして、完了通知を受け付けたことを通知する（Ｃ２３）。バス部２のnb_transport_bw()では、コア部１のnb_transport_bw()がリターンすると、さらに、メモリ部３に関数リターンして、完了通知を受け付けたことを通知する（Ｃ２４）。
【００９６】
さらに、コア部１のprocess()では、wait()により完了通知を待っている状態で（Ｃ１４）、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、ノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
【００９７】
次に、図９を用いて、前提例であるシミュレータ２００において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の問題について説明する。
【００９８】
まず、シミュレーション時間ｔ１０において、コア部１ｂが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０１）、バス部２ｂは、アービトレーション後のｔ１１において、メモリ部３ａに対しノンブロッキングアクセスを要求する（５０２）。
【００９９】
次いで、ｔ１２において、コア部１ｃが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０３）、バス部２ｂは、コア部１ｂのアクセスによるメモリ部３ａからの完了待ちであるため、メモリ部３ａへのアクセスが保留される（５０３）。
【０１００】
メモリ部３ａからの完了通知を待っている状態であるｔ１３において、高精度モードから高速モードに切り替えが発生したとする（５０４）。このとき、コア部１ａ〜コア部１ｃに、高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
【０１０１】
そして、ｔ１４において、コア部１ａが、バス部２ａに対しブロッキングアクセスを要求すると（５０５）、バス部２ａは、メモリ部３ａに対しブロッキングアクセスを要求し（５０７）、バス部２ａに関数リターンにより完了が通知され（５０８）、さらに、コア部１ａに関数リターンにより完了が通知される（５０６）。すなわち、シミュレーションモード切り替え後のｔ１４において、切り替え後に発生したブロッキングアクセスの切替後トランザクションが完了する。
【０１０２】
その後、ｔ１５において、ｔ１１からレーテンシ時間が経過したため、メモリ部３ａは、コア部１ｂのアクセス要求に対しバス部２ｂへノンブロッキング完了を通知し（５０９）、バス部２ｂは、コア部１ｂにノンブロッキング完了を通知する（５１０）。
【０１０３】
さらに、ｔ１６において、バス部２ｂは、コア部１ｂのアクセスが終了したため、保留しておいたコア部１ｃのアクセスを開始し、アービトレーション後のｔ１６において、メモリ部３ａにノンブロッキングアクセスを要求する（５１１）。
【０１０４】
次いで、ｔ１７において、ｔ１６からレーテンシ時間が経過したため、メモリ部３ａは、バス部２ｂにノンブロッキング完了を通知し（５１２）、バス部２ｂは、コア部１ｃにノンブロッキング完了を通知する（５１３）。すなわち、シミュレーションモード切り替え後のｔ１７において、切り替え前に受け付けたノンブロッキングアクセスの受付済トランザクションが完了する。
【０１０５】
このように、前提例では、高精度モードにおいて、ノンブロッキング完了を待っている状態で、シミュレーションモードが高速モードに切り替わり、さらに、ブロッキングアクセスが発生すると、切替後トランザクション（図９（１））のブロッキングアクセスが完了した後に、切り替え前に発生した受付済トランザクション（図９（２））のノンブロッキングアクセスが完了してしまう。
【０１０６】
すなわち、本来、図９（１）の切替後トランザクションは、図９（２）の受付済トランザクション完了後に完了するべきであり、トランザクション完了の順序が逆転することになる。同じメモリに対して、アクセス要求の順序とアクセス完了の順序が異なると、メモリのデータや処理結果が保証されなくなるため、コアやメモリのシミュレーションが誤動作する可能性がある。
【０１０７】
したがって、前提例では、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合、ノンブロッキングトランザクションが瞬時に完了しないため、データ通信のトランザクション完了順序が逆転し、シミュレーションの実行結果に悪影響を及ぼすという問題がある。
【０１０８】
そこで、本発明では、以下に説明するように、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合でも、データ通信のトランザクションの順序を保ち、シミュレーションの誤動作を防止することを可能にする。
【０１０９】
本発明の実施の形態１
以下、図１０〜図１６を用いて、本発明の実施の形態１に係るシミュレータについて説明する。なお、これらの図では、主に、上記前提例と同様の構成・動作について同じ符号が付されており、同様の構成・動作については説明を適宜省略する。
【０１１０】
図１０は、本発明の実施の形態１における、シミュレータの機能構成を示すブロック図である。このシミュレータ２０１は、上記前提例と同様に、コンピュータシステム１００上でシミュレーションプログラムが実行されて実現される。
【０１１１】
図に示されるように、このシミュレータ２０１は、システムＬＳＩ部４０とシミュレーション制御部５０とを備えており、システムＬＳＩ部４０は、コア部１ａ〜１ｃ、バス部２ａ〜２ｂ、メモリ部３ａ〜３ｂを備えている。コア部１ａは、バス部２ａを介して、メモリ部３ａ及び３ｂにアクセスし、コア部１ｂ及び１ｃは、バス部２ｂを介して、メモリ部３ａ及び３ｂにアクセスする。
【０１１２】
コア部１は、コア機能部１０とコア通信部１２とを備えており、バス部２は、アービトレーション部２０とバス通信部２２とを備えており、メモリ部３は、メモリ機能部３０とメモリ通信部３２とを備えている。本実施形態では、バス通信部２２及びメモリ通信部３２は、高精度モードから高速モードに切り替えた場合に、既に受け付けている受付済トランザクションを、切り替え後に受け付ける切替後トランザクションよりも、優先的に実行する機能を有しており、特に、コア部から切替後トランザクションが要求可能となる前に、受付済トランザクションを完了させるものである。
【０１１３】
シミュレーション制御部５０は、シミュレーションカーネル部４とモード切替部５１とを備えている。本実施形態では、モード切替部５１は、コア部１ａ〜１ｃ、バス部２ａ〜２ｂ、メモリ部３ａ〜３ｂの全てに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。
【０１１４】
図１１は、本発明の実施の形態１に係るシミュレータ２０１の各通信部の構成を示している。
【０１１５】
図に示されるように、コア通信部１２は、上記前提例と同様に、ブロッキングアクセスを行う高速モード処理部１１１とノンブロッキングアクセスを行う高精度モード処理部１１２とから構成されており、モード切替部５１からの命令に従って、高速モード処理部１１１または高精度モード処理部１１２が動作する。
【０１１６】
バス通信部２２は、ブロッキングアクセス処理部２１１とノンブロッキングアクセス処理部２１２に加えて、モード切替部５１からの命令に従って高精度モードから高速モードに切り替えを行う高速／高精度モード切替部２１３、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行する高速モード時ノンブロッキングアクセス処理部２１４を備えている。また、コア部１からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部２１５も備えている。トランザクション保持部２１５にはアービトレーションに負けたトランザクション等が保持される。
【０１１７】
メモリ通信部３２は、ブロッキングアクセス処理部３１１とノンブロッキングアクセス処理部３１２に加えて、モード切替部５１からの命令に従って高精度モードから高速モードに切り替えを行う高速／高精度モード切替部３１３、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行する高速モード時ノンブロッキングアクセス処理部３１４を備えている。また、バス部２からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部３１５も備えている。トランザクション保持部３１５にはアービトレーションに負けたトランザクション等が保持される。
【０１１８】
図１２は、本発明の実施の形態１に係るシミュレータ２０１のコア通信部１２のトランザクション処理を示している。
【０１１９】
このコアメモリアクセス処理（Ｓ１００）は、図４の前提例と同様であり、シミュレーションモードが高速モードであれば（Ｓ１０１のＹ）、高速モード処理部１１１にて、バス部２に対しブロッキングアクセス処理（図１３のＳ２００）が実行され（Ｓ１０２）、バス部２から受けたメモリ及びバスのレーテンシ時間が計上されて（Ｓ１０３）、ブロッキングアクセスのトランザクションが終了する（Ｓ１０７）。
【０１２０】
また、シミュレーションモードが高精度モードであれば（Ｓ１０１のＮ）、高精度モード処理部１１２にて、バス部２に対しノンブロッキングアクセス処理（図１３のＳ２１０）が実行され（Ｓ１０４）、バス部２から完了通知の受信を待った後、完了通知を受信して（Ｓ１０５、Ｓ１０６）、ノンブロッキングアクセスのトランザクションが終了する（Ｓ１０７）。
【０１２１】
図１３は、本発明の実施の形態１に係るシミュレータ２０１のバス通信部２２のトランザクション処理を示している。
【０１２２】
バス通信部２２では、ブロッキングアクセス処理部２１１が、ブロッキングアクセス処理（Ｓ２００）を実行し、ノンブロッキングアクセス処理部２１２が、ノンブロッキングアクセス処理（Ｓ２１０）、アービトレーション処理（Ｓ２２０）、完了通知処理（Ｓ２３０）を実行する。
【０１２３】
さらに、図１０のモード切替部５１からのモード切替命令が高速／高精度モード切替部２１３の切替と、高速モード時ノンブロッキングアクセス処理（Ｓ２４０）の起動を行い、高速モード時ノンブロッキングアクセス処理部２１４が、高速モード時ノンブロッキングアクセス処理（Ｓ２４０）の実行と、完了通知処理（Ｓ２３０）における高速モード時の完了通知を行う。
【０１２４】
ブロッキングアクセス処理（Ｓ２００）は、図５の前提例と同様であり、ブロッキングアクセス処理部２１１にて、メモリ部３に対しブロッキングアクセス処理（図１４のＳ３００）が実行され（Ｓ２０１）、レーテンシ時間を含めてコア部１へ完了通知を行い（Ｓ２０２）、バス部２におけるブロッキングアクセスのトランザクションが終了する（Ｓ２０３）。
【０１２５】
ノンブロッキングアクセス処理（Ｓ２１０）及びアービトレーション処理（Ｓ２２０）も、図５の前提例と同様である。ノンブロッキングアクセス処理（Ｓ２１０）では、ノンブロッキングアクセス処理部２１２にて、所定時間経過後にアービトレーション処理を起動し（Ｓ２１１）、コア部１に対し、アクセス受信をＡｃｋの返信により通知する（Ｓ２１２）。アービトレーション処理（Ｓ２２０）では、アービトレーション部２０にて所定時間経過後にアービトレーションが実施され（Ｓ２２１）、調停に勝ったトランザクションについて、ノンブロッキングアクセス処理部２１２にて、メモリ部３に対しノンブロッキングアクセス処理（図１４のＳ３１０）を実行する（Ｓ２２２）。
【０１２６】
また、メモリ部３からノンブロッキングの完了通知により完了通知処理が開始すると（Ｓ２３０）、ここでは、シミュレーションモードが切り替わっている可能性があるため、高速／高精度モード切替部２１３により、シミュレーションモードが高速モードであるかどうか判定される（Ｓ２３３）。
【０１２７】
Ｓ２３３において、シミュレーションモードが高速モードではなく高精度モードの場合、シミュレーションモードが変更されていないため、図５と同様に、ノンブロッキングアクセス処理部２１２にて、コア部１へ完了通知を行い（Ｓ２３１）、処理が終了する（Ｓ２３２）。
【０１２８】
Ｓ２３３において、シミュレーションモードが高速モードである場合、高速モード時ノンブロッキングアクセス処理部２１４にて、レーテンシ時間を含めてコア部１へ完了通知を行い（Ｓ２３４）、処理が終了する（Ｓ２３２）。すなわち、ノンブロッキングの完了通知であっても、高速モードの場合には、メモリから完了通知によって得られるレーテンシ時間に、バスで消費されるべきレーテンシ時間を加算した時間を、完了通知により伝達する。これにより、バス部２におけるノンブロッキングアクセスのトランザクションが終了する（Ｓ２３２）。
【０１２９】
また、高速モード時ノンブロッキングアクセス処理部２１４では、高速モード時ノンブロッキングアクセス処理が開始される（Ｓ２４０）。この処理は、図１０のモード切替部５１からのモード切替命令により起動する。
【０１３０】
次いで、メモリ部３からノンブロッキングアクセスの完了待ちの状態であるかどうか判定する（Ｓ２４１）。例えば、トランザクション保持部２１５を参照し、完了待ち中のトランザクションがあるかどうか確認する。
【０１３１】
Ｓ２４１において、完了待ちの場合、ノンブロッキングアクセスが完了するまで待つために、再度、本処理（Ｓ２４０）を再起動する（Ｓ２４５）。すなわち、イベント要求により、高速モード時ノンブロッキングアクセス処理（Ｓ２４０）が再起動される。
【０１３２】
Ｓ２４１において、完了待ちではない場合、メモリ部３へ未送信のトランザクションがあるかどうか判定する（Ｓ２４２）。すなわち、すでにコア部１からノンブロッキングアクセス要求を受け付け、メモリ部３へノンブロッキングアクセス要求を送信する前の受付済トランザクションの有無を、例えば、トランザクション保持部２１５を参照し確認する。
【０１３３】
Ｓ２４２において、未送信のトランザクションが無い場合、処理を終了し（Ｓ２４６）、Ｓ２４２において、未送信のトランザクションが有る場合、すぐにアービトレーションを実施する（Ｓ２４３）。すなわち、ノンブロッキングアクセス処理（Ｓ２１０）では、所定時間後にアービトレーションを行うが、高速モード時の場合には、所定時間待たずにアービトレーションを行う。そして、アービトレーション後、メモリ部３に対しノンブロッキングアクセス処理（図１４のＳ３１０）を実行する。さらに、本処理（Ｓ２４０）を再起動し（Ｓ２４５）、未送信のトランザクションが無くなるまで繰り返す。
【０１３４】
つまり、本実施形態では、バス部２は、アービトレーションに勝つ必要はあるものの、少なくとも、高精度モードから高速モードに切り替えられたタイミングで、受付済である未送信のトランザクションについて、メモリ部３へアクセスを要求する。また、完了待ちのトランザクションが存在する場合には、完了通知を受けたタイミングで、未送信のトランザクションについて、メモリ部３へアクセスを要求する。
【０１３５】
図１４は、本発明の実施の形態１に係るシミュレータ２０１のメモリ通信部３２のトランザクション処理を示している。
【０１３６】
メモリ通信部３２では、ブロッキングアクセス処理部３１１が、ブロッキングアクセス処理（Ｓ３００）を実行し、ノンブロッキングアクセス処理部３１２が、ノンブロッキングアクセス処理（Ｓ３１０）、完了通知処理（Ｓ３２０）を実行する。
【０１３７】
さらに、図１０のモード切替部５１からのモード切替命令が高速／高精度モード切替部２１３の切替と、高速モード時ノンブロッキングアクセス処理（Ｓ３３０）の起動を行い、高速モード時ノンブロッキングアクセス処理部３１４が、高速モード時ノンブロッキングアクセス処理（Ｓ３３０）の実行と、ノンブロッキングアクセス処理（Ｓ３１０）及び完了通知処理（Ｓ３２０）における高速モード時の完了通知を行う。
【０１３８】
ブロッキングアクセス処理（Ｓ３００）は、図６の前提例と同様であり、ブロッキングアクセス処理部３１１にて、メモリで消費されるべきレーテンシ時間を含めてバス部２へ完了通知が行われ（Ｓ３０１）、メモリ部３におけるブロッキングアクセスのトランザクションが終了する（Ｓ３０２）。
【０１３９】
また、バス部２からの要求によりノンブロッキングアクセス処理が開始される（Ｓ３１０）と、ここでは、シミュレーションモードが切り替わっている可能性があるため、高速／高精度モード切替部３１３により、シミュレーションモードが高速モードであるかどうか判定される（Ｓ３１３）。
【０１４０】
Ｓ３１３において、シミュレーションモードが高速モードではなく高精度モードの場合、シミュレーションモードが変更されていないため、図６と同様に、ノンブロッキングアクセス処理部３１２にて、レーテンシ時間経過後に完了通知処理（Ｓ３２０）を起動し（Ｓ３１１）、バス部２に対しアクセス受け付けをＡｃｋの返信により通知する（Ｓ３１２）。
【０１４１】
Ｓ３１３において、シミュレーションモードが高速モードである場合、直ちに完了通知処理を起動する（Ｓ３１４）。すなわち、レーテンシ時間を待たずに、イベント要求により完了通知処理（Ｓ３２０）が起動される。
【０１４２】
Ｓ３１１またはＳ３１４，Ｓ３３３にて起動されることにより完了通知処理が開始されると（Ｓ３２０）、高速／高精度モード切替部３１３により、シミュレーションモードが高速モードであるかどうか判定される（Ｓ３２３）。
【０１４３】
Ｓ３２３において、シミュレーションモードが高速モードではなく高精度モードの場合、図６と同様に、ノンブロッキングアクセス処理部３１２にて、バス部２に対し完了通知処理を（図１３のＳ２３０）を実行し（Ｓ３２１）、処理が終了する（Ｓ３２２）。
【０１４４】
Ｓ３２３において、シミュレーションモードが高速モードである場合、高速モード時ノンブロッキングアクセス処理部３１４にて、バス部２に対し完了通知処理を（図１３のＳ２３０）を実行する（Ｓ３２４）。このとき、レーテンシ時間の経過を待たずに完了通知を行うため、メモリで消費されるべきレーテンシ時間も伝達する。これにより、メモリ部３におけるノンブロッキングアクセスのトランザクションが終了する（Ｓ３２２）。
【０１４５】
また、高速モード時ノンブロッキングアクセス処理部３１４では、高速モード時ノンブロッキングアクセス処理が開始される（Ｓ３３０）。この処理は、図１０のモード切替部５１からのモード切替命令により起動する。
【０１４６】
次いで、処理中のトランザクションがあるかどうか判定する（Ｓ３３１）。すなわち、すでにバス部２からノンブロッキングアクセス要求を受け付け、完了通知を送信する前の受付済トランザクションの有無を、例えば、トランザクション保持部３１５を参照し確認する。
【０１４７】
Ｓ３３１において、処理中のトランザクションが無い場合、処理を終了し（Ｓ３３４）、Ｓ３３１において、処理中のトランザクションが有る場合、レーテンシ処理を中止する（Ｓ３３２）。すなわち、Ｓ３１１にて発行されている、レーテンシ時間経過後に完了通知処理を起動するイベント要求を取り消す。
【０１４８】
そして、直ちに完了通知処理を起動する（Ｓ３３３）。すなわち、レーテンシ時間の経過を待たずに、イベント要求により完了通知処理（Ｓ３２０）が起動され、バス部２へレーテンシ時間を含む完了通知が通知される。
【０１４９】
つまり、本実施形態では、メモリ部３は、高精度モードから高速モードに切り替えられたタイミングで、受付済トランザクションについて、レーテンシ時間経過を待たずに処理を中断して、バス部２へ完了を通知する。また、バス部２から、受付済トランザクションの要求を受けた場合も、レーテンシ時間経過を待たずに、完了を通知する。レーテンシ時間経過を待たずに完了を通知する場合、レーテンシ時間を含めて完了を通知し、すでにレーテンシ時間が消費されている場合には、すでに消費された時間を差し引いた残りの時間を通知する。
【０１５０】
図１５は、本発明の実施の形態１に係るシミュレータ２００のコーディング例を示している。図１５を用いて、図１２〜図１４で示した、高精度モードにおけるノンブロッキングアクセスのトランザクションの流れ、高精度モードから高速モードに切り替えられた場合のトランザクションの流れを説明する。なお、高速モードにおけるブロッキングアクセスの動作は、図７の前提例と同様であるため、説明を省略する。
【０１５１】
符号４２０はコア部１におけるプロセス関数であるprocess()、符号４２１はコア部１におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号４２２はバス部２におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号４２３はバス部２におけるアービトレーション関数であるarb()のコーディング例であり、符号４２４はバス部２におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号４２５はバス部２におけるモード切替関数であるchange()、符号４２６はメモリ部３におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号４２７はメモリ部３におけるプロセス関数であるprocess()、符号４２８はメモリ部３におけるモード切替関数であるchange()についての各コーディング例である。
【０１５２】
まず、高精度モードの場合の動作について説明する。高精度モードの場合、コア部１のprocess()において、メモリアクセスが発生すると、バス部２にノンブロッキングアクセス要求するためバス部２のnb_transport_fw()を関数コールする（Ｃ２１）。
【０１５３】
そうすると、バス部２のnb_transport_fw()では、arb()によりアービトレーションを行うためarb_event.notify()によりイベント要求し（Ｃ２２）、コア部１に関数リターンして、アクセスを受け付けたことを通知する（Ｃ２３）。コア部１のprocess()では、バス部２のnb_transport_fw()が関数リターンすると、完了通知を待つためにwait()を関数コールする（Ｃ２４）。
【０１５４】
バス部２のＣ２２で、arb()のイベントが要求されたため、所定時間経過後、アービトレーションが行われ、調停に勝ったトランザクションについて、メモリ部３にノンブロッキングアクセス要求するためメモリ部３のnb_transport_fw()を関数コールする（Ｃ２５）。
【０１５５】
そうすると、メモリ部３のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し（Ｃ２６）、シミュレーションモードが高速モードであるか判定し（Ｃ２７）、ここでは、高精度モードであるため、process()によりレーテンシ時間経過後に完了通知を行うようにprocess_event.notify()によりイベント要求し（Ｃ２８）、バス部２に関数リターンして、アクセスを受け付けたことを通知する（Ｃ２９）。これにより、ノンブロッキングアクセスについて、トランザクションの開始フェーズが終了する。
【０１５６】
メモリ部３のＣ２８で、process()のイベントが要求されたため、レーテンシ時間α経過後process()が起動される。メモリ部３のprocess()では、シミュレーションモードが高速モードであるか判定し（Ｃ３０）、ここでは高精度モードであるため、レーテンシ時間は設定せずノンブロッキング完了通知を通知するため、バス部２のnb_transport_bw()を関数コールする（Ｃ３２）。
【０１５７】
そうすると、バス部２のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し（Ｓ３３）、ここでは、高精度モードであり、コア部１にノンブロッキング完了通知を通知するため、コア部１のnb_transport_bw()を関数コールする（Ｃ３４）。
【０１５８】
さらに、コア部１のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し（Ｃ３５）、ここでは、高精度モードであり、完了通知を受けた状態に遷移するため、変数completeをnotifyし（Ｃ３６）、バス部２に関数リターンして、完了通知を受け付けたことを通知する（Ｃ３７）。バス部２のnb_transport_bw()では、コア部１のnb_transport_bw()が関数リターンすると、さらに、メモリ部３に関数リターンして、完了通知を受け付けたことを通知する（Ｃ３８）。
【０１５９】
また、コア部１のprocess()では、wait()により完了通知を待っている状態で（Ｃ２４）、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、ノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
【０１６０】
次に、高精度モードのトランザクション処理中に高速モードに切り替わった場合の動作について説明する。
【０１６１】
メモリ部３では、高精度モードから高速モードに切り替わるとchange()が起動する。ここでは、処理中の受付済トランザクションが存在するとして、処理中のトランザクションのイベントをprocess_event.cancel()によりキャンセルし（Ｃ４０）、process()によりすぐに完了通知を行うためprocess_event.notify()によりイベント要求する（Ｃ４１）。例えば、レーテンシの残り時間αをprocess()の引数に設定する。なお、実際には処理中のトランザクションの有無を判定する必要があるが（図１４のＳ３３１）、ここでは省略する。
【０１６２】
これにより、直ちにprocess()が起動される。メモリ部３のprocess()では、シミュレーションモードが高速モードであるか判定され（Ｃ３０）、ここでは高速モードであるため、レーテンシ時間tに引数t1を設定する（Ｃ４２）。そして、ノンブロッキング完了通知を通知するため、バス部２のnb_transport_bw()を関数コールする（Ｃ３２）。
【０１６３】
そうすると、バス部２のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定され（Ｃ３３）、ここでは高速モードであるため、引数tのメモリのレーテンシ時間にバスのレーテンシ時間βを加算して（Ｃ４３）、コア部１にノンブロッキング完了通知を通知するため、コア部１のnb_transport_bw()を関数コールする（Ｃ３４）。
【０１６４】
さらに、コア部１のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し（Ｃ３５）、ここでは、高速モードであるため、メモリアクセスのレーテンシ時間を設定し（Ｃ４４）、完了通知を受けた状態に遷移するため、変数completeをnotifyし（Ｃ３６）、バス部２に関数リターンして、完了通知を受け付けたことを通知する（Ｃ３７）。バス部２のnb_transport_bw()では、コア部１のnb_transport_bw()が関数リターンすると、さらに、メモリ部３に関数リターンして、完了通知を受け付けたことを通知する（Ｃ３８）。
【０１６５】
また、コア部１のprocess()では、wait()により完了通知を待っている状態で（Ｃ２４）、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、高速モードに切り替えた場合に、すでに受け付け済みのノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
【０１６６】
この場合、レーテンシ時間を計上するため、コア部１のprocess()では、レーテンシ時間tを判定し（Ｃ４５）、シミュレーション時間との同期が必要であれば、wait()を関数コールして時間を進め、シミュレーション時間と同期させる（Ｃ４６）。
【０１６７】
一方、バス部２でも、高精度モードから高速モードに切り替わると、change()が起動する。ここでは、完了待ちは無く未送信のトランザクションが存在するとして、受け付け済みで未送信のトランザクションについて、メモリ部３にノンブロッキングアクセス要求するためメモリ部３のnb_transport_fw()を関数コールする（Ｃ５０）。なお、実際には完了待ちのトランザクションの有無の判定、未送信トランザクションの有無の判定、アービトレーションが必要であるが（図１３のＳ２４１〜Ｓ２４３）、ここでは省略する。
【０１６８】
そうすると、メモリ部３のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し（Ｃ２６）、シミュレーションモードが高速モードであるか判定し（Ｃ２７）、ここでは、高速モードであるため、process()によりすぐに完了通知を行うためprocess_event.notify()によりイベント要求し（Ｃ５１）、バス部２に関数リターンして、アクセスを受け付けたことを通知する（Ｃ２９）。ここでは、メモリで消費すべきレーテンシ時間αをprocess()の引数に設定する。その後、上記と同様に、メモリ部３のprocess()、バス部２のnb_transport_bw()、コア部１のnb_transport_bw()により、高速モード時のノンブロッキング完了通知が通知される。
【０１６９】
次に、図１６を用いて、本発明の実施の形態１に係るシミュレータ２０１において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の動作について説明する。
【０１７０】
シミュレーション時間ｔ２０において、コア部１ｂが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０１）、バス部２ｂは、アービトレーション後のｔ２１において、メモリ部３ａに対しノンブロッキングアクセスを要求する（５０２）。
【０１７１】
次いで、ｔ２２において、コア部１ｃが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０３）、バス部２ｂは、コア部１ｂのアクセスによるメモリ部３ａからの完了待ちであるため、メモリ部３ａへのアクセスが保留される（５０３）。
【０１７２】
メモリ部３ａからの完了通知を待っている状態であるｔ２３において、高精度モードから高速モードに切り替えが発生する（５０４）。このとき、コア部１ａ〜コア部１ｃ、バス部２ａ〜２ｂ、メモリ部３ａ〜３ｂに高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
【０１７３】
本実施形態では、高精度モードから高速モードに切り替わった際に、メモリ及びバスにおいて受け付け済みのトランザクションを優先的に実行する。特に、コアがトランザクションの要求可能となる前、すなわち、シミュレーション時間が進む前に（図１６のｔ２３のうちに）、受け付け済みのトランザクションを完了させる。
【０１７４】
ｔ２３において、高精度モードから高速モードに切り替わると、メモリ部３ａでは、この切替により高速モード時ノンブロッキングアクセス処理が起動され（図１６（ａ））、処理中の受付済トランザクションであるコア部１ｂからのアクセス要求に対し、レーテンシ時間経過を待たず、すぐにバス部２ｂにノンブロッキング完了を通知し（５２０）、バス部２ｂは、コア部１ｂにノンブロッキング完了を通知する（５２１）。
【０１７５】
また、バス部２ｂでは、ｔ２３の切り替えにより高速モード時ノンブロッキングアクセス処理が起動され（図１６（ｂ））、完了待ちであるコア部１ｂのアクセス完了を待ち、コア部１ｂのアクセス終了後（図１６（ｃ））、保留しておいたコア部１ｃのアクセスを開始し、すぐにメモリ部３ａにノンブロッキングアクセスを要求する（５２２）。メモリ部３ａは、レーテンシ時間経過を待たず、すぐにバス部２ｂにノンブロッキング完了を通知し（５２３）、バス部２ｂは、コア部１ｃにノンブロッキング完了を通知する（５２４）。このときに、切り替え前に受け付けたノンブロッキングアクセスの受付済トランザクションが完了する。
【０１７６】
シミュレーションモードの切り替え前に受け付けた受付済トランザクションの処理が全て終了したため、シミュレータ時間が進み始める。例えば、シミュレーションカーネル部４は、コア部１、バス部２、メモリ部３の全てのプロセスにおいて、wait()が発生した場合に、シミュレーション時間を進めるように制御するものとする。本実施形態では、シミュレーションモードの切り替え時、受付済トランザクションの処理が全て終了した後に、wait()を発行することで、受付済トランザクションの処理終了後に、シミュレーション時間が進むようにする。
【０１７７】
シミュレーションモード切り替え後のｔ２４において、コア部１ａが、バス部２ａに対しブロッキングアクセスを要求すると（５２５）、バス部２ａは、メモリ部３ａに対しブロッキングアクセスを要求し（５２７）、バス部２ａに関数リターンにより完了が通知され（５２８）、さらに、コア部１ａに関数リターンにより完了が通知される（５２６）。このときに、シミュレーションモードの切り替え後に発生したブロッキングアクセスの切替後トランザクションが完了する。
【０１７８】
このように、本実施形態では、高精度モードから高速モードへ切り替えが発生した場合、全てのバス、メモリは切り替えによって起動される高速モード時ノンブロッキングアクセス処理により、シミュレーション時刻を進めることなく切り替え前に受信した受付済トランザクションを完了させる。メモリは、受付済みで処理中のトランザクションについて処理を中断しレーテンシ時間を待たずにトランザクションを完了させ、バスは、受付済みでメモリへ要求する前のトランザクションについて所定時間待たずにメモリへ要求することでトランザクションを完了させる。
【０１７９】
したがって、図１６（２）の受付済トランザクション完了後、図１６（１）の切替後トランザクションを実施するため、データ通信の順序が、アクセス要求の順序通りとなる。このため、トランザクションの順序が逆転することはなく、メモリのデータや処理結果も保証されることから、誤動作を防ぐことができる。
【０１８０】
すなわち、本実施形態では、シミュレーションモードを高精度モードまたは高速モードに切り替えることができるため、シミュレーションの高精度化及び高速化が可能であるとともに、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、受付済トランザクションをレーテンシ時間経過を待たずに切替後トランザクションよりも先に完了させるため、シミュレーションの誤動作を防止することができる。
【０１８１】
本発明の実施の形態２
以下、図１７〜図２２を用いて、本発明の実施の形態２に係るシミュレータについて説明する。なお、これらの図では、主に、上記前提例と同様の構成・動作について同じ符号が付されており、同様の構成・動作については説明を適宜省略する。
【０１８２】
図１７は、本発明の実施の形態２における、シミュレータの機能構成を示すブロック図である。このシミュレータ２０２は、上記前提例と同様に、コンピュータシステム１００上でシミュレーションプログラムが実行されて実現される。
【０１８３】
図に示されるように、このシミュレータ２０２は、システムＬＳＩ部４０とシミュレーション制御部５０とを備えており、システムＬＳＩ部４０は、コア部１ａ〜１ｃ、バス部２ａ〜２ｂ、メモリ部３ａ〜３ｂを備えている。コア部１ａは、バス部２ａを介して、メモリ部３ａ及び３ｂにアクセスし、コア部１ｂ及び１ｃは、バス部２ｂを介して、メモリ部３ａ及び３ｂにアクセスする。
【０１８４】
コア部１は、コア機能部１０とコア通信部１３とを備えており、バス部２は、アービトレーション部２０とバス通信部２３とを備えており、メモリ部３は、メモリ機能部３０とメモリ通信部３３とを備えている。本実施形態では、バス通信部２３及びメモリ通信部３３は、高精度モードから高速モードに切り替えた場合に、既に受け付けている受付済トランザクションを、切り替え後に受け付ける切替後トランザクションよりも、優先的に実行する機能を有しており、特に、バス通信部２３及びメモリ通信部３３は、切り替え前に受け付けたノンブロッキングアクセスが処理中の場合、切り替え後のブロッキングアクセスを拒絶する。また、コア通信部１３は、高速モードにおいてブロッキングアクセスが失敗した場合にアクセスをリトライする機能を有している。
【０１８５】
シミュレーション制御部５０は、シミュレーションカーネル部４とモード切替部５とを備えている。本実施形態では、モード切替部５は、上記前提例と同様に、コア部１ａ〜１ｃに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。
【０１８６】
図１８は、本発明の実施の形態２に係るシミュレータ２０２の各通信部の構成を示している。
【０１８７】
図に示されるように、コア通信部１３は、ブロッキングアクセスを行う高速モード処理部１１１とノンブロッキングアクセスを行う高精度モード処理部１１２とに加えて、ブロッキングアクセスが失敗した場合にアクセスをリトライするブロッキングアクセスリトライ処理部１１３を備えている。
【０１８８】
バス通信部２３は、ブロッキングアクセス処理部２１１とノンブロッキングアクセス処理部２１２に加えて、ノンブロッキングアクセス処理中の場合にコア部１からのブロッキングアクセスを拒絶するブロッキングアクセス拒絶部２１６を備えている。また、ブロッキングアクセス拒絶部２１６は、ノンブロッキングアクセス処理中の場合にブロッキングアクセスを拒絶することで、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行するものである。
【０１８９】
メモリ通信部３３は、ブロッキングアクセス処理部３１１とノンブロッキングアクセス処理部３１２に加えて、ノンブロッキングアクセス処理中の場合にバス部２からのブロッキングアクセスを拒絶するブロッキングアクセス拒絶部３１６を備えている。また、ブロッキングアクセス拒絶部３１６は、ノンブロッキングアクセス処理中の場合にブロッキングアクセスを拒絶することで、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行するものである。
【０１９０】
図１９は、本発明の実施の形態２に係るシミュレータ２０２のコア通信部１３のトランザクション処理を示している。なお、高精度モード時の動作は、図４の前提例と同様であるため説明を省略する。
【０１９１】
このコアメモリアクセス処理（Ｓ１００）は、シミュレーションモードが高速モードであれば（Ｓ１０１のＹ）、高速モード処理部１１１にて、バス部２に対しブロッキングアクセス処理（図２０のＳ２００）が実行される（Ｓ１０２）。
【０１９２】
次いで、ブロッキングアクセスリトライ処理部１１３にて、ブロッキングアクセスが拒絶されたかどうか判定される（Ｓ１０８）。すなわち、ブロッキングアクセスに対しバス部２から拒絶通知を受信したかどうか判定する。
【０１９３】
Ｓ１０８において、アクセスが拒絶された場合、ブロッキングアクセスリトライ処理部１１３にて、一定時間待った後（Ｓ１０９）、バス部２へブロッキングアクセスを再度行う（Ｓ１０２）。
【０１９４】
ブロッキングアクセスが正常に終了するまでリトライを繰り返し、Ｓ１０８において、アクセスが拒絶されない場合に、バス部２から受けたメモリ及びバスのレーテンシ時間が計上されて（Ｓ１０３）、ブロッキングアクセスのトランザクションが終了する（Ｓ１０７）。
【０１９５】
なお、ブロッキングアクセスが拒絶された場合に、コア部がリトライするまでのリトライ間隔は任意に設定可能である。リトライ間隔が短すぎると無駄なブロッキングアクセスを繰り返すことによりコンテキストスイッチングが増加し、シミュレーション速度が低下する。また、リトライ間隔が長すぎると、次のリトライを待っている間に、その他のマスタ（コア）から送信される後に発生するべきアクセスが先に受け付けられてしまう可能性があり、アクセス順序が逆転してしまう恐れがある。例えば、ノンブロッキングアクセスの平均的な待ち時間などを考慮してもよい。また、ブロッキング要求に対する拒絶通知の際に、リトライ時間を設定してもよい。例えば、メモリであれば残りのレーテンシ時間を通知したり、バスであれば送信待ちのトランザクションの数やレーテンシ時間を通知し、コアは、通知された時間経過後、ブロッキングアクセスをリトライすれば、アクセスが成功する可能性が高く、無駄なリトライを防げる。
【０１９６】
図２０は、本発明の実施の形態２に係るシミュレータ２０２のバス通信部２３のトランザクション処理を示している。
【０１９７】
ブロッキングアクセス処理（Ｓ２００）では、ブロッキングアクセス拒絶部２１６にて、ノンブロッキングアクセス中であるかどうか判定する（Ｓ２０４）。例えば、ノンブロッキングアクセス処理の開始時に、ノンブロッキングアクセス中の状態を保持しておき、この状態により判定する。
【０１９８】
Ｓ２０４において、ノンブロッキングアクセス中であると判定された場合、ブロッキングアクセス拒絶部２１６にて、コア部１へ拒絶通知を行う（Ｓ２０５）。すなわち、コア部１からのブロッキングアクセスの関数コールに対して、関数リターンにより拒絶を通知する。
【０１９９】
Ｓ２０４において、ノンブロッキングアクセス中ではないと判定された場合、図５と同様に、ブロッキングアクセス処理部２１１にて、メモリ部３へブロッキングアクセス処理（図２１のＳ３００）が実行され（Ｓ２０１）、レーテンシ時間を含めてコア部１へ完了通知を行い（Ｓ２０２）、バス部２におけるブロッキングアクセスのトランザクションが終了する（Ｓ２０３）。
【０２００】
また、メモリ部３からブロッキングアクセスの拒絶通知を受けると、ブロッキングアクセス処理部２１１（もしくはブロッキングアクセス拒絶部２１６）にて拒絶通知処理が開始され（Ｓ２５０）、コア部１へ拒絶通知を行い（Ｓ２５１）、処理が終了する（Ｓ２５２）。
【０２０１】
なお、ノンブロッキングアクセス処理（Ｓ２１０）、アービトレーション処理（Ｓ２２０）、完了通知処理（Ｓ２３０）については、図５の前提例と同様であり説明を省略する。
【０２０２】
図２１は、本発明の実施の形態２に係るシミュレータ２０２のメモリ通信部３３のトランザクション処理を示している。
【０２０３】
ブロッキングアクセス処理（Ｓ３００）では、ブロッキングアクセス拒絶部３１６にて、ノンブロッキングアクセス中であるかどうか判定する（Ｓ３０３）。例えば、ノンブロッキングアクセス処理の開始時に、ノンブロッキングアクセス中の状態を保持しておき、この状態により判定する。
【０２０４】
Ｓ３０３において、ノンブロッキングアクセス中であると判定された場合、ブロッキングアクセス拒絶部３１６にて、バス部２へ拒絶通知を行う（Ｓ３０４）。すなわち、バス部２からのブロッキングアクセスの関数コールに対して、関数リターンにより拒絶を通知する。
【０２０５】
Ｓ３０３において、ノンブロッキングアクセス中ではないと判定された場合、図６と同様に、ブロッキングアクセス処理部３１１にて、メモリで消費されるべきレーテンシ時間を含めてバス部２へ完了通知が行われ（Ｓ３０１）、メモリ部３におけるブロッキングアクセスのトランザクションが終了する（Ｓ３０２）。
【０２０６】
なお、ノンブロッキングアクセス処理（Ｓ３１０）、完了通知処理（Ｓ３２０）については、図６の前提例と同様であり説明を省略する。
【０２０７】
次に、図２２を用いて、本発明の実施の形態２に係るシミュレータ２０２において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の動作について説明する。
【０２０８】
シミュレーション時間ｔ３０において、コア部１ｂが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０１）、バス部２ｂは、アービトレーション後のｔ３１において、メモリ部３ａに対しノンブロッキングアクセスを要求する（５０２）。
【０２０９】
次いで、ｔ３２において、コア部１ｃが、バス部２ｂに対しノンブロッキングアクセスを要求すると（５０３）、バス部２ｂは、コア部１ｂのアクセスによるメモリ部３ａからの完了待ちであるため、メモリ部３ａへのアクセスが保留される（５０３）。
【０２１０】
メモリ部３ａからの完了通知を待っている状態であるｔ３３において、高精度モードから高速モードに切り替えが発生する（５０４）。このとき、コア部１ａ〜コア部１ｃに高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
【０２１１】
次いで、ｔ３４において、コア部１ａが、メモリ部３ｂへアクセスするため、バス部２ａに対しブロッキングアクセスを要求すると（５３０）、バス部２ａは、ノンブロッキングアクセス処理中ではないため、メモリ部３ｂに対しブロッキングアクセスを要求し（５３２）、メモリ部３ｂは、ノンブロッキングアクセス処理中ではないため、バス部２ａに関数リターンにより完了が通知され（５３３）、さらに、コア部１ａに関数リターンにより完了が通知される（５３１）。
【０２１２】
ｔ３５において、コア部１ａが、メモリ部３ａへアクセスするため、バス部２ａに対しブロッキングアクセスを要求すると（５３４）、バス部２ａは、ノンブロッキングアクセス処理中ではないため、メモリ部３ａに対しブロッキングアクセスを要求し（５３６）、メモリ部３ａは、ｔ３１で受け付けたアクセスのレーテンシ時間経過待ちであり、ノンブロッキングアクセス処理中のため、バス部２ａに関数リターンにより拒絶が通知され（５３７）、さらに、コア部１ａに関数リターンにより拒絶が通知される（５３５）。なお、仮に、コア部１ａとバス部２ｂが接続されているとして、ｔ３５で、コア部１ａがバス部２ｂへブロッキングアクセス要求すると、バス部２ｂは、ノンブロッキングアクセス処理中のため、コア部１ａのアクセスを拒絶する。
【０２１３】
その後、ｔ３６において、ｔ３１からレーテンシ時間が経過したため、メモリ部３ａは、コア部１ｂのアクセス要求に対しバス部２ｂへノンブロッキング完了を通知し（５３８）、バス部２ｂは、コア部１ｂにノンブロッキング完了を通知する（５３９）。
【０２１４】
さらに、ｔ３７において、バス部２ｂは、コア部１ｂのアクセスが終了したため、保留しておいたコア部１ｃのアクセスを開始し、アービトレーション後のｔ３７において、メモリ部３ａにノンブロッキングアクセスを要求する（５４０）。
【０２１５】
次いで、ｔ３８において、ｔ３７からレーテンシ時間が経過したため、メモリ部３ａは、バス部２ｂにノンブロッキング完了を通知し（５４１）、バス部２ｂは、コア部１ｃにノンブロッキング完了を通知する（５４２）。
【０２１６】
ｔ３９において、ブロッキングアクセスが拒絶されたｔ３５から一定時間経過すると、コア部１ａが、メモリ部３ａへ再度アクセスするため、バス部２ａに対しブロッキングアクセスを要求すると（５４３）、バス部２ａは、ノンブロッキングアクセス処理中ではないため、メモリ部３ａに対しブロッキングアクセスを要求し（５４５）、メモリ部３ａは、ノンブロッキングアクセス処理中ではないため、バス部２ａに関数リターンにより完了が通知され（５４６）、さらに、コア部１ａに関数リターンにより完了が通知される（５４４）。
【０２１７】
このように、本実施形態では、高精度から高速モードへ切り替えが発生した場合、受付済トランザクションについて、ノンブロッキングアクセス処理中のバス及びメモリは、コアからのブロッキングアクセスを拒絶するため、処理中のノンブロッキングアクセスよりも、先にブロッキングアクセスが完了することはない。さらに、コアは、ブロッキングアクセスが拒絶されると、ブロッキングアクセスをリトライする。
【０２１８】
したがって、図２２（２）の受付済トランザクション完了後、図２２（１）の切替後トランザクションを実施するため、データ通信の順序が、アクセス要求の順序通りとなる。このため、トランザクションの順序が逆転することはなく、メモリのデータや処理結果も保証されることから、誤動作を防ぐことができる。
【０２１９】
すなわち、本実施形態では、シミュレーションモードを高精度モードまたは高速モードに切り替えることができるため、シミュレーションの高精度化及び高速化が可能であるとともに、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、受付済トランザクション処理中は切替後トランザクションを拒絶し、受付済トランザクションを切替後トランザクションよりも先に完了させるため、シミュレーションの誤動作を防止することができる。
【０２２０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。上記の例では、コアとメモリとをバスにより接続する構成について説明したが、マスターブロックとスレーブブロックの関係となっていればよい。例えば、コアの代わりにＤＭＡ（Direct Memory Access）でもよいし、メモリの代わりにレジスタを有する他の機能ブロックでもよい。また、コアとメモリ間を、複数段に階層接続されたバスを介して接続してもよい。上記の例でバスは、コアからメモリへの送信に対してアービトレーションを行っているが、メモリからコアへの送信に対してアービトレーションを行ってもよい。また、マスターブロックとスレーブブロックとがバス等を介さずに直接接続されてもよい。
【０２２１】
また、上記の例では、ノンブロッキングアクセスを２つの通信フェーズのトランザクションとして説明したが、その他の複数の通信フェーズを有していてもよい。例えば、トランザクション開始を通知するフェーズ、トランザクション開始の受け付けを通知するフェーズ、トランザクション終了を通知するフェーズ、トランザクション終了の受け付けを通知するフェーズの４つのフェーズを有していてもよい。例えば、シミュレーションモードの切り替え時には、受付済トランザクションについて、全てのフェーズではなく、フェーズを省略することで、少ないフェーズですぐにトランザクションが終了するようにしてもよい。また、ノンブロッキングアクセスの受付済トランザクションについて、ブロッキングアクセスによりアクセス要求や完了通知を行うことで、すぐにトランザクションが終了するようにしてもよい。
【０２２２】
また、上記の例では、高精度モードと高速モードの切り替えの例として、図２３に示したような高精度なノンブロッキングアクセス（高精度モード）と図２４に示したような高速なブロッキングアクセス（高速モード）との切り替えについて説明したが、これに限らず、図２５に示したような高精度なブロッキングアクセス（これも高精度モードに含まれる）と図２４に示したような高速なブロッキングアクセス（高速モード）との切り替えについても、上記の例と同様に本発明を適用することが可能である。
【０２２３】
すなわち、図２５の高精度なブロッキングアクセスでもターゲットにおいてwait()を関数コールしている間、シミュレーションカーネルの割り込みが生じる。このため、ノンブロッキングアクセスと同様、図９のようにアクセス完了の順序に影響を及ぼす可能性がある。したがって、図２５の高精度なブロッキングアクセスから図２４の高速なブロッキングアクセスに切り替える際に、実施の形態１のように受付済トランザクションを先に完了させるようにしたり、実施の形態２のように切替後トランザクションを拒絶することで、シミュレーションの誤動作を防止することができる。
【符号の説明】
【０２２４】
１，１ａ，１ｂ，１ｃ  コア部
２，２ａ，２ｂ  バス部
３，３ａ，３ｂ  メモリ部
４  シミュレーションカーネル部
５，５１  モード切替部
１０  コア機能部
１１，１２，１３  コア通信部
２０  アービトレーション部
２１，２２，２３  バス通信部
３０  メモリ機能部
３１，３２，３３  メモリ通信部
４０  システムＬＳＩ部
５０  シミュレーション制御部
１００  コンピュータシステム
１０１  本体部
１０２  ＣＰＵ
１０３  メインメモリ
１０４  ハードディスク
１０５  表示装置
１０６  キーボード
１０７  マウス
１０８  シミュレーションプログラム
１０９  各種データ
１１１  高速モード処理部
１１２  高精度モード処理部
１１３  ブロッキングアクセスリトライ処理部
２００，２０１，２０２  シミュレータ
２１１  ブロッキングアクセス処理部
２１２  ノンブロッキングアクセス処理部
２１３  高速／高精度モード切替部
２１４  高速モード時ノンブロッキングアクセス処理部
２１５  トランザクション保持部
２１６  ブロッキングアクセス拒絶部
３１１  ブロッキングアクセス処理部
３１２  ノンブロッキングアクセス処理部
３１３  高速／高精度モード切替部
３１４  高速モード時ノンブロッキングアクセス処理部
３１５  トランザクション保持部
３１６  ブロッキングアクセス拒絶部
【図１】
2013196245.tif 000003
【図２】
2013196245.tif 000004
【図３】
2013196245.tif 000005
【図４】
2013196245.tif 000006
【図５】
2013196245.tif 000007
【図６】
2013196245.tif 000008
【図７】
2013196245.tif 000009
【図８】
2013196245.tif 000010
【図９】
2013196245.tif 000011
【図１０】
2013196245.tif 000012
【図１１】
2013196245.tif 000013
【図１２】
2013196245.tif 000014
【図１３】
2013196245.tif 000015
【図１４】
2013196245.tif 000016
【図１５】
2013196245.tif 000017
【図１６】
2013196245.tif 000018
【図１７】
2013196245.tif 000019
【図１８】
2013196245.tif 000020
【図１９】
2013196245.tif 000021
【図２０】
2013196245.tif 000022
【図２１】
2013196245.tif 000023
【図２２】
2013196245.tif 000024
【図２３】
2013196245.tif 000025
【図２４】
2013196245.tif 000026
【図２５】
2013196245.tif 000027