(57)【要約】【課題】選択器により一方のバスからのデータしかトレースできないシステムでは、２系統のバスに並列アクセスがあった時、設定と実行を繰り返し行う必要があり、プログラム開発者にとってデバッグ効率を逆に下げる要因となった。【解決手段】プログラムメモリ(402)とデータメモリ(403)とに並列アクセスがあり、この時のデータがいずれも復元できない時、現ステージでは、プログラムメモリのバス(410,411)のデータのみをトレースし、データメモリのバス(420,421)のデータは記憶装置(407,408)に格納する。次のステージは、単発のアクセスなので、このときの復元可能なデータはトレースせず、替りに、前記記憶装置(407,408)で格納していたデータをトレースする。【選択図】  図４
2004206425.tif 000002
【特許請求の範囲】
【請求項１】
半導体装置として構成された２つの同期バスを備えたパイプライン処理を行うプロセッサのトレース装置において、
同一チップの半導体装置上に第１及び第２の記憶装置を備え、
２つのバスの内、一方が動作する時は、第１の記憶装置へトレースデータを転送し、
双方のバスが動作する時は、一方のトレースデータを第１の記憶装置へ、他方のトレースデータを第２の記憶装置に転送し、
第２の記憶装置に格納されたデータは、定められた規則に従い、以降の別サイクルで第１の記憶装置に転送され、
第１の記憶装置に格納された双方のバスに対するトレースデータは、当該半導体装置の外部のプログラム開発支援装置に導かれ、
前述の定められた規則に従い、第２の記憶装置を経由したデータのために消失したデータの復元を行い、それぞれのバスのトレースデータとしてデバッグに供されることを特徴とするトレース装置。
【請求項２】
上記２つの同期バスは、プログラムメモリバスとデータメモリバスであり、これらのバスへのアクセスとして、
プログラムフェッチのみのサイクルでは、第１の記憶装置に格納するトレースデータを、プログラムメモリバスのデータおよびプロセッサステータスデータとし、
プログラムフェッチでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装置に格納するデータを、データメモリバスのデータおよびプロセッサステータスデータとし、
プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装置に格納するトレースデータを、プログラムメモリバスデータおよびプロセッサステータスデータとし、第２の記憶装置に格納するデータを、データメモリバスデータおよびプロセッサステータスデータとし、
第２の記憶装置に格納されたデータは、次のサイクルで優先的にトレースデータとすることを特徴とし、
かつ、プロセッサ開発支援装置に導かれた第１の記憶装置に格納されていない消失データの復元は、導かれた第１の記憶装置に格納されたデータおよび実行プログラムからのメモリアドレス、プロセッサステータスにより、パイプライン処理で想定されるプログラムフェッチアドレスからの連続性、異なるメモリへの連続したデータアクセス検出から、プログラム開発支援装置でのソフトウエアによる復元処理を用い、消失したプログラムフェッチアドレスおよびデータ、ステータスの復元、異なるサイクルに格納されたデータの適正サイクルへの復元を行い、リアルタイムトレース結果とすることを特徴とする請求項１記載のトレース装置。
【請求項３】
上記アクセスでの状況判別は、プロセッサから出力されるプログラムフェッチ信号、プログラムメモリデータアクセス信号、データメモリデータアクセス信号とし、プログラムフェッチのみ、プログラムフェッチでかつデータメモリへのデータアクセス、プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスの判別は、これらの信号による判別装置により生成される判別信号を用い、かつ、上記第１の記憶装置への格納データは、プログラムメモリバスデータ、データメモリバスデータ、第２の記憶装置に格納されたデータメモリバスデータを入力データとする選択装置からの選択データとし、その選択装置の選択制御信号は、前記判別装置により生成される判別信号および、判別信号を毎サイクル記憶する記憶装置から出力される判別記憶信号を用いることを特徴とするトレース装置。
【請求項４】
請求項１〜３のいずれかに記載の第１の記憶装置を半導体装置の外部に持つ半導体装置において、
請求項１〜３のいずれかに記載のトレースデータを、前記第１の記憶装置に格納する手段を有し、前記第１の記憶装置に格納されたデータは、請求項１〜３のいずれかに記載の復元処理により、リアルタイムトレース結果の取得を可能とすることを特徴とする半導体装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム開発支援装置に有用となるトレース装置に関する。
【０００２】
【従来の技術】
プログラム開発においては、プログラム開発支援装置およびデバッガを用いて、プログラムの実行履歴（トレース）を元にデバッグを行うことが一般的なデバッグ手法となっている。トレース情報としては、プログラムアドレスやプログラムデータ、プロセッサステータス、その他内部バス情報等を取得しており、その情報量が多くなるとデバッグ効率が上がることになる。
【０００３】
そこで多くのデータを取得するための従来例を以下に示す。なお、ここではプログラムメモリ、データメモリ、プロセッサステータスのデータ取得をトレース対象とする。
【０００４】
図１は、半導体装置100の内部にトレースメモリ170を備えた従来例を示す。プロセッサ101は、プログラムメモリ制御信号112およびデータメモリ制御信号122により、プログラムメモリ102およびデータメモリ103が制御され、プログラムメモリ102のアドレスバス110及びデータバス111、データメモリ103のアドレスバス120及びデータバス121、プロセッサステータス信号ライン130の各データ110D,111D,120D,121D,130Dを、内蔵のトレースメモリ170に格納しておき、その格納したバス情報をプログラム開発支援装置180に転送し、そのプログラム開発支援装置180にてリアルタイムにトレース結果を取得している。
【０００５】
この技術では、半導体装置100内のトレースメモリ170に、プログラムメモリ用、データメモリ用、プロセッサステータス用の記憶領域を備えることで、取得したい全てのデータを１回の実行でトレースメモリ170に格納することが可能となっている。さらに、トレースデータ取得終了後に低速で外部のプログラム開発支援装置にトレースデータをシリアルデータ等で転送することが可能となり、半導体装置が高速に動作する場合であってもリアルタイムでのトレースか保証される。
【０００６】
図２は、半導体装置200の外部のプログラム開発支援装置280側に、トレースメモリ270を備えた従来例を示す。この図２の半導体装置200内のプロセッサ201、プログラムメモリ202、…は、図１の半導体装置100内のプロセッサ101、プログラムメモリ102、…にそれぞれ対応し、以下の図面においても同様に参照番号を付している。
【０００７】
図２の例では、プログラムメモリ202のアドレスバス210、データバス211、データメモリ203のアドレスバス220、データバス221、プロセッサステータス信号ライン230の各バス上のデータ210D,211D,220D,221D,230Dを半導体装置200から出力して外部のプログラム開発支援装置280側のトレースメモリ270へ格納し、そのプログラム開発支援装置280にてリアルタイムにトレース結果を取得する。
【０００８】
この図２では、半導体装置200からプログラムメモリ202のデータ、データメモリ203のデータ、プロセッサステータス信号を出力し、外部のプログラム開発支援装置280に搭載されるトレースメモリ270に格納することで、取得したい全てのデータを１回の実行でトレースメモリ270に格納することができ、さらに、トレースメモリ270を半導体装置200の外部に配置していることから、半導体装置200のコストを抑えることが可能となる。
【０００９】
しかしながら、図１、図２で示した技術ではそれぞれ問題がある。図１の技術では、取得したいデータごとにトレースメモリ170に記憶領域を備えているため、大容量のものが必要となり、チップサイズの増加によるコスト増となる。
【００１０】
図２の技術では、トレースしたいデータを信号として外部に出力していることから、端子数の増加によるパッケージコストの増加や、半導体装置200内のプロセッサ201が高速で動作する場合、外部のプログラム支援装置280のトレースメモリ270に対して、リアルタイムにデータを転送することが困難になり、リアルタイムのトレースできない可能性がある。
【００１１】
そこで、この様な問題点を解決するものとして以下の技術がある。
【００１２】
トレースメモリに格納すべきトレースデータを時分割に選択的に出力するセレクタを設け、選択されたデータをトレースメモリに格納している(例えば特許文献１参照)。
【００１３】
内部バス情報を選択的に出力するセレクタを設け、選択されたデータをトレースメモリに格納している(例えば特許文献２)。
【００１４】
複数種の内部バス情報を選択的に出力するセレクタを設け、選択したデータを同一の端子から外部へ出力する(例えば特許文献３参照)。
【００１５】
【特許文献１】
特開平11-306040「エミュレータのトレース装置」（請求項１、図１）
【特許文献２】
特開2000-332205「プロセッサ内蔵の半導体装置」（段落[0049]、図３）
【特許文献３】
特開2002-149442「データプロセッサ」（段落[0032]、図１）
【００１６】
図３にそれらの技術を適用した半導体装置300を示す。この例では、プログラムメモリ302のアドレスバス310とデータメモリ303のアドレスバス320、プログラムメモリ302のデータバス311とデータメモリ303のデータバス321を、選択信号340に従ってそれぞれ選択器350、351で選択している。その選択したデータ361,362と、プロセッサステータ信号ライン330のデータ330Dとを、半導体装置300の内蔵のトレースメモリ370へ格納し、外部のプログラム開発支援装置380にその格納データを転送し、プログラム開発支援装置380にてリアルタイムのトレース結果を取得している。
【００１７】
この技術では選択するデータを増やすことで、内蔵するトレースメモリ370のサイズを極力抑えることが可能となり、従来技術の問題点であったトレースメモリによるコスト増を回避することができる。
【００１８】
また、選択信号340には、所望のデータを選択するために設定値を供給する技術や、イベント制御によりプログラム以外のデータを優先させる様な、時系列に沿った動的な切り替え技術を持たせることができる。
【００１９】
また、図３では示していないが、特許文献３によれば、同様なトレースデータ選択技術で、トレースメモリを半導体装置外部に配置している場合でも、外部に出力させる信号を選択して出力させることにより、トレース用端子の数を抑えることが可能となっている。
【００２０】
【発明が解決しようとする課題】
しかしながら、図３で示した技術でもやはり問題が残る。プロセッサ301において、DSP（Digital Signal Processor）などの、同期バスによる異なるメモリ（例えばプログラムメモリ302とデータメモリ303）に対してデータアクセスを並列に実行すること及び、演算実行とメモリアクセス（データメモリ）を並列に実行することが可能となっているプロセッサを使用している場合、メモリに対しての並列データアクセスでのプログラムメモリアクセス履歴と、データメモリアクセス履歴をトレースデータとして取得するためには、実行が同一サイクルであることから、図３の技術では設定と実行を少なくとも２回行う必要がある。
【００２１】
この様に同一サイクルで並列に実行されるメモリアクセスのトレースデータを取得するためには、設定と実行を繰り返し行う必要があり、このことは、プログラム開発者にとってデバッグ効率を逆に下げる要因となった。
【００２２】
本発明は、上述した課題を解決するためになされたものであり、複数のメモリに対するトレースデータ取得のための設定と実行の繰り返し回数を軽減し、プログラム開発者のデバッグ効率を向上させることが可能となる技術を提供することを目的とする。
【００２３】
【課題を解決するための手段】
本発明では同一サイクルで並列に実行されるメモリアクセスのトレースデータを、サイクルを分けてトレースデータとし、プログラム開発支援装置上で、トレースデータおよび実行プログラムから本来のサイクルに再配置したリアルタイムトレースデータとして復元させることを特徴とする。
【００２４】
さらに、演算実行とデータメモリアクセスが並列に実行させる場合、トレースメモリに格納されるデータをデータメモリバスのデータとし、プログラム開発支援装置上で、トレースデータおよび実行プログラムから消失したフェッチデータを復元することを特徴とする。
【００２５】
請求項１の発明は、半導体装置として構成された２つの同期バスを備えたパイプライン処理を行うプロセッサの実行履歴取得（トレース）において、
同一チップの半導体装置上に第１および第２の２つの記憶装置を備え、
２つのバスの内、一方が動作する場合は、第１の記憶装置へトレースデータを転送し、
２つのバスの内、双方が動作する場合は、一方を第１の記憶装置へ、他方を第２の記憶装置に転送し、第２の記憶装置に格納されたデータは、定められた規則に従い、以降の別サイクルで第１の記憶装置へと転送され、第１の記憶装置に格納された双方のバスのトレースデータは、前述の半導体装置の外部のプログラム開発支援装置に導かれ、上記定められた規則に従い第２の記憶装置を経由したデータのために消失したデータの復元を行い、それぞれのバスのトレースデータとしてデバッグに供されることを特徴とする。
【００２６】
請求項２の発明は、請求項１に記載の２つの同期バスが、プログラムメモリバス、データメモリバスであり、そのアクセスとして、
プログラムフェッチのみのサイクルでは、第１の記憶装置に格納するトレースデータをプログラムメモリバスのデータおよびプロセッサステータスデータとし、
プログラムフェッチでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装置に格納するデータをデータメモリバスのデータおよびプロセッサステータスデータとし、
プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装置に格納するトレースデータを、プログラムメモリバスデータおよびプロセッサステータスデータとし、
第２の記憶装置に格納するデータを、データメモリバスデータおよびプロセッサステータスデータとし、第２の記憶装置に格納されたデータは、次のサイクルで優先的にトレースデータとすることを特徴とする。
【００２７】
また、請求項１に記載のプロセッサ開発支援装置に導かれた第１の記憶装置に格納されていない消失データの復元は、
導かれた第１の記憶装置に格納されたデータおよび実行プログラムからのメモリアドレス、プロセッサステータスにより、パイプライン処理で想定されるプログラムフェッチアドレスからの連続性、異なるメモリへの連続したデータアクセス検出から、プログラム開発支援装置でのソフトウエアによる復元処理を用い、消失したプログラムフェッチアドレスおよびデータ、ステータスの復元、異なるサイクルに格納されたデータの適正サイクルへの復元を行い、リアルタイムトレース結果とすることを特徴とする。
【００２８】
請求項３の発明は、請求項２に記載のアクセスの状況判別は、プロセッサから出力されるプログラムフェッチ信号、プログラムメモリデータアクセス信号、データメモリデータアクセス信号とし、
プログラムフェッチのみ、プログラムフェッチでかつデータメモリへのデータアクセス、プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスの判別は、これらの信号による判別装置により生成される判別信号を使用することを特徴とし、
請求項２に記載の、第１の記憶装置への格納データは、プログラムメモリバスデータ、データメモリバスデータ、第２の記憶装置に格納されたデータメモリバスデータを入力データとする選択装置からの選択データとし、その選択装置の選択制御信号は、先述の判別装置により生成される判別信号および、判別信号を毎サイクル記憶する記憶装置から出力される判別記憶信号を使用することを特徴とする。
【００２９】
請求項４の発明は、請求項１〜３のいずれかに記載の第１の記憶装置を半導体装置の外部に持つ半導体装置において、
請求項１〜３のいずれかに記載のトレースデータを、前記第１の記憶装置に格納する手段を有し、前記第１の記憶装置に格納されたデータは、請求項１〜３のいずれかに記載の復元処理により、リアルタイムトレース結果の取得を可能とすることを特徴とする。
【００３０】
【発明の実施の形態】
本発明の半導体装置では、プログラムメモリのバスおよびデータメモリのバスの２つの同期バスを備えたパイプライン処理を行うものを想定しているため、図１の半導体装置100をパイプライン処理の面から更に述べる。
【００３１】
プロセッサ101は、プログラムメモリ102に対してアドレスバス110を通じてプログラムアドレスを出力し、プログラムメモリ102に格納されているプログラムコードをデータバス111を介してプログラムフェッチ動作を行う。フェッチされたプログラムコードは、デコード、実行、ライトバックのパイプライン処理動作により命令を処理する。
【００３２】
また、プログラムメモリ102に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、アドレスバス110を通じてメモリアドレスを出力し、プログラムメモリ102からのデータリード動作を行う。リードデータは、データバス111を介して行われ、ライトバックフェーズでリードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００３３】
また、データメモリ103に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、アドレスバス120でアドレスを送出し、データメモリ103からのデータリード動作を行う。リードデータは、データバス121を介して行われ、ライトバックフェーズで、リードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００３４】
またプロセッサ101が出力するプログラムメモリ102へのアドレスが、プログラムフェッチのためのアドレスか、データアクセスのためのアドレスかは、プロセッサ101のプロセッサステータス信号ライン130から把握できる。
【００３５】
また、データメモリ103へのアクセスについてもプロセッサ101から出力されるプロセッサステータス信号ライン130から把握できる。
【００３６】
以上のことから、図１の技術では、プログラムメモリ102のアドレスバス110及びデータバス111、データメモリ103のアドレスバス120及びデータバス121、プロセッサステータス信号ライン130よりの各データ110D,111D,120D,121D,130Dをトレースデータを並列にアクセスした場合でも、１回の実行でプログラムメモリ102とデータメモリ103とプロセッサステータスの実行履歴を一度に取得が可能であった。但し既述したように内蔵のトレースメモリ170に大容量を必要とした。
【００３７】
次に図３の半導体装置300についてもパイプライン処理の面から更に述べる。
プロセッサ301は、プログラムメモリ302に対してアドレスバス310にアドレスを出力し、プログラムメモリ302に格納されているプログラムコードをデータバス311を介してプログラムフェッチ動作を行う。フェッチされたプログラムコードは、デコード、実行、ライトバックのパイプライン処理動作により命令を処理する。
【００３８】
また、プログラムメモリ302に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、アドレスバス310でアドレスを出力し、プログラムメモリ302からのデータリード動作を行う。リードデータは、データバス311を介して行われ、ライトバックフェーズで、リードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００３９】
また、データメモリ303に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、アドレスバス320でアドレスを出力し、データメモリ303からのデータリード動作を行う。リードデータは、データメモリ303のデータバス321を介して行われ、ライトバックフェーズで、リードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００４０】
またプロセッサ301が出力するプログラムメモリ302へのアドレスが、プログラムフェッチのためのアドレスか、データアクセスのためのアドレスかは、プロセッサ301より出力されるプロセッサステータス信号ライン330のデータ（トレースデータ）360により把握できる。また、データメモリ303へのアクセスについてもプロセッサ301から出力されるプロセッサステータス信号ライン330のデータ360から把握できる。
【００４１】
各メモリのバスデータは、選択器350でアドレスを、選択器351でデータを選択出力させ、その選択信号を340とし、選択信号340の状態にもとづき、メモリに関するトレースデータとして出力させ、トレースデータ（アドレス）361、トレースデータ（データ）362とすることができる。
【００４２】
しかし図３の技術では、先にも述べたように、同一サイクルで並列にメモリアクセス（データアクセス）を行った場合の両メモリのトレースデータを取得するには、選択器350の設定をプログラムメモリ側とデータメモリ側の２回の設定と実行が必要となった。
【００４３】
以下、本発明を実施の形態に基づいて説明する。図４に本実施の形態による半導体装置400を示す。この半導体装置400において、401,402,403,…480の各デバイスは、図３の半導体装置300における301,302,303,…380の各デバイスに対応する。
【００４４】
図３に対し新たに追加されたデバイスとしては、プロセッサステータス信号ライン430のデータを記憶する記憶装置406と、データメモリ403のアドレスバス420のアドレスを記憶する記憶装置407と、データメモリ403のデータバス421のデータを記憶する記憶装置408と、プロセッサステータス信号ライン430よりのデータか記憶装置406よりの記憶データ450かを選択してトレースデータ(プロセッサステータス)460を出力する選択器489と、プロセッサステータス信号ライン430から選択信号440、判別信号442を生成する判別装置404と、判別装置404からの判別信号442を記憶して選択信号441を生成する判別記憶装置405とがある。
【００４５】
また、選択器490は、プログラムメモリ402のアドレスバス410のアドレス、データメモリ403のアドレスバス420のアドレス、記憶装置407よりの記憶データ451のいずれかを選択してトレースデータ(メモリアドレス)461を出力し、選択器491は、プログラムメモリ402のデータバス411のデータ、データメモリ403のデータバス421のデータ、記憶装置408よりの記憶データ452のいずれかを選択してトレースデータ(メモリデータ)462を出力する。
【００４６】
次に図４の半導体装置400におけるパイプライン処理のプロセッサ動作およびトレースデータ取得について以下説明する。
【００４７】
プロセッサ401は、プログラムメモリ402に対してアドレスバス410を通じてアドレスを出力し、プログラムメモリ402に格納されているプログラムコードをデータバス411を介して取り込み、プログラムフェッチ動作を行う。フェッチされたプログラムコードは、デコード、実行、ライトバックのパイプライン処理動作により命令を処理する。
【００４８】
また、プログラムメモリ402に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、プログラムメモリ402のアドレスバス410にアドレスを出力し、プログラムメモリ402からデータリード動作を行う。リードデータは、プログラムメモリ402のデータバス411を介して行われ、ライトバックフェーズで、リードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００４９】
また、データメモリ403に対してデータアクセスを行う場合は、データアクセス命令（例えばデータリード）をフェッチし、デコードし、実行フェーズでアドレスを生成し、アドレスバス420を介してアドレスを送出し、データメモリ403からのデータリード動作を行う。リードデータは、データバス421を介して行われ、ライトバックフェーズで、リードしたデータを例えばプロセッサ内のレジスタに書き込む。
【００５０】
またプロセッサ401が出力するプログラムメモリ402へのアドレスがプログラムフェッチのためのアドレスか、データアクセスのためのアドレスかは、プロセッサ401のプロセッサステータス信号ライン430から把握できる。また、データメモリ403へのアクセスについてもプロセッサステータス信号ライン430から把握できる。
【００５１】
トレースデータについては、判別装置404はプロセッサステータス信号ライン430から選択信号440を生成し、判別記憶装置405は判別装置404からの判別信号442を記憶し、選択信号441を生成する。この選択信号440、441の状態により、選択器489では、プロセッサステータス信号ライン430からのデータか、記憶装置406で記憶されたプロセッサステータスデータ450かを選択してトレースメモリ470への格納データ460を出力する。
【００５２】
選択器490では、プログラムメモリ402のアドレスバス410のデータか、データメモリ403のアドレスバス420のデータか、記憶装置407で記憶されたアドレス451のいずれかを選択してトレースメモリ470に格納データ461を供給する。
【００５３】
選択器491では、プログラムメモリ402のデータバス411のデータか、データメモリ403のデータバス421のデータか、記憶装置408で記憶されたデータ452かを選択出力し、トレースメモリ470への格納データ462を供給する。トレースメモリ470に格納されたデータはプログラム開発支援装置480に転送され、実行プログラムとのソフトウエア処理で、リアルタイムでトレースデータを生成する。
【００５４】
図６、図７、図８のタイムチャートは、図１、図３の従来技術と図４の本発明に対し、以下の様なプログラムを実行した場合のトレースデータの取得の様子を示している。
命令 Ｇ（メモリアクセスを含まない命令）
命令 Ｈ（メモリアクセスを含まない命令）
命令 Ａ（メモリアクセスを含まない命令）
命令 Ｂ（プログラムメモリリード命令）
命令 Ｃ（データメモリリード命令）
命令 Ｄ（プログラムメモリリード／データメモリリードの並列命令）
命令 Ｅ（メモリアクセスを含まない／データメモリリード命令）
命令 Ｆ（メモリアクセスを含まない命令）
命令 Ｇ（メモリアクセスを含まない命令）
命令 Ｈ（メモリアクセスを含まない命令）
【００５５】
左欄ある番号は、図１、３、４で示した信号線やバスラインの番号に対応する。また、図６〜８中の
ｂ  は命令Ｂからのプログラムメモリアクセスアドレス、
ｃ’は命令Ｃからのデータメモリアクセスアドレス、
ｄ  は命令Ｄからのプログラムメモリアクセスアドレス、
ｄ’は命令Ｄからのデータメモリアクセスアドレス、
ｅ’は命令Ｅからのデータメモリアクセスアドレスを表す。
【００５６】
図６において、プロセッサステータス信号ライン130の状態として、プログラムフェッチ(プログラムメモリへのプログラム取得)、プログラムメモリデータアクセス(プログラムメモリへのデータアクセスのこと)、データメモリアクセス(データメモリへのアクセスのこと)の３つの信号を示し、これらについては“Ｈ”/“Ｌ”と“１”/“０”とでそれぞれ示した（“Ｈ”,“１”がアクティブ）。そして、プロセッサステータス信号ライン130を、それらの３つの信号順に３ビットにして示している。図７、図８でも同様である。
【００５７】
図６では、取得すべきすべてのデータを格納できるトレースメモリ570を備えていることから、ステージ番号８でプログラムメモリ302へのプログラムフェッチおよびデータメモリ303へのデータアクセスが並列にあった場合、トレースデータ(110D,111D)、トレースデータ(120D,121D)、トレースデータ(130D)として、それぞれ、[Ｅ]、[ｃ']、[101]のごとく消失することなく、かつサイクルのずれ無く取得できている。並列アクセスがあったステージ番号９および１１においても同様である。
【００５８】
図７では、データメモリへのアクセスを優先して取得する様に、図３の選択信号340を動的に変える設定を行った時の動作を示している。トレースデータを調べると、ステージ番号８でプロセッサステータス信号ライン330により、プログラムメモリ302へのプログラムフェッチと、データメモリ303へのアクセスが並列にあったために、データメモリへのアクセスを優先して取得している場合には、フェッチデータの命令Ｅがトレースされずに消失していることになる。
【００５９】
この時のプロセッサステータス（トレースデータ）はプログラムフェッチとデータメモリアクセスのステートであり、その前後のサイクルで命令Ｄと命令Ｆがあることから、プログラム開発支援装置380においてステージ番号８で消失したデータが、フェッチデータで命令Ｅであることが図７からも推測できる。同様に、ステージ番号１１でも、フェッチデータで命令Ｇが消失している。
【００６０】
ステージ番号９についてもプロセッサステータス信号ライン330より、プログラムメモリ302およびデータメモリ303への並列アクセスがあり、このときも何らかのデータが消失していることが推察される。この時のプロセッサステータス（トレースデータ）はプログラムメモリへのデータアクセスと、データメモリへのアクセスのステートであることから、消失したデータはプログラムメモリアクセスデータであることがわかる。
【００６１】
しかし、この消失データはプログラムの前後からは必ずしも推測できるとは限らない。例えばロード命令であった場合、取得したトレース結果以前に推測が困難な演算結果がプログラムメモリに格納されているならば、そのデータを推測することは困難となり、図３のようにトレースデータを選択する半導体装置300では、消失データの復元はできないことになる。
【００６２】
次に図８のタイムチャートに基づき本発明の動作を詳しく述べる。プロセッサ401から出力されるプロセッサステータスデータ430は、本実施例では簡略してプログラムフェッチ、プログラムメモリデータアクセス、データメモリデータアクセス(図８ではいずれも“(430)”にて示す)を示す３ビットの信号としている。これらの信号は、判別装置404を用いて２ビット化した判別信号442として出力する。
【００６３】
表１はプロセッサステータス信号ライン430が示す上記３つの信号と２ビットの判別信号442との関係を示している。２ビットが示す意味は表１で示している通り、上位ビットはプログラムメモリとデータメモリヘの並列アクセスの場合を「1」とし、それ以外の場合を「0」で示し、下位ビットはデータメモリアクセスのみの場合を「1」とし、それ以外の場合を「0」で示すように回路化している。
【００６４】
【表１】
2004206425.tif 000003
【００６５】
この判別信号442は判別記憶装置405でプロセッサの毎サイクルごとに記憶、更新され、その下位ビットは選択信号440として出力される。信号441は判別信号4421の上位ビットを示している。図８中の選択信号(441,440)は、選択信号(441)と選択信号(440)をマージしたものを表しており、この選択信号が供給される選択器409,410,411の動作を説明する。
【００６６】
選択信号(441,440)＝(0,0)の場合、選択器489は、プロセッサステータス信号ライン430からトレースデータ460を出力し、選択器490はプログラムメモリ402のアドレスバス410からトレースデータ461を選択出力し、選択器491はプログラムメモリ402のデータバス411からトレースデータ462を選択出力する。
【００６７】
選択信号(441,440)＝(0,1)の場合、選択器489は、プロセッサステータ信号ライン430からトレースデータ460を出力し、選択器490はデータメモリ403のアドレスバス420からトレースデータ461を選択出力し、選択器491はデータメモリ403のデータバス421からトレースデータ462として選択出力する。
【００６８】
選択信号(441,440)＝(1,0)の場合、選択器489は、プロセッサステータス信号ライン430から記憶装置406で記憶したデータ450をトレースデータ460として選択出力し、選択器490は、データメモリ403のアドレスバス420から記憶装置407で記憶したアドレス451をトレースデータ461として選択出力し、選択器491は、データメモリ403のデータバス421から記憶装置408で記憶したデータ452をトレースデータ462として選択出力する。
【００６９】
選択信号(441,440)が(0,0)、(0,1)、(1,0)の場合に選択される信号の流れを図９、図１０、図１１にそれぞれ示した。
【００７０】
ここから、例として挙げているプログラムの処理を元に説明する。ステージ番号１〜７(選択信号＝0,0)までは、プログラムメモリ402のバス410、411のみ使用していることから、そのバス上のデータのみをトレースデータとして用い、プロセッサステータスについては、そのステージに対応するステータスデータをトレースデータとすることにより、アドレス、データ、ステータスの各トレースデータが取得でき、この時の選択器489,490,491への選択信号(441,440)が(0,0)であることから、これらのデータが出力される。
【００７１】
ステージ番号８においては、プログラムメモリ402へのプログラムフェッチおよびデータメモリ403へのデータアクセスの並列アクセスが発生している。プログラムメモリ402のバスは命令Ｅのフェッチデータで、データメモリ403のバスは、命令Ｃによるデータメモリアクセスデータｃ'でそれぞれ使用されている。
【００７２】
この場合では、先の図７の説明で示したとおり、トレースデータ上で消失しても再現できるデータである命令Ｅのフェッチデータはトレースデータとせず、データメモリアクセスｃ'のデータをトレースデータとし、プロセッサステータについては、そのステージに対応するステータスデータをトレースデータとすることにより、データメモリ403に対するアドレス及びデータと、ステータスの各トレースデータが取得でき、この時の選択器489,490,491への選択信号(441,440)が(0,1)であることから、これらのデータが出力される。
【００７３】
なお、この時のプロセッサステータスのトレースデータは、プログラムフェッチ/データメモリアクセスを示すことから、プログラム開発支援装置480により、このサイクルではプログラムフェッチも同時に行なわれ、命令Ｄまでフェッチされていることから、消失したデータは命令Ｅのフェッチデータであると推測できる。
【００７４】
ステージ番号９においては、プログラムメモリ402のバス410、411は、命令Ｄによるプログラムメモリアクセスデータｄで、データメモリ403のバス420、421は命令Ｄによるデータメモリアクセスデータｄ'でそれぞれ使用されている。この場合、どちらのバスデータもトレースデータ上で消失すると再現できないデータである。
【００７５】
本発明では、両方のデータを消失すること無くトレースデータ上に載せることをその目的としており、その実現のために本実施形態では、次のステージ(ステージ番号１０)では、続いて並列アクセスは発生せず、そして単発のアクセスにより、プログラムメモリバス上には、復元可能な命令Ｆよるプログラムフェッチデータが必ず載ることに着目し以下のようにしている。
【００７６】
ステージ番号９ではプログラムメモリアクセスデータｄのみをトレースする。そして、ステージ番号１０では、プログラムメモリバス上には、推測可能なデータＦが載っているため、それをトレースせずに、ステージ番号９で出力された、データメモリアクセスデータｄ'をトレースするために、ステージ番号９にて記憶装置407、408でそれぞれ記憶したアドレス451およびデータ452(図８では、一時記憶データメモリバス(451,452)にあるｄ')を取り込んでいる。
【００７７】
このように、ステージ番号９では選択信号(441,440)は(O,O)であることから、プログラムメモリバスデータがトレースデータとなり、プロセッサステータスはそのステージに対応するステータスデータをトレースデータしている。そして次のステージ番号１０では、ステージ番号９でのデータメモリへのアクセスデータを記憶したデータメモリアクセスデータを選択してトレースデータとしている、この時の選択信号(441,440)の内441は選択信号442を判別記憶装置405により１サイクル遅らせた信号を用いていることで、選択信号(441,440)は(1,0)となり、ステージ番号９のデータメモリ403のバスデータを記憶している記憶装置407,408のデータメモリ403のバスデータを選択している。
【００７８】
またプロセッサステータスについても同様に、記憶装置406で記憶したステージ番号９でのステータスデータをステージ番号１０でのトレースデータとすることで、今トレースデータとしている内容を把握することができるので、サイクルのずれているトレースデータに対しても、プロセッサステータスとトレースデータの相関から、その前後のサイクルの動作を把握できる。
【００７９】
整理すると、ステージ番号９のトレースデータは、プログラムメモリ403のバスデータとプロセッサステータスとしては、プログラムメモリのデータアクセス／データメモリのデータアクセスを示すことになる。またステージ番号１０のトレースデータは、データメモリ403のバスデータとプロセッサステータスとしては、プログラムメモリのデータアクセス/データメモリのデータアクセスを示すことになる。このことから連続した並列メモリアクセスを示すステータスデータを元に、プログラム開発支援装置により、消失したトレースデータ(この場合ではステージ番号１０の命令Ｆのフェッチデータ)を推測することが可能である。
【００８０】
ステージ番号１１ではステージ番号８と同様であり、ステージ番号１２ではステージ番号１〜７と同様の処理により、トレースデータを取得できる。以上のことから図１の技術と同様のリアルタイムトレース結果を、本発明では少ないトレースメモリ容量で取得することが可能であり、図３の技術では復元できないリアルタイムトレースデータを、本発明では同等のトレースメモリ容量でも復元することを可能としている。
【００８１】
また、図５に示した様なトレースメモリを半導体装置の外部に配置している場合においても、図８の説明と同じく、リアルタイムトレースデータの復元が可能である。
【００８２】
【発明の効果】
請求項１の発明は、２つのバスの内、一方が動作する時は、第１の記憶装置へトレースデータを転送し、双方が動作する時は、一方のデータを第１の記憶装置へ、他方のデータを第２の記憶装置に転送し、第２の記憶装置に格納したデータは、別サイクルで第１の記憶装置に転送し、第１の記憶装置に格納した双方のバスに対するデータをトレースデータとしたので、そのトレースデータを格納するトレースメモリのサイズを低減でき、トレース用の端子数も最小限にでき、かつ、並列アクセスがあった場合にも、デバッグのための実行回数を増やすことなく行え、プログラム開発にかかる時間を抑えることができる。
【００８３】
請求項２の発明は、  ２つの同期バスが、プログラムメモリバスとデータメモリバスであり、これらのバスへのアクセスとして、プログラムフェッチのみのサイクルでは、第１の記憶装置に格納するトレースデータを、プログラムメモリバスのデータおよびプロセッサステータスデータとし、プログラムフェッチでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装置に格納するデータを、データメモリバスのデータおよびプロセッサステータスデータとし、プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスのサイクルでは、第１の記憶装に格納するトレースデータを、プログラムメモリバスデータおよびプロセッサステータスデータとし、第２の記憶装置に格納するデータを、データメモリバスデータおよびプロセッサステータスデータとし、第２の記憶装置に格納されたデータは、次のサイクルで優先的にトレースデータとし、かつ、プロセッサ開発支援装置に導かれた第１の記憶装置に格納されていない消失データの復元は、導かれた第１の記憶装置に格納されたデータおよび実行プログラムからのメモリアドレス、プロセッサステータスにより、パイプライン処理で想定されるプログラムフェッチアドレスからの連続性、異なるメモリへの連続したデータアクセス検出から、プログラム開発支援装置でのソフトウエアによる復元処理を用い、消失したプログラムフェッチアドレスおよびデータ、ステータスの復元、異なるサイクルに格納されたデータの適正サイクルへの復元を行い、リアルタイムトレース結果としたので、対象となるアクセスバスと同数のトレースメモリを必要とせず、トレースメモリの本数を抑えたみとによるリアルタイム性を失ったトレースメモリの結果においても、プログラム開発支援装置により正確なリアルタイムトレース結果を取得できる。
【００８４】
請求項３の発明は、請求項２でのアクセスの状況判別は、プロセッサから出力されるプログラムフェッチ信号、プログラムメモリデータアクセス信号、データメモリデータアクセス信号とし、プログラムフェッチのみ、プログラムフェッチでかつデータメモリへのデータアクセス、プログラムメモリへのデータアクセスでかつデータメモリへのデータアクセスの判別は、これらの信号による判別装置により生成される判別信号を用い、請求項２に記載の第１の記憶装置への格納データは、プログラムメモリバスデータ、データメモリバスデータ、第２の記憶装置に格納されたデータメモリバスデータを入力データとする選択装置からの選択データとし、その選択装置の選択制御信号は、先述の判別装置により生成される判別信号および、判別信号を毎サイクル記憶する記憶装置から出力される判別記憶信号を使用していることから、消失したトレースデータやサイクルがずれているトレースデータに対しても、プロセッサステータスとトレースデータの相関から、その前後のサイクルの動作状況を把握することが可能となる。
【００８５】
請求項４の発明は、請求項１〜３のいずれかに記載の第１の記憶装置を半導体装置の外部に持つ半導体装置において、請求項１〜３のいずれかに記載のトレースデータを、前記第１の記憶装置に格納する手段を有し、前記第１の記憶装置に格納されたデータは、請求項１〜３のいずれかに記載の復元処理により、リアルタイムトレース結果の取得を可能としたものであり、トレースメモリ内蔵によるコスト増加を無くし、必要とされるトレース用端子数の増加を抑えることが可能となる。また、所望のトレース結果の取得に当たり、デバッグのための実行回数を減らせ、プログラム開発にかかる時間を抑えることが可能となる。
【図面の簡単な説明】
【図１】トレースメモリを内蔵した半導体装置の概略構成図
【図２】外部にトレースメモリを接続するタイプの半導体装置の概略構成図
【図３】公報に開示された半導体装置の概略構成図
【図４】トレースメモリを内蔵した本発明に係わる半導体装置の概略構成図
【図５】本発明に係わる別の半導体装置の概略構成図
【図６】図１の半導体装置でのデータトレースを示したタイムチャート
【図７】図３の半導体装置でのデータトレースを示したタイムチャート
【図８】図４の半導体装置でのデータトレースを示したタイムチャート
【図９】図４における選択信号が(0,0)の場合に選択される信号の流れを示した図
【図１０】図４における選択信号が(0,1)の場合に選択される信号の流れを示した図
【図１１】図４における選択信号が(1,0)の場合に選択される信号の流れを示した図
【符号の説明】
４００  半導体装置
４０１  プロセッサ
４０２  プログラムメモリ
４０３  データメモリ
４０４  判別装置
４０５  判別記憶装置
４０６  記憶装置
４０７  記憶装置
４０８  記憶装置
４８９  選択器
４９０  選択器
４９１  選択器
４７０  トレースメモリ
４８０  プログラム開発支援装置
【図１】
2004206425.tif 000004
【図２】
2004206425.tif 000005
【図３】
2004206425.tif 000006
【図４】
2004206425.tif 000007
【図５】
2004206425.tif 000008
【図６】
2004206425.tif 000009
【図７】
2004206425.tif 000010
【図８】
2004206425.tif 000011
【図９】
2004206425.tif 000012
【図１０】
2004206425.tif 000013
【図１１】
2004206425.tif 000014