(57)【要約】【課題】マイクロコンピュータのプログラムのデバッグを容易にする。【解決手段】周辺機能モデルの動作を、観察する状態遷移観察処理中が周辺機能テーブルを用いて状態遷移を行い、周辺機能観察処理部で、周辺機能モデルと、周辺機能ドライバにより形成されるデバッグ用状態遷移モデルの間の同期をとることで、内部状態の遷移を観測することができる。また、状態検出部が、指定した状態を検出し、ブレークする手段を持つことで、ユーザが確認を行いたい周辺機能の状態でのターゲットプログラムの動作を確認できる。また、状態検索部は、ユーザによってデバッガから指定された内部状態になるまで、現在の内部状態から、周辺機能テーブルを検索を行うことで、ユーザが、周辺のある機能を利用するために必要な操作を、任意の状態から得ることができる。【選択図】図３
2010073091.tif 000002
【特許請求の範囲】
【請求項１】
検証対象である被テストプログラムのデバッグを行うデバッガ部と、
前記被テストプログラムに対し、マイコンのモデルとしてシミュレーションを行うマイコンモデル部と
を具備し、
前記マイコンモデル部は、
前記マイコンの周辺機能の状態遷移を示す周辺機能モデルを形成する周辺機能モデル部と、
前記周辺機能モデルに対応するデバッグ用状態遷移モデルを形成し、前記シミュレーション中、前記周辺機能モデルの状態遷移を観察し、前記周辺機能モデルの状態遷移と前記デバッグ用状態遷移モデルの状態遷移とを同期させる状態遷移観察部と、
前記デバッグ用状態遷移モデルの状態遷移を前記デバッガ部に通知する状態遷移通知部と
を具備する
シミュレーション装置。
【請求項２】
請求項１に記載のシミュレーション装置であって、
前記デバッガ部は、前記状態遷移通知部から前記デバッグ用状態遷移モデルの状態遷移の通知を受け取り、前記デバッグ用状態遷移モデルの状態遷移の通知に基づいて、前記周辺機能モデルの状態遷移と等価な状態遷移を表示する
シミュレーション装置。
【請求項３】
請求項１又は２に記載のシミュレーション装置であって、
前記状態遷移観察部は、
前記シミュレーション中のイベントと状態との対応を示す周辺機能テーブルと、
前記周辺機能モデルの状態遷移を観察し、前記周辺機能モデルの状態遷移における個々の状態毎に、異なる判定処理を行い、前記周辺機能モデルの持つ内部レジスタ、外部レジスタ、及び外部端子の値を参照し、前記周辺機能モデルが遷移後の状態を示しているか否かの判定を行う複数の周辺機能観察処理部と、
前記周辺機能テーブルに基づいて、前記複数の周辺機能観察処理部のうちいずれかの周辺機能観察処理部を呼び出し、前記デバッグ用状態遷移モデルを形成し、前記周辺機能モデルが遷移後の状態を示している場合、前記周辺機能モデルの状態遷移と前記デバッグ用状態遷移モデルの状態遷移とを同期させ、前記デバッグ用状態遷移モデルの状態遷移を前記状態遷移通知部に通知する周辺機能ドライバと
を具備する
シミュレーション装置。
【請求項４】
請求項３に記載のシミュレーション装置であって、
前記周辺機能テーブルは、
イベント番号とカレント状態とに対応する周辺機能テーブル要素
を有し、
前記周辺機能テーブル要素は、
次のカレント状態を示す次状態要素と、
前記複数の周辺機能観察処理部の各々に対応する周辺機能観察番号を示す周辺機能観察処理番号要素と、
前記周辺機能モデルの状態を観察する間隔を示す観察間隔と
を含む
シミュレーション装置。
【請求項５】
請求項４に記載のシミュレーション装置であって、
前記周辺機能ドライバは、Ｉ／Ｏ端子入力に基づく呼び出しに応じて、ウェイト（待機）状態が真であるかどうかの判定を行い、ウェイト状態が真であれば、前記デバッガにエラー通知を行い、ウェイト状態が偽であれば、前記Ｉ／Ｏ端子入力に対応するイベント番号を調べ、イベント番号とカレント状態から、前記周辺機能テーブル中の該当する周辺機能観察番号と、観察間隔と、次のカレント状態を取得し、前記複数の周辺機能観察処理部のうち、前記取得された周辺機能観察番号に対応する周辺機能観察処理部を呼び出し、呼び出された周辺機能観察処理部の結果が真であるかどうかの判定を行い、呼び出された周辺機能観察処理部の結果が偽であれば、ウェイト状態を真にし、観察間隔の時間を待機して、再度、前記複数の周辺機能観察処理部のうち、前記取得された周辺機能観察番号に対応する周辺機能観察処理部を呼び出し、呼び出された周辺機能観察処理部の結果が真であれば、ウェイト状態を偽にし、カレント状態を、次のカレント状態に変更し、前記状態遷移通知部を呼び出す
シミュレーション装置。
【請求項６】
請求項３乃至５のいずれか一項に記載のシミュレーション装置であって、
前記マイコンモデル部は、
前記デバッガ部から指定された内部状態になるまで、現在の内部状態に基づいて、前記周辺機能テーブル内の検索を行い、現在の内部状態から指定された内部状態にするためのイベントを取得し、前記デバッガ部に通知する状態検索部
を更に具備する
シミュレーション装置。
【請求項７】
請求項１乃至６のいずれか一項に記載のシミュレーション装置であって、
前記デバッガ部は、
前記デバッグ用状態遷移モデルの状態遷移の通知を受け取ると、指定されたブレーク（中断）を行うべき状態に遷移したか否かの判定を行い、前記指定されたブレークを行うべき状態に遷移した場合、前記指定されたブレークを行う状態検出部と、
前記デバッグ用状態遷移モデルの状態遷移が発生した時にブレークを行うべき状態の指定を行い、前記指定されたブレークを行うべき状態を前記状態検出部に通知する状態遷移ブレーク指定部と
を更に具備する
シミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置に関し、特にマイクロコンピュータのプログラムのデバッグのためのシミュレーションを行うシミュレーション装置に関する。
【背景技術】
【０００２】
近年、マイクロコンピュータの複雑化、大規模化に伴い、マイクロコンピュータのプログラムのデバッグを容易にする手段が求められている。
【０００３】
関連する技術として、特開平７−１２１４０５号公報（特許文献１）にシミュレーション方式が開示されている。
この関連技術では、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、及びメモリを模擬するＭＰＵシミュレータと、入出力装置を模擬するＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ：入出力）モデル、及びＭＰＵと１つ以上の入出力装置を接続する信号線群を模擬するＩ／Ｏモニタとで構成されるＩ／Ｏシミュレータを用いる。上記ＭＰＵシミュレータ、Ｉ／Ｏモデル、Ｉ／Ｏモニタを別計算機において動作させ、それらの計算機をネットワークで接続し、データを授受することにより、シミュレーションを行う。
【０００４】
図１は、上記特許文献１に記載されているような、従来のシミュレーション方式の構成を示したブロック図である。
シミュレータ１は、デバッガ部１０と、マイコンモデル部２０を備える。デバッガ部１０は、シミュレータ内のデバッガであり、被テストプログラム３０の読み込みを行う。マイコンモデル部２０は、マイコンのモデルとしてシミュレーションを行う。マイコンモデル部２０は、ＣＰＵ部２１と、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ：ｎは任意）を備える。周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、ＣＰＵ部２１がＩ／Ｏ命令を実行すると、アクセスされたＩ／Ｏレジスタに対応するＩ／Ｏモデルの実行を開始する。
【０００５】
図２は、従来の周辺機能部のブロック図である。
図２に示すように、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、外部レジスタ５１（５１−ｉ、ｉ＝１〜Ｎ：Ｎは任意）と、内部レジスタ５２（５２−ｉ、ｉ＝１〜Ｍ：Ｍは任意）と、外部端子５３（５３−ｉ、ｉ＝１〜Ｌ：Ｌは任意）を含む。周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、外部レジスタ５１（５１−ｉ、ｉ＝１〜Ｎ）又は外部端子５３（５３−ｉ、ｉ＝１〜Ｌ）に対する入力に応じて、内部レジスタ５２（５２−ｉ、ｉ＝１〜Ｍ）を用いたシミュレーションを行い、結果を外部レジスタ５１（５１−ｉ、ｉ＝１〜Ｎ）又は外部端子５３（５３−ｉ、ｉ＝１〜Ｌ）へ出力する。
【０００６】
従来のシミュレータでは、周辺機能のシミュレーションをするための機能のみを持っている。従来のシミュレータでのデバッグにおいて、任意のアドレスでブレーク（中断）を行った時にユーザが参照できる内蔵周辺機能の状態は、外部レジスタ、内部レジスタ、外部端子の状態のみであり、複雑な周辺の内部状態を容易に判断することができなかった。
【０００７】
また、ユーザが必要な意味として、単純に内部レジスタの組み合わせだけでは実現できずアクセスする順番に依存して意味が異なる内部状態や、デバイスの動作としては無意味な状態であるが、例えばエラー状態のようにユーザにとって意味のある状態もあるが、このような状態の表示ができなかった。
【０００８】
関連する技術として、特開平７−１２１４０５号公報（特許文献１）にシミュレーション方式が開示されている。
この関連技術は、ＭＰＵ、及びメモリを模擬するＭＰＵシミュレータと、入出力装置を模擬するＩ／Ｏモデル、及びＭＰＵと１つ以上の入出力装置を接続する信号線群を模擬するＩ／Ｏモニタとで構成されるＩ／Ｏシミュレータに関する。この関連技術では、ＭＰＵシミュレータ、Ｉ／Ｏモデル、Ｉ／Ｏモニタを別計算機において動作させ、それらの計算機をネットワークで接続しデータを授受することによりシミュレーションを行う。
【０００９】
【特許文献１】特開平７−１２１４０５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従来のマイコンシミュレータでは、周辺機能の外部レジスタ、内部レジスタ、外部端子をユーザに参照させることしかできないため、これらの参照情報から、ユーザが内部状態を推測しなければならなかった。
【課題を解決するための手段】
【００１１】
本発明のシミュレーション装置は、検証対象である被テストプログラムのデバッグを行うデバッガ部と、被テストプログラムに対し、マイコンのモデルとしてシミュレーションを行うマイコンモデル部とを具備する。マイコンモデル部は、マイコンの周辺機能の状態遷移を示す周辺機能モデルを形成する周辺機能モデル部と、周辺機能モデルに対応するデバッグ用状態遷移モデルを形成し、シミュレーション中、周辺機能モデルの状態遷移を観察し、周辺機能モデルの状態遷移とデバッグ用状態遷移モデルの状態遷移とを同期させる状態遷移観察部と、周辺機能モデルの状態遷移として、デバッグ用状態遷移モデルの状態遷移をデバッガ部に通知する状態遷移通知部とを具備する。
【発明の効果】
【００１２】
周辺機能テーブルを用いた本発明の方式では、周辺機能テーブルの状態をユーザに通知することができるため、内部状態をユーザが参照することができる。更に、周辺機能モデル（周辺機能の状態遷移モデル）と、周辺機能モデルに対応するデバッグ用状態遷移モデルが同期を取ることで、周辺機能モデルの状態遷移と等価な状態遷移を表示することができる。
【発明を実施するための最良の形態】
【００１３】
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図３は、本発明の第１実施形態におけるシミュレータ（シミュレーション装置）の詳細な構成を示すブロック図である。
本実施形態のシミュレータ２は、デバッガ部１０と、マイコンモデル部２０を備える。ここでは、シミュレータ２の例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータを想定している。他にも、シミュレータ２の例として、携帯電話機、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、カーナビ（カーナビゲーションシステム）、携帯ゲーム機等の携帯端末装置が考えられる。また、シミュレータ２は、端末やサーバに限らず、中継装置や周辺機器でも良い。但し、実際には、これらの例に限定されない。
【００１４】
デバッガ部１０は、被テストプログラム３０の読み込みを行う。マイコンモデル部２０は、被テストプログラム３０に対し、マイコンのモデルとしてシミュレーションを行う。デバッガ部１０及びマイコンモデル部２０の例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やマイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）等の処理装置、又は同様の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。なお、デバッガ部１０及びマイコンモデル部２０は、各々の機能をコンピュータに実行させるためのプログラムでも良い。但し、実際には、これらの例に限定されない。
【００１５】
デバッガ部１０は、周辺機能状態トレース部１１を備える。
【００１６】
周辺機能状態トレース部１１は、マイコンのモデルにおける周辺機能モデルの状態遷移に関する表示を行う。周辺機能モデルとは、マイコンのモデルの周辺機能の状態遷移を示す状態遷移モデルである。ここでは、周辺機能状態トレース部１１は、表示を行うための表示部を備えるものとする。表示部の例として、ＬＣＤ（液晶ディスプレイ）やＰＤＰ（プラズマディスプレイ）、有機ＥＬディスプレイ（ｏｒｇａｎｉｃ  ｅｌｅｃｔｒｏｌｕｍｉｎｅｓｃｅｎｃｅ  ｄｉｓｐｌａｙ）等の表示装置、又は、表示内容を壁やスクリーンに投影するプロジェクタ等の映写装置、表示内容を用紙等に印刷するプリンタ等の印刷装置等が考えられる。或いは、表示部は、外部の表示装置や記憶装置に情報を出力するためのインターフェース（Ｉ／Ｆ：ｉｎｔｅｒｆａｃｅ）でも良い。すなわち、表示部は、何らかの出力装置であれば良い。但し、実際には、これらの例に限定されない。
【００１７】
マイコンモデル部２０は、ＣＰＵ部２１と、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ：ｎは任意）を備える。
【００１８】
ＣＰＵ部２１は、マイコンのモデルにおいて、マイコンに搭載された処理装置を示す。ＣＰＵ部２１は、被テストプログラム３０に対し、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）を駆動し、シミュレーションを行う。ここでは、ＣＰＵ部２１は、単数で示しているが、実際には、複数でも良い。例えば、ＣＰＵ部２１が、デュアルコアプロセッサ（ｄｕａｌ  ｃｏｒｅ  ｐｒｏｃｅｓｓｏｒ）である場合が考えられる。
【００１９】
周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、周辺機能モデル部２２１と、状態遷移観察部２２２と、状態遷移通知部２２３を備える。
【００２０】
周辺機能モデル部２２１は、マイコンのモデルにおける周辺機能モデルを示す。
【００２１】
状態遷移観察部２２２は、周辺機能モデル部２２１の状態遷移の観察を行う。
【００２２】
状態遷移通知部２２３は、デバッガ部１０に対して、周辺機能モデル部２２１の状態遷移の通知を行う。
【００２３】
周辺機能状態トレース部１１は、状態遷移通知部２２３からの通知に応じて、周辺機能モデル部２２１の状態遷移に関する表示を行う。
【００２４】
図４は、本発明の第１実施形態におけるシミュレータの周辺機能状態トレース部１１のＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）ウィンドウでの表示例である。
図４に示すように、周辺機能状態トレース部１１により表示されるＧＵＩウィンドウは、クロックカラム１１１と、周辺機能状態カラム１１２を含む。クロックカラム１１１は、一つ前の状態からのクロック数を表示するための項目欄である。周辺機能状態カラム１１２は、マイコン内蔵周辺機能の状態を表示するための項目欄である。ここでは、周辺機能状態トレース部１１のＧＵＩウィンドウは、クロックカラム１１１と周辺機能状態カラム１１２の対応表となっている。クロックカラム１１１は、クロック数を示す。周辺機能状態カラム１１２は、ＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ  Ｔｒａｎｓｍｉｔｔｅｒ）の状態と、ＡＤコンバータの状態と、タイマの状態を、少なくとも１組示す。
【００２５】
図５は、本発明の第１実施形態におけるシミュレータの周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の詳細な構成を示すブロック図である。
図５に示すように、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、周辺機能モデル部２２１と、状態遷移観察部２２２と、状態遷移通知部２２３と、Ｉ／Ｏ端子入力部２２４と、Ｉ／Ｏ端子出力部２２５を備える。
【００２６】
周辺機能モデル部２２１は、対象とするデバイス動作をシミュレーションする。周辺機能モデル部２２１は、デバイスの設計情報を基に作成されるものである。
【００２７】
状態遷移観察部２２２は、周辺機能テーブル２２２１と、周辺機能ドライバ部２２２２と、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ：ｍは任意）を備える。
【００２８】
周辺機能テーブル２２２１は、シミュレーション中のイベントと状態との対応を示す。
【００２９】
周辺機能ドライバ部２２２２は、周辺機能テーブル２２２１に基づいて、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）のうちいずれかの周辺機能観察処理部を呼び出す。また、周辺機能ドライバ部２２２２は、デバッグ用状態遷移モデルを形成し、周辺機能モデル部２２１が遷移後の状態を示している場合、周辺機能モデル部２２１の状態遷移とデバッグ用状態遷移モデルの状態遷移とを同期させ、デバッグ用状態遷移モデルの状態遷移を状態遷移通知部２２３に通知する。
【００３０】
周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）の各々は、周辺機能モデル部２２１の状態遷移を観察し、周辺機能モデル部２２１の状態遷移における個々の状態毎に、異なる判定処理を行う。ここでは、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）は、周辺機能モデル部２２１の持つ内部レジスタ、外部レジスタ、及び外部端子の値を参照し、周辺機能モデル部２２１が遷移後の状態を示しているか否かの判定を行う。
【００３１】
状態遷移通知部２２３は、周辺機能ドライバ部２２２２から周辺機能モデル部２２１の状態遷移の通知を受け取り、デバッガ部１０に対して、周辺機能モデル部２２１の状態遷移の通知を行う。
【００３２】
Ｉ／Ｏ端子入力部２２４は、ＣＰＵ部２１や他の周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）からの入力を、周辺機能ドライバ部２２２２と、周辺機能モデル部２２１に伝える。
【００３３】
図６は、本発明の第１実施形態におけるシミュレータの周辺機能部の周辺機能テーブル２２２１の詳細な構成を示すブロック図である。
図６に示すように、周辺機能テーブル２２２１は、イベントＥ１〜ＥＩと状態Ｓ１〜ＳＪに対応する「Ｉ×Ｊ個」の周辺機能テーブル要素Ｅ４ｉｊ｛ｉ＝１〜Ｉ，ｊ＝１〜Ｊ｝を持つ２次元のテーブル（表）である。周辺機能テーブル要素Ｅ４ｉｊは、次状態要素Ｅ４ｉｊ１と、周辺機能観察処理番号要素Ｅ４ｉｊ２と、観察間隔Ｅ４ｉｊ３を含む。
【００３４】
図７は、本発明の第１実施形態におけるシミュレータの周辺機能部の周辺機能ドライバ部２２２２の動作を示すフローチャートである。
【００３５】
（１）ステップＳ１０１
周辺機能ドライバ部２２２２は、Ｉ／Ｏ端子入力部２２４からの呼び出しに応じて、ウェイト（待機）状態ｗａｉｔ＿ｓｔａｔｕｓが真であるかどうかの判定を行う。
【００３６】
（２）ステップＳ１０２
周辺機能ドライバ部２２２２は、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが真であれば、デバッガにエラー通知を行い、その後、呼び出し終了を行う。ここでは、周辺機能ドライバ部２２２２は、デバッガ部１０にエラー通知を行い、Ｉ／Ｏ端子入力部２２４からの呼び出しに基づく処理を終了する。
【００３７】
（３）ステップＳ１０３
周辺機能ドライバ部２２２２は、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが偽であれば、Ｉ／Ｏ端子入力部２２４からの入力（Ｉ／Ｏ端子入力）に対応するイベント番号ｅｖｅｎｔ＿ｎｕｍを調べる。
【００３８】
（４）ステップＳ１０４
周辺機能ドライバ部２２２２は、イベント番号ｅｖｅｎｔ＿ｎｕｍとカレント状態ｃｕｒ＿ｓｔａｔｅから、周辺機能テーブル２２２１の該当する周辺機能アクション番号（周辺機能観察番号）ｏｂｓ＿ｎｕｍと、観察間隔ｏｂｓ＿ｐｅｒｉｏｄと、次のカレント状態ｎｅｘｔ＿ｓｔａｔｅを取得する。
【００３９】
（５）ステップＳ１０５
周辺機能ドライバ部２２２２は、周辺機能観察番号ｏｂｓ＿ｎｕｍに対応する周辺機能観察処理を呼び出す。ここでは、周辺機能ドライバ部２２２２は、周辺機能観察番号ｏｂｓ＿ｎｕｍに対応する周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）を起動する。
【００４０】
（６）ステップＳ１０６
周辺機能ドライバ部２２２２は、呼び出された周辺機能観察処理の結果が真であるかどうかの判定を行う。ここでは、周辺機能ドライバ部２２２２は、周辺機能観察番号ｏｂｓ＿ｎｕｍに対応する周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）での処理（周辺機能観察処理）の結果が真であるかどうかの判定を行う。
【００４１】
（７）ステップＳ１０７
周辺機能ドライバ部２２２２は、呼び出された周辺機能観察処理の結果が偽であれば、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを真にする。ここでは、周辺機能ドライバ部２２２２は、起動された周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）での処理の結果が偽であれば、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを真にする。
【００４２】
（８）ステップＳ１０８
周辺機能ドライバ部２２２２は、観察間隔ｏｂｓ＿ｐｅｒｉｏｄの時間をウェイトして、ステップＳ１０５に戻る。ここでは、周辺機能ドライバ部２２２２は、観察間隔ｏｂｓ＿ｐｅｒｉｏｄの時間を待機して、再度、周辺機能観察番号ｏｂｓ＿ｎｕｍに対応する周辺機能観察処理を呼び出す。すなわち、周辺機能ドライバ部２２２２は、観察間隔ｏｂｓ＿ｐｅｒｉｏｄの時間を待機して、再度、周辺機能観察番号ｏｂｓ＿ｎｕｍに対応する周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）を起動する。
【００４３】
（９）ステップＳ１０９
周辺機能ドライバ部２２２２は、呼び出された周辺機能観察処理の結果が真であれば、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にする。ここでは、周辺機能ドライバ部２２２２は、起動された周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）での処理の結果が真であれば、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にする。
【００４４】
（１０）ステップＳ１１０
周辺機能ドライバ部２２２２は、カレント状態ｃｕｒ＿ｓｔａｔｅを、次のカレント状態ｎｅｘｔ＿ｓｔａｔｅに変更する。
【００４５】
（１１）ステップＳ１１１
周辺機能ドライバ部２２２２は、状態遷移通知部２２３を呼び出して、その後、呼び出し終了を行う。ここでは、周辺機能ドライバ部２２２２は、状態遷移通知部２２３を呼び出して、Ｉ／Ｏ端子入力部２２４からの呼び出しに基づく処理を終了する。
【００４６】
図８に、周辺機能モデル部２２１の具体例として、カウンターのブロック図を示す。
図８のカウンター８０は、リセット（ｃｎｔ＿ｒｅｓｅｔ）、スタート（ｃｎｔ＿ｓｔａｒｔ）、ストップ（ｃｎｔ＿ｓｔｏｐ）、カウントアップ（ｃｎｔ＿ｕｐ）、クロック（ｃｌｋ）を入力として、カウント出力（ｃｎｔ＿ｏｕｔ）を出力とする。ここでは、カウンター８０は、ｃｎｔ＿ｒｅｓｅｔの立ち上がりエッジで初期状態（Ｗａｉｔ＿ＯＮ）となり、ｃｎｔ＿ｓｔａｒｔの立ち上がりエッジでカウント開始状態（Ｗａｉｔ＿ＣＮＴ＿ＵＰ）となる。また、カウンター８０は、カウント開始状態（Ｗａｉｔ＿ＣＮＴ＿ＵＰ）時にｃｎｔ＿ｕｐの立ち上がりエッジでカウントアップを行い、ｃｎｔ＿ｏｕｔを出力する。
【００４７】
この場合、周辺機能モデル部２２１においては、Ｉ／Ｏ端子入力部２２４は、リセット（ｃｎｔ＿ｒｅｓｅｔ）、スタート（ｃｎｔ＿ｓｔａｒｔ）、ストップ（ｃｎｔ＿ｓｔｏｐ）、カウントアップ（ｃｎｔ＿ｕｐ）、クロック（ｃｌｋ）を入力する。Ｉ／Ｏ端子出力部２２５は、カウント出力（ｃｎｔ＿ｏｕｔ）を出力する。但し、実際には、これらの例に限定されない。
【００４８】
この具体例における周辺機能モデル部２２１として、ハードウェア記述言語の一種であるＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌａｎｇｕａｇｅ）での記述例を以下に示す。この具体例のＲＴＬでは、ハード的な制約により、カウント開始状態（Ｗａｉｔ＿ＣＮＴ＿ＵＰ）から初期状態（Ｗａｉｔ＿ＯＮ）に戻るのに、ｃｌｋの入力として１０クロックかかる記述となっている。
【００４９】
＜ＲＴＬでの記述例＞
ｍｏｄｕｌｅ  ＣＯＵＮＴＥＲ（ｃｎｔ＿ｓｔａｒｔ，  ｃｎｔ＿ｓｔｏｐ，  ｃｎｔ＿ｕｐ，  ｃｎｔ＿ｒｅｓｅｔ，  ｃｌｋ，  ｃｎｔ＿ｏｕｔ）；
ｉｎｐｕｔ  ｃｎｔ＿ｓｔａｒｔ；
ｉｎｐｕｔ  ｃｎｔ＿ｓｔｏｐ；
ｉｎｐｕｔ  ｃｎｔ＿ｕｐ；
ｉｎｐｕｔ  ｃｎｔ＿ｒｅｓｅｔ；
ｉｎｐｕｔ  ｃｌｋ；
ｏｕｔｐｕｔ  ［７：０］  ｃｎｔ＿ｏｕｔ；
ｒｅｇ  ［１：０］ｓｔａｔｅ；
ｒｅｇ  ［１：０］ｓｔａｔｅ＿ｐｈｙｗａｉｔ；
ｒｅｇ  ［７：０］ｐｈｙ＿ｃｎｔ；
ｐａｒａｍｅｔｅｒ  ［１：０］
Ｗａｉｔ＿ＯＮ  ＝  ２’ｂ００，
Ｗａｉｔ＿ＣＮＴ＿ＵＰ  ＝  ２’ｂ０１；
ｐａｒａｍｅｔｅｒ  ［１：０］
ＰｈｙＷａｉｔ＿ＯＮ  ＝  ２’ｂ００，
ＰｈｙＷａｉｔ＿ＯＦＦ  ＝  ２’ｂ０１；
ａｌｗａｙｓ  ＠（ｐｏｓｅｄｇｅ  ｃｎｔ＿ｓｔａｒｔ  ｏｒ  ｐｏｓｅｄｇｅ  ｃｎｔ＿ｓｔｏｐ  ｏｒ  ｐｏｓｅｄｇｅ  ｃｎｔ＿ｕｐ  ｏｒ  ｐｏｓｅｄｇｅ  ｃｎｔ＿ｒｅｓｅｔ  ｏｒ  ｃｌｋ）  ｂｅｇｉｎ
ｉｆ  （ｃｎｔ＿ｒｅｓｅｔ）  ｂｅｇｉｎ
ｓｔａｔｅ  ＝  Ｗａｉｔ＿ＯＮ；
ｓｔａｔｅ＿ｐｈｙｗａｉｔ  ＜＝  ＰｈｙＷａｉｔ＿ＯＦＦ；
ｃｎｔ＿ｏｕｔ  ＝  ０；
ｐｈｙ＿ｃｎｔ  ＝  ０；
ｅｎｄ
ｅｌｓｅ  ｂｅｇｉｎ
ｃａｓｅ  （ｓｔａｔｅ）
Ｗａｉｔ＿ＯＮ：
ｉｆ  （ｃｎｔ＿ｓｔａｒｔ）
ｓｔａｔｅ  ＜＝  Ｗａｉｔ＿ＣＮＴ＿ＵＰ；
Ｗａｉｔ＿ＣＮＴ＿ＵＰ：  
ｉｆ（ｃｎｔ＿ｓｔｏｐ）  ｂｅｇｉｎ
ｓｔａｔｅ＿ｐｈｙｗａｉｔ  ＜＝  ＰｈｙＷａｉｔ＿ＯＮ；
ｅｎｄ
ｉｆ（ｃｎｔ＿ｕｐ）
ｃｎｔ＿ｏｕｔ＋＋；
ｉｆ（ｃｌｋ  ＆  （ｓｔａｔｅ＿ｐｈｙｗａｉｔ  ＝＝  ＰｈｙＷａｉｔ＿ＯＮ））ｂｅｇｉｎ
ｉｆ（ｐｈｙ＿ｃｎｔ  ＞  １０）ｂｅｇｉｎ
ｓｔａｔｅ  ＝  Ｗａｉｔ＿ＯＮ；
ｓｔａｔｅ＿ｐｈｙｗａｉｔ  ＜＝  ＰｈｙＷａｉｔ＿ＯＦＦ；
ｃｎｔ＿ｏｕｔ  ＝  ０；
ｐｈｙ＿ｃｎｔ  ＝  ０；
ｅｎｄｉｆ
ｅｌｓｅ
ｐｈｙ＿ｃｎｔ＋＋；
ｅｎｄｉｆ
ｅｎｄｃａｓｅ
ｅｎｄ
ｅｎｄ
ｅｎｄｍｏｄｕｌｅ
【００５０】
図９は、この具体例の周辺機能部の状態遷移を示す状態遷移図である。
状態遷移図は、マイコンプログラムのデバッグに必要な状態として、ＲＴＬにはないエラー状態を持つ。本具体例では、カウント開始状態（Ｗａｉｔ＿ＣＮＴ＿ＵＰ）ではなく、初期状態（Ｗａｉｔ＿ＯＮ）でｃｎｔ＿ｕｐが入力された場合をエラー状態として状態遷移図を作成している。本具体例のＲＴＬでは、エラー状態での処理はなく、ｃｎｔ＿ｕｐの入力は無視されるのみとなっている。
【００５１】
具体例での周辺機能観察処理の表（表１）を下記に示す。
この周辺機能観察処理の表は、「周辺機能観察処理番号」と「周辺機能観察処理」の関係を示す表である。周辺機能観察処理番号が１の周辺機能観察処理では、常にウェイトが不要を意味する情報としてｔｒｕｅ（真）を返す。周辺機能観察処理番号が２の周辺機能観察処理では、エラー通知を行った後に、ウェイトが不要を意味する情報としてｔｒｕｅ（真）を返す。周辺機能観察処理番号が３の周辺機能観察処理では、ＲＴＬが持つ変数ｓｔａｔｅ＿ｐｈｙｗａｉｔを観測し、ＰｈｙＷａｉｔ＿ＯＦＦであれば、ウェイトが不要を意味する情報を返し、そうでなければ、ウェイトが必要を意味する情報を返す。なお、ここで示す周辺機能観察処理は、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）の各々により行われるものとする。
【００５２】
【表１】
2010073091.tif 000003
【００５３】
次に、具体例での状態遷移表（表２）を、下記に示す。
この状態遷移表は、「状態」と「イベント」の関係を示す表である。ここでは、この状態遷移表は、状態として、Ｗａｉｔ＿ＯＮ，  Ｗａｉｔ＿ＣＮＴ＿ＵＰを持ち、イベントとして、ｃｎｔ＿ｕｐ，  ｃｎｔ＿ｓｔａｒｔ，  ｃｎｔ＿ｓｔｏｐを持つ。この状態遷移表は、各欄に、次状態要素と周辺機能観察処理番号要素と観察間隔を持つ周辺機能テーブル要素を含む。
【００５４】
【表２】
2010073091.tif 000004
【００５５】
ここでは、外部信号としてのイベントが、「ｃｎｔ＿ｕｐ  −＞  ｃｎｔ＿ｓｔａｒｔ  −＞  ｃｎｔ＿ｕｐ  −＞  ｃｎｔ＿ｓｔｏｐ  −＞  ｃｎｔ＿ｓｔａｒｔ」の順番での周辺機能ドライバ部２２２２の動作例を、図７に示すフローチャートを用いて説明する。ｃｎｔ＿ｓｔｏｐの出力からｃｎｔ＿ｓｔａｒｔの入力は、５クロック後に行われるものとする。
【００５６】
イベントとして、ｃｎｔ＿ｕｐが入力であれば、ステップＳ１０１でウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが偽なので、ステップＳ１０３を行う。ステップＳ１０３でＩ／Ｏ端子入力に対応するイベント番号ｅｖｅｎｔ＿ｎｕｍとして、イベントｃｎｔ＿ｕｐが使われる。ステップＳ１０４で状態遷移表から該当する周辺機能テーブル要素として、周辺機能テーブル要素Ｅ４１１の｛Ｗａｉｔ＿ＯＮ，  ２，  ０｝が取り出される。ステップＳ１０５で周辺機能観察番号２の処理が実行される。周辺機能観察処理番号２では、エラー通知を行い、真を返す。ステップＳ１０６で周辺機能観察処理の結果が真なので、ステップＳ１０９を行う。ステップＳ１０９で、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にし、ステップＳ１１０で、カレント状態ｃｕｒ＿ｓｔａｔｅを次のカレント状態ｎｅｘｔ＿ｓｔａｔｅのＷａｉｔ＿ＯＮを設定し、ステップＳ１１１で状態遷移通知部２２３を呼び出し、終了する。
【００５７】
次に、イベントとして、ｃｎｔ＿ｓｔａｒｔが入力であれば、ステップＳ１０１でウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが偽なので、ステップＳ１０３を行う。ステップＳ１０３でＩ／Ｏ端子入力に対応するイベント番号ｅｖｅｎｔ＿ｎｕｍとして、イベントｃｎｔ＿ｓｔａｒｔが使われる。ステップＳ１０４で状態遷移表から該当する周辺機能テーブル要素として、周辺機能テーブル要素４２１の｛Ｗａｉｔ＿ＣＮＴ＿ＵＰ，  １，  ０｝が取り出される。ステップＳ１０５で周辺機能観察番号１の処理が実行される。周辺機能観察処理番号１では、真を返す。ステップＳ１０６で周辺機能観察処理の結果が真なので、ステップＳ１０９を行う。ステップＳ１０９で、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にし、ステップＳ１１０で、カレント状態ｃｕｒ＿ｓｔａｔｅに次のカレント状態ｎｅｘｔ＿ｓｔａｔｅのＷａｉｔ＿ＣＮＴ＿ＵＰを設定し、ステップＳ１１１で状態遷移通知部２２３を呼び出し、終了する。
【００５８】
次に、イベントとして、ｃｎｔ＿ｕｐが入力であれば、ステップＳ１０１でウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが偽なので、ステップＳ１０３を行う。ステップＳ１０３でＩ／Ｏ端子入力に対応するイベント番号ｅｖｅｎｔ＿ｎｕｍとして、イベントｃｎｔ＿ｕｐが使われる。ステップＳ１０４で状態遷移表から該当する周辺機能テーブル要素として、周辺機能テーブル要素４１２の｛Ｗａｉｔ＿ＣＮＴ＿ＵＰ，  １，  ０｝が取り出される。ステップＳ１０５で周辺機能観察番号１の処理が実行される。周辺機能観察処理番号１では、真を返す。ステップＳ１０６で周辺機能観察処理の結果が真なので、ステップＳ１０９を行う。ステップＳ１０９で、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にし、ステップＳ１１０で、カレント状態ｃｕｒ＿ｓｔａｔｅに次のカレント状態ｎｅｘｔ＿ｓｔａｔｅのＷａｉｔ＿ＣＮＴ＿ＵＰを設定し、ステップＳ１１１で状態遷移通知部２２３を呼び出し、終了する。
【００５９】
次に、イベントとして、ｃｎｔ＿ｓｔｏｐが入力であれば、ステップＳ１０１でウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが偽なので、ステップＳ１０３を行う。ステップＳ１０３でＩ／Ｏ端子入力に対応するイベント番号ｅｖｅｎｔ＿ｎｕｍとして、イベントｃｎｔ＿ｕｐが使われる。ステップＳ１０４で状態遷移表から該当する周辺機能テーブル要素として、周辺機能テーブル要素４３２の｛Ｗａｉｔ＿ＯＮ，  ３，  １｝が取り出される。
【００６０】
ステップＳ１０５で周辺機能観察番号３の処理が実行される。周辺機能観察処理番号３では、ｓｔａｔｅ＿ｐｈｙｗａｉｔ≠ＰｈｙＷａｉｔ＿ＯＦＦなので、偽を返す。ステップＳ１０６で周辺機能観察処理の結果が偽なので、ステップＳ１０７を行う。ステップＳ１０７でウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを真にして、ステップＳ１０８で観察間隔ｏｂｓ＿ｐｅｒｉｏｄの時間として１０クロックウェイト（１０クロック間の待機）を行う。
【００６１】
次に、ステップＳ１０５の処理を行うが、１０クロックウェイトをしている間に、ｃｎｔ＿ｓｔａｒｔの入力が発生するので、別スレッドからの関数呼び出しとして、ステップＳ１０１が行われる。ステップＳ１０１ではウェイト状態ｗａｉｔ＿ｓｔａｔｕｓが真であるため、ステップＳ１０２でデバッガにエラー通知を行い、この別スレッドからの呼び出しは終了する。
【００６２】
その後、１０クロックウェイト終了後にステップＳ１０５で周辺機能観察番号３の処理が実行される。周辺機能観察処理番号３では、ｓｔａｔｅ＿ｐｈｙｗａｉｔ＝ＰｈｙＷａｉｔ＿ＯＦＦなので、真を返す。ステップＳ１０６で周辺機能観察処理の結果が真なので、ステップＳ１０９を行う。ステップＳ１０９で、ウェイト状態ｗａｉｔ＿ｓｔａｔｕｓを偽にし、ステップＳ１１０で、カレント状態ｃｕｒ＿ｓｔａｔｅに次のカレント状態ｎｅｘｔ＿ｓｔａｔｅのＷａｉｔ＿ＯＮを設定し、ステップＳ１１１で状態遷移通知部２２３を呼び出し、終了する。
【００６３】
このように、本方式においては、「Ｗａｉｔ＿ＯＮ  −＞  Ｅｒｒｏｒ  −＞  Ｗａｉｔ＿ＯＮ  −＞  Ｗａｉｔ＿ＣＮＴ＿ＵＰ  −＞  Ｗａｉｔ＿ＯＮ」のように状態の遷移が行われ、ＲＴＬでの実行と同期のとられた状態遷移となる。
【００６４】
本実施形態では、周辺機能モデル部２２１の動作を観察する状態遷移観察部２２２が、状態遷移観察部２２２中の周辺機能テーブル２２２１を用いて周辺機能モデル部２２１の状態遷移を行うことにより、単純に内部レジスタの組み合わせだけでは実現できずアクセスする順番に依存して意味が異なる内部状態やデバイスの動作としては無意味な状態であるがユーザにとっては意味のある状態の検出を行うことができる。
【００６５】
また、本実施形態では、状態遷移毎に呼び出される周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）でエラー状態の検出も行うことができる。また、本実施形態では、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）で、周辺機能モデルと、周辺機能ドライバにより形成されるデバッグ用状態遷移モデルの間の同期をとることで、デバッグ用状態遷移モデルの状態遷移に基づいて、周辺機能モデルの状態遷移と等価な状態遷移を表示することができる。ここでは、デバッグ用状態遷移モデルは、周辺機能モデル（状態遷移モデル）に対応し、周辺機能モデルと同期することで、周辺機能モデルの状態遷移と同じ状態遷移を行う。
【００６６】
以下に、本発明の第２実施形態について説明する。
図１０は、本発明の第２実施形態におけるシミュレータの詳細な構成を示すブロック図である。
本実施形態のシミュレータ２は、デバッガ部１０と、マイコンモデル部２０を備える。
【００６７】
デバッガ部１０は、周辺機能状態トレース部１１と、状態遷移ブレーク指定部１２と、状態検出部１３を備える。
【００６８】
周辺機能状態トレース部１１は、基本的に第1実施形態と同様である。
【００６９】
状態遷移ブレーク指定部１２は、ユーザからの操作に応じて、デバッグ用状態遷移モデルの状態遷移が発生した時にブレーク（中断）を行うべき状態の指定を行う。デバッグ用状態遷移モデルの状態遷移は、周辺機能モデルの状態遷移と同期しているため、周辺機能モデルの状態遷移と同義である。また、状態遷移ブレーク指定部１２は、ユーザに指定されたブレークを行うべき状態を、状態検出部１３に受け渡す。ここでは、状態遷移ブレーク指定部１２は、ユーザからの操作を受け付けるための入力部を備えるものとする。入力部の例として、キーボードやキーパッド、画面上のキーパッド、タッチパネル（ｔｏｕｃｈ  ｐａｎｅｌ）、タブレット（ｔａｂｌｅｔ）、又は、ＱＲコード（登録商標）やＩＣチップ、記憶媒体（メディア）等の読取装置等が考えられる。或いは、入力部は、外部の入力装置や記憶装置から情報を取得するためのインターフェース（Ｉ／Ｆ：ｉｎｔｅｒｆａｃｅ）でも良い。但し、実際には、これらの例に限定されない。
【００７０】
状態検出部１３は、マイコンモデル部２０からデバッグ用状態遷移モデルの状態遷移の通知を受け取ると、指定されたブレークを行うべき状態に遷移したか否かの判定を行い、該当する状態遷移であれば、デバッガ部１０のブレークを行う。すなわち、状態検出部１３は、指定されたブレークを行うべき状態に遷移した場合、デバッガ部１０のブレークを行う。
【００７１】
マイコンモデル部２０は、ＣＰＵ部２１と、周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ：ｎは任意）を備える。
【００７２】
ＣＰＵ部２１、及び周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）は、基本的に第1実施形態と同様である。
【００７３】
図１１は、本実施形態に特有の動作を示すフローチャートである。
【００７４】
（１）ステップＳ２０１
状態遷移ブレーク指定部１２は、ユーザからの操作に応じて、デバッグ用状態遷移モデルの状態遷移が発生した時にブレークさせる状態の指定を行い、ユーザにより指定されたブレークを行うべき状態を、状態検出部１３に受け渡す。ここでは、状態遷移ブレーク指定部１２は、ユーザからの操作に応じて、デバッグ用状態遷移モデルの状態遷移が発生した時にブレークさせる状態の設定を行い、設定内容を状態検出部１３に通知する。
【００７５】
（２）ステップＳ２０２
マイコンモデル部２０は、デバッグ用状態遷移モデルの状態遷移が発生すると、状態遷移通知部２２３を介して、状態遷移後の状態の通知を行う。ここでは、状態遷移観察部２２２は、状態遷移が発生すると、状態遷移通知部２２３を介して、デバッガ部１０に状態遷移通知を出力する。
【００７６】
（３）ステップＳ２０３
状態検出部１３は、状態遷移通知を受け取ると、指定されたブレークを行うべき状態に遷移したか否かの判定を行う。ここでは、状態検出部１３は、デバッガ部１０がマイコンモデル部２０からの状態遷移通知を受け取ると、ユーザにより指定されたブレークを行うべき状態に遷移したか否かの判定を行う。
【００７７】
（４）ステップＳ２０４
状態検出部１３は、該当する状態遷移であれば、デバッガ部１０のブレークを行う。すなわち、状態検出部１３は、指定されたブレークを行うべき状態に遷移したと判定した場合、デバッガ部１０のブレークを行う。
【００７８】
（５）ステップＳ２０５
状態検出部１３は、該当する状態遷移で無ければ、現状を維持する。すなわち、状態検出部１３は、指定されたブレークを行うべき状態に遷移していないと判定した場合、デバッガ部１０のブレークを行わず、現状維持を行う。
【００７９】
本実施形態では、状態検出部１３が、指定された状態を検出し、ブレークする。これにより、ユーザの指示に基づいて、任意の状態遷移が発生した時にブレークさせることが可能となるため、ユーザが確認を行いたい周辺機能の状態でのターゲットプログラムの動作を確認することができ、マイクロコンピュータのプログラムのデバッグが従来より容易となる。
【００８０】
以下に、本発明の第３実施形態について説明する。
図１２は、本発明の第３実施形態におけるシミュレータの周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の詳細な構成を示すブロック図である。
【００８１】
本実施形態では、シミュレータの周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の各々は、周辺機能モデル部２２１と、状態遷移観察部２２２と、状態遷移通知部２２３と、Ｉ／Ｏ端子入力部２２４と、Ｉ／Ｏ端子出力部２２５と、状態検索部２２６を備える。
【００８２】
周辺機能モデル部２２１、状態遷移観察部２２２、状態遷移通知部２２３、Ｉ／Ｏ端子入力部２２４、及びＩ／Ｏ端子出力部２２５は、基本的に第1実施形態と同様である。
【００８３】
状態検索部２２６は、ユーザによってデバッガから指定された内部状態になるまで、現在の内部状態に基づいて、周辺機能テーブル２２２１内の検索を行い、現在の内部状態から指定された内部状態にするためのイベント列を取得し、デバッガ部１０に通知する。検索の例として、横型検索（ＢＦＳ：Ｂｒｅａｄｔｈ−Ｆｉｒｓｔ  Ｓｅａｒｃｈ）や縦型探索（ＤＦＳ：Ｄｅｐｔｈ−Ｆｉｒｓｔ  Ｓｅａｒｃｈ）等が考えられる。但し、実際には、これらの例に限定されない。
【００８４】
本実施形態では、ユーザが、周辺のある機能を利用するために必要な操作を、任意の状態から得ることにより、マイクロコンピュータのプログラムの開発効率が向上する。
【００８５】
以上説明したように、第１実施形態に記載した発明では、周辺機能モデル部２２１の動作を、観察する状態遷移観察処理２２２中が周辺機能テーブル２２２１を用いて状態遷移を行い、周辺機能観察処理部２２２３（２２２３−ｊ、ｊ＝１〜ｍ）で、周辺機能モデルと、周辺機能ドライバにより形成されるデバッグ用状態遷移モデルの間の同期をとることで、内部状態の遷移を観測することができる。
【００８６】
また、第２実施形態に記載した発明では、状態検出部１３が、指定した状態を検出し、ブレークする手段を持つことで、ユーザが確認を行いたい周辺機能の状態でのターゲットプログラムの動作を確認できる。
【００８７】
また、第３実施形態に記載した発明では、状態検索部２２６は、ユーザによってデバッガから指定された内部状態になるまで、現在の内部状態から、周辺機能テーブル２２２１を検索を行うことで、ユーザが、周辺のある機能を利用するために必要な操作を、任意の状態から得ることができる。
【００８８】
本発明のシミュレータの特徴について、以下に詳述する。
本発明のシミュレータは、状態遷移発生毎に、周辺機能モデルを観察する手段を持つ。また、周辺機能テーブルを用いる周辺機能部の構造により、周辺機能の内部状態を通知できる。また、周辺機能状態トレース部が周辺機能部の状態遷移の通知を受け取ることにより、周辺機能部の状態遷移を表示できる。また、周辺機能観察処理部で、周辺機能モデルと、周辺機能ドライバにより形成されるデバッグ用状態遷移モデルの間の同期をとることで、デバッグ用状態遷移モデルの状態遷移に基づいて、周辺機能モデルの状態遷移と等価な状態遷移を表示することができる。また、状態遷移ブレーク指定部と状態検出部により、任意の状態遷移が発生した時にブレークできる。また、状態検索部によって、ユーザによってデバッガから指定された内部状態になるまで、現在の内部状態から、周辺機能テーブルを、検索する手段を持つ。また、周辺機能モデル部の状態数より、周辺機能ドライバで実現する状態数が多くなる状態遷移の検出ができる。
【００８９】
本発明では、ＲＴＬ（機能モデル）とは別に、図５，図６，図１２に示すようなデバッグ用の周辺機能テーブルを用意し、ＲＴＬの動作とデバッグ用の周辺機能テーブルをリンクさせてシミュレーションを行う。デバッグを行う開発者は、デバッグ用の周辺機能テーブルによる状態遷移を観測することで、ＲＴＬの動作をチェックすることができるようになる。
【００９０】
デバッグ用の周辺機能テーブルとは、ＲＴＬとは別に設けるもので、ＲＴＬの状態遷移を簡略的に表現したデバッグ用状態遷移モデルである。ＲＴＬの仕様の概略が解れば、作成することができる。例えば、ＲＴＬは第三者によって作成されたもので、デバッグをする開発者がＲＴＬの中身の詳細を知らない場合に、本発明は有効となる。
【００９１】
デバッグ用の状態遷移は、ＲＴＬの状態遷移と必ずしも一致しない。図９の場合、例としてＥＲＲＯＲというものが、実際のＲＴＬにはない状態である。こういったデバッグ専用の状態を設けることで、ＲＴＬの動作状態が外部から分りやすくなり、ＲＴＬの中身がわからない開発者でもデバッグの効率化が図れる。
【００９２】
デバッグ用の状態遷移は、ＲＴＬとは異なるものとなるが、シミュレーション中は、それぞれが同期して動作しないと意味がない。そこで、同期をとるための仕組みが、観察管理部（周辺機能観察処理部）であり、制御用のテーブル（周辺機能テーブル）である。
【００９３】
具体例では、ＲＴＬは、実際のハードウェアを示している。ＲＴＬは、Ｗａｉｔ＿ＣＮＴ＿ＵＰ→Ｗａｉｔ＿ＯＮに移るのに１０クロックウェイトしている。
【００９４】
図９に示すデバッグ用状態遷移では、上記１０クロックは考慮されていない。
【００９５】
観察管理部は、上記１０クロックを、デバッグ用状態遷移で考慮するため、テーブルを用いて制御している。すなわち、周辺機能観察処理部は、デバッグ用状態遷移の際に、周辺機能テーブルを参照して、１０クロックウェイトしている。
【００９６】
これにより、ＲＴＬの状態遷移と、デバッグ用の状態遷移が同期して動作することになり、ＲＴＬの動作が、デバッグ用のデバッグ用状態遷移モデルによって観測することができるようになる。
【００９７】
以上、本発明の実施形態を詳述してきたが、実際には上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００９８】
【図１】図１は、従来技術におけるシミュレータの詳細な構成を示すブロック図である。
【図２】図２は、従来の技術によるシミュレータの周辺機能部の詳細な構成を示すブロック図である。
【図３】図３は、本発明の第１実施形態におけるシミュレータの詳細な構成を示すブロック図である。
【図４】図４は、本発明の第１実施形態におけるシミュレータの周辺機能状態トレース部１１のＧＵＩウィンドウでの表示例である。
【図５】図５は、本発明の第１実施形態におけるシミュレータの周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の詳細な構成を示すブロック図である。
【図６】図６は、本発明の第１実施形態におけるシミュレータの周辺機能部の周辺機能テーブル２２２１の詳細な構成を示すブロック図である。
【図７】図７は、本発明の第１実施形態におけるシミュレータの周辺機能部の周辺機能ドライバ部２２２２の動作を示すフローチャートである。
【図８】図８は、本発明の第１実施形態による具体例の周辺機能部のモデルを示すブロック図である。
【図９】図９は、本発明の第１実施形態による具体例の周辺機能部の状態遷移を示す状態遷移図である。
【図１０】図１０は、本発明の第２実施形態におけるシミュレータの詳細な構成を示すブロック図である。
【図１１】図１１は、本発明の第２実施形態におけるシミュレータの動作を示すフローチャートである。
【図１２】図１２は、本発明の第３実施形態にシミュレータの周辺機能部２２（２２−ｉ、ｉ＝１〜ｎ）の詳細な構成を示すブロック図である。
【符号の説明】
【００９９】
１…  シミュレータ（従来）
２…  シミュレータ（本発明）
１０…  デバッガ部
１１…  周辺機能状態トレース部
１１１…  クロックカラム
１１２…  周辺機能状態カラム
１２…  状態遷移ブレーク指定部
１３…  状態検出部
２０…  マイコンモデル部
２１…  ＣＰＵ部
２２（−ｉ、ｉ＝１〜ｎ）…  周辺機能部
２２１…  周辺機能モデル部
２２２…  状態遷移観察部
２２２１…  周辺機能テーブル
２２２２…  周辺機能ドライバ部
２２２３（−ｊ、ｊ＝１〜ｍ）…  周辺機能観察処理部
２２３…  状態遷移通知部
２２４…  Ｉ／Ｏ端子入力部
２２５…  Ｉ／Ｏ端子出力部
２２６…  状態検索部
３０…  被テストプログラム
Ｅ４１１〜Ｅ４ｉｊ〜Ｅ４ｉｊ…  周辺機能テーブル要素
Ｅ４１１１〜Ｅ４ｉｊ１〜Ｅ４ｉｊ１…  次状態要素
Ｅ４１１２〜Ｅ４ｉｊ２〜Ｅ４ｉｊ２…  周辺機能観察処理番号要素
Ｅ４１１３〜Ｅ４ｉｊ３〜Ｅ４ｉｊ３…  観察間隔
５１（−ｉ、ｉ＝１〜Ｎ）…  外部レジスタ
５２（−ｉ、ｉ＝１〜Ｍ）…  内部レジスタ
５３（−ｉ、ｉ＝１〜Ｌ）…  外部端子
８０…  カウンター
【図１】
2010073091.tif 000005
【図２】
2010073091.tif 000006
【図３】
2010073091.tif 000007
【図４】
2010073091.tif 000008
【図５】
2010073091.tif 000009
【図６】
2010073091.tif 000010
【図７】
2010073091.tif 000011
【図８】
2010073091.tif 000012
【図９】
2010073091.tif 000013
【図１０】
2010073091.tif 000014
【図１１】
2010073091.tif 000015
【図１２】
2010073091.tif 000016