(57)【特許請求の範囲】
【請求項１】
計算機システムでシミュレーション対象機器のシミュレーションを行うことにより、当該機器を制御対象とするソフトウェアの検証を行うシミュレーション装置であって、
前記計算機システムは、前記機器のシミュレーション対象モデルのデータを記憶するシミュレーション対象モデルデータ記憶部を有しており、
計算機システムの外部に設けられた、ユーザインターフェイス部とデバッグ情報インポーザとを備え、
前記ユーザインターフェイス部は、前記シミュレーション内部で実行される前記ソフトウェアの実行状況を出力する機能と、前記シミュレーション対象モデルの実行状況に異常が発生したとき該異常を表示する機能と、該異常状態を解決するためのデバッグシーケンスをユーザが構築するのをサポートする機能とを有し、
前記デバッグ情報インポーザは、前記デバッグシーケンスを前記シミュレーション対象モデルにおいて割込み処理により実行する機能を有する
ことを特徴とするシミュレーション装置。
【請求項２】
請求項１において、
前記ユーザインターフェイス部において、前記異常として無限ループが出力された場合に、前記デバッグシーケンスがループ条件を変更する命令列であり、
前記デバッグ情報インポーザは、前記命令列を前記シミュレーション対象モデルにおいて実行し、該シミュレーション対象モデルの異常状態を解決する機能を有することを特徴とするシミュレーション装置。
【請求項３】
請求項２において、
前記デバッグ情報インポーザは、前記シミュレーション対象モデル中のメモリ領域に対し、前記命令列を転送し、
前記計算機システムのCPUに対して前記命令列を実行させる割込み処理を発生させることにより、前記CPUにおける前記ソフトウェアの実行状況を更新可能である
ことを特徴とするシミュレーション装置。
【請求項４】
請求項１において、
前記デバッグ情報インポーザは、
前記シミュレーション実行状態における前記ソフトウェア実行の継続性に不具合を来す前記異常状態に関する情報を抽出し、前記ユーザインターフェイス部に表示する情報として生成する機能を有する異常状態抽出部と、
前記デバッグシーケンスに従い、デバッグ操作を前記計算機システムのCPUに実行させるための操作を、割込み信号コントローラ及び、バスマスタモデルを用いて行う機能を有するデバッグシーケンス実行部とを備えていることを特徴とするシミュレーション装置。
【請求項５】
請求項４において、
前記バスマスタモデルは、前記シミュレーション対象モデル中への前記デバッグシーケンスの注入及び、前記計算機システムのRAMに対するメモリ操作を行う機能を有し、
前記割込み信号コントローラは、前記デバッグシーケンスの実行を前記計算機システムのCPUに行わせるためのトリガをかける機能を有することを特徴とするシミュレーション装置。
【請求項６】
請求項１において、
前記ユーザインターフェイス部は、
前記シミュレーション対象モデル中の前記ソフトウェアの実行状態を表示する画面を有するソフト実行状況表示部と、
前記ソフトウェアに対して注入する命令列を構築するためのシーケンス構築用の画面を有するシーケンス構築部と、
前記シミュレーション対象モデルに異常が発生したとき、該異常状態を変更する命令列を生成し、該命令列を前記シミュレーション対象モデルに送信するための画面を有するシーケンス送出部とを有する
ことを特徴とするシミュレーション装置。
【請求項７】
請求項６において、
前記ユーザインターフェイス部は、
前記ユーザに対し、前記シミュレーション対象モデル中の前記計算機システムのRAMに対する操作を行って、前記デバッグシーケンスを構築するのをサポートする
ことを特徴とするシミュレーション装置。
【請求項８】
請求項６において、
前記ソフト実行状況表示部は、
前記シミュレーション実行途中において前記ソフトウェアの不具合の個所を抽出して前記画面に表示する機能、及び、
前記抽出された不具合に関してあらかじめデータベースに蓄積された情報からその回避条件、あるいはプログラムの継続条件を抽出し、前記画面に表示する機能を有する
ことを特徴とするシミュレーション装置。
【請求項９】
請求項６において、
前記シーケンス構築用の画面は、
編集対象シーケンスを選択するリスト、編集中シーケンスを表示するシーケンス内操作リスト、及び、前記デバッグシーケンスに追加するコマンドーを選択するコマンドー選択リストを表示する画面を有している
ことを特徴とするシミュレーション装置。
【請求項１０】
計算機システムでシミュレーション対象機器のシミュレーションを行うことにより、当該機器を制御対象とするソフトウェアの検証を行うシミュレーション装置であって、
シミュレーション対象モデルデータ記憶部に、前記機器のシミュレーション対象モデルのデータを記憶し、
前記シミュレーション内部で実行される前記ソフトウェアの実行状況をユーザインターフェイス部に出力し、
前記シミュレーション対象モデルの実行状況に異常が発生したとき、該異常を前記ユーザインターフェイス部に表示し、
前記ユーザインターフェイス部において、該異常状態を解決するためのデバッグシーケンスを受け付け、
デバッグ情報インポーザにより、前記デバッグシーケンスを前記シミュレーション対象モデルにおいて割込み処理により実行する
ことを特徴とするシミュレーション方法。
【請求項１１】
請求項１０において、
前記ユーザインターフェイス部に表示された前記シミュレーション対象モデルで発生した異常が、ループ条件における無限ループであったとき、前記ユーザインターフェイス部において該ループ条件を変更する命令列を生成し、
該変更されたループ条件を前記デバッグ情報インポーザに送信し、
前記命令列を前記シミュレーション対象モデルにおいて実行し、前記シミュレーション対象モデルの異常状態を解決する
ことを特徴とするシミュレーション方法。
【請求項１２】
請求項１１において、
前記デバッグ情報インポーザにより、前記シミュレーション対象モデル中のメモリ領域に対し、前記命令列を転送し、
前記計算機システムのCPUに対して前記命令列を実行させる割込み処理を発生させることにより、前記CPUにおける前記ソフトウェアの実行状況を更新する
ことを特徴とするシミュレーション方法。
【請求項１３】
請求項１０において、
前記計算機システムの外部に、前記シミュレーションの実行状況の確認と、前記シミュレーション実行継続条件の構築が可能なデバッグ情報インポーザ及びユーザインターフェイスを備え、
前記計算機システムは、
前記ユーザインターフェイスから送信される前記シミュレーション実行継続条件を受け取り、
該シミュレーション実行継続条件を未使用のメモリ空間と割込み要因を用いて、前記シミュレーション対象モデルである組込みシステム内部で実行させ、
前記シミュレーションの終了状態まで継続させる
ことを特徴とするシミュレーション方法。
【請求項１４】
請求項１３において、
異種シミュレータの相互接続により前記組込みシステムの全体レベルの協調シミュレーションを行なう
ことを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置及びシミュレーション方法に係り、特に、組込みシステムの開発にシミュレータを用いる場面に於いて、シミュレーションの外部から利用者の望む動作を注入する技術に関する。
【背景技術】
【０００２】
組込みシステムとは、制御対象を構成するメカニズムと、メカニズムから受け取った物理量を元に制御演算を行い、メカニズムに制御値の出力を行なうハードウェアと、ハードウェア上で動作するソフトウェアから構成されるシステムである。    例えば、自動車エンジン制御向けの組込みシステムでは、制御対象であるエンジンとエンジンを制御するマイコン等の電子機器とその上で動作するソフトウェアを指す。  
【０００３】
組込みシステムに含まれるソフトウェアの挙動は、制御対象のメカニズムとハードウェアの構成に強く依存するため、メカニズム、ハードウェア、ソフトウェアを併せた挙動の解析が必要である。  
【０００４】
近年、自動車、電気機器等の高信頼化、高機能化により組込みシステムが複雑化しており、作業期間短縮のためハードウェア、ソフトウェアの各部品を細分化して分業化が行なわれ、複数拠点での同時開発が行われている。    分業化が進むにあたり、部品毎の動作確認だけではなく、部品の組み立て時に判明する性能不足、仕様の不具合が増加し、製品出荷前の最終段階での手戻りによる開発期間の遅延が多発しており、開発効率の悪化が問題となっている。
【０００５】
この問題を解決するため、設計時点でのメカニズム・ハードウェア・ソフトウェアを協調させたシミュレーションによる性能評価、検証手法が用いられ始めている。
【０００６】
シミュレーション実行時の不具合回避に関する先行技術として、特許文献１に示されるように、専用デバッグ回路を有するプロセッサを備えたシミュレーションが知られている。すなわち、特許文献１には、一度シミュレーションを行った際の動作と、開発者が予め入力した期待値とを比較し、差異が生じた部分を不具合発生箇所とし、次回以降のシミュレーションにおいて、該当部分の動作をシミュレータの機能を用いて省略するという専用デバッグ回路を備えた技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−０２２６１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
メカニズム・ハードウェア・ソフトウェア協調のシミュレーションでは、シミュレーション対象となるメカニズムやハードウェアの構成によって利用できるシミュレータが異なる事と、すでに特定のシミュレータ用に作成されたシミュレーションモデルの蓄積がある事から、異種シミュレータの相互接続による製品全体レベルの協調シミュレーションが行なわれる。  
【０００９】
一方、組込みシステムの開発は複数拠点での同時に行われるため、シミュレーションはオフラインシミュレーションとして実行される場合が多い。
【００１０】
オフラインシミュレーションで上記協調シミュレーションを実行する際の問題として、シミュレーション対象の構成部品、例えば機械系の一部品、ソフトウェアの一部の関数が未実装であった場合、それらの結果を用いる部分のシミュレーションが動作不能となり、結果としてシミュレーションの実行がその時点で停止する現象が発生し得る。  
【００１１】
この現象は、協調シミュレーション環境の構築時に頻発する問題である。    従来は、問題が発生する度にシミュレーション停止に至った原因を調査し、不足している部品を追加実装してシミュレーションを再度最初から実行しなおすというプロセスを用いていた。
【００１２】
図１１を用いて、従来のデバッグプロセスの一例を概説する。    まず、ユーザがシミュレーションを開始する（ステップ１１００）。    そして不具合Ａによって、シミュレーションが異常状態、例えば、機械系の一部品が未実装である等の要因で、無限ループに陥る（ステップ１１０１）。  
その、際ユーザは、シミュレーションを一旦終了させ、不具合Ａに対して部品を実装する等の回避策を実装して、シミュレーション対象モデル１０６に組込む（ステップ１１０２）。そして、最初からシミュレーションを再実行する（ステップ１１０３）。さらに、別の不具合Ｂ、例えば、ソフトウェアの一部の関数が未実装である等の要因によって、シミュレーションが無限ループに陥る（ステップ１１０４）。その際ユーザは、シミュレーションを一旦終了させ、不具合Ｂに対して関数を実装する等の回避策を実装して、シミュレーション対象モデル１０６に組込む（ステップ１１０５）。この繰り返しを、シミュレーションが終了状態にいたるまで繰り返すこととなる（ステップ１１０６）。  
【００１３】
このようなステップの場合、回避策の実装工数を事前に見積もることが非常に困難となるのが問題であった。すなわち、このような逐次的な不具合対策では、完成にいたるまでに必要となる追加実装部分の全体像を把握することが困難であり、効率的な環境構築への障害となっていた。  
【００１４】
一方、特許文献１に開示された技術は、専用デバッグ回路を有しないプロセッサには適用できない。
【００１５】
本発明の目的は、異種複数のシミュレーションが動作する計算機環境において、逐次的な不具合対策を必要とせず、シミュレーション実行継続を可能とする、シミュレーション装置及びシミュレーション方法を提供することにある。
【００１６】
本発明の他の目的は、専用デバッグ回路を有しない組込みシステムにおいても、ソフトウェアの構成に影響を与えること無く、シミュレーションの実行継続を可能にする、シミュレーション装置及びシミュレーション方法を提供することにある。
【課題を解決するための手段】
【００１７】
本願において開示される発明のうちの代表的なものについて簡単に説明すれば下記のとおりである。すなわち、本発明のシミュレーション装置は、計算機システムでシミュレーション対象機器のシミュレーションを行うことにより、当該機器を制御対象とするソフトウェアの検証を行うシミュレーション装置であって、前記計算機システムは、前記機器のシミュレーション対象モデルのデータを記憶するシミュレーション対象モデルデータ記憶部を有しており、計算機システムの外部に設けられた、ユーザインターフェイス部とデバッグ情報インポーザとを備え、前記ユーザインターフェイス部は、前記シミュレーション内部で実行される前記ソフトウェアの実行状況を出力する機能と、前記シミュレーション対象モデルの実行状況に異常が発生したとき該異常を表示する機能と、該異常状態を解決するためのデバッグシーケンスをユーザが構築するのをサポートする機能とを有し、前記デバッグ情報インポーザは、前記デバッグシーケンスを前記シミュレーション対象モデルにおいて割込み処理により実行する機能を有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、ユーザに対し、シミュレーション対象モデルの外部からその実行継続条件を注入可能とする機能を提供することにより、システム挙動の把握を容易にし、シミュレーションの停止を回避する事が可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第一の実施例になる組込みシステムのシミュレーション装置の全体的な構成例を概説する、機能ブロック図。
【図２】本発明の適用対象となる、組込みシステムの構成例を概説する図。
【図３】図１のUI部の画面構成例（ソフト実行状況表示部分）を示す図。
【図４】図１のUI部の画面構成例（シーケンス構築部分）を示す図。
【図５】図１のUI部の画面構成例（シーケンス送出部）を示す図。
【図６】図１のデバッグ情報インポーザの構成例を示す図。
【図７】第一の実施例の全体の動作フローを示す図。
【図８】本発明におけるデバッグプロセスの概念を示す図。
【図９】第一の実施例を利用したデバッグプロセスの全体のフローの例を示す図。
【図１０】第一の実施例におけるデバッグプロセスの具体例を示す図。
【図１１】従来技術によるデバッグの全体のフローの例を示す図。
【図１２】本発明の課題を説明する図。
【発明を実施するための形態】
【００２０】
組込みシステムでは動作の流れを決定する要因は、前記システム中のプロセッサ上で実行されるソフトウェアである。図１２により、本発明の課題を説明する。ここでは、処理Ａでステップ１２０〜ステップ１２４を実行し、それに続くステップ１３０以下の処理Ｂがあり、ステップ１２１に不具合がある場合を想定する。ステップ１２１に不具合があると、それに続く分岐命令の読出し（ステップ１２２）、分岐比較の実行（ステップ１２３）、分岐命令の実行（ステップ１２４）が適切に処理されず、シミュレーション停止に至る。このような異常状態は、図１１で述べたような無限ループとして観測される事が大半を占める。このループ条件等の不具合は、そのソフトウェアの外部から変更可能なものである。  
【００２１】
よって、本発明のシミュレーション装置は、シミュレーション対象中のソフトウェアが参照するループ条件等の不具合を、シミュレーション対象モデルの外部から変更するための手段を実装する点に特徴がある。
【００２２】
本発明のシミュレーション装置は、ユーザに対して、シミュレーション対象モデルの実行条件を提示し、ユーザがそのシミュレーションの実行継続条件を構築することを可能にする。そして、ユーザが構築したシミュレーション実行継続条件をシミュレーション対象モデルが受け取り、対象とするシミュレーション環境のメモリ空き領域と、割込みを用いることにより、そのシミュレーションの実行継続条件を構築する。これによって、無限ループ等の不具合により停止したシミュレーションを継続して実行する。  
【００２３】
本発明によれば、シミュレーション停止に至った場合でも、外部から内部状態を更新することにより、シミュレーションを終了させること無く、終了状態まで実行継続を可能にする事で、一度のシミュレーションで追加実装が必要な部分の洗い出しを可能とする。    以下、図面を参照しながら、本発明の実施例を詳細に説明する。
【実施例１】
【００２４】
図１は、本発明の第一の実施例になる組込みシステムのシミュレーション装置の全体的な構成例を概説する機能ブロック図である。本発明のシミュレーション装置は、組込みシステムのシミュレーションが、その構成要素の不具合によって停止状態に入った場合に、ユーザがその停止状態を回避するための命令列（以降デバッグシーケンスと呼称）を構築して、シミュレーション内部に反映させることを可能にする計算機システムである。  
【００２５】
本計算機システムにはシミュレーション対象モデル１０６が搭載され、さらにこのシミュレーション対象モデル１０６中に搭載されたデバッグ情報インポーザ１０１と、外部のユーザインターフェイス部１００とを備えている。
【００２６】
デバッグ情報インポーザ１０１は、シミュレーション対象モデルに異常が発生した場合に、その異常を解決する命令列をシミュレーション対象モデル１０６において実行する機能を有している。
【００２７】
ユーザインターフェイス部１００は、ユーザが対話的な処理により、デバッグシーケンスの構築と、シミュレーション内部で実行されるソフトウェアの実行状況の確認を可能にする機能を有している。すなわち、ユーザインターフェイス部１００は、通常のユーザインターフェイスとしての機能のほかに、デバッグ用ユーザインターフェイス部１０７を備えており、このインターフェイス部は、ソフト実行状況表示機能１０８、シーケンス構築機能１０９、及び、シーケンス送出機能１１０を有している。
【００２８】
シミュレーション対象モデル１０６は、基本シミュレータ１０６Ａと、デバッグ情報インポーザ１０１を有する拡張シミュレータ１０６Ｂとで構成される。基本シミュレータ１０６Ａは、計算機システム（コンピュータ）により構成され、バスを介して接続された割込みコントローラ１０２、RAM １０３、ROM １０４、CPU １０５、及び、システムモデル１２０を備えている。シミュレーション対象モデル、すなわちシステムモデル１２０のデータは、RAM １０３のシミュレーション対象モデルデータ記憶部に保持される。
【００２９】
ユーザインターフェイス部１００とシミュレーション対象モデル１０６は、別個のソフトウェアとして動作することが可能であり、このソフトウェア間では各々が動作する計算機がサポートする通信規格を用いて、ソフトウェア実行状況及びデバッグシーケンスがやり取りされる。  
【００３０】
次に、本発明の適用対象となる、組込みシステム２１０の構成例を概説する。  
一般に、組込みシステムは、機械部品２０７〜２０９、通信インターフェイス２０５、と制御マイコン２００の組合せによって構成される。制御マイコン２００の内部ではメモリバス２０４を中心として、CPU２０１があり、その上でソフトウェア２０２が動作する。また、割込みコントローラ２０３がCPU２０１と接続されており、周辺機器２０６が制御マイコン２００の外部にある機械部品２０７〜２０９、及び、通信インターフェイス２０５と接続された構成となっている。ここでは、組込みシステム２１０の構成要素として自動車の制御システムを例にとると、機械部品２０７には、例えば、エンジン制御ユニット、起動、発電制御ユニット、車両の駆動機構制御ユニット、車体制御ユニット、その他の各種の制御ユニット（図示略）がある。各制御ユニットは、各々、ソフトウェア（コンピュータプログラム）を実行することで所定の機能が実現される複数のモジュールによって構成されている。また、これらのソフトウェアでは、エンジンや車両の各種の状態を検知する各種のセンサ２０８の出力、車両の操作状態を示すスイッチ類２０９の各イベントや状態などを示すデータが用いられる。これら、制御マイコン２００の周辺機器２０６、すなわち機械部品２０７〜２０９、及び、通信インターフェイス２０５が、図１のシステムモデル１２０に対応するものである。
【００３１】
このような組込みシステム２１０が動作する際のデータの流れとしては、通信インターフェイス２０５または機械部品２０７〜２０９から周辺機器２０６がデータを受け取ると、割込みコントローラ２０３がCPU２１０上でのデータ処理を割込させ、処理された結果が、再度周辺機器２０６を通し、通信インターフェイス２０５または機械部品２０７〜２０９に指令される、という形をとる。  
【００３２】
従って、組込みシステム２１０の構成要素における不具合の存在は、ソフトウェア２０２がCPU２０１の外部からデータ入力を待つ状態で停止している状態として外部から観測される。  
【００３３】
本発明は、組込みシステム２１０の不具合が、ソフトウェアの実行の停滞に帰結される現象に着目して、それを回避する手段を提供し、組込みシステム２１０の実行継続を可能にすることで、組込システム２１０におけるユーザの不具合事象の把握を補助するものである。
【００３４】
次に、図３に、図１のユーザインターフェイス部１００における、ソフト実行状況表示部１０８の表示画面３００の構成例を示す。ソフト実行状況表示部１０８は、ユーザに対しシミュレーションの実行状況を提示する機能を提供するものであり、ソフトの不具合の個所を抽出する機能、抽出された不具合に関してあらかじめデータベースに蓄積された情報からその回避条件、あるいはプログラムの継続条件などを抽出し、ユーザに提示する機能を有する。ソフト実行状況表示画面３００には、ソフト実行状況表示部３０１と、ソフト実行状況キャプチャ開始ボタン３０２がある。
【００３５】
すなわち、シミュレーション対象内のCPU２０１の動作トレース（CPUトレース）は、そのシミュレータの機能によって捕捉できるものとする。シミュレーション実行途中においてソフト実行状況キャプチャ開始ボタン３０２を押すことにより、その機能が有効となり（図７のＳ７００−２参照）、CPUトレースが採集される。そのCPUトレースを解析することにより、シミュレーション内部の無限ループ状態を検出する。検出方法としては、CPUトレースの内、プログラムカウンタ値の遷移記録をとり、短い期間で周期的な動作をしている箇所を抜き出す。  
【００３６】
この時抜出した、プログラムカウンタの範囲、動作周期、ループ条件となっている条件式が、ソフト実行状況表示部３０１に提示される。さらに、不具合の個所や、データベースに蓄積された情報に基づく不具合の回避条件、あるいはプログラムの継続条件などが表示される。図３の例では、プログラムカウンタの範囲に、不具合のある特定の命令列の範囲が表示され、その動作周期が２０３μsec、であり、さらに、ループの脱出条件式も表示されている。
【００３７】
次に、図４は、ユーザインターフェイス部１００のシーケンス構築部１０９の画面４００の構成例を示す。  
【００３８】
ユーザは、提供された情報に基づき、この画面４００を用いてデバッグシーケンスを構築し、そのデータはシミュレーション対象モデル１０６のメモリに記録される。すなわち、デバッグシーケンスは、シミュレーション対象中のRAM１０３に対する操作と言う形で表現される。
【００３９】
よって、シーケンス構築部１０９の画面４００は、編集対象シーケンスを選択するリスト４０１、編集中シーケンスを表示するシーケンス内操作リスト４０２、追加するコマンドーを選択するコマンドー選択リスト４０３を有している。シーケンス内操作リスト４０２により追加可能なコマンドーには、指定アドレスに対する、書込操作、読出し操作、指定時間のウェイト（待機）の３種が存在する。さらに、アドレス入力フィールド４０４は、操作対象となるアドレス値を指定するものであり、アクセス値入力フィールド４０５は、メモリ値を書き換える値を指定するものである。ユーザは、シーケンス追加ボタン４０６の操作により、コマンドー選択リスト４０３で選択した「コマンドー」と、アドレス入力フィールド４０４とアクセス値入力フィールド４０５で指定された「アドレス」及び「値」に関するメモリ操作を、編集対象であるシーケンス内操作リスト４０２に表示されたデバッグシーケンスに追加することができる。
【００４０】
次に、図５は、ユーザインターフェイス部１００のシーケンス送出部１１０の画面５００の構成例を示すものである。ユーザは、シーケンス構築部１０９で構築した、デバッグシーケンスの送出指示をこの画面５００から行う。  
【００４１】
このため、シーケンス送出部１０９の画面５００は、「送出対象デバッグシーケンス」を選択するシーケンス選択リスト５０１、選択されたデバッグシーケンスの「送出タイミング」を選択する送出タイミング選択リスト５０２、送出タイミング選択リスト５０２で時間指定オプションが選択された時その「送出時間」を指定するミュレーション時間入力フィールド５０３を備えている。画面５００はさらに、シーケンス送出ボタン５０４を備えており、ユーザがこのシーケンス送出ボタン５０４を操作することにより、シーケンス選択リスト５０１と送出タイミング選択リスト５０２とシミュレーション時間入力フィールド５０３で指定された情報を用いて、実際にデバッグシーケンスの送出を行う。
【００４２】
次に、図６は、図１におけるデバッグ情報インポーザ１０１の内部構成及び、シミュレーション対象モデル１０６との接続関係を示す図である。  
【００４３】
デバッグ情報インポーザ１０１は、シミュレーション対象モデル１０６中で動作する、割込み発生モデル及びバスマスタとして機能する。  
【００４４】
デバッグ情報インポーザ１０１のプロセス間通信I/F６００は、プロセス間通信によってユーザインターフェイス部１００と接続しており、ユーザインターフェイス部１００より送出されるデバッグシーケンスと送出タイミング情報を受け取って解釈する機能を持つ。  
【００４５】
バスマスタモデル６０４は、シーケンス送出部１１０の画面５００での操作を受けて、シミュレーション対象モデル１０６中へのデバッグシーケンスの注入及び、RAM１０４に対するメモリ操作を行う機能を有する。    割込み信号コントローラ６０３は、デバッグシーケンスの実行をCPU１０５に行わせるためのトリガをかける機能を有する。  
異常状態抽出部６０１は、ユーザインターフェイス部１００のソフト実行状況表示部１０８で表示するための、シミュレーション実行状態におけるプログラム（ソフトウェア）実行の継続性に不具合を来す異常状態の情報を抽出し、生成する機能を有する。異常状態としては、無限ループ、変数値異常、RAM値の異常、CPUの動作範囲の異常、などが挙げられる。  
デバッグシーケンス実行部６０２は、プロセス間通信I/F６００が受け取ったデバッグシーケンスに従い、デバッグ操作をCPU１０５に実行させるための操作を、割込み信号コントローラ６０３及び、バスマスタモデル６０４を用いて行う機能を有する。  
【００４６】
次に、図７を用いて、本実施例による、組込みシステムのシミュレーションの動作フローを概説する。図７は、横軸に、ユーザ、ユーザI/F、拡張シミュレータ、基本シミュレータを示し、縦軸に全体の処理の流れを示している。  
【００４７】
まず、ユーザはシミュレーションを開始する。この時、デバッグ情報インポーザ１０１の初期化が行われ、ユーザインターフェイス部からの接続待ちが行われる（ステップ７００、ステップ７０１、ステップ７１１）。  
【００４８】
次に、ユーザは、ユーザインターフェイス部１００のソフト実行状況表示部の画面３００のソフト実行状況キャプチャ開始ボタン３０２を押して、シミュレーションの実行状態キャプチャの開始を指示する。これによってデバッグ情報インポーザ１０１中の異常状態抽出部の機能が有効化される （ステップ７００−２、ステップ７０２−１）。
【００４９】
これによって、ユーザインターフェイス部１００の画面３００のソフト実行状況表示部３０１に、異常状態、例えば無限ループ状態の有無、そのループのプログラムカウンタ範囲、ループ周期、ループ脱出の条件式が表示される （ステップ７０２−２）。
【００５０】
この情報を元に、ユーザはユーザインターフェイス部１００のシーケンス構築画面４００で、異常状態を解消するためのデバッグシーケンスを構築する （ステップ７０３−１、ステップ７０３−２）。    同時に、ユーザインターフェイス部１００のシーケンス送出画面５００で、構築したデバッグシーケンスの送出タイミングを指定し、ユーザインターフェイス部１００のシーケンス送出画面５００のシーケンス送出ボタン５０４を押して、送出の指示をする（ステップ７０４） 。  
【００５１】
デバッグシーケンスの送出が指示されると、ユーザインターフェイス部１００内部では、シーケンスに含まれるコマンドーをシミュレーション対象モデル１０６中のCPU１０５のアーキテクチャのバイナリ列へと変換する （ステップ７０５） 。    さらに、変換されたバイナリ列と、ステップ７０４で指定された送出タイミングとをセットとしたデバッグシーケンスを、プロセス間通信I/F６００を通して、拡張シミュレータのデバッグ情報インポーザ１０１に送出する （ステップ７０６） 。  
【００５２】
送出されたデバッグシーケンスは、デバッグ情報インポーザ１０１のプロセス間通信インターフェイス６００で受信され、命令が解釈される（ステップ７０７）。    この時、デバッグシーケンス中のバイナリ列部分と送出タイミングが分割される。
【００５３】
次に、デバッグシーケンス中のバイナリ列がデバッグ情報インポーザ１０１のバスマスタモデル６０４を通して、シミュレーション対象モデル１０６の基本シミュレータ１０６ＡのRAM１０３上の、予め指定された未使用領域へコピーされる （ステップ７０８） 。  
デバッグシーケンス中の送出タイミングに記載される時間までデバッグシーケンスの実行は一時停止され、デバッグシーケンス実行部６０２で待機する（ステップ７０９）。なお、デバッグシーケンスの送出タイミングが即時であった場合、送出から待機を経ること無く実行される。  
【００５４】
デバッグシーケンスの送出タイミングにシミュレーションが到達すると、デバッグシーケンス実行部６０２によってデバッグシーケンスの実行が再開される。    この時、デバッグ情報インポーザ１０１の割込み信号コントローラ６０３を通し、シミュレーション対象モデル１０６中のCPU１０５に対して割り込みを発生させる（ステップ７１０） 。なお、割り込みのない状態では、基本シミュレータ１０６ＡはそのCPU１０５で動作するソフトウェア２０２を実行している（ステップ７１２）。ソフトウェア２０２には、この割込み専用の割込みベクタが割当てられている。割り込みを受けて、ソフトウェア２０２はこの割込みベクタから、デバッグ操作注入専用の割込みハンドラに対してジャンプする。この割込みハンドラには、前述のステップ７０８でコピーされたバイナリ列の先頭へのジャンプ命令のみが記述されている。（ステップ７１３）  するとCPU１０５の処理は、注入されたバイナリ列の実行へと遷移し、デバッグシーケンスを実行する。すなわち、ループ条件式を格納する変数のメモリ上での値が更新される（ステップ７１４）。
【００５５】
そして、この割込みから退避すると、ソフトウェア２０２の実行が継続される （ステップ７１５） 。この時、デバッグシーケンスの実行によりループ条件が解除されているため、ソフトウェアの実行継続が可能な状態になる （ステップ７１６） 。
【００５６】
このようにして、ソフトウェア２０２はその異常が解消され、シミュレーションが継続される。変数値異常、RAM値の異常、CPUの動作範囲の異常、などその他の異常の場合も、同様に、ユーザがソフト実行状況表示部３０１の情報を基に、異常状態解消のデバッグシーケンスを構築し、このデバッグシーケンス実行する。
【００５７】
図８に、本発明におけるデバッグプロセスの概念を示す。ここでは、ステップ１０、ステップ１１、ステップ１３〜ステップ１５を実行する処理Ａと、それに続く処理Ｂがあり、処理Ａのループ条件に不具合がある場合を想定する。本発明では、ソフトウェアの実行を継続させるために、異常状態にあるソフトウェア、例えば無限にループするソフトウェアに対して、そのループ条件を上書きする命令列をステップ１２として割り込ませ、ループ条件が格納されたメモリアドレスの値を書き換える。  
【００５８】
なお、この命令列を予めソフトウェアに組込む事は、割り込ませる命令列の柔軟性とROM使用量の観点から、コストが大きい。そこで、適切な命令列を都度メモリ上に読出し、ソフトウェアにはそのメモリ空間の先頭領域へのジャンプ命令のみを配置する方法を採用する。この場合、シミュレーション対象モデルに、特定の割込み要因に対応する特定アドレスに対するジャンプ命令のみで構成された割り込みハンドラを組込むだけで、利用可能となる（図７のステップ７１３、７１４）。
【００５９】
次に、図９を用いて、本発明によるデバッグプロセスの変化を、図１１と比較して概説する。
【００６０】
ユーザがシミュレーションを開始し（ステップ９００）、そして不具合Aによって、シミュレーションが無限ループに陥る（ステップ９０１）までは、本発明も従来例と同様である。
【００６１】
次に、ユーザが不具合Aに対応するデバッグシーケンスを構築し注入する（ステップ９０２）。この時シミュレーションは停止せずそのまま実行が継続される（ステップ９０３）。次に、不具合Bによってシミュレーションが無限ループに陥った場合も（ステップ９０４）、同様に不具合Bに対応するデバッグシーケンスを構築して、注入することにより（ステップ９０５）、シミュレーションの実行継続が可能になる。（ステップ９０６）。このようにシミュレーションの終了と再実行をすることなく、シミュレーションの終了まで実行可能になる（ステップ９０７）。  
【００６２】
これによって、１回のシミュレーションが終了したときには、修正するべき不具合が網羅可能となり、後にまとめて、デバッグ用ユーザインターフェイス部１０７にデータを表示し（ステップ９０８）、このデータを基にユーザが必要な箇所の回避策を実装可能となる （ステップ９１０） 。
【００６３】
本発明によるデバッグプロセスを、自動車の制御システムの組込みシステムに適用した場合の、デバッグシーケンスの一例を図１０に示す。ここでは、ステップ１０〜ステップ１５からなる処理Ａにおいて、そのステップ１１が、センサ２のデータを入手して演算する処理を含むものであり、センサ２が未実装のためその出力が得られないで無限ループになっていると仮定する。この場合には、デバッグプロセスにより、センサ２の出力として分岐条件を満たす値、例えば１２Ｖとしてループ条件を上書きする命令列をステップ１２０として割り込ませ、ループ条件が格納されたメモリアドレスの値を書き換える。これにより、センサ２が未実装のままでシミュレーションの処理Ａを実行してさらに処理Ｂに進む、実行継続が可能になる。
【００６４】
ステップ１１の不具合がシミュレーション対象の構成部品、例えば機械系の一部品が未実装であった場合には、その部品に関する情報、ソフトウェアの一部の関数が未実装であった場合にはその関数に関する情報を、夫々書き換えることにより、シミュレーションの処理Ａを実行してさらに処理Ｂに進む、シミュレーションの実行継続が可能になる。
【００６５】
このように、本実施例によれば、ユーザに対し、シミュレーション対象モデルの外部からその実行継続条件を注入可能とする機能を提供することにより、ユーザがシステム挙動の把握及び回避策の実装を容易に行う事が可能である。
【００６６】
また、本実施例によれば、専用デバッグ回路を有しないプロセッサを含むいかなる組込みシステムにおいても、ソフトウェアの構成に影響を与えること無く、上記のシミュレーションの実行継続を可能にしている。
【００６７】
なお、上記組込みシステム２１０は、自動車の制御システムに限定されるものではなく、例えば、テレビ、ハードディスクコントローラ等、その他、種々のシステムに適用可能であることは言うまでもない。
【産業上の利用可能性】
【００６８】
本発明は、複数のソフトウェアが連動して動作する計算機システム、または開発システムのプログラムに適用することができる。
【符号の説明】
【００６９】
１００： ユーザインターフェイス部１０１： デバッグ情報インポーザ１０２： 割込みコントローラ１０３： RAM１０４： ROM１０５： CPU１０６： シミュレーション対象モデル１０６Ａ：基本シミュレータ
１０６B：拡張シミュレータ
２００： マイコン２０１： CPU２０２： ソフトウェア２０３： 割込みコントローラ２０４： メモリバス２０５： 通信インターフェイス２０６： 周辺機器２０７： 機械部品２１０： 組込みシステム４００： シーケンス構築画面４０１： 構築対象シーケンス選択リスト４０２： シーケンス内操作リスト４０３： コマンドー選択リスト４０４： アドレス入力フィールド４０５： アクセス値入力フィールド４０６： シーケンス追加ボタン３００： ソフト実行状況表示画面３０１： ソフト実行状況表示部３０２： ソフト実行状況キャプチャ開始ボタン５００： シーケンス送出画面５０１： シーケンス選択リスト５０２： 送出タイミング選択リスト５０３： シミュレーション時間入力フィールド５０４： シーケンス送出ボタン６００： プロセス間通信インターフェイス６０１： 異常状態抽出部６０２： デバッグシーケンス実行部６０３： 割込み信号コントローラ６０４： バスマスタモデル７００： シミュレーションの開始ステップ７０１： 実行状態キャプチャの開始ステップ７０２： 無限ループ状態の検出と提示ステップ７０３： デバッグシーケンスの作成ステップ７０４： デバッグ注入時期の指定ステップ７０５： デバッグシーケンスのバイナリ列への変換ステップ７０６： デバッグシーケンスのデバッグ注入部への送出ステップ７０７： 命令の解釈ステップ
７０８： デバッグシーケンスをメモリ上の予約領域へと転送するステップ７０９： 指定された注入時期まで待機するステップ７１０： 割込みを発生させるステップ７１１： 専用割込みベクタから予約領域の先頭へジャンプするステップ
７１２： 指定されたデバッグシーケンスの実行ステップ７１３： ソフトウェアの実行継続ステップ７１４： 無限ループからの脱出ステップ９００： シミュレーションの開始ステップ９０１： 不具合Ａによるシミュレーション停止ステップ９０２： 不具合Ａに対するデバッグコード注入のステップ９０３： シミュレーションの再実行ステップ９０４： 不具合Ｂによるシミュレーション停止ステップ９０５： 不具合Ｂに対するデバッグコード注入のステップ９０６： シミュレーションの終了ステップ９０７： 不具合Ａの回避策を実装するステップ９０８： 不具合Ｂの回避策を実装するステップＳ１１００： シミュレーションの開始ステップＳ１１０１： 不具合Ａによるシミュレーション停止ステップＳ１１０２： 不具合Ａの回避策を実装するステップＳ１１０３： シミュレーションの再実行ステップＳ１１０４： 不具合Ｂによるシミュレーション停止ステップＳ１１０５： 不具合Ｂの回避策を実装するステップＳ１１０６： シミュレーションの再実行ステップ。
【図１】
0005723675.tif 000002
【図２】
0005723675.tif 000003
【図３】
0005723675.tif 000004
【図４】
0005723675.tif 000005
【図５】
0005723675.tif 000006
【図６】
0005723675.tif 000007
【図７】
0005723675.tif 000008
【図８】
0005723675.tif 000009
【図９】
0005723675.tif 000010
【図１０】
0005723675.tif 000011
【図１１】
0005723675.tif 000012
【図１２】
0005723675.tif 000013