(57)【要約】【課題】ユーザプログラムを実行しながら、ＣＰＵ内部のレジスタ情報、特にステータスレジスタ値やプログラムカウンタ値を観測する。【解決手段】半導体装置は、プログラムを実行可能なＣＰＵ（３１）と、上記プログラムのデバッグを支援するためのデバッグ回路（３３）とを備える。上記ＣＰＵは、ステータスレジスタと、プログラムカウンタとを含む。上記半導体装置は、ユーザプログラムの実行を停止させないで上記ＣＰＵ内のレジスタ情報を取得するための専用パス（３５）を含む。この専用パスは、上記ステータスレジスタが更新された場合の当該更新に対応する上記プログラムカウンタの値を、上記ステータスレジスタが次に更新される前に取得し、取得されたプログラムカウンタ値と、それに対応するステータスレジスタ値とをセットにして上記デバッグ回路に伝達するための論理回路（３２）を含む。【選択図】図３
2011028308.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行可能なＣＰＵと、
上記ＣＰＵで実行されるプログラムのデバッグを支援するためのデバッグ回路とを備え、
上記ＣＰＵは、上記ＣＰＵの状態を示すステータスレジスタと、
上記ＣＰＵで実行される命令の格納アドレスを保持するプログラムカウンタとを含んで成る半導体装置であって、
上記ＣＰＵ内のレジスタ情報を取得するための専用パスを含み、
上記専用パスは、上記ステータスレジスタが更新された場合の当該更新に対応する上記プログラムカウンタの値を、上記ステータスレジスタが次に更新される前に取得し、取得されたプログラムカウンタ値と、それに対応するステータスレジスタ値とをセットにして上記デバッグ回路に伝達するための論理回路を含むことを特徴とする半導体装置。
【請求項２】
上記論理回路は、それぞれ上記ＣＰＵの内部クロック信号に同期して信号を取り込むための複数のフリップフロップ回路を含んで成るフリップフロップ回路群を有する請求項１記載の半導体装置。
【請求項３】
上記ＣＰＵは、パイプラインによるプログラム実行が可能とされ、
上記フリップフロップ回路群は、上記ステータスレジスタの値が更新されるステージで新たなステータスレジスタ値を取り込む第１フリップフロップ回路と、
上記プログラムカウンタが更新されるステージで新たなプログラムカウンタ値を取り込む第２フリップフロップ回路と、
上記プログラムカウンタが更新されるステージで上記第１フリップフロップ回路の出力値を取り込む第３フリップフロップ回路と、
上記第２フリップフロップ回路の出力値と、上記第３フリップフロップ回路の出力値とを合成して上記デバッグ回路に出力するための第４フリップフロップ回路と、を含む請求項２記載の半導体装置。
【請求項４】
上記フリップフロップ回路群は、更に、上記第１フリップフロップ回路の動作に同期してステータスレジスタ値の更新を通知するためのステータスレジスタ更新通知信号を取り込む第５フリップフロップ回路と、
上記第４フリップフロップ回路の動作に同期して上記第５フリップフロップ回路の出力値を取り込む第６フリップフロップ回路と、を含み、
上記デバッグ回路は、上記第６フリップフロップ回路の出力値に基づいて、上記第４フリップフロップ回路の出力値を取り込む請求項３記載の半導体装置。
【請求項５】
上記第５フリップフロップ回路の出力信号は、上記デバッグ回路において、上記第４フリップフロップ回路の出力値を取り込むための準備信号として上記デバッグ回路に取り込まれる請求項４記載の半導体装置。
【請求項６】
上記デバッグ回路は、上記第４フリップフロップ回路の出力信号を上記ステータスレジスタ値の変化タイミングに同期してトレースするトレース回路を含む請求項５記載の半導体装置。
【請求項７】
上記デバッグ回路は、上記ステータスレジスタ値と予め設定された比較値とを比較することで、条件一致イベント信号を形成する比較器を含む請求項６記載の半導体装置。
【請求項８】
上記条件一致イベント信号には、ユーザモードから特権モードへの遷移を示す特権モード遷移イベント信号が含まれ、
上記デバッグ回路は、上記特権モード遷移イベント信号がアサートされてからネゲートされるまでの時間を測定する第１デバッグ専用カウンタを含む請求項７記載の半導体装置。
【請求項９】
上記条件一致イベント信号には、割込みのブロック状態を示す割込みブロック信号が含まれ、
上記デバッグ回路は、上記割込みブロック信号がアサートされてからネゲートされるまでの時間を測定する第２デバッグ専用カウンタを含む請求項８記載の半導体装置。
【請求項１０】
上記条件一致イベント信号には、指定されたマスクレベル以上で動作していることを示す割込みマスクレベルオーバー信号、及び指定されたマスクレベル以下で動作していることを示す割込みマスクレベルアンダー信号が含まれ、
上記デバッグ回路は、指定されたマスクレベル以上で動作している時間と、指定されたマスクレベル以下で動作している時間とを測定する第３デバッグ専用カウンタを含む請求項９記載の半導体装置。
【請求項１１】
上記ＣＰＵは、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイルと、
上記レジスタファイルの保持情報を退避可能なレジスタバンクと、
上記レジスタファイルと上記レジスタバンクとの間で信号のやり取りを行うレジスタバンク専用インタフェースと、
上記レジスタバンク専用インタフェースに結合され、上記レジスタバンク専用インタフェースを介して上記レジスタファイルの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バスと、を含む請求項１０記載の半導体装置。
【請求項１２】
上記ＣＰＵは、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイルと、
上記レジスタファイルの保持情報を退避可能なレジスタバンクと、
上記レジスタバンクに結合され、上記レジスタバンクの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バスと、を含む請求項１０記載の半導体装置。
【請求項１３】
上記ＣＰＵは、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイルと、
上記レジスタファイルに結合され、上記レジスタファイルの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バスと、を含む請求項１０記載の半導体装置。
【請求項１４】
請求項１０記載の半導体装置と、
上記半導体装置に結合され、上記デバッグ回路の出力情報を取り込むエミュレータと、
上記エミュレータに結合されたホストシステムと、を含み、上記半導体装置で動作するソフトウェアの開発を支援するソフトウェア開発支援装置。
【請求項１５】
上記ホストシステムは、上記デバッグ回路の出力情報を解析する解析部と、
上記解析部での解析結果を可視化するための表示装置と、を含み、
上記表示装置は、上記解析部での解析結果に基づいて、上記半導体装置におけるオペレーティングシステムの占有率情報及び割込み処理時間情報を、ユーザタスク処理時間情報と区別して表示する請求項１４記載のソフトウェア開発支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置で実行されるソフトウェアの開発技術に関する。
【背景技術】
【０００２】
従来のソフトウェア開発では、インサーキットエミュレータ(ＩＣＥ)が使用されていた。ＩＣＥを使用した開発環境では、開発専用の特殊なマイクロコンピュータを利用して内部状態をＩＣＥが参照することができた。ここで取得可能な情報としては、マイクロコンピュータの内部バス状態やプログラム実行状態などがある。ＩＣＥは、直接マイクロコンピュータの内部信号を引き出して参照する(トレース)ことができるため非常に多機能であるが、デバッグ専用のマイクロコンピュータを開発しなければならないし、また高速動作が要求される場合には適用しにくい。
【０００３】
近年では高集積化が可能になったため、マイクロコンピュータ内部にＩＣＥが提供していた機能を内蔵することが可能になった。このような方式を、オンチップデバッグ方式という。オンチップデバッグ方式は、高価な専用マイクロコンピュータが不要で、非常に高速な動作周波数に追従しやすいという利点がある。高性能なマイクロコンピュータに対しては、性能評価機能などの新機能が追加され、低価格の展開製品やカスタム対応製品では標準機能として実装しコストダウンに貢献している。しかし、オンチップデバッグ方式では、デバッグ専用に割り当て可能な端子数が限られているため、ＩＣＥＩＣＥと同じデバッグ情報(特にバストレース情報)の取得は不可能である。オンチップデバッグ方式のマイクロコンピュータでは、制御インタフェースにＪＴＡＧ（Joint Test Action Group）を使用している場合が多い。少ない端子数で通信を行えるようになっていることや、製品ごとに内蔵デバッグ機能が異なっていても、通信プロトコルなどがＪＴＡＧ規格に基づいてほぼ統一化されていることが特長である。但し、ＪＴＡＧインタフェースでは、バストレース情報を取得可能な転送性能をもたないので、トレース情報出力機能に関しては各メーカー独自に専用インタフェース機能を用意することが多い。
【０００４】
特許文献１では、１つ又は複数のプロセッサ、又は他のデバイスからトレース情報を受け取った割込なしトレースシステムが提案されている。このシステムでは、デバッグ回路１０３はシステムバス１０５と独立して、トレースデータ２２１およびクロック信号２１８、停動信号２１８等を、プロセッサ１０２より受け取るようにしている。
【０００５】
特許文献２では、デバッグ機能を内蔵したマイクロプロセッサにおいて、デバッグ処理のため中央処理部を停止する時間を一定時間内に抑え、プログラム実行時間のリアルタイム性を保証するための技術が記載されている。このプロセッサでは、アドレスバス１２１およびデータバス１２２と独立したデバッグ情報１３０を、デバッグ情報ストローブ１３１に同期して、ＣＰＵ１２０からデバッグ処理部１００へ出力するようにしている。
【０００６】
特許文献３では、実時間動作の間にコアプロセッサの仮想バスのアドレスおよびデータ信号を選択的にサンプルして電力消費を低減しかつバス負荷による性能の影響を最小にする実時間プロセッサ・デバッグシステムが提案されている。このシステムでは、仮想バス・ゲーティング論理１１７から独立してデバッグデータおよびデバッグアドレスを出力するようにしている。
【０００７】
特許文献４では、ユーザプログラムのデバッグを簡易かつ低コストで実行し得るマイクロコンピュータが提案されている。このコンピュータにおいて、ＣＰＵ２からジャンプ要求および実行命令サイズは、アドレスバス８およびデータバス９を介さずにデバッグモジュールへ供給されるようになっている。
【０００８】
特許文献５では、マイクロコンピュータ上でのデバッグ動作を実施する改良した方法及び装置が提案されている。この装置において、デバッグモジュール７２は、ＣＰＵ５１からバス５６を介さずに信号線７６より信号を受けるようにしている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００１-１５４８７３号公報
【特許文献２】特開２００１-１０９６４３号公報
【特許文献３】特開２００１-２２２４４６号公報
【特許文献４】特開２００６-３１８１７２号公報
【特許文献５】特開２００１-１５４８７６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
近年のソフトウェア開発において、オンチップデバッグ方式では解析困難な不具合や性能改善手法の要求がある。エンジン制御やモーター制御などのリアルタイムシステムでは、不具合再現性や性能水準を保証する作業がデバッグ工程で重要である。この時に既存のオンチップデバッグ方式では、旧来のＩＣＥ方式の機能を求められることが多い。また近年の階層化されたソフトウェアにおいては、リアルタイムシステムの応答速度や最悪時のタスク処理時間をどの様に解析するかが重要で、この点についての改善要求がある。
【００１１】
従来、ＣＰＵの内部情報観測としては、簡単な経過時間や内部イベントの測定機能を提供していた。また、内部情報として、ＣＰＵのプログラムカウンタ値をモニタできる機能はあった。ただし、これらの情報が示す内容と実際のＣＰＵの動作タイミングには、ずれが生じるため有効な情報にはなっていなかった。例えば割込みや例外処理などでＣＰＵの内部状態が変化したとき、ステータスレジスタの値が変化するタイミングと次に実行するプログラムカウンタの値は設計上同期しない可能性がある。従ってＣＰＵの内部状態をモニタするには、各情報の同期を取った上でモニタできないと有効ではない。つまり、各情報にはあるタイミングでのＣＰＵの状態を含んでいるので、同じＣＰＵ状態に対応する情報同士を組合せて管理しなければならない。さらに取得した情報は、ＣＰＵの処理によらず外部に取り出せなければならない。これは前述のデバッグ再現性を損なわないために必要な要件である。このような課題は、特許文献１−５に記載されている技術では解決することができない。
【００１２】
一方、リアルタイム性を有するユーザプログラムにおけるタスクの性能劣化原因を特定するためには、ＯＳ（Operating System）や割込み処理でＣＰＵを占有している時間の解析を可能にする機能も検討案件になっている。このとき、ＣＰＵの内部情報を示すステータスレジスタ情報を活用することができれば、ＯＳが実行されている特権モードの検出、割込みに関係するデバッグ情報の提供が可能になる。
【００１３】
前述の通りステータスレジスタは、ＣＰＵの状態を示す一つの要素である。その他にも汎用レジスタを初めとして、ＣＰＵの内部状態を示すリソースは多数ある。ステータスレジスタをデバッグの対象とすることができるならば、同様に汎用レジスタなどＣＰＵ内部のレジスタ情報は包括的にデバッグ対象として取り扱うことができると考えられる。
【００１４】
ＣＰＵの内部レジスタの状態を確認するために、デバッガソフトウェアには、一般にレジスタウィンドウと呼ばれる表示機能がある。この表示を実現するためには、ユーザプログラムを一時停止させ、レジスタの情報を読み出すなど一定の条件が伴う。これは旧来のＩＣＥ方式でも、オンチップデバッグ方式でも同様であり、ソフトウェア開発環境向上の技術開発の課題である。ユーザプログラムを実行しながら、汎用レジスタ情報の変化をデバッグ回路を通じて取り出し、ソフトウェア開発者に情報提供できれば、非常に精度の高いシステム開発が可能となる。
【００１５】
本発明の目的は、ユーザプログラムを実行しながら、ＣＰＵ内部のレジスタ情報、特にステータスレジスタ値やプログラムカウンタ値を観測するための技術を提供することにある。
【００１６】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１７】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１８】
すなわち、半導体装置は、プログラムを実行可能なＣＰＵと、上記ＣＰＵで実行されるプログラムのデバッグを支援するためのデバッグ回路とを備える。上記ＣＰＵは、上記ＣＰＵの状態を示すステータスレジスタと、上記ＣＰＵで実行される命令の格納アドレスを保持するプログラムカウンタとを含む。上記半導体装置は、上記ＣＰＵ内のレジスタ情報を取得するための専用パスを含む。この専用パスは、上記ステータスレジスタが更新された場合の当該更新に対応する上記プログラムカウンタの値を、上記ステータスレジスタが次に更新される前に取得し、取得されたプログラムカウンタ値と、それに対応するステータスレジスタ値とをセットにして上記デバッグ回路に伝達するための論理回路を含む。ＣＰＵ内部のレジスタ情報、特にステータスレジスタ値やプログラムカウンタ値は、上記専用パスにより取得されるため、ステータスレジスタ値やプログラムカウンタ値をデバッグ回路に伝達するのに、ＣＰＵでのプログラム実行を停止させる必要がない。このことが、ユーザプログラムを実行しながら、ＣＰＵ内部のレジスタ情報、特にステータスレジスタ値やプログラムカウンタ値の観測を可能にする。しかも、上記論理回路により、プログラムカウンタ値と、それに対応するステータスレジスタ値とがセットで上記デバッグ回路に伝達されるため、デバッグ情報として有効な情報を得ることができる。
【発明の効果】
【００１９】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００２０】
すなわち、ユーザプログラムを実行しながら、ＣＰＵ内部のレジスタ情報、特にステータスレジスタ値やプログラムカウンタ値を観測するための技術を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明にかかるソフトウェア開発支援装置の全体的な構成例ブロック図である。
【図２】上記ソフトウェア開発支援装置に含まれるマイクロコンピュータ内のレジスタファイルの構成例説明図である。
【図３】上記マイクロコンピュータにおける主要部の構成例ブロック図である。
【図４】上記マイクロコンピュータにおけるパイプライン動作と、プログラムカウンタ及びステータスレジスタとの関係説明図である。
【図５】図４における割込み処理の詳細な説明図である。
【図６】ステータスレジスタ値とプログラムカウンタ値との取得原理の説明図である。
【図７】ステータスレジスタ値とプログラムカウンタ値とを取得するための具体的な回路例の説明図である。
【図８】ステータスレジスタ値とプログラムカウンタ値とデバッグ情報取り込み信号とを取得するための具体的な回路例の説明図である。
【図９】上記マイクロコンピュータに含まれるデバッグ回路の構成例ブロック図である。
【図１０】上記デバッグ回路に含まれるトレース出力部からのパケット出力例の説明図である。
【図１１】上記デバッグ回路に含まれる第１デバッグ専用カウンタの構成例ブロック図である。
【図１２】上記デバッグ回路に含まれる第２デバッグ専用カウンタの構成例ブロック図である。
【図１３】上記デバッグ回路に含まれる第３デバッグ専用カウンタの構成例ブロック図である。
【図１４】ＣＰＵコアとデバッグ回路との間のインタフェースとして、ＡＢＣ（ASE Break Controller）を利用する場合の当該ＡＢＣの構成例説明図である。
【図１５】上記マイクロコンピュータにおけるＣＰＵコアに含まれるステータスレジスタのフォーマット説明図である。
【図１６】上記ソフトウェア開発支援装置に含まれるホストシステムの表示装置での表示例説明図である。
【図１７】上記表示装置におけるタスク遷移グラフの表示例説明図である。
【図１８】上記表示装置におけるパフォーマンス解析グラフの表示例説明図である。
【図１９】一般的なレジスタウインドウの表示例説明図である。
【図２０】上記マイクロコンピュータにおける主要部の別の構成例ブロック図である。
【図２１】上記マイクロコンピュータにおける主要部の別の構成例ブロックである。
【図２２】上記マイクロコンピュータにおける主要部の別の構成例ブロックである。
【図２３】上記マイクロコンピュータにおける主要部の別の構成例ブロックである。
【発明を実施するための形態】
【００２２】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２３】
〔１〕本発明の代表的な実施の形態に係る半導体装置（１４）は、プログラムを実行可能なＣＰＵ（３１）と、上記ＣＰＵで実行されるプログラムのデバッグを支援するためのデバッグ回路（３３）とを備える。上記ＣＰＵは、上記ＣＰＵの状態を示すステータスレジスタと、上記ＣＰＵで実行される命令の格納アドレスを保持するプログラムカウンタとを含む。そして上記半導体装置は、ユーザプログラムの実行を停止させないで済むように、上記半導体装置内のレジスタ情報を取得するための専用パス（３５）を含む。そしてこの専用パスは、上記ステータスレジスタが更新された場合の当該更新に対応する上記プログラムカウンタの値を、上記ステータスレジスタが次に更新される前に取得し、取得されたプログラムカウンタ値と、それに対応するステータスレジスタ値とをセットにして上記デバッグ回路に伝達するための論理回路を含む。この論理回路の一例として、パイプライン同期化回路（３２）を挙げることができる。
【００２４】
〔２〕上記〔１〕において、上記論理回路は、それぞれ上記ＣＰＵの内部クロック信号に同期して信号を取り込むための複数のフリップフロップ回路を含んで成るフリップフロップ回路群（７１〜８３）によって形成することができる。
【００２５】
〔３〕上記〔２〕において、上記ＣＰＵは、パイプラインによるプログラム実行が可能とされる。このとき、上記フリップフロップ回路群には、上記ステータスレジスタの値が更新されるステージで新たなステータスレジスタ値を取り込む第１フリップフロップ回路（７１）と、上記プログラムカウンタが更新されるステージで新たなプログラムカウンタ値を取り込む第２フリップフロップ回路（７２）とを含めることができる。また、上記フリップフロップ回路群には、上記プログラムカウンタが更新されるステージで上記第１フリップフロップ回路の出力値を取り込む第３フリップフロップ回路（７３）と、上記第２フリップフロップ回路の出力値と、上記第３フリップフロップ回路の出力値とを合成して上記デバッグ回路に出力するための第４フリップフロップ回路（７４）とを含めることができる。
【００２６】
〔４〕上記〔３〕において、上記フリップフロップ回路群には、更に、上記第１フリップフロップ回路の動作に同期してステータスレジスタ値の更新を通知するためのステータスレジスタ更新通知信号を取り込む第５フリップフロップ回路（８２）と、上記第４フリップフロップ回路の動作に同期して上記第５フリップフロップ回路の出力値を取り込む第６フリップフロップ回路（８３）とを含めることができる。このとき、上記デバッグ回路は、上記第６フリップフロップ回路の出力値に基づいて、上記第４フリップフロップ回路の出力値を取り込むように構成することができる。
【００２７】
〔５〕上記〔４〕において、上記第５フリップフロップ回路（８２）の出力信号は、上記デバッグ回路において、上記第４フリップフロップ回路（７４）の出力値を取り込むための準備信号として上記デバッグ回路に取り込むことができる。
【００２８】
〔６〕上記〔５〕において、上記デバッグ回路には、上記第４フリップフロップ回路の出力信号を上記ステータスレジスタ値の変化タイミングに同期してトレースするトレース回路（９０６）を含めることができる。
【００２９】
〔７〕上記〔６〕において、上記デバッグ回路（３３）には、上記ステータスレジスタ値と予め設定された比較値とを比較することで、条件一致イベント信号を形成する比較器（９０２）を含めることができる。
【００３０】
〔８〕上記〔７〕において、上記条件一致イベント信号には、ユーザモードから特権モードへの遷移を示す特権モード遷移イベント信号を含めることができる。このとき、上記デバッグ回路には、上記特権モード遷移イベント信号がアサートされてからネゲートされるまでの時間を測定する第１デバッグ専用カウンタを（９０５−１）含めることができる。
【００３１】
〔９〕上記〔８〕において、上記条件一致イベント信号には、割込みのブロック状態を示す割込みブロック信号を含めることができる。このとき、上記デバッグ回路には、上記割込みブロック信号がアサートされてからネゲートされるまでの時間を測定する第２デバッグ専用カウンタ（９０５−２）を含めることができる。
【００３２】
〔１０〕上記〔９〕において、上記条件一致イベント信号には、指定されたマスクレベル以上で動作していることを示す割込みマスクレベルオーバー信号、及び指定されたマスクレベル以下で動作していることを示す割込みマスクレベルアンダー信号を含めることができる。このとき、上記デバッグ回路には、指定されたマスクレベル以上で動作している時間と、指定されたマスクレベル以下で動作している時間とを測定する第３デバッグ専用カウンタ（９０５−３）を含めることができる。
【００３３】
〔１１〕上記〔１０〕において、上記ＣＰＵには、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイル（３０２）と、上記レジスタファイルの保持情報を退避可能なレジスタバンク（２０１）とを含めることができる。また、上記ＣＰＵには、上記レジスタファイルと上記レジスタバンクとの間で信号のやり取りを行うレジスタバンク専用インタフェース（２０２）と、上記レジスタバンク専用インタフェースに結合され、上記レジスタバンク専用インタフェースを介して上記レジスタファイルの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バス（２０３）とを含めることができる。
【００３４】
〔１２〕上記〔１０〕において、上記ＣＰＵには、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイル（３０２）と、上記レジスタファイルの保持情報を退避可能なレジスタバンク（２０１）と、上記レジスタバンクに結合され、上記レジスタバンクの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バス（２０３）とを含めることができる。
【００３５】
〔１３〕上記〔１０〕において、上記ＣＰＵには、上記ステータスレジスタ、上記プログラムカウンタ、及びその他のレジスタを含んで成るレジスタファイル（３０２）と、上記レジスタファイルに結合され、上記レジスタファイルの保持情報を上記デバッグ回路に伝達するためのデバッグ専用バス（２０３）とを含めることができる。
【００３６】
〔１４〕上記〔１０〕に記載された半導体装置（１４）と、上記半導体装置に結合され、上記デバッグ回路の出力情報を取り込むエミュレータ（１２）と、上記エミュレータに結合されたホストシステム（１１）とを含み、上記半導体装置で動作するソフトウェアの開発を支援するソフトウェア開発支援装置（１０）を形成することができる。
【００３７】
〔１５〕上記〔１４〕において、上記ホストシステムは、上記デバッグ回路の出力情報を解析する解析部と、上記解析部での解析結果を可視化するための表示装置とを含んで構成することができる。このとき、上記表示装置には、上記解析部での解析結果に基づいて、上記半導体装置におけるオペレーティングシステムのＣＰＵ占有率情報及び割込み処理時間情報を、ユーザタスク処理時間情報と区別して表示させると良い。
【００３８】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００３９】
図１には、本発明にかかるソフトウェア開発支援装置の全体的な構成例が示される。
【００４０】
図１に示されるソフトウェア開発支援装置１０は、ホストシステム１１、エミュレータ１２、及び顧客システム１３を含み、上記顧客システム１３に搭載される半導体装置の一例とされるマイクロコンピュータ１４で実行されるユーザプログラムの開発を支援する。
【００４１】
上記マイクロコンピュータ１４は、ユーザプログラムの実行により、顧客システム１３の動作制御やそれに伴う各種演算処理を行う。また、上記マイクロコンピュータ１４は、ユーザプログラムのデバッグ機能１６を含む。上記エミュレータ１２は、上記顧客システム１３に専用インタフェースケーブル１５を介して結合され、顧客システム１３に搭載されたマイクロコンピュータ１４内の各種情報を収集する。上記エミュレータ１２は、インタフェースケーブル１６を介してホストシステム１１に結合される。このホストシステム１１には、パーソナルコンピュータなどを適用することができる。ホストシステム１１では、所定のデバッグ用プログラムが実行されることによって、上記エミュレータ１２の動作制御や、上記エミュレータ１２を介して収集された情報の解析等が行われる。ホストシステム１１は表示装置を含み、この表示装置には、上記エミュレータ１２を介して収集された情報の解析結果を表示することができる。
【００４２】
図３には、上記マイクロコンピュータ１４における主要部の構成例が示される。
【００４３】
上記マイクロコンピュータ１４は、ＣＰＵコア３１、パイプライン同期化回路３２、及びデバッグ回路３３を含み、特に制限されないが、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。
【００４４】
上記ＣＰＵコア３１は、ＣＰＵ制御部３０１、レジスタファイル３０２、及びＣＰＵ演算部３０３を含み、パイプラインにより、複数の命令を同時に実行することができる。例えばスーパースカラパイプラインでは、合計７本のパイプライン動作の中から最大２本同時に命令の発行が可能とされる。
【００４５】
上記レジスタファイル３０２は、例えば図２に示されるように、汎用レジスタ群２０１、コントロールレジスタ２０２、システムレジスタ２０３を含む。汎用レジスタ群２０１は汎用レジスタ（Ｒ０〜Ｒ１５）を含み、それぞれデータ処理やアドレス計算など汎用的に使用される。コントロールレジスタ２０２は、グローバルベースレジスタ（ＧＢＲ）、ステータスレジスタ（ＳＲ）、ベクタベースレジスタ（ＶＢＲ）、ジャンプテーブルベースレジスタ（ＴＢＲ）を含む。ステータスレジスタは、ＣＰＵコア３１での処理状態を示す。グローバルベースレジスタは、グローバルベースレジスタ間接アドレシングモードのベースアドレスを示す。ベクタベースレジスタは例外及び割込み発生時、分岐先のベースアドレスを示す。ジャンプテーブルベースレジスタはテーブル参照サブルーチンコール命令を実行する際に、メモリに配置された関数テーブルの先頭アドレスを示す。システムレジスタ２０３は、積和レジスタ（ＭＡＣＨ，ＭＡＣＬ）、プロシージャレジスタ（ＰＲ）、プログラムカウンタ（ＰＣ）を含む。積和レジスタ（ＭＡＣＨ，ＭＡＣＬ）は、乗算又は積和演算結果を格納する。プロシージャレジスタ（ＰＲ）は、サブルーチンプロシージャからの戻りアドレスを格納する。プログラムカウンタ（ＰＣ）は、実行中の命令の格納アドレスを示す。上記ステータスレジスタ（ＳＲ）は、例えば図１５に示されるように３２ビット構成とされる。「Ｔ」は、真／偽条件、またはキャリ／ボロービット、「Ｓ」は、ＭＡＣ命令の飽和動作を指定するビットである。「ＩＭＡＳＫ」は割込みマスクレベルを指定するビットである。割込みマスク値１〜１５を用いて、割込み優先レベル０に設定された割込み要求からマスクすることができる。「Ｍ」ビット及び「Ｑ」ビットは除算に使用される。「ＣＳ」は、ＣＬＩＰ命令の実行で、飽和上限値を上回った、または飽和下限値を下回ったことを示すビットである。「ＢＯ」は、レジスタバンクがオーバフローしていることを示すビットである。「ＢＬ」は、割込みブロックビットであり、このビットの設定によって全ての割込みを無条件に禁止することができる。「ＭＤ」は特権モードとユーザーモードとを選択するためのビットである。
【００４６】
上記ＣＰＵ制御部３０１は、命令のフェッチ及びフェッチされた命令のデコードを行う。
【００４７】
上記ＣＰＵ演算部３０３は、ＡＬＵ（Arithmetic Logic Unit）を含み、上記ＣＰＵ制御部３０１での命令デコード結果に基づく演算処理を行う。
【００４８】
上記パイプライン同期化回路３２は、上記レジスタファイル３０２の情報、特にステータスレジスタ値と、プログラムカウンタ値とをデバッグ回路３３に伝達する。このとき、上記パイプライン同期化回路３２は、ステータスレジスタ値とプログラムカウンタ値とをＣＰＵの命令実行状態（パイプライン）に同期させて取り込む。つまり、上記パイプライン同期化回路３２は、上記ステータスレジスタが更新された場合の当該更新に対応する上記プログラムカウンタの値を、上記ステータスレジスタが次に更新される前に取得する。このようにして取得されたステータスレジスタ値とそれに対応するプログラムカウンタ値とは、ひとつのセットとして上記デバッグ回路３３に伝達される。ここで、上記パイプライン同期化回路３２を含んで、ＣＰＵコア３１内のレジスタ情報を取得するための専用パス３５が形成される。ステータスレジスタ値とそれに対応するプログラムカウンタ値の取得及びデバッグ回路３３への伝達は、ＣＰＵ演算部３０３とデバッグ回路３３との間の専用パス３５を介して行われるため、ＣＰＵコア３１でのユーザプログラムの実行を停止させる必要がない。
【００４９】
上記デバッグ回路３３は、アドレス信号を伝達するためのアドレスバスＡＢＵＳと、データを伝達するためのデータバスＤＢＵＳとを介して上記ＣＰＵコア３１に結合される。上記デバッグ回路３３は、上記ＣＰＵコア３１でのユーザプログラム実行状態をトレースするトレース機能や、所定のブレーク条件を設定することでユーザプログラム実行状態を停止させる機能を有する。また、このデバッグ回路３３は、上記パイプライン同期化回路３２によって取得されたプログラムカウンタ値とそれに対応するステータスレジスタ値とをトレースする機能を有する。特に制限されないが、このデバッグ回路３３のトレース出力は４ビット（ｂｉｔ）構成とされ、このトレース出力情報には、分岐元アドレス、分岐先アドレス、データ値の他、ステータスレジスタ値、プログラムカウンタ値、時刻情報が含まれる。
【００５０】
次に、上記ステータスレジスタ値の取得タイミングについて詳述する。
【００５１】
図４には、パイプライン動作と、プログラムカウンタ及びステータスレジスタとの関係が示される。
【００５２】
スーパースカラパイプラインによれば、先行命令及び後行命令の同時実行が可能とされる。「ＩＦ」は命令フェッチを示し、「ＩＤ」は命令デコードを示す。ＥＸ（内部）は内部処理の演算実行を示し、ＥＸ（ｅｘｃｅｐ）は例外処理の演算実行を示し、「ＭＡ」はメモリアクセスを示す。
【００５３】
割込みが受理されると、その割込みに起因して、例外処理（ベクタリード）、例外処理（ステータスレジスタ（ＳＲ）スタック動作）、例外処理（プログラムカウンタ（ＰＣ）スタック動作）、例外処理フェッチ動作が行われる。
【００５４】
割込み受理後のステータスレジスタ（ＳＲ）値と、それに対応する分岐先命令アドレス（プログラムカウンタ（ＰＣ）値）とを同時に観測するには、互いに異なるタイミングで変化するＳＲ値と、それに対応するＰＣ値とを、ひとつのセットにしてデバッグ回路３３に取り込む必要がある。図４に示される例では、ＳＲスタック動作におけるＳＲ値の演算実行後のタイミング（４１）でＳＲ値の取得が可能となり、例外処理フェッチ動作における分岐先計算実行後のタイミング４２で分岐先ＰＣ値の取得が可能とされる。
【００５５】
尚、再び割込み受理可能となるステージ（４３）以降は、新たな割込みに起因してＳＲ値が変更されるおそれがあるため、再び割込み受理可能となるステージ（４３）よりも前にＳＲ値とそれに対応するＰＣ値とを取得する。
【００５６】
図５には、図４における割込み処理の詳細が示される。
【００５７】
一般に割込み処理が行われる場合、汎用レジスタの保持内容を退避する必要があり、そのためにメモリアクセスが必要になる。例えば図５に示されるように、汎用レジスタなどの保持内容が順次レジスタバンクに退避される。スタック退避動作では、ＳＲ値、ＰＣ値がユーザメモリに退避される。
【００５８】
例外処理（レジスタバンク退避５１）では、ＶＴＯ／ＰＲ／ＧＢＲ／ＭＡＣＬがレジスタバンクに退避される。例外処理（レジスタバンク退避５１）では、Ｒ１２／Ｒ１３／Ｒ１４／ＭＡＣＨがレジスタバンクに退避される。例外処理（レジスタバンク退避５２）では、Ｒ１２／Ｒ１３／Ｒ１４／ＭＡＣＨがレジスタバンクに退避される。例外処理（レジスタバンク退避５３）では、Ｒ８／Ｒ９／Ｒ１０／Ｒ１１がレジスタバンクに退避される。例外処理（レジスタバンク退避５４）では、Ｒ４／Ｒ５／Ｒ６／Ｒ７がレジスタバンクに退避される。例外処理（レジスタバンク退避５５）では、Ｒ０／Ｒ１／Ｒ２／Ｒ３がレジスタバンクに退避される。
【００５９】
図６には、ステータスレジスタ（ＳＲ）値とプログラムカウンタ（ＰＣ）値との取得原理が示される。
【００６０】
ＣＰＵの内部動作（ＣＰＵ演算部３０３の動作）により、ＳＲ値の演算及び分岐先アドレスの演算が行われる。上記ＳＲ値の演算が完了すると、その演算結果に基づいてステータスレジスタが更新される。上記分岐先アドレスの演算が完了すると、その演算結果に基づいてプログラムカウンタが更新される。また、上記ＳＲ値の演算結果は、ステータスレジスタが更新される前に、デバッグ回路３３へ出力され、上記分岐先アドレスの演算結果は、プログラムカウンタが更新される前に、デバッグ回路３３へ出力される。
【００６１】
図７には、ステータスレジスタ（ＳＲ）値とプログラムカウンタ（ＰＣ）値とを取得するための具体的な回路例が示される。
【００６２】
パイプライン同期化回路３２には、フリップフロップ回路７１，７２，７３，７４が設けられ、このフリップフロップ回路７１，７２，７３，７４によって、ステータスレジスタ（ＳＲ）値とプログラムカウンタ（ＰＣ）値との取得、及びデバッグ回路３３への伝達が行われる。フリップフロップ回路７１，７２，７３，７４は、ＣＰＵコア３１から出力されるクロック信号に同期して動作されるものとする。ＳＲ値演算は演算回路７５で行われ、分岐先演算は演算回路７６で行われる。上記演算回路７５，７６は、ＣＰＵ演算部３０３に含まれる。演算回路７５で得られたＳＲ値がステータスレジスタに書き込まれるタイミングで、上記ＳＲ値がフリップフロップ回路７１に取り込まれる。演算回路７６で得られた分岐先アドレス（ＰＣ値）がプログラムカウンタに書き込まれるタイミングで、上記分岐先アドレス（ＰＣ値）がフリップフロップ回路７２に取り込まれる。また、上記分岐先アドレス（ＰＣ値）がフリップフロップ回路７２に取り込まれるタイミングで、上記フリップフロップ回路７１の出力値がフリップフロップ回路７３に取り込まれる。そして、上記フリップフロップ回路７２，７３の出力値は、フリップフロップ回路７４に取り込まれ、ここで一つのデータに合成されてデバッグ回路３３に送出される。
【００６３】
上記フリップフロップ回路７４の出力値をデバッグ回路３３で円滑に取り込むためには、デバッグ情報の取り込みを指示するためのデバッグ情報取り込み信号を、デバッグ回路３３に供給すると良い。図８には、この場合の回路構成例が示される。図８に示される構成例では、図７に示されるフリップフロップ回路７１〜７４に加えて、フリップフロップ回路８１，８２，８３が設けられる。フリップフロップ回路８１は、ＣＰＵコア３１内に設けられている。フリップフロップ回路８２，８３は、パイプライン同期化回路３２内に設けられる。割込み受理信号又はステータスレジスタ（ＳＲ）の操作命令のデコード結果に起因して、フリップフロップ回路８１の保持状態が変化されるものとする。演算回路８４は、上記フリップフロップ回路８１の出力値に基づいてＳＲ更新通知信号を生成する。生成されたＳＲ更新通知信号は、上記フリップフロップ回路７１の動作に同期してフリップフロップ回路８２に取り込まれる。さらに、このフリップフロップ回路８２の出力値は、上記フリップフロップ回路７４の動作に同期してフリップフロップ回路８３に取り込まれる。このフリップフロップ回路８３の出力は、デバッグ情報取り込み信号として、デバッグ回路３３に送出される。また、上記フリップフロップ回路８２の出力は、デバッグ情報取り込み準備信号としてデバッグ回路３３に送出される。このようにデバッグ情報取り込み準備信号をデバッグ回路３３に送出するのは、ステータスレジスタが何かの原因で更新されることを、デバッグ情報取り込み信号が確定する前にデバッグ回路３３に通知することによって、デバッグ回路３３でのステータスレジスタ値の取り込みの準備時間を確保するためである。これにより、上記ステータスレジスタの更新後の値をデバッグ回路３３において確実に取り込むことができる。上記ステータスレジスタは、上記のステータスレジスタ操作命令によって更新されることがあるが、この場合にデバッグ回路３３へ送出されるプログラムカウンタ値は、プログラムの分岐を伴わないため、ステータスレジスタ操作命令の次の命令のアドレス値を組み合わせる。割込みを受け付けた場合は分岐先アドレス(次に実行する命令アドレス)を組み合わせるが、同じ考え方に基づくと次に実行する命令アドレスはステータスレジスタ操作命令の直後の命令であるため、デバッグ回路３３に送出すべきプログラムカウンタ値として適切であると言える。
【００６４】
図９には、上記デバッグ回路３３の構成例が示される。
【００６５】
上記デバッグ回路３３は、ＳＲ比較条件設定部９０１、比較器９０２、トレース機能用タイマ９０３、ＬＳＩ／ＣＰＵ制御論理９０４、デバッグ専用カウンタ９０５を含む。ＳＲ比較条件設定部９０１には、ステータスレジスタ（ＳＲ）値との比較のための各種条件が設定される。この比較のための各種条件には、特権モードの検出条件、割込みマスク値、一致条件等が含まれる。比較器９０２は、パイプライン同期化回路３２から伝達されたステータスレジスタ（ＳＲ）値と、上記ＳＲ比較条件設定部９０１の設定条件に応じた比較動作により各種条件一致イベント信号を形成する。
【００６６】
本例において、上記各種条件一致イベント信号には、特権モード遷移イベント信号、割込みブロック信号、割込みマスクレベルオーバー信号、割込みマスクレベルアンダー信号が含まれる。特権モード遷移イベント信号は、ステータスレジスタのＭＤビットを基準値と比較することで生成することができる。割込みブロック信号は、ステータスレジスタのＢＬビットを基準値（比較値）と比較することで生成することができる。割込みマスクレベルオーバー信号や割込みレベルアンダー信号は、ステータスレジスタのＩＭＡＳＫビットを基準値と比較することで生成することができる。
【００６７】
各種条件一致イベント信号は、ＬＳＩ／ＣＰＵ制御論理９０４及びデバッグ専用カウンタ９０５に伝達される。ＬＳＩ／ＣＰＵ制御論理９０４は、上記比較器９０２で得られた各種条件イベント信号が所定のブレーク条件に一致した場合にユーザプログラムの実行を停止するためのブレーク信号を形成し、あるいは所定の割込み要求を発生させる。また、割込み要求が所定時間経過しても受理されない場合に、ブレーク信号を形成するようにしても良い。デバッグ専用カウンタ９０５は、伝達された各種条件一致イベント信号を用いて時間測定を行う。このデバッグ専用カウンタ９０５は、特権モード時間測定のための第１デバッグ専用カウンタ９０５−１、割込み禁止時間測定のための第２デバッグ専用カウンタ９０５−２、割込みマスクレベル以上又は割込みマスクレベル以下で動作している時間測定のための第３デバッグ専用カウンタ９０５−３を含む。上記デバッグ専用カウンタ９０５の出力は、トレース回路９０６内のトレース出力部９０８を介してエミュレータ１２に伝達される。上記トレース機能用タイマ９０３は、トレース情報に時刻情報を付与するために設けられる。上記トレース回路９０６は、トレース入力部９０７、トレース出力部９０８、トレースメモリ９０９を含む。トレース入力部９０７は、上記パイプライン同期化回路３２やデバッグ専用カウンタ９０５などからトレース情報を取り込む際に、トレース機能用タイマ９０３から出力された時刻情報を上記トレース情報に付与する。時刻情報が付与されたトレース情報は、トレースメモリ９０９に格納されるとともに、トレース出力部９０８でパケット化されてエミュレータ１２（図１参照）へ出力される。トレース出力部９０８でのパケット出力には、例えば図１０に示されるように、ステータスレジスタ（ＳＲ）値の変化を示すヘッダ、ＳＲ値、ＰＣ値（分岐先アドレス）、時刻情報（トレース機能用タイマ９０３の出力値）が含まれる。
【００６８】
図１１には、上記第１デバッグ専用カウンタ９０５−１の構成例が示される。
【００６９】
上記第１デバッグ専用カウンタ９０５−１は、カウンタ制御論理１１１、制御レジスタ１１２、カウンタ１１３、カウンタクロック制御回路１１４を含む。カウンタクロック制御回路１１４は、クロック信号を生成する。カウンタ１１３は、カウンタクロック制御回路１１４から出力されたクロック信号をカウントする。このカウンタ１１３のカウント結果は、任意のタイミングで読み出しが可能であるほか、トレース回路９０６に伝達することもできる。カウンタ制御論理１１１は、比較器９０２から出力される特権モード遷移イベント信号に基づいてカウント開始信号及びカウント停止信号を形成する。つまり、特権モード遷移イベント信号がアサートされたタイミングに同期してカウント開始信号をアサートし、特権モード遷移イベント信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１１３でクロック信号のカウント動作が行われる。制御レジスタ１１２は、上記カウンタ制御論理１１１及び上記カウンタクロック制御回路１１４の動作制御のための情報が設定される。これにより、特権モード時間の測定が可能になる。尚、トレース回路９０６において、特権モード終了タイミングに同期してカウンタ１１３の値をトレースするようにしても良い。
【００７０】
図１２には、上記第２デバッグ専用カウンタ９０５−２の構成例が示される。
【００７１】
上記第２デバッグ専用カウンタ９０５−２は、カウンタ制御論理１２１、制御レジスタ１２２、カウンタ１２３、カウンタクロック制御回路１２４を含む。カウンタクロック制御回路１２４は、クロック信号を生成する。カウンタ１２３は、カウンタクロック制御回路１２４から出力されたクロック信号をカウントする。このカウンタ１２３でのカウント結果は、任意のタイミングで読み出しが可能であるほか、トレース回路９０６に伝達することもできる。カウンタ制御論理１２１は、比較器９０２から出力される割込みブロック信号に基づいてカウント開始信号及びカウント停止信号を形成する。つまり、割込みブロック信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１２３でクロック信号のカウント動作が行われる。制御レジスタ１２２は、上記カウンタ制御論理１２１及び上記カウンタクロック制御回路１２４の動作制御のための情報が設定される。これにより、割込み禁止時間の測定が可能になる。尚、トレース回路９０６において、割込みブロック信号のネゲートタイミングに同期してカウンタ１２３の値をトレースするようにしても良い。
【００７２】
図１３には、上記第３デバッグ専用カウンタ９０５−３の構成例が示される。
【００７３】
上記第３デバッグ専用カウンタ９０５−３は、カウンタ制御論理１３１、制御レジスタ１３２、カウンタ１３３、カウンタクロック制御回路１３４を含む。カウンタクロック制御回路１３４は、クロック信号を生成する。カウンタ１３３は、カウンタクロック制御回路１３４から出力されたクロック信号をカウントする。このカウンタ１３３でのカウント結果は、任意のタイミングで読み出しが可能であるほか、トレース回路９０６に伝達することもできる。カウンタ制御論理１３１は、比較器９０２から出力される割込みマスクレベルオーバー信号又は割込みマスクレベルアンダー信号に基づいてカウント開始信号及びカウント停止信号を形成する。例えば指定された割込みマスクレベル以上で動作している時間を測定する場合には、割込みマスクレベルオーバー信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。また、指定された割込みマスクレベル以下で動作している時間を測定する場合には、割込みマスクレベルアンダー信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１３３でクロック信号のカウント動作が行われる。制御レジスタ１３２は、上記カウンタ制御論理１３１及び上記カウンタクロック制御回路１３４の動作制御のための情報が設定される。ＣＰＵの機能としては完全な割込み禁止よりも、マスクレベルによる割込み制御が一般的である。このため、指定された割込みマスクレベル以上で動作している時間や、指定された割込みマスクレベル以下で動作している時間を測定することにより、割込み競合発生時に所望の割込みが実行されるまでの待ち時間が許容範囲内であるか否かを判定することができる。尚、トレース回路９０６において、カウンタ制御論理１３１から出力されるカウント停止信号のタイミングに同期してカウンタ１３３の値をトレースするようにしても良い。
【００７４】
以上の説明では、条件一致イベント信号を用いて、時間測定を行うようにしたが、この時間測定に用いたカウンタ１１３，１２３，１３３とは別のカウンタを設け、当該カウンタにより、それぞれのイベントの発生回数を同時に計測するようにしても良い。イベント発生回数は、エミュレータ１２がデバッグを中断するまでの条件一致回数を計測できれば良く、トレースする必要はない。しかし、イベント発生回数をも同時に計測しておけば、上記条件一致イベント信号に基づく時間測定との関係で平均時間を算出することができる。
【００７５】
また、デバッグ回路３３には、チップ内部で発生したイベントを端子からエミュレータ１２に送出する機能が設けられる。この機能は、時間測定や特定の内部状態が発生したことをＧＵＩ（Graphical User Interface）によってユーザに通知するのに利用できる。例えばステータスレジスタの変化、特権モード移行イベント、割込み禁止中などを出力するのに利用できる。これにより、エミュレータ１２を介してＣＰＵコア３１の内部イベントをホストシステム１１で観測できるようになる。
【００７６】
さらに、ステータスレジスタ（ＳＲ）の比較条件として、ステータスレジスタ（ＳＲ）の全ビット比較、特定ビット比較、特定ビットの組み合わせを挙げることができる。全ビット比較によれば、有効ビットの論理（０又は１）状態が全て一致する特定イベントの抽出が可能である。ビット単位マスク機能を付与すれば、ソフトウェア互換性や将来の拡張に対応可能とされる。特定ビット比較によれば、特定ビット例えばＩＭＡＳＫのみの論理（０又は１）状態の一致のみ検出すれば良いため、比較器の論理規模を小さくできる。特定ビットの組み合わせによれば、特定ビット比較結果の論理積条件などを追加して、状態の絞込みが可能となる。
【００７７】
マイクロコンピュータによっては、ＡＳＥ  Ｂｒｅａｋ  Ｃｏｎｔｒｏｌｌｅｒ（以下、「ＡＢＣ」と略記する）を内蔵するものがある。このＡＢＣは、ブレーク条件が成立するか否かを比較する機能を有し、このＡＢＣを、ＣＰＵコア３１とデバッグ回路３３との間のインタフェースとして利用することができる。図１４にはこの場合の構成例が示される。
【００７８】
デコード論理１４１、演算回路１４２及びフリップフロップ回路１５１，１５２はＣＰＵコア３１内に設けられる。有効ＳＲ値生成論理１４３及び比較論理１４４、フリップフロップ回路１５３，１５４，１５５，１５６は、ＡＢＣ内に設けられる。ここでこの有効ＳＲ値生成論理１４３及び比較論理１４４、フリップフロップ回路１５３，１５４，１５５，１５６は、条件一致イベント生成のために新たに設ける。上記フリップフロップ回路１５１，１５２，１５４，１５５，１５３，１５６は、ＣＰＵコア３１内のクロック信号に同期動作される。例えばステータスレジスタ（ＳＲ）の操作命令がデコード論理１４１でデコードされ、そのデコード結果がフリップフロップ回路１５１に取り込まれる。演算回路１４２は、上記フリップフロップ回路１５１の出力（デコード結果）に基づいてＳＲ値を演算する。この演算結果は、フリップフロップ回路１５２に取り込まれる。
【００７９】
一方、ＡＢＣ内部では、上記フリップフロップ回路１５１の出力（デコード結果）がフリップフロップ回路１５４に取り込まれる。フリップフロップ回路１５４の出力は、ＳＲ比較準備信号として有効ＳＲ値生成論理１４３に伝達される。有効ＳＲ値生成論理１４３は、上記ＳＲ比較準備信号に基づいて、上記フリップフロップ回路１５２の出力から有効ＳＲ値を生成する。有効ＳＲ値はフリップフロップ回路１５５に取り込まれる。フリップフロップ回路１５３には、ＳＲの比較値が設定される。このフリップフロップ回路１５３の出力（ＳＲの比較値）は、比較論理１４４に伝達される。この比較論理１４４は、上記フリップフロップ回路１５５の出力（有効ＳＲ値）と、上記フリップフロップ回路１５３の出力（ＳＲの比較値）との比較を行う。この比較結果はフリップフロップ回路１５６に取り込まれる。フリップフロップ回路１５６の出力は、ＡＢＣ内部機能や他のデバッグ回路３３に伝達される。
【００８０】
尚、上記の条件一致イベント生成においては、ＣＰＵコア３１内のステータスレジスタ（ＳＲ）の情報を取り込んで比較するようにしたが、ＣＰＵコア３１内のその他のレジスタの保持情報を取り込んで比較するようにしても良い。
【００８１】
次に、デバッグ情報の表示について説明する。
【００８２】
近年のソフトウェア開発環境で重要性が高まっている機能にプロファイル機能がある。この機能によれば、ユーザプログラム（ユーザタスク）がどのようなタイミングで、あるいはどのような時間で実行されたかをグラフで表示し、要求性能を満たさないタスクを容易に認識可能にする。上記プロファイル機能は、特に大規模化したソフトウェアでは、性能改善などの作業時間短縮に重要な機能とされる。そこで本例では、上記デバッグ回路３３により収集されたデバッグ情報がエミュレータ１２を介してホストシステム１１に伝達されることにより、このホストシステム１１において画像表示を行うことができる。ホストシステム１１は、エミュレータ１２を介して取り込まれたデバッグ情報を解析する解析部と、その解析結果を表示する表示部とを含む。上記解析部は、ホストシステム１１におけるＣＰＵで所定のデバッグ用プログラムが実行されることによって機能的に実現される。
【００８３】
図１６には、ホストシステム１１における表示装置での表示例が示される。
【００８４】
ホストシステム１１における表示装置の表示画面１６１は、タスク遷移グラフ１６１−１と、パフォーマンス解析グラフ１６１−２とが表示される。
【００８５】
上記タスク遷移グラフ１６１−１には、例えば図１７に示されるように、ユーザプログラムにおけるタスク（Ｍａｉｎ，ｔａｓｋ＿１〜ｔａｓｋ＿６）毎の性能評価情報１７０や、割込みマスクレベル時間情報１７１、及びＯＳ実行時間情報１７２が含まれる。このグラフの横軸は時間を示している。本例では、第３デバッグ専用カウンタ９０５−３により、指定された割込みマスクレベル以上で動作している時間や、指定された割込みマスクレベル以下で動作している時間が測定されており、この情報に基づいて、割込みマスクレベル時間情報１７１のグラフ表示を行うことができる。また、第１デバッグ専用カウンタ９０５−１により、特権モード時間が測定されており、この情報に基づいて、ＯＳ（Operating System）が実行されているＯＳ実行時間情報１７２のグラフ表示を行うことができる。「タスク外」というグラフは、タスク（Ｍａｉｎ，１−６）以外の処理、例えば割込みマスクレベル時間やＯＳ実行時間を合計したものを意味する。
【００８６】
上記パフォーマンス解析グラフ１６１−２には、例えば図１８に示されるように、ユーザプログラムにおけるタスク（Ｍａｉｎ，ｔａｓｋ＿１〜ｔａｓｋ＿６）毎のパフォーマンス解析グラフ１８０と、割込みマスクレベルやＯＳに関するパフォーマンス解析グラフ１８１とが含まれる。タスク等の最大処理時間やＣＰＵ占有率は数値表示され、処理時間はグラフ表示される。上記パフォーマンス解析グラフ１８１は、上記第１デバッグ専用カウンタ９０５−１や第３デバッグ専用カウンタ９０５−３などによって得られた時間情報に基づいて表示することができる。このような表示によれば、割込みマスクレベルやＯＳに関するパフォーマンス解析グラフ１８１に基づいて、「ＯＳなどに処理時間をとられ過ぎていないか？」、「アイドル（休止）時間から処理の余裕は十分か？」などの判断を行うことができる。
【００８７】
この実施の形態によれば以下の作用効果が得られる。
【００８８】
（１）上記パイプライン同期化回路３２を含んで、ＣＰＵコア３１内のレジスタ情報を取得するための専用パス３５が形成される。プログラムカウンタ値とそれに対応するステータスレジスタ値の取得及びデバッグ回路３３への伝達は、ＣＰＵ演算部３０３とデバッグ回路３３との間の専用パス３５を介して行われるため、ＣＰＵコア３１でのユーザプログラムの実行を停止させる必要がない。
【００８９】
また、一般的には、割込みや例外処理などでＣＰＵの内部状態が変化したとき、ステータスレジスタの値が変化するタイミングと次に実行するプログラムカウンタの値は設計上同期しない可能性がある。しかし、上記パイプライン同期化回路３２は、ステータスレジスタ値とプログラムカウンタ値とをＣＰＵの命令実行状態（パイプライン）に同期させて取り込むようにしているため、デバッグ情報として有効なものを得ることができる。
【００９０】
（２）パイプライン同期化回路３２には、フリップフロップ回路７１，７２，７３，７４が設けられ、このフリップフロップ回路７１，７２，７３，７４によって、ステータスレジスタ（ＳＲ）値とプログラムカウンタ（ＰＣ）値との取得、及びデバッグ回路３３への伝達を容易に行うことができる。例えばＳＲ値演算は演算回路７５で行われ、分岐先演算は演算回路７６で行われる。上記演算回路７５，７６は、ＣＰＵ演算部３０３に含まれる。演算回路７５で得られたＳＲ値がステータスレジスタに書き込まれるタイミングで、上記ＳＲ値がフリップフロップ回路７１に取り込まれる。演算回路７６で得られた分岐先アドレス（ＰＣ値）がプログラムカウンタに書き込まれるタイミングで、上記分岐先アドレス（ＰＣ値）がフリップフロップ回路７２に取り込まれる。また、上記分岐先アドレス（ＰＣ値）がフリップフロップ回路７２に取り込まれるタイミングで、上記フリップフロップ回路７１の出力値がフリップフロップ回路７３に取り込まれる。そして、上記フリップフロップ回路７２，７３の出力値は、フリップフロップ回路７４に取り込まれ、ここで一つのデータに合成されてデバッグ回路３３に送出される。
【００９１】
（３）ステータスレジスタが何かの原因で更新されることを、デバッグ情報取り込み信号が確定する前にデバッグ回路３３に通知することによって、デバッグ回路３３でのステータスレジスタ値の取り込みの準備時間を確保することができる。これにより、上記ステータスレジスタの更新後の値をデバッグ回路３３において確実に取り込むことができる。
【００９２】
（４）デバッグ専用カウンタ９０５は、特権モード時間測定のための第１デバッグ専用カウンタ９０５−１、割込み禁止時間測定のための第２デバッグ専用カウンタ９０５−２、割込みマスクレベル以上又は割込みマスクレベル以下で動作している時間測定のための第３デバッグ専用カウンタ９０５−３を含んで容易に構成することができる。
【００９３】
上記第１デバッグ専用カウンタ９０５−１において、カウンタ制御論理１１１は、比較器９０２から出力される特権モード遷移イベント信号に基づいてカウント開始信号及びカウント停止信号を形成する。つまり、特権モード遷移イベント信号がアサートされたタイミングに同期してカウント開始信号をアサートし、特権モード遷移イベント信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１１３でクロック信号のカウント動作が行われる。これにより、特権モード時間の測定が可能になる。
【００９４】
上記第２デバッグ専用カウンタ９０５−２において、カウンタ制御論理１２１は、比較器９０２から出力される割込みブロック信号に基づいてカウント開始信号及びカウント停止信号を形成する。つまり、割込みブロック信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１２３でクロック信号のカウント動作が行われる。これにより、割込み禁止時間の測定が可能になる。
【００９５】
上記第３デバッグ専用カウンタ９０５−３において、カウンタ制御論理１３１は、比較器９０２から出力される割込みマスクレベルオーバー信号又は割込みマスクレベルアンダー信号に基づいてカウント開始信号及びカウント停止信号を形成する。例えば指定された割込みマスクレベル以上で動作している時間を測定する場合には、割込みマスクレベルオーバー信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。また、指定された割込みマスクレベル以下で動作している時間を測定する場合には、割込みマスクレベルアンダー信号がアサートされたタイミングに同期してカウント開始信号をアサートし、割込みブロック信号がネゲートされたタイミングに同期してカウント停止信号をアサートする。カウント開始信号がアサートされてからカウント停止信号がアサートされるまでの期間にカウンタ１３３でクロック信号のカウント動作が行われる。ＣＰＵの機能としては完全な割込み禁止よりも、マスクレベルによる割込み制御が一般的である。このため、指定された割込みマスクレベル以上で動作している時間や、指定された割込みマスクレベル以下で動作している時間を測定することにより、割込み競合発生時に所望の割込みが実行されるまでの待ち時間が許容範囲内であるか否かを判定することができる。
【００９６】
（５）ホストシステム１１においては、タスク遷移グラフ１６１−１やパフォーマンス解析グラフ１６１−２が表示される。このようなグラフ表示において、ユーザは改善したいタスクを指示して、ユーザプログラムのコンパイルを再実行することができる。また、表示グラフ上からユーザタスクに不都合の原因が無いと判断した場合には、ＯＳやミドルウェア、割込みハンドラなどを改善すれば良いことが分かる。
【００９７】
次に、本発明にかかるソフトウェア開発支援装置１０における主要部の別の構成例について説明する。
【００９８】
一般にデバッグ用ソフトウェアには、レジスタウインドウや、メモリウインドウなどの表示機能がある。この機能は、ＣＰＵコアにおけるレジスタ状態（演算結果、変数値）やメモリの状態（スタック情報、演算データなど）を確認するために用いられる。
【００９９】
図１９にはレジスタウインドウの表示例が示される。このようなレジスタウインドウは、ブレークによりユーザプログラムの実行が中断された場合にのみ、ファームウェアによる読み出しが行われることで表示内容の更新が可能とされる。換言すれば、レジスタウインドウの表示内容の更新を行うには、ブレークによりユーザプログラムの実行を中断しなければならない。
【０１００】
そこで、ユーザプログラムの実行を停止しないで、ＣＰＵコア内のレジスタ情報の収集を行うには、以下のように構成すれば良い。
【０１０１】
図２０には、マイクロコンピュータ１４における主要部の別の構成例が示される。
【０１０２】
マイクロコンピュータ１４は、ＣＰＵコア３１とレジスタバンク２０１とを含む。ＣＰＵコア３１は、図３に示されるのと同様にＣＰＵ制御部３０１、レジスタファイル３０２、ＣＰＵ演算部３０３を含む。レジスタファイル３０２は、例えば図２に示されるように、汎用レジスタ群２０１、コントロールレジスタ２０２、システムレジスタ２０３を含む。上記レジスタバンク２０１は、ＦＩＬＯ（First In Last Out）メモリとされ、レジスタバンク２０１の保持情報を退避するために、汎用レジスタ退避エリア２０１−１、コントロールレジスタ退避エリア２０１−２、システムレジスタ退避エリア２０１−３が設けられる。レジスタファイル３０２とレジスタバンク２０１とは、レジスタバンク専用インタフェース２０２によって結合される。そこでこのレジスタバンク専用インタフェース２０２にデバッグ専用バス２０３を結合し、このデバッグ専用バス２０３を介して、レジスタファイル３０２の保持内容をデバッグ回路３３に取り込むようにする。レジスタファイル３０２の保持内容をデバッグ専用バス２０３へ出力する条件として、割込み又は例外処理の発生以外に、レジスタバンク操作命令の実行、サブルーチン分岐などの命令実行、デバッグ回路３３からの出力要求を挙げることができる。このようにすれば、レジスタファイル３０２の保持内容をデバッグ回路３３に取り込むのにアドレスバスＡＢＵＳやデータバスＤＢＵＳとは別の専用バス２０３を用いることにより、ユーザプログラムの実行を停止しないで、ＣＰＵコア３１内のレジスタ情報の収集を行うことができる。
【０１０３】
図２１には、マイクロコンピュータ１４における主要部の別の構成例が示される。
【０１０４】
図２１に示される構成が、図２０に示されるのと大きく相違するのは、レジスタバンク専用インタフェース２０２とは別のポートにデバッグ専用バス２０３を接続している点である。このようにしても、図２０に示される場合と同様の作用効果を奏する。また、図２１に示される構成では、レジスタバンクを２０１をバッファとして活用することができるので、図２０に示される構成に比べて、ＣＰＵコア３１側の論理実装を少なくすることができる。レジスタバンク２０１は、製品毎に仕様がカスタマイズされるため、効率良く機能拡張を行うことができる。
【０１０５】
図２２には、マイクロコンピュータ１４における主要部の別の構成例が示される。
【０１０６】
図２２に示される構成では、レジスタバンク２０１が設けられていない。この場合、レジスタファイル３０２にデバッグ専用バス２０３が直接結合される。レジスタファイル３０２に、レジスタバンクとの結合用のデータパス論理がある場合には、それを利用してデバッグ専用バス２０３を結合することができる。そのようなデータパス論理が存在しない場合には、デバッグ専用バス２０３との接続のためのデータパス論理をレジスタファイル３０２に設け、そのデータパス論理を介してデバッグ専用バス２０３を接続する。このようにしても、図２０等に示される場合と同様の作用効果を奏する。
【０１０７】
図２３には、マイクロコンピュータ１４における主要部の別の構成例が示される。
【０１０８】
図２０乃至図２２に示される構成によりデバッグ回路３３に取り込まれたレジスタ情報をエミュレータ１２に出力するには、デバッグ回路３３を次のように構成すると良い。
【０１０９】
すなわち、図２３に示されるように、デバッグ回路３３内に、ＡＵＤ（Advanced User Debugger）機能などの高速トレース出力インタフェース（Ｉ／Ｆ）２３１や、ＪＴＡＧ（Joint Test Action Group）インタフェースに含まれるＤＭＡ（Direct Memory Access）機能部２３２を設ける。ＡＵＤ機能などの高速トレース出力インタフェース２３１を利用する場合、トレース入力部９０７を介して取り込まれたレジスタ情報を、高速、且つ、可能な限り実時間に近い状態で、エミュレータ１２に送出することができる。このため、レジスタウインドウの更新頻度を高めることができる。
【０１１０】
これに対して、ＪＴＡＧインタフェースに含まれるＤＭＡ機能部２３２を利用する場合には、トレース入力部９０７を介して取り込まれたレジスタ情報をトレースメモリ９０９に書き込む必要がある。上記ＤＭＡ機能部２３２は、上記トレースメモリ９０９の記憶情報をＤＭＡ機能によりエミュレータ１２に送出する。
【０１１１】
上記のようにエミュレータ１２に伝達されたレジスタ情報は、ホストシステム１１に伝達され、レジスタウインドウの更新に利用される。
【０１１２】
また、実行トレースメモリとヒストリ機能の能力が高いデバッグシステムの場合、現在の停止位置から順に遡って逆実行（ステップ・バック実行）することができる。上記のようにエミュレータ１２に伝達されたレジスタ情報は、デバッガの逆実行に利用することができる。つまり、上記のようにエミュレータ１２に伝達されたレジスタ情報は、実デバイスから得た情報であるため、それをホストシステム１１に提供することにより、デバッガにおける逆実行の円滑化を図ることができる。
【０１１３】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【０１１４】
１０  ソフトウェア開発支援装置
１１  ホストシステム
１２  エミュレータ
１３  顧客システム
１４  マイクロコンピュータ
３１  ＣＰＵコア
３２  パイプライン同期化回路
３３  デバッグ回路
３５  専用パス
３０１  ＣＰＵ制御部
３０２  レジスタファイル
３０３  ＣＰＵ演算部
９０１  ＳＲ比較条件設定部
９０２  比較器
９０３  トレース機能用タイマ
９０４  ＬＳＩ／ＣＰＵ制御論理
９０５  デバッグ専用カウンタ
９０５−１  第１デバッグ専用カウンタ
９０５−２  第２デバッグ専用カウンタ
９０５−３  第３デバッグ専用カウンタ
９０６  トレース回路
９０７  トレース入力部
９０８  トレース出力部
９０９  トレースメモリ
１１１，１２１，１３１  カウンタ制御論理
１１２，１２２，１３２  制御レジスタ
１１３，１２３，１３３  カウンタ
１１４，１２４，１３４  カウンタクロック制御回路
１５１〜１５６  フリップフロップ回路
１６１  表示画面
１６１−１  タスク遷移グラフ
１６１−２  パフォーマンス解析グラフ
【図１】
2011028308.tif 000003
【図２】
2011028308.tif 000004
【図３】
2011028308.tif 000005
【図４】
2011028308.tif 000006
【図５】
2011028308.tif 000007
【図６】
2011028308.tif 000008
【図７】
2011028308.tif 000009
【図８】
2011028308.tif 000010
【図９】
2011028308.tif 000011
【図１０】
2011028308.tif 000012
【図１１】
2011028308.tif 000013
【図１２】
2011028308.tif 000014
【図１３】
2011028308.tif 000015
【図１４】
2011028308.tif 000016
【図１５】
2011028308.tif 000017
【図１６】
2011028308.tif 000018
【図１７】
2011028308.tif 000019
【図１８】
2011028308.tif 000020
【図１９】
2011028308.tif 000021
【図２０】
2011028308.tif 000022
【図２１】
2011028308.tif 000023
【図２２】
2011028308.tif 000024
【図２３】
2011028308.tif 000025