(57)【要約】【課題】複数コア構成の集積回路のシミュレーションプログラム、方法、及び装置に関し、複数コア構成のＬＳＩのシミュレーションにかかる処理負荷及び速度を低減する。【解決手段】ＴＧ６０５は、コアにおける同期転送にかかる処理を割込み及び割込み待ち処理の組として実行する。割込み制御部９０３は、全てのコアから割込みが通知されるタイミングをもって同期転送にかかるサイクルをシミュレートし、そのタイミングでコアで実行中の割込み待ち処理に割込み応答を通知することにより、複数のコアを同期させる。また、コア単体のシミュレータ６０２は、コアの夫々に対して、コア単体のシミュレーションを実行する。その動作結果から、コアに関するリソースアクセスの動作内容が抽出され動作ファイル６０４が生成される。同期転送変換部９０１は、上記動作ファイル６０４において、コアにおける同期転送にかかる処理９０５を、予め割込み及び割込み待ち処理９０６に変換する。【選択図】図９
2019016168.tif 000002
【特許請求の範囲】
【請求項１】
複数のコア間の同期転送のシミュレーションを実行するシミュレーションプログラムであって、
前記コアにおける前記同期転送にかかる処理を割込み及び割込み待ち処理の組として実行するステップと、
全ての前記コアから前記割込みが通知されるタイミングをもって前記同期転送にかかるサイクルをシミュレートし、前記タイミングで前記コアで実行中の割込み待ち処理に割込み応答を通知することにより、前記複数のコアを同期させるステップと、
をコンピュータに実行させるためのシミュレーションプログラム。
【請求項２】
前記コアにおける前記同期転送にかかる処理を、予め前記割込み及び前記割込み待ち処理に変換するステップを、前記コンピュータに更に実行させるための請求項１に記載のシミュレーションプログラム。
【請求項３】
前記コアのシミュレーションにおいて前記割込み待ち処理が実行されているときに、前記割込み応答を通知された後に、予め設定された前記同期転送にかかるサイクル数だけ待った後に、次の処理命令の実行に移行する、ことを特徴とする請求項１に記載のシミュレーションプログラム。
【請求項４】
複数のコア間の同期転送のシミュレーションを実行するシミュレーション方法であって、
前記コアにおける前記同期転送にかかる処理を割込み及び割込み待ち処理の組として実行し、
全ての前記コアから前記割込みが通知されるタイミングをもって前記同期転送にかかるサイクルをシミュレートし、前記タイミングで前記コアで実行中の割込み待ち処理に割込み応答を通知することにより、前記複数のコアを同期させる、
ことを特徴とするシミュレーション方法。
【請求項５】
複数のコア間の同期転送のシミュレーションを実行するシミュレーション装置であって、
前記コアにおける前記同期転送にかかる処理を割込み及び割込み待ち処理の組として実行するモデルシミュレート部と、
全ての前記コアから前記割込みが通知されるタイミングをもって前記同期転送にかかるサイクルをシミュレートし、前記タイミングで前記コアで実行中の割込み待ち処理に割込み応答を通知することにより、前記複数のコアを同期させる割込み制御部と、
を備えることを特徴とするシミュレーション装置。
【請求項６】
前記コアの夫々に対して、コア単体のシミュレーションを実行するコアシミュレータ部と、
前記コアシミュレータ部による前記コアに関する動作結果から、前記コアに関するリソースアクセスの動作内容を抽出する変換部と、
前記変換部が抽出されたリソースアクセスの動作内容において、前記コアにおける前記同期転送にかかる処理を、予め前記割込み及び前記割込み待ち処理に変換する同期転送変換部と、
を更に備えることを特徴とする請求項５に記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
複数コア構成の集積回路のシミュレーションプログラム、方法、及び装置に関する。
【背景技術】
【０００２】
プロセス技術の進歩によりＬＳＩ（大規模集積回路：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）の集積度が増大し、システムＬＳＩを１チップ上に搭載することが可能になってきている。例えば、複数のＣＰＵ（中央演算処理装置）のコアを１チップ上に搭載するマルチコア（複数コア）システムが多く開発されており、１チップ上に実装されるコアの数が増大してきている。近年、性能要求を満たすために、より複雑なアーキテクチャを実現する必要があり、アーキテクチャに起因する問題が発生しやすくなっている。ここで、アーキテクチャとはＬＳＩのハードウェア構成をいい、例えばコアおよびメモリの数やサイズ、接続トポロジーを含む。
【０００３】
かかるＬＳＩの開発において、従来、ハードウェア記述によるモデルではなく、抽象化した性能モデルによる評価で決定したアーキテクチャに基づくハードウェア設計により、設計工数を削減できる技術が知られている。このとき、コア間のリソース競合のシミュレート時に、各コアのシミュレーションに基づく動作結果から、バスアクセスに関する情報が抽出され、これがコアによるリソースアクセスの動作内容として利用される（以上、例えば特許文献１、２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−２１５７６８号公報
【特許文献２】特開２００４−０２１９０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、複数のコア間でデータを同期転送させる動作をシミュレーションする場合に、従来技術では、コア毎に同期転送において発生する実際のデータ転送処理を記述し実行する必要があった。このため、コア間で大量のデータ転送が発生し、かつコアの並列度が増えた場合に、１サイクルの実行のために必要なシミュレーション処理の量が増加し、シミュレーション時間が長くなってしまうという課題があった。
【０００６】
そこで、本発明の１つの側面では、複数コア構成のシミュレーションにかかる処理負荷及び速度を低減することを目的とする。
【課題を解決するための手段】
【０００７】
態様の一例では、複数のコア間の同期転送のシミュレーションを実行するシミュレーションプログラムであって、コアにおける同期転送にかかる処理を割込み及び割込み待ち処理の組として実行するステップと、全てのコアから割込みが通知されるタイミングをもって同期転送にかかるサイクルをシミュレートし、そのタイミングにおいてコアで実行中の割込み待ち処理に割込み応答を通知することにより、複数のコアを同期させるステップと、をコンピュータに実行させる。
【発明の効果】
【０００８】
複数コア構成のシミュレーションにかかる処理負荷及び速度を低減することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】マルチコアＬＳＩシステムの開発工程の説明図である。
【図２】アーキテクチャの性能見積り例を示す図である。
【図３】ＲＴＬによるマルチコアＬＳＩシステムのモデル記述の説明図である。
【図４】性能モデルによるマルチコアＬＳＩシステムのモデル記述の説明図である。
【図５】リソースの競合の説明図である。
【図６】シミュレーションの負荷を軽くしつつリソースの競合を再現できるモデル開発手法の説明図である。
【図７】複数コア間の同期転送処理の説明図（その１）である。
【図８】複数コア間の同期転送処理の説明図（その２）である。
【図９】実施形態の説明図である。
【図１０】実施形態のシミュレーション装置の構成例を示すブロック図である。
【図１１】同期転送変換部の処理例を示すフローチャートである。
【図１２】割込み制御部の処理例を示すフローチャートである。
【図１３】各実施形態に対応するシミュレーション装置（コンピュータ）のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図１は、本発明の実施形態を適用することができるマルチコアＬＳＩシステムの開発工程の説明図である。
【００１１】
まず、要求仕様の決定等の初期検討が行われた後（ステップＳ１０１）、ソフト開発が行われる（ステップＳ１０２）。ソフト開発では、ＬＳＩに搭載される機能に対応するアプリケーションソフトウェアが開発される。例えば、無線ＬＳＩに対しては、４Ｇ通信機能といった通信ソフトウェアが開発される。
【００１２】
その後の開発工程としては、モデル開発無しのケース１と、モデル開発ありのケース２が考えられる。
【００１３】
開発工程としてモデル開発無しのケース１が採用される場合、ステップＳ１０２でのソフトウェア開発によって開発されたソフトウェアの機能を実現できるハードウェアが、直接開発される（ステップＳ１１０）。この場合、経験に基づいてソフトウェアの機能を実現できるハードウェアのトポロジーが決定されて開発が行われる。その結果、そのハードウェアによって予定していた性能が出なければ、トポロジーの変更が必要となる。アーキテクチャが複雑になればなるほど、ハードウェア開発後に性能が未達となり、開発の出戻りが発生する（ステップＳ１１１）。
【００１４】
一方、開発工程としてモデル開発ありのケース２が採用される場合、ステップＳ１０２でのソフトウェア開発によってある程度アプリケーションが決まった状態で、ハードウェアを開発する前に、アーキテクチャの性能を見積もるためのモデル開発が行われる（ステップＳ１２０）。図２は、モデル開発におけるアーキテクチャの性能の見積り例を示す図である。まず、図１のステップＳ１０２のソフトウェア開発により、実施したいアプリケーション２０１が決定される。このアプリケーション２０１では、実行の開始（ｓｔａｒｔ）から終了（ｅｎｄ）までの間に、条件分岐に応じて、ｅｘｅ１、ｅｘｅ２、ｅｘｅ３、ｅｘｅ４、ｅｘｅ５として例示されるような様々な処理が実行される。次に、このようなアプリケーション２０１の構造に対応して、図２の（ａ）、（ｂ）、又は（ｃ）に示されるように、トポロジーやメモリ構成を変化させた異なるアーキテクチャ案のＬＳＩモデル２０２、２０３、２０４などが作成され、実行される。例えば、図２（ａ）のアーキテクチャ案１のＬＳＩモデル２０２では、それぞれが単独のプロセッサである＃０から＃３の各コアと、＃０から＃３のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）が、バスを介して接続される（直列接続構成）。また、図２（ｂ）のアーキテクチャ案２のＬＳＩモデル２０３では、＃０及び＃１のコアと＃０及び＃１のＳＲＡＭとがバスで接続されたグループと、＃２及び＃３のコアと＃２及び＃３のＳＲＡＭとがバスで接続されたグループが構成され、それらのグループが更にバスで接続される（並列接続構成）。更に、図２（ｃ）のアーキテクチャ案３のＬＳＩモデル２０４では、図２（ａ）のアーキテクチャ案１のＬＳＩモデル２０２から＃２及び＃３のＳＲＡＭが削減され、＃０及び＃１のＳＲＡＭの各サイズが拡大される。このようにしていくつか開発されたＬＳＩモデルの中から、性能の高い（処理時間の短い）アーキテクチャのＬＳＩモデルが探索された後に、そのアーキテクチャに基づいてハードウェアが設計される（図１のステップＳ１２１）。
【００１５】
モデル開発において採用されるモデルの一例として、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ:レジスタ転送レベル）モデルが知られている。ＲＴＬでは、論理回路において、状態を持つラッチ回路など順序回路に相当する最小の部分が「レジスタ」として抽象化される。その上で、論理回路の動作が、レジスタからレジスタへの転送と、その転送中に組合せ論理回路を通すことで行われる論理演算の組み合わせとして記述される。図３は、ＲＴＬによるマルチコアＬＳＩシステムのモデル記述の説明図である。ＲＴＬによりマルチコアＬＳＩシステムがモデル化される場合、図３の３０１として示されるように、各コアの内部の論理回路を意識した記述がなされ、その論理回路によるロジックのスイッチングがシミュレートされる。
【００１６】
しかし、ＲＴＬはモデルの詳細化度合いが高いために、ＬＳＩシステムの複雑度が上がり、特にマルチコアで構成されるような場合には、ＲＴＬによる記述の難易度が上がり、作業工数の増加、シミュレーション時間の増大を招く。
【００１７】
そこで、モデル開発において採用される他のモデルの例として、性能モデルが知られている。図４は、性能モデルによるマルチコアＬＳＩシステムのモデル記述の説明図である。性能モデルでは例えば、Ｃ＋＋プログラミング言語のクラスライブラリとして提供されるＳｙｓｔｅｍＣと呼ばれるハードウェア記述言語を用いて、図４（ｂ）の４０１として示されるようなプログラミング言語形式で、図４（ａ）のハードウェア記述が代替される。このクラスライブラリでは、ハードウェア記述のための機能、並列実行の概念や時間概念を扱う各種関数が定義されている。プログラムはＣ＋＋コンパイラでコンパイルでき、それにより生成されたオブジェクトは、ハードウェアのシミュレータとして動作する。このような性能モデルは、ハードウェアのロジックを高い抽象度で記述することが可能である。そして、性能モデルを用いることにより、複雑な構成のＬＳＩシステムの開発が可能となる。
【００１８】
次に、複数コアで構成されるマルチコアＬＳＩシステムの開発工程について説明する。通常、コア単体のシミュレータは、コアに付随して存在する。そのためコア単体での性能見積りは、上述したＳｙｓｔｅｍＣ等の性能モデルによって可能である。ここで、マルチコアＬＳＩシステムでは、複数のコアによるリソースの競合が発生し得る。図５は、リソースの競合の説明図である。図５において、例えばコア５０１（＃０）とコア５０１（＃２）がバス５０３を介して同じＳＲＡＭ５０２（＃１）にアクセスするような場合に、リソースの競合が発生し得る。しかし、このようなリソースの競合は、上述のようなコア単体での性能見積りでは、シミュレートすることはできない。
【００１９】
図６は、シミュレーションの負荷を軽くしつつリソースの競合を再現できるモデル開発手法の説明図である。図６では、図５に示した＃０から＃３の４つのコア５０１と、＃０から＃３の４つのＳＲＡＭ５０２を含むマルチコアＬＳＩシステムの開発を例として説明する。以下の説明において、図５の各部を図５中の参照番号によって随時参照する。
【００２０】
まず、図１のステップＳ１０２によって開発されたコア５０１（＃０）のためのアプリケーション６０１（＃０）が、例えばコア５０１（＃０）をシミュレートするコア単体のシミュレータ６０２（＃０）で実行される。この結果、動作結果６０３（＃０）として、どの命令がどの時刻で実行されたかを示すログ情報が取得される。
【００２１】
次に、動作結果６０３（＃０）が、コア５０１（＃０）の中で処理される情報とコア５０１（＃０）の外にでる情報に分けられて、バス５０３のアクセスを伴う命令のログ情報を含む動作ファイル６０４（＃０）として抽出される。
【００２２】
図６の例の場合、Ａｄｄ（加算）、Ｓｕｂ（減算）といった命令は、コア５０１（＃０）の内部で閉じており外部へのアクセスがない。そのためＡｄｄ、Ｓｕｂは、それらを合わせて２命令分の待ち情報（外部アクセス無し）に置き換えられる。なお、命令毎に１命令ずつ分の待ち情報に置き換えられてもよいが、例えば１万行に達するような命令群の場合、複数の上記命令がまとめられて複数命令分の待ち情報に置き換えられることにより、情報数を１００分の１程度にすることができる。
【００２３】
また、図６の例において、Ｌｏａｄ（ロード）命令は、コア５０１（＃０）の外部の例えばＳＲＡＭ５０２（＃０）から読み取ってくる命令であるため、読み１回として動作ファイル６０４（＃０）に記録される。このとき、そのロード命令のプログラムカウンタアドレス（例えば「０ｘ０１００」）と、ロードアドレス（例えば「０ｘ８１００」）が、動作結果６０３（＃０）からコピーされる。Ｓｔｏｒｅ（ストア）命令も同様に、コア５０１（＃０）の外部の例えばＳＲＡＭ５０２（＃０）に書き込む命令であるため、書き１回として動作ファイル６０４（＃０）に記録される。このとき、そのストア命令のプログラムカウンタアドレス（例えば「０ｘ０１１０」）と、ロードアドレス（例えば「０ｘ８３００」）が、動作結果６０３（＃０）からコピーされる。
【００２４】
この場合の動作ファイル６０４（＃０）へのログ情報の記録方法としては、以下の２つの方法が考えられる。第１の方法は、ログ情報にはプログラムカウンタのアドレス（例えば「０ｘ０１００」）のみが記録される。そして、例えばＳＲＡＭ５０２（＃０）上の各プログラムアドレスから順次プログラムを取ってくると、そこには何をすればよいかが記述されていて、その記述の通りにバスアクセスが行われるものである。第２の方法は、ログ情報には命令に対応する動作（例えば「読み」又は「書き」）と、プログラムカウンタのアドレス（例えば「０ｘ０１００」）と、その命令がアクセスするデータのアドレス（ロードストアアドレス）（例えば「０ｘ８１００」）が記録されている。そして、その命令の実行シミュレート時には、その命令によるリード／ライトアクセスと、プログラムカウンタへのリードアクセスとが両方実行されるものである。以下の説明では、上記ｄ第２の方法を採用する。
【００２５】
続いて、図６において、＃０から＃３のコア５０１（図５参照）に対応させて、＃０から＃３のＴＧ（Ｔｒａｆｆｉｃ  Ｇｅｎｅｒａｔｏｒ：トラフィックジェネレータ）６０５と呼ばれるシミュレータが用意される。そして、例えばＴＧ６０５（＃０）は、前述のように生成された動作ファイル６０４（＃０）を読み込むことにより、図６のＳ１からＳ６として示される一連の処理を実行する。即ち、ＴＧ６０５（＃０）は、動作ファイル６０４（＃０）先頭から順に命令の動作を取得し（ステップＳ１）、その動作が「読み」又は「書き」であるか否かを判定する（ステップＳ２）。ＴＧ６０５（＃０）は、その動作が「読み」又は「書き」であれば、バス５０３を介して例えばＳＲＡＭ５０２（＃０から＃３の何れか）に対するアクセスを発生させ（ステップＳ３）、アクセス結果を取得する（ステップＳ４）。ＴＧ６０５（＃０）は、その動作が「読み」でも「書き」でもなければ、指定されている命令分のサイクルだけ待ち状態となる（ステップＳ５）。ＴＧ６０５（＃０）は、ステップＳ４又はＳ５の処理の後、ステップＳ１に戻って次の命令の動作を処理する。
【００２６】
＃１から＃３の各コア５０１（図５参照）に対しても、上記と同様のコア単体のシミュレータ６０２の処理に基づく、動作結果６０３の取得、及び動作ファイル６０４への変換の処理が実行される。これにより得られた＃１から＃３の動作ファイル６０４（図６では例として＃０と＃３のみ記載してある）は、それぞれ＃１から＃３のＴＧ６０５によってＳ１からＳ５で示されるシミュレーションの処理が実行される。
【００２７】
ＴＧ６０５は通常、ＳｙｓｔｅｍＣのような、時間概念があり、抽象度の高いモデルで記述される。また、＃０から＃３の各ＴＧ６０５におけるバス５０３に対するアクセス動作は、やはりＳｙｓｔｅｍＣで記述されている。そして、図６の＃０から＃３の各ＳＲＡＭ５０２に同時にアクセスが発生してリソースが競合した場合、どのような挙動をするかは、ＳｙｓｔｅｍＣで予め記述されているものとする。ＴＧ６０５による性能モデルの詳細については、例えば特許文献１又は２に記載の技術と同様とする。
【００２８】
以上のようにして、コア５０１をＴＧ６０５として抽象化して動作させることで、性能モデルの負荷を軽くしつつ、精度を下げることなく、所望の動作を実行させることができる。特に、ＴＧ６０５によって、ある時刻においてリソースの競合が発生した場合の挙動を表現できる。
【００２９】
ここで、複数のコア５０１間での同期転送処理のシミュレーションについて説明する。図７及び図８は、複数コア間の同期転送処理の説明図である。例えば図７に示されるプログラムイメージ７０２で、４００回に及ぶループ内部で、＃０から＃３の複数のコア５０１間で、同様の関数処理（図７中「ｆｕｎｃ」に続く部分）が実行される。そして、その処理結果を同期させて、コア５０１間に張られているローテーション用のデータ信号線７０１を介して、データのローテーションを実行させたいとする。ローンションは、コア５０１（＃０）の出力をコア５０１（＃３）に入力し、コア５０１（＃３）の出力をコア５０１（＃２）に入力し、コア５０１（＃２）の出力をコア５０１（＃１）に入力し、コア５０１（＃１）の出力をコア５０１（＃０）に入力する処理と定義する。これを、４の倍数のループはコア５０１（＃０）、４の倍数＋１のループはコア５０１（＃１）、４の倍数＋２のループはコア５０１（＃２）、４の倍数＋３のループはコア５０１（＃３）、というように並列に割り当てたいとする。即ち、動作シーケンスは同じだが入力データが異なる処理を複数のコア５０１に並列に実行させ、なおかつ途中でデータの同期を取りたいケースである。
【００３０】
この場合に、各コア５０１での関数処理（ｆｕｎｃ）の実行タイミングは、図８の期間Ｔ１内でそれぞれ異なるタイミングとなるが、＃０から＃３の全てのコア５０１での関数処理（ｆｕｎｃ）が完了後に、期間Ｔ２で一斉に同期して上記ローテーション処理が実行され、期間Ｔ２の終了後の期間Ｔ３で、各コア５０１で同期転送後の処理が実行されるように設計したいとする。
【００３１】
この場合、図６で説明した性能モデルでは、各コア５０１間のデータ線及びそのデータ線を通過する転送がモデルで記述される。しかし、コア５０１の数が１００をこえるようなマルチコアＬＳＩシステムで、処理ループ数も１００００回を超えるような場合、このローテーション用のシミュレーションに多大の時間を要してしまう。 
【００３２】
図９は、上述の課題を解決するための、実施形態の説明図である。本実施形態では、図６の場合と同様に、図１のステップＳ１０２で開発された各コア５０１（図５参照）のアプリケーション６０１が、コア５０１をシミュレートするコア単体のシミュレータ６０２で実行される。この結果、命令実行のログ情報を記録した動作結果６０３が取得される。更に、動作結果６０３から、バス５０３からＳＲＡＭ５０２へのアクセスを伴う命令のログ情報（リソースアクセスの動作内容）を含む動作ファイル６０４が抽出される。
【００３３】
次に、同期転送変換部９０１が、コア５０１における同期転送にかかる処理(ローテーション処理を行う命令)９０５を、割込み送信処理及び割込み待ち処理の組９０６に変換し、変換後動作ファイル９０２を生成する。
【００３４】
一方、シミュレーションにおける性能モデルとしては、図７で存在したローテーション用のデータ信号線７０１を無くし、割込み制御部９０３が配置される。そして、各コア５０１から割込み制御部９０３に割込み送信用の信号線が配線され、割込み制御部９０３から各コア５０１に割込み受信（応答）用の信号線が配線される。
【００３５】
更に、上記性能モデルにおいて、図６で説明したＴＧ６０５の動作アルゴリズムにおいて、図６のＳ１からＳ５に加えて、図９のＳ１０からＳ１３の一連の処理が追加される。
【００３６】
各コア５０１に対応させられて動作するＴＧ６０５は、変換後動作ファイル９０２の先頭から順に、１行命令の動作を取得する（ステップＳ１）。
【００３７】
次に、ＴＧ６０５は、ステップＳ１で取得した命令の動作が割込み送信の動作であるか否かを判定する（ステップＳ１０）。
【００３８】
ステップＳ１０の判定がＮＯならば、図６の場合と同様の捨てＳ２からＳ５の処理が実行される。すなわちまず、ＴＧ６０５は、ステップＳ１で取得した命令の動作がバス５０３のアクセスを伴う「読み」又は「書き」の動作であるか否かを判定する（ステップＳ２）。
【００３９】
ステップＳ２の判定がＹＥＳならば、ＴＧ６０５は、バス５０３を介してＳＲＡＭ５０２にアクセスするバスアクセスを発生させ（ステップＳ３）、アクセス結果を取得する（ステップＳ４）。その後、ＴＧ６０５は、ステップＳ１の処理に戻り、変換後動作ファイル９０２から次の行の命令の動作を取得する。
【００４０】
ステップＳ２の判定がＮＯならば、ＴＧ６０５は、その行で指定されている命令サイクル分待つ動作を実行する（ステップＳ５）。その後、ＴＧ６０５は、ステップＳ１の処理に戻り、変換後動作ファイル９０２から次の行の命令の動作を取得する。
【００４１】
また、ステップＳ１で取得した命令が割込み送信命令のとき（ステップＳ１０の判定がＹＥＳのとき）は、ＴＧ６０５は、割込み送信を割込み制御部９０３に対して実行し、その後、割込み制御部９０３から割込み受信があったか否かを判定する（ステップＳ１１）。
【００４２】
ステップＳ１１の判定がＮＯならば、ＴＧ６０５は、１サイクル待った後に（ステップＳ１２）、更にステップＳ１１の判定を繰り返す。
【００４３】
割込み制御部９０３は、各コア５０１からの割込み送信の信号を監視し、１或いは複数の予め定められた全てのコア５０１から割込み送信の信号が来たことを確認した後に、応答信号を上記コア５０１へ返す。
【００４４】
ＴＧ６０５は、割込み制御部９０３から割込み受信があったとき（ステップＳ１１の判定がＹＥＳになったとき）は、予め設定されている同期転送にかかるサイクル数だけ待つ（ステップＳ１３）。その後、ＴＧ６０５は、ステップＳ１の処理に戻り、変換後動作ファイル９０２から次の行の命令の動作を取得する。
【００４５】
以上のＴＧ６０５と割込み制御部９０３の制御動作により、図６の性能モデルでは、同期転送にかかる転送動作をそのままシミュレートしていたため、シミュレーションにかかるコストが大きかった。これに対して、図９の本実施形態の性能モデルでは、同期転送の開始、終了の情報のみが割込みを用いて制御されることで、データの転送にかかるシミュレーションコストを大幅に削減することが可能となる。
【００４６】
図１０は、図９で説明した本実施形態の動作を実現するための、本実施形態のシミュレーション装置の構成例を示すブロック図である。対象とするマルチコアＬＳＩシステムは、前述した図５と同様であり、以下の説明において図５の各部を図５中の参照番号によって随時参照する。また、図９の各部も各図中の参照番号によって随時参照する。本実施形態のシミュレーション装置は、処理部１００１と、記憶部１００２とから構成される。
【００４７】
処理部１００１は、コアシミュレータ部１０１０と、変換部１０１１と、図９と同様の同期転送変換部９０１と、モデルシミュレート部１０１２を備える。
【００４８】
コアシミュレータ部１０１０は、図９のコア単体のシミュレータ６０２に対応し、図５の各コア５０１に関する単体シミュレーションを実行する。
【００４９】
変換部１０１１は、コアシミュレータ部１０１０における各コア５０１に関する動作結果６０３（図９参照）からそのコア５０１に関する動作ファイル６０４（リソースアクセスの動作内容）を抽出する。
【００５０】
同期転送変換部９０１は、図９の同期転送変換部９０１と同様の動作を実行することにより、動作ファイル６０４中の同期転送にかかる処理９０５を、割込み送信処理及び割込み待ち処理の組９０６に変換し、変換後動作ファイル９０２を生成する。
【００５１】
記憶部１１０２は、アプリケーション１０２０、データ１０２１、同期転送にかかるサイクル数１０２２、動作結果６０３、動作ファイル６０４、変換後動作ファイル９０２、シミュレーション結果１０２３、及びモデル１０２４を記憶する。
【００５２】
アプリケーション１０２０は、図９のアプリケーション６０１に対応する。
データ１０２１は、アプリケーション１０２０で使用される各種データである。
【００５３】
同期転送にかかるサイクル数１０２２は、ＴＧ６０５が同期転送処理時に待つサイクル数を記憶したデータである。
【００５４】
動作結果６０３、動作ファイル６０４、及び変換後動作ファイル９０２は、図９で説明した各データに対応する。
【００５５】
シミュレーション結果１０２３は、モデルシミュレート部１０１２がシミュレーションを実行した結果のデータである。
【００５６】
モデル１０２４は、モデルシミュレート部１０１２が扱う性能モデルのデータである。
図１１は、図１０の本実施形態のシミュレーション装置において処理部１００１内の同期転送変換部９０１が実行する処理の動作例を示すフローチャートである。以下、図１０の各部を図１０中の参照番号によって随時参照する。
【００５７】
まず、同期転送変換部９０１は、変数ｋ０とｋ１をそれぞれ０に初期化する（ステップＳ１１０１）。変数ｋ０は動作ファイル６０４の行番号を示し、変数ｋ１は変換後動作ファイル９０２の行番号を示す。
【００５８】
続いて、同期転送変換部９０１は、変換元の動作ファイル６０４の変数ｋ０が示す値に対応するｋ０行目の命令の動作を取得する（ステップＳ１１０２）。
【００５９】
次ぐに、同期転送変換部９０１は、ステップＳ１１０２で取得した命令の動作が同期転送命令の動作であるか否かを判定する（ステップＳ１１０３）。
【００６０】
ステップＳ１１０３の判定がＹＥＳならば（図９の９０５のケース）、同期転送変換部９０１は、変換後動作ファイル９０２の変数ｋ１が示す値に対応するｋ１行目に、割込み送信命令を書き込む（ステップＳ１１０４）。
【００６１】
続いて、同期転送変換部９０１は、変換後動作ファイル９０２の変数ｋ１が示す値ｋ１に＋１をした値に対応するｋ１＋１行目に、割込み待ち命令を書き込む（ステップＳ１１０５）。
【００６２】
以上のステップＳ１１０４及びＳ１１０５のケースは、図９の動作ファイル６０４の９０５の部分から変換後動作ファイル９０２の９０６の部分への変換処理に対応する。
【００６３】
上記ステップＳ１１０４及びＳ１１０５の処理の後、同期転送変換部９０１は、上記２つの命令の書込みに対応させて変数ｋ１を２加算し（ステップＳ１１０６）、変数ｋ０は次の行を示すために１加算する（ステップＳ１１０７）。
【００６４】
一方、ステップＳ１１０３の判定がＮＯならば、同期転送変換部９０１は、変換後動作ファイル９０２の変数ｋ１が示す値に対応するｋ１行目に、動作ファイル６０４の変数ｋ０が示す値に対応するｋ０行目の命令を書き込む（ステップＳ１１０９）。
【００６５】
その後、同期転送変換部９０１は、上記１つの命令の書込みに対応させて変数ｋ１を１加算し（ステップＳ１１１０）、変数ｋ０は次の行を示すために１加算する（ステップＳ１１０７）。
【００６６】
上記ステップＳ１１０７の後、同期転送変換部９０１は、変数ｋ０の値が変換元の動作ファイル６０４の最後の行を超えたか否かを判定する（ステップＳ１１０８）。
【００６７】
ステップＳ１１０８の判定がＮＯならば、同期転送変換部９０１は、ステップＳ１１０２の処理に戻って、変換元の動作ファイル６０４の次の行の処理に移る。
【００６８】
ステップＳ１１０８の判定がＹＥＳになると、同期転送変換部９０１は、図１１のフローチャートで示される処理を終了する。
【００６９】
図１２は、図９の割込み制御部９０３の処理例を示すフローチャートである。まず、割込み制御部９０３は、状態変数ｓを０（非待ち状態）に初期化する（ステップＳ１２０１）。
【００７０】
次に、割込み制御部９０３は、図９の何れかのコア５０１から割込み送信の信号を受信するまで待ち状態となる（ステップＳ１２０２の判定がＮＯ→ステップＳ１２０１→ステップＳ１２０２の判定がＮＯの繰返し）。
【００７１】
何れかのコア５０１から割込み送信の信号が受信される（ステップＳ１２０２の判定がＹＥＳになる）と、割込み制御部９０３は、状態変数ｓの値を待ち状態を示す値１に移行させる（ステップＳ１２０３）。
【００７２】
その後、更に他の何れかのコア５０１から割込み送信の信号を受信するまで待ち状態となる（ステップＳ１２０４の判定がＮＯ→ステップＳ１２０３→ステップＳ１２０４の判定がＮＯの繰返し）。
【００７３】
更に他の何れかのコア５０１から割込み送信の信号が受信される（ステップＳ１２０４の判定がＹＥＳになる）と、割込み制御部９０３は、予め設定された全てのコア５０１から割込み送信の信号が受信されたか否かを判定する（ステップＳ１２０５）。
【００７４】
ステップＳ１２０５の判定がＮＯならば、割込み制御部９０３は、ステップＳ１２０３の処理に戻る。
【００７５】
ステップＳ１２０５の判定がＹＥＳになると、割込み制御部９０３は、予め設定された各コア５０１に、割込み受信信号（応答の信号）を送信する（ステップＳ１２０６）。その後、割込み制御部９０３は、ステップＳ１２０１の処理に戻る。
【００７６】
上述の図１２のフローチャートで例示される割込み制御部９０３の処理により、各コア５０１は、割込み送信により図８の関数処理（ｆｕｎｃ）の実行完了を割込み制御部９０３に通知することができる。更に、割込み制御部９０３が、予め設定された全てのコア５０１からの割込み送信の信号の受信のタイミングで、それらのコア５０１に、図８の期間Ｔ２の同期転送の開始タイミングを通知することができる。これを受けて、各コア５０１に対応するＴＧ６０５は、図９のステップＳ７の判定がＹＥＳとなりステップＳ９の同期待ち処理の後に、一斉に同期転送を開始する処理をシミュレートすることができる。
【００７７】
以上のようにして、本実施形態では、コア５０１間の同期転送におけるデータ転送を割込み制御信号に置き換えることで、シミュレーションにかかる演算コストを削減することが可能となる。
【００７８】
図１３は、上記実施形態に対応するシミュレーション装置（コンピュータ）のハードウェア構成の一例を示す図である。
【００７９】
図１３に示されるコンピュータは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１３０１、メモリ１３０２、入力装置１３０３、出力装置１３０４、補助情報記憶装置１３０５、可搬型記録媒体１３０９が挿入される媒体駆動装置１３０６、及びネットワーク接続装置１３０７を有する。これらの構成要素は、バス１３０８により相互に接続されている。同図に示される構成は上記シミュレーション装置を実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【００８０】
メモリ１３０２は、例えば、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。
【００８１】
ＣＰＵ（プロセッサ）１３０１は、例えば、メモリ１３０２を利用してプログラムを実行することにより、例えば図１０に示される処理部１００１として動作する。
【００８２】
入力装置１３０３は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示又は情報の入力に用いられる。出力装置１３０４は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問合せ又は処理結果の出力に用いられる。
【００８３】
補助情報記憶装置１３０５は、例えば、ハードディスク記憶装置、磁気ディスク記憶装置、光ディスク装置、光磁気ディスク装置、テープ装置、又は半導体記憶装置であり、例えば、図１０に示される記憶部１００２として動作する。図１０のシミュレーション装置は、補助情報記憶装置１３０５にプログラム及びデータを格納しておき、それらをメモリ１３０２にロードして使用することができる。
【００８４】
媒体駆動装置１３０６は、可搬型記録媒体１３０９を駆動し、その記録内容にアクセスする。可搬型記録媒体１３０９は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体１３０９は、Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＣＤ−ＲＯＭ）、Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ（ＤＶＤ）、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体１３０９にプログラム及びデータを格納しておき、メモリ１３０２にロードして使用することができる。
【００８５】
このように、図１０のシミュレーション装置のシミュレーション処理に用いられるプログラム及びデータを格納するコンピュータ読取り可能な記録媒体は、メモリ１３０２、補助情報記憶装置１３０５、又は可搬型記録媒体１３０９のような、物理的な（非一時的な）記録媒体である。
【００８６】
ネットワーク接続装置１３０７は、例えばＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。図１０のシミュレーション装置は、プログラム又はデータを外部の装置からネットワーク接続装置１３０７を介して受信し、それらをメモリ１３０２にロードして使用することができる。
【００８７】
なお、図１０のシミュレーション装置が図１３の全ての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザからの指示又は情報を入力する必要がない場合は、入力装置１３０３が省略されてもよい。可搬型記録媒体１３０９又は通信ネットワークを利用しない場合は、媒体駆動装置１３０６又はネットワーク接続装置１３０７が省略されてもよい。
【００８８】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができる。
【符号の説明】
【００８９】
５０１  コア
５０２  ＳＲＡＭ
５０３  バス
６０１、１０２０  アプリケーション
６０２  コア単体のシミュレータ
６０３  動作結果
６０４、９０２  動作ファイル
６０５  ＴＧ
９０１  同期転送変換部
９０２  変換後動作ファイル
１００１  処理部
１００２  記憶部
１０１０  コアシミュレータ部
１０１１  変換部
１０１２  モデルシミュレート部
１０２１  データ
１０２２  同期転送にかかるサイクル数
１０２３  シミュレーション結果
１０２４  モデル
【図１】
2019016168.tif 000003
【図２】
2019016168.tif 000004
【図３】
2019016168.tif 000005
【図４】
2019016168.tif 000006
【図５】
2019016168.tif 000007
【図６】
2019016168.tif 000008
【図７】
2019016168.tif 000009
【図８】
2019016168.tif 000010
【図９】
2019016168.tif 000011
【図１０】
2019016168.tif 000012
【図１１】
2019016168.tif 000013
【図１２】
2019016168.tif 000014
【図１３】
2019016168.tif 000015