(57)【要約】【課題】クロック周波数が異なっていても、補正される側のタイマを基準となる側のタイマで正しく補正できる情報処理装置を提供すること。【解決手段】第一のクロック発生器２５と、ＣＰＵ２２と、を有する情報処理装置１００であって、第二のクロック発生器４５と、第二のクロック信号をカウントして第二の時間を計測する第二の時間計測手段４２と、第二の時間が記憶される時間記憶領域を備えた記憶手段４１と、を有する基板４０と通信する通信手段２３と、前記基板の前記時間記憶領域から取得した前記第二の時間の計測を、前記第一のクロック信号をカウントして継続する第一の時間計測手段３５２、第二の時間を、第一のクロック信号の周波数と第二のクロック信号の周波数の比に応じて補正する時間補正手段３８と、を有する。【選択図】図１１
2013218394.tif 000002
【特許請求の範囲】
【請求項１】
第一のクロック信号を発生させる第一のクロック発生器と、プログラムを実行するＣＰＵと、を有する情報処理装置であって、
第二のクロック信号を発生させる第二のクロック発生器と、前記第二のクロック信号をカウントして第二の時間を計測する第二の時間計測手段と、前記第二の時間が記憶される時間記憶領域を備えた記憶手段と、を有する基板と通信する通信手段と、
前記基板の前記時間記憶領域から取得した前記第二の時間の計測を、前記第一のクロック信号をカウントして継続する第一の時間計測手段と、
前記第二の時間を、前記第一のクロック信号の周波数と前記第二のクロック信号の周波数の比に応じて補正する時間補正手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記プログラムとして命令セットシミュレータを実行することで実現される、ターゲットＣＰＵの命令セットを備えた仮想ＣＰＵ、主記憶メモリ、及び、前記第一の時間計測手段が計測した前記第二の時間を記憶する仮想記憶部と、
前記仮想ＣＰＵが前記第二の時間を記憶する前記時間記憶領域にアクセスする場合、アクセス先を前記時間記憶領域から前記仮想記憶部に切り替えるアクセス制御手段と、
を有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記時間記憶領域のアドレスと、前記アドレスを変換するアドレス変換関数とが対応づけて登録されたアドレス変換テーブルを有し、
前記アクセス制御手段は、前記仮想ＣＰＵが前記時間記憶領域のアドレスへのアクセスを要求した場合、前記アドレス変換テーブルに対応づけられている前記アドレス変換関数に基づき、前記仮想記憶部のアドレスに変換すると共に、前記時間補正手段が前記第二の時間を補正する、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記ターゲットＣＰＵの命令実行時間を算出し、前記仮想ＣＰＵの実測命令実行時間と比較する時間管理手段を有し、
前記時間管理手段は、前記命令実行時間の方が前記実測命令実行時間よりも短い場合は、前記仮想ＣＰＵに命令実行を待機させ、前記命令実行時間の方が前記実測命令実行時間よりも長い場合は、差分を次の時間管理タイミングにおける前記命令実行時間に加算して、前記命令実行時間と前記実測命令実行時間を比較する、
ことを特徴とする請求項２又は３記載の情報処理装置。
【請求項５】
前記基板の前記記憶手段は前記時間記憶領域を含む複数の記憶領域を有し、
前記仮想記憶部は、前記複数の記憶領域に対応して設けられた複数の仮想記憶領域を有し、
前記記憶領域に記憶されたデータが更新された場合に、データが更新された前記記憶領域に対応する前記仮想記憶領域のデータを同じ値に更新するデータ更新手段と、
前記仮想ＣＰＵが前記記憶領域からデータを読み出す間に、該記憶領域に対応する前記仮想記憶領域からデータを読み出し、２つのデータが一致するか否かに基づき前記通信手段の異常を検出する異常検出手段と、
を有する請求項２又は３記載の情報処理装置。
【請求項６】
前記第一の時間計測手段は、前記第一のクロック信号をカウントして第一の時間を計測しており、
前記時間補正手段は、
前回、前記時刻補正手段が補正して前記第一の時間と同期を取った基準時刻から計測された前記第二の時間に、前記第一のクロック信号の周波数と前記第二のクロック信号の周波数の比を乗じることで、前記第二の時間を補正する、
ことを特徴とする請求項１〜５いずれか１項記載の情報処理装置。
【請求項７】
第一のクロック信号を発生させる第一のクロック発生器と、プログラムを実行するＣＰＵと、を有する情報処理装置の時間補正方法であって、
通信手段が、第二のクロック信号を発生させる第二のクロック発生器と、前記二のクロック信号をカウントして第二の時間を計測する第二の時間計測手段と、前記第二の時間が記憶される時間記憶領域を備えた記憶手段と、を有する基板と通信するステップと、
第一の時間計測手段が、前記基板の前記時間記憶領域から取得した前記第二の時間の計測を、前記第一のクロック信号をカウントして継続するステップと、
時間補正手段が、前記第二の時間を、前記第一のクロック信号の周波数と前記第二のクロック信号の周波数の比に応じて補正するステップと
を有することを特徴とする時間補正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、基板と接続され、時間を計測する情報処理装置に関する。
【背景技術】
【０００２】
車両には多くの電子制御ユニットが搭載されている。電子制御ユニットの開発過程では車載される電子制御ユニットのマイコンにプログラムや周辺機器を接続する前に、マイコンの動作をＰＣ（Personal  Computer）などでシミュレートする場合がある。
【０００３】
この場合、完成している部品や変更のない部品は、シミュレートすることなく実在部品を使用すれば、開発期間を短縮できコストを低減できる。しかしながら、この場合、マイコンのＣＰＵなどのシミュレート対象をシミュレートするＰＣと、実在部品を接続する必要が生じてしまう。
【０００４】
図１は、電子制御ユニットのシミュレーションを説明する図の一例である。ＣＰＵ部２０がマイコンのターゲットＣＰＵをシミュレートして実現されるマイコンの機能ブロックである。ＣＰＵ部２０はＰＣ１００が有するホストＣＰＵ２２上でソフト的に実現されている。これに対し、Ｉ／Ｏ部４０はマイコンに搭載される実在部品である。電子制御ユニットの開発過程ではＩ／Ｏ部４０を含めてシミュレートする必要があるため、ＰＣ１００のホストＣＰＵ２２とＩ／Ｏ部４０が通信路２３で接続されている。通信路２３はＰＣ１００で汎用的に使用される規格の通信ケーブルや装着スロットなどである。
【０００５】
ＣＰＵコア部３１はメモリ部３３に対して命令フェッチを行い、取得した命令をデコードする。デコード結果に応じて各命令に応じた動作を実行する。例えば、算術演算や分岐命令などの場合、ＣＰＵコア部３１が汎用レジスタや制御レジスタの値を更新する。ＬＯＡＤ／ＳＴＯＲＥ命令は、ＬＤ／ＳＴアクセス制御部３２に処理を依頼する。こうすることで、ＬＤ／ＳＴアクセス制御部３２がＬＯＡＤ／ＳＴＯＲＥ処理している間、ＣＰＵコア部３１は次の命令を実行することができる。
【０００６】
ＬＤ／ＳＴアクセス制御部３２は、アクセス先がメモリ部３３なのかＩ／Ｏ部４０なのかを判断し、メモリ部３３又はＩ／Ｏ部４０にアクセスする。
【０００７】
しかしながら、ＬＤ／ＳＴアクセス制御部３２がＩ／Ｏ部４０にアクセスする場合、ＰＣ１００とＩ／Ｏ部４０が物理的に別々であるため、遅延が生じてしまう。というのは、車両上ではＩ／Ｏ部４０はマイコンと同じ基板に配置されるのに対し、シミュレーション時は、ＣＰＵ部２０とＩ／Ｏ部４０が通信路２３を介して通信するため、マイコンでは生じない遅延が生じる。このような遅延が、マイコンが車載された場合にシミュレーションでは判明しなかった影響を生じさせるおそれがある。
【０００８】
また、シミュレーション時も次のような不都合が生じる。例えば、Ｉ／Ｏ部４０にタイマがあり、ＣＰＵコア部３１がタイマにアクセスする場合、タイマ用のレジスタに頻繁にアクセスする必要が生じる。この場合、タイマ値を契機に制御を行う場合、遅延が弊害となり所望の処理を実現できないおそれがある。
【０００９】
図２は、処理の不都合を説明する図の一例である。図２では、ＣＰＵコア部３１がタイマを利用してエンジンの「開閉弁制御のＯｎ／Ｏｆｆ設定」を行う処理を行っている。ＣＰＵコア部３１は、タイマ値がある値になった場合に開閉弁制御のＯｎ／Ｏｆｆを切り替える。ある値は、仮想Ｉ／Ｏレジスタ部４１のコンペマッチレジスタ４４に設定され、ＣＰＵコア部３１はコンペアマッチレジスタ４４に設定した値がタイマ値と一致すると、それを検出してＯｎ／Ｏｆｆを切り替える。
【００１０】
タイマは、図２の上部に示すように、予め決まった１サイクルの計測を自動的に繰り返す。このタイマ利用した、「開閉弁制御のＯｎ／Ｏｆｆ設定」の期待される動作について順番に説明する。
１．ＣＰＵコア部３１はタイマ値のＬＯＡＤ命令を実行する。Ｉ／Ｏ部４０に読み出し要求が到達する時間ｔ１が必要なため、取得するデータはｔ１となる。
２．ＣＰＵコア部３１は時刻ｔ１からα時間が経過した時に、開閉弁制御のＯｎ／Ｏｆｆを切り替えるため、コンペアマッチレジスタ４４に「ｔ１＋α」を設定する。すなわち、タイマに対しＳＴＯＲＥ命令を実行する。
３．タイマ値がコンペアマッチレジスタ４４に設定した「ｔ１＋α」と一致すると、タイマが割込み通知フラグをセットする。
４．ＣＰＵコア部３１は割込み通知フラグを検出して「開閉弁制御」をＯｎにする。
５．割込み処理後、ＣＰＵコア部３１はコンペアマッチレジスタ４４に「ｔ１＋α＋β」を設定する。
６．タイマ値がコンペアマッチレジスタ４４に設定した「ｔ１＋α＋β」と一致すると、タイマが割込み通知フラグをセットする。
７．ＣＰＵコア部３１は割込み通知フラグを検出して「開閉弁制御」をＯｆｆにする。
【００１１】
しかしながら、例えば、２番目の処理において、ＣＰＵコア部３１からＩ／Ｏ部４０のコンペアマッチレジスタ４４に「ｔ１＋α」を設定する際に遅延が生じると、タイマ値が先に「ｔ１＋α」を超える場合が起こる。つまり、図示するように、時刻「ｔ１＋α」において、コンペアマッチレジスタ４４にまだ「ｔ１＋α」が設定されていない場合が生じうる。この場合、コンペアマッチレジスタ４４の値とタイマ値とが一致するには次の１サイクル程度の時間が必要になり、コンペアマッチレジスタ４４が実質的に割込み通知フラグをセットできなくなる。すると、４番目以降の処理が全て実行されず、「開閉弁制御のＯｎ／Ｏｆｆ」の切り替えが困難になる。
【００１２】
このような不都合を解決するため、Ｉ／Ｏ部４０のタイマと同期したタイマをＣＰＵ部２０に実装することが考えられる（例えば、特許文献１参照。）。特許文献１には、メインシステムのブートローダーにＮＴＰサーバーにアクセスする機能を持たせて、この機能を用いてサブシステムが正確な時刻を取得した後に、取得した正確な時刻を初期時刻としてメインシステムを起動する情報処理装置が開示されている。サブシステムが接続されるＬＡＮにＮＴＰサーバーが接続されていない場合でも、サブシステムがＮＴＰサーバーに同期した正確な時刻を取得した後に、取得した正確な時刻を初期時刻としてメインシステムを起動することができる。
【００１３】
図２のシミュレーションに適用すると、ＣＰＵ部２０に、Ｉ／Ｏ部４０のＩ／Ｏレジスタ部４１の状態をコピーして維持する「仮想Ｉ／Ｏレジスタ部」をＣＰＵ部２０に配置することが考えられる。
【００１４】
図３は、仮想Ｉ／Ｏレジスタ部３５を有する場合の、電子制御ユニットのシミュレーションを説明する図の一例である。図示するように、仮想Ｉ／Ｏレジスタ部３５はタイマ３５２を有している。仮想Ｉ／Ｏレジスタ部３５が保持するタイマ３５２のタイマ値は、Ｉ／Ｏ部４０と同期されるので、ＬＤ／ＳＴアクセス制御部３２は仮想Ｉ／Ｏレジスタ部３５にアクセスすればよいことになる。仮想Ｉ／Ｏレジスタ部３５は、ＣＰＵ部２０側にあるので遅延が生じることもない。
【００１５】
図４は、仮想Ｉ／Ｏレジスタ部３５を有する場合の処理を説明する図の一例である。期待動作については図２と同様なので省略する。仮想Ｉ／Ｏレジスタ部３５のタイマ３５２は、Ｉ／Ｏ部４０のタイマとほぼ同期してタイマ値をカウントしている。
ｓ１．ＣＰＵコア部３１は、Ｉ／Ｏ部４０でなく仮想Ｉ／Ｏレジスタ部３５にアクセス（ＬＯＡＤ）する。
ｓ２．仮想Ｉ／Ｏレジスタのタイマ値がｔ１であるとすると、ＣＰＵコア部３１はタイマ値として時刻ｔ１を取得する。
ｓ３．ＣＰＵコア部３１は「ｔ１＋α」を設定するＳＴＯＲＥ命令を生成する。
ｓ４．ＣＰＵコア部３１は、仮想Ｉ／Ｏレジスタ部３５のコンペアマッチレジスタ３５１に「ｔ１＋α」を設定（ＳＴＯＲＥ）する。
【００１６】
ＬＯＡＤ及びＳＴＯＲＥのいずれの場合も、仮想Ｉ／Ｏレジスタ部３５にアクセスするので遅延を抑制している。このため、コンペアマッチレジスタ３５１に「ｔ１＋α」が設定された時、仮想Ｉ／Ｏレジスタ部３５のタイマ３５２のタイマ値は「ｔ１＋α」に到達していない。
Ｓ５．仮想Ｉ／Ｏレジスタ部３５ののタイマ３５２は、タイマ値が「ｔ１＋α」に到達すると、タイマ３５２が割込み通知フラグをセットする。
Ｓ６．ＣＰＵコア部３１は、割込み通知フラグを検出する。このように、ＣＰＵコア部３１は、割込みフラグを検出可能である。
Ｓ７．ＣＰＵコア部３１は割り込み処理を行う。具体的には開閉弁制御をＯｎ（Ｈｉｇｈ）に設定する。
Ｓ８．ＣＰＵコア部３１は、「ｔ１＋α＋β」を仮想Ｉ／Ｏレジスタ部３５のコンペアマッチレジスタ３５１に設定（ＳＴＯＲＥ）する。
Ｓ９．仮想Ｉ／Ｏレジスタ部３５のタイマ値が「ｔ１＋α＋β」に到達すると、タイマ３５２が割込み通知フラグをセットする。
Ｓ１０．ＣＰＵコア部３１は、割込み通知フラグを検出する。このように、ＣＰＵコア部３１は、割込みフラグを検出可能である。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１１−１９８０１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、ホストＣＰＵ２２でマイコンの処理をシミュレートする場合、仮想Ｉ／Ｏレジスタ部３５とＩ／Ｏ部４０のタイマを単に同期するだけでは、わずかな違いが生じ、処理に不都合をもたらすおそれがある。すなわち、ＣＰＵ部２０のクロック周波数とＩ／Ｏ部４０のクロック周波数は異なるため、仮想Ｉ／Ｏレジスタ部３５のタイマ３５２のタイマ値に基づき処理すると、ＣＰＵ部２０のタイマ値に基づく処理とタイミングが異なってしまう。
【００１９】
本発明は、上記課題に鑑み、クロック周波数が異なっていても、シミュレータ側のタイマのタイマ値を正しく補正できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明は、第一のクロック信号を発生させる第一のクロック発生器と、プログラムを実行するＣＰＵと、を有する情報処理装置であって、第二のクロック信号を発生させる第二のクロック発生器と、前記二のクロック信号をカウントして第二の時間を計測する第二の時間計測手段と、前記第二の時間が記憶される時間記憶領域を備えた記憶手段と、を有する基板と通信する通信手段と、前記基板の前記時間記憶領域から取得した前記第二の時間の計測を、前記第一のクロック信号をカウントして継続する第一の時間計測手段と、前記第二の時間を、前記第一のクロック信号の周波数と前記第二のクロック信号の周波数の比に応じて補正する時間補正手段と、を有することを特徴とする。
【発明の効果】
【００２１】
クロック周波数が異なっていても、シミュレータ側のタイマのタイマ値を正しく補正できる情報処理装置を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】電子制御ユニットのシミュレーションを説明する図の一例である。
【図２】処理の不都合を説明する図の一例である。
【図３】仮想Ｉ／Ｏレジスタ部を有する場合の、電子制御ユニットのシミュレーションを説明する図の一例である。
【図４】仮想Ｉ／Ｏレジスタ部を有する場合の処理を説明する図の一例である。
【図５】本実施形態の情報処理装置の機能ブロック図の一例である。
【図６】アクセステーブルの一例を示す図である。
【図７】仮想Ｉ／Ｏレジスタ部について説明する図の一例である。
【図８】データ更新部１，２によるデータの更新を説明する図の一例である。
【図９】ターゲットＣＰＵの命令毎のサイクル数を示す図の一例である。
【図１０】パイプライン制御を模式的に説明する図の一例である。
【図１１】ＣＰＵ部のタイマ値とＩ／Ｏ部のタイマ値のずれを説明する図の一例である。
【図１２】アクセスレイテンシの違いを説明する図の一例である。
【発明を実施するための形態】
【００２３】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図５は、本実施形態の情報処理装置の機能ブロック図の一例を示す。ＣＰＵ部２０は、シミュレート対象のマイコンのターゲットＣＰＵ（不図示）の機能を仮想的に実現したものである。具体的にはＩＳＳ（Instruction  Set  Simulator）２１をホストＣＰＵ２２上で実行することで、ＣＰＵ部２０が実現される。ＩＳＳはＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２４にプログラムとして記憶されている。
【００２４】
ＣＰＵ部２０はクロック発生器２５を有し、Ｉ／Ｏ部４０はクロック発生器４５を有している。クロック発生器２５はＩＳＳ２１を含むＣＰＵ部２０に所定のクロック周波数のクロック信号を供給し、クロック発生器４５はＩ／Ｏ部４０に所定のクロック周波数のクロック信号を供給する。
【００２５】
ＩＳＳ２１は、ターゲットＣＰＵの命令セット（算術演算命令、論理演算命令、シフト命令、ＬＯＡＤ／ＳＴＯＲＥ命令、分岐命令等）を提供し、主に開発中のプログラムが命令セットの各命令を実行した時のレジスタ、メモリ等の状態をソフト的に生成する。ＩＳＳ２１は、ターゲットＣＰＵ（又はターゲットマイコン）のメーカから提供される。
【００２６】
ＩＳＳ２１はＣＰＵコア部３１、時間管理部３４、ＬＤ／ＳＴアクセス制御部３２、メモリ部３３、及び、仮想Ｉ／Ｏレジスタ部３５を有している。この他の機能は図示を省略した。ターゲットマイコンには、ＣＰＵコア部３１、時間管理部３４、ＬＤ／ＳＴアクセス制御部３２、及び、メモリ部３３が実在するが、仮想Ｉ／Ｏレジスタ部３５は存在しない。
【００２７】
ＣＰＵコア部３１は、メモリ部３３に対し、プログラムの命令フェッチを行い、命令バッファなどに記憶し、命令をデコードする。算術演算や分岐命令などの命令の実行によって、汎用レジスタや制御レジスタの値を更新する。
【００２８】
ＬＤ／ＳＴアクセス制御部３２は、ＬＯＡＤ命令とＳＴＯＲＥ命令を実行する。ＣＰＵコア部３１と別にあるのは、ＬＯＡＤ命令とＳＴＯＲＥ命令は実行に比較的時間がかかるので専用の回路を設け、ＣＰＵコア部３１の負荷を低減するためである。ＬＤ／ＳＴアクセス制御部３２は、アクセス先がメモリ部３３か、又は、Ｉ／Ｏか（つまり、タイマか）によって以下のように動作する。
・メモリ部３３の場合…従来のＩＳＳ２１と同様にＬＯＡＤやＳＴＯＲＥ処理を実施する
・Ｉ／Ｏの場合…後述するアクセステーブル３７を参照して、仮想Ｉ／Ｏレジスタ部３５又はＩ／Ｏ部４０のどちらにアクセスするかを切り替える。
・タイマの場合…Ｉ／Ｏと同様に、後述するアクセステーブル３７を参照してアドレス変換を行い、仮想Ｉ／Ｏレジスタ部３５のコンペアマッチレジスタ３５１に値を書き込み（ＳＴＯＲＥの場合）、タイマ３５２からデータを読み出す（ＬＯＡＤの場合）。なお、ＬＯＡＤした場合は、仮想Ｉ／Ｏレジスタ部３５のタイマ値の補正を行う。
【００２９】
ＬＤ／ＳＴアクセス制御部３２はアクセステーブル３７及びタイマ管理部３８を有する。タイマ管理部３８は、仮想Ｉ／Ｏレジスタ部３５のクロック周波数とＩ／Ｏ部４０のクロック周波数の違いに基づくタイマ値のずれを補正する。
【００３０】
メモリ部３３には実行対象のプログラム（ターゲットＣＰＵが実行するプログラム）が記憶される。仮想Ｉ／Ｏレジスタ部３５は、Ｉ／Ｏ部４０のＩ／Ｏレジスタ部４１の値と同じ値を保持する。データ更新部３６（以下、区別するためデータ更新部１という）は、仮想Ｉ／Ｏレジスタ部３５に値が書き込まれた場合、Ｉ／Ｏレジスタ部４１を同じ値に更新する。データ更新部４３（以下、区別するためデータ更新部２という）はＩ／Ｏレジスタ部４１に値が書き込まれた場合、仮想Ｉ／Ｏレジスタ部３５を同じ値に更新する。
【００３１】
時間管理部３４は、ＣＰＵコア部３１がターゲットＣＰＵと同程度の速度でプログラムを実行するようにＣＰＵコア部３１の命令実行速度を調整する。実機より早く動作した場合はＣＰＵコア部３１に命令を実行させずに待機させ、遅くなった場合は早く動作した場合に余る時間で調整する。これにより想定した速度でＣＰＵコア部３１が命令を実行するように制御する。
【００３２】
Ｉ／Ｏ部４０はＩ／Ｏレジスタ部４１、Ｉ／Ｏレジスタ部４１に接続されているＡＤＣ、Ｐｏｒｔ、ＵＡＲＴ、ＣＡＮ、タイマ、コンペアマッチレジスタ等の周辺機器４２、及び、クロック発生器４５を有している。
【００３３】
Ｉ／Ｏ部４０はホストＣＰＵ２２（より具体的にはＰＣ１００が有する通信路２３のインタフェース）と接続されている。Ｉ／Ｏ部４０に接続される周辺機器４２はマイコンによって異なるので図は一例であるが、本実施形態ではタイマを有するものとする。これらの周辺機器４２は、ＣＰＵ部２０からＩ／Ｏレジスタ部４１に設定された値により制御される。また、周辺機器４２がデータを受信するなどのイベントを検出した場合、Ｉ／Ｏレジスタ部４１に値を設定することで、不図示の割込み制御部などを介してＣＰＵコア部３１に通知する。本実施形態では、データ更新部２がＩ／Ｏレジスタ部４１の値が書き込まれたことを検出して、ホストＣＰＵ２２に通知し、ホストＣＰＵ２２が仮想Ｉ／Ｏレジスタ部３５に値をコピーする。
【００３４】
〔ＬＤ／ＳＴアクセス制御部〕
ＬＤ／ＳＴアクセス制御部３２は、ＣＰＵコア部３１のアクセス先に応じて、実際のアクセス先をＩ／Ｏレジスタ部４１又は仮想Ｉ／Ｏレジスタ部３５に切り替える。これにより、仮想Ｉ／Ｏレジスタ部３５をＣＰＵ部２０に配置した場合に、アクセス先を制御できる。
【００３５】
ＬＤ／ＳＴアクセス制御部３２は、アクセス先の制御のためアクセステーブル３７を参照する。
【００３６】
図６は、アクセステーブル３７の一例を示す。アクセステーブル３７にはアドレス毎に「アドレス変換関数」が対応づけられている。なお、「アクセス先」も登録されているがこれは説明のための記述であり、開発者が把握できていれば実際のアクセステーブル３７にはなくてもよい。
【００３７】
まず、ターゲットＣＰＵはメモリマップドＩ／Ｏという周辺機器４２へのアクセス方式を採用している。このためアドレスにより周辺機器４２を含むアクセス先が定まる。本実施形態では、例えばＩ／Ｏ部４０のタイマへのアクセスを、仮想Ｉ／Ｏレジスタ部３５のタイマ３５２へのアクセスに変換する必要がある。アドレス変換関数はこのアドレス変換を行う関数であり、例えば、上位１６bitにFFFFを加える、８bit左シフトするなどのアドレス変換の方法を意味している。
【００３８】
アクセステーブル３７は、ＩＳＳ２１の起動時など初期化する際に生成されるが、ＩＳＳ２１がシミュレーションの実行時にアクセステーブル生成用のテーブルを参照して変更することもできる。
【００３９】
ＬＤ／ＳＴアクセス制御部３２は以下のように動作する。
（１）ＣＰＵコア部３１がＬＯＡＤ／ＳＴＯＲＥ命令を実行するとアクセスアドレスとアクセスタイプ（ＬＯＡＤ／ＳＴＯＲＥ）がＬＤ／ＳＴアクセス制御部３２に伝えられる。
（２）ＬＤ／ＳＴアクセス制御部３２はアクセスアドレスに基づきアクセステーブル３７を検索して、どこにアクセスするかを判断する。
（３）アクセス先に応じて以下のアドレス変換関数を使用しアドレス変換を行う。
（i）  仮想Ｉ／Ｏレジスタ部３５の場合、アドレス変換関数“transA”を用いてアドレス変換を行う。ＬＤ／ＳＴアクセス制御部３２はＣＰＵ部２０の仮想Ｉ／Ｏレジスタ部３５へアクセスする。
（ii）  Ｉ／Ｏレジスタ部４１の場合、アドレス変換関数“trans_through”を用いてアドレス変換を行う。ＬＤ／ＳＴアクセス制御部３２は直接、Ｉ／Ｏ部４０のＩ／Ｏレジスタ部４１へアクセスする。つまりタイマのように遅延が問題とならない周辺機器４２は直接、アクセスする。
（iii）  メモリ部３３の場合、アドレス変換関数“transB”を用いてアドレス変換を行う。ＬＤ／ＳＴアクセス制御部３２はＩＳＳ２１内部のメモリ部３３にアクセスする。
（iv）  タイマの場合、アドレス変換関数“transC”を用いてアドレス変換を行う。ＬＤ／ＳＴアクセス制御部３２は、ＣＰＵ部２０の仮想Ｉ／Ｏレジスタ部３５のタイマ３５２へアクセスする。なお、このアクセスの際、タイマ管理部３８が時間の補正を行う。
【００４０】
図７は、仮想Ｉ／Ｏレジスタ部３５について説明する図の一例である。仮想Ｉ／Ｏレジスタ部３５はＩ／Ｏレジスタ部４１と同じ数のレジスタ（メモリ領域）を有している。Ｉ／Ｏ部４０の物理アドレス（図のFFFF4000等）に対し、仮想Ｉ／Ｏレジスタ部３５はローカルなアドレス（図の０，２，４，８，Ａ…）が割り当てられている。アクセステーブル３７の「アドレス」は物理アドレスであり、アドレス変換関数で変換されるアドレスがローカルなアドレスである。
【００４１】
例えば、ＣＰＵコア部３１が「FFFF4002」のアドレスにアクセスする場合、ＬＤ／ＳＴアクセス制御部３２はアクセステーブル３７で、「FFFF4002」を仮想Ｉ／Ｏレジスタ部３５のアドレスに変換する。Ｉ／Ｏ部４０で「FFFF4002」のアドレスは、Ｐ１というレジスタを指すので、仮想Ｉ／Ｏレジスタ部３５のアドレスは「0x2」になる。
【００４２】
ＬＤ／ＳＴアクセス制御部３２は変換された仮想Ｉ／Ｏレジスタ部３５のアドレス「0x2」に対しＬＯＡＤ又はＳＴＯＲＥする。
【００４３】
−  ＳＴＯＲＥの場合、仮想Ｉ／Ｏレジスタ部３５のアドレス「0x2」のレジスタにデータを書き込む。
【００４４】
−  ＬＯＡＤの場合、仮想Ｉ／Ｏレジスタ部３５のアドレス「0x2」のレジスタからデータを読み出し、ＣＰＵコア部３１に渡す。
【００４５】
なお、ＳＴＯＲＥの場合、データ更新部１が仮想Ｉ／Ｏレジスタ部３５の更新されたデータをＩ／Ｏ部４０のＩ／Ｏレジスタ部４１に書き込む。
【００４６】
図８は、データ更新部１，２によるデータの更新を説明する図の一例である。仮想Ｉ／Ｏレジスタ部３５のデータが更新されたことは、仮想Ｉ／Ｏレジスタ部３５の各レジスタ毎にフラグを立てるなどして検出する。
【００４７】
データ更新部１が、直接、データの更新ができない場合（例えば、他のデータの更新をしている場合）、データ更新部２にデータ更新の要求を出す。データ更新部１は仮想Ｉ／Ｏレジスタ部３５のアドレスを指定して、データ更新部２にデータを更新するように要求する。データ更新部２はホストＣＰＵ２２を介して、仮想Ｉ／Ｏレジスタ部３５からデータを読み出し、Ｉ／Ｏ部４０のレジスタにコピーする。
【００４８】
データ更新部２は、Ｉ／Ｏ部４０のレジスタに変更があった場合、仮想Ｉ／Ｏレジスタ部３５の対応するレジスタにデータを書き込む。Ｉ／Ｏレジスタ部４１のデータが更新されたことは、Ｉ／Ｏレジスタ部４１の各レジスタ毎にフラグを立てるなどして検出する。
【００４９】
データ更新部２が、直接、データの更新ができない場合（例えば、他のデータの更新をしている場合）、データ更新部１にデータ更新の要求を出す。データ更新部２はＩ／Ｏレジスタ部４１のアドレスを指定して、データ更新部１にデータを更新するように要求する。データ更新部１はホストＣＰＵ２２を介して、Ｉ／Ｏレジスタ部４１からデータを読み出し、仮想Ｉ／Ｏレジスタ部３５のレジスタにコピーする。
【００５０】
〔時間管理部〕
時間管理部３４による時間管理について説明する。時間管理部３４は以下の２つの方法で、ターゲットＣＰＵの時間とＩＳＳ２１の時間を同期させる。
【００５１】
（i）  サイクル時間を使う方法
図９は、ターゲットＣＰＵの命令毎のサイクル数を示す図の一例である。例えば、ＡＤＤ命令は実行完了までに１サイクル必要とし、ＬＤ．Ｗ命令は実行完了までに５サイクル必要とする。１サイクルでクロック信号がＨｉｇｈとＬｏｗを１つずつ繰り返す。時間管理部３４は、図９のようなデータベースを有しており、基本ブロック毎に実行した各命令のサイクル数を加算する。基本ブロックとは、１つの関数や１つの機能を実現するための一連の命令列である。例えば、基本ブロックにＡＤＤとＳＵＢの命令が１０個ずつあれば、加算結果は、２０サイクルとなる。
【００５２】
時間管理部３４は、基本ブロック毎に予測時間と実測時間を算出する
予測時間＝  合計サイクル数  ×  クロック周期
実測時間＝  基本ブロックを出た時の時間  −  基本ブロックに入った時の時間  ＋  前回からの繰り越し時間（差分）
予測時間を算出するためのクロック周期は、ターゲットＣＰＵのクロック周波数なので固定値（既知）である。予測時間は、ターゲットＣＰＵにおいて基本ブロックを実行するために必要な時間の計算値であり、実測時間はＩＳＳ２１で基本ブロックを実行した時の実際の時間である。両者がほぼ等しくなることが好ましいが、実際にはずれるため、以下のようにして、基本ブロック毎に命令の実行タイミングを揃える。
【００５３】
実測時間＜予測時間（実測時間の方が早い）…時間管理部３４は予測時間が経過するまでＣＰＵコア部３１に命令の実行を待機させる。
【００５４】
実測時間＞予測時間（実測時間の方が遅い）…時間管理部３４は次の基本ブロックに差分を持ち越す。差分は、「実測時間＋差分（１つ前の基本ブロックまでの差分）−予測時間」である。これにより、次の基本ブロックで、実測時間＜予測時間であれば、差分を全て又は一部、吸収できる。
【００５５】
（ii）  パイプライン制御を考慮する方法
ターゲットＣＰＵを含め多くのＣＰＵでは命令の実行にパイプライン制御が適用されている。パイプライン制御では、１つの命令の実行プロセスを複数の実行ステージに区分して、各実行ステージで別々の命令を実行する命令実行制御である。こうすることで、１サイクルで１つの命令を実行完了できる。
【００５６】
図１０は、パイプライン制御を模式的に説明する図の一例である。図１０（ａ）〜（ｃ）は乗算命令の場合を、図１０（ｄ）（ｅ）は分岐命令の場合をそれぞれ示している。このターゲットＣＰＵはワード（３２bit）の乗算命令を８つの実行ステージで実行し、ハーフワード（１６bit）の乗算命令を５つの実行ステージで実行する。なお、実行ステージのＩＦは命令フェッチ、ＩＤは命令デコード、ＥＸは実行、ＷＢはレジスタへのライトバック、ＭＥＭはメモリ部３３へのアクセスを意味している。
【００５７】
図１０（ａ）では乗算命令の後に３つの乗算以外の命令を実行している。乗算以外の命令は８つの実行ステージを必要としないので（図では５ステージ）、１つ目の乗算命令が実行完了するまでに残りの３つの命令も実行が完了する。
【００５８】
図１０（ｂ）では乗算命令の後に１つのハーフワードの乗算命令を実行している。乗算命令は同時に２つ実行できないので（ハザード）、「−」で示される待ち合わせのサイクルが生じ、１つ目の乗算命令の実行完了に８サイクル、２つ目の乗算命令の実行完了に８サイクル（全体で９サイクル）必要とする。
【００５９】
また、図１０（ｃ）は乗算命令の後の３つ目の命令が乗算命令の場合を示す。この場合、４つの命令の実行完了までに９サイクル必要とする。
【００６０】
このように、パイプライン制御の場合、実行される命令の順番によって、同じサイクル数が経過しても実行完了可能な命令数が異なる。
【００６１】
分岐命令の場合も同様である。図１０（ｄ）のように分岐条件が成立しない場合、分岐する必要がないので、パイプライン上ですでに実行が開始されている命令が無駄にならない。このため、６サイクルで２つの命令が実行完了する。図１０（ｅ）のように分岐条件が成立した場合、分岐するため、パイプライン上ですでに実行が開始されている命令が無駄になり、分岐先の命令で実行ステージを埋めるための時間がかかる。このため、２つの命令を実行完了するために７サイクル必要になる。
【００６２】
時間管理部３４は、プログラムをパイプライン制御した場合に必要なサイクル数を計算する。したがって、基本ブロックの実行に必要なサイクル数をより正確に求めることができる。これを合計サイクル数とすれば、予測時間の精度を向上させることができ、時間管理部３４はターゲットＣＰＵにおけるプログラムの実行時間とＩＳＳ２１の実行時間を揃えやすくなる。
【００６３】
〔タイマ管理部によるタイマの同期と補正〕
ＣＰＵ部２０とＩ／Ｏ部４０のクロック周波数（タイマ用の周波数なので以下、タイマ周波数とする）の違いにより生じる時間の補正について説明する。ＣＰＵ部２０の仮想Ｉ／Ｏレジスタのタイマ３５２と、Ｉ／Ｏ部４０のタイマはそれぞれ時間を計測するが、タイマ周波数が異なる。例えば、クロック発生器２５のクロック周波数が１００ＭＨｚ、クロック発生器４５のクロック周波数が１００．１ＭＨｚの如くである。
【００６４】
このまま、仮想Ｉ／Ｏレジスタ部３５のタイマ値を処理に使用するとＩ／Ｏレジスタ部４１のタイマ値とずれた時刻で処理（例えば、開閉弁制御）を行うおそれがある。そこで、タイマ管理部３８が仮想Ｉ／Ｏレジスタ部３５のタイマ値を、クロック周波数の違いで補正する。
【００６５】
説明のため、以下のように定義する。
・Ｉ／Ｏ部４０のタイマ値を「Ｔｂ」、ＣＰＵ部２０のタイマ値を「Ｔａ」とする
・Ｉ／Ｏ部４０のタイマ周波数を「Ｆｉ」、ＣＰＵ部２０のタイマ周波数を「Ｆｃ」とする
タイマ周波数「Ｆｉ」「Ｆｃ」は計測や仕様書により既知となる固定値である。
【００６６】
図１１（ａ）はＣＰＵ部２０のタイマ値とＩ／Ｏ部４０のタイマ値のずれを説明する図の一例である。図１１（ａ）では上段から実時間、Ｉ／Ｏ部４０のタイマ値、ＣＰＵ部２０のタイマ値となっている。
【００６７】
実時刻Ｔ１の時に、タイマ管理部３８がＣＰＵ部２０のタイマ値とＩ／Ｏ部４０のタイマ値の同期を取ったものとする。同期は、ずれが増大しないように定期的に行われる。
【００６８】
Ｉ／Ｏ部４０のタイマ値は実時間と一致している（一致していなくてもＩ／Ｏ部４０のタイマ値を基準とするので不都合はない）。これに対し、ＣＰＵ部２０のタイマ値は、時刻Ｔ２においてＩ／Ｏ部４０のタイマ値とずれている。このずれがタイマ周波数の違いによるものである。
【００６９】
タイマ管理部３８は以下のようにして同期と補正を行う。
（１）時刻Ｔ２に補正するものとする。タイマ管理部３８はＩ／Ｏ部４０のタイマ値「Ｔｂ」とＣＰＵ部２９のタイマ値「Ｔａ」を取得する。図１１（ｂ）は仮想Ｉ／Ｏレジスタマップを示す。仮想Ｉ／Ｏレジスタマップは仮想Ｉ／Ｏレジスタ部３５とは別に設けられた作業用のレジスタである。Ｉ／Ｏ部４０のタイマ値「Ｔｂ」とＣＰＵ部２０のタイマ値「Ｔａ」は、仮想Ｉ／Ｏレジスタマップが示すレジスタに格納される。
（２）前回の同期時刻をＴ１とし、その時のＩ／Ｏ部４０のタイマ値を「Ｔｂ１」、ＣＰＵ部２０のタイマ値を「Ｔa１」、とする。
（３）時刻Ｔ２に、ＣＰＵ部２０からＩ／Ｏ部４０のタイマにリードアクセスが発生した場合、ＣＰＵ部２０のタイマ値の補正が必要になる。時刻Ｔ２のＣＰＵ部２０の仮想Ｉ／Ｏレジスタのタイマ値を「Ｔａ２」、Ｉ／Ｏ部４０のタイマ値を「Ｔｂ２」とする。仮想Ｉ／Ｏレジスタのタイマ値をＴａ２」は以下のように補正される。
Ｔａ２（補正後）＝Ｔａ１＋（Ｆｉ／Ｆｃ）×（Ｔａ２−Ｔｂ１）…（１）
すなわち、Ｉ／Ｏ部４０のタイマ周波数とＣＰＵ部２０のタイマ周波数の比を、前回の同期時刻Ｔｂ１からの経過時間にかけて、ＣＰＵ部２０のタイマ値Ｔａ２を補正している。時刻Ｔ１で同期されているという前提で、式（１）でＴｂ１の代わりにＴａ１を用いてもよい。
【００７０】
また、ずれを無視できるほど短い周期で同期が行われている場合、Ｔａ２でなくＴｂ２を使用することもできる。
Ｔａ２（補正後）＝Ｔａ１＋（Ｆｉ／Ｆｃ）×（Ｔｂ２−Ｔｂ１）…（２）
式（１）（２）で補正されたＴａ２の値が、Ｉ／Ｏ部４０のタイマ値と等価になるので、ＬＤ／ＳＴアクセス制御部３２は、タイマ管理部３８が補正したＴａ２をリードデータとしてＣＰＵコア部３１に返す。これにより、ＣＰＵ部２０とＩ／Ｏ部４０の周波数の違いによらず、ＩＳＳ２１はターゲットＣＰＵと時間的な相関性の高いシミュレーションが可能となる。
【００７１】
なお、この補正は、ＬＤ／ＳＴアクセス制御部３２がアドレス変換関数“transC”を実行する際に、アドレスの変換後、又は、アドレスの変換の一部として、続いて行われる。アドレス変換関数“transC”に時間補正を紐づけることで、アドレス変換を行うだけで時間補正も行うことができる。
【００７２】
〔遅延を利用した通信路の品質管理〕
ＣＰＵコア部３１からＩ／Ｏレジスタ部４１にアクセスする場合と、仮想Ｉ／Ｏレジスタ部３５にアクセスする場合とで、アクセスレイテンシが異なる。このアクセスレイテンシが異なることを利用して通信路２３の品質を管理することができる。
【００７３】
図１２は、アクセスレイテンシの違いを説明する図の一例である。
ＣＰＵコア部３１がＬＯＡＤ命令を実行してから仮想Ｉ／Ｏレジスタ部３５に格納されているデータＡを取得するまでの時間をＸ´、ＣＰＵコア部３１がＬＯＡＤ命令を実行してからＩ／Ｏレジスタ部４１に格納されているデータＢを取得するまでの時間をＸ、とする。時間Ｘ＞時間Ｘ´なので、時間Ｘの間に仮想Ｉ／Ｏレジスタ部３５にアクセスすることができる。
【００７４】
データＡとデータＢは、Ｉ／Ｏ部４０のレジスタと、そのレジスタに対応する仮想Ｉ／Ｏレジスタ部３５のレジスタにそれぞれ記憶されているデータである。したがって、本来は、データＡとデータＢは同じ値になる。なお、タイマのように常に値が変動しているレジスタは、値の比較が困難なので、通信路チェック部３９が利用するレジスタとしては少なくとも時間Ｘ内で変化しないデータを格納するレジスタがよい。
【００７５】
通信路チェック部３９は、例えば以下のように通信路２３をチェックする。
（１）ＣＰＵコア部３１に仮想Ｉ／Ｏレジスタ部３５のレジスタとＩ／Ｏレジスタ部４１のレジスタからそれぞれデータＡ，ＢをＬＯＡＤさせる。
（２）ＬＯＡＤしたデータＡとデータＢを比較する。
（３）比較した結果、データＡとデータＢが一致していれば、通信路２３に不具合はなく、仮想Ｉ／Ｏレジスタ部３５のデータＡは、Ｉ／Ｏレジスタ部４１のデータＢが正常に反映されていることが推定できる。データＡとデータＢが一致しない場合、通信路チェック部３９は、通信路２３の解析が必要であるとしてエラーメッセージを表示するなどする。
【００７６】
本実施形態のシミュレーションは通信路２３が正常であることが前提だが、このようにアクセスレイテンシが異なることを利用して、アクセスレイテンシが長い方のアクセス時間内に通信路２３をチェックすることができる。
【符号の説明】
【００７７】
２０    ＣＰＵ部
２１    ＩＳＳ
２２    ホストＣＰＵ
２３    通信路
２５，４５    クロック発生器
３１    ＣＰＵコア部
３２    ＬＤ／ＳＴアクセス制御部
３５    仮想Ｉ／Ｏレジスタ部
３６、４３    データ更新部
３７    アクセステーブル
３８    タイマ管理部
４０    Ｉ／Ｏ部
４１    Ｉ／Ｏレジスタ部
１００  ＰＣ
３５２  タイマ
【図１】
2013218394.tif 000003
【図２】
2013218394.tif 000004
【図３】
2013218394.tif 000005
【図４】
2013218394.tif 000006
【図５】
2013218394.tif 000007
【図６】
2013218394.tif 000008
【図７】
2013218394.tif 000009
【図８】
2013218394.tif 000010
【図９】
2013218394.tif 000011
【図１０】
2013218394.tif 000012
【図１１】
2013218394.tif 000013
【図１２】
2013218394.tif 000014