(57)【要約】【課題】オーバーヘッドによるシミュレーション速度の低下をなくし、シミュレーションを高速化することができるシミュレーション方法およびシミュレーションシステムを提供する。【解決手段】シミュレーション実行部１と実行一覧作成部２と実行一覧３を用意する。シミュレーション実行部１は全ての機能モデル４を毎サイクル実行するのではなく、実行一覧作成部２により作成された実行一覧３に記載された処理だけを各サイクルで実行する。実行一覧作成部２は、各ハードウェアから状態の変化の通知を受け、状態の変化にあわせて動的に、サイクル毎に実行する処理の実行一覧３を作成する。これによりシステム状態に適した処理をサイクル毎に実行してシミュレーションを高速化させる。【選択図】図１
2008210099.tif 000002
【特許請求の範囲】
【請求項１】
システムLSIのシミュレーション方法において、
システムの状態の通知を受け、前記システムの状態に応じてサイクル毎に実行する処理の一覧を作成する工程と、
作成した前記一覧に記載される処理を1サイクル毎に実行する工程とを有するシミュレーション方法。
【請求項２】
請求項１記載のシミュレーション方法において、
前記一覧を、機能モデルへのクロック供給の状態に応じて作成するシミュレーション方法。
【請求項３】
請求項２記載のシミュレーション方法において、
前記一覧を、前記機能モデルのリセットの状態に応じて作成するシミュレーション方法。
【請求項４】
請求項１記載のシミュレーション方法において、
システムに関する複数の状態の通知を受け、前記複数の状態の組み合わせに応じて前記一覧を作成するシミュレーション方法。
【請求項５】
請求項４記載のシミュレーション方法において、
前記複数の状態の通知に、CPUからの通知を含み、
前記CPUの実行を前記一覧に追加または削除するシミュレーション方法。
【請求項６】
システムLSIのシミュレーションシステムにおいて、
システムの状態の通知を受け、前記システムの状態に応じてサイクル毎に実行する処理の一覧を作成する実行一覧作成部と、
作成した前記一覧に記載される処理を1サイクル毎に実行するシミュレーション実行部とを有するシミュレーションシステム。
【請求項７】
請求項６記載のシミュレーションシステムにおいて、
機能モデルへのクロック供給の状態に応じて前記一覧を作成するクロックジェネレータを有するシミュレーションシステム。
【請求項８】
請求項７記載のシミュレーションシステムにおいて、
前記機能モデルのリセットの状態を前記クロックジェネレータに通知するリセットコントローラを有し、
前記クロックジェネレータは、前記機能モデルのリセットの状態に応じて前記一覧を作成するシミュレーションシステム。
【請求項９】
請求項６記載のシミュレーションシステムにおいて、
前記実行一覧作成部は、システムに関する複数の状態の通知を受け、前記複数の状態の組み合わせに応じて前記一覧を作成するシミュレーションシステム。
【請求項１０】
請求項９記載のシミュレーションシステムにおいて、
前記実行一覧作成部は、CPUからの通知に応じて前記一覧を作成するシミュレーションシステム。
【請求項１１】
システムLSIのシミュレーションプログラムにおいて、
システムの状態の通知を受け、前記システムの状態に応じてサイクル毎に実行する処理の一覧を作成する機能と、
作成した前記一覧に記載される処理を1サイクル毎に実行する機能をコンピュータに実行させるシミュレーションプログラム。
【請求項１２】
請求項１１記載のシミュレーションプログラムにおいて、
前記一覧を、機能モデルへのクロック供給の状態に応じて作成するシミュレーションプログラム。
【請求項１３】
請求項１２記載のシミュレーションプログラムにおいて、
前記一覧を、前記機能モデルのリセットの状態に応じて作成するシミュレーションプログラム。
【請求項１４】
請求項１１記載のシミュレーションプログラムにおいて、
システムに関する複数の状態の通知を受け、前記複数の状態の組み合わせに応じて前記一覧を作成するシミュレーションプログラム。
【請求項１５】
請求項１４記載のシミュレーションプログラムにおいて、
前記複数の状態の通知に、CPUからの通知を含み、
前記CPUの実行を前記一覧に追加または削除するシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサやDSP（Digital Signal Processor）をはじめとするハードウェアの各機能を含むシステムLSIのシミュレーション技術に関する。特に、C/C++や、SystemCに代表されるシステムレベル言語を用いた時にクロックの時間概念を含むサイクルベースでのシミュレーションを行う技術に関する。
【背景技術】
【０００２】
従来のHDL（Hardware Description Language）言語(VerilogやVHDL)でのRTL(Register Transfer Level)記述では、イベント毎に同期したシミュレーションを実行可能である。しかし、システムLSIの規模の増大に伴い、システムLSI全体を動作させるような大規模なシミュレーションではイベント数が増加するため、RTL記述レベルでは、シミュレーション速度が低下するという課題があった。
【０００３】
この問題を解決するため、現在、SystemCなどのシステムレベル言語を利用したシミュレーションにより高速化を行う仕組みが利用可能である。しかし、システムレベル言語を用いたシミュレーションであっても、時間概念を含む、サイクルベースでのシミュレーションを行う場合は、サイクル毎に各ハードウェアの機能モデルを実行する。
【０００４】
例えば、SystemCによる記述によれば、シミュレーション時に、クロックの時間概念を用いる場合には、SC_THREAD/SC_CTHREAD/SC_METHODを利用し、クロックに同期して実行される処理をプロセスとして処理を行う（例えば、非特許文献１参照）。
【０００５】
【非特許文献１】平成15年1月30日  丸善株式会社  発行Thorsten  Grotker、Stan  Liao、Grant  Martin、Stuart  Swan  著柿本  勝、河原林  正道、長谷川  隆  監訳SystemC によるシステム設計
【発明の開示】
【発明が解決しようとする課題】
【０００６】
システムレベル言語を用いたシミュレーションにより、サイクルベースのシミュレーション記述が容易になった。また、ハードウェアモデル毎にサイクルベースでの各ハードウェアの動作記述を記載すればよくなった。
【０００７】
しかし、更なるシステムLSIの大規模化や、システムLSIのシミュレータで実行したいソフトウェア処理も大規模になるにつれ、サイクルベースの記載においても実行処理が増加していて、さらなるシミュレーションの高速化が求められている。
【０００８】
例えば、上記のSystemCでの例だと、SC_THREADに登録したプロセスはSC_THREADに設定されたクロックの立ち上がり(もしくは、立下り)に同期して必ず実行される。そのため、システムLSIの対象となるモデルが増加すると、その分プロセスが増加する。
【０００９】
しかし、各ブロックが全て動作するような最大負荷の状態でなければ、各モデルの動作を記載した各プロセスは実行されるが、システムにとって影響を与えるような動作をしない場合が多くなる。このような場合であっても、プロセスは実行されるため、この各モデルのプロセスのコールがシミュレーションのオーバーヘッドになる。
【００１０】
このため、従来のシミュレーション方法においては、各サイクルに同期して実行される各処理において、システムの状態をチェックして動作を変更するか、各処理を実行するメインルーチンにてシステムの状態をチェックして実行を制御する必要があった。
【００１１】
図９は、システムの状態をチェックして動作を変更する従来のシミュレーション方法のフローチャートを示す。すなわち、図９（ａ）に示すメインルーチン処理では、システムを初期化し（ステップＳ４１）、シミュレーション継続かどうかを判断し（ステップＳ４２）、シミュレーションを継続する場合（Ｙｅｓ）は、ハードウェア処理1の実行を判断する（ステップＳ４３）。
【００１２】
ステップＳ４３において、図９（ｂ）に示すハードウェア処理1に移行し、処理実行状態かを判断し（ステップＳ５１）、処理実行状態の場合（Ｙｅｓ）は、ハードウェア処理1を実行する（ステップＳ５２）。
【００１３】
同様に、ハードウェア処理2（ステップＳ４４）およびハードウェア処理3（ステップＳ４５）では、図９（ｂ）に示すハードウェア処理2,3に移行し、処理実行状態かを判断し（ステップＳ５１）、処理実行状態の場合（Ｙｅｓ）は、ハードウェア処理2,3を実行する（ステップＳ５２）。
【００１４】
また、図１０は、各処理を実行するメインルーチンにてシステムの状態をチェックして実行を制御する従来のシミュレーション方法のフローチャートを示す。すなわち、図１０（ａ）に示すメインルーチン処理では、システムを初期化し（ステップＳ６１）、シミュレーション継続かどうかを判断し（ステップＳ６２）、さらにハードウェア処理1が処理実行状態かを判断し（ステップＳ６３）、処理実行状態の場合（Ｙｅｓ）は、ハードウェア処理1を実行する（ステップＳ６４，Ｓ７１）。
【００１５】
同様に、ハードウェア処理2が処理実行状態かを判断し（ステップＳ６５）、処理実行状態の場合（Ｙｅｓ）は、ハードウェア処理2を実行する（ステップＳ６６，Ｓ７１）。さらに、ハードウェア処理3が処理実行状態かを判断し（ステップＳ６７）、処理実行状態の場合（Ｙｅｓ）は、ハードウェア処理3を実行する（ステップＳ６８，Ｓ７１）。
【００１６】
これに対し、シミュレーションの高速化を実現する方法として、時間概念を抽象化し、時間概念がないシミュレーションを実現する方法がある。システムLSI としてハードウェア構成が確定した後の開発段階でのリアルタイム処理を中心とした組み込みシステムのシミュレーションにおいては、時間概念は重要な要素であり、タイマによる時間管理、周期的な処理等を高精度にシミュレーションすることが重要である。
【００１７】
時間概念の抽象化は、図９、図１０のメインルーチンの処理自体を変更して実現していた。以下、時間概念を抽象化しない場合と抽象化した場合とを比較する。時間概念を抽象化しない場合、たとえば図９の場合には、ハードウェア処理1（ステップＳ４３）を5回実行するためには、メインルーチンのシミュレーション継続（ステップＳ４２）からのループ（ステップＳ４２〜Ｓ４５）を5回通過する必要がある。このループをハードウェアの1サイクルの処理とすれば、ハードウェア処理1を5回実行することは、５サイクル分の処理になる。すなわちこの場合、サイクル毎の状態を持ちながら５サイクル進むことになる。
【００１８】
これに対し、時間概念を抽象化する場合は、一回目のハードウェア処理時に5回分のハードウェア処理1を実行してしまうことになる。そうした場合、メインルーチンのループは少なくてすみ、シミュレーションを高速に実行できる。しかし、サイクルごとのハードウェア状態が再現できなくなってしまう。
【００１９】
一方従来技術においては、別の要因によってもシミュレーション速度が低下していた。ここで、従来のシミュレーション手法について説明する。図１１に対象とするシステムLSIのブロック構成を記載する。この対象システムLSIはプロセッサ（ＣＰＵ）５とメモリ１１とクロックジェネレータ９とリセットコントローラ１０とハードウェアエンジンA６、ハードウェアエンジンB７、ハードウェアエンジンC８から構成される。
【００２０】
まず、従来手法によるシミュレーションを実施する装置を図１２に示す。シミュレーション実行部１はサイクル毎にCPU５と各ハードウェアエンジン６，７，８を実行する。
【００２１】
シミュレーション実行部１の処理フローを図１３に記載する。シミュレーションがスタートすると、初期化（ステップＳ８１）をした後に、メインルーチンを実行する。メインルーチンでは、CPUモデル５はCPU実行の処理（ステップＳ８３）にて、メモリ１１上の命令を取得して、その命令を実行する。
【００２２】
各ハードウェアエンジン６，７，８はその実行の際には、CPU５による設定値に従い、それぞれの定義された処理を実行する（ステップＳ８４，Ｓ８５，Ｓ８６）。クロックジェネレータ９とリセットコントローラ１０とメモリ１１はサイクル毎の実行処理は実行せず、CPU５からアクセスが発生した時のみ処理を実行するものとする。
【００２３】
クロックジェネレータ９は、CPU５からのアクセスを受け、その書き込みの値により、各ハードウェアエンジン６，７，８のクロック供給の状態を制御するものとする。また、リセットコントローラ１０は、CPU５からのアクセスを受け、その書き込みの値により、各ハードウェアエンジン６，７，８のリセット状態を解除するものとする。
【００２４】
各ハードウェアエンジン６，７，８は、実行時に、このクロックジェネレータ９の設定とリセットコントローラ１０の設定をチェックして、クロックが供給されていて、リセットが解除されているのであれば、定義された処理を実行するものとする。この時のハードウェアエンジン６，７，８の処理フローを図１４に記載する。
【００２５】
従来のシミュレーション実行方法では、図１３に示すように、サイクル毎に、CPU実行（ステップＳ８３）とハードウェアエンジンA実行（ステップＳ８４）、ハードウェアエンジンB実行（ステップＳ８５）、ハードウェアエンジンC実行（ステップＳ８６）という呼び出しの処理が実行される。
【００２６】
なお、サイクルとは、シミュレーション上で時間が進む単位であり、シミュレーションはこのサイクル毎に実行される。図１３のフローチャートでは、シミュレーション継続の判断（ステップＳ８２）からハードウェアエンジンC実行（ステップＳ８６）までの1回りで１サイクルとなる。
【００２７】
図１４のとおり、各ハードウェアエンジン６，７，８の実行処理の中では、クロック状態の確認（ステップＳ９１）とリセット状態の確認（ステップＳ９２）を行い、クロック供給（Ｙｅｓ）でリセット解除（Ｙｅｓ）であれば、実際の処理を実行する（ステップＳ９３）。
【００２８】
従来手法ではこのように実際の処理を実行しないハードウェアに対してもメインルーチンは処理を実行し、実行された処理の中では、クロックとリセットの状態確認という処理が発生する。
【００２９】
この例では、対象としているハードウェアエンジンは三つのみだが、この数が増えるとそれだけこの処理にかかる時間が増大し、シミュレーション速度の低下が発生する。
【００３０】
本発明は、上記従来の事情に鑑みてなされたものであって、オーバーヘッドによるシミュレーション速度の低下をなくし、シミュレーションを高速化することができるシミュレーション方法およびシミュレーションシステムを提供することを目的としている。
【００３１】
また、本発明は、サイクルベースのシミュレーション精度を保ちつつも、システムLSIの規模増加の影響を少なくすることができるシミュレーション方法およびシミュレーションシステムを提供することを目的としている。
【課題を解決するための手段】
【００３２】
上記シミュレーション速度の低下という課題を解決するために、第一の発明では、シミュレーションサイクルを実行する工程とは別に、各ハードウェアの状態変化により、シミュレーション実行する一覧を動的に作成する工程を設け、シミュレーションサイクルを実行する際には、この一覧の記載されたものだけを実行することにより、シミュレーションサイクル毎に実行していた各機能部の実行や状態のチェックをなくし、シミュレーションを高速化する。
【００３３】
これにより、ソフトウェア（CPU）からのアクセスによるクロック設定や、ハードウェアブロックへの起動設定などのハードウェアの状態変化に応じて、シミュレーションの実行一覧を動的に作成するので、サイクルベースのシミュレーション精度を保ちつつ、システムLSIの規模増加の影響を少なくして、シミュレーションを高速化することができる。
【００３４】
第二の発明では、第一の発明におけるシミュレーションの実行一覧の作成をクロックジェネレータの機能ブロックに持たせることにより、ゲーティッドクロックや分周におけるマルチサイクルのシミュレーション時の高速化を行う。
【００３５】
CPUがクロックの設定を行う時に、実行一覧を更新する。毎サイクルのシミュレーション実行時には、クロックの状態チェックを行わずに、実行一覧の実行処理のみの実行を行う。
【００３６】
第三の発明では、クロックジェネレータとリセットコントローラを含む形でクロックとリセットの状態をチェックして実行一覧の作成を行う手法である。
【００３７】
第四の発明ではシミュレーションの機能ブロックとは、独立して実行一覧を作成するブロックを用意して、シミュレーション実行一覧を作成する構成をとる。第二の発明、第三の発明においてクロックとリセットの状態により実行一覧作成を行う構成をとったが、それ以外の状態変化によりシミュレーション実行の一覧を変更する場合や、複数の条件により実行一覧を作成する場合は、独立した制御ブロックを用意し、各機能ブロックから必要な状態変化の通知を受け、制御ブロック内において状態を管理して、シミュレーション実行一覧を作成する。
【００３８】
各機能ブロックからの状態変化の通知には、CPUからのスリープモードの通知、リセットコントローラにおけるリセット設定状態の通知、各ハードウェアエンジン固有のゲーティッドクロックや動作イネーブルの設定通知などがある。
【００３９】
第五の発明では、CPUが休止状態などに入ったときの通知と休止状態から復帰する時の通知を状態変化点としてCPUの休止状態のシミュレーション速度を高速化する方法である。この場合は、シミュレーション中にCPUが休止状態に入る命令を実行した際に、前記一覧を更新してCPUを実行一覧から削除する。
【００４０】
従来のシステムシミュレーションの場合、CPUの実行が中心でシミュレーションが実行される方法が多いが、その場合、そもそも休止状態がシミュレーションできないか、シミュレーションできる場合でもCPUが休止状態になってもCPUのルーチンを実行する必要があった。本手法を用いることにより、CPUが休止状態でのシミュレーション速度の向上効果をより高めることが可能になる。
【発明の効果】
【００４１】
本発明によれば、サイクルレベルのシミュレーション精度を保ちつつ、システムLSIのシミュレーションを高速に実行することが可能になる。特に、各機能ブロックの設定によってシステムとしても動作するブロックが変わるような、今日の大規模、複雑なシステムLSI を用いた、OSやデバイスドライバやミドルウェアを含むような大規模かつ、長時間のシミュレーションを実速度により近い形でシミュレーションが可能になる。
【００４２】
本発明における実行一覧の作成は、従来のシミュレーションではない処理であるため、その分実行コストが増えるものである。しかし、メインルーチンの実行回数が、状態変化の回数に比べてはるかに大きい場合はこの実行コストを上回る全体としての速度向上が行える。
【００４３】
例えば、メインルーチンはシミュレーションサイクルが進むごとに実行されるが、クロックジェネレータへのアクセス回数はそのうちに、実際にCPUがクロックジェネレータへアクセスした時のみになり、発生頻度としては、とても少なくなる。そのため、本手法により毎サイクルの実行処理が減ることはシミュレーション高速化において極めて大きい効果がある。
【発明を実施するための最良の形態】
【００４４】
図１は、本発明の実施形態にかかるシミュレーション方法を実現するための装置の一例を示す図である。同図に示すシミュレーション実行部１は、各機能モデル１〜ｎの処理を実行する。サイクル毎にこのシミュレーション実行部１が各機能モデル４を実行することにより、システムLSIの動作をシミュレーションする。
【００４５】
実行一覧作成部２は、機能モデル４から状態変化の通知を受け、各機能モデル１〜ｎの状態をチェックして実行一覧３を作成する。実行一覧は、シミュレーションを実行すべき機能モデルを示す情報、すなわち、ある状態においてシステムに影響を与えるような動作をする機能モデルを示す情報のリストである。シミュレーション実行部１は全ての機能モデル４を毎サイクル実行するのではなく、実行一覧作成部２により作成された実行一覧３に記載する機能モデル４の処理だけを実行する。
【００４６】
以下、従来のシミュレーション方法を改良することにより、第一の発明、第二の発明を実施する形態を記載する。
【００４７】
図１に示す本発明の基本構成に、第一と第二の実施形態を適用した場合を図２に示す。クロックジェネレータ９に、実行一覧を作成する機能を持たすことにする。クロックジェネレータ９は、従来と同様にCPU５のアクセスにより処理を実行する。クロックジェネレータ９は、従来の手法であれば、クロック供給の状態を設定するのみであったが、本実施形態では、CPU５からのアクセスという通知により、各ハードウェアエンジン６，７，８の状態の変化をチェックして実行一覧３を作成する。すなわち、クロックジェネレータ９は、CPU５からの通知にあわせて、動的に実行一覧３を更新する。
【００４８】
CPU５に関しては、初期化処理であらかじめ実行一覧３に登録されているものとする。作成する実行一覧３の例を図３に示す。図３では、CPU５とハードウェアエンジンA６とハードウェアエンジンC８が実行一覧に記載されている。実行一覧３では、要素毎に実行処理のアドレスなどを記載しておく。なお、実行一覧３の書式はこれに限定されず、シミュレーション実行部１の実装にあわせて最適な一覧を利用することとする。
【００４９】
シミュレーションの処理フローを図４に示す。従来の処理フローである図１３と比較すると、CPU実行（図１３のステップＳ８３）、ハードウェアエンジンA実行（ステップＳ８４）、ハードウェアエンジンB実行（ステップＳ８５）、ハードウェアエンジンC実行（ステップＳ８６）の処理が実行一覧の要素の処理を実行（図４のステップＳ１４）となっている。
【００５０】
メインルーチンの処理として、従来であれば、CPU実行、ハードウェアエンジンA、ハードウェアエンジンB、ハードウェアエンジンCという四つの処理（ステップＳ８３、Ｓ８４，Ｓ８５，Ｓ８６）を固定で実施していたが、本実施形態により、CPUの実行とクロックジェネレータで作成された要素分の実行（ステップＳ１４）になる。
【００５１】
そのため、クロックが供給されていなく、実行一覧３に要素がないときはハードウェアエンジンA６、ハードウェアエンジンB７、ハードウェアエンジンC８はいずれも実行をしない。
【００５２】
ハードウェアエンジンA６だけにクロックが供給されている場合は、ハードウェアエンジンA６だけを実行し、ハードウェアエンジンA６、ハードウェアエンジンB７の二つにクロックが供給されている場合は二つの要素を実行する。
【００５３】
これにより、クロック供給の状態に合わせて、メインルーチンで実行する処理を増減させることができ、クロック供給にあわせて処理速度を高速化することが可能である。
【００５４】
特に、ハードウェアエンジンA６、ハードウェアエンジンB７、ハードウェアエンジンC８のいずれにもクロックが供給されていない状態では必要な処理はCPU５の処理だけになり、より高速に実行が可能である。
【００５５】
また、各ハードウェアエンジン６，７，８での処理フローを図５に示す。従来の手法であれば、ここで、クロックの供給状態を確認していたが、この処理の実行される時点ですでにクロック供給がされている前提であるため、本処理では、クロック供給状態の確認という処理をなくすことが可能であり、高速化が可能である。
【００５６】
さらに、第三の発明の実施形態として、上記クロックジェネレータ９にリセットコントローラ１０へのCPU５からのアクセスによるリセット状態の更新の通知を取得するようにする。
【００５７】
この構成図を図６に記載する。CPU５からリセットコントローラ１０へのアクセスによるリセット状態の変化をクロックジェネレータ９に通知を行う。クロックジェネレータ９ではこの通知を受けて、クロック供給状態とあわせて、実行一覧３を作成する。
【００５８】
本実施形態では、クロックが供給されていて、リセットが解除されている状態のとき実行一覧３に要素を追加して、クロックが停止もしくは、リセットが発生した時に実行一覧３から要素を削除する。
【００５９】
この時の各ハードウェアエンジン６，７，８の処理フローを図７に示す。これにより、クロック状態、リセット状態を考慮して実行一覧３を作成できるので、第二の発明の実施形態に比べ、図７では、さらにリセット状態のチェックに関する処理を削減することが可能である。
【００６０】
第四の発明の実施形態として、実行一覧３を作成する機能をクロックジェネレータとは別の機能として持たす。その構成を図８に示す。これにより、例えば、クロック、リセットの状態に加えて、各ハードウェアエンジン６，７，８固有の状態設定等を含め状態管理を行うことが可能である。
【００６１】
なお、ハードウェアエンジン固有の状態設定とは、例えば、そのハードウェアエンジンがスリープモードに設定されて処理をしていない状態、あるいは動作Enableの設定がされていないため動作をしていない状態などである。
【００６２】
また、本機能を独立させることにより、クロックジェネレータ９での処理を少なくして、クロックジェネレータ９の処理が複雑化するのを防ぐことが可能である。
【００６３】
第五の発明の実施形態として、クロックジェネレータ９、リセットコントローラ１０ではなく、CPU５の休止状態をシミュレーションする実施形態を記載する。構成としては、図８と同様である。
【００６４】
本実施形態で利用するCPU５としては、決められた命令を実行することにより、休止状態に入るものとする。休止状態に入ったCPU５はハードウェアエンジン６，７，８からの割込み通知があるまで、命令実行を含む全ての処理を実行しないものとする。
【００６５】
CPU５にて休止状態に入る命令を実行すると、CPU５から実行一覧作成部２へ通知を行う。実行一覧作成部２では、この通知を受けて、CPU５を実行一覧３から削除する。その後、メインルーチンでは、CPU５がない状態で、実行一覧３を実行する。
【００６６】
CPU５が休止して、ハードウェアエンジンA６が動作している状態とすると、ハードウェアエンジンA６の実行が完了すると、CPU５への割込みを発生する。この割り込みを実行一覧作成部２にも通知する。
【００６７】
実行一覧作成部２では、この通知を受け、休止状態にいるCPU５を再度実行一覧３に追加して、実行を再開する。CPU５は休止状態からの復帰の割り込みを受け、その割込み処理から動作を再開する。
【００６８】
以上説明した実施形態によれば、時間概念を抽象化することなく、ソフトウェア（CPU）からのアクセスによるクロック設定や、ハードウェアブロックへの起動設定などのハードウェアの状態変化に応じて、シミュレーションの実行一覧を動的に作成し、作成した実行一覧を参照してシミュレーションを実行するので、サイクルベースのシミュレーション精度を保ちつつ、システムLSIの規模増加の影響を少なくして、シミュレーションを高速化することができる。したがって、サイクルレベルのシミュレーション精度を保ちつつ、システムLSIのシミュレーションを高速に実行することが可能になる。特に、各機能ブロックの設定によってシステムとしても動作するブロックが変わるような、今日の大規模、複雑なシステムLSI を用いた、OSやデバイスドライバやミドルウェアを含むような大規模かつ、長時間のシミュレーションを実速度により近い形でシミュレーションが可能になる。
【産業上の利用可能性】
【００６９】
本発明にかかるシミュレーション方法は、サイクルレベルでの精度を確保しつつ、高速化を実現可能である。大規模なハードウェア、ソフトウェアを利用し、リアルタイム性の動作を求められる組み込みシステムの開発等において、本発明によるシミュレーション装置、手法は極めて有用である。
【図面の簡単な説明】
【００７０】
【図１】本発明の実施形態にかかるシミュレーションシステムを説明するための概略図
【図２】本発明の実施形態にかかるシミュレーションシステムのブロック図（１）
【図３】本発明の実施形態にかかるシミュレーションシステムにおける実行一覧の例を示す図
【図４】本発明の実施形態にかかるシミュレーション方法による処理フローを示す図
【図５】本発明の実施形態にかかるハードウェアエンジンの処理フローを示す図（１）
【図６】本発明の実施形態にかかるシミュレーションシステムのブロック図（２）
【図７】本発明の実施形態にかかるハードウェアエンジンの処理フローを示す図（２）
【図８】本発明の実施形態にかかるシミュレーションシステムのブロック図（３）
【図９】従来のシミュレーション方法による処理フローを示す図（１）
【図１０】従来のシミュレーション方法による処理フローを示す図（２）
【図１１】本発明の実施形態に利用するシステムLSIの構成図
【図１２】従来のシミュレーション方法を実施する装置を示す図
【図１３】従来のシミュレーション方法の処理フローを示す図
【図１４】従来のシミュレーション方法におけるハードウェアエンジンでの処理フローを示す図
【符号の説明】
【００７１】
１  シミュレーション実行部
２  実行一覧作成部
３  実行一覧
４  機能モデル(ハードウェアモデル)
５  CPU
６  ハードウェアエンジンA
７  ハードウェアエンジンB
８  ハードウェアエンジンC
９  クロックジェネレータ
１０  リセットコントローラ
１１  メモリ
【図１】
2008210099.tif 000003
【図２】
2008210099.tif 000004
【図３】
2008210099.tif 000005
【図４】
2008210099.tif 000006
【図５】
2008210099.tif 000007
【図６】
2008210099.tif 000008
【図７】
2008210099.tif 000009
【図８】
2008210099.tif 000010
【図９】
2008210099.tif 000011
【図１０】
2008210099.tif 000012
【図１１】
2008210099.tif 000013
【図１２】
2008210099.tif 000014
【図１３】
2008210099.tif 000015
【図１４】
2008210099.tif 000016