(57)【要約】【課題】バスを有する半導体集積回路について、シミュレーションを高速に行う。【解決手段】半導体集積回路のシミュレーション方法であって、前記マスターブロックのモデルがその共通化ポートから共通化インタフェースを用いて前記バスのモデルにアクセスし、前記バスのモデルがその共通化ポートから前記共通化インタフェースを用いて前記スレーブブロックのモデルにアクセスするモデルについてシミュレーションを実行する高精度シミュレーションステップと、前記マスターブロックのモデルがその共通化ポートから前記共通化インタフェースを用いて前記バスのモデルを介さずに前記スレーブブロックのモデルにアクセスするモデルについてシミュレーションを実行する抽象化シミュレーションステップとを備える。シミュレーションに必要とされる精度に応じて、前記高精度シミュレーションステップ又は前記抽象化シミュレーションステップを選択して実行する。【選択図】図１
2007207176.tif 000002
【特許請求の範囲】
【請求項１】
マスターブロックと、スレーブブロックと、前記マスターブロックと前記スレーブブロックとの間を接続するバスとを有する半導体集積回路を対象とするシミュレーション方法であって、
前記マスターブロックを、共通化ポートを有するマスターモデルにモデル化するステップと、
前記スレーブブロックを、共通化インタフェースでアクセス可能なスレーブモデルにモデル化するステップと、
前記バスを、前記マスターモデルと同一の共通化ポートを有し、前記共通化インタフェースでアクセス可能なバスモデルにモデル化するステップと、
前記マスターモデルがその共通化ポートから前記共通化インタフェースを用いて前記バスモデルにアクセスし、前記バスモデルがその共通化ポートから前記共通化インタフェースを用いて前記スレーブモデルにアクセスするモデルについてシミュレーションを実行する高精度シミュレーションステップと、
前記マスターモデルがその共通化ポートから前記共通化インタフェースを用いて前記バスモデルを介さずに前記スレーブモデルにアクセスするモデルについてシミュレーションを実行する抽象化シミュレーションステップとを備え、
シミュレーションに必要とされる精度に応じて、前記高精度シミュレーションステップ又は前記抽象化シミュレーションステップを選択して実行する
シミュレーション方法。
【請求項２】
請求項１に記載のシミュレーション方法において、
前記スレーブブロックをモデル化するステップは、
複数のスレーブブロックを複数のスレーブモデルにそれぞれモデル化するものであり、
前記抽象化シミュレーションステップは、
アドレスと前記複数のスレーブモデルとの間の対応関係を示す情報に基づいて、前記マスターモデルがアクセスするアドレスに応じて、前記複数のスレーブモデルから選択を行い、選択されたスレーブモデルへのアクセスのシミュレーションを実行するものである
ことを特徴とするシミュレーション方法。
【請求項３】
請求項２に記載のシミュレーション方法において、
前記対応関係を示す情報は、
前記複数のスレーブモデルのうちの少なくとも１つと、それぞれに対応するアドレスの範囲とを示すものである
ことを特徴とするシミュレーション方法。
【請求項４】
請求項２に記載のシミュレーション方法において、
前記対応関係を示す情報は、
前記複数のスレーブモデルのうちの少なくとも１つと、それぞれに対応するビットフィールドとを示すものである
ことを特徴とするシミュレーション方法。
【請求項５】
請求項２に記載のシミュレーション方法において、
前記アドレスは、
ワードアドレス、ハーフワードアドレス、又はバイトアドレスのいずれかである
ことを特徴とするシミュレーション方法。
【請求項６】
請求項２に記載のシミュレーション方法において、
前記半導体集積回路が実際に動作する際に処理に要する時間を設定するステップを更に備え、
前記抽象化シミュレーションステップは、
前記処理に要する時間を考慮してシミュレーションを実行するものである
ことを特徴とするシミュレーション方法。
【請求項７】
請求項６に記載のシミュレーション方法において、
前記処理に要する時間を設定するステップは、
前記高精度シミュレーションステップを行って、前記処理に要する時間を求め、得られた時間を設定するものである
ことを特徴とするシミュレーション方法。
【請求項８】
請求項１に記載のシミュレーション方法において、
前記抽象化シミュレーションステップを行った後に、得られたシミュレーション結果に基づいて以前の時点におけるシミュレーション結果を求め、求められたその時点におけるシミュレーション結果を用いて前記高精度シミュレーションステップを実行する
ことを特徴とするシミュレーション方法。
【請求項９】
請求項１に記載のシミュレーション方法において、
予め設定された、アクセス先のアドレスと必要とされるシミュレーション精度との対応関係に従って、前記高精度シミュレーションステップ又は前記抽象化シミュレーションステップを実行する
ことを特徴とするシミュレーション方法。
【請求項１０】
請求項１に記載のシミュレーション方法において、
ＲＴＬ（register transfer level）モデルにアクセスする場合には、前記高精度シミュレーションステップを実行する
ことを特徴とするシミュレーション方法。
【請求項１１】
請求項１に記載のシミュレーション方法において、
前記マスターブロックにより実行されるソフトウェアから、精度を必要としない処理を検出して、前記精度を必要としない処理については抽象化シミュレーションを行うように指定する前処理ステップを更に備える
ことを特徴とするシミュレーション方法。
【請求項１２】
請求項１１に記載のシミュレーション方法において、
前記前処理ステップは、
前記精度を必要としない処理としてポーリング処理を検出するものである
ことを特徴とするシミュレーション方法。
【請求項１３】
請求項１に記載のシミュレーション方法において、
前記マスターブロックによるソフトウェアの実行をシミュレーションする際に、精度を必要としない処理を検出して、前記精度を必要としない処理については前記抽象化シミュレーションを行うようにする
ことを特徴とするシミュレーション方法。
【請求項１４】
請求項１３に記載のシミュレーション方法において、
前記精度を必要としない処理としてＮＯＰ（no operation）命令を検出する
ことを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路のシミュレーション技術に関し、特に、複数のブロックと、これらのブロック間を接続するバスとを有する半導体集積回路を対象とするシミュレーション技術に関する。
【背景技術】
【０００２】
システムＬＳＩと呼ばれる半導体集積回路は、近年、大規模・複雑化している。そのアーキテクチャとしては、プロセッサ（例えばＣＰＵやＤＳＰ（digital signal processor））、特定の処理（例えばＭＰＥＧ（moving picture experts group）やＪＰＥＧ（joint photographic experts group）のための処理）を行う専用ハードウェア、及びメモリ等の機能ブロックを複数有し、これらの機能ブロック間をバスが相互に接続するという形態が多くなっている。
【０００３】
このような、複数の機能ブロック間が単一又は複数のバスで相互に接続されるシステムオンチップ化に対応するため、設計の流れの上流におけるハードウェア／ソフトウェア／システムの検証、開発、評価を行うシステムシミュレーションが必要とされている。
【０００４】
例えば、非特許文献１には、ポートとインタフェースとを定義して、モジュール間の接続を行い、バスを含めたシミュレーション環境を構築する方法が開示されている。マスター−バス間とバス−スレーブ間とでは、異なるインタフェースが用いられている。マスター−バス間では、３つのインタフェースが用意され、その統合手順が説明されている。
【０００５】
また、異なる用途向けの、異なる抽象度のためのインタフェースを備えたモデルを想定したシミュレーション技術が、例えば特許文献１に開示されている。更に、ＣＰＵ、ＤＭＡＣ（direct memory access controller）等のモデルが、バスインタフェースのシミュレーションモデルを介して、バス及びスレーブへのアクセスを行うシミュレーション技術が、例えば特許文献２に開示されている。
【特許文献１】特開２００４−３１０５６８号公報
【特許文献２】特開２００１−７６０２７号公報
【非特許文献１】Thorsten Grotker他著，「SystemCを用いたシステム設計（System Design with SystemC）」，（米国），Kluwer Academic Publishers，２００２年
【発明の開示】
【発明が解決しようとする課題】
【０００６】
バスは、アービトレーション、スレーブセレクション、アドレスデコードといった機能を有する。このため、複雑なバスや、大規模なバスを対象に含めて高精度なシミュレーションを行うと、精度がよい結果が得られる一方、シミュレーションが低速になるという問題があった。
【０００７】
ＯＳの起動時等、周辺ハードウェアの初期設定のシミュレーションを行うだけの場合には、一般に精度よりも速度が重要視される。ところが、例えば非特許文献１に開示された技術では、マスター−バス間と、バス−スレーブ間とで異なるインタフェースを用いているので、バスを省略することができない。このため、シミュレーションをそれほど高速化することができない。また、アービトレーションを省略したとしても、バスへのアクセスを考慮するので、オーバーヘッドが発生してしまう。
【０００８】
本発明は、マスターブロックとスレーブブロックとの間を接続するバスを有する半導体集積回路について、シミュレーションを高速に行うことを目的とする。
【課題を解決するための手段】
【０００９】
前記課題を解決するため、本発明が講じた手段は、マスターブロックと、スレーブブロックと、前記マスターブロックと前記スレーブブロックとの間を接続するバスとを有する半導体集積回路を対象とするシミュレーション方法であって、前記マスターブロックを、共通化ポートを有するマスターモデルにモデル化するステップと、前記スレーブブロックを、共通化インタフェースでアクセス可能なスレーブモデルにモデル化するステップと、前記バスを、前記マスターモデルと同一の共通化ポートを有し、前記共通化インタフェースでアクセス可能なバスモデルにモデル化するステップと、前記マスターモデルがその共通化ポートから前記共通化インタフェースを用いて前記バスモデルにアクセスし、前記バスモデルがその共通化ポートから前記共通化インタフェースを用いて前記スレーブモデルにアクセスするモデルについてシミュレーションを実行する高精度シミュレーションステップと、前記マスターモデルがその共通化ポートから前記共通化インタフェースを用いて前記バスモデルを介さずに前記スレーブモデルにアクセスするモデルについてシミュレーションを実行する抽象化シミュレーションステップとを備え、シミュレーションに必要とされる精度に応じて、前記高精度シミュレーションステップ又は前記抽象化シミュレーションステップを選択して実行するものである。
【００１０】
これによると、シミュレーションの精度が高くなくてもよい場合には、シミュレーションの高速化を図り、かつ、必要に応じて高精度のシミュレーションを行うことができる。したがって、必要な精度のシミュレーション結果を得ながら、シミュレーションを高速化することができる。
【発明の効果】
【００１１】
本発明によれば、必要な精度を保ちながら、シミュレーションの高速化を図ることができる。また、モデルのポートやインタフェースを共通化するので、異なるシミュレータ間でモデルの共有化を図ることができ、大規模なシステムＬＳＩのハードウェア／ソフトウェア協調設計が容易になる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態について、図面を参照しながら説明する。以下の実施形態においては、ＣＰＵ等のプロセッサ（図示せず）が半導体集積回路のモデル化や半導体集積回路についてのシミュレーションを行う。
【００１３】
図１は、本発明の実施形態に係るシミュレーション方法が対象とする半導体集積回路の例を示すブロック図である。図１の半導体集積回路１００は、マスターブロックとしてのＣＰＵ１１２と、バス１１４と、スレーブブロックとしてのハードウェア１１６とを備えている。ＣＰＵ１１２は、ソフトウェア１０２を実行する。
【００１４】
ＣＰＵ１１２は、ポート１２２を有しており、インタフェース１２４を利用してバス１１４にアクセスする。バス１１４は、ポート１２６を有しており、インタフェース１２８を利用してハードウェア１１６にアクセスする。
【００１５】
半導体集積回路２００は、ＣＰＵ１１２と、ハードウェア１１６とを備えている。ＣＰＵ１１２は、インタフェース１２８を利用してハードウェア１１６にアクセスする。このようにすると、バス１１４を介さずにＣＰＵ１１２をハードウェア１１６に接続した場合のシミュレーションを行うことができる。
【００１６】
シミュレーションに必要とされる精度が高い場合には、プロセッサは、具体化された半導体集積回路１００を対象にして高精度シミュレーションを行う。一方、シミュレーションの精度よりもシミュレーション速度を重視する場合には、プロセッサは、半導体集積回路１００を抽象化し、得られた半導体集積回路２００を対象にして抽象化シミュレーションを行う。
【００１７】
以下では、具体的な回路の記述例について説明する。図２は、共通化ポート及び共通化インタフェースの記述例を示す図である。図１の半導体集積回路２００のように接続するためには、図１の半導体集積回路１００において、ポート１２２が利用するインタフェース１２４と、ポート１２６が利用するインタフェース１２８とが同じでなければならない。そこで、共通化インタフェースcommon＿intfと共通化ポートcommon＿portとを用意する。
【００１８】
図２は、C++言語を用いた場合のこれらの例を示している。図２の共通化ポートcommon＿portは、よく知られたSystemC言語（例えば、前記非特許文献１参照）でも利用されている標準的なポートの定義である。ポート１２２，１２６としては、共通化ポートcommon＿portを利用し、インタフェース１２４，１２８としては、共通化インタフェースcommon＿intfを利用するようにする。
【００１９】
このように、マスターブロック−バス間で利用するインタフェースの全関数と、バス−スレーブブロック間で利用するインタフェースの全関数とを、共通化インタフェースcommon＿intfで定義する。このように定義することにより、バスを介さずに直接マスターブロックとスレーブブロックとを接続したモデルを得ることができる。
【００２０】
図３は、図２の共通化ポート及び共通化インタフェースを利用したマスターモデルの記述例を示す図である。プロセッサは、ＣＰＵ１１２を、例えば図３のようにマスターモデル（クラスmasterA）にモデル化する。クラスmasterAは、共通化ポートcommon＿portにより、共通化インタフェースcommon＿intfへアクセス可能となる。このポートの名称をportとしている。
【００２１】
図３では、このマスターモデルから、バスモデル又はスレーブモデルへのアクセスを行う関数read，write，request，isGrant等を呼び出すことにより、バスへのアクセスをモデル化している。例えば、関数readはバスへのリードアクセスを行い、関数writeはライトアクセスを行う。関数requestはバス利用許可を要求し、関数isGrantはバスが利用できるか否かを確かめる。
【００２２】
これらの関数は基本的なものであり、マスターモデルが、バーストに対応した関数、エラーに対応した関数、性能解析用の関数、デバッグ用の関数等を含むようにしてもよい。
【００２３】
図４は、図２の共通化ポート及び共通化インタフェースを利用したバスモデルの記述例を示す図である。プロセッサは、バス１１４を、例えば図４のようにバスモデル（クラスbus）にモデル化する。クラスbusは、マスターモデルからアクセスされる共通化インタフェースcommon＿intfを実装するために、共通化インタフェースcommon＿intfを継承している。また、クラスbusは、スレーブモデルへアクセスするためのポートportを、図３のクラスmasterAと同様に具備している。
【００２４】
クラスbusは、共通化インタフェースcommon＿intfで宣言される関数read，write，request，isGrantを実装している。これらの関数の具体的な内容については、ここでは省略している。スレーブモデルへのアクセスは、ポートを介して、クラスmasterAと同様に行う。
【００２５】
図５は、図２の共通化インタフェースを利用したスレーブモデルの記述例を示す図である。プロセッサは、ハードウェア１１６を、例えば図５のようにスレーブモデル（クラスslaveA）にモデル化する。クラスslaveAは、バスモデル又はマスターモデルからアクセスされる共通化インタフェースcommon＿intfを実装するために、共通化インタフェースcommon＿intfを継承している。
【００２６】
クラスslaveAは、共通化インタフェースcommon＿intfで宣言される関数read，write，request，isGrantを実装している。クラスslaveAは、スレーブモデルに必要な関数だけではなく、本来スレーブモデルには不要な関数である関数request，isGrantをも実装している。バスモデルの記述と共通化させるためである。このように冗長な関数を実装することにより、バスを抽象化したアクセスが可能となる。
【００２７】
図３〜図５の記述は、SystemC言語等の公知の技術を用いることによって実現することができる。
【００２８】
図６は、図２の共通化ポート及び共通化インタフェースを利用した場合のマスターモデルとスレーブモデルとの間の接続の記述例を示す図である。図６の関数mainは、図１の半導体回路１００のような通常接続をしたモデルを用いて高精度シミュレーションを行う場合のために、マスターモデル−バスモデル間の接続を表す記述（i＿masterA->port(i＿bus)）と、バスモデル−スレーブモデル間の接続を表す記述（i＿bus->port(i＿slaveA)）とを有している。また、関数mainは、図１の半導体回路２００のような抽象化接続をしたモデルを用いて高速な抽象化シミュレーションを行う場合のために、マスターモデルとスレーブモデルとの間のバスモデルを介さないダイレクトな接続を表す記述（i＿masterA->port(i＿slaveA)）をも有している。
【００２９】
プロセッサは、シミュレーションに必要とされる精度に応じて、高精度シミュレーション又は抽象化シミュレーションを選択して実行する。
【００３０】
以上のように、共通化ポート、及び共通化インタフェースを用いることにより、バスのアクセスを抽象化した抽象化シミュレーションを行うことができる。
【００３１】
なお、シミュレーション開始時に、高精度シミュレーション又は抽象化シミュレーションのいずれかを選択するようにしてもよいし、シミュレーション中に、条件に応じて高精度シミュレーション又は抽象化シミュレーションのいずれかを切り替えて行うようにしてもよい。
【００３２】
以上の例では、マスターモデル−バスモデル間で利用するインタフェースの方が、バスモデル−スレーブモデル間で利用するインタフェースよりも使用する関数が多く、複雑であった。以上の例と同様に、マスターモデル−バスモデル間で利用するインタフェースの全関数と、バスモデル−スレーブモデル間で利用するインタフェースの全関数とを、共通化インタフェースcommon＿intfで定義するようにすれば、バスモデル−スレーブモデル間で利用するインタフェースの方が、マスターモデル−バスモデル間で利用するインタフェースよりも使用する関数が多く、複雑であったり、マスターモデル−バスモデル間で利用するインタフェースと、バスモデル−スレーブモデル間で利用するインタフェースとが、それぞれ独自の関数を使用するようにしてもよい。
【００３３】
また、スレーブモデルで冗長な関数を実装する例について説明したが、マスターモデルで冗長な関数を実装するようにしてもよい。
【００３４】
図７は、共通化ポート及び共通化インタフェースの他の記述例を示す図である。図７では、バスモデル−スレーブモデル間では不要な関数request，isGrantを実装している。このように、インタフェースで冗長な関数を実装するようにしてもよい。
【００３５】
図８は、図７の共通化ポート及び共通化インタフェースを利用したスレーブモデルの記述例を示す図である。マスターモデルの記述、バスモデルの記述、マスターモデルとスレーブモデルとの間の接続の記述は、それぞれ図３，図４，図６と同様である。関数request，isGrantを図７の共通化インタフェースにおいて実装しているので、図８のスレーブモデルには、これらの関数の実装をしなくてもよくなる。
【００３６】
図７においても、マスターモデル−バスモデル間で利用するインタフェースの全関数と、バスモデル−スレーブモデル間で利用するインタフェースの全関数とを、共通化インタフェースcommon＿intfで実装している。このため、バスモデル−スレーブモデル間で利用するインタフェースの方が、マスターモデル−バスモデル間で利用するインタフェースよりも使用する関数が多く、複雑であってもよく、マスターモデル−バスモデル間で利用するインタフェースと、バスモデル−スレーブモデル間で利用するインタフェースとが、それぞれ独自の関数を使用するようにしてもよい。
【００３７】
図９は、本発明の実施形態に係るシミュレーション方法が対象とする、複数のマスターブロック及び複数のスレーブブロックを有する半導体集積回路の例を示すブロック図である。図９の半導体集積回路は、図１の半導体集積回路１００において、マスターブロックとしてのＣＰＵ１６２と、スレーブブロックとしてのハードウェア１６６とを更に備えたものである。ＣＰＵ１６２は、ソフトウェア１５２を実行する。
【００３８】
ＣＰＵ１６２は、ポート１７２を有しており、インタフェース１７４を利用してバス１１４にアクセスする。バス１１４は、ポート１７６を有しており、インタフェース１７８を利用してハードウェア１６６にアクセスする。
【００３９】
ポート１７２及びインタフェース１７４は、ポート１２２及びインタフェース１２４とそれぞれ共通化される場合がある。これは、当業者であれば、比較的簡単に実現することができる（例えば、非特許文献１におけるsimple_bus_unified_master_ifに関する技術を参照）。
【００４０】
図１０は、図９の半導体集積回路のシミュレーションを制御部を用いて行う場合の概念図である。図９のように、バスに複数のスレーブブロックが接続されている場合には、マスターブロックはスレーブブロックを選択する必要がある。そこで、シミュレーションを行う際に、プロセッサは、制御部２２を用いる。
【００４１】
プロセッサは、図３〜図５を参照して説明したように、ＣＰＵ１１２，１６２をマスターモデルに、バス１１４をバスモデルに、ハードウェア１１６，１６６をスレーブモデルにモデル化する。
【００４２】
プロセッサは、スレーブモデルへのアクセスのシミュレーションを次のように実行する。すなわち、マスターモデル（ＣＰＵ１１２）に、まず、制御部２２へのアクセス（抽象化アクセスＡＣ１）を行わせる。このアクセスは、マスターモデルが共通化インタフェースから呼び出すことで実施できる。制御部２２には、マスターモデルのアクセス先のアドレスに従って、複数のスレーブモデルからアクセス先のスレーブモデルを選択させ、選択されたスレーブモデルの機能を実現する関数を呼び出させる（抽象化アクセスＡＣ２）。このとき用いられるアドレスは、ワードアドレス、ハーフワードアドレス、又はバイトアドレスのいずれかである。
【００４３】
制御部２２には、アドレスと複数のスレーブモデルとの間の対応関係を示す情報や、各スレーブモデルの機能を実現する関数とスレーブモデルとの間の対応関係を示す情報を格納しておく。この対応関係を示す情報は、例えば、複数のスレーブモデル及び複数の関数のうちの少なくとも１つと、それぞれに対応するアドレスの範囲とを示す情報であってもよい。この場合、制御部２２が管理する情報を削減することが可能となる。また、この対応関係を示す情報は、複数のスレーブモデル及び複数の関数のうちの少なくとも１つと、それぞれに対応する、所定のデータのビットフィールドとを示す情報であってもよい。
【００４４】
高精度シミュレーションと抽象化シミュレーションとの切り替えを行う場合には、切り替えの前後でつじつまがあうようにする必要がある。ハードウェア１１６がＤＭＡ機能を備えている場合を想定する。ソフトウェア１０２を実行するＣＰＵ１１２が、ＤＭＡ転送を実施するための設定を抽象化アクセスＡＣ１によって行うと、ハードウェア１１６では、ＤＭＡ転送機能を実現する関数が、制御部２２から抽象化アクセスＡＣ２によって呼び出される。
【００４５】
転送元アドレスから転送先アドレスへ１ワード転送する場合、このことがアクセスＡＳによって制御部２２へ伝わり、転送元アドレスと転送先アドレスとの間のデータ転送が処理される。このとき、遅延値が制御部２２に渡され、遅延時間後にその処理が実施される。
【００４６】
この遅延値は、静的又は動的に与えることができる。静的な与え方としては、シミュレーションの実行前に、例えば、関数毎に遅延値をユーザが設定してもよいし、転送元及び転送先のメモリの遅延情報をそれぞれのモデルから得て、これに基づいて遅延値を設定してもよい。また、動的な与え方としては、例えば、高精度シミュレーションをその時点から実施し、転送が完了するまでの時間を求め、得られた値を遅延値として用いるようにする。
【００４７】
静的に与える場合には、遅延値を与えることが高速に可能となる。動的に与える場合には、遅延値を得るために時間がかかるが、高精度なシミュレーションが実施可能となる。これらの与え方は、目的に応じて使い分けることができる。また、シミュレーション中に、遅延値の与え方を動的にするか静的にするかを決定するようにしてもよい。
【００４８】
次に、バスを介した高精度シミュレーションと、バスを介さない抽象化シミュレーションとを切り替えて、効率よくシミュレーションを実行する方法について説明する。
【００４９】
図１１は、抽象化シミュレーション後、同じ区間の高精度シミュレーションを再度実行する場合について示すタイミングチャートである。図１１では、シミュレーション時刻Ｔ０から高精度シミュレーションを実行して、シミュレーション結果ＲＨ１，ＲＨ２を得た後、時刻Ｔ１から精度を切り替えて抽象化シミュレーションを実行して、シミュレーション結果ＲＬ３，ＲＬ４を得ている。ところが、時刻Ｔ２で例えば不具合が発見され、時刻Ｔ１から時刻Ｔ２までの高精度なシミュレーション結果が必要になる場合がある。
【００５０】
このような場合、通常は、時刻Ｔ０から高精度シミュレーションを再度実行する必要がある。そこで、時刻Ｔ１におけるシミュレーションの状態を、時刻Ｔ２におけるシミュレーションの状態に基づいて、シミュレーション結果ＲＬ３，ＲＬ４を利用して復元し、その後、時刻Ｔ１から高精度シミュレーションを実行する。すると、時刻Ｔ１から時刻Ｔ２までの高精度なシミュレーション結果ＲＨ３，ＲＨ４を得ることができる。時刻Ｔ０と時刻Ｔ１との間のシミュレーション時間が長いほどこのような方法の効果が大きい。
【００５１】
図１２は、システムのアドレス空間と、必要とされるシミュレーション精度との対応表である。図１２の対応表のように、アクセス先のアドレスと、必要とされるシミュレーションの精度との対応関係を予め設定しておく。
【００５２】
例えば、ＲＴＬ（register transfer level）モデル等は高精度シミュレーションが必要であるので、ＲＴＬモデルに割り当てられたアドレス空間を、高精度シミュレーションの対象とするアドレス空間として指定する。動作モデル等には高精度シミュレーションが必要ではないので、動作モデルが割り当てられたアドレス空間を、抽象化シミュレーションの対象とするアドレス空間として指定する。また、特に指定されていないアドレス空間については、シミュレーション時に指定する精度でシミュレーションを実行する。
【００５３】
図１３は、図１２の対応表を利用してシミュレーション精度を切り替える処理についてのフローチャートである。まず、シミュレーションを実行し（ステップＳ１２）、マスターモデルからバスアクセスが発生したか否かを判定する（ステップＳ１４）。発生した場合にはステップＳ１６に進み、発生しなかった場合にはステップＳ２０に進む。
【００５４】
ステップＳ１６では、図１２の対応表を参照し、ステップＳ１８では、該当するアドレス空間に対して図１２で指定されているシミュレーション精度でシミュレーションを実行する。ステップＳ２０では、シミュレーションが完了しているか否かを判定する。完了している場合には処理を終了し、完了していない場合にはステップＳ１２に戻る。
【００５５】
図１４は、高精度のシミュレーション結果を必要とするハードウェアを有する半導体集積回路の例を示すブロック図である。図１４の半導体集積回路３００，４００は、それぞれ、図１の半導体集積回路１００，２００において、ハードウェア１１６に代えてハードウェア１４６とアクセス変換部１４８とを備えるようにしたものである。その他の構成要素については、図１を参照して説明したものと同様である。
【００５６】
ハードウェア１４６は、例えばＲＴＬ回路であって、ＲＴＬモデルにモデル化されており、一般に高精度のシミュレーション結果を必要とする。アクセス変換部１４８は、ＲＴＬ回路へアクセスするためのアクセス関数を実装している。
【００５７】
半導体集積回路３００を対象として、ハードウェア１４６のモデルへバスを介さずにアクセスする抽象化シミュレーションが行われる。シミュレーション中にハードウェア１４６のモデルへのアクセスが検出されると、半導体集積回路４００を対象とした高精度シミュレーションへ切り替える。これにより、図１２のような対応表がなくても、動的にＲＴＬモデルを検出して高精度シミュレーションに切り替えることが可能になる。
【００５８】
図１５は、ＣＰＵにより実行されるソフトウェアから、精度を必要としない処理を検出して、抽象化シミュレーションを行うようにするための前処理についてのフローチャートである。図１６は、図１５の処理の対象とされるソフトウェアのソースコードの例を示す図である。図１、図１５及び図１６を参照して説明する。図１５の処理は、ＣＰＵ１１２がソフトウェア１０２を実行する前に行われる。
【００５９】
まず、ステップＳ３２では、図１６に示されたＣＰＵ１１２用のソフトウェア１０２のソースコードの中から基本ブロックを選択する。ステップＳ３４では、その基本ブロックがループ処理であるか否かを判断する。ループ処理である場合にはステップＳ３６に進み、ループ処理ではない場合にはステップＳ４０に進む。
【００６０】
ステップＳ３６では、選択された基本ブロックが抽象化シミュレーション可能であるか否かを判断する。例えば、ポーリング処理を行う場合には、シミュレーションには精度を必要とせず、抽象化シミュレーション可能であるので、ステップＳ３６では、その基本ブロックでポーリング処理を行うか否かを判断する。すなわち、そのループを抜けるための条件として、特定アドレスのメモリの値を参照する処理以外に実質的な処理があるか否かを判断する。ここで、実質的な処理とは、直接シミュレーション結果に影響を与えない処理（例えばデバッグや表示用の処理）以外の処理である。
【００６１】
実質的な処理があると判断した場合（ポーリング処理を行わず、抽象化シミュレーション可能ではないと判断した場合）にはステップＳ４０に進み、実質的な処理がないと判断した場合（ポーリング処理を行い、抽象化シミュレーション可能と判断した場合）にはステップＳ３８に進む。図１６の場合には、ステップＳ３６において、基本ブロックＢが抽象化シミュレーション可能であると判断される。
【００６２】
ステップＳ３８では、抽象化シミュレーションを実行するための指定をソフトウェア１０２のコードに挿入する。図１６においては、以後、抽象化シミュレーションを実行するように指定する関数を挿入している。ステップＳ４０では、ソースコードの最終行まで処理を終えたか否かを判断する。最終行まで処理を終えた場合には処理を終了し、終えていない場合にはステップＳ３２に戻る。
【００６３】
以上のようなソースコードの解析をシミュレーションの実行前に行っておき、ソフトウェアのどの部分を抽象化シミュレーションすべきであるかについての情報を取得しておく。シミュレーションの実行時には、例えばプログラムカウンタの値を参照して、基本ブロックＢについては抽象化シミュレーションを行う。
【００６４】
図１７は、ＣＰＵによるソフトウェアの実行中に、精度を必要としない処理を検出して、抽象化シミュレーションを行うようにするための処理についてのフローチャートである。ステップＳ５２では、ＣＰＵ１１２にソフトウェア１０２の１命令を実行させる。ステップＳ５４では、実行された命令が、例えばＮＯＰ（no operation）命令のように精度を必要としない処理であるか否かを判断する。実行された命令がＮＯＰ命令である場合にはステップＳ５６に進み、そうでない場合にはステップＳ５８に進む。ステップＳ５６では、ＮＯＰ命令について抽象化シミュレーションを実行する。ステップＳ５８では、シミュレーションが完了したか否かを判断する。完了した場合には処理を終了し、完了していない場合には、ステップＳ５２に戻る。
【００６５】
図１７の処理によると、高精度シミュレーションを行っている際に、動的に抽象化シミュレーションに切り替えることができる。
【００６６】
以上のように、本発明によると、シミュレーションの精度が高くなくてもよい場合には、シミュレーションの高速化を図り、かつ、必要に応じて高精度のシミュレーションを行うことができる。したがって、必要な精度のシミュレーション結果を得ながら、シミュレーションを高速化することができる。
【００６７】
以上の実施形態では、マスターブロックとしてＣＰＵを用いる場合について説明したが、ＤＭＡＣ、ハードウェアコントローラ等のハードウェアエンジンをマスターブロックとして用いてもよい。
【００６８】
また、制御部２２を備えるものとして説明したが、制御部２２を備えず、ソフトウェアや、特定のハードウェアモデルによって同様の機能を実現するようにしてもよい。
【産業上の利用可能性】
【００６９】
以上説明したように、本発明は、半導体集積回路のシミュレーション等について有用である。
【図面の簡単な説明】
【００７０】
【図１】本発明の実施形態に係るシミュレーション方法が対象とする半導体集積回路の例を示すブロック図である。
【図２】共通化ポート及び共通化インタフェースの記述例を示す図である。
【図３】図２の共通化ポート及び共通化インタフェースを利用したマスターブロックの記述例を示す図である。
【図４】図２の共通化ポート及び共通化インタフェースを利用したバスの記述例を示す図である。
【図５】図２の共通化ポート及び共通化インタフェースを利用したスレーブブロックの記述例を示す図である。
【図６】図２の共通化ポート及び共通化インタフェースを利用した場合のマスターブロックとスレーブブロックとの間の接続の記述例を示す図である。
【図７】共通化ポート及び共通化インタフェースの他の記述例を示す図である。
【図８】図７の共通化ポート及び共通化インタフェースを利用したスレーブブロックの記述例を示す図である。
【図９】本発明の実施形態に係るシミュレーション方法が対象とする、複数のマスターブロック及び複数のスレーブブロックを有する半導体集積回路の例を示すブロック図である。
【図１０】図９の半導体集積回路のシミュレーションを制御部を用いて行う場合の概念図である。
【図１１】抽象化シミュレーション後、同じ区間の高精度シミュレーションを再度実行する場合について示すタイミングチャートである。
【図１２】システムのアドレス空間と、必要とされるシミュレーション精度との対応表である。
【図１３】図１２の対応表を利用してシミュレーション精度を切り替える処理についてのフローチャートである。
【図１４】高精度のシミュレーション結果を必要とするハードウェアを有する半導体集積回路の例を示すブロック図である。
【図１５】ＣＰＵにより実行されるソフトウェアから、精度を必要としない処理を検出して、抽象化シミュレーションを行うようにするための前処理についてのフローチャートである。
【図１６】図１５の処理の対象とされるソフトウェアのソースコードの例を示す図である。
【図１７】ＣＰＵによるソフトウェアの実行中に、精度を必要としない処理を検出して、抽象化シミュレーションを行うようにするための処理についてのフローチャートである。
【符号の説明】
【００７１】
２２  制御部
１１２，１６２  ＣＰＵ（マスターブロック）
１１４  バス
１１６，１４６，１６６  ハードウェア（スレーブブロック）
１４８  アクセス変換部
１２２，１２６，１７２，１７６  ポート
【図１】
2007207176.tif 000003
【図２】
2007207176.tif 000004
【図３】
2007207176.tif 000005
【図４】
2007207176.tif 000006
【図５】
2007207176.tif 000007
【図６】
2007207176.tif 000008
【図７】
2007207176.tif 000009
【図８】
2007207176.tif 000010
【図９】
2007207176.tif 000011
【図１０】
2007207176.tif 000012
【図１１】
2007207176.tif 000013
【図１２】
2007207176.tif 000014
【図１３】
2007207176.tif 000015
【図１４】
2007207176.tif 000016
【図１５】
2007207176.tif 000017
【図１６】
2007207176.tif 000018
【図１７】
2007207176.tif 000019