JP2005018623A - シミュレーション装置およびシミュレーション方法 - Google Patents
シミュレーション装置およびシミュレーション方法 Download PDFInfo
- Publication number
- JP2005018623A JP2005018623A JP2003185464A JP2003185464A JP2005018623A JP 2005018623 A JP2005018623 A JP 2005018623A JP 2003185464 A JP2003185464 A JP 2003185464A JP 2003185464 A JP2003185464 A JP 2003185464A JP 2005018623 A JP2005018623 A JP 2005018623A
- Authority
- JP
- Japan
- Prior art keywords
- simulation
- embedded software
- hardware device
- time
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】SWを組み込んだCPU模擬ブロックとHWモデルとを並列動作させることにより高速なHW/SW協調シミュレーションを実現する。
【解決手段】シミュレーション装置は、インストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語に対応してソフトウェア1とハードウェア2,3とにより協調シミュレーションを可能とするシミュレータ10と、予め定められたシーケンスに従って、シミュレータ10に対して協調シミュレーションを可能とするスケジューラ6と、ソフトウェア1からハードウェア2,3へのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア2,3とソフトウェア1間の並列実行を実現するライトアクセス関数7とを備えたものである。
【選択図】 図1
【解決手段】シミュレーション装置は、インストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語に対応してソフトウェア1とハードウェア2,3とにより協調シミュレーションを可能とするシミュレータ10と、予め定められたシーケンスに従って、シミュレータ10に対して協調シミュレーションを可能とするスケジューラ6と、ソフトウェア1からハードウェア2,3へのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア2,3とソフトウェア1間の並列実行を実現するライトアクセス関数7とを備えたものである。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、例えば、ターゲットCPU上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置に関するものである。
【0002】
【従来の技術】
プロセッサを内蔵したシステム・オン・チップ(SoC)開発では、ハードウェア(HW)をC言語あるいはシステムレベル設計言語プログラム等で模擬したHWモデルとターゲットCPU上で動作するソフトウェア(SW)を、当該システムレベル設計言語に対応したシミュレータを利用して開発マシン上で並列動作させるシミュレーション装置が用いられている。
【0003】
以下に、従来技術と問題点について図13を参照して説明する。
図13(a)は、ターゲットCPU部分に相当するモデルとして、命令レベルのシミュレータであるISS(Instruction Set Simulator)133を利用してHWモデル131とSW132との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【0004】
また、図13の(b)は、高速化を目的としてISSを使わずにHWモデル135とCPU模擬ブロック136との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【0005】
図14は、図13(b)のシミュレーション環境の構成図である。CPU模擬ブロック141およびHWモデル142、143はシミュレータ上のタスクとして実装される。CPU模擬ブロック141にはSW132が登録されている。図15に検証環境の全体シミュレーションのシーケンス図を示す。
【0006】
図15において、T91時点でスケジューラ146からHWモデル143に動作の指令があると、T91〜T92時点までHWモデル143は所定の動作を実行する。T92時点でHWモデル143からスケジューラ146に動作の終了が伝えられると、T93時点でスケジューラ146から141のCPU模擬ブロックに動作の指令があると、T93〜T94時点までCPU模擬ブロックは連続登録されたSWを実行する。
【0007】
ここで、151に示すように、スケジューラ146から141のCPU模擬ブロックに割り当てたタスクが実行権を独占するため、141のCPU模擬ブロックとHWモデル143,142とを並列動作させることができなくなり、結果としてHWモデル143,142とSW132とを並列動作させることができない。
【0008】
特許文献1には、高い信頼性の論理検証を行うことができるハードウェアシミュレーション装置を提供することを目的として、ハードウェアを制御する論理検証用の命令を記述したテストプログラムをコンパイルして生成されたオブジェクトプログラムに基づいて、ハードウェア記述言語を用いて記述された前記ハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、前記シミュレーションモデルにイベントを発生させるイベント発生装置であって、前記テストプログラム中に記述され、前記オブジェクトプログラムには影響を与えない形式でイベントの発生を指示するイベント発生キーワードを用いて、コンパイル時に、イベント情報ファイルを生成するコンパイラと、前記イベント情報ファイルに基づいて、手続き型の高級プログラミング言語を用いて記述されたイベントに応じたユーザタスクを生成し、当該ユーザタスクを登録するユーザタスク生成手段と、前記ユーザタスク生成手段と前記シミュレーションモデルとの間のインタフェースと、前記オブジェクトプログラムに応じた前記シミュレーションモデルの動作を監視し、実行中の命令を特定する動作監視手段と、前記動作監視手段の監視結果に基づいて、前記テストプログラムに記述されたイベントが同期すべき命令が実行されるときに、当該イベントに対応するユーザタスクを前記インタフェースを介して前記ユーザタスク生成手段から前記シミュレーションモデルに読み出して当該イベントをスケジュールするスケジュール手段とを有するイベント発生装置が開示されている。
【0009】
【特許文献1】
特開平11−110429号公報
【0010】
【発明が解決しようとする課題】
しかし、上述した従来の図13(a)に示すISSを利用したミュレーション環境は、スケジューラ134とISS133間で実行権の受け渡しが頻繁に発生するため、シミュレーション速度が遅く、大規模SoCやマルチCPUシステムへの適用、また、上記をSW開発環境として利用する際に問題となっていたという不都合があった。
【0011】
また、図13(b)に示すISSを利用しないシミュレーション環境は、この場合、HWモデル135の機能をシミュレータ上のタスクに実装した場合、ターゲットCPUのSW136にはシミュレータのタスク実行権を開放する記述がないために、HWモデル135と並列動作させることができないという不都合があった。
【0012】
また、HWモデル142,143の機能をタスクとして実装せず、関数として実装した場合には、HWのステートをSW側より観測することができないため、検証環境として十分な機能を持たせられない。さらに、SWのポーリング処理、割込み処理も適切に再現できないという不都合があった。
【0013】
また、特許文献1では、ハードウェア記述言語を用いて記述されたハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、イベント発生キーワードを用いて、コンパイラによりコンパイル時にイベント情報ファイルを生成することにより、テストプログラム中の命令が実行されるタイミングに同期してイベントがスケジュールされるものであり、本願発明のように、141のCPU模擬ブロックとHWモデル143,142とを並列動作させるようにするものではない。
【0014】
そこで、本発明は、かかる点に鑑みてなされたものであり、本発明は上記の問題を解決し、SWがタスクに登録されたCPU模擬ブロックとHWモデルとを並列動作させるようにすることにより高速なHW/SW協調シミュレーションを実現するシミュレーション装置を提供することを課題とする。
【0015】
【課題を解決するための手段】
本発明のシミュレーション装置は、ターゲットCPUの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語で表現されたハードウェア・デバイス・モデルと組込みソフトウェアとにより協調シミュレーションを可能とするシミュレーション手段と、優先度設定が可能なラウンドロビン方式でスケジューリングするスケジュール手段と、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア・デバイス・モデルと上記組込みソフトウェア間の並列実行をハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放手段とを備えたものである。
【0016】
従って本発明によれば、以下の作用をする。
システムレベル設計言語とそれに対応したシミュレーション手段を利用して、ターゲットCPUのプログラムとハードウェア・デバイス・モデルで協調シミュレーションを行う場合において、組込みソフトウェアとハードウェア・デバイス・モデルの並列実行を可能にするため、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアはシミュレーション実行権を開放する。
【0017】
また、割込み処理において、割込み処理期間の連続性を確保するために、シミュレーション手段のタスク優先度を制御することで、割込みを利用するシステムの検証環境を実現する。
【0018】
また、組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーションの実行権を開放する記述を組み合わせた関数を実装し、検証対象の組込みソフトウェア内で変数のポーリングを行っている場合に組込みソフトウェアのポーリング動作を模擬する。
【0019】
また、組込みソフトウェアを実行するブロックを複数用意することで、マルチCPUシステムにおけるHW/SW協調シミュレーション環境を実現する。
【0020】
これにより、インストラクション・セット・シミュレータを使わないハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションの手法を確立し、シミュレーションの高速化を実現する。また、上述したことを拡張しマルチCPUシステムにおけるハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションを可能とする。
【0021】
【発明の実施の形態】
以下に、本発明の実施の形態について、適宜、図面を参照しながら説明する。
図1は、本発明の実施の形態に適用されるシミュレーション方法によるISSを使わないHW/SW協調シミュレーション環境の構成図である。
【0022】
HW/SW協調シミュレータ10は、システム・オン・チップ(SoC)のターゲットCPUを模擬したCPU模擬ブロック1と、システム・オン・チップ(SoC)内のHWブロックを模擬したHWモデルブロック2,3と、各ブロックの実行順序を制御するスケジューラ6から構成される。
HWモデルブロック2,3、CPU模擬ブロック1は複数で構成することも可能である。
【0023】
各ブロックはシステムレベル設計言語およびC、C++言語で表現されることを特徴とし、ブロックはモデルの振る舞いを規定するタスク4と、ブロック間の通信を制御するポート部5より構成されている。タスク4はポート部5を介して外部と通信を行う。
【0024】
スケジューラ6は各ブロックのタスクをラウンドロビン方式でスケジューリングする。また、各タスクに優先度を設定することが可能である。スケジューラ6のスケジューリング方法はたとえば、次のようになる。
【0025】
全てのブロックのタスク優先度が同じ場合は、HW_A(3)→HW_B(2)→CPU模擬ブロック1→HW_A(3)→HW_B(2)と各ブロックのタスクに均等に実行権を与える。実行権を与えられたタスクは実行状態となる。
【0026】
一方、優先度が異なる場合は、スケジューラ6は優先度の高いタスクにのみ実行権を与える。もっとも優先度が高いタスクが複数ある場合は、それらのタスクに対して上記の循環的なスケジューリングを行う。
【0027】
また、本環境では実行権をもつタスクより、スケジューラ6に対して実行権を放棄する命令を発効することが可能であり、この命令をスケジューラ6が受け取った場合は、他のタスクに実行権を与える。
【0028】
HWブロック2,3のタスクには、ある時間領域に行う処理が記述されており、HWブロック2,3の並列性を模擬するために、処理完了後にスケジューラ6に対し実行権を放棄する命令が組み込まれている。CPU模擬ブロック1のタスクには実機に組み込まれるソフトウェアが登録されており、ポート部にはHWブロック2,3より割り込みを受けるポート部が実装されている。
【0029】
ここで、CPU模擬ブロック1には、組込みソフトウェアのCPU模擬ブロック1からハードウェア・デバイス・モデルのHWブロック2,3へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのCPU模擬ブロック1はシミュレーション実行権を開放するライトアクセス関数7が設けられる。
【0030】
上述した従来の技術では、HWモデルブロック2,3との連携を考慮して実装されていないため、実行権を保持しつづけてしまう結果、割込みを受けてHWモデルブロック2,3と連携動作する動きを模擬できなかったが、本発明の実施の形態では、このようにして、34で示すように、1シミュレーション時間内に各ブロックに均等に実行権が割り当てられている。
【0031】
本発明の実施の形態では、CPU模擬ブロック1内のレジスタアクセス関数を図1,2に示すレジスタアクセス関数7で置き換えることにより、HWモデルブロック2,3と連携動作させることができる。
【0032】
図2は本環境のレジスタアクセス関数であり、図2(a)はレジスタのリードアクセス関数の実装例、図2(b)はレジスタのライトアクセス関数の実装例である。
【0033】
図2(a)は22で示すレジスタのリードアクセス関数に、シミュレーションの実行権を放棄する命令21を組み込んでいる例を示す。図2(b)は23で示すレジスタへのライトアクセス関数に、シミュレーションの実行権を放棄する命令24を組み込んでいる例を示す。
【0034】
図3は、SWからHWモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【0035】
図3は図1の検証環境の全体シミュレーションシーケンスを示している。まず、T1時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T1〜T2時点までHW_A3のタスク4に登録された処理が実行される。
【0036】
このHW_A3の処理完了後のT2時点に、HW_A3の実行権が放棄され、その後T3時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T3〜T4時点までCPU模擬ブロック1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0037】
T4時点で、CPU模擬ブロック1からHW_A3に図1に示すレジスタアクセス8によりライトアクセス31があると、T5時点でHW_A3からCPU模擬ブロック1にライトアクセス関数7の実行要求がされる。これにより、CPU模擬ブロック1にライトアクセス関数7の実行をして、T6時点でCPU模擬ブロック1の実行権が放棄され、その後T7時点でスケジューラ6がHW_B2に実行権を与える。これにより、T7〜T8時点までHW_B2のタスクに登録された処理が実行される。
【0038】
次に、T9時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T9〜T11時点までHW_A3のタスク4に登録された処理が実行される。
【0039】
ここで、T10時点で、HW_A3からCPU模擬ブロック1は割り込み33を受けたとき、このHW_A3の処理完了後のT11時点に、HW_A3の実行権が放棄され、その後T12時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T12〜T13時点までHW_A3からの割り込み33に基づいてCPU模擬ブロック1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0040】
T13時点で割り込み33に基づく処理の実行が終了すると、CPU模擬ブロック1の実行権が放棄され、その後T14時点でスケジューラ6がHW_B2に実行権を与える。これにより、T14〜T15時点までHW_B2のタスクに登録された処理が実行される。
【0041】
図3は図2のレジスタアクセス関数を利用した場合の全体シュミレーションフローを示している。HWブロック2,3からスケジューラ6方向の矢印はHWブロック2,3のタスクに組み込まれた実行権放棄命令による実行権の委譲を示しており、スケジューラ6から各ブロック1,2,3への矢印はスケジューラ6が持っているスケジューリング方式に基づく実行権の委譲を示している。
【0042】
CPU模擬ブロック1から、スケジューラ6への矢印は、レジスタアクセス関数7に組み込まれた実行権放棄命令によるものである。この結果、ある時間領域で見たときに各ブロックに均等に実行権が与えられており、HWブロック2,3が起動され、SWブロックのCPU模擬ブロック1へ割込みがかかるといったHWブロック2,3とSWブロックのCPU模擬ブロック1の連携動作を模擬することが可能となる。
【0043】
しかしながら、レジスタアクセス関数7に以上のような仕組みを組み込むと以下の現象が生じてしまう。
【0044】
図4は割込みが発生した場合のシーケンスを示している。
T21時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T21〜T22時点までHW_A3のタスク4に登録された処理が実行される。
【0045】
本システムでは、T22時点でHWブロック3よりCPU模擬ブロック1に対して割込み41をかけると、42で示すように、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み41をかけたHWブロック3のタスク4で割込みハンドラ関数43をコールすることで割込みを模擬している。
【0046】
これにより、T23〜T24時点まで割込みハンドラ関数43はHWブロック2に対して処理を実行して、T25時点でHWブロック3の実行権が放棄される。これは、44で示すように、割込みハンドラ内でHWブロック2にアクセスした場合、割込みハンドラが中断され、実行権を放棄してしまうためである。
【0047】
その後T26時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T26〜T27時点まで、45で示すように、割込みハンドラ処理中にもかかわらず、CPU模擬ブロック1の処理が再開される。
【0048】
通常、割込みハンドラ関数43内では、割込み信号のクリアなどレジスタのアクセスを行っている。先に提示したレジスタアクセス関数7を呼び出すと、実行権の放棄が行われてしまい、割込みハンドラ関数43が終了していない状況でCPU模擬ブロック1が実行状態になってしまい、割込みを模擬できない状況が生じる。
【0049】
そこで、割込み処理においてHWブロック3より呼び出される割込みハンドラ関数43を、図5に示す割り込み処理模擬関数で置き換えることで、割込み処理を模擬することができる。
【0050】
図5において、ステップS1で、自タスクID取得して、ステップS2で自タスクの優先度を取得して、ステップS3で自タスクの優先度を最高優先度に設定して、割込み処理の前処理51を行う。そして、ステップS4で、割込みハンドラ関数をコールする。その後、ステップS5で、自タスクの優先度を元に戻して、割込み処理の後処理52を行う。
【0051】
図5では、実機SWブロックの割込みハンドラ関数に、割込み処理の前処理51と割込み処理の後処理52を組み込んでいる。割込み処理の前処理701ではタスク優先度をシステム内で最高優先度に設定している。
【0052】
この結果、レジスタアクセス関数7に組み込まれた実行権放棄命令がスケジューラ6に送られた場合においても、再び実行権が与えられるため、割込みハンドラ関数の連続性を確保することができる。割込み処理の後処理では、タスク優先度を元の優先度に戻している。
【0053】
図8に割込み処理模擬関数を利用した場合の割込み処理シーケンスを示す。
T31時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T31〜T32時点までHW_A3のタスク4に登録された処理が実行される。
【0054】
本システムでは、T32時点でHWブロック3よりCPU模擬ブロック1に対して割込み61をかけると、62で示すように、T33時点でHW_A3により割込み処理の前処理を行った後に、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み61をかけたHWブロック3のタスク4で割込みハンドラ関数64をコールして、その後、65で示すように、T38時点までHW_A3により割込み処理の後処理を行うことで、66で示すように、割込み模擬関数を実行している。
【0055】
これにより、63で示すように、T34〜T35時点まで割込みハンドラ64内でHWブロック2に対してアクセスして処理を実行しても、T36時点でHWブロック3の実行権が放棄された後に、T37時点でスケジューラ6が再びHWブロック3に実行権を与え、連続性を確保できる。
【0056】
これにより、T39〜T40時点まで、67で示すように、割込みハンドラ64が終了した後、CPU模擬ブロック1の処理が再開される。
【0057】
SWブロックへのプログラムの実装として例えば図8の81に示したグローバル変数へのポーリングが行われる場合がある。
【0058】
図7はSWで変数のポーリングした場合のシーケンスを示している。
T41時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T41〜T42時点までHW_A3のタスク4に登録された処理が実行される。
【0059】
その後T43時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T43〜T44時点まで、CPU模擬ブロック1の変数へのポーリングが行われるプログラムの実装が行われる。
【0060】
ここで、変数の参照71をする際に、72で示すように、SWブロックのCPU模擬ブロック1に割り当てたタスクが実行権を保持し続けるため、シミュレーションが止まってしまう。
【0061】
この問題に対処するために、図8に81で示した変数のポーリング関数を作り、図9に示すようなポーリング関数を利用したコード91への置き換えを行った。
【0062】
この結果、図9で示すように、SWブロックのCPU模擬ブロック1のポーリング中も各HWブロックのCPU模擬ブロック1に実行権が与えられるようになり、ポーリング処理を模擬することができるようにすることができる。
【0063】
図10は、SWの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンス図である。
【0064】
T51時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T51〜T52時点までHW_A3のタスク4に登録された処理が実行される。
【0065】
その後T53時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T53〜T54時点まで、CPU模擬ブロック1の変数へのポーリングが行われるプログラムの実装を行った後に、101で示すように、実行権の開放が行われる。
【0066】
これにより、T55時点でスケジューラ6はHWブロックであるHW_B2を実行状態とし、T55〜T56時点までHW_B2のタスクに登録された処理が実行される。
【0067】
T57時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T57〜T58時点までHW_A3のタスク4に登録された処理が実行される。
【0068】
T59時点でスケジューラ6はCPU模擬ブロック1の変数の参照102を行う。
【0069】
上述した実行権のリリース101および変数の参照102は、ポーリング関数103により実行される。
【0070】
その後に、T60時点で、104で示すように、CPU模擬ブロック1の実行権の開放が行われる。
【0071】
上述した実行権のリリース104は、ポーリング関数105により実行される。
【0072】
その後に、T61時点で、106で示すように、条件に合致するまでポーリング関数が呼ばれ続ける。
【0073】
図11はマルチCPUの環境に拡張した例を示している。
CPU模擬ブロック(1)1、(2)111を複数用意し、それらのタスク部には各ターゲットCPU用の実機に組み込まれるソフトウェアが登録される。
【0074】
ここで、CPU模擬ブロック(1)1、(2)111には、組込みソフトウェアのCPU模擬ブロック(1)1、(2)111からハードウェア・デバイス・モデルのHWブロック2,3へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのCPU模擬ブロック(1)1、(2)111はシミュレーション実行権を開放するライトアクセス関数7,112が設けられる。
【0075】
図12はマルチCPU拡張した場合の全体シミュレーションシーケンスを示している。
まず、T71時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T71〜T72時点までHW_A3のタスク4に登録された処理が実行される。
【0076】
このHW_A3の処理完了後のT72時点に、HW_A3の実行権が放棄され、その後T73時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T73〜T74時点までCPU模擬ブロック(1)1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0077】
T73時点でHW_A3からCPU模擬ブロック1にライトアクセス関数7の実行要求がされると、CPU模擬ブロック1はライトアクセス関数7の実行をして、121で示すように、T4時点でCPU模擬ブロック1の実行権が放棄され、その後T75時点でスケジューラ6がHW_B2に実行権を与える。これにより、T75〜T76時点までHW_B2のタスクに登録された処理が実行される。
【0078】
次に、T77時点でスケジューラ6はCPU模擬ブロック(2)111に実行権を与える。これにより、T77〜T78時点までCPU模擬ブロック(2)111のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0079】
T76時点でHW_B2からCPU模擬ブロック1にライトアクセス関数112の実行要求がされると、CPU模擬ブロック(2)111はライトアクセス関数112の実行をして、122で示すように、T78時点でCPU模擬ブロック(2)112の実行権が放棄され、その後T79時点でスケジューラ6がHW_A3に実行権を与える。これにより、T79〜T80時点までHW_A3のタスクに登録された処理が実行される。
【0080】
なお、上述した割り込みの処理または変数のポーリングの処理も同様に適用される。
【0081】
CPU模擬ブロック(1)1、(2)111からの実行権の放棄121,122はライトアクセス関数7,112であるレジスタアクセス関数あるいはポーリング関数をきっかけとして行われ、HWブロック2,3からの実行権の放棄はタスク部に組み込まれた実行権放棄命令をきっかけとして行われる。このように、マルチCPUのHW/SW協調シミュレーション環境を容易に実現することができる。
【0082】
上述した本発明の実施の形態は、これに限らず、本発明の特許請求の範囲を逸脱しない限り、適宜、他の構成をとりうることは言うまでもない。
【0083】
【発明の効果】
この発明によれば、HW/SW協調シミュレータ上で、インストラクション・セット・シミュレータ(ISS)を使わずに、ターゲットCPU用に記述されたSWとHWモデルを組み合わせた協調シミュレーションを行うことができるという効果を奏する。
【0084】
また、この発明によれば、シミュレータとインストラクション・セット・シミュレータ(ISS)間の実行権の受け渡しがないため、高速にHWとSWの協調シミュレーションを可能とすることができるという効果を奏する。
【0085】
また、この発明によれば、アプリケーションソフトウェア、ドライバソフトウェアを含めたソフトウェア全体の検証を、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【0086】
また、この発明によれば、複数CPUを持つシステム・オン・チップ(SoC)においても、高速にHWとSWの協調シミュレーションを、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の実施の形態に適用されるシミュレーション方法によるISSを使わないHW/SW協調シミュレーション環境の構成図である。
【図2】本環境のレジスタアクセス関数であり、図2(a)はレジスタのリードアクセス関数の実装例、図2(b)はレジスタのライトアクセス関数の実装例である。
【図3】SWからHWモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【図4】割込みが発生した場合の全体シミュレーションを示すシーケンス図である。
【図5】割込み処理を模擬する関数を用いた処理を示すシーケンス図である。
【図6】タスク優先度コントロールによる割込みの連続性が確保されている割込み処理シーケンスを示すシーケンス図である。
【図7】SWで変数のポーリングされた場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図8】変数のポーリング関数実装例を示す図である。
【図9】ポーリング関数を利用したコード例を示す図である。
【図10】SWの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図11】マルチCPUシステムに拡張した場合の構成例を示す図である。
【図12】マルチCPU拡張時の全体シミュレーションシーケンスを示すシーケンス図である。
【図13】従来のシミュレーション環境を示す図であり、図13(a)はISSを利用したシミュレーション環境、図13(b)はISSを利用しないシミュレーション環境である。
【図14】従来のISSを使わないHW/SW協調シミュレーション環境の構成図である。
【図15】検証環境の全体シミュレーションシーケンスを示すシーケンス図である。
【符号の説明】
1……SWブロック(CPU模擬ブロック)、2、3……HWブロック、4……タスク、5……ポート、6……スケジューラ、7……ライトアクセス関数、8……レジスタアクセス、9……割込み
【発明の属する技術分野】
本発明は、例えば、ターゲットCPU上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置に関するものである。
【0002】
【従来の技術】
プロセッサを内蔵したシステム・オン・チップ(SoC)開発では、ハードウェア(HW)をC言語あるいはシステムレベル設計言語プログラム等で模擬したHWモデルとターゲットCPU上で動作するソフトウェア(SW)を、当該システムレベル設計言語に対応したシミュレータを利用して開発マシン上で並列動作させるシミュレーション装置が用いられている。
【0003】
以下に、従来技術と問題点について図13を参照して説明する。
図13(a)は、ターゲットCPU部分に相当するモデルとして、命令レベルのシミュレータであるISS(Instruction Set Simulator)133を利用してHWモデル131とSW132との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【0004】
また、図13の(b)は、高速化を目的としてISSを使わずにHWモデル135とCPU模擬ブロック136との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【0005】
図14は、図13(b)のシミュレーション環境の構成図である。CPU模擬ブロック141およびHWモデル142、143はシミュレータ上のタスクとして実装される。CPU模擬ブロック141にはSW132が登録されている。図15に検証環境の全体シミュレーションのシーケンス図を示す。
【0006】
図15において、T91時点でスケジューラ146からHWモデル143に動作の指令があると、T91〜T92時点までHWモデル143は所定の動作を実行する。T92時点でHWモデル143からスケジューラ146に動作の終了が伝えられると、T93時点でスケジューラ146から141のCPU模擬ブロックに動作の指令があると、T93〜T94時点までCPU模擬ブロックは連続登録されたSWを実行する。
【0007】
ここで、151に示すように、スケジューラ146から141のCPU模擬ブロックに割り当てたタスクが実行権を独占するため、141のCPU模擬ブロックとHWモデル143,142とを並列動作させることができなくなり、結果としてHWモデル143,142とSW132とを並列動作させることができない。
【0008】
特許文献1には、高い信頼性の論理検証を行うことができるハードウェアシミュレーション装置を提供することを目的として、ハードウェアを制御する論理検証用の命令を記述したテストプログラムをコンパイルして生成されたオブジェクトプログラムに基づいて、ハードウェア記述言語を用いて記述された前記ハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、前記シミュレーションモデルにイベントを発生させるイベント発生装置であって、前記テストプログラム中に記述され、前記オブジェクトプログラムには影響を与えない形式でイベントの発生を指示するイベント発生キーワードを用いて、コンパイル時に、イベント情報ファイルを生成するコンパイラと、前記イベント情報ファイルに基づいて、手続き型の高級プログラミング言語を用いて記述されたイベントに応じたユーザタスクを生成し、当該ユーザタスクを登録するユーザタスク生成手段と、前記ユーザタスク生成手段と前記シミュレーションモデルとの間のインタフェースと、前記オブジェクトプログラムに応じた前記シミュレーションモデルの動作を監視し、実行中の命令を特定する動作監視手段と、前記動作監視手段の監視結果に基づいて、前記テストプログラムに記述されたイベントが同期すべき命令が実行されるときに、当該イベントに対応するユーザタスクを前記インタフェースを介して前記ユーザタスク生成手段から前記シミュレーションモデルに読み出して当該イベントをスケジュールするスケジュール手段とを有するイベント発生装置が開示されている。
【0009】
【特許文献1】
特開平11−110429号公報
【0010】
【発明が解決しようとする課題】
しかし、上述した従来の図13(a)に示すISSを利用したミュレーション環境は、スケジューラ134とISS133間で実行権の受け渡しが頻繁に発生するため、シミュレーション速度が遅く、大規模SoCやマルチCPUシステムへの適用、また、上記をSW開発環境として利用する際に問題となっていたという不都合があった。
【0011】
また、図13(b)に示すISSを利用しないシミュレーション環境は、この場合、HWモデル135の機能をシミュレータ上のタスクに実装した場合、ターゲットCPUのSW136にはシミュレータのタスク実行権を開放する記述がないために、HWモデル135と並列動作させることができないという不都合があった。
【0012】
また、HWモデル142,143の機能をタスクとして実装せず、関数として実装した場合には、HWのステートをSW側より観測することができないため、検証環境として十分な機能を持たせられない。さらに、SWのポーリング処理、割込み処理も適切に再現できないという不都合があった。
【0013】
また、特許文献1では、ハードウェア記述言語を用いて記述されたハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、イベント発生キーワードを用いて、コンパイラによりコンパイル時にイベント情報ファイルを生成することにより、テストプログラム中の命令が実行されるタイミングに同期してイベントがスケジュールされるものであり、本願発明のように、141のCPU模擬ブロックとHWモデル143,142とを並列動作させるようにするものではない。
【0014】
そこで、本発明は、かかる点に鑑みてなされたものであり、本発明は上記の問題を解決し、SWがタスクに登録されたCPU模擬ブロックとHWモデルとを並列動作させるようにすることにより高速なHW/SW協調シミュレーションを実現するシミュレーション装置を提供することを課題とする。
【0015】
【課題を解決するための手段】
本発明のシミュレーション装置は、ターゲットCPUの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語で表現されたハードウェア・デバイス・モデルと組込みソフトウェアとにより協調シミュレーションを可能とするシミュレーション手段と、優先度設定が可能なラウンドロビン方式でスケジューリングするスケジュール手段と、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア・デバイス・モデルと上記組込みソフトウェア間の並列実行をハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放手段とを備えたものである。
【0016】
従って本発明によれば、以下の作用をする。
システムレベル設計言語とそれに対応したシミュレーション手段を利用して、ターゲットCPUのプログラムとハードウェア・デバイス・モデルで協調シミュレーションを行う場合において、組込みソフトウェアとハードウェア・デバイス・モデルの並列実行を可能にするため、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアはシミュレーション実行権を開放する。
【0017】
また、割込み処理において、割込み処理期間の連続性を確保するために、シミュレーション手段のタスク優先度を制御することで、割込みを利用するシステムの検証環境を実現する。
【0018】
また、組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーションの実行権を開放する記述を組み合わせた関数を実装し、検証対象の組込みソフトウェア内で変数のポーリングを行っている場合に組込みソフトウェアのポーリング動作を模擬する。
【0019】
また、組込みソフトウェアを実行するブロックを複数用意することで、マルチCPUシステムにおけるHW/SW協調シミュレーション環境を実現する。
【0020】
これにより、インストラクション・セット・シミュレータを使わないハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションの手法を確立し、シミュレーションの高速化を実現する。また、上述したことを拡張しマルチCPUシステムにおけるハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションを可能とする。
【0021】
【発明の実施の形態】
以下に、本発明の実施の形態について、適宜、図面を参照しながら説明する。
図1は、本発明の実施の形態に適用されるシミュレーション方法によるISSを使わないHW/SW協調シミュレーション環境の構成図である。
【0022】
HW/SW協調シミュレータ10は、システム・オン・チップ(SoC)のターゲットCPUを模擬したCPU模擬ブロック1と、システム・オン・チップ(SoC)内のHWブロックを模擬したHWモデルブロック2,3と、各ブロックの実行順序を制御するスケジューラ6から構成される。
HWモデルブロック2,3、CPU模擬ブロック1は複数で構成することも可能である。
【0023】
各ブロックはシステムレベル設計言語およびC、C++言語で表現されることを特徴とし、ブロックはモデルの振る舞いを規定するタスク4と、ブロック間の通信を制御するポート部5より構成されている。タスク4はポート部5を介して外部と通信を行う。
【0024】
スケジューラ6は各ブロックのタスクをラウンドロビン方式でスケジューリングする。また、各タスクに優先度を設定することが可能である。スケジューラ6のスケジューリング方法はたとえば、次のようになる。
【0025】
全てのブロックのタスク優先度が同じ場合は、HW_A(3)→HW_B(2)→CPU模擬ブロック1→HW_A(3)→HW_B(2)と各ブロックのタスクに均等に実行権を与える。実行権を与えられたタスクは実行状態となる。
【0026】
一方、優先度が異なる場合は、スケジューラ6は優先度の高いタスクにのみ実行権を与える。もっとも優先度が高いタスクが複数ある場合は、それらのタスクに対して上記の循環的なスケジューリングを行う。
【0027】
また、本環境では実行権をもつタスクより、スケジューラ6に対して実行権を放棄する命令を発効することが可能であり、この命令をスケジューラ6が受け取った場合は、他のタスクに実行権を与える。
【0028】
HWブロック2,3のタスクには、ある時間領域に行う処理が記述されており、HWブロック2,3の並列性を模擬するために、処理完了後にスケジューラ6に対し実行権を放棄する命令が組み込まれている。CPU模擬ブロック1のタスクには実機に組み込まれるソフトウェアが登録されており、ポート部にはHWブロック2,3より割り込みを受けるポート部が実装されている。
【0029】
ここで、CPU模擬ブロック1には、組込みソフトウェアのCPU模擬ブロック1からハードウェア・デバイス・モデルのHWブロック2,3へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのCPU模擬ブロック1はシミュレーション実行権を開放するライトアクセス関数7が設けられる。
【0030】
上述した従来の技術では、HWモデルブロック2,3との連携を考慮して実装されていないため、実行権を保持しつづけてしまう結果、割込みを受けてHWモデルブロック2,3と連携動作する動きを模擬できなかったが、本発明の実施の形態では、このようにして、34で示すように、1シミュレーション時間内に各ブロックに均等に実行権が割り当てられている。
【0031】
本発明の実施の形態では、CPU模擬ブロック1内のレジスタアクセス関数を図1,2に示すレジスタアクセス関数7で置き換えることにより、HWモデルブロック2,3と連携動作させることができる。
【0032】
図2は本環境のレジスタアクセス関数であり、図2(a)はレジスタのリードアクセス関数の実装例、図2(b)はレジスタのライトアクセス関数の実装例である。
【0033】
図2(a)は22で示すレジスタのリードアクセス関数に、シミュレーションの実行権を放棄する命令21を組み込んでいる例を示す。図2(b)は23で示すレジスタへのライトアクセス関数に、シミュレーションの実行権を放棄する命令24を組み込んでいる例を示す。
【0034】
図3は、SWからHWモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【0035】
図3は図1の検証環境の全体シミュレーションシーケンスを示している。まず、T1時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T1〜T2時点までHW_A3のタスク4に登録された処理が実行される。
【0036】
このHW_A3の処理完了後のT2時点に、HW_A3の実行権が放棄され、その後T3時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T3〜T4時点までCPU模擬ブロック1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0037】
T4時点で、CPU模擬ブロック1からHW_A3に図1に示すレジスタアクセス8によりライトアクセス31があると、T5時点でHW_A3からCPU模擬ブロック1にライトアクセス関数7の実行要求がされる。これにより、CPU模擬ブロック1にライトアクセス関数7の実行をして、T6時点でCPU模擬ブロック1の実行権が放棄され、その後T7時点でスケジューラ6がHW_B2に実行権を与える。これにより、T7〜T8時点までHW_B2のタスクに登録された処理が実行される。
【0038】
次に、T9時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T9〜T11時点までHW_A3のタスク4に登録された処理が実行される。
【0039】
ここで、T10時点で、HW_A3からCPU模擬ブロック1は割り込み33を受けたとき、このHW_A3の処理完了後のT11時点に、HW_A3の実行権が放棄され、その後T12時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T12〜T13時点までHW_A3からの割り込み33に基づいてCPU模擬ブロック1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0040】
T13時点で割り込み33に基づく処理の実行が終了すると、CPU模擬ブロック1の実行権が放棄され、その後T14時点でスケジューラ6がHW_B2に実行権を与える。これにより、T14〜T15時点までHW_B2のタスクに登録された処理が実行される。
【0041】
図3は図2のレジスタアクセス関数を利用した場合の全体シュミレーションフローを示している。HWブロック2,3からスケジューラ6方向の矢印はHWブロック2,3のタスクに組み込まれた実行権放棄命令による実行権の委譲を示しており、スケジューラ6から各ブロック1,2,3への矢印はスケジューラ6が持っているスケジューリング方式に基づく実行権の委譲を示している。
【0042】
CPU模擬ブロック1から、スケジューラ6への矢印は、レジスタアクセス関数7に組み込まれた実行権放棄命令によるものである。この結果、ある時間領域で見たときに各ブロックに均等に実行権が与えられており、HWブロック2,3が起動され、SWブロックのCPU模擬ブロック1へ割込みがかかるといったHWブロック2,3とSWブロックのCPU模擬ブロック1の連携動作を模擬することが可能となる。
【0043】
しかしながら、レジスタアクセス関数7に以上のような仕組みを組み込むと以下の現象が生じてしまう。
【0044】
図4は割込みが発生した場合のシーケンスを示している。
T21時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T21〜T22時点までHW_A3のタスク4に登録された処理が実行される。
【0045】
本システムでは、T22時点でHWブロック3よりCPU模擬ブロック1に対して割込み41をかけると、42で示すように、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み41をかけたHWブロック3のタスク4で割込みハンドラ関数43をコールすることで割込みを模擬している。
【0046】
これにより、T23〜T24時点まで割込みハンドラ関数43はHWブロック2に対して処理を実行して、T25時点でHWブロック3の実行権が放棄される。これは、44で示すように、割込みハンドラ内でHWブロック2にアクセスした場合、割込みハンドラが中断され、実行権を放棄してしまうためである。
【0047】
その後T26時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T26〜T27時点まで、45で示すように、割込みハンドラ処理中にもかかわらず、CPU模擬ブロック1の処理が再開される。
【0048】
通常、割込みハンドラ関数43内では、割込み信号のクリアなどレジスタのアクセスを行っている。先に提示したレジスタアクセス関数7を呼び出すと、実行権の放棄が行われてしまい、割込みハンドラ関数43が終了していない状況でCPU模擬ブロック1が実行状態になってしまい、割込みを模擬できない状況が生じる。
【0049】
そこで、割込み処理においてHWブロック3より呼び出される割込みハンドラ関数43を、図5に示す割り込み処理模擬関数で置き換えることで、割込み処理を模擬することができる。
【0050】
図5において、ステップS1で、自タスクID取得して、ステップS2で自タスクの優先度を取得して、ステップS3で自タスクの優先度を最高優先度に設定して、割込み処理の前処理51を行う。そして、ステップS4で、割込みハンドラ関数をコールする。その後、ステップS5で、自タスクの優先度を元に戻して、割込み処理の後処理52を行う。
【0051】
図5では、実機SWブロックの割込みハンドラ関数に、割込み処理の前処理51と割込み処理の後処理52を組み込んでいる。割込み処理の前処理701ではタスク優先度をシステム内で最高優先度に設定している。
【0052】
この結果、レジスタアクセス関数7に組み込まれた実行権放棄命令がスケジューラ6に送られた場合においても、再び実行権が与えられるため、割込みハンドラ関数の連続性を確保することができる。割込み処理の後処理では、タスク優先度を元の優先度に戻している。
【0053】
図8に割込み処理模擬関数を利用した場合の割込み処理シーケンスを示す。
T31時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T31〜T32時点までHW_A3のタスク4に登録された処理が実行される。
【0054】
本システムでは、T32時点でHWブロック3よりCPU模擬ブロック1に対して割込み61をかけると、62で示すように、T33時点でHW_A3により割込み処理の前処理を行った後に、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み61をかけたHWブロック3のタスク4で割込みハンドラ関数64をコールして、その後、65で示すように、T38時点までHW_A3により割込み処理の後処理を行うことで、66で示すように、割込み模擬関数を実行している。
【0055】
これにより、63で示すように、T34〜T35時点まで割込みハンドラ64内でHWブロック2に対してアクセスして処理を実行しても、T36時点でHWブロック3の実行権が放棄された後に、T37時点でスケジューラ6が再びHWブロック3に実行権を与え、連続性を確保できる。
【0056】
これにより、T39〜T40時点まで、67で示すように、割込みハンドラ64が終了した後、CPU模擬ブロック1の処理が再開される。
【0057】
SWブロックへのプログラムの実装として例えば図8の81に示したグローバル変数へのポーリングが行われる場合がある。
【0058】
図7はSWで変数のポーリングした場合のシーケンスを示している。
T41時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T41〜T42時点までHW_A3のタスク4に登録された処理が実行される。
【0059】
その後T43時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T43〜T44時点まで、CPU模擬ブロック1の変数へのポーリングが行われるプログラムの実装が行われる。
【0060】
ここで、変数の参照71をする際に、72で示すように、SWブロックのCPU模擬ブロック1に割り当てたタスクが実行権を保持し続けるため、シミュレーションが止まってしまう。
【0061】
この問題に対処するために、図8に81で示した変数のポーリング関数を作り、図9に示すようなポーリング関数を利用したコード91への置き換えを行った。
【0062】
この結果、図9で示すように、SWブロックのCPU模擬ブロック1のポーリング中も各HWブロックのCPU模擬ブロック1に実行権が与えられるようになり、ポーリング処理を模擬することができるようにすることができる。
【0063】
図10は、SWの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンス図である。
【0064】
T51時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T51〜T52時点までHW_A3のタスク4に登録された処理が実行される。
【0065】
その後T53時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。T53〜T54時点まで、CPU模擬ブロック1の変数へのポーリングが行われるプログラムの実装を行った後に、101で示すように、実行権の開放が行われる。
【0066】
これにより、T55時点でスケジューラ6はHWブロックであるHW_B2を実行状態とし、T55〜T56時点までHW_B2のタスクに登録された処理が実行される。
【0067】
T57時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T57〜T58時点までHW_A3のタスク4に登録された処理が実行される。
【0068】
T59時点でスケジューラ6はCPU模擬ブロック1の変数の参照102を行う。
【0069】
上述した実行権のリリース101および変数の参照102は、ポーリング関数103により実行される。
【0070】
その後に、T60時点で、104で示すように、CPU模擬ブロック1の実行権の開放が行われる。
【0071】
上述した実行権のリリース104は、ポーリング関数105により実行される。
【0072】
その後に、T61時点で、106で示すように、条件に合致するまでポーリング関数が呼ばれ続ける。
【0073】
図11はマルチCPUの環境に拡張した例を示している。
CPU模擬ブロック(1)1、(2)111を複数用意し、それらのタスク部には各ターゲットCPU用の実機に組み込まれるソフトウェアが登録される。
【0074】
ここで、CPU模擬ブロック(1)1、(2)111には、組込みソフトウェアのCPU模擬ブロック(1)1、(2)111からハードウェア・デバイス・モデルのHWブロック2,3へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのCPU模擬ブロック(1)1、(2)111はシミュレーション実行権を開放するライトアクセス関数7,112が設けられる。
【0075】
図12はマルチCPU拡張した場合の全体シミュレーションシーケンスを示している。
まず、T71時点でスケジューラ6はHWブロックであるHW_A3を実行状態とし、T71〜T72時点までHW_A3のタスク4に登録された処理が実行される。
【0076】
このHW_A3の処理完了後のT72時点に、HW_A3の実行権が放棄され、その後T73時点でスケジューラ6がCPU模擬ブロック1に実行権を与える。これにより、T73〜T74時点までCPU模擬ブロック(1)1のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0077】
T73時点でHW_A3からCPU模擬ブロック1にライトアクセス関数7の実行要求がされると、CPU模擬ブロック1はライトアクセス関数7の実行をして、121で示すように、T4時点でCPU模擬ブロック1の実行権が放棄され、その後T75時点でスケジューラ6がHW_B2に実行権を与える。これにより、T75〜T76時点までHW_B2のタスクに登録された処理が実行される。
【0078】
次に、T77時点でスケジューラ6はCPU模擬ブロック(2)111に実行権を与える。これにより、T77〜T78時点までCPU模擬ブロック(2)111のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【0079】
T76時点でHW_B2からCPU模擬ブロック1にライトアクセス関数112の実行要求がされると、CPU模擬ブロック(2)111はライトアクセス関数112の実行をして、122で示すように、T78時点でCPU模擬ブロック(2)112の実行権が放棄され、その後T79時点でスケジューラ6がHW_A3に実行権を与える。これにより、T79〜T80時点までHW_A3のタスクに登録された処理が実行される。
【0080】
なお、上述した割り込みの処理または変数のポーリングの処理も同様に適用される。
【0081】
CPU模擬ブロック(1)1、(2)111からの実行権の放棄121,122はライトアクセス関数7,112であるレジスタアクセス関数あるいはポーリング関数をきっかけとして行われ、HWブロック2,3からの実行権の放棄はタスク部に組み込まれた実行権放棄命令をきっかけとして行われる。このように、マルチCPUのHW/SW協調シミュレーション環境を容易に実現することができる。
【0082】
上述した本発明の実施の形態は、これに限らず、本発明の特許請求の範囲を逸脱しない限り、適宜、他の構成をとりうることは言うまでもない。
【0083】
【発明の効果】
この発明によれば、HW/SW協調シミュレータ上で、インストラクション・セット・シミュレータ(ISS)を使わずに、ターゲットCPU用に記述されたSWとHWモデルを組み合わせた協調シミュレーションを行うことができるという効果を奏する。
【0084】
また、この発明によれば、シミュレータとインストラクション・セット・シミュレータ(ISS)間の実行権の受け渡しがないため、高速にHWとSWの協調シミュレーションを可能とすることができるという効果を奏する。
【0085】
また、この発明によれば、アプリケーションソフトウェア、ドライバソフトウェアを含めたソフトウェア全体の検証を、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【0086】
また、この発明によれば、複数CPUを持つシステム・オン・チップ(SoC)においても、高速にHWとSWの協調シミュレーションを、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の実施の形態に適用されるシミュレーション方法によるISSを使わないHW/SW協調シミュレーション環境の構成図である。
【図2】本環境のレジスタアクセス関数であり、図2(a)はレジスタのリードアクセス関数の実装例、図2(b)はレジスタのライトアクセス関数の実装例である。
【図3】SWからHWモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【図4】割込みが発生した場合の全体シミュレーションを示すシーケンス図である。
【図5】割込み処理を模擬する関数を用いた処理を示すシーケンス図である。
【図6】タスク優先度コントロールによる割込みの連続性が確保されている割込み処理シーケンスを示すシーケンス図である。
【図7】SWで変数のポーリングされた場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図8】変数のポーリング関数実装例を示す図である。
【図9】ポーリング関数を利用したコード例を示す図である。
【図10】SWの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図11】マルチCPUシステムに拡張した場合の構成例を示す図である。
【図12】マルチCPU拡張時の全体シミュレーションシーケンスを示すシーケンス図である。
【図13】従来のシミュレーション環境を示す図であり、図13(a)はISSを利用したシミュレーション環境、図13(b)はISSを利用しないシミュレーション環境である。
【図14】従来のISSを使わないHW/SW協調シミュレーション環境の構成図である。
【図15】検証環境の全体シミュレーションシーケンスを示すシーケンス図である。
【符号の説明】
1……SWブロック(CPU模擬ブロック)、2、3……HWブロック、4……タスク、5……ポート、6……スケジューラ、7……ライトアクセス関数、8……レジスタアクセス、9……割込み
Claims (8)
- ターゲットCPU上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置のうち、上記組込みソフトウェアと上記ハードウェア・デバイス・モデルを共に開発用コンピュータ装置上のプログラムに変換して実行するシミュレーション装置において、
上記ターゲットCPUの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、上記プログラムの入力言語であるシステムレベル設計言語で表現された上記ハードウェア・デバイス・モデルと、上記組込みソフトウェアにより協調シミュレーションを可能とするシミュレーション手段と、
シミュレータ内のタスクとして実装される上記ハードウェア・デバイス・モデルの評価タイミングを、優先度設定が可能なラウンドロビン方式でスケジューリングする、シミュレーションスケジュール手段と、
上記組込みソフトウェアから上記ハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、上記ハードウェア・デバイス・モデルと上記組込みソフトウェアの並列実行を上記ハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放手段と
を備えたことを特徴とするシミュレーション装置。 - 請求項1記載のシミュレーション装置において、
上記組込みソフトウェアの割込み処理において、割込み処理期間の連続性を確保するために、上記シミュレーション手段のタスク優先度を制御してこれを実現することを特徴とするシミュレーション装置。 - 請求項1記載のシミュレーション装置において、
上記組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーション実行権を開放する記述を組み合わせた関数を実装し、上記組込みソフトウェアのポーリング動作を模擬させることを特徴とするシミュレーション装置。 - 請求項1記載のミュレーション装置において、
上記ターゲットCPU上で動作する組込みソフトウェアを複数設けた場合に、上記複数の組込みソフトウェアと上記ハードウェア・デバイス・モデルの協調シミュレーションを行うことを特徴とするシミュレーション装置。 - ターゲットCPU上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置のうち、上記組込みソフトウェアと上記ハードウェア・デバイス・モデルを共に開発用コンピュータ装置上のプログラムに変換して実行するシミュレーション装置におけるシミュレーション方法において、
上記ターゲットCPUの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、上記プログラムの入力言語であるシステムレベル設計言語で表現された上記ハードウェア・デバイス・モデルと、上記組込みソフトウェアにより協調シミュレーションを可能とするシミュレーション手段と、
シミュレータ内のタスクとして実装される上記ハードウェア・デバイス・モデルの評価タイミングを、優先度設定が可能なラウンドロビン方式でスケジューリングする、シミュレーションスケジュールステップと、
上記組込みソフトウェアから上記ハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、上記ハードウェア・デバイス・モデルと上記組込みソフトウェアの並列実行を上記ハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放ステップと
を備えたことを特徴とするシミュレーション方法。 - 請求項5記載のシミュレーション方法において、
上記組込みソフトウェアの割込み処理において、割込み処理期間の連続性を確保するために、上記シミュレータのタスク優先度を制御してこれを実現することを特徴とするシミュレーション方法。 - 請求項5記載のシミュレーション方法において、
上記組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーション実行権を開放する記述を組み合わせた関数を実装し、上記組込みソフトウェアのポーリング動作を模擬させることを特徴とするシミュレーション方法。 - 請求項5記載のシミュレーション方法において、
上記ターゲットCPU上で動作する組込みソフトウェアを複数設けた場合に、上記複数の組込みソフトウェアと上記ハードウェア・デバイス・モデルの協調シミュレーションを行うことを特徴とするシミュレーション方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003185464A JP2005018623A (ja) | 2003-06-27 | 2003-06-27 | シミュレーション装置およびシミュレーション方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003185464A JP2005018623A (ja) | 2003-06-27 | 2003-06-27 | シミュレーション装置およびシミュレーション方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005018623A true JP2005018623A (ja) | 2005-01-20 |
Family
ID=34184904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003185464A Abandoned JP2005018623A (ja) | 2003-06-27 | 2003-06-27 | シミュレーション装置およびシミュレーション方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005018623A (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008021142A (ja) * | 2006-07-13 | 2008-01-31 | Sony Corp | 情報処理装置およびその方法 |
JP2008123315A (ja) * | 2006-11-14 | 2008-05-29 | Sony Corp | 情報処理装置およびその方法、並びにプログラム |
JP2009026113A (ja) * | 2007-07-20 | 2009-02-05 | Fujitsu Microelectronics Ltd | シミュレーション装置及びプログラム |
JP2010009113A (ja) * | 2008-06-24 | 2010-01-14 | Fujitsu Microelectronics Ltd | シミュレーション装置およびプログラム |
JP2010152645A (ja) * | 2008-12-25 | 2010-07-08 | Fujitsu Semiconductor Ltd | シミュレーション支援プログラム、シミュレーション装置、およびシミュレーション支援方法 |
KR100974934B1 (ko) * | 2008-01-29 | 2010-08-09 | 주식회사 리버트론 | 가상 시뮬레이션 시스템 및 하드웨어 제어 프로그램 구현방법 |
JP2012027952A (ja) * | 2011-11-07 | 2012-02-09 | Fujitsu Semiconductor Ltd | シミュレーション装置 |
CN104238372A (zh) * | 2014-09-11 | 2014-12-24 | 北京经纬恒润科技有限公司 | 多个模型并行仿真的调度方法和装置 |
-
2003
- 2003-06-27 JP JP2003185464A patent/JP2005018623A/ja not_active Abandoned
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008021142A (ja) * | 2006-07-13 | 2008-01-31 | Sony Corp | 情報処理装置およびその方法 |
JP2008123315A (ja) * | 2006-11-14 | 2008-05-29 | Sony Corp | 情報処理装置およびその方法、並びにプログラム |
JP2009026113A (ja) * | 2007-07-20 | 2009-02-05 | Fujitsu Microelectronics Ltd | シミュレーション装置及びプログラム |
KR100974934B1 (ko) * | 2008-01-29 | 2010-08-09 | 주식회사 리버트론 | 가상 시뮬레이션 시스템 및 하드웨어 제어 프로그램 구현방법 |
JP2010009113A (ja) * | 2008-06-24 | 2010-01-14 | Fujitsu Microelectronics Ltd | シミュレーション装置およびプログラム |
JP2010152645A (ja) * | 2008-12-25 | 2010-07-08 | Fujitsu Semiconductor Ltd | シミュレーション支援プログラム、シミュレーション装置、およびシミュレーション支援方法 |
US8364458B2 (en) | 2008-12-25 | 2013-01-29 | Fujitsu Semiconductor Limited | Simulation program and simulation apparatus |
JP2012027952A (ja) * | 2011-11-07 | 2012-02-09 | Fujitsu Semiconductor Ltd | シミュレーション装置 |
CN104238372A (zh) * | 2014-09-11 | 2014-12-24 | 北京经纬恒润科技有限公司 | 多个模型并行仿真的调度方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4975544B2 (ja) | シミュレーション装置及びプログラム | |
Gerstlauer et al. | RTOS modeling for system level design | |
Bringmann et al. | The next generation of virtual prototyping: Ultra-fast yet accurate simulation of HW/SW systems | |
Iturbe et al. | R3TOS: a novel reliable reconfigurable real-time operating system for highly adaptive, efficient, and dependable computing on FPGAs | |
Hansson et al. | Design and implementation of an operating system for composable processor sharing | |
Schliecker et al. | System level performance analysis for real-time automotive multicore and network architectures | |
Wurst et al. | System performance modelling of heterogeneous hw platforms: An automated driving case study | |
US10445445B2 (en) | Sliding time window control mechanism for parallel execution of multiple processor core models in a virtual platform simulation | |
JP2005018623A (ja) | シミュレーション装置およびシミュレーション方法 | |
Posadas et al. | POSIX modeling in SystemC | |
Abdi et al. | Automatic TLM generation for early validation of multicore systems | |
Plyaskin et al. | High-level timing analysis of concurrent applications on MPSoC platforms using memory-aware trace-driven simulations | |
Jersak | Compositional performance analysis for complex embedded applications. | |
Cataldo et al. | Subutai: distributed synchronization primitives in NoC interfaces for legacy parallel-applications | |
Mooney et al. | Hardware/software co-design of run-time schedulers for real-time systems | |
Mooney III | Hardware/Software co-design of run-time systems | |
Lübbers et al. | Reconos: An operating system for dynamically reconfigurable hardware | |
Bletsas | Worst-case and best-case timing analysis for real-time embedded systems with limited parallelism | |
Pereira et al. | Co-designed FreeRTOS deployed on FPGA | |
JP5226848B2 (ja) | シミュレーション装置及びプログラム | |
Popovici et al. | Hardware Abstraction Layer: Introduction and Overview | |
Funchal et al. | Modeling of time in discrete-event simulation of systems-on-chip | |
Burgio et al. | Real-time heterogeneous platforms | |
Johnson et al. | Interrupt modeling for efficient high-level scheduler design space exploration | |
Yu et al. | RTOS modeling in system level synthesis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060502 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20080229 |