(57)【要約】【課題】機能ＩＰの精度の高いシミュレーションを実現することが可能なシミュレーション装置を提供すること。【解決手段】シミュレーション装置は、ユーザプログラム７を実行することによって機能ＩＰを制御するＣＰＵ０（３１）と、シミュレータプログラム６を実行することによって機能ＩＰをシミュレートするＣＰＵ１（３２）と、ＣＰＵ０（３１）およびＣＰＵ１（３２）によってアクセスされる共有メモリ３３とを含む。共有メモリ３３には、機能ＩＰの内蔵レジスタに相当する内蔵レジスタ領域がマッピングされており、ＣＰＵ０（３１）は、内蔵レジスタ領域にデータを書き込むことによってＣＰＵ１（３２）によるシミュレーションを制御する。ＣＰＵ１（３２）は、内蔵レジスタ領域に書き込まれたデータに応じて機能ＩＰのシミュレーションを実行する。したがって、機能ＩＰの精度の高いシミュレーションを実現することが可能となる。【選択図】図４
2012155519.tif 000002
【特許請求の範囲】
【請求項１】
開発対象の機能ブロックをシミュレートするためのシミュレーション装置であって、
ユーザプログラムを実行することによって前記機能ブロックを制御する第１のプロセッサと、
シミュレータプログラムを実行することによって前記機能ブロックをシミュレートする第２のプロセッサと、
前記第１のプロセッサおよび前記第２のプロセッサによってアクセスされる共有メモリとを含み、
前記共有メモリには、前記機能ブロックの内蔵レジスタに相当する内蔵レジスタ領域がマッピングされており、
前記第１のプロセッサは、前記内蔵レジスタ領域にデータを書き込むことによって前記第２のプロセッサによるシミュレーションを制御し、
前記第２のプロセッサは、前記内蔵レジスタ領域に書き込まれたデータに応じて前記機能ブロックのシミュレーションを実行する、シミュレーション装置。
【請求項２】
前記内蔵レジスタ領域は、前記機能ブロックの内蔵レジスタの相対アドレスと一致する前記共有メモリの領域にマッピングされる、請求項１記載のシミュレーション装置。
【請求項３】
前記共有メモリには、さらに前記機能ブロックの内蔵メモリに相当する内蔵メモリ領域がマッピングされており、
前記第２のプロセッサは、前記第１のプロセッサによって前記内蔵レジスタ領域にデータ演算処理要求が書き込まれたときに、前記内蔵メモリ領域に格納されているデータに対して演算処理を行なう、請求項１または２記載のシミュレーション装置。
【請求項４】
前記共有メモリには、さらにデータ演算処理に必要な実行サイクル数を記録する実行記録領域がマッピングされており、
前記第２のプロセッサは、データ演算処理を行なうときにその実行サイクル数を計算して前記実行記録領域に格納する、請求項３記載のシミュレーション装置。
【請求項５】
前記共有メモリには、さらに前記機能ブロックの内蔵メモリに相当する内蔵メモリ領域がマッピングされており、
前記第２のプロセッサは、前記第１のプロセッサによって前記内蔵レジスタ領域にデータ転送処理要求が書き込まれたときに、外部メモリからデータを読み出して前記内蔵メモリ領域に転送する、請求項１または２記載のシミュレーション装置。
【請求項６】
前記第２のプロセッサは、前記第１のプロセッサによって前記内蔵レジスタ領域にデータ転送処理要求が書き込まれたときに、前記内蔵メモリ領域からデータを読み出して前記外部メモリに転送する、請求項５記載のシミュレーション装置。
【請求項７】
前記共有メモリには、さらにデータ転送に必要な転送サイクル数および転送データ量を記録する転送記録領域がマッピングされており、
前記第２のプロセッサは、データ転送処理を行なうときにその転送サイクル数および転送データ量を計算して前記転送記録領域に格納する、請求項５または６記載のシミュレーション装置。
【請求項８】
前記シミュレーション装置はさらに、前記機能ブロックをシミュレートする第３のプロセッサを含み、
前記シミュレータプログラムが少なくとも２つに分割されており、
前記第２のプロセッサおよび前記第３のプロセッサが、前記分割されたシミュレータプログラムを実行する、請求項１〜７のいずれかに記載のシミュレーション装置。
【請求項９】
第１のプロセッサ、第２のプロセッサおよび共有メモリを含んだシステムにおける開発対象の機能ブロックをシミュレートするためのシミュレーション方法であって、
前記共有メモリには、前記機能ブロックの内蔵レジスタに相当する内蔵レジスタ領域がマッピングされており、
前記第１のプロセッサがユーザプログラムを実行することによって、前記内蔵レジスタ領域にデータを書き込んで前記第２のプロセッサによるシミュレーションを制御するステップと、
前記第２のプロセッサがシミュレータプログラムを実行することによって、前記内蔵レジスタ領域に書き込まれたデータに応じて前記機能ブロックのシミュレーションを実行するステップとを含む、シミュレーション方法。
【請求項１０】
第１のプロセッサ、第２のプロセッサおよび共有メモリを含んだシステムにおける開発対象の機能ブロックをシミュレートするためのコンピュータ・プログラムであって、
前記第２のプロセッサが、前記共有メモリにマッピングされた前記機能ブロックの内蔵レジスタに相当する内蔵レジスタ領域に前記第１のプロセッサによって書き込まれた処理内容を読み出すステップと、
前記第２のプロセッサが、前記読み出した処理内容に応じて前記機能ブロックのシミュレーションを実行するステップとを含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に搭載されるハードウェアをシミュレートする技術に関し、特に、ＳｏＣ（System on Chip）に搭載される特定用途の機能ブロック（ＩＰ）を効率的にシミュレートするシミュレーション装置、シミュレーション方法およびそのコンピュータ・プログラムに関する。
【背景技術】
【０００２】
近年、半導体素子の微細化技術の進歩に伴い、ＣＰＵ（Central Processing Unit）、メモリ、特定用途のハードウェアロジックなどを１チップに集積したＳｏＣが開発されており、特に大量のストリームデータを処理するメディア処理などの用途に広く用いられている。
【０００３】
このような用途においては、ＳｏＣに搭載されているマイクロプロセッサだけではその処理性能が不足するため、処理の高速化のための特定用途のハードウェアロジック回路を機能ブロック（ＩＰ）として搭載する。そして、マイクロプロセッサが、１つまたは複数の機能ブロックを制御することによって、所望の処理および性能を達成することが多い。
【０００４】
このようなＳｏＣに搭載されるＩＰ開発のためのシミュレーション方法として、下記の特許文献１〜４に開示された発明がある。
【０００５】
特許文献１は、ホストネイティブとＩＳＳ（Instruction Set Simulator）でプログラムをハイブリッド実行するとき、ターゲットシステム上で実行可能な機械語プログラムのＩＳＳ上での実行を実現することのできるシステムシミュレーション装置を得ることを目的とする。ＩＳＳは、ターゲットプログラムのターゲットＩＳＡ（Instruction Set Architecture）部分を実行する。バスシミュレータはアドレス変換テーブルを備える。ＩＳＳはバスシミュレータを介して、ＩＳＳ上で動作するターゲットプログラムによる大域データへのメモリアクセス時に、アドレス変換テーブルを用いてホスト計算機上のアドレス空間に存在する大域データのアドレスを取得し、ホスト計算機上の大域データに対してメモリアクセスする。
【０００６】
特許文献２は、少ない工数で高速なシミュレーションを可能にすることを目的とする。ＬＳＩ開発装置は、システムＬＳＩに実装する処理を実行単位毎に分割した単位処理を全てソフトウェアで実行した場合の所定の性能と、分割した単位処理を全てハードウェアで実行した場合の所定の性能とを単位処理毎にそれぞれファイルに作成する性能算出部と、ファイルから取得した単位処理毎の処理の性能に基づいてシステムＬＳＩの性能を評価する性能評価部とを備える。
【０００７】
特許文献３は、マルチコアマイコンシステムの開発方法及び開発装置において、少なくとも一つのパラメータを有するマルチコアを有するコントローラモデルがシミュレートされ、同時に少なくとも一つのパラメータを有しコントローラモデルにより制御される装置モデルがシミュレートされる。ユーザインターフェイスがコントローラモデルおよび装置モデルのパラメータにアクセスし、トリガーイベントに応じて選択的にコントローラモデルおよび装置モデルの実行を保留する。ユーザインターフェイスは、トリガー時にコントローラモデルおよび装置モデルのパラメータを変更することなく、コントローラモデルの各コアの種々のパラメータ及び装置モデルのパラメータの状態を決定し、決定された両コアのパラメータは表示装置に表示される。
【０００８】
特許文献４は、マルチＣＰＵ構成のプログラマブルコントローラにおいて、１つのＣＰＵモジュールでＩ／Ｏをエミュレートするようにして、Ｉ／Ｏモジュールや外部接続なしで、実際のラダープログラムを動作させながら実機に近いデバッグを行うことができるシミュレーション装置を提供することを目的とする。エミュレーションＣＰＵモジュールは、シミュレーションするための他のＣＰＵモジュールであるシーケンスＣＰＵモジュールからのＩ／Ｏモジュールアクセスを自己のＣＰＵ内でのアクセスとして処理可能なエミュレーション用Ｉ／Ｏプロセッサと、Ｉ／Ｏメモリとを備える。Ｉ／Ｏメモリには、予め登録されたＩ／Ｏ情報をもとに複数のＣＰＵモジュールの各々に備えてあるＩ／Ｏモジュールと同等なデータテーブルを有すると共に、Ｉ／Ｏモジュールの動作をエミュレートするためのプログラムを動作させる仕組みを備える。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１０−１０２４９６号公報
【特許文献２】特開２００５−０４４１２９号公報
【特許文献３】特開２０１０−０１５５３４号公報
【特許文献４】特開２００５−２９２９１２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述の特許文献１および特許文献２は、汎用ＰＣ（Personal Computer）上でモデルシミュレータを構成して実行する方式に関するものである。このモデルシミュレータにおいては、ハードウェアの振る舞いを全てソフトウェアで記述することによって、汎用ＰＣ上でのシミュレーションを可能としたものである。
【００１１】
この技術を用いた場合、ソフトウェアによる自由な記述が可能であるため、新規ＩＰの動作についての振る舞いを記述することでシミュレータを開発することが可能である。しかしながら、そのＩＰがＳｏＣに搭載される場合、既存のＣＰＵや周辺ＩＯとの協調動作が必要となるため、これらの既存モジュールも全てシミュレータとして動作させる必要がある。したがって、開発したモデルシミュレータのみを用いて先行的にこれらの外部のモジュールも含んだシステムに対するソフトウェア開発を実施することが困難であるといった問題点があった。
【００１２】
また、上述のモデルシミュレータを用いたシミュレーション環境の他に、実際のハードウェア設計に用いるＲＴＬ（Register Transfer Language）をＦＰＧＡ（Field Programmable Gate Array）に実装して、その動作を確認するＦＰＧＡを用いたプロトタイプ環境がある。
【００１３】
この環境においては、周辺ＩＯなどを含めた実機動作の確認が可能であるため、実際のＬＳＩに近い環境でソフトウェア開発を行なうことが可能である。しかしながら、よりハードウェア設計に近い開発が必要となるため、新規ＩＰに対してこれを適用するためにはその開発のための工数が大きくなり、ハードウェアへのフィードバックが必要な場合には、そのアーキテクチャの変更に伴って開発期間が増大するといった問題点があった。
【００１４】
また、近年ではＳｏＣに複数のＣＰＵを搭載したシステムＬＳＩ（Large Scale Integrated circuit）が開発されており、所望の性能を満たすことが可能である場合には、単一または複数のＣＰＵにユーザプログラムを実行させることにより機能ＩＰに相当する機能を実装することも可能である。このようなマルチコア構成のシミュレーション装置としては、上記の特許文献３および特許文献４に開示された発明を挙げることができる。
【００１５】
特許文献３は、複数のＣＰＵによってコントローラモデルとシミュレータとを構成し、ユーザインタフェースからこれらに選択的にアクセスすることによりシミュレーションを行なうものである。この構成によって、ＣＰＵに機能ＩＰの機能を割り当て、機能ＩＰ以外の周辺機能としてはＣＰＵが接続されている実際のバスシステムのものを使用することで、高い精度のシミュレーションが可能である。しかしながら、ユーザインタフェースからシミュレータを制御するため、実際に機能ＩＰを制御するＣＰＵ上で動作するユーザプログラムを、開発後のＳｏＣでそのまま使用できないといった問題点があった。
【００１６】
また、特許文献４は、シミュレーション対象へのアクセスを処理するエミュレーション用プロセッサと、専用のシステムプログラムおよびメモリから構成されるエミュレーション用モジュールとを搭載し、このエミュレーションモジュールが機能ＩＰとして動作するものである。しかしながら、機能ＩＰと同様の構成をエミュレーションモジュールによって実現するが、マルチコアを構成するＣＰＵのうち１つまたは複数のＣＰＵをこのような専用のエミュレーションモジュールとして構成する必要があるため、このような構成を有するＳｏＣを、シミュレーション装置の専用用途のＳｏＣとして設計して準備する必要があるといった問題点があった。
【００１７】
本発明は、上記問題点を解決するためになされたものであり、その目的は、機能ＩＰの精度の高いシミュレーションを実現することが可能なシミュレーション装置、シミュレーション方法およびそのコンピュータ・プログラムを提供することである。
【課題を解決するための手段】
【００１８】
本発明の一実施例によれば、開発対象の機能ブロックをシミュレートするためのシミュレーション装置が提供される。シミュレーション装置は、ユーザプログラムを実行することによって機能ＩＰを制御する第１のプロセッサと、シミュレータプログラムを実行することによって機能ＩＰをシミュレートする第２のプロセッサと、第１のプロセッサおよび第２のプロセッサによってアクセスされる共有メモリとを含む。共有メモリには、機能ＩＰの内蔵レジスタに相当する内蔵レジスタ領域がマッピングされており、第１のプロセッサは、内蔵レジスタ領域にデータを書き込むことによって第２のプロセッサによるシミュレーションを制御し、第２のプロセッサは、内蔵レジスタ領域に書き込まれたデータに応じて機能ＩＰのシミュレーションを実行する。
【発明の効果】
【００１９】
本発明の一実施例によれば、第２のプロセッサが、内蔵レジスタ領域に書き込まれたデータに応じて機能ＩＰのシミュレーションを実行するので、機能ＩＰの精度の高いシミュレーションを実現することが可能となる。
【図面の簡単な説明】
【００２０】
【図１】本発明の対象となるシステムの一例を示す図である。
【図２】ＣＰＵ１１がユーザプログラム４を実行するときのＳｏＣ１内の動作を説明するための図である。
【図３】ＣＰＵ１１がユーザプログラム４を実行するときの処理手順を説明するためのフローチャートである。
【図４】本発明の第１の実施の形態におけるシミュレーション装置を含んだシステムの一例を示す図である。
【図５】ＩＰシミュレータの構成を詳細に説明するための図である。
【図６】共有メモリ３３にマッピングされるシミュレータ領域をさらに詳細に説明するための図である。
【図７】本発明の実施の形態におけるシミュレーション装置を含んだシステムの動作を説明するフローチャートである。
【図８】ＣＰＵ０（３１）およびＣＰＵ１（３２）がそれぞれユーザプログラム７およびシミュレータプログラム６を実行するときのＳｏＣ１内の動作を説明するための図である。
【図９】図７に示すフローチャート中のデータ演算処理に関する部分をさらに詳細に説明するためのフローチャートである。
【図１０】ＩＰシミュレータがデータ演算処理を行なうときのＳｏＣ１の動作を説明するための図である。
【図１１】図７に示すフローチャート中のデータ転送処理に関する部分をさらに詳細に説明するためのフローチャートである。
【図１２】ＩＰシミュレータがデータ転送処理を行なうときのＳｏＣ１の動作を説明するための図である。
【図１３】本発明の第２の実施の形態におけるシミュレーション装置を含んだシステムの一例を示す図である。
【発明を実施するための形態】
【００２１】
図１は、本発明の対象となるシステムの一例を示す図である。このシステムは、システム・オン・チップ（ＳｏＣ）１と、ソフトウェア開発環境としての汎用ＰＣ２と、ユーザプログラム４が記憶される外部メモリ３とを含む。
【００２２】
また、ＳｏＣ１は、ＣＰＵ１１と、内部メモリ１２と、デバッグ回路１３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６と、開発対象となる新規ＩＰ１７とを含む。なお、ＣＰＵ１１と、内部メモリ１２と、外部メモリ３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６と、新規ＩＰ１７とが、システムバス１８を介して接続される。
【００２３】
デバッグ回路１３は、ソフトウェア開発環境である汎用ＰＣ２から受けた指示に応じて、ＣＰＵ１１にユーザプログラムの実行を行なわせる。
【００２４】
図２は、ＣＰＵ１１がユーザプログラム４を実行するときのＳｏＣ１内の動作を説明するための図である。また、図３は、ＣＰＵ１１がユーザプログラム４を実行するときの処理手順を説明するためのフローチャートである。以下、図２および図３を参照しながら、図１に示すシステムの動作を説明する。
【００２５】
まず、ＳｏＣ１内の各モジュールがリセットされ（Ｓ１１）、ユーザプログラム４が外部メモリ３にロードされる（Ｓ１２、図２の（１））。このユーザプログラム４は、汎用ＰＣ２から外部メモリ３に転送されてもよいし、図示しない外部記憶装置から外部メモリ３に転送されてもよい。
【００２６】
次に、ユーザが汎用ＰＣ２を介してデバッグ回路１３にユーザプログラム４の実行開始を指示すると、デバッグ回路１３からの指示に応じてＣＰＵ１１によるユーザプログラム４の実行が開始される（Ｓ１３）。
【００２７】
ＣＰＵ１１がユーザプログラム４の実行を開始すると、新規ＩＰ（機能ＩＰ）１７の内蔵レジスタ２１などの初期化や、パラメータの書き込みなどを行なって、新規ＩＰ１７の設定を行なう（Ｓ１４、図２の（２））。なお、本発明の実施の形態においては、内蔵レジスタ２１などのレジスタがメモリマップにマッピングされる、いわゆるメモリマップドＩ／Ｏが採用される。
【００２８】
次に、ＣＰＵ１１は、システムバス１８に接続される周辺Ｉ／Ｏ１４または１５を介して、ＳｏＣ１外部から処理対象となるデータ（処理データ５）を読み込み、外部メモリ３または内部メモリ１２に格納する（Ｓ１５、図２の（３））。
【００２９】
たとえば、ＳｏＣ１が画像処理を行なう場合には、カメラで撮像された画像データがカメラインタフェースなどの周辺Ｉ／Ｏを介して、外部メモリ３または内部メモリ１２に格納されることになる。
【００３０】
次に、ＣＰＵ１１は、機能ＩＰ１７による処理を実行するために、外部メモリ３または内部メモリ１２から機能ＩＰ１７内に搭載されるラインバッファなどの内蔵メモリ２０に処理データ５を転送する（Ｓ１６、図２の（４））。
【００３１】
処理データ５の転送が完了すると、機能ＩＰ１７による処理が可能な状態となるため、ＣＰＵ１１は、機能ＩＰ１７の内蔵レジスタ２１内の起動レジスタに起動信号を書き込むことで、機能ＩＰ１７による処理が開始される（Ｓ１７、図２の（５））。
【００３２】
機能ＩＰ１７は、データ処理を行ない、その実行結果を内蔵メモリ２０に格納する（Ｓ１８）。そして、データ処理が完了すると、機能ＩＰ１７は、ＣＰＵ１１に対してデータ処理完了を通知する（Ｓ１９、図２の（６））。この通知の方法としては、機能ＩＰ１７が割り込み回路１９を介してＣＰＵ１１に割り込み要求を出力するようにしてもよいし、機能ＩＰ１７の内蔵レジスタ２１に実行状態レジスタを用意しておき、ＣＰＵ１１がこの実行状態レジスタを定期的にポーリングして処理完了を検知するようにしてもよい。
【００３３】
ＣＰＵ１１は、機能ＩＰ１７からの処理完了通知を受けると、機能ＩＰ１７の内蔵メモリ２０から処理結果のデータを外部メモリ３または内部メモリ１２に転送する（Ｓ２０、図２の（７））。
【００３４】
次に、外部メモリ３または内部メモリ１２に格納された処理結果のデータが周辺Ｉ／Ｏ１４または１５を介して外部に出力される（Ｓ２１、図２の（８））。そして、機能ＩＰ１７による処理が必要回数だけ行なわれたか否かが判定される（Ｓ２２）。必要回数が完了していなければ（Ｓ２２，Ｎｏ）、ステップＳ１５に戻って以降の処理を繰り返す。また、必要回数が完了していれば（Ｓ２２，Ｙｅｓ）、処理を終了する。
【００３５】
このように、新規ＩＰ１７を開発してＳｏＣ１に搭載する場合、ＳｏＣ１に搭載するハードウェアロジックの開発のみならず、ユーザプログラム４に相当する、機能ＩＰ１７を利用するためにＣＰＵ１１から機能ＩＰ１７を制御するためのドライバや、その機能ＩＰ１７を用いたアプリケーション、ミドルウェアなどのソフトウェアの開発が必要となる。
【００３６】
また、開発した新規ＩＰ１７を用いてどの程度所望の処理の高速化が達成されているかを早期に解析したり、新規ＩＰ１７が必要とするシステムバスのデータ転送量を解析したりすることで、そのソフトウェア開発の成果をハードウェアロジックの仕様にフィードバックすることができ、新規ＩＰ開発やシステム設計の効率化を実現できる。
【００３７】
（第１の実施の形態）
図４は、本発明の第１の実施の形態におけるシミュレーション装置を含んだシステムの一例を示す図である。このシステムは、ＳｏＣ１と、ソフトウェア開発環境としての汎用ＰＣ２と、シミュレータプログラム（ＣＰＵ１）６およびユーザプログラム（ＣＰＵ０）７が記憶される外部メモリ３とを含む。
【００３８】
また、ＳｏＣ１は、デバッグ回路１３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６と、ＣＰＵ０（３１）と、ＣＰＵ１（３２）と、共有メモリ３３とを含む。なお、ＣＰＵ０（３１）と、ＣＰＵ１（３２）と、共有メモリ３３と、外部メモリ３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６とが、システムバス１８を介して接続される。なお、図１に示すシステムと同じ構成および機能を有する部分については、同じ参照番号を付すものとする。
【００３９】
本実施の形態におけるシステムにおいては、ＣＰＵ１（３２）、共有メモリ３３およびシミュレータプログラム６によって、図２に示す新規ＩＰ１７の機能をエミュレートするものであり、これらによってＩＰシミュレータが構成されるものとする。
【００４０】
図５は、ＩＰシミュレータの構成を詳細に説明するための図である。ＣＰＵ０（３１）をユーザプログラム７を動作させるターゲットＣＰＵとして割り当て、ＣＰＵ１（３２）をシミュレータプログラム６を動作させるシミュレータＣＰＵとして割り当てる。
【００４１】
また、共有メモリ３３にはシミュレータ領域として、新規ＩＰ１７の内蔵メモリ２０に相当する内蔵メモリ領域４１と、内蔵レジスタ２１に相当する内蔵レジスタ領域４２と、演算処理の実行サイクル数の計測および記録のための実行記録領域４３と、データ転送のサイクル数およびデータ転送量の計測および記録のための転送記録領域４４との４領域をマッピングする。
【００４２】
図６は、共有メモリ３３にマッピングされるシミュレータ領域をさらに詳細に説明するための図である。内蔵メモリ領域４１には、たとえば新規ＩＰ１７のラインバッファやデータバッファとして内蔵されているメモリ領域がマッピングされる。
【００４３】
内蔵レジスタ領域４２には、新規ＩＰ１７に実装されている全ての内蔵レジスタがマッピングされる。このとき、内蔵レジスタの相対アドレスを維持してマッピングする。これによって、ユーザプログラム７で使用する新規ＩＰ１７のベースアドレスのみを変更するだけで、その制御対象をハードウェアロジックからＩＰシミュレータへ、またはＩＰシミュレータからハードウェアロジックへ変更することが可能となる。
【００４４】
マッピングされる内蔵レジスタとして、新規ＩＰ１７のパラメータを設定するためのレジスタ、演算動作やデータ転送動作を起動するための起動レジスタ、新規ＩＰ１７の実行状態を示す状態レジスタなどを挙げることができるが、これらに限られるものではない。
【００４５】
これらのレジスタは、ユーザプログラム７が動作するＣＰＵ０（３１）による参照および書き込みが行なわれると共に、シミュレータプログラム６が動作するＣＰＵ１（３２）からも同様に参照および書き込みが行なわれる。
【００４６】
マルチコア構成のシステムバスに接続される共有メモリには、通常、このような複数のＣＰＵコアの書き込みによるデータの一貫性（コンシステンシ）を制御するためのスヌープ機能が搭載されており、シミュレータプログラム６を実装する上でのソフトウェア上の制約は小さい。
【００４７】
実行記録領域４３には、動作中の演算処理の実行サイクル数をカウントするための１つ以上の実行サイクル数カウンタと、実行結果を、シミュレーション時間や実行箇所などのパラメータ、処理内容および実行サイクル数と共に記録するトレースバッファとがマッピングされる。
【００４８】
実行結果については、その実行回数がシミュレーションにより膨大な回数となるため、シミュレータプログラム６によって共有メモリ３３から外部メモリ３にコピーして保存するようにすることも可能である。また、実行結果が共有メモリ３３にマッピングされていることから、この処理結果を汎用ＰＣ（ソフトウェア開発環境）２から参照することも可能であり、実行サイクル数に基づく性能解析が可能となる。
【００４９】
転送記録領域４４には、データの転送サイクル数をカウントするための転送サイクル数カウンタと、システムバス１８の負荷解析のために転送データ量をカウントする転送データ数カウンタとがマッピングされる。さらに、データ転送に関するパラメータ、転送サイクル数および転送データ量を記録する領域もマッピングされる。
【００５０】
転送サイクル数および転送データ量が共有メモリ３３にマッピングされていることから、これらのデータを汎用ＰＣ（ソフトウェア開発環境）２から参照することも可能であり、転送データに基づくシステムバス１８の負荷解析が可能となる。
【００５１】
図７は、本発明の実施の形態におけるシミュレーション装置を含んだシステムの動作を説明するフローチャートである。また、図８は、ＣＰＵ０（３１）およびＣＰＵ１（３２）がそれぞれユーザプログラム７およびシミュレータプログラム６を実行するときのＳｏＣ１内の動作を説明するための図である。以下、図７および図８を参照しながら、シミュレーション装置を含んだシステムの動作について説明する。
【００５２】
なお、図７に示すフローチャートにおいて、汎用ＰＣ（ソフトウェア開発環境）２の処理手順をステップＳ３１〜Ｓ３５、ユーザプログラム７が動作するＣＰＵ０（３１）の処理手順をステップＳ４１〜Ｓ４９、シミュレータプログラム６が動作するＣＰＵ１（３２）の処理手順をステップＳ５１〜Ｓ６１で示している。
【００５３】
まず、ＳｏＣ１内の各モジュールがリセットされ（Ｓ３１）、ユーザプログラム７が外部メモリ３にロードされ（Ｓ３２、図８の（１））、シミュレータプログラム６が外部メモリ３にロードされる（Ｓ３３、図８の（２））。
【００５４】
次に、ユーザが汎用ＰＣ２を介してデバッグ回路１３にシミュレータプログラム６の実行開始を指示すると、デバッグ回路１３からの指示に応じてＣＰＵ１（３２）によるシミュレータプログラム６の実行が開始される（Ｓ３４、図８の（３））。
【００５５】
このとき、ＣＰＵ１（３２）がシミュレータプログラム６の実行を開始して共有メモリ３３の各領域の初期化を行ない（Ｓ５１、図８の（５））、内蔵レジスタ領域４２の内容を参照して（Ｓ５２）、内蔵レジスタ領域４２の内容に変化があるか否かを判定する、すなわち一定周期でポーリングを行なう（Ｓ５３）。このように、ＣＰＵ１（３２）は実行待機の状態となり、新規ＩＰ１７と同等の動作を行なうＩＰシミュレータとして動作するようになる。
【００５６】
ＩＰシミュレータの起動後に、汎用ＰＣ２が、デバッグ回路１３にユーザプログラム７の実行開始を指示すると、デバッグ回路１３からの指示に応じてＣＰＵ０（３１）によるユーザプログラム７の実行が開始される（Ｓ３５、図８の（４））。
【００５７】
このとき、ＩＰシミュレータが既に動作しているため、ＣＰＵ０（３１）は、図３に示すフローチャートのステップＳ１４〜Ｓ２２と同様の動作を行なう。すなわち、ＣＰＵ０（３１）がユーザプログラム７の実行を開始すると、新規ＩＰ（機能ＩＰ）１７の設定を行なうのと同様に、共有メモリ３３の内蔵レジスタ領域４２などの初期化や、パラメータの書き込みなどを行なう（Ｓ４１、図８の（６））。
【００５８】
次に、ＣＰＵ０（３１）は、システムバス１８に接続される周辺Ｉ／Ｏ１４または１５を介して、ＳｏＣ１外部から処理対象となるデータを読み込み、外部メモリ３に格納する（Ｓ４２）。
【００５９】
次に、ＣＰＵ０（３１）は、ＩＰシミュレータによるデータ演算処理を実行するために、外部メモリ３から共有メモリ３３内のラインバッファなどの内蔵メモリ領域４１に処理データを転送する（Ｓ４３）。このとき、ＣＰＵ０（３１）は、ＩＰシミュレータに対してデータ転送を行なわせるが、その処理の詳細は後述する。
【００６０】
処理データの転送が完了すると、ＩＰシミュレータによるデータ演算処理が可能な状態となるため、ＣＰＵ０（３１）は、共有メモリ３３の内蔵レジスタ領域４２内の起動レジスタに起動信号を書き込むことによって、ＩＰシミュレータによるデータ演算処理が開始される（Ｓ４４）。そして、ＣＰＵ０（３１）は、ＩＰシミュレータによるデータ演算処理待ち状態となる（Ｓ４５）。
【００６１】
ＩＰシミュレータによるデータ演算処理が完了すると、ＣＰＵ０（３１）は、ＩＰシミュレータからの通知によってデータ演算処理完了を検出し（Ｓ４６）、共有メモリ３３の内蔵メモリ領域４１から処理結果のデータを外部メモリ３に転送する（Ｓ４７）。このとき、ＣＰＵ０（３１）は、ＩＰシミュレータに対してデータ転送を行なわせるが、その処理の詳細は後述する。
【００６２】
次に、外部メモリ３に格納された処理結果のデータが周辺Ｉ／Ｏ１４または１５を介して外部に出力される（Ｓ４８）。そして、ＩＰシミュレータによる処理が必要回数だけ行なわれたか否かが判定される（Ｓ４９）。必要回数が完了していなければ（Ｓ４９，Ｎｏ）、ステップＳ４２に戻って以降の処理を繰り返す。また、必要回数が完了していれば（Ｓ４９，Ｙｅｓ）、処理を終了する。
【００６３】
上述のように、ＣＰＵ１（３２）は、ＩＰシミュレータ起動後に、内蔵レジスタ領域４２の内容に変化があるか否かをポーリングしており（Ｓ５３）、ＣＰＵ０（３１）によって内蔵レジスタ領域４２に書き込みがあったときに、その内容に応じて、データ演算処理、データ転送処理または停止処理のいずれかを実行する。
【００６４】
内蔵レジスタ領域４２にデータ演算処理の開始指示が書き込まれていれば（Ｓ５３，処理スタート）、ＣＰＵ１（３２）は、後述のデータ演算処理を行なう（Ｓ５４）。そして、その演算処理に対応した実行サイクル数を加算することによって実行サイクル数を更新し（Ｓ５５）、ＣＰＵ０（３１）に対してデータ処理完了を通知する（Ｓ５６）。そして、内蔵レジスタ領域４２の内容を更新し（Ｓ６０）、ステップＳ５２に戻って以降の処理を繰り返す。
【００６５】
また、内蔵レジスタ領域４２にデータ転送処理の開始指示が書き込まれていれば（Ｓ５３，転送スタート）、ＣＰＵ１（３２）は、後述のデータ転送処理を行なう（Ｓ５７）。そして、そのデータ転送処理に対応した転送サイクル数を加算することによって転送サイクル数を更新し（Ｓ５８）、そのデータ転送処理に対応した転送データ量を加算することによって転送データ量を更新する（Ｓ５９）。そして、内蔵レジスタ領域４２の内容を更新し（Ｓ６０）、ステップＳ５２に戻って以降の処理を繰り返す。
【００６６】
また、内蔵レジスタ領域４２に停止処理の指示が書き込まれていれば（Ｓ５３，停止）、ＣＰＵ１（３２）は処理を終了する。
【００６７】
なお、図７に示すフローチャートにおいては、ＩＰシミュレータの動作として、演算処理動作、データ転送動作、停止動作を記載しているが、これらの動作は全てハードウェアロジックである機能ＩＰ１７の仕様に準ずるものであり、これらの動作に限定されるものではない。
【００６８】
図９は、図７に示すフローチャート中のデータ演算処理に関する部分をさらに詳細に説明するためのフローチャートである。また、図１０は、ＩＰシミュレータがデータ演算処理を行なうときのＳｏＣ１の動作を説明するための図である。以下、図９および図１０を参照しながら、データ演算処理動作について説明する。
【００６９】
上述のように、ＣＰＵ１（３２）は、シミュレータプログラム６の実行を開始して共有メモリ３３の各領域の初期化を行ない（Ｓ８１）、内蔵レジスタ領域４２の内容をポーリングして（Ｓ８２，Ｓ８３）、実行待機状態となっている。
【００７０】
ＣＰＵ０（３１）は、内蔵レジスタ領域４２の中の起動レジスタに相当する領域に起動信号を書き込むことにより（Ｓ７１、図１０の（１））、ＩＰシミュレータによる演算処理が開始される。このとき、演算に必要なデータは既に内蔵メモリ領域４１であるラインバッファやデータバッファに転送されているため、データ演算処理が可能な状態となっている。
【００７１】
ＣＰＵ１（３２）は、ＣＰＵ０（３１）による起動レジスタへの書き込みを検知すると、それがデータ演算処理の開始を示していれば（Ｓ８３、処理スタート）、データ演算動作を開始する。ＣＰＵ１（３２）は、共有メモリ３３の内蔵メモリ領域４１に格納されるデータに対して演算処理を行ない、その演算結果を出力領域に相当する内蔵メモリ領域４１に格納する（Ｓ８４、図１０の（２））。
【００７２】
このとき、ＣＰＵ１（３２）は、実行サイクル数カウンタを用い、実行したデータ演算処理に応じて、機能ＩＰ１７における実行サイクル数をカウントし（Ｓ８５）、その実行サイクル数を実行記録領域４３の実行サイクル数記録領域の値に加算して書き戻す（Ｓ８６、図１０の（４））。必要であれば、そのシミュレーション時間、実行箇所、処理内容などの統計情報を実行データ記録として実行記録領域４３に保存する。なお、演算処理の種別に対応して予め機能ＩＰ１７における実行サイクル数を規定しておき、その実行サイクル数を加算することによって実際の実行サイクル数を算出する。
【００７３】
このように、実行記録領域４３に実行サイクル数およびシミュレーション時間を記録し、データ演算完了後に汎用ＰＣ（ソフトウェア開発環境）２からそれらの情報を参照することによって、ＩＰシミュレータの実行時間が実際のハードウェアロジックと異なる場合でも、その実行性能の高精度な見積もりが可能となる。
【００７４】
次に、ＣＰＵ１（３２）は、起動レジスタなどのレジスタの内容を更新し（Ｓ８７、図１０の（５））、状態レジスタの内容を更新してデータ演算処理完了とし（Ｓ８８、図１０の（６））、ステップＳ８２に戻って以降の処理を繰り返す。
【００７５】
ＣＰＵ０（３１）は、状態レジスタを参照して（Ｓ７２）、データ演算処理が完了したか否かを判定する（Ｓ７３）。データ演算処理が完了していなければ（Ｓ７３，Ｎｏ）、ステップＳ７２に戻って以降の処理を繰り返す。また、データ演算処理が完了していれば（Ｓ７３，Ｙｅｓ）、データ演算動作を終了する。
【００７６】
なお、図９においては、ＣＰＵ０（３１）が、機能ＩＰ１７の実行状態を記録する状態レジスタをポーリングすることによってＩＰシミュレータのデータ演算処理完了を検知しているが、上述のようにＣＰＵ０（３１）に割り込み要求を発行することによってデータ演算完了通知を行なうことも可能である。このような完了通知の方法は、開発対象の機能ＩＰ１７の仕様に準ずる。
【００７７】
図１１は、図７に示すフローチャート中のデータ転送処理に関する部分をさらに詳細に説明するためのフローチャートである。また、図１２は、ＩＰシミュレータがデータ転送処理を行なうときのＳｏＣ１の動作を説明するための図である。以下、図１１および図１２を参照しながら、データ転送処理動作について説明する。
【００７８】
上述のように、ＣＰＵ１（３２）は、シミュレータプログラム６の実行を開始して共有メモリ３３の各領域の初期化を行ない（Ｓ１０１）、内蔵レジスタ領域４２の内容をポーリングして（Ｓ１０２，Ｓ１０３）、実行待機状態となっている。
【００７９】
ＣＰＵ０（３１）は、内蔵レジスタ領域４２に、転送されるデータ数、転送元アドレス、転送先アドレス、データの種類などのデータ転送に必要な転送パラメータを設定する（Ｓ９１、図１２の（１））。
【００８０】
ＣＰＵ１（３２）は、内蔵レジスタ領域４２の内容に変化があることを検出すると（Ｓ１０３，Ｙｅｓ）、その設定によって影響を受ける状態レジスタなどの内部状態を更新し（Ｓ１０４、図１２の（２））、再度、内蔵レジスタ領域４２の内容をポーリングして（Ｓ１０５，Ｓ１０６）、実行待機状態となる。
【００８１】
この状態で、ＣＰＵ０（３１）が、内蔵レジスタ領域４２内の転送開始レジスタに開始信号を書き込むと（Ｓ９２、図１２の（３））、ＣＰＵ１（３２）は、設定された転送パラメータに応じてデータ転送処理を開始する（Ｓ１０７、図１２の（４））。
【００８２】
データ転送処理が内蔵メモリ領域４１への書き込み処理の場合、ＣＰＵ１（３２）は、外部メモリ３の指定された転送元アドレスから転送対象データを読み出し、そのデータを共有メモリ３３のラインバッファやデータバッファである内蔵メモリ領域４１の指定された領域に書き込む。
【００８３】
また、データ転送処理が内蔵メモリ領域４１からの読み出し処理の場合、ＣＰＵ１（３２）は、内蔵メモリ領域４１の指定された領域からデータを読み出し、そのデータを外部メモリ３の指定された転送先アドレスに書き込む。
【００８４】
このデータ転送処理は、内蔵レジスタ領域４２に予め設定されたパラメータに従って実行され、所望のデータ容量のデータ転送が完了するまで繰り返される。
【００８５】
このとき、ＣＰＵ１（３２）は、転送サイクル数カウンタおよび転送データ数カウンタを用い、実行したデータ転送処理に応じて、機能ＩＰ１７における転送サイクル数およびデータ転送量をカウントし（Ｓ１０８、図１２の（５））、その転送サイクル数および転送データ量を転送記録領域４４の転送サイクル数記録領域および転送データ量記録領域の値に加算して書き戻す（Ｓ１０９、図１２の（６））。
【００８６】
必要であれば、そのシミュレーション時間、実行箇所、読み出し／書き込みの種別、転送モードなどのパラメータと、転送サイクル数、転送データ量などの統計情報とを転送データ記録として転送記録領域４４に保存する。
【００８７】
このように、転送記録領域４４に転送サイクル数、転送データ量およびシミュレーション時間を記録し、データ転送完了後に汎用ＰＣ（ソフトウェア開発環境）２からそれらの情報を参照することによって、ＩＰシミュレータの転送時間が実際のハードウェアロジックと異なる場合でも、そのデータ転送によるシステムバス１８への負荷やデータ転送時間の高精度な見積もりが可能となる。
【００８８】
ＣＰＵ１（３２）は、所望のデータ転送処理が完了すると、各内蔵レジスタ領域４２の内容を実行後の状態に更新し（Ｓ１１０、図１２の（７））、その実行完了をＣＰＵ０（３１）に通知する。
【００８９】
ＣＰＵ０（３１）は、状態レジスタを参照して（Ｓ９３）、データ転送処理が完了したか否かを判定する（Ｓ９４）。データ転送処理が完了していなければ（Ｓ９４，Ｎｏ）、ステップＳ９３に戻って以降の処理を繰り返す。また、データ転送処理が完了していれば（Ｓ９４，Ｙｅｓ）、データ転送動作を終了する。
【００９０】
なお、図１１においては、ＣＰＵ０（３１）が、機能ＩＰ１７の実行状態を記録する状態レジスタをポーリングすることによってＩＰシミュレータのデータ転送処理完了を検知しているが、上述のようにＣＰＵ０（３１）に割り込み要求を発行することによってデータ転送完了通知を行なうことも可能である。このような完了通知の方法は、開発対象の機能ＩＰ１７の仕様に準ずる。
【００９１】
以上説明したように、本実施の形態におけるシミュレーション装置によれば、開発対象の機能ＩＰの機能をＩＰシミュレータで実現し、その他の既存モジュール、ユーザプログラムが動作するターゲットＣＰＵ、システムバスなどは実機のものを用いるようにしたので、精度の高いシミュレーションを実現することが可能となった。
【００９２】
また、機能ＩＰ１７の内蔵レジスタを共有メモリ３３の相対アドレスが同じ領域にマッピングするようにしたので、ユーザプログラム７がＩＰシミュレータを制御する場合でも、ユーザプログラム７が機能ＩＰ１７を制御する場合でも、ベースアドレスを変更するのみで同じプログラムを使用することが可能となった。
【００９３】
また、共有メモリ３３に実行記録領域４３および転送記録領域４４を設け、ＩＰシミュレータが実行サイクル数、データ転送サイクル数、データ転送量などの情報をそれらの領域に記録するようにしたので、機能ＩＰ１７の性能評価やシステムバス１８の負荷評価などを高い精度で行なうことが可能となった。
【００９４】
さらには、ＳｏＣがマルチＣＰＵ構成であり、かつ共有メモリが搭載されていれば、その他のモジュールなどのハードウェア構成にかかわらずＩＰシミュレータを実装することができるため、既存のＬＳＩをＩＰシミュレータとして活用することが可能である。したがって、専用のシミュレーション装置を必要とせず、低コストでシミュレータを用いたソフトウェア開発環境を提供することが可能となった。
【００９５】
（第２の実施の形態）
第１の実施の形態におけるシミュレーション装置は、単一のＣＰＵがシミュレータプログラムを実行することによってＩＰシミュレータを実現するものであった。本発明の第２の実施の形態におけるシミュレーション装置は、複数のＣＰＵがシミュレータプログラムを実行することによってＩＰシミュレータを実現するものである。
【００９６】
図１３は、本発明の第２の実施の形態におけるシミュレーション装置を含んだシステムの一例を示す図である。このシステムは、ＳｏＣ１と、ソフトウェア開発環境としての汎用ＰＣ２と、シミュレータプログラム（ＣＰＵ１〜ＣＰＵＮ）６−１〜６−Ｎおよびユーザプログラム（ＣＰＵ０）７が記憶される外部メモリ３とを含む。
【００９７】
また、ＳｏＣ１は、デバッグ回路１３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６と、ＣＰＵ０（３１）と、ＣＰＵ１〜Ｎ（３２−１〜３２−Ｎ）と、共有メモリ３３とを含む。なお、ＣＰＵ０（３１）と、ＣＰＵ１〜Ｎ（３２−１〜３２−Ｎ）と、共有メモリ３３と、外部メモリ３と、周辺Ｉ／Ｏ１４および１５と、機能ＩＰ１６とが、システムバス１８を介して接続される。なお、図５に示すシステムと同じ構成および機能を有する部分については、同じ参照番号を付すものとする。
【００９８】
ＣＰＵ１〜Ｎ（３２−１〜３２−Ｎ）がそれぞれ、シミュレータプログラム６−１〜６−Ｎを実行することによってＩＰシミュレータを実現する。この場合、データ演算処理を２つ以上に分割し、それぞれのデータ演算処理を２つ以上のＣＰＵに実行させることによってＩＰシミュレータの実行時間を削減し、より実際の機能ＩＰ１７に近い動作とすることができる。
【００９９】
なお、処理を分割して複数のＣＰＵに実行させる場合でも、第１の実施の形態におけるＩＰシミュレータと同様に、内蔵メモリ領域４１、内蔵レジスタ領域４２、実行記録領域４３および転送記録領域４４が共有メモリ３３にマッピングされるため、ユーザプログラム７として第１の実施の形態において説明したのと同様のプログラムを用いることが可能である。
【０１００】
以上説明したように、本実施の形態におけるシミュレーション装置によれば、シミュレータプログラムを分割して複数のＣＰＵに実行させるようにしたので、第１の実施の形態において説明した効果に加えて、ＩＰシミュレータの実行時間を削減し、より実際の機能ＩＰ１７に近い動作とすることが可能となった。
【０１０１】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０２】
１  ＳｏＣ、２  汎用ＰＣ、３  外部メモリ、４，７  ユーザプログラム、５  処理データ、６  シミュレータプログラム、１１，３１，３２  ＣＰＵ、１２  内部メモリ、１３  デバッグ回路、１４，１５  周辺Ｉ／Ｏ、１６  機能ＩＰ、１７  新規ＩＰ、１８  システムバス、１９  割り込み回路、２０  内蔵メモリ、２１  内蔵レジスタ、３３  共有メモリ、４１  内蔵メモリ領域、４２  内蔵レジスタ領域、４３  実行記録領域、４４  転送記録領域。
【図１】
2012155519.tif 000003
【図２】
2012155519.tif 000004
【図３】
2012155519.tif 000005
【図４】
2012155519.tif 000006
【図５】
2012155519.tif 000007
【図６】
2012155519.tif 000008
【図７】
2012155519.tif 000009
【図８】
2012155519.tif 000010
【図９】
2012155519.tif 000011
【図１０】
2012155519.tif 000012
【図１１】
2012155519.tif 000013
【図１２】
2012155519.tif 000014
【図１３】
2012155519.tif 000015