(57)【要約】【課題】  複数のＣＰＵコアを有する半導体装置におけるデバッグ効率を向上させ、それを用いたシステムの開発期間を短縮する。【解決手段】  本発明の半導体装置１１は、プログラムに基づいて命令を実行するＣＰＵ−ＡおよびＣＰＵ−Ｂと、共有メモリ１２に接続される共有バス１３およびＣＰＵ−Ａ、ＣＰＵ−ＢにローカルバスＡ、Ｂを介してそれぞれ接続され、ＣＰＵ−ＡおよびＣＰＵ−Ｂからのアクセス要求を受信して当該アクセス要求に基づいて共有メモリ１２へのアクセスを制御する共有メモリコントローラ１４と、共有メモリコントローラ１４が共有バス１３を介して行った共有メモリ１２へのアクセス履歴をＣＰＵ−ＡまたはＣＰＵ−Ｂからのアクセス要求ごとにアクセス情報１６として生成するデータアクセス監視回路１５を有する。【選択図】  図１
2006318412.tif 000002
【特許請求の範囲】
【請求項１】
プログラムに基づいて命令を実行する複数のＣＰＵと、
共有メモリに接続される共有バスおよび複数の前記ＣＰＵにローカルバスを介して接続され、前記複数のＣＰＵからのアクセス要求を受信して当該アクセス要求に基づいて前記共有メモリへのアクセスを制御する共有メモリ制御手段と、
前記共有メモリ制御手段が前記共有バスを介して行った前記共有メモリへのアクセス履歴を前記ＣＰＵからのアクセス要求ごとにアクセス情報として生成するデータアクセス監視手段を有することを特徴とする半導体装置。
【請求項２】
前記アクセス情報は、前記共有メモリへの書き込みまたは前記共有メモリからの読み出しを示すアクセスコードと、
前記共有メモリへのアクセスを要求した前記ＣＰＵを示すＣＰＵコードと、
アクセスされた前記共有メモリの実効アドレスと、
前記共有メモリに書き込まれたデータまたは前記共有メモリから読み出されたデータを有することを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記データアクセス監視手段によって生成された前記アクセス情報を一時記憶し、外部からのクロック信号に同期して前記一時記憶されたアクセス情報を出力するアクセス情報出力手段をさらに有することを特徴とする請求項１に記載の半導体装置。
【請求項４】
前記複数のＣＰＵは、前記命令のサイクル時間が互いに異なることを特徴とする請求項１に記載の半導体装置。
【請求項５】
前記ＣＰＵが前記ローカルバスを介して行った前記命令の実行履歴を前記ＣＰＵごとにトレース情報として生成する実行トレース手段をさらに有することを特徴とする請求項１に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリへのアクセス履歴生成機能を備えた半導体装置に関する。
【背景技術】
【０００２】
従来、ＣＰＵコアを内蔵した半導体装置のデバッグでは、組み込まれたサポートユニットから出力されるメモリ空間へのアクセス履歴をトレース情報として解析する方法（例えば、特許文献１を参照。）が利用されていた。サポートユニットは、必要最小限の回路で構成され、ＣＰＵコアがそのメモリ空間および入出力空間にアクセスした時の命令コード、実行アドレスおよびアクセスデータなどを時系列でデバッグシステムへ出力する。
【０００３】
ところで、近年、半導体製造技術の進展に伴って、大規模なシステムを１チップに集積したＳｏＣ（System On Chip）が開発されるようになってきた。このため、複数のＣＰＵコアを搭載した並列処理プロセッサを１チップで構成することも可能になってきた。
【０００４】
しかしながら、このようなマルチコアを有する半導体装置のデバッグにおいては、２つ以上のＣＰＵコアで個別にトレース情報を取得したとしても、従来は、キャッシュなどのコプロセッサの設定でデータのＲｅａｄ／Ｗｒｉｔｅのタイミングを理解し、トレース比較を行うことが難しいという問題があった。また、複数のＣＰＵコアがアクセスする共有メモリ内でデータが破壊された場合、共有メモリへの最終的なアクセスが共有メモリコントローラによって制御されているため、コア単位のトレース情報だけでは共有メモリ内で発生したデータ破壊を検出することができないという問題があった。これは、トレース情報によって各ＣＰＵコアからの共有メモリコントローラへのアクセス要求は把握できても、共有メモリコントローラが共有メモリに対して実際にどのようにアクセスしたかは把握できなかったためである。さらに、トレース情報の取得ルートがＣＰＵクロックに依存していたため、動作周波数が異なる複数のＣＰＵコアを持つマルチコアの場合、トレース情報の同期をとり、各ＣＰＵコアのトレース比較を行うことが難しいという問題があった。
【特許文献１】特開２００４−２０６２８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、複数のＣＰＵコアからアクセスされる共有メモリに対するアクセス履歴を出力することができる半導体装置を提供する。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、プログラムに基づいて命令を実行する複数のＣＰＵと、共有メモリに接続される共有バスおよび複数の前記ＣＰＵにローカルバスを介して接続され、前記複数のＣＰＵからのアクセス要求を受信して当該アクセス要求に基づいて前記共有メモリへのアクセスを制御する共有メモリ制御手段と、前記共有メモリ制御手段が前記共有バスを介して行った前記共有メモリへのアクセス履歴を前記ＣＰＵからのアクセス要求ごとにアクセス情報として生成するデータアクセス監視手段を有することを特徴とする半導体装置が提供される。
【発明の効果】
【０００７】
本発明によれば、共有メモリに対するアクセス履歴を出力することができるので、複数のＣＰＵコアを有する半導体装置におけるデバッグ効率を大幅に向上させ、それを用いたシステムの開発期間を短縮することができる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照しながら、本発明の実施例を説明する。
【実施例】
【０００９】
図１は、本発明の実施例に係わる半導体装置１１を示す回路ブロック図である。ここでは、主に、共有メモリ１２のデータアクセス監視とその出力を用いたデバッグにかかわる部分を示した。
【００１０】
本発明の実施例に係わる半導体装置１１は、共有バス１３に接続される共有メモリコントローラ１４、データアクセス監視回路１５、アクセス情報１６の出力回路（以下、「ＩＯ−Ｓ」という。）、２つのローカルバスＡおよびＢ、２つのＣＰＵコア（以下、「ＣＰＵ−ＡおよびＣＰＵ−Ｂ」という。）、２つのトレース回路（以下、「ＴＲ−ＡおよびＴＲ−Ｂ」という。）、および２つのトレース情報１７ａおよび１７ｂの出力回路（以下、「ＩＯ−ＡおよびＩＯ−Ｂ」という。）を備えている。
【００１１】
共有メモリコントローラ１４の第１の入出力は共有バス１３に接続され、第２の入出力はローカルバスＡに接続され、第３の入出力はローカルバスＢに接続されている。共有バス１３は半導体装置１１の外部にある共有メモリ１２に接続されている。
【００１２】
データアクセス監視回路１５は共有メモリコントローラ１４内部または共有メモリコントローラ１４に隣接して配置され、データアクセス監視回路１５の出力はアクセス情報１６としてＩＯ−Ｓへ供給されている。
【００１３】
ＩＯ−Ｓの出力はデバッグシステム１８にあるトレース装置１９ｃのデータ入力へ接続されている。
【００１４】
ＣＰＵ−Ａの入出力はローカルバスＡに接続されている。ＴＲ−Ａ（共有メモリ１２へのアクセス要求監視回路）はＣＰＵ−Ａ内部またはＣＰＵ−Ａに隣接して配置され、ＴＲ−Ａの出力はトレース情報１７ａとしてＩＯ−Ａへ供給されている。
【００１５】
ＩＯ−Ａの出力はデバッグシステム１８にあるトレース装置１９ａのデータ入力へ接続されている。
【００１６】
ＣＰＵ−Ｂの入出力はローカルバスＢに接続されている。ＴＲ−ＢはＣＰＵ−Ｂ内部またはＣＰＵ−Ｂに隣接して配置され、ＴＲ−Ｂの出力はトレース情報１７ｂとしてＩＯ−Ｂへ供給されている。
【００１７】
ＩＯ−Ｂの出力はデバッグシステム１８にあるトレース装置１９ｂのデータ入力へ接続されている。
【００１８】
デバッグシステム１８は、トレース装置１９ａ〜１９ｃおよびホストコンピュータ２０を備えており、これらはＬＡＮ（Local Area Network）に接続されている。
【００１９】
共有バス１３は、異なるアーキテクチャのＣＰＵ−ＡおよびＣＰＵ−Ｂが共有する主記憶（共有メモリ１２）を接続するための外部バスであり、共有メモリコントローラ１４によってアクセスが制御されている。
【００２０】
共有メモリコントローラ１４は、ローカルバスＡおよびローカルバスＢを介してＣＰＵ−ＡおよびＣＰＵ−Ｂから共有メモリ１２へのアクセス要求を受信し、これらに基づいて共有メモリ１２でのアクセス競合が起こらないよう共有バス１３を制御する。
【００２１】
データアクセス監視回路１５は、共有メモリコントローラ１４へのアクセス要求を監視し、実際に共有メモリ１２へのアクセスが発生した場合に、そのアクセス履歴をアクセス情報１６としてＩＯ−Ｓへ出力する。
【００２２】
ＩＯ−Ｓは、アクセス情報出力回路であって、データアクセス監視回路１５からのアクセス情報１６を一時記憶し、デバッグ用のクロック信号（以下、「ＤＣＬＫ」という。）に同期して、それらをトレース装置１９ｃへ出力する。
【００２３】
ＣＰＵ−ＡおよびＣＰＵ−Ｂは、それぞれが接続されているローカルバスＡまたはローカルバスＢ経由で共有メモリコントローラ１４へアクセス要求を非同期で発行し、共有メモリコントローラ１４を介して共有メモリ１２へアクセスする。
【００２４】
ＴＲ−Ａは、ＣＰＵ−Ａが発行した共有メモリ１２へのアクセス要求を監視し、これらの命令が実行されるたびにＩＯ−Ａへトレース情報１７ａを出力する。同様に、ＴＲ−Ｂは、ＣＰＵ−Ｂのトレース情報１７ｂをＩＯ−Ｂへ出力する。
【００２５】
ＩＯ−Ａは、ＴＲ−Ａからのトレース情報１７ａを一時記憶し、ＤＣＬＫに同期して、それらをトレース装置１９ａへ出力する。
【００２６】
ＩＯ−Ｂは、ＴＲ−Ｂからのトレース情報１７ｂを一時記憶し、ＤＣＬＫに同期して、それらをトレース装置１９ｂへ出力する。
【００２７】
デバッグシステム１８は、アクセス情報１６およびトレース情報１７ａ、１７ｂを受信して蓄積するトレース装置１９ａ〜１９ｃ、およびこれらを解析するホストコンピュータ２０を備えている。
【００２８】
図２は、本発明の実施例に係わる半導体装置１１のアクセス情報１６を示すイメージ図である。ここでは、アクセス情報１６がＩＯ−Ｓに一時記憶される時のメモリ空間のイメージを示した。
【００２９】
また、１６進数は“０ｘ１ｃ”のように先頭に“０ｘ”を付して示した。さらに、バス構成のビット幅およびそのビット位置を“［３１：２４］”のように示した。“［３１：２４］”は、３２ビット構成の第２５ビットから第３２ビットの８ビットを示している。以下、バス構成の最下位ビットは“第０ビット”とする。
【００３０】
図２に示したように、アクセス情報１６は、ワード（３２ビット，「フレーム」ともいう。）単位でＩＯ−Ｓに記録され、９ワードで１つのアクセス要求に対応している。
【００３１】
本発明の実施例に係わる半導体装置１１のアクセス情報１６は、オフセット（ＯＦＦＳＥＴ）、タグ、ステータス、トレースデータ、およびターゲットアドレスを備えている。
【００３２】
オフセットは、一時記憶されるメモリ先頭からのアドレスを示している。
【００３３】
タグは、３２ビットのタイムスタンプを８ビットごとに分割したもので、４フレーム（｛７：０］、｛１５：８］、｛２３：１６］、および｛３１：２４］）で１つのタイムスタンプを示し、４フレームごとに記録される。
【００３４】
図２の“ＴＡＧ［３１：２４］”は、タグの各８ビットがフレームの第２５ビットから第３２ビットに記録されていることを示している。以下、図２の１行目の表記は同様である。
【００３５】
ステータスは、１ビットのＥＩ、ＴＡＧＬＳＢ、５ビットのＰＣＳＴ、および１ビットのＰＯＶで構成されている。
【００３６】
ＥＩ［２３］は。フレームの第２４ビットに記録され、外部からの入力信号を示している。
【００３７】
ＴＡＧＬＳＢ［２２］はフレームの第２３ビットに記録され、“＜ＴＡＧＬＳＧ＞＝１”はこのフレームのＴＡＧ［３１：２４］が４分割されたタグの最下位バイト（下位８ビット）であることを示している。
【００３８】
ＰＣＳＴ［２１：１７］は、フレームの第１８ビットから第２２ビットに記録され、ＣＰＵでの命令の実行状態を示している。
【００３９】
ＰＯＶ［１６］は、フレームの第１７ビットに記録され、データトレースのオーバーフロー発生を示している。
【００４０】
ＰＣＳＴ以外の情報は、必要な時にデータアクセス監視回路１５から出力され記録される。
【００４１】
トレースデータは、第１フレームにアクセスの種類を示すＲ／Ｗ、共有メモリ１２へのアクセス要求を発行したＣＰＵを示すＲＥＣＶ［３：０］が記録され、２フレーム目から５フレーム目にアクセスされた共有メモリ１２の実効アドレス（Ａ「３１：０」）が記録され、６フレーム目から９フレーム目に実際に共有メモリ１２へ書き込んだデータまたは共有メモリ１２から読み出されたデータ（Ｄ［３１：０］）が記録されている。
【００４２】
Ａ［３１：０］およびＤ［３１：０］は、図２に示したように、８ビットごとに４分割されてＰＤ［１５：８］に記録されている。
【００４３】
ターゲットアドレスは、分岐命令、ジャンプ命令、および例外発生時に実効プログラムカウンタ（ＰＣ）を復元するための情報であり、これらの発生がない場合は、“０ｘｆｆ”が出力され、記録されている。
【００４４】
図３は、本発明の実施例に係わる半導体装置１１のＩＯ−Ｓにおけるトレースデータ出力を示すイメージ図である。
【００４５】
トレースデータは、図３に示したように、ＤＣＬＫに同期して、８ビット幅で１フレームずつ順次トレース装置１９ｃへ出力される。トレース装置１９ｃは、受信したトレースデータをアクセス履歴として専用のトレースメモリへ蓄積する。
【００４６】
そして、デバッグ時に、ホストコンピュータ２０がこの蓄積されたアクセス履歴を解析に利用する。
【００４７】
ＴＲ−ＡまたはＴＲ−Ｂが出力するトレース情報１７ａまたは１７ｂは、上述したアクセス情報１６と同様の構成なので詳しい説明は省略する。アクセス情報１６との違いは、トレースデータの第１フレームがＳＴ、Ｒ／Ｗ、およびＢＥ［３：０］で構成されていることである。
【００４８】
図４は、本発明の実施例に係わる半導体装置１１のＩＯ−ＡおよびＩＯ−Ｂにおけるトレースデータ出力を示すイメージ図である。
【００４９】
トレースデータは、図３と同様に、ＤＣＬＫに同期してトレース装置１９ａまたは１９ｂへ出力される。ここで、第１フレームは、スタートビット（ＳＴ）、アクセス要求の種類（Ｒ／Ｗ）、およびトレースデータを抽出するためのデータアクセス条件（ＢＥ）で構成されている。第２フレーム以降は、アクセス情報１６と同様である。
【００５０】
トレース装置１９ａおよび１９ｂは、それぞれ、受信したトレースデータをトレース履歴として専用のトレースメモリへ蓄積する。
【００５１】
そして、デバッグ時に、ホストコンピュータ２０がこの蓄積されたアクセス履歴を解析に利用する。
【００５２】
次に、上述した構成を持つ半導体装置１１のデバッグ方法について説明する。  
図５は、本発明の実施例に係わる半導体装置１１におけるデバッグ方法を示すイメージ図である。ここでは、一例として、共有メモリ１２でのデータ破壊にかかわる部分を示した。
【００５３】
図５の横軸は時間の経過を示し、縦軸は共有メモリ１２でのアドレス空間を示している。太い破線はＲｅａｄのアクセスを示し、太い実線はＷｒｉｔｅのアクセスを示している。それぞれに付した“Ａ”は、ＣＰＵ−Ａからのアクセス要求に基づくアクセスを示し、“Ｂ”はＣＰＵ−Ｂからのアクセス要求に基づくアクセスを示している。
【００５４】
図５に示したように、共有メモリ１２へのアクセスは、
（０）ＣＰＵ−ＡからのＣ番地へのＲｅａｄ
（１）ＣＰＵ−ＡからのＣ番地へのＷｒｉｔｅ
（２）ＣＰＵ−ＢからのＡ番地へのＷｒｉｔｅ
（３）ＣＰＵ−ＡからのＡ番地へのＷｒｉｔｅ
（４）ＣＰＵ−ＢからのＡ番地へのＲｅａｄ
（５）ＣＰＵ−ＡからのＣ番地へのＷｒｉｔｅ
（６）ＣＰＵ−ＢからのＤ番地へのＷｉｒｔｅ
（７）ＣＰＵ−ＢからのＢ番地へのＷｒｉｔｅ
の順で発生している。
【００５５】
（３）で、ＣＰＵ−ＡがＡ番地のデータを書き換えているため、データ破壊が生じている。
【００５６】
図６は、本発明の実施例に係わる半導体装置１１におけるデバッグ方法を示す別のイメージ図である。ここでは、図６に示した共有メモリ１２へのアクセスをバス別に時間軸で示した。
【００５７】
図６の横軸は、図５と同様、時間の経過を示し、縦軸は共有バス１３およびローカルバスＡ、Ｂで発生するアクセスを示している。
【００５８】
２重枠の破線はＣＰＵ−ＡからのＲｅａｄアクセスを示し、２重枠の実線はＣＰＵ−ＡからのＷｒｉｔｅアクセスを示している。
【００５９】
また、太枠の破線はＣＰＵ−ＢからのＲｅａｄアクセスを示し、太枠の実線はＣＰＵ−ＢからのＷｒｉｔｅアクセスを示している。
【００６０】
図６に示したように、ＣＰＵ−ＡおよびＣＰＵ−Ｂは、互いにアーキテクチャが異なるため、異なる命令サイクルでアクセス命令を実行し、さらに、それらのアクセス要求は互いに非同期で発生している。
【００６１】
共有メモリコントローラ１４は、これらのアクセス要求を受信し、図６に示したように、共有メモリ１２でアクセス競合が発生しないように調整して、共有バス１３の制御を行っている。
【００６２】
ＣＰＵ−ＡおよびＣＰＵ−Ｂは、互いに相手のアクセス要求には関知しないため、図５に示したようなデータ破壊が発生する。
【００６３】
次に、上述したデータ破壊が生じた場合に、本発明の実施例に係わる半導体装置１１で生成されるアクセス情報１６およびトレース情報１７ａ、１７ｂについて説明する。
【００６４】
図７は、本発明の実施例に係わる半導体装置１１のアクセス情報１６を示すテーブルである。ここでは、説明のため、トレースフリーモードで取得したアクセス情報１６をホストコンピュータ２０で解析されるアクセス単位のテーブルに並べ替えてある。
【００６５】
本発明の実施例に係わる半導体装置１１のアクセステーブルは、アクセスコード、ＣＰＵコード、実効アドレス、およびアクセスデータを備えている。
【００６６】
アクセスコードは、アクセスの種類を示すＲ／Ｗに基づいて設定され、ＣＰＵコードは、アクセス要求を発行したＣＰＵを示すＲＥＣＶに基づいて設定される。
【００６７】
実効アドレスは、共有メモリ１２の実効アドレスであり、アクセスデータは、実際にアクセスされたデータである。
【００６８】
図７に太枠で示したように、ＣＰＵ−ＢがＡ番地へＤａｔｅＡ１をＷｒｉｔｅした後、次のＲｅａｄまでにＣＰＵ−ＡがＡ番地にＤａｔｅＡ２をＷｒｉｔｅしているため、データ破壊が発生していることがわかる。
【００６９】
図８は、本発明の実施例に係わる半導体装置１１のトレース情報１７ａを示すテーブルである。
【００７０】
また、図９は、本発明の実施例に係わる半導体装置１１のトレース情報１７ｂを示すテーブルである。
【００７１】
図８および図９に示したように、トレース情報１７ａ、１７ｂには、プログラムカウンタ値を示すＰＣと、実効アドレスおよびアクセスデータを示すＡ［３１：０］およびＤ［３１：０］と、各ＣＰＵのステータスが含まれている。
【００７２】
図７から検出したデータ破壊地点（ＣＰＵ−Ａ、Ｗｒｉｔｅ）は、図８のトレース停止地点から遡って２番目（図８に、太枠で示した。）であり、Ｒｅａｄエラー地点（ＣＰＵ−Ｂ、Ｒｅａｄ）は、図９のトレース停止地点から遡って３番目（図９に、太枠で示した。）であることがわかる。
【００７３】
図７、図８、および図９に示したトレース停止地点は、タイムスタンプが一致しているので、図８のＰＣから、ＣＰＵ−Ａにおけるデータ破壊のプログラムカウンタは“０ｘｂｆｃ０４３ｂｃ”であることがわかる。
【００７４】
同様に、図９のＰＣから、ＣＰＵ−ＢにおけるＲｅａｄエラーのプログラムカウンタは“０ｘｂｆｃ０６４ａ４”であることがわかる。
【００７５】
このようにして、複数のＣＰＵによる非同期アクセスに伴って発生する共有メモリ１２でのデータ破壊を検出し、それぞれのＣＰＵでのプログラムデバッグを容易に行うことができる。
【００７６】
上記実施例によれば、データアクセス監視回路１５によって共有メモリ１２に対するアクセス履歴を出力することができるので、複数のＣＰＵコアを有する半導体装置１１のデバッグ効率が大幅に向上し、それを用いたシステムの開発期間短縮が実現できる。
【００７７】
上述の実施例では、共有メモリ１２にアクセスするＣＰＵは２つであるとしたが、本発明はこれに限られるものではなく、原理的には２つ以上のＣＰＵコアを有する半導体装置に適用可能である。
【００７８】
また、アクセス情報１６およびトレース情報１７ａ、１７ｂはアクセスごとにフレーム分割して出力するとしたが、本発明はこれに限られるものではなく、例えば、複数のアクセス情報１６またはトレース情報１７ａ、１７ｂを蓄積する記憶手段を半導体装置１１に用意し、トレース停止後にまとめて出力するように構成することもできる。
【図面の簡単な説明】
【００７９】
【図１】本発明の実施例に係わる半導体装置を示す回路ブロック図。
【図２】本発明の実施例に係わる半導体装置のアクセス情報１６を示すイメージ図。
【図３】本発明の実施例に係わる半導体装置のＩＯ−Ｓにおけるトレースデータ出力を示すイメージ図。
【図４】本発明の実施例に係わる半導体装置のＩＯ−ＡおよびＩＯ−Ｂにおけるトレースデータ出力を示すイメージ図。
【図５】本発明の実施例に係わる半導体装置におけるデバッグ方法を示すイメージ図。
【図６】本発明の実施例に係わる半導体装置におけるデバッグ方法を示す別のイメージ図。
【図７】本発明の実施例に係わる半導体装置のアクセス情報１６を示すテーブル。
【図８】本発明の実施例に係わる半導体装置のトレース情報１７ａを示すテーブル。
【図９】本発明の実施例に係わる半導体装置のトレース情報１７ｂを示すテーブル。
【符号の説明】
【００８０】
１１  半導体装置
１２  共有メモリ
１３  共有バス
１４  共有メモリコントローラ
１５  データアクセス監視回路
１６  アクセス情報
１７ａ、１７ｂ  トレース情報
１８  デバッグシステム
１９ａ、１９ｂ、１９ｃ  トレース装置
２０  ホストコンピュータ
【図１】
2006318412.tif 000003
【図２】
2006318412.tif 000004
【図３】
2006318412.tif 000005
【図４】
2006318412.tif 000006
【図５】
2006318412.tif 000007
【図６】
2006318412.tif 000008
【図７】
2006318412.tif 000009
【図８】
2006318412.tif 000010
【図９】
2006318412.tif 000011