(57)【要約】【課題】本発明は、トレース機能を備えた組み込みＳｏＣにおいて、容量の少ないトレースメモリを用いて、より長時間のプログラムカウンタトレースを実現できるようにする。【解決手段】たとえば、ファンクションモジュール（１）３１，（２）３２の内部状態がアイドル状態であることが、信号線３１ａ，３２ａを介して、デバッグモジュール４０内のトレースメモリ制御部４２へ伝えられる。一方、トレースメモリ制御部４２は、トレースメモリ４３の空き領域を常に監視し、空き領域がなくなる前に、デバッグモジュール制御部４１に、プロセッサコア２０の動作を停止させるための指示を出す。このように、ファンクションモジュール（１）３１，（２）３２がアイドル状態の時に、プロセッサコア２０の動作を一時的に停止させ、トレースメモリ４３内に格納されているトレース情報を取り出した後に、プロセッサコア２０の動作を再開させる。【選択図】図１
2009048474.tif 000002
【特許請求の範囲】
【請求項１】
プログラムにしたがって動作する、少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサの動作履歴を格納すトレースメモリと、
前記少なくとも１つのプロセッサと連携して動作する、少なくとも１つのファンクションモジュールと、
前記少なくとも１つのファンクションモジュールの内部状態がアイドル状態であることを判断した場合に、前記少なくとも１つのプロセッサの動作を停止させるように指示するトレースメモリ制御部と、
前記トレースメモリ制御部からの指示にしたがって、前記少なくとも１つのプロセッサの動作を停止させるように制御するデバッグモジュール制御部と
を具備し、
前記トレースメモリ制御部は、前記少なくとも１つのプロセッサの動作が停止した後に、前記トレースメモリに格納されている情報を外部に出力させるとともに、前記トレースメモリに格納されている情報を外部に出力させた後に、再び、前記少なくとも１つのプロセッサの動作を再開させるように前記デバッグモジュール制御部に指示することを特徴とする半導体集積回路装置。
【請求項２】
前記少なくとも１つのファンクションモジュールは、状態遷移により内部状態が変化するハードウェアにより実装され、
前記少なくとも１つのファンクションモジュールと前記トレースメモリ制御部との間には、前記少なくとも１つのファンクションモジュールの内部状態がアイドル状態であることを示す信号が供給される信号線が接続されていることを特徴とする請求項１に記載の半導体集積回路装置。
【請求項３】
前記デバッグモジュール制御部は、前記少なくとも１つのプロセッサの動作を停止させるタイミングを、前記少なくとも１つのプロセッサが実行する前記プログラム上において、デバッガ割り込みにより指定できることを特徴とする請求項１に記載の半導体集積回路装置。
【請求項４】
プログラムにしたがって動作する、少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサの動作履歴を格納すトレースメモリと、
前記少なくとも１つのプロセッサと連携して動作する、少なくとも１つのファンクションモジュールと、
前記少なくとも１つのファンクションモジュールの内部状態がアイドル状態であることを判断した場合に、前記少なくとも１つのプロセッサの動作を停止させるように指示するトレースメモリ制御部と、
前記トレースメモリ制御部からの指示にしたがって、前記少なくとも１つのプロセッサの動作を停止させるように制御するデバッグモジュール制御部と
を具備し、
前記トレースメモリ制御部は、前記少なくとも１つのプロセッサの動作が停止した後に、前記トレースメモリに格納されている情報を外部に出力させるとともに、前記トレースメモリに格納されているすべての情報を外部に出力させた後に、再び、前記少なくとも１つのプロセッサの動作を再開させるように前記デバッグモジュール制御部に指示することを特徴とする半導体集積回路装置であって、
複数の半導体集積回路装置を協調させて稼動させるような場合、前記複数の半導体集積回路装置がそれぞれ備える、前記少なくとも１つのプロセッサの動作を停止させる時間を同じにするためのタイマが設けられることを特徴とする半導体集積回路装置。
【請求項５】
前記少なくとも１つのファンクションモジュールは、無線通信を行うための外部インタフェースを備えることを特徴とする請求項４に記載の半導体集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを備えた半導体集積回路装置に関するもので、たとえば、内蔵するトレースメモリにプロセッサの動作履歴を格納する機能（プログラムトレースもしくは分岐トレース）を実現するためのプログラムカウンタトレース機構を有するＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）に関する。
【背景技術】
【０００２】
従来、プロセッサが備えるプログラムカウンタの値をトレースする場合、プログラムトレースのための専用の端子からリアルタイムにトレース情報（カウンタ値）を出力させる。そして、そのトレース情報を外部に設けた装置で測定することにより、トレース機能が実現されている（たとえば、特許文献１参照）。
【０００３】
プログラムカウンタのトレース情報は、プログラムのデバッグまたは統計情報の取得などに用いられる。しかしながら、近年においては、プロセッサの高速化にともなってトレースクロックが高速化してしまう。そのために、この方法の場合、プログラムトレースのためのトレース情報を安定して出力させるのが困難になってきた。
【０００４】
この方法に代わるものとして、集積回路装置（ＬＳＩ）の内部にトレースメモリを設け、このメモリに格納されたトレース情報をオフラインで取り出す方法が用いられるようになってきた（たとえば、特許文献２参照）。
【０００５】
トレース情報は、可能な限り長時間にわたって取得したい。しかしながら、ＬＳＩの内部に設けられるトレースメモリには面積の制約により、配置できる容量（メモリサイズ）に限りがある。そのため、取得可能なトレース情報の量は限られてしまう。上記したプログラムトレースのためのトレース情報を外部に出力させる方法の場合、ハードディスクなどの大規模な記憶装置を用いることで、より長時間にわたってトレース情報を取得することが可能である。このように、トレースメモリを用いてトレース情報を取得する方法により取得可能なトレース情報の量は、外部にトレース情報を出力させる方法に比べて極端に少なくなってしまうという問題がある。
【０００６】
ＬＳＩの規模が大きくなり、信号処理の内容が複雑化する中で、トレース情報が少ないというのは非常に心許ない状況である。だが、プログラムトレースはデバッグに関連する機能であり、本来、ＬＳＩとして実装すべき所望の信号処理機能ではない。そのため、巨大なトレースメモリを設けることも現実的ではない。
【０００７】
そこで、格納されるトレース情報がトレースメモリの容量を超える前に定期的にプロセッサの動作を停止させ、トレース情報を取り出す。こうして、トレースメモリにトレース情報を格納するための空き領域を確保した状態で、再度、プロセッサを動作させる。このようにして、トレース機能を断続的に続行させることで、擬似的に長時間のプログラムカウンタトレースが可能になる。
【０００８】
しかしながら、不用意にプロセッサの動作を停止させると、プログラムの流れが変化してしまう可能性がある。プログラムの流れが変わってしまっては、そのときのトレース情報には意味がなくなってしまう。
【０００９】
特に、プロセッサを内蔵した組み込みＳｏＣの場合には、ハードウェアによって実装されている複数の機能（ファンクションモジュール）が設けられており、それぞれの機能がプロセッサと連携して動作する。このため、トレースメモリに格納されているトレース情報を読み出すために、プロセッサの動作を止めるタイミングを如何にして決めるかという課題がある。
【００１０】
さらに最近では、信号処理をマルチプロセッサで実現させるようになっており、この場合にも、プロセッサの動作を止めるタイミングをどのようにして決定するかという課題がある。
【００１１】
しかも、プログラムの流れが変化しないようにプロセッサの動作を停止させるためには、プロセッサが実行しているプログラムのどのコードで停止させるのが望ましいのかを知る必要がある。つまり、プログラムのどのインストラクションがアイドル状態に相当するのかを、トレースメモリの制御装置に知らせてやる必要がある。これを、どのようにして実現するのかという課題がある。
【００１２】
プログラムトレースもしくは分岐トレースのためのトレース情報は、プログラムのデバッグ作業において有用な情報である。そのため、複数のＳｏＣが協調して信号処理を行うような、このような構成で実行されるプログラムほど、より長時間のトレース情報を取得したいという要求が高い。複数のＳｏＣが協調して信号処理を行うような構成とは、たとえば無線通信機能を備えた信号処理ＳｏＣなどであり、この構成では、通信プロトコルにしたがったデータパケットをやり取りしながら信号処理が実現される。プログラムの流れは、お互いの信号処理の進捗状況に応じて変化する。このような構成においても、容量の少ないトレースメモリで、有効なプログラムトレースもしくは分岐トレースのためのトレース情報を取得するためには、どのようにして、プログラムの流れが変化しないようにプロセッサの動作を停止させるかという課題がある。
【００１３】
また、複数のＳｏＣが協調して信号処理を行うような構成においては、トレースメモリの内容を外部に出力させるためにプロセッサの動作を停止させたことによって、各ＳｏＣのプロセッサの動作時間が変わってしまってはならない。如何にして、各ＳｏＣのプロセッサの動作時間を等しくするかという課題もある。
【特許文献１】特開２００２−１６３１２７号公報
【特許文献２】特開２００６−１２０６６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は、上記の問題点を解決すべくなされたもので、プログラムの流れを変化させることなしにプロセッサの動作を停止させることができ、容量の少ないトレースメモリを用いて、より長時間のプログラムカウンタトレースが可能な半導体集積回路装置を提供することを目的としている。
【課題を解決するための手段】
【００１５】
本願発明の一態様によれば、プログラムにしたがって動作する、少なくとも１つのプロセッサと、前記少なくとも１つのプロセッサの動作履歴を格納すトレースメモリと、前記少なくとも１つのプロセッサと連携して動作する、少なくとも１つのファンクションモジュールと、前記少なくとも１つのファンクションモジュールの内部状態がアイドル状態であることを判断した場合に、前記少なくとも１つのプロセッサの動作を停止させるように指示するトレースメモリ制御部と、前記トレースメモリ制御部からの指示にしたがって、前記少なくとも１つのプロセッサの動作を停止させるように制御するデバッグモジュール制御部とを具備し、前記トレースメモリ制御部は、前記少なくとも１つのプロセッサの動作が停止した後に、前記トレースメモリに格納されている情報を外部に出力させるとともに、前記トレースメモリに格納されている情報を外部に出力させた後に、再び、前記少なくとも１つのプロセッサの動作を再開させるように前記デバッグモジュール制御部に指示することを特徴とする半導体集積回路装置が提供される。
【００１６】
また、本願発明の一態様によれば、プログラムにしたがって動作する、少なくとも１つのプロセッサと、前記少なくとも１つのプロセッサの動作履歴を格納すトレースメモリと、前記少なくとも１つのプロセッサと連携して動作する、少なくとも１つのファンクションモジュールと、前記少なくとも１つのファンクションモジュールの内部状態がアイドル状態であることを判断した場合に、前記少なくとも１つのプロセッサの動作を停止させるように指示するトレースメモリ制御部と、前記トレースメモリ制御部からの指示にしたがって、前記少なくとも１つのプロセッサの動作を停止させるように制御するデバッグモジュール制御部とを具備し、前記トレースメモリ制御部は、前記少なくとも１つのプロセッサの動作が停止した後に、前記トレースメモリに格納されている情報を外部に出力させるとともに、前記トレースメモリに格納されているすべての情報を外部に出力させた後に、再び、前記少なくとも１つのプロセッサの動作を再開させるように前記デバッグモジュール制御部に指示することを特徴とする半導体集積回路装置であって、複数の半導体集積回路装置を協調させて稼動させるような場合、前記複数の半導体集積回路装置がそれぞれ備える、前記少なくとも１つのプロセッサの動作を停止させる時間を同じにするためのタイマが設けられることを特徴とする半導体集積回路装置が提供される。
【発明の効果】
【００１７】
上記の構成により、プログラムの流れを変化させることなしにプロセッサの動作を停止させることができ、容量の少ないトレースメモリを用いて、より長時間のプログラムカウンタトレースが可能な半導体集積回路装置を提供できる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について図面を参照して説明する。ただし、図面は模式的なものであり、各図面の寸法および比率などは現実のものとは異なることに留意すべきである。また、図面の相互間においても、互いの寸法の関係および／または比率が異なる部分が含まれていることは勿論である。特に、以下に示すいくつかの実施の形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置などによって、本発明の技術思想が特定されるものではない。この発明の技術思想は、その要旨を逸脱しない範囲において、種々の変更を加えることができる。
【００１９】
［第１の実施形態］
図１は、本発明の第１の実施形態にしたがった半導体集積回路装置の構成例を示すものである。なお、ここでは、プロセッサが備えるプログラムカウンタのトレース機能を有した半導体集積回路装置として、プロセッサに加え、複数の機能（ファンクションモジュール）を内蔵した組み込みＳｏＣを例に説明する。
【００２０】
図１に示すように、この組み込みＳｏＣ１０は、少なくとも１つのプロセッサコア（単に、プロセッサとも称する）２０、少なくとも１つ（この例の場合、２つ）のファンクションモジュール（１）３１，（２）３２、デバッグモジュール４０、および、デバッグインタフェース５０を備えている。プロセッサコア２０およびファンクションモジュール（１）３１，（２）３２は、バス６０を介して、相互に接続されている。
【００２１】
便宜上、図１は、プログラムカウンタトレース機構の説明のために不可欠な構成要素だけを示したものであり、プロセッサの動作に必要なメモリなどは示していない。
【００２２】
プロセッサコア２０は、プロセッサコア制御部２１とトレース情報出力部２２とを有している。プロセッサコア制御部２１は、デバッグモジュール制御部４１からの指示にしたがって、プロセッサコア２０の挙動を制御する。トレース情報出力部２２は、プロセッサコア２０が備えるプログラムカウンタ（図示していない）の値を示すトレース情報を、デバッグモジュール４０内のトレースメモリ制御部４２に出力する。
【００２３】
ファンクションモジュール（１）３１，（２）３２は、あらかじめ定められた信号処理を実行するためのハードウェアである。ファンクションモジュール（１）３１，（２）３２は、プロセッサコア２０からの指示に応じて所定の信号処理を実行する。ファンクションモジュール（１）３１，（２）３２はハードウェアによって実現されているため、信号処理動作は状態遷移により変化する。たとえば、内部状態がアイドル状態にある場合、プロセッサコア２０からの指示（もしくは、外部からのトリガ）によって信号処理を開始する。信号処理の開始とともにビジー状態となり、信号処理が終わると再びアイドル状態に戻り、新たな信号処理開始の指示を受けるまでウェイトするようになっている。
【００２４】
なお、ファンクションモジュール（１）３１，（２）３２の例としては、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）などが挙げられる。ＤＭＡは、プロセッサコア２０からの動作開始の指示にしたがって動作する。
【００２５】
また、ファンクションモジュール（１）３１，（２）３２には、それぞれの内部状態を示す信号をデバッグモジュール４０内のトレースメモリ制御部４２へ伝達するための信号線３１ａ，３２ａが接続されている。こうすることによって、トレースメモリ制御部４２は、トレースメモリ４３の内容を出力させるためにプロセッサコア２０の動作を止めるのに適したタイミングを把握することができる。
【００２６】
デバッグモジュール４０は、デバッグモジュール制御部４１、トレースメモリ制御部４２、および、トレースメモリ４３を有している。トレースメモリ制御部４２は、プロセッサコア２０のインストラクションの実行にしたがって、トレース情報出力部２２から入力されたトレース情報をトレースメモリ４３内に順に格納する。さらに、トレースメモリ制御部４２は、トレースメモリ４３の空き領域を常に監視し、トレースメモリ４３の空き領域がなくなる前に、プロセッサコア２０の動作を停止させてトレースメモリ４３の内容を外部に出力させるように制御する。
【００２７】
トレースメモリ４３の空き領域が少なくなったことを判断するための方法としては、たとえば、使用済みの領域に関するしきい値を設けておき、空き領域がしきい値を超えたかどうかを判断することで実現できる。しきい値は、レジスタの設定などにより可変にできるようにしておき、このしきい値をデバッガ８０が設定できるようにしておくことで、種々の応用に即した最適化が可能となる。
【００２８】
ここで、プロセッサコア２０を動作させてから一度に取得可能なトレース情報は、組み込みＳｏＣ１０内に実装されるトレースメモリ４３の大きさ（メモリサイズ）に依存する。トレース情報は、一般に可能な限り多く取得したいという要求が高いが、組み込みＳｏＣ１０内に設けられるトレースメモリ４３の大きさは面積の制約などにより限界がある。このため、本実施形態のプログラムカウンタトレース機構では、プロセッサコア２０の動作を一時的に停止させ、その間にトレースメモリ４３の内容を外部に出力させた後、プロセッサコア２０の動作を再開させることで、擬似的に連続したプログラムカウンタトレースが可能なようにした。
【００２９】
トレースメモリ制御部４２は、プロセッサコア２０を停止させる場合およびトレースメモリ４３の内容を外部に出力させる場合には、その旨をデバッグモジュール制御部４１に指示する。
【００３０】
デバッグモジュール制御部４１は、プロセッサコア制御部２１およびデバッグインタフェース５０と接続されている。デバッグモジュール制御部４１は、デバッガ８０からの指示にしたがって、プロセッサコア２０のデバッグ作業のための制御を行う。
【００３１】
組み込みＳｏＣ１０の外部に設けられたデバッガ８０ではデバッガプログラム８１が実行されており、ユーザインタフェース（図示していない）を介して、処理命令が入力される。デバッガ８０は、デバッグプローブ９０およびデバッグインタフェース５０を介して、デバッグモジュール制御部４１と通信を行っている。
【００３２】
デバッグモジュール制御部４１は、トレースメモリ制御部４２からプロセッサコア２０を停止させる旨の指示を受けた場合に、プロセッサコア制御部２１にプロセッサコア２０の停止を指示する。その後、プロセッサコア２０が停止したことをトレースメモリ制御部４２およびデバッガ８０に伝達する。
【００３３】
また、デバッグモジュール制御部４１は、トレースメモリ制御部４２からトレースメモリ４３の内容を外部に出力させる旨の要求を受けた場合には、デバッガ８０に対して、トレースメモリ４３内のトレース情報を受け取るように指示を出す。さらに、トレースメモリ制御部４２に対して、トレースメモリ４３内のトレース情報の読み出しの開始を指示する。また、トレースメモリ４３の内容の出力が終了した場合には、デバッガ８０に対して、トレース情報の読み出しが終了したことを伝達する。
【００３４】
さらに、デバッグモジュール制御部４１は、トレースメモリ制御部４２からプロセッサコア２０の動作を開始する旨の要求を受けた場合に、プロセッサコア制御部２１にプロセッサコア２０の動作開始を指示する。その後、プロセッサコア２０の動作が開始したことを、トレースメモリ制御部４２に伝達する。
【００３５】
このように、トレースメモリ４３の容量を超える前に、プロセッサコア２０の動作を一時的に停止させ、トレース情報を外部に出力させる。そして、トレースメモリ４３内に空き領域を確保した状態で、再度、プロセッサコア２０を動作させてトレース機能を継続させることで、長時間のプログラムカウンタトレースが可能となる。
【００３６】
なお、プロセッサコア２０の動作を不用意に停止させると、プログラムの流れが変化してしまう可能性がある。本実施形態の場合、ハードウェアによって実現されるファンクションモジュール（１）３１，（２）３２の内部状態がアイドル状態であることを把握できる。これにより、たとえトレースメモリ４３の内容を外部に出力するために、プロセッサコア２０が動作を停止させている場合にも、その間に、他からのイベントの発生によってプログラムの流れが変化してしまうのを防ぐことが可能である。
【００３７】
したがって、本実施形態によれば、プログラムの流れを変化させることなしにプロセッサコア２０の動作を停止させることができ、容量の少ないトレースメモリ４３で、有効なプログラムカウンタトレース機構の実現が可能である。
【００３８】
［第２の実施形態］
図２は、本発明の第２の実施形態にしたがった半導体集積回路装置の動作を説明するために示すものである。なお、ここでは、図１に示した構成の組み込みＳｏＣを例に、デバッグモジュール制御部４１がプロセッサコア２０の動作を停止させようとした瞬間に、プロセッサコア２０がファンクションモジュール（１）３１，（２）３２の動作開始を指示してしまうような場合を想定して説明する。
【００３９】
すなわち、第１の実施形態においては、ファンクションモジュール（１）３１，（２）３２の内部状態がアイドル状態であるかどうかをもとに、トレースメモリ４３内のトレース情報を読み出すために、プロセッサコア２０の動作を停止させるようにした場合について説明してきた。しかしながら、プログラムの構成によっては、デバッグモジュール制御部４１がプロセッサコア２０の動作を停止させようとした瞬間に、プロセッサコア２０がハードウェアによって実現されるファンクションモジュール（１）３１，（２）３２の動作開始を指示してしまう可能性が生じる。
【００４０】
組み込みＳｏＣ１０では、大抵の場合、プロセッサコア２０がファンクションモジュール（１）３１，（２）３２を起動させる。そして、そのファンクションモジュール（１）３１，（２）３２の処理が終了するのに応じて、プロセッサコア２０は、処理の流れを分岐させたり、次の処理に移ったりしている。このため、プロセッサコア２０がファンクションモジュール（１）３１，（２）３２の動作開始を指示した後に、その動作を停止させようとすると、プログラムの流れが変化してしまう可能性がある。
【００４１】
以下に、この問題を回避することが可能な実施形態について説明する。つまり、トレースメモリ４３内のトレース情報を読み出すために、プロセッサコア２０の動作を停止させる場合、トレースメモリ制御部４２は、プロセッサコア２０の動作を停止させるのに適したタイミングを知る必要がある。適したタイミングとは、たとえばプロセッサコア２０が実行するプログラムにおいて、ファンクションモジュール（１）３１，（２）３２の動作開始を指示しないタイミングであり、プログラムがアイドルステートにある状態などを指す。
【００４２】
この適したタイミングをトレースメモリ制御部４２が知るためには、プロセッサコア２０上で動作するプログラムのどこのインストラクションが適しているのかを、トレースメモリ制御部４２に知らせてやる必要がある。そこで、デバッガ８０のブレークポイント設定の機能を利用する。デバッガ８０は、通常、ブレークポイントをユーザインタフェースから設定する機能を持っている。
【００４３】
図３は、デバッガ８０のブレークポイント設定の際のユーザインタフェースの一例を示すものである。
【００４４】
ユーザが、デバッガ８０のユーザインタフェース画面８０ａにおいて、プログラムコードの指定箇所をブレークポイントＢＰとして指定する。すると、デバッガ８０は、プロセッサコア２０が実行するプログラムにおいて、デバッグ例外を発生させる命令（デバッガ割り込み命令）をセットするように、デバッグモジュール制御部４１に指示する。デバッグ例外を発生させる機構は、プロセッサコア２０のアーキテクチャに依存する。
【００４５】
デバッグ例外が発生すると、プロセッサコア２０がデバッグモードに移行したことが、プロセッサコア制御部２１によって示される。これをデバッグモジュール制御部４１が読み取り、デバッガ８０が設定したブレークポイントＢＰによってデバッグモードに入ったことが判断されると、デバッガ８０に制御主体が移され、ブレークポイントＢＰの処理が行われる。
【００４６】
また、デバッグモジュール制御部４１は、トレースメモリ制御部４２からのトレースメモリ４３内のトレース情報を読み出すためにプロセッサコア２０の動作を停止させる要求があると、トレースメモリ４３内のトレース情報を読み出すためにプロセッサコア２０の動作を停止させるのに適したタイミングであるデバッグモードに入ったか否かを判断する。デバッグモードに入ったことが判断された場合に、デバッグモジュール制御部４１はトレースメモリ制御部４２を制御して、トレースメモリ４３内のトレース情報を読み出す処理を行う。
【００４７】
トレースメモリ４３内のトレース情報を読み出さない場合もしくは読み出しが終了した場合には、デバッグモジュール制御部４１は、デバッグモードを直ちに抜けるようにプロセッサコア制御部２１に指示し、プロセッサコア２０を通常モードに戻す。
【００４８】
トレースメモリ４３内からトレース情報を読み出すために、プロセッサコア２０の動作を停止させるのに適したタイミングかどうかを判断するには、たとえばデバッグモジュール制御部４１が、デバッグモードに入った時のプログラムカウンタの値を参照するなどにより実現できる。デバッグモードで提供される機能の実際は、プロセッサコア２０のアーキテクチャに依存するが、多くのプロセッサコア２０は、デバッグモードに入った時のプログラムカウンタの値を参照することができる。
【００４９】
このようにすることで、単に、容量の少ないトレースメモリ４３で、有効なプログラムカウンタトレース機構の実現が可能となるだけでなく、適したタイミングで、プロセッサコア２０の動作を停止させることが可能となる。すなわち、トレースメモリ制御部４２およびデバッグモジュール制御部４１は、たとえば図２に示したフローにしたがって常に処理を実行することにより、プログラムカウンタトレースのためのトレース情報を取得することが可能となる。しかも、プロセッサコア２０が実行しているプログラムのどのコードでプロセッサコア２０の動作を停止させることが望ましいのかを把握できるため、プログラムの流れが変化しないように制御することが可能となる。したがって、プロセッサコア２０の動作を一時的に停止させて、トレースメモリ４３の容量を超える前にトレース情報を取り出し、トレースメモリ４３に空き領域ができた状態でトレースを再開させることにより、長時間のプログラムカウンタトレースが可能となる。
【００５０】
［第３の実施形態］
図４は、本発明の第３の実施形態にしたがった半導体集積回路装置の構成例を示すものである。ここでは、プロセッサが備えるプログラムカウンタのトレース機能を有した半導体集積回路装置として、複数（この例の場合、２つ）のプロセッサコアが実装された組み込みＳｏＣを例に説明する。なお、図１に示した組み込みＳｏＣ１０と同一部分には同一符号を付して、詳しい説明は割愛する。
【００５１】
図４に示すように、この組み込みＳｏＣ１０’は、少なくとも２つのプロセッサコア（１）２０ａ，（２）２０ｂを有している。デバッグモジュール４０’のデバッグモジュール制御部４１は、２つのプロセッサコア制御部２１ａ，２１ｂと接続されており、それぞれのプロセッサコア（１）２０ａ，（２）２０ｂのデバッグのための制御を行う。
【００５２】
また、それぞれのプロセッサコア（１）２０ａ，（２）２０ｂのトレース情報出力部２２ａ，２２ｂから出力されるトレース情報は、デバッグモジュール４０’のトレースメモリ制御部４２に入力される。
【００５３】
トレースメモリ制御部４２は、プロセッサコア（１）２０ａ，（２）２０ｂのそれぞれのインストラクションの実行にしたがって、各トレース情報出力部２２ａ，２２ｂから入力されたトレース情報を、デバッグモジュール４０’のトレースメモリ４３ａ，４３ｂにそれぞれ順に格納する。トレースメモリ制御部４２は、それぞれのトレースメモリ４３ａ，４３ｂの空き領域を常に監視し、トレースメモリ４３ａ，４３ｂの空き領域がなくなる前に、対応するプロセッサコア（１）２０ａ，（２）２０ｂの動作を停止させてトレースメモリ４３ａ，４３ｂの内容を外部に出力させるように制御する。
【００５４】
なお、トレースメモリ４３ａ，４３ｂの内容を外部に出力する手順については、上述と同様であるので、ここでの説明は割愛する。
【００５５】
このような構成とした場合においても、プログラムの流れを変化させることなしにプロセッサコア（１）２０ａ，（２）２０ｂの動作を停止させることができ、容量の少ないトレースメモリ４３ａ，４３ｂで、有効なプログラムカウンタトレース機構の実現が可能である。
【００５６】
特に、プロセッサコア（１）２０ａ，（２）２０ｂが実行しているプログラムのどのコードでプロセッサコア（１）２０ａ，（２）２０ｂの動作を停止させることが望ましいのかを把握できるようにした場合には、より適したタイミングで、プロセッサコア（１）２０ａ，（２）２０ｂの動作を停止させることが可能となる。
【００５７】
なお、プロセッサコア（１）２０ａ，（２）２０ｂの個数は２つに限定されるものではなく、３つ以上とした場合にも同様に適用できる。
【００５８】
［第４の実施形態］
図５は、本発明の第４の実施形態にしたがった半導体集積回路装置の構成例を示すものである。ここでは、プロセッサが備えるプログラムカウンタのトレース機能を有した半導体集積回路装置として、複数（この例の場合、２つ）の組み込みＳｏＣが協調して信号処理を行うように構成した場合を例に説明する。なお、図１に示した組み込みＳｏＣ１０と同一部分には同一符号を付して、詳しい説明は割愛する。
【００５９】
たとえば、ファンクションモジュールを内蔵した組み込みＳｏＣにおける信号処理では、近年、マルチプロセッサにより処理を実現させるようになってきている。さらに、複数の組み込みＳｏＣが協調して信号処理を行うような構成も多く存在している。複数の組み込みＳｏＣが協調して信号処理を行う構成としては、たとえば、無線通信機能を備えた信号処理ＳｏＣなどが挙げられる。無線通信機能を備えた信号処理ＳｏＣの場合、通信プロトコルにしたがったデータパケットをやり取りしながら、互いのＳｏＣが連携して信号処理を実施するようになっている。
【００６０】
プログラムカウンタトレースに関しては、このような複数のＳｏＣが連携して動作する環境下において動作するプログラムの場合ほど、長時間にわたってトレース情報を取得したいという要望が高く、実現が望まれている。つまり、複数のＳｏＣが協調して信号処理を行う場合のプログラムの流れは、お互いのＳｏＣでの信号処理状況に応じて多様に変化する。そのため、長時間にわたってトレース情報を取得することが、デバッグの観点からも有効となる。これを実現するためには、プログラムの流れが変化しないタイミングで、プロセッサの動作を一時的に停止させ、トレースメモリ内のトレース情報を読み出すための処理を、複数のＳｏＣが協調して実行する必要がある。
【００６１】
図５に示すように、組み込みＳｏＣ（１）１０ａ，（２）１０ｂは、それぞれ、プロセッサが備えるプログラムカウンタのトレース機能を有するとともに、少なくともハードウェアによって実現されるファンクションモジュール（１）１３１ａ，（１）１３１ａを有している。また、本実施形態の場合、ファンクションモジュール（１）１３１ａ，（１）１３１ａには、それぞれ、無線通信を行うための外部インタフェース１３１ｂ，１３１ｂが設けられている。
【００６２】
なお、本図には示していないが、各組み込みＳｏＣ（１）１０ａ，（２）１０ｂにおいて、ファンクションモジュール（１）１３１ａ，（１）１３１ａとトレースメモリ制御部との間には、それぞれ、ファンクションモジュール（１）１３１ａ，（１）１３１ａの内部状態を通知するための信号線が接続されている。
【００６３】
図６は、図５に示した組み込みＳｏＣ（１）１０ａ，（２）１０ｂの構成例を示すものである。なお、組み込みＳｏＣ（１）１０ａ，（２）１０ｂは同様の構成であるため、ここでは組み込みＳｏＣ（１）１０ａを参照して説明する。また、図１に示した組み込みＳｏＣ１０と同一部分には同一符号を付して、詳しい説明は割愛する。
【００６４】
図６に示すように、組み込みＳｏＣ（１）１０ａは、少なくとも１つのプロセッサコア２０、少なくとも１つ（この例の場合、２つ）のファンクションモジュール（１）１３１ａ，（２）３２、デバッグモジュール４０ａ、および、デバッグインタフェース５０を備えている。プロセッサコア２０およびファンクションモジュール（１）１３１ａ，（２）３２は、バス６０を介して、相互に接続されている。
【００６５】
本実施形態の場合、先に説明した通り、たとえば、ファンクションモジュール（１）１３１ａは、組み込みＳｏＣ（２）１０ｂのファンクションモジュール（１）１３１ａとの間で、無線通信を行うための外部インタフェース１３１ｂを有している。また、ファンクションモジュール（１）１３１ａ，（２）３２とトレースメモリ制御部４２との間には、それぞれ、信号線３１ａ，３２ａが接続されている。
【００６６】
トレースメモリ制御部４２は、プロセッサコア２０のインストラクションの実行にしたがって、トレース情報出力部２２から入力されたトレース情報をトレースメモリ４３内に順に格納する。さらに、トレースメモリ制御部４２は、トレースメモリ４３の空き領域を常に監視し、トレースメモリ４３の空き領域がなくなる前に、プロセッサコア２０の動作を停止させてトレースメモリ４３の内容を外部に出力させるように制御する。
【００６７】
デバッグモジュール制御部４１は、プロセッサコア制御部２１およびデバッグインタフェース５０と接続されている。デバッグモジュール制御部４１は、デバッガ８０からの指示にしたがって、プロセッサコア２０のデバッグ作業のための制御を行う。
【００６８】
たとえば、デバッグモジュール制御部４１は、トレースメモリ制御部４２からプロセッサコア２０を停止させる旨の指示を受けた場合に、プロセッサコア制御部２１にプロセッサコア２０の停止を指示する。その後、プロセッサコア２０が停止したことをトレースメモリ制御部４２およびデバッガ８０に伝達する。
【００６９】
また、デバッグモジュール制御部４１は、トレースメモリ制御部４２からトレースメモリ４３の内容を外部に出力させる旨の要求を受けた場合には、デバッガ８０に対して、トレースメモリ４３内のトレース情報を受け取るように指示を出す。さらに、トレースメモリ制御部４２に対して、トレースメモリ４３内のトレース情報の読み出しの開始を指示する。また、トレースメモリ４３の内容の出力が終了した場合には、デバッガ８０に対して、トレース情報の読み出しが終了したことを伝達する。
【００７０】
さらに、デバッグモジュール制御部４１は、トレースメモリ制御部４２からプロセッサコア２０の動作を開始する旨の要求を受けた場合に、プロセッサコア制御部２１にプロセッサコア２０の動作開始を指示する。その後、プロセッサコア２０の動作が開始したことを、トレースメモリ制御部４２に伝達する。
【００７１】
その他の構成要素に関しては、たとえば図１に示した通りであり、ここでの詳細な説明は割愛する。ただし、本実施形態の場合、デバッガ８０が統括している組み込みＳｏＣ（１）１０ａ，（２）１０ｂは２つであり、デバッガ８０を介して、各組み込みＳｏＣ（１）１０ａ，（２）１０ｂにプロセッサコア２０の動作を停止させるように指示を出すため、プロセッサコア２０の動作を停止させるタイミングには僅かではあるが時間差が生じる。そのため、デバッグモジュール制御部４０ａには、プロセッサコア２０の停止期間を制御するための専用のタイマ４４が設けられている。
【００７２】
タイマ４４は、トレースメモリ制御部４２によって管理され、トレースメモリ４３の内容を出力させるためのデバッグモードに入るのと同時にスタートさせられる。このタイマ４４が所定値になった時点で、プロセッサコア２０をデバッグモードから抜けさせて、通常の動作に復帰させる。タイマ４４の所定値としては、トレースメモリ４３の内容を出力させるのに十分な時間に多少の余裕を与えるための時間を加えた時間が設定される。
【００７３】
以下に、複数のＳｏＣが協調して動作する場合の、プログラムカウンタトレース機構について説明する。
【００７４】
図７は、組み込みＳｏＣ（１）１０ａ，（２）１０ｂが協調して動作している場合を例に、トレースメモリ制御部４２およびデバッグモジュール制御部４１が実行する処理の流れを説明するために示すものである。
【００７５】
たとえば、トレースメモリ制御部４２およびデバッグモジュール制御部４１は、プログラムカウンタのトレース情報を取得するモードにて、プロセッサコア２０の動作を開始させる。その後、トレースメモリ制御部４２は、トレースメモリ４３の空き領域があらかじめ設定したしきい値を超えているかどうかを監視する。もし、超えている場合、もしくは、デバッガ８０からトレースメモリ４３内のトレース情報の読み出しを指示された場合には、次の処理に進む。ここでのデバッガ８０からトレース情報の読み出しを指示された場合とは、他方の組み込みＳｏＣにおいて、トレースメモリ４３の読み出しイベントが発生した場合を指す。
【００７６】
また、トレースメモリ制御部４２およびデバッグモジュール制御部４１は、すべてのファンクションモジュール（１）１３１ａ，（２）３２の内部状態を監視する。そして、すべてのファンクションモジュール（１）１３１ａ，（２）３２の内部状態がアイドル状態となった場合、次の処理に進む。なお、すべてのファンクションモジュール（１）１３１ａ，（２）３２の内部状態がアイドル状態となる前に、トレースメモリ４３の空き領域がなくなった場合、もしくは、デバッガ８０からトレースメモリ４３内のトレース情報の読み出しを指示された場合には、トレースメモリ４３内のトレース情報を読み出すための処理に進む。
【００７７】
すべてのファンクションモジュール（１）１３１ａ，（２）３２の内部状態がアイドル状態となった後、トレースメモリ制御部４２およびデバッグモジュール制御部４１は、トレースメモリ４３内のトレース情報を読み出すためにプロセッサコア２０の動作を停止させてもよいタイミングかどうかを判断する。プロセッサコア２０の動作を停止させてもよいタイミングの場合には、トレースメモリ４３内のトレース情報を読み出すための処理に進む。
【００７８】
なお、すべてのファンクションモジュール（１）１３１ａ，（２）３２の内部状態がアイドル状態となる前に、トレースメモリ４３の空き領域がなくなった場合、もしくは、デバッガ８０からトレースメモリ４３内のトレース情報の読み出しを指示された場合にも、トレースメモリ４３内のトレース情報を読み出すための処理に進む。
【００７９】
一方、トレースメモリ制御部４２は、プロセッサコア２０がトレースメモリ４３の内容を出力させるためのデバッグモードに入った時に、タイマ４４をスタートさせる。このタイマ４４が所定値になった時点、つまり、所定の時間を経過した後に、プロセッサコア２０をデバッグモードから抜けさせ、通常の動作に復帰させる。
【００８０】
図８は、２つの組み込みＳｏＣ（１）１０ａ，（２）１０ｂにおける各プロセッサコア２０の動作状況の一例を示すものである。同図において、斜線の箇所がプロセッサコア２０の稼動期間であり、その他の箇所（矢印で示す区間ａ１，ａ２，ｂ１，ｂ２）がトレースメモリ４３の内容を出力させるための期間である。
【００８１】
たとえば、組み込みＳｏＣ（１）１０ａにおいて、トレースメモリ４３の読み出しイベントが発生し、これが組み込みＳｏＣ（１）１０ａからデバッガ８０に伝えられたとする。すると、デバッガ８０は、組み込みＳｏＣ（２）１０ｂにトレースメモリ４３の内容を出力するように指示する。これにより、組み込みＳｏＣ（２）１０ｂのプロセッサコア２０の動作が停止させられる。
【００８２】
デバッガ８０を介して、他方のプロセッサコア２０の停止処理がなされるため、組み込みＳｏＣ（１）１０ａと組み込みＳｏＣ（２）１０ｂとで、プロセッサコア２０の動作を停止させるタイミング（停止時間）が微妙にずれる（α）。
【００８３】
トレースメモリ４３の内容を出力させるための期間（デバッグモード）は、それぞれの組み込みＳｏＣ（１）１０ａ，（２）１０ｂに設けられたタイマ４４によって時間が管理されている。このため、各組み込みＳｏＣ（１）１０ａ，（２）１０ｂのプロセッサコア２０の停止時間を、常に同じ（ａ１＝ａ２＝ｂ１＝ｂ２）にすることができる。
【００８４】
本実施形態によれば、複数の組み込みＳｏＣが協調して信号処理を行うような構成においても、複数の組み込みＳｏＣのプロセッサコア２０の稼動時間を同じにすることができる。
【００８５】
当然のことながら、プログラムカウンタトレースの過程、つまり、プロセッサコア２０の動作を止め、トレースメモリ４３の内容を出力させ、プロセッサコア２０を復帰させる過程において、プロセッサコア２０の能力が異なってはならない。
【００８６】
なお、本実施形態の構成では、デバッガを介して、他方の組み込みＳｏＣのプロセッサコアの動作を停止させるようにしている。そのため、先に動作を開始した一方の組み込みＳｏＣから、プロセッサコアが停止している他方の組み込みＳｏＣに対して、処理開始のトリガが出力されてしまう場合が懸念される。しかしながら、他方の組み込みＳｏＣのプロセッサコアを停止させるために要する時間が、ファンクションモジュールが動作開始のトリガを受けてから、所定の信号処理の結果を出力するまでの時間よりも短ければ、このような心配は無用である。
【００８７】
また、複数の組み込みＳｏＣが協調して信号処理を行うような構成においては、組み込みＳｏＣは図６に示した構成に限らず、たとえば、プロセッサコアの動作をプログラムの流れが変化しないようなタイミングで停止させるようにしてなる構成（第２の実施形態参照）、もしくは、複数のプロセッサコアが実装されてなる構成（第３の実施形態参照）とすることも可能である。
【００８８】
上記したように、プロセッサの動作を一時的に停止させ、トレースメモリの容量を超える前にトレース情報を取り出し、トレースメモリに空き領域を確保した状態で、再度、トレースを行うようにしている。これにより、容量の少ないトレースメモリで、有効なプログラムトレース機能もしくは分岐トレース機能を実現できるなど、長時間のプログラムカウンタトレースが可能となる。
【００８９】
特に、プロセッサの動作を停止させる場合において、単一のプロセッサで動作する構成の場合には、任意の時点でプロセッサの動作のみを停止させるようにすればよい。
【００９０】
ハードウェアにより実装されているファンクションモジュールがプロセッサと連携して動作する構成の場合には、ファンクションモジュールと連携させてプロセッサの動作を停止させるようにすればよい。
【００９１】
また、プロセッサが実行しているプログラムのどのコードで停止させることが望ましいのかを把握するようにした場合には、プログラムの流れを変化させることなしにプロセッサの動作を停止させることが可能となる。
【００９２】
しかも、トレースメモリの空き領域がなくなり、強制的にトレースメモリの内容を出力させるような処理が行われた場合に、それをデバッガに知らせるようにしておけば、ユーザに停止する箇所（ブレークポイント）を増やしたり、変更したりすることを促すことが可能となる。
【００９３】
さらに、信号処理をマルチプロセッサで実現する構成の場合には、プロセッサ間を同期させて動作を停止させるようにすればよい。
【００９４】
なお、上記した各実施形態においては、いずれもハードウェアにより実装されるファンクションモジュールの個数を２つとした場合を例に説明したが、これに限らず、たとえば１つであってもよいし、３つ以上でもよく、その個数に制限されるものではない。
【００９５】
その他、本願発明は、上記（各）実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記（各）実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。たとえば、（各）実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題（の少なくとも１つ）が解決でき、発明の効果の欄で述べられている効果（の少なくとも１つ）が得られる場合には、その構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【００９６】
【図１】本発明の第１の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の構成例を示すブロック図。
【図２】本発明の第２の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の、デバッグモード時の動作を説明するために示すフローチャート。
【図３】第２の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の、ブレークポイント設定の際のユーザインタフェースの一例を示す図。
【図４】本発明の第３の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の構成例を示すブロック図。
【図５】本発明の第４の実施形態にしたがった、複数の半導体集積回路装置（組み込みＳｏＣ）が協調して動作するように構成した場合を例に示すブロック図。
【図６】第４の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の構成例を示すブロック図。
【図７】第４の実施形態にしたがった半導体集積回路装置（組み込みＳｏＣ）の、デバッグモード時の動作を説明するために示すフローチャート。
【図８】第４の実施形態にしたがった、２つの組み込みＳｏＣを例に各プロセッサコアの動作の一例を示す図。
【符号の説明】
【００９７】
１０，１０’，１０ａ，１０ｂ…組み込みＳｏＣ、２０，２０ａ，２０ｂ…プロセッサコア、２１，２１ａ，２１ｂ…プロセッサコア制御部、２２，２２ａ，２２ｂ…トレース情報出力部、３１，３２，１３１ａ…ファンクションモジュール、３１ａ，３２ａ…信号線、４０，４０’，４０ａ…デバッグモジュール、４１…デバッグモジュール制御部、４２…トレースメモリ制御部、４３，４３ａ，４３ｂ…トレースメモリ、４４…タイマ。
【図１】
2009048474.tif 000003
【図２】
2009048474.tif 000004
【図３】
2009048474.tif 000005
【図４】
2009048474.tif 000006
【図５】
2009048474.tif 000007
【図６】
2009048474.tif 000008
【図７】
2009048474.tif 000009
【図８】
2009048474.tif 000010