(57)【要約】【課題】プログラムを実行可能な半導体集積回路について、トレース情報出力を最適化する。【解決手段】スタックメモリ３００は、ＣＰＵ１００によってコール命令又は割込み分岐が実行されたとき、その復帰先アドレスをプッシュし、復帰命令が実行されたとき、プッシュしている復帰先アドレスをポップする。比較器４００は、ＣＰＵ１００によって復帰命令が実行されたとき、ＣＰＵ１００から出力された分岐先アドレスとスタックメモリ３００から出力されたアドレスとを比較する。この比較の結果、一致するとき、トレース情報として分岐先アドレスは出力されない一方、不一致のとき、シフトレジスタ７００はＣＰＵ１００から分岐先アドレス１１０を受け、トレース情報として出力する。【選択図】図１
2005209172.tif 000002
【特許請求の範囲】
【請求項１】
コール命令を実行したとき、第１の信号をアサートするとともに前記コール命令に係る分岐先アドレス及び復帰先アドレスを出力し、割込み分岐を実行したとき、第２の信号をアサートするとともに前記割込み分岐に係る分岐先アドレス及び復帰先アドレスを出力し、復帰命令を実行したとき、第３の信号をアサートするとともに前記復帰命令に係る分岐先アドレスを出力するＣＰＵと、
前記第１及び第２の信号のいずれかがアサートされたとき、前記ＣＰＵから出力された復帰先アドレスをプッシュし、前記第３の信号がアサートされたとき、プッシュされている復帰先アドレスをポップするスタックメモリと、
前記スタックメモリからポップされた復帰先アドレスと前記ＣＰＵから出力された分岐先アドレスとを比較する比較器と、
前記ＣＰＵから前記第１から第３の信号を含む複数の信号を受け、当該複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、
前記ＣＰＵから出力された分岐先アドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力するアドレスレジスタとを備え、
前記トレースパケット制御部は、前記第３の信号がアサートされ、かつ、前記比較器から受けた比較結果が不一致を示すとき、前記アドレスレジスタにアドレス出力を指示する
ことを特徴とする半導体集積回路。
【請求項２】
請求項１に記載の半導体集積回路において、
前記トレースパケット制御部は、前記第３の信号がアサートされ、かつ、前記スタックメモリにアンダーフローが発生しているとき、前記アドレスレジスタにアドレス出力を指示する
ことを特徴とする半導体集積回路。
【請求項３】
請求項１に記載の半導体集積回路において、
トレースが開始されたとき、第４の信号をアサートする同期要求生成回路を備え、
前記スタックメモリは、前記第４の信号がアサートされたとき、記憶内容を初期化する
ことを特徴とする半導体集積回路。
【請求項４】
請求項３に記載の半導体集積回路において、
前記ＣＰＵは、命令を実行したとき、当該実行した命令の実行アドレスを出力するものであり、
当該半導体集積回路は、
前記ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備え、
前記アドレスレジスタは、前記ＣＰＵから出力された分岐先アドレスに代えて、前記セレクタから出力されたアドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力するものであり、
前記トレースパケット制御部は、前記第４の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、前記第１及び第２の信号がネゲートされているとき、前記セレクタに前記実行アドレスの選択を指示する一方、これ以外のとき、前記セレクタに、前記分岐先アドレスの選択を指示するものである
ことを特徴とする半導体集積回路。
【請求項５】
請求項３に記載の半導体集積回路において、
前記同期要求生成回路は、システムリセット、タスク切り替え、及びトレース開始の少なくともいずれかのとき、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項６】
請求項３に記載の半導体集積回路において、
前記同期要求生成回路は、外部から指示があったとき、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項７】
請求項３に記載の半導体集積回路において、
前記同期要求生成回路は、一定周期で、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項８】
レジスタに格納された分岐先アドレスに分岐する間接分岐命令を持つＣＰＵであって、前記レジスタを更新したとき、第１の信号をアサートし、前記間接分岐命令を実行したとき、第２の信号をアサートするとともに前記間接分岐命令に係る分岐先アドレスを出力するＣＰＵと、
前記第１の信号がアサートされてから前記第２の信号がアサートされるまでの間、第３の信号をアサートするループ検出回路と、
前記ＣＰＵから前記第２の信号を含む複数の信号を受け、当該複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、
前記ＣＰＵから出力された分岐先アドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力するアドレスレジスタとを備え、
前記トレースパケット制御部は、前記第２及び第３の信号がアサートされたとき、前記アドレスレジスタにアドレス出力を指示する
ことを特徴とする半導体集積回路。
【請求項９】
請求項８に記載の半導体集積回路において、
前記ループ検出回路は、
前記第１の信号がアサートされたとき、前記第３の信号をアサートされた状態に保持する保持回路と、
前記第２の信号がアサートされたとき、前記保持回路によって保持された状態をリセットするリセット回路とを有する
ことを特徴とする半導体集積回路。
【請求項１０】
請求項８に記載の半導体集積回路において、
トレースが開始されたとき、第４の信号をアサートする同期要求生成回路を備え、
前記ループ検出回路は、前記第４の信号がアサートされてから前記第２の信号がアサートされるまでの間、前記第３の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項１１】
請求項１０に記載の半導体集積回路において、
前記ＣＰＵは、命令を実行したとき、当該実行した命令の実行アドレスを出力するものであり、
当該半導体集積回路は、
前記ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備え、
前記アドレスレジスタは、前記ＣＰＵから出力された分岐先アドレスに代えて、前記セレクタから出力されたアドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力するものであり、
前記トレースパケット制御部は、前記第４の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、前記第２の信号がネゲートされているとき、前記セレクタに前記実行アドレスの選択を指示する一方、これ以外のとき、前記セレクタに、前記分岐先アドレスの選択を指示するものである
ことを特徴とする半導体集積回路。
【請求項１２】
請求項１０に記載の半導体集積回路において、
前記同期要求生成回路は、システムリセット、タスク切り替え、及びトレース開始の少なくともいずれかのとき、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項１３】
請求項１０に記載の半導体集積回路において、
前記同期要求生成回路は、外部から指示があったとき、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項１４】
請求項１０に記載の半導体集積回路において、
前記同期要求生成回路は、一定周期で、前記第４の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項１５】
レジスタに格納された分岐先アドレスに分岐する間接分岐命令を持つＣＰＵであって、前記間接分岐命令を実行したとき、第１の信号をアサートするとともに前記間接分岐命令に係る分岐先アドレスを出力するＣＰＵと、
前記第１の信号がアサートされたとき、格納しているアドレスを出力し、前記ＣＰＵから出力された分岐先アドレスを格納する第１のアドレスレジスタと、
前記第１のアドレスレジスタから出力された分岐先アドレスと前記ＣＰＵから出力された分岐先アドレスとを比較する比較器と、
前記ＣＰＵから前記第１の信号を含む複数の信号を受け、当該複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、
前記ＣＰＵから出力された分岐先アドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力する第２のアドレスレジスタとを備え、
前記トレースパケット制御部は、前記第１の信号がアサートされ、かつ、前記比較器から受けた比較結果が不一致を示すとき、前記第２のアドレスレジスタにアドレス出力を指示する
ことを特徴とする半導体集積回路。
【請求項１６】
請求項１５に記載の半導体集積回路において、
トレースが開始されたとき、第２の信号をアサートする同期要求生成回路を備え、
前記第１のアドレスレジスタは、前記第２の信号がアサートされたとき、記憶内容を初期化する
ことを特徴とする半導体集積回路。
【請求項１７】
請求項１６に記載の半導体集積回路において、
前記ＣＰＵは、命令を実行したとき、当該実行した命令の実行アドレスを出力するものであり、
当該半導体集積回路は、
前記ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備え、
前記第２のアドレスレジスタは、前記ＣＰＵから出力された分岐先アドレスに代えて、前記セレクタから出力されたアドレスを受け、前記トレースパケット制御部の制御により当該アドレスを出力するものであり、
前記トレースパケット制御部は、前記第２の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、前記第１の信号がネゲートされているとき、前記セレクタに前記実行アドレスの選択を指示する一方、これ以外のとき、前記セレクタに、前記分岐先アドレスの選択を指示するものである
ことを特徴とする半導体集積回路。
【請求項１８】
請求項１６に記載の半導体集積回路において、
前記同期要求生成回路は、システムリセット、タスク切り替え、及びトレース開始の少なくともいずれかのとき、前記第２の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項１９】
請求項１６に記載の半導体集積回路において、
前記同期要求生成回路は、外部から指示があったとき、前記第２の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項２０】
請求項１６に記載の半導体集積回路において、
前記同期要求生成回路は、一定周期で、前記第２の信号をアサートする
ことを特徴とする半導体集積回路。
【請求項２１】
請求項１に記載の半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、
前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレースメモリに格納されたトレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備え、
前記実行履歴復元部は、
前記ソースプログラムからコール命令を検出したとき及び前記トレース情報から割込み分岐の実行を示す符号を検出したときのいずれかのとき、前記ソースプログラムから復帰先アドレスを得てプッシュするとともに前記トレース情報から分岐先アドレスを得て復元し、前記ソースプログラムから復帰命令を検出したとき、プッシュされている復帰先アドレスをポップして復元する
ことを特徴とする開発支援装置。
【請求項２２】
請求項４に記載の半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、
前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレースメモリに格納されたトレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備え、
前記実行履歴復元部は、
前記ソースプログラムからコール命令を検出したとき及び前記トレース情報から割込み分岐の実行を示す符号を検出したときのいずれかのとき、前記ソースプログラムから復帰先アドレスを得てプッシュするとともに前記トレース情報から分岐先アドレスを得て復元し、前記ソースプログラムから復帰命令を検出したとき、プッシュされている復帰先アドレスをポップして復元するものであり、かつ、
前記トレース情報からトレース開始を示す符号を検出したとき、プッシュしている復帰先アドレスを初期化するとともに、前記トレース情報から当該符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元する
ことを特徴とする開発支援装置。
【請求項２３】
請求項８及び１５のいずれか一つに記載の半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、
前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレースメモリに格納されたトレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備え、
前記実行履歴復元部は、
前記ソースプログラムから間接分岐命令を検出し、かつ、前記トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、前記分岐先アドレスを記憶するとともに前記分岐先アドレスを復元し、前記ソースプログラムから間接分岐命令を検出し、かつ、前記トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、前記記憶した分岐先アドレスを復元する
ことを特徴とする開発支援装置。
【請求項２４】
請求項１１及び１７のいずれか一つに記載の半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、
前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレースメモリに格納されたトレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備え、
前記実行履歴復元部は、
前記ソースプログラムから間接分岐命令を検出し、かつ、前記トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、前記分岐先アドレスを記憶するとともに前記分岐先アドレスを復元し、前記ソースプログラムから間接分岐命令を検出し、かつ、前記トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、前記記憶した分岐先アドレスを復元するものであり、かつ、
前記トレース情報からトレース開始を示す符号を検出したとき、前記トレース情報から当該符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元する
ことを特徴とする開発支援装置。
【請求項２５】
請求項１に記載の半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する方法において、
前記ソースプログラムからコール命令を検出するステップと、
前記トレース情報から割込み分岐の実行を示す符号を検出するステップと、
前記ソースプログラムから復帰命令を検出するステップと、
前記コール命令及び符号のいずれか一方が検出されたとき、前記ソースプログラムから復帰先アドレスを得てプッシュするステップと、
前記コール命令及び符号のいずれか一方が検出されたとき、前記トレース情報から分岐先アドレスを得て復元するステップと、
前記復帰命令が検出されたとき、プッシュされている復帰先アドレスをポップして復元するステップとを備えた
ことを特徴とする実行履歴復元方法。
【請求項２６】
請求項４に記載の半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する方法において、
前記ソースプログラムからコール命令を検出するステップと、
前記ソースプログラムから復帰命令を検出するステップと、
前記トレース情報から割込み分岐の実行を示す第１の符号を検出するステップと、
前記トレース情報からトレース開始を示す第２の符号を検出するステップと、
前記コール命令及び第１の符号のいずれか一方が検出されたとき、前記ソースプログラムから復帰先アドレスを得てプッシュするステップと、
前記コール命令及び第１の符号のいずれか一方が検出されたとき、前記トレース情報から分岐先アドレスを得て復元するステップと、
前記復帰命令が検出されたとき、プッシュされている復帰先アドレスをポップして復元するステップと、
前記第２の符号が検出されたとき、前記プッシュされた復帰先アドレスを初期化するステップと、
前記第２の符号が検出されたとき、前記トレース情報から前記第２の符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するステップとを備えた
ことを特徴とする実行履歴復元方法。
【請求項２７】
請求項８及び１５のいずれか一つに記載の半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する方法において、
前記ソースプログラムから間接分岐命令を検出するステップと、
前記トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、
前記トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、
前記間接分岐命令及び第１の符号が検出されたとき、前記第１の符号に伴った分岐先アドレスを記憶するステップと、
前記間接分岐命令及び第１の符号が検出されたとき、前記第１の符号に伴った分岐先アドレスを復元するステップと、
前記間接分岐命令及び第２の符号が検出されたとき、前記記憶された分岐先アドレスを復元するステップとを備えた
ことを特徴とする実行履歴復元方法。
【請求項２８】
請求項１１及び１７のいずれか一つに記載の半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、前記半導体集積回路におけるＣＰＵによって実行されたソースプログラムと前記トレース情報とを順に対応させながら、前記ＣＰＵによる前記ソースプログラムの実行履歴を復元する方法において、
前記ソースプログラムから間接分岐命令を検出するステップと、
前記トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、
前記トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、
前記トレース情報からトレース開始を示す第３の符号を検出するステップと、
前記間接分岐命令及び第１の符号が検出されたとき、前記第１の符号に伴った分岐先アドレスを記憶するステップと、
前記間接分岐命令及び第１の符号が検出されたとき、前記第１の符号に伴った分岐先アドレスを復元するステップと、
前記間接分岐命令及び第２の符号が検出されたとき、前記記憶された分岐先アドレスを復元するステップと、
前記第３の符号が検出されたとき、前記トレース情報から前記第３の符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するステップとを備えた
ことを特徴とする実行履歴復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路、開発支援装置及び実行履歴復元方法に関し、特に、プログラム実行に係るトレース情報を出力する「トレース情報出力機能」を有するプロセッサ、及びプロセッサから出力されたトレース情報に基づいてプロセッサによるプログラム実行履歴を復元する開発支援装置及びその方法に関するものである。
【背景技術】
【０００２】
「トレース情報出力機能」は、プロセッサのプログラム実行状態を、外部のホストコンピュータ上で動作しているデバッガに出力する機能である。システムが何らかの異常動作を検出した場合に、蓄積されたトレース情報を用いることによって、その時点から遡った実行履歴をシステム開発者が確認し、その原因を特定できるようにする。
【０００３】
ところが、上記のような開発支援を行うには、プロセッサにトレース情報の出力を行なうためのピンを設けなければならず、その本数や動作周波数（トレース情報出力のバンド幅）が制限される。また、トレース情報を蓄積するメモリ容量にも限界がある。そのため、限られたバンド幅やメモリ容量で最大限にその効果を発揮するためには、トレース情報の圧縮が必要となる。
【０００４】
トレース情報の圧縮手法の一例として、従来、いわゆる「分岐トレース」と呼ばれるトレース情報取得手法が知られている（例えば、特許文献１及び非特許文献１参照）。この手法によると、分岐発生ごとに分岐先アドレスをチップ外部に出力する機構を設け、出力された分岐先アドレスに基づいて実行履歴が復元される。さらに、出力されたトレース情報を元にソースプログラムを解析することにより、必ずしも全ての分岐先アドレスがなくても実行履歴が復元され得ることが示唆されている。例えば、ソースプログラムに明示的に分岐先アドレスが記述されている直接分岐の場合には、分岐先アドレスが出力されなくともソースプログラムから実行履歴を復元することができる。一方、ソースプログラムに分岐先アドレスが明示的に記述されておらず、実行時にそれが決定するような間接分岐の場合には、分岐先アドレスの出力が必要である。また、間接分岐の中でも、関数コール命令に対するリターン命令の実行時には、コールとリターンとの関係がトレース情報から追跡できれば、分岐先アドレスが出力されなくてもよい。
【０００５】
以下、これら示唆するところを実現するハードウェアと実行履歴復元ソフトウェアを従来例として挙げ、図面を参照しながら説明する。図４６は、従来のトレース情報出力機能を有する半導体集積回路の構成を示す。トレースパケット制御部２００は、ＣＰＵ１００からの命令完了信号（EOI）１０１、直接分岐命令実行信号（JMPDIR）１０２、間接分岐命令実行信号（JMPIND）１０３、リターン命令実行信号（RET）１０６、及び条件分岐命令実行時の条件成立信号（JMPTKN）１０４を受け、図４７に示した状態デコード表に従ってデコードを行い、トレース状態符号２０４及び分岐先アドレスのシフトレジスタ７００への分岐先アドレスロードイネーブル信号（TPCLD）２０１を生成する。なお、トレース状態ポート（PCST）９０１に出力される符号２０４のコード及び意味は次に示す通りである。
符号/コード/意味
SEQ "000" シーケンシャルな命令実行
STL "010" ＣＰＵがストールしている状態
NPC "101" 分岐先アドレス出力を伴わない分岐命令実行
JMP "100" 分岐先アドレス出力を伴う分岐命令実行
EXP "110" 割込み分岐実行(分岐先アドレス出力を伴う）
図４７の状態デコード表に示したように、リターン命令以外の間接分岐命令が実行されたときにのみ、ＣＰＵ１００から出力された分岐先アドレス１１０がシフトレジスタ７００にロードされ、シフト出力が開始される。これ以外の分岐命令が実行された場合には、符号２０４として"NPC"が出力され、分岐先アドレス出力ポート（TPC）９０２からは有意なデータは出力されない。
【０００６】
一方、図４８は、開発支援装置の構成を示す。開発支援装置は、トレース情報蓄積装置２及びホストコンピュータ３からなる。トレース情報蓄積装置２は、半導体集積回路（プロセッサ）１からのトレース状態信号９１１及び分岐先アドレス信号９１２を受け、トレース情報としてトレースメモリ１０３０に蓄積する。ホストコンピュータ３は、トレース情報蓄積装置２にトレースメモリ読み出し要求１０４１を送り、トレースメモリ出力１０３１を取得する。
【０００７】
次に、半導体集積回路１から出力されたトレース情報に基づいて、半導体集積回路１のプログラム実行履歴を復元する方法について、図４９に示したプログラムを例に説明する。なお、半導体集積回路１は図４９に示したプログラムを実行することによって図５０に示したトレース情報を出力したものとする。また、トレース開始はプログラム実行開始と同じ実行順番"1"（アドレス"0x40000000"）であるとする。
【０００８】
図５１は、従来の実行履歴復元方法のフローチャートである。ホストコンピュータ３は、図５１に示したフローに従って実行履歴を復元する。まず、ステップ５００１で、実行ポインタIP=0x40000000及びトレースポインタTP=0がそれぞれ設定される。次に、ステップ５００６でIP=0x40000000の命令"命令1"が表示される。TP=0のときの符号は"SEQ"であるので（ステップ５００７，５００８，５０１５，５０１９及び５０２１）、ステップ５０２２でIPがインクリメントされ（IP=0x40000004）、ステップ５０２３でTPがインクリメントされ（TP=1）、ステップ５００６に戻る。TP=1,3,4,6,7,8,10,11,15,16のときの符号"SEQ"についても同様に処理される。
【０００９】
TP=2のときIP=0x40000008であり、ステップ５００６でIP=0x40000008の命令"call Sub_A"が表示される。TP=2のときの符号は"NPC"であり（ステップ５００７及び５００８）、IP=0x40000008の命令はコール命令（CALL）であることから（ステップ５００９及び５０１２）、ステップ５０１３で次の命令のアドレス"0x4000000c"がソフトウェア的に実現された模擬スタック（以下、ソフトスタックと称する）にプッシュされる。そして、ステップ５０１４でIPがソースプログラムから得られる"0x40000100"（Sub_A）に設定され、ステップ５０２３でTPがインクリメントされ（TP=3）、ステップ５００６に戻る。TP=5のときの符号"NPC"についても同様に処理される。
【００１０】
TP=9のときIP=0x4000020cであり、ステップ５００６でIP=0x4000020cの命令"call (a0)"が表示される。TP=9のときの符号は"JMP"であり（ステップ５００７，５００８及び５０１５）、IP=0x4000020cの命令はコール命令（CALL）であることから（ステップ５０１６）、ステップ５０１７で次の命令のアドレス"0x40000210"がソフトスタックにプッシュされ、ステップ５０１８でIPがTP=9のときの分岐先アドレス"0x40000300"に設定され、ステップ５０２３でTPがインクリメントされ（TP=10）、ステップ５００６に戻る。
【００１１】
TP=12のときIP=0x40000308であり、ステップ５００６でIP=0x40000308の命令"ret"が表示される。TP=12のときの符号は"NPC"であり（ステップ５００７及び５００８）、IP=0x40000308の命令はリターン命令（RET）であることから（ステップ５００９）、ステップ５０１０でソフトスタックから復帰先アドレスがポップされ、ステップ５０１１でIPがポップされたアドレス"0x40000210"に設定され、ステップ５０２３でTPがインクリメントされ（TP=13）、ステップ５００６に戻る。TP=13,14のときの符号"NPC"についても同様に処理される。
【００１２】
図５２は、上記の実行履歴復元方法を実行することによって得られた復元結果を示す。図５２に示したように、図４９に示したソースプログラムと図５０に示したトレース情報とに基づいて、プロセッサ１の実行履歴が正しく復元されている。
【特許文献１】特開平８−１８５３３６号公報
【非特許文献１】矢野  達男、他1名、"リアルタイム・トレースを50MHzの量産用MPUで実現"、日経エレクトロニクス1995.7.31(no.641) p.133〜140
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上述した従来の技術には、以下のようにいくつかの問題点がある。
【００１４】
（１）関数リターン命令や割込みリターン命令等のリターン命令についてはその分岐先アドレスの出力が常に省略されるため、タスク切替え（コンテキストスイッチ）でスタックを切り替えた場合、分岐先アドレス情報がソースプログラムから常に得られるとは限らない。同様に、何らかの要因でＣＰＵが使用するスタックが破壊されて復帰先アドレスが不正になる場合にも、復帰先アドレスを正しく復元することができない。
【００１５】
（２）プログラムの先頭からでなく途中からトレースを開始する場合、リターン命令に対応する関数コール命令や割込み分岐の実行がトレース情報として残っていないため、分岐先アドレス情報を得ることができず、リターン命令の復帰先アドレスを復元することができない。
【００１６】
同様に、ディレイドトリガ方式でトレースを行なう場合、トレースメモリがサイクリックに使用されるため、過去のトレースデータが上書きされ、リターン命令に対応する分岐命令の実行に係るトレース情報がない場合、正常に実行履歴を復元することができない。
【００１７】
（３）間接分岐が連続する場合に、履歴復元に必要な情報が欠落が発生する場合がある。この問題については、全ての分岐先アドレスが出力されるまで、次の命令実行を停止させる動作モード（フルトレースモード）を設けることで一応の解決が可能である。しかし、フルトレースモードでプロセッサを動作させた場合、プログラムの実行時間に影響を及ぼし、特に、リアルタイム制御においてはシステムが成り立たなくおそれがある。
【００１８】
また、特に、分岐先アドレスを分岐先アドレスレジスタに、また分岐先の命令を分岐先命令レジスタにそれぞれ格納することにより、分岐実行時のペナルティをなくして高速に分岐を行なう「高速分岐命令」を実装したアーキテクチャが存在する。このような高速分岐命令は間接分岐命令であるため、トレース情報として分岐先アドレスを出力する必要がある。高速分岐命令が威力を発揮するのは、繰り返しループの分岐として用いられる場合である。しかし、ポート９０２に分岐先アドレスを出力するサイクル数よりもＣＰＵが分岐命令を実行する間隔の方が短いため、ＣＰＵを停止させない動作モード（非フルトレースモード）でトレース出力した場合、トレース情報が欠如して、完全な履歴を復元することができない。一方、フルトレースモードでトレース出力した場合には、ＣＰＵの動作時間に影響を及ぼし、特に、リアルタイム応用においてはシステムが成立しない可能性が高くなる。
【００１９】
（４）高速分岐命令について、従来技術と同様に、分岐先アドレスレジスタの設定命令と高速分岐命令とを対応付けて高速分岐命令の分岐先アドレスの出力を抑制することで、上記（３）の問題は解決されるが、今度は、高速分岐命令に先行する分岐先アドレスレジスタの設定命令のトレース情報がトレースメモリに残っていない場合に、分岐先アドレスの復元ができなくなるといった上記（２）と同様の問題が生じる。
【００２０】
上記問題に鑑み、本発明は、プログラムを実行可能な半導体集積回路について、トレース情報出力の最適化を課題とする。また、本発明は、そのような半導体集積回路から出力されたトレース情報に基づいて、プログラム実行履歴を正確に復元することを課題とする。
【課題を解決するための手段】
【００２１】
上記課題を解決するために本発明が講じた手段は、半導体集積回路として、コール命令を実行したとき、第１の信号をアサートするとともにこのコール命令に係る分岐先アドレス及び復帰先アドレスを出力し、割込み分岐を実行したとき、第２の信号をアサートするとともにこの割込み分岐に係る分岐先アドレス及び復帰先アドレスを出力し、復帰命令を実行したとき、第３の信号をアサートするとともにこの復帰命令に係る分岐先アドレスを出力するＣＰＵと、第１及び第２の信号のいずれかがアサートされたとき、ＣＰＵから出力された復帰先アドレスをプッシュし、第３の信号がアサートされたとき、プッシュされている復帰先アドレスをポップするスタックメモリと、スタックメモリからポップされた復帰先アドレスとＣＰＵから出力された分岐先アドレスとを比較する比較器と、ＣＰＵから第１から第３の信号を含む複数の信号を受け、これら複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、ＣＰＵから出力された分岐先アドレスを受け、トレースパケット制御部の制御により当該アドレスを出力するアドレスレジスタとを備えたものとする。ここで、トレースパケット制御部は、第３の信号がアサートされ、かつ、比較器から受けた比較結果が不一致を示すとき、アドレスレジスタにアドレス出力を指示するものとする。
【００２２】
この発明によると、ＣＰＵによってコール命令又は割込み分岐が実行されたとき、スタックメモリにその復帰先アドレスがプッシュされ、ＣＰＵによって復帰命令が実行されたときスタックメモリにプッシュされている復帰先アドレスがポップされ、比較器によって、このポップされたアドレスとＣＰＵから出力された実際の分岐先との比較が行われ、不一致の場合、トレースパケット制御部から指示を受けたアドレスレジスタによって、ＣＰＵから出力された分岐先アドレスがトレース情報として出力される。すなわち、復帰命令が実行されたとき、その分岐先が予想している分岐先と異なる場合にのみ、その分岐先アドレスがトレース情報として出力され、トレース情報出力が最適化される。
【００２３】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムからコール命令を検出したとき及びトレース情報から割込み分岐の実行を示す符号を検出したときのいずれかのとき、ソースプログラムから復帰先アドレスを得てプッシュするとともにトレース情報から分岐先アドレスを得て復元し、ソースプログラムから復帰命令を検出したとき、プッシュされている復帰先アドレスをポップして復元するものとする。
【００２４】
この発明によると、実行履歴復元部によって、ソースプログラムからコール命令が検出されたとき又はトレースメモリに格納されたトレース情報から割込み分岐の実行を示す符号が検出されたとき、ソースプログラムから得た復帰先アドレスがプッシュされるとともにトレース情報から得た分岐先アドレスが復元され、また、ソースプログラムから復帰命令が検出されたとき、プッシュされている復帰先アドレスがポップされて復元される。したがって、ソースプログラムからだけでは追跡できないタスク切替えや割込み処理時の分岐先アドレスがトレース情報から獲得され、正確にプログラム実行履歴が復元される。
【００２５】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する方法として、ソースプログラムからコール命令を検出するステップと、トレース情報から割込み分岐の実行を示す符号を検出するステップと、ソースプログラムから復帰命令を検出するステップと、上記のコール命令及び符号のいずれか一方が検出されたとき、ソースプログラムから復帰先アドレスを得てプッシュするステップと、上記のコール命令及び符号のいずれか一方が検出されたとき、トレース情報から分岐先アドレスを得て復元するステップと、上記の復帰命令が検出されたとき、プッシュされている復帰先アドレスをポップして復元するステップとを備えたものとする。
【００２６】
この発明によると、ソースプログラムからコール命令が検出されたとき又は格納されたトレース情報から割込み分岐の実行を示す符号が検出されたとき、ソースプログラムから得た復帰先アドレスがプッシュされるとともにトレース情報から得た分岐先アドレスが復元され、また、ソースプログラムから復帰命令が検出されたとき、プッシュされている復帰先アドレスがポップされて復元される。したがって、ソースプログラムからだけでは追跡できないタスク切替えや割込み処理時の分岐先アドレスがトレース情報から獲得され、正確にプログラム実行履歴が復元される。
【００２７】
好ましくは、上記の半導体集積回路において、トレースパケット制御部は、第３の信号がアサートされ、かつ、スタックメモリにアンダーフローが発生しているとき、アドレスレジスタにアドレス出力を指示するものとする。
【００２８】
この発明によると、スタックメモリが空であるにもかかわらず復帰命令が実行されたとき、予想外となる分岐先アドレスがトレース情報として出力される。
【００２９】
また、好ましくは、上記の半導体集積回路は、トレースが開始されたとき、第４の信号をアサートする同期要求生成回路を備えているものとする。また、スタックメモリは、第４の信号がアサートされたとき、記憶内容を初期化するものとする。
【００３０】
この発明によると、プログラム実行の途中からトレースが開始された場合、スタックメモリの内容が初期化され、トレース開始よりも前に実行されたコール命令等に対応する復帰命令が実行されたとき、スタックメモリに空の状態となっているため、その復帰命令の分岐先アドレスと不一致を起こし、以降の復帰命令に係る分岐先アドレスがトレース情報として出力される。これにより、開発支援装置によって、トレース開始以前の実行履歴が正確に復元される。
【００３１】
より好ましくは、ＣＰＵは、命令を実行したとき、この実行した命令の実行アドレスを出力するものであり、上記の半導体集積回路は、ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備えているものとする。ここで、アドレスレジスタは、ＣＰＵから出力された分岐先アドレスに代えて、セレクタから出力されたアドレスを受け、トレースパケット制御部の制御により当該アドレスを出力するものとし、また、トレースパケット制御部は、第４の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、第１及び第２の信号がネゲートされているとき、セレクタに実行アドレスの選択を指示する一方、これ以外のとき、セレクタに、分岐先アドレスの選択を指示するものとする。
【００３２】
この発明によると、トレースを開始したとき、実行される命令が通常の順次実行命令であればトレース情報としてその実行アドレスが出力され、分岐命令であればその分岐先アドレスが出力される。これにより、トレース開始点のアドレス情報が出力される。
【００３３】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムからコール命令を検出したとき及びトレース情報から割込み分岐の実行を示す符号を検出したときのいずれかのとき、ソースプログラムから復帰先アドレスを得てプッシュするとともにトレース情報から分岐先アドレスを得て復元し、ソースプログラムから復帰命令を検出したとき、プッシュされている復帰先アドレスをポップして復元するものであり、かつ、トレース情報からトレース開始を示す符号を検出したとき、プッシュしている復帰先アドレスを初期化するとともに、トレース情報から当該符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するものとする。
【００３４】
この発明によると、実行履歴復元部によって、トレースメモリに格納されたトレース情報からトレース開始を示す符号が検出されたとき、プッシュしている復帰先アドレスが初期化され、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【００３５】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する方法として、ソースプログラムからコール命令を検出するステップと、ソースプログラムから復帰命令を検出するステップと、トレース情報から割込み分岐の実行を示す第１の符号を検出するステップと、トレース情報からトレース開始を示す第２の符号を検出するステップと、コール命令及び第１の符号のいずれか一方が検出されたとき、ソースプログラムから復帰先アドレスを得てプッシュするステップと、コール命令及び第１の符号のいずれか一方が検出されたとき、トレース情報から分岐先アドレスを得て復元するステップと、復帰命令が検出されたとき、プッシュされている復帰先アドレスをポップして復元するステップと、第２の符号が検出されたとき、プッシュされた復帰先アドレスを初期化するステップと、第２の符号が検出されたとき、トレース情報から第２の符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するステップとを備えたものとする。
【００３６】
この発明によると、トレース情報からトレース開始を示す符号が検出されたとき、プッシュしている復帰先アドレスが初期化され、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【００３７】
一方、上記課題を解決するために本発明が講じた手段は、半導体集積回路として、レジスタに格納された分岐先アドレスに分岐する間接分岐命令を持つＣＰＵであって、このレジスタを更新したとき、第１の信号をアサートし、間接分岐命令を実行したとき、第２の信号をアサートするとともにこの間接分岐命令に係る分岐先アドレスを出力するＣＰＵと、第１の信号がアサートされてから第２の信号がアサートされるまでの間、第３の信号をアサートするループ検出回路と、ＣＰＵから第２の信号を含む複数の信号を受け、これら複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、ＣＰＵから出力された分岐先アドレスを受け、トレースパケット制御部の制御により当該アドレスを出力するアドレスレジスタとを備えたものとする。ここで、トレースパケット制御部は、第２及び第３の信号がアサートされたとき、アドレスレジスタにアドレス出力を指示するものとする。
【００３８】
この発明によると、ループ検出回路によって、高速分岐命令を伴う高速ループ処理の開始が検出され、ＣＰＵによってそのループ処理において１回目の間接分岐命令が実行されたとき、その分岐先アドレスがトレース情報として出力され、２回目以降の間接分岐命令の実行に対しては、分岐先アドレスが出力されない。これにより、間接分岐命令を実装した半導体集積回路のトレース情報出力が最適化される。
【００３９】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、この分岐先アドレスを記憶するとともにこの分岐先アドレスを復元し、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、記憶した分岐先アドレスを復元するものとする。
【００４０】
この発明によると、実行履歴復元部によって、ソースプログラムから間接分岐命令が検出され、かつ、トレースメモリに格納されたトレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号が検出されたとき、この分岐先アドレスが記憶されるとともにこの分岐先アドレスが復元され、また、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号が検出されたとき、記憶した分岐先アドレスが復元される。したがって、間接分岐命令を含む高速ループ処理に関してトレース情報に２回目以降の実行に係る間接分岐命令の分岐先アドレスが含まれていない場合であっても、正確にプログラム実行履歴が復元される。
【００４１】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによる前記ソースプログラムの実行履歴を復元する方法として、ソースプログラムから間接分岐命令を検出するステップと、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを記憶するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを復元するステップと、間接分岐命令及び第２の符号が検出されたとき、記憶された分岐先アドレスを復元するステップとを備えたものとする。
ことを特徴とする実行履歴復元方法。
【００４２】
この発明によると、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号が検出されたとき、この分岐先アドレスが記憶されるとともにこの分岐先アドレスが復元され、また、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号が検出されたとき、記憶した分岐先アドレスが復元される。したがって、間接分岐命令を含む高速ループ処理に関してトレース情報に２回目以降の実行に係る間接分岐命令の分岐先アドレスが含まれていない場合であっても、正確にプログラム実行履歴が復元される。
【００４３】
具体的には、上記の半導体集積回路において、ループ検出回路は、第１の信号がアサートされたとき、第３の信号をアサートされた状態に保持する保持回路と、第２の信号がアサートされたとき、保持回路によって保持された状態をリセットするリセット回路とを有するものとする。
【００４４】
好ましくは、上記の半導体集積回路は、トレースが開始されたとき、第４の信号をアサートする同期要求生成回路を備えているものとする。また、ループ検出回路は、第４の信号がアサートされてから前記の信号がアサートされるまでの間、第３の信号をアサートするものとする。
【００４５】
この発明によると、プログラム実行の途中からトレースが開始された場合、再度、ループ検出回路によってループ処理が検出され、トレース開始よりも前に開始された高速ループ処理において２回目以降の実行であってトレース開始後の初めて実行に係る間接分岐命令の分岐先アドレスが、トレース情報として出力される。これにより、開発支援装置によって、トレース開始以前の実行履歴が正確に復元される。
【００４６】
より好ましくは、ＣＰＵは、命令を実行したとき、この実行した命令の実行アドレスを出力するものであり、上記の半導体集積回路は、ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備えているものとする。ここで、アドレスレジスタは、ＣＰＵから出力された分岐先アドレスに代えて、セレクタから出力されたアドレスを受け、トレースパケット制御部の制御により当該アドレスを出力するものとし、また、トレースパケット制御部は、第４の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、第２の信号がネゲートされているとき、セレクタに実行アドレスの選択を指示する一方、これ以外のとき、セレクタに、分岐先アドレスの選択を指示するものとする。
【００４７】
この発明によると、トレースを開始したとき、実行される命令が通常の順次実行命令であればトレース情報としてその実行アドレスが出力され、間接分岐命令であればその分岐先アドレスが出力される。これにより、トレース開始点のアドレス情報が出力される。
【００４８】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、分岐先アドレスを記憶するとともにこの分岐先アドレスを復元し、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、記憶した分岐先アドレスを復元するものであり、かつ、トレース情報からトレース開始を示す符号を検出したとき、トレース情報から当該符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するものとする。
【００４９】
この発明によると、実行履歴復元部によって、トレースメモリに格納されたトレース情報からトレース開始を示す符号が検出されたとき、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【００５０】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する方法として、ソースプログラムから間接分岐命令を検出するステップと、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、トレース情報からトレース開始を示す第３の符号を検出するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを記憶するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを復元するステップと、間接分岐命令及び第２の符号が検出されたとき、記憶された分岐先アドレスを復元するステップと、第３の符号が検出されたとき、トレース情報から第３の符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するステップとを備えたものとする。
【００５１】
この発明によると、トレース情報からトレース開始を示す符号が検出されたとき、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【００５２】
一方、上記課題を解決するために本発明が講じた手段は、半導体集積回路として、レジスタに格納された分岐先アドレスに分岐する間接分岐命令を持つＣＰＵであって、間接分岐命令を実行したとき、第１の信号をアサートするとともにこの間接分岐命令に係る分岐先アドレスを出力するＣＰＵと、第１の信号がアサートされたとき、格納しているアドレスを出力し、ＣＰＵから出力された分岐先アドレスを格納する第１のアドレスレジスタと、第１のアドレスレジスタから出力された分岐先アドレスとＣＰＵから出力された分岐先アドレスとを比較する比較器と、ＣＰＵから第１の信号を含む複数の信号を受け、これら複数の信号に基づいてトレース状態符号を出力するトレースパケット制御部と、ＣＰＵから出力された分岐先アドレスを受け、トレースパケット制御部の制御により当該アドレスを出力する第２のアドレスレジスタとを備えたものとする。ここで、トレースパケット制御部は、第１の信号がアサートされ、かつ、比較器から受けた比較結果が不一致を示すとき、第２のアドレスレジスタにアドレス出力を指示するものとする。
【００５３】
この発明によると、ＣＰＵによって間接分岐命令が実行されると、第１のアドレスレジスタに格納されている分岐先アドレスが出力されその内容は更新され、比較器によって、当該実行された間接分岐命令の分岐先アドレスと第１のアドレスレジスタから出力された分岐先アドレスが不一致のとき、ＣＰＵから出力された分岐先アドレスがトレース情報として出力され、一致のときは出力されない。すなわち、間接分岐命令を含む高速ループ処理において１回目の間接分岐命令の実行に対してはその分岐先アドレスがトレース情報として出力され、２回目以降の間接分岐命令の実行に対しては、分岐先アドレスが出力されない。これにより、間接分岐命令を実装した半導体集積回路のトレース情報出力が最適化される。
【００５４】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、この分岐先アドレスを記憶するとともにこの分岐先アドレスを復元し、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、記憶した分岐先アドレスを復元するものとする。
【００５５】
この発明によると、実行履歴復元部によって、ソースプログラムから間接分岐命令が検出され、かつ、トレースメモリに格納されたトレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号が検出されたとき、この分岐先アドレスが記憶されるとともにこの分岐先アドレスが復元され、また、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号が検出されたとき、記憶した分岐先アドレスが復元される。したがって、間接分岐命令を含む高速ループ処理に関してトレース情報に２回目以降の実行に係る間接分岐命令の分岐先アドレスが含まれていない場合であっても、正確にプログラム実行履歴が復元される。
【００５６】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによる前記ソースプログラムの実行履歴を復元する方法として、ソースプログラムから間接分岐命令を検出するステップと、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを記憶するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを復元するステップと、間接分岐命令及び第２の符号が検出されたとき、記憶された分岐先アドレスを復元するステップとを備えたものとする。
ことを特徴とする実行履歴復元方法。
【００５７】
この発明によると、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号が検出されたとき、この分岐先アドレスが記憶されるとともにこの分岐先アドレスが復元され、また、ソースプログラムから間接分岐命令が検出され、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号が検出されたとき、記憶した分岐先アドレスが復元される。したがって、間接分岐命令を含む高速ループ処理に関してトレース情報に２回目以降の実行に係る間接分岐命令の分岐先アドレスが含まれていない場合であっても、正確にプログラム実行履歴が復元される。
【００５８】
好ましくは、上記の半導体集積回路は、トレースが開始されたとき、第２の信号をアサートする同期要求生成回路を備えているものとする。また、第１のアドレスレジスタは、第２の信号がアサートされたとき、記憶内容を初期化するものとする。
【００５９】
この発明によると、プログラム実行の途中からトレースが開始された場合、第１のアドレスレジスタの記憶内容が初期化され、トレース開始よりも前に開始された高速ループ処理において２回目以降の実行であってトレース開始後の初めて実行に係る間接分岐命令の分岐先アドレスが、トレース情報として出力される。これにより、開発支援装置によって、トレース開始以前の実行履歴が正確に復元される。
【００６０】
より好ましくは、ＣＰＵは、命令を実行したとき、この実行した命令の実行アドレスを出力するものであり、上記の半導体集積回路は、ＣＰＵから出力された分岐先アドレス及び実行アドレスのいずれか一方を選択的に出力するセレクタを備えているものとする。ここで、第２のアドレスレジスタは、ＣＰＵから出力された分岐先アドレスに代えて、セレクタから出力されたアドレスを受け、トレースパケット制御部の制御により当該アドレスを出力するものとし、また、トレースパケット制御部は、第２の信号がアサートされたとき、トレース状態符号としてトレース開始を示す符号を出力し、さらに、第１の信号がネゲートされているとき、セレクタに実行アドレスの選択を指示する一方、これ以外のとき、セレクタに、分岐先アドレスの選択を指示するものとする。
【００６１】
この発明によると、トレースを開始したとき、実行される命令が通常の順次実行命令であればトレース情報としてその実行アドレスが出力され、間接分岐命令であればその分岐先アドレスが出力される。これにより、トレース開始点のアドレス情報が出力される。
【００６２】
また、この半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元する開発支援装置として、この半導体集積回路から出力されたトレース状態符号及びアドレスをトレース情報として格納するトレースメモリと、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレースメモリに格納されたトレース情報とを順に対応させながら、このＣＰＵによる前記ソースプログラムの実行履歴を復元する実行履歴復元部とを備えたものとし、実行履歴復元部は、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す符号を検出したとき、分岐先アドレスを記憶するとともにこの分岐先アドレスを復元し、ソースプログラムから間接分岐命令を検出し、かつ、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す符号を検出したとき、記憶した分岐先アドレスを復元するものであり、かつ、トレース情報からトレース開始を示す符号を検出したとき、トレース情報から当該符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するものとする。
【００６３】
この発明によると、実行履歴復元部によって、トレースメモリに格納されたトレース情報からトレース開始を示す符号が検出されたとき、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【００６４】
また、この半導体集積回路からトレース情報としてトレース状態符号及びアドレスを得て、この半導体集積回路におけるＣＰＵによって実行されたソースプログラムとトレース情報とを順に対応させながら、このＣＰＵによるソースプログラムの実行履歴を復元する方法として、ソースプログラムから間接分岐命令を検出するステップと、トレース情報から分岐先アドレスを伴った間接分岐命令の実行を示す第１の符号を検出するステップと、トレース情報から分岐先アドレスを伴わない間接分岐命令の実行を示す第２の符号を検出するステップと、トレース情報からトレース開始を示す第３の符号を検出するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを記憶するステップと、間接分岐命令及び第１の符号が検出されたとき、第１の符号に伴った分岐先アドレスを復元するステップと、間接分岐命令及び第２の符号が検出されたとき、記憶された分岐先アドレスを復元するステップと、第３の符号が検出されたとき、トレース情報から第３の符号に対応する実行アドレス及び分岐先アドレスのいずれかを得て復元するステップとを備えたものとする。
【００６５】
この発明によると、トレース情報からトレース開始を示す符号が検出されたとき、トレース情報から得た当該符号に対応する実行アドレス及び分岐先アドレスのいずれかが復元される。したがって、トレース開始直後から実行履歴が正確に復元される。
【発明の効果】
【００６６】
本発明によると、プログラム実行履歴復元の際にソースプログラムの参照によって復元可能な分岐先アドレスはトレース情報として出力されず、ソースプログラムの参照のみでは辿れなくなるであろう分岐先アドレス、例えば、タスク切替えや割込み処理等が発生した場合やプログラム実行よりも遅れてトレースが開始された場合等の復帰命令に係る分岐先アドレスがトレース情報として出力される。これにより、半導体集積回路のトレース情報出力が最適化される。また、このような半導体集積回路から出力されたトレース情報に基づいて、正確なプログラム実行履歴が復元される。
【発明を実施するための最良の形態】
【００６７】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
【００６８】
（第１の実施形態）
図１は、本発明の第１の実施形態に係る半導体集積回路の構成を示す。本実施形態に係る半導体集積回路１は、ＣＰＵ１００、トレースパケット制御部２００、スタックメモリ３００、比較器４００、及びシフトレジスタ７００を備えている。
【００６９】
ＣＰＵ１００は、命令実行が完了したとき、命令実行完了信号（EOI）１０１を、直接分岐命令を実行したとき、直接分岐命令実行信号（JMPDIR）１０２を、間接分岐命令を実行したとき、間接分岐命令実行信号（JMPIND）１０３を、条件分岐命令を実行したとき、条件成立信号（JMPTKN）１０４を、関数コール命令を実行したとき、関数コール命令実行信号（CALL）１０５を、関数リターン命令又は割込みリターン命令を実行したとき、リターン命令実行信号（RET）１０６を、そして、割込みを受理し分岐を実行したとき、割込み実行信号（EXP）１０８を、それぞれアサートする。また、ＣＰＵ１００は、関数コール命令、割込み分岐、関数リターン命令、又は割込みリターン命令を実行したとき、その分岐先アドレス１１０を、関数コール命令又は割込み分岐を実行したとき、その復帰先アドレス１２０を、それぞれ出力する。
【００７０】
スタックメモリ３００は、ＯＲ回路３５０によって演算された信号CALL及びEXPの論理和をプッシュ信号として、信号RETをポップ信号として、そして、復帰先アドレス１２０をデータとして、それぞれ受ける。すなわち、スタックメモリ３００は、ＣＰＵ１００によって関数コール命令又は割込み分岐が実行されたとき、ＣＰＵ１００から出力された復帰先アドレス１２０をプッシュし、関数リターン命令又は割込みリターン命令が実行されたとき、プッシュしている復帰先アドレスをポップしてスタックトップデータ３０１を出力する。この出力されたデータ３０１は、いわば復帰先アドレスの期待値を表している。また、スタックメモリ３００は、スタック内容が有効であるとき、スタック有効信号３０２をアサートする。
【００７１】
比較器４００は、スタックメモリ３００から出力されたデータ３０１とＣＰＵ１００から出力された分岐先アドレス１１０とを比較し、これらの一致／不一致を比較結果信号４０１として出力する。比較結果信号４０１は、一致のときはアサートされ、不一致のときはネゲートされる。なお、比較結果信号４０１及びスタック有効信号３０２はＡＮＤ回路５００によって論理積がとられ、復帰先アドレス一致信号５０１としてトレースパケット制御部２００に送られる。
【００７２】
図２は、トレースパケット制御部２００の状態デコード表を示す。トレースパケット制御部２００は、信号EOI、JMPDIR、JMPIND、CALL、RET、JMPTKN及びEXP、並びに復帰先アドレス一致信号５０１を受け、図２に示した状態デコード表に従って、分岐先アドレスロードイネーブル信号（TPCLDEN）２０１及びトレース状態ポート（PCST）９０１に出力する符号２０４を決定する。
【００７３】
シフトレジスタ７００は、信号TPCLDENがアサートされたとき、分岐先アドレス１１０をロードし、これをシリアルデータ化してデータ７０１を分岐先アドレス出力ポート（TPC）９０２に送る。
【００７４】
一方、本実施形態に係る開発支援装置は、図４８に示した開発支援装置と同様の構成をしている。トレース情報蓄積装置２におけるトレースメモリ制御部１０１０及びシリアル−パラレル変換器１０２０は、それぞれ、半導体集積回路１から出力されたトレース状態信号９１１及び分岐先アドレス信号９１２を整形し、トレースメモリ１０３０にトレース情報として蓄積する。ホストコンピュータ３は、トレース情報蓄積装置２にトレースメモリ読み出し要求１０４１を送り、トレースメモリ出力１０３１を取得し、この取得した情報とソースプログラムと順に対応させながら、半導体集積回路１のプログラム実行履歴を復元する。なお、実行履歴復元部としてのホストコンピュータ３の動作が従来とは異なる。これについては後述する。
【００７５】
次に、本実施形態に係る半導体集積回路１及び開発支援装置によるトレース情報出力及び実行履歴復元について、図３に示したプログラムを実行する場合を例に説明する。この例では、半導体集積回路１は、アドレス"0x50000000"（実行順番"1"）の命令"命令1"からプログラム実行及びトレースを開始し、アドレス"0x50000210"（実行順番"14"）の命令"ret"を実行した後、割込みを受理して分岐を実行し、割込みハンドラ"int0h"でタスク"taskA"からタスク"taskB"へタスク切替えを行い、アドレス"0x40000110"（実行順番"19"）の命令"rti"によってアドレス"0x50000610"に復帰する。なお、レジスタ等の保存・復帰の処理は省略している。
【００７６】
図４は、半導体集積回路１が図３に示したプログラムを実行したときに出力するトレース情報を示す。図４に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、以下の説明において、スタックメモリ３００にＡ，Ｂ，Ｃ，Ｄの順にアドレスがプッシュされた場合、そのスタック内容を（D,C,B,A）として表すものとする。スタックメモリ３００がポップされるとＤ，Ｃ，Ｂ，Ａの順にスタックトップデータ３０１が出力される。
【００７７】
ＣＰＵ１００が実行順番"1,2,4,5,7,8,9,11,12,15,16,17,18,22,23"の通常の順次実行命令を実行したとき、信号EOIのみがアサートされる（出力"1"）。このとき、信号TPCLDENはアサートされず（出力"0"）、トレース情報として符号"SEQ"のみが出力される。
【００７８】
ＣＰＵ１００がアドレス"0x50000008"（実行順番"3"）のコール命令"call Sub_A"を実行したとき、信号JMPDIR、CALL、JMPTKN及びEOIがアサートされる。このとき、ＯＲ回路３５０から出力されたプッシュ信号がアサートされることによって、ＣＰＵ１００から出力された復帰先アドレス１２０（"0x5000000c"）がプッシュされ、スタックメモリ３００の内容は、
（0x5000000c）
となる。また、このとき、信号TPCLDENはアサートされず、トレース情報として符号"NPC"のみが出力される。
【００７９】
同様に、ＣＰＵ１００がアドレス"0x50000108"（実行順番"6"）のコール命令"call Sub_B"を実行したとき、復帰先アドレス１２０（"0x5000010c"）がプッシュされ、スタックメモリ３００の内容は、
（0x5000010c,0x5000000c）
となる。このとき、トレース情報として符号"NPC"のみが出力される。
【００８０】
ＣＰＵ１００がアドレス"0x5000020c"（実行順番"10"）のコール命令"call (a0)"を実行したとき、復帰先アドレス１２０（"0x50000210"）がプッシュされ、スタックメモリ３００の内容は、
（0x50000210,0x5000010c,0x5000000c）
となる。このとき、分岐条件が成立しているため信号JMPINDがアサートされ、信号TPCLDENがアサートされる（出力"1"）。これにより、トレース情報として符号"JMP"が出力される。また、信号TPCLDENがアサートされることにより、シフトレジスタ７００は、ＣＰＵ１００から出力された分岐先アドレス１１０（"0x50000300"）を受け、トレース情報として分岐先アドレス"0x50000300"が出力される。
【００８１】
ＣＰＵ１００がアドレス"0x50000308"（実行順番"13"）のリターン命令"ret"を実行したとき、信号RETがアサートされる。そして、復帰先アドレスの期待値"0x500000210"がポップされ、スタックメモリ３００の内容は、
（0x5000010c,0x5000000c）
となる。このとき、ポップされた期待値（"0x500000210"）とＣＰＵ１００から出力された実際の分岐先アドレス１１０（"0x500000210"）とは一致するため、比較結果信号４０１がアサートされる（出力"1"）。また、このとき、スタックメモリ３００の内容は有効であることからスタック有効信号３０２がアサートされており、復帰先アドレス一致信号５０１がアサートされる（出力"1"）。信号RET及び復帰先アドレス一致信号５０１がアサートされているとき、信号TPCLDENはアサートされず、トレース情報として符号"NPC"のみが出力される。
【００８２】
同様に、ＣＰＵ１００が実行順番"14"（アドレス"0x50000210"）のリターン命令"ret"を実行したとき、復帰先アドレスの期待値"0x5000010c"がポップされ、スタックメモリ３００の内容は、
（0x5000000c）
となる。このとき、ポップされた期待値（"0x5000010c"）とＣＰＵ１００から出力された分岐先アドレス１１０（"0x5000010c"）とは一致するため、トレース情報として符号"NPC"のみが出力される。
【００８３】
実行順番"14"（アドレス"0x50000210"）のリターン命令"ret"の実行後、その復帰先アドレス"0x5000010c"のリターン命令"ret"の実行前に割込みが発生し、ＣＰＵ１００はこの割込みを受理し、信号EXPがアサートされる。このとき、ＯＲ回路３５０から出力されたプッシュ信号がアサートされることによって、ＣＰＵ１００から出力された復帰先アドレス１２０（"0x5000010c"）がプッシュされ、スタックメモリ３００の内容は、
（0x5000010c,0x5000000c）
となる。また、このとき、信号TPCLDENがアサートされ、トレース情報として符号"EXP"及び分岐先アドレス"0x40000100"が出力される。
【００８４】
割込みハンドラ"int0h"ではスタックの切替えが行われ、ＣＰＵが実行順番"19"（アドレス"0x40000110"）の割込みリターン命令"rti"を実行したとき、信号RETがアサートされる。そして、復帰先アドレスの期待値"0x5000010c"がポップされ、スタックメモリ３００の内容は、
（0x5000000c）
となる。このとき、ＣＰＵ１００から出力された分岐先アドレス１１０は"0x50000610"であり、ポップされた期待値"0x5000010c"と一致しないため、比較結果信号４０１はアサートされず（出力"0"）、復帰先アドレス一致信号５０１もまたアサートされない。信号RETがアサートされ、かつ、復帰先アドレス一致信号５０１がアサートされていないとき、信号TPCLDENがアサートされ、トレース情報として符号"JMP"及び分岐先アドレス"0x50000610"が出力される。
【００８５】
同様に、ＣＰＵ１００が実行順番"20"（アドレス"0x50000610"）のリターン命令"ret"を実行したとき、復帰先アドレスの期待値"0x5000000c"がポップされ、スタックメモリ３００の内容は、
（）
となる。このとき、ＣＰＵ１００から出力された分岐先アドレス１１０は"0x5000050c"であり、ポップされた期待値"0x5000000c"と一致しないため、トレース情報として符号"JMP"及び分岐先アドレス"0x5000050c"が出力される。
【００８６】
ＣＰＵ１００が実行順番"21"（アドレス"0x5000050c"）のリターン命令"ret"を実行したとき、信号RETがアサートされるが、スタックメモリ３００は空の状態であるためアンダーフローが発生する。これにより、スタック有効信号３０２がネゲートされ（出力"0"）、復帰先アドレス一致信号５０１もまたネゲートされる（出力"0"）。信号RETがアサートされ、かつ、復帰先アドレス一致信号５０１がアサートされていないとき、信号TPCLDENがアサートされ、トレース情報として符号"JMP"及び分岐先アドレス"0x5000040c"が出力される。
【００８７】
以上の動作によって、本実施形態に係る半導体集積回路１から、図４に示したトレース情報が出力される。
【００８８】
一方、図５及び図６は、本実施形態に係る開発支援装置によって実行される実行履歴復元方法のフローチャートである。また、図７は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図７に示したプログラム実行履歴は、以下に説明する実行履歴復元方法の実行の結果として得られたものである。
【００８９】
処理開始時のトレースポインタ（TP）は"24"であり（IP=24）、まず、ステップ２００１で、エンドトレースポインタ（ETP）が現在のトレースポインタに（ETP=24）、トレースポインタ（TP）がトレースメモリの先頭アドレスに（TP=0）、そして、実行ポインタ（IP）がトレース開始アドレスに（IP=0x50000000）、それぞれ設定される。
【００９０】
TP=0のとき、IP=0x50000000であり、ステップ２００６で、ソースプログラムから得られるプログラム部分"0x50000000 taskA:命令1"が復元され表示される。このとき、トレース情報に示された符号は"SEQ"であるので（ステップ２００７，２００８，２０１７，２０２４及び２０３２）、ステップ２０３３でIPがインクリメントされ（IP=0x5000004）、ステップ２０３４でTPがインクリメントされた後（TP=1）、ステップ２００６に戻る。TP=1,3,4,6,7,8,10,11,15,16,17,18,22,23のときも同様に処理される。
【００９１】
TP=2のとき、IP=0x50000008であり、トレース情報に示された符号は"NPC"であり（ステップ２００７及び２００８）、ソースプログラムに示された命令は"call Sub_A"、すなわち、コール命令（CALL）であることから（ステップ２００９及び２０１４）、ステップ２０１５で復帰先アドレスとして現在のIPの次のアドレス"0x5000000c"がソフトスタックにプッシュされ、ソフトスタックの内容は、
（0x5000000c）
となる。そして、ステップ２０１６でIPがソースプログラムに示された命令"call Sub_A"の分岐先アドレスに設定され（IP=0x50000100）、ステップ２０３４でTPがインクリメントされた後（TP=3）、ステップ２００６に戻る。TP=5のときも同様に処理され、ソフトスタックの内容は、
（0x5000010c,0x5000000c）
となる。
【００９２】
TP=9のとき、IP=0x5000020cであり、トレース情報に示された符号は"JMP"であり（ステップ２００７，２００８及び２０１７）、ソースプログラムに示された命令は"call (a0)"、すなわち、コール命令（CALL）であることから（ステップ２０１８及び２０２０）、ステップ２０２１で復帰先アドレスとして現在のIPの次のアドレス"0x50000210"がソフトスタックにプッシュされ、ソフトスタックの内容は、
（0x50000210,0x5000010c,0x5000000c）
となる。そして、ステップ２０２８でIPがトレース情報に示されたTP=9に対応する分岐先アドレス"0x50000300"に設定され（IP=0x50000300）、ステップ２０３４でTPがインクリメントされた後（TP=10）、ステップ２００６に戻る。
【００９３】
TP=12のとき、IP=0x50000308であり、トレース情報に示された符号は"NPC"であり（ステップ２００７及び２００８）、ソースプログラムに示された命令は"ret"、すなわち、リターン命令（RET）であることから（ステップ２００９）、ステップ２０１０でソフトスタックから復帰先アドレス"0x50000210"がポップされ、ソフトスタックの内容は、
（0x5000010c,0x5000000c）
となる。そして、ステップ２０１１でIPがポップされたアドレスに設定され（IP=0x50000210）、ステップ２０３４でTPがインクリメントされた後（TP=13）、ステップ２００６に戻る。
【００９４】
TP=13のときもTP=12のときと同様に処理され、IPがポップされたアドレスに設定される（IP=0x5000010c）。なお、TP=13の処理終了時のソフトスタックの内容は、
（0x5000000c）
となる。
【００９５】
TP=14のとき、IP=0x5000010cであり、トレース情報に示された符号は"EXP"であることから（ステップ２００７，２００８，２０１７及び２０２４）、ステップ２０２５で現在のIPが示すアドレス"0x5000010c"がソフトスタックにプッシュされ、ソフトスタックの内容は、
（0x5000010c,0x5000000c）
となる。そして、ステップ２０２８でIPがトレース情報に示されたTP=14に対応する分岐先アドレス"0x40000100"に設定され（IP=0x40000100）、ステップ２０３４でTPがインクリメントされた後（TP=15）、ステップ２００６に戻る。
【００９６】
TP=19のとき、IP=0x40000110であり、トレース情報に示された符号は"JMP"であり（ステップ２００７，２００８及び２０１７）、ソースプログラムに示された命令は"rti"、すなわち、リターン命令（RET）であることから（ステップ２０１８）、ステップ２０１９でソフトスタックから復帰先アドレス"0x5000010c"がポップされ、ソフトスタックの内容は、
（0x5000000c）
となる。しかし、トレース情報にTP=19に対応する分岐先アドレス"0x50000610"が含まれているため、ポップされた復帰先アドレス"0x5000010c"は破棄され、ステップ２０２８でIPがトレース情報に示されたTP=19に対応する分岐先アドレス"0x50000610"に設定され（IP=0x50000610）、ステップ２０３４でTPがインクリメントされた後（TP=20）、ステップ２００６に戻る。TP=20,21のときも同様に処理される。
【００９７】
以上の処理によって、本実施形態に係る開発支援装置によって、図７に示したプログラム実行履歴が復元される。
【００９８】
以上、本実施形態によると、ＣＰＵによるプログラム実行のトレース情報として、リターン命令に係る分岐先アドレスは、通常は出力されず、スタック切替えや割込み処理等によって期待した復帰先と異なる場合にのみ出力される。すなわち、スタック切替えや割込み処理等が発生した場合であっても正確なプログラム実行履歴を復元することができるように、必要最低限のリターン命令に係る分岐先アドレスが出力され、トレース情報出力が最適化される。また、このように最適化されたトレース情報から、正確にプログラム実行履歴を復元することができる。
【００９９】
（第２の実施形態）
図８は、本発明の第２の実施形態に係る半導体集積回路の構成を示す。本実施形態に係る半導体集積回路１は、第１の実施形態に係る半導体集積回路に、同期要求要求生成回路８００及びセレクタ７５０を追加した構成をしている。以下、第１の実施形態に係る半導体集積回路と比較して異なる部分について説明する。
【０１００】
ＣＰＵ１００は、命令を実行したとき、その命令の実行アドレス１１１を出力する。セレクタ７５０は、ＣＰＵ１００から分岐先アドレス１１０及び実行アドレス１１１を受け、トレースパケット制御部２００から出力される選択信号２０２に従って、これら入力したアドレスのいずれか一方を出力する。シフトレジスタ７００は、セレクタ７５０から出力されたアドレス７５１を受ける。
【０１０１】
同期要求生成回路８００は、半導体集積回路１の起動時等のシステムリセット時、ＣＰＵ１００によってタスクが切替えられたとき等のタスク切替え時、トレース情報出力を開始するトレース開始時、開発支援装置からの要求時、又は一定周期毎に、同期要求信号８０１をアサートする。これにより、例えば、図４８に示した開発支援装置におけるトレースメモリ１０３０がオーバーフローしそうな場合に、開発支援装置からの要求により同期要求信号８０１がアサートされる。また、例えば、一定周期で同期要求信号８０１がアサートされることにより、トレース情報出力が一定周期で初期化される。なお、スタックメモリ３００は、同期要求信号８０１がアサートされたとき、スタックポインタを初期化し、プッシュしているスタック内容を無効にする。
【０１０２】
図９は、トレースパケット制御部２００の状態デコード表を示す。本実施形態に係るトレースパケット制御部２００は、第１の実施形態と比較して、入力として同期要求信号８０１が、出力として選択信号（TPCSEL）２０２が追加されている。また、出力符号として"SYN"及び"JMPS"が追加されている。
【０１０３】
一方、本実施形態に係る開発支援装置は、図４８に示した開発支援装置と同様の構成をしている。しかし、実行履歴復元部としてのホストコンピュータ３の動作が従来とは異なる。これについては後述する。
【０１０４】
次に、本実施形態に係る半導体集積回路１及び開発支援装置によるトレース情報出力及び実行履歴復元について、図１０に示したプログラムを実行する場合を例に説明する。この例では、半導体集積回路１は、アドレス"0x50000000"（実行順番"1"）からプログラム実行を開始し、アドレス"0x50000008"（実行順番"3"）でサブルーチン"Sub_A"がコールされアドレス"0x50000100"にジャンプする。そして、アドレス"0x50000104"（実行順番"5"）の命令"命令4"が実行されるとき、トレースが開始される。その後、半導体集積回路１は、アドレス"0x50000108"（実行順番"6"）でアドレス"0x50000200"のサブルーチン"Sub_B"にジャンプし、アドレス"0x5000020c"（実行順番"10"）でアドレス"0x50000300"のサブルーチン"Sub_C"にジャンプし、アドレス"0x50000308"から"0x50000210,0x5000010c,0x5000010"の順に呼び出し元に復帰する。
【０１０５】
図１１は、半導体集積回路１が図１０に示したプログラムを実行したときに出力するトレース情報を示す。図１１に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１０６】
トレース開始前、アドレス"0x50000008"（実行順番"3"）のコール命令"call Sub_A"の実行によって、スタックメモリ３００の内容は、
（0x5000000c）
となっている。しかし、実行順番"5"のときトレースが開始され、同期要求信号８０１がアサートされる。これにより、スタックメモリ３００は初期化され、その内容は、
（）
となる。
【０１０７】
ＣＰＵ１００がアドレス"0x50000104"（実行順番"5"）の命令"命令4"を実行したとき、信号EOIがアサートされるとともに実行アドレス１１１（"0x50000104"）が出力される。このとき、信号JMPTKNはアサートされず、図９に示した状態デコード表に従って、トレースパケット制御部２００は、信号TPCLDENをアサートし、信号TPCSELの値を"0"に設定し、符号２０４として"SYN"を出力する。信号TPCSELの値が"0"のとき、セレクタ７５０は、実行アドレス１１１（"0x5000104"）を選択し、シフトレジスタ７００に入力する。また、信号TPCLDENがアサートされることにより、シフトレジスタ７００は、セレクタ７５０から受けたアドレス７５１（"0x50000104"）をデータ７０１としてポート９０２に順次出力する。すなわち、ＣＰＵ１００が分岐命令以外の通常の順次実行命令を実行したときであって同期要求信号８０１がアサートされたとき、トレースパケット制御部２００は、符号２０４として"SEQ"ではなく"SYN"を出力するとともに、データ７０１として分岐先アドレス１１０ではなく実行アドレス１１１が出力されるべく信号TPCLDEN及び信号TPCSELの値を設定する。
【０１０８】
その後、実行順番"14"までは、第１の実施形態で説明したのと同様にトレース情報が出力される。特に、アドレス"0x5000020c"（実行順番"10"）のコール命令"call (a0)"が実行されたとき、トレースパケット制御部２００は、信号TPCLDENをアサートし、信号TPCSELの値を"1"に設定し、符号２０４として"JMP"を出力する。これにより、セレクタ７５０によって分岐先アドレス１１０（"0x50000300"）が選択され、シフトレジスタ７００から出力される。なお、スタックメモリ３００は、実行順番"6"及び"10"でプッシュされ、実行順番"13"及び"14"でポップされ、アドレス"0x50000210"（実行順番"14"）の命令が実行された時点で空の状態となっている。
【０１０９】
次に、ＣＰＵ１００がアドレス"0x5000010c"（実行順番"15"）のリターン命令"ret"を実行したとき、スタックメモリ３００にアンダーフローが発生し、復帰先アドレス一致信号５０１はアサートされない。トレースパケット制御部２００は、図９に示した状態デコード表に従って、信号TPCLDENをアサートし、信号TPCSELの値を"1"に設定し、符号２０４として"JMP"を出力する。これにより、シフトレジスタ７００から分岐先アドレス１１０（"0x5000000c"）がデータ７０１としてポート９０２に順次出力される。
【０１１０】
以上の動作によって、本実施形態に係る半導体集積回路１から、図１１に示したトレース情報が出力される。
【０１１１】
一方、図１２及び図１３は、本実施形態に係る開発支援装置によって実行される実行履歴復元方法のフローチャートである。また、図１４は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図１４に示したプログラム実行履歴は、以下に説明する実行履歴復元方法の実行の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１１２】
ステップ２００１で、現在のトレースポインタ（TP=13）をエンドトレースポインタ（ETP）に設定し、トレースポインタは、現在のトレースポインタより前のトレースデータで符号が"SYN"又は"JMPS"であるトレースポインタに設定される（TP=0）。TP=0のときの符号は"SYN"であるため（ステップ２００２）、ステップ２００３で、IPがトレース情報に示されたTP=0に対応する実行アドレス"0x50000104"に設定され（IP=0x50000104）、ステップ２００６に進む。この後の処理は、第１の実施形態で説明した内容と同様である。特に、TP=10のときのリターン命令"ret"の分岐先アドレスを復元する際、ソフトスタックの内容は空であり無効となっているが、トレース情報にその分岐先アドレス"0x5000000c"が含まれており、ステップ２０２８で、IPがトレース情報に示されたTP=10に対応する分岐先アドレス"0x5000000c"に設定され（IP=0x5000000c）、復元処理が続行される。
【０１１３】
以上の処理によって、本実施形態に係る開発支援装置によって、図１４に示したプログラム実行履歴が復元される。
【０１１４】
次に、本実施形態に係る半導体集積回路１によるトレース情報出力及び開発支援装置による実行履歴復元の別例について、図１５に示したプログラムを実行する場合を例に説明する。この例は、プログラム自体は図１０に示した先の例と同じであるが、トレースの開始が先の例よりも１命令後のアドレス"0x50000108"（実行順番"6"）の命令から始まっている。
【０１１５】
図１６は、半導体集積回路１が図１５に示したプログラムを実行したときに出力するトレース情報を示す。図１６に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１１６】
トレース開始前、アドレス"0x50000008"（実行順番"3"）のコール命令"call Sub_A"及びアドレス"0x5000108"（実行順番"6"）のコール命令"call Sub_B"の実行によって、スタックメモリ３００の内容は、
（0x500010c,0x5000000c）
となっている。しかし、実行順番"6"のときトレースが開始され、同期要求信号８０１がアサートされる。これにより、スタックメモリ３００は初期化され、その内容は、
（）
となる。
【０１１７】
ＣＰＵ１００がアドレス"0x5000108"（実行順番"6"）の命令"call Sub_B"を実行したとき、信号CALL及びJMPTKNがアサートされる。このとき、トレースパケット制御部２００は、図９に示した状態デコード表に従って、信号TPCLDENをアサートし、信号TPCSELの値を"1"に設定し、符号２０４として"JMPS"を出力する。信号TPCSELの値が"1"のとき、セレクタ７５０は、分岐先アドレス１１０（"0x50000200"）を選択し、シフトレジスタ７００に入力する。また、信号TPCLDENがアサートされることにより、シフトレジスタ７００は、セレクタ７５０から受けたアドレス７５１（"0x50000200"）をデータ７０１としてポート９０２に順次出力する。すなわち、ＣＰＵ１００が分岐命令を実行したときであって同期要求信号８０１がアサートされたとき、トレースパケット制御部２００は、符号２０４として"NPC"又は"JMP"ではなく"JMPS"を出力するとともに、データ７０１として分岐先アドレス１１０が出力されるべく信号TPCLDEN及び信号TPCSELの値を設定する。
【０１１８】
その後の動作は、先の例と同様である。特に、スタックメモリ３００は、実行順番"10"でプッシュされ、実行順番"13"でポップされ、アドレス"0x50000308"（実行順番"13"）の命令が実行された時点で空の状態となっている。このため、実行順番"10"及び"15"で命令が実行されたとき、スタックメモリ３００にアンダーフローが発生し、復帰先アドレス一致信号５０１はアサートされず、符号２０４として"JMP"が出力されるとともに、分岐先アドレス１１０がデータ７０１としてポート９０２に順次出力される。
【０１１９】
以上の動作によって、本実施形態に係る半導体集積回路１から、図１６に示したトレース情報が出力される。
【０１２０】
一方、図１７は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図１４に示したプログラム実行履歴は、図１２及び図１３に示したフローに従って得られたものである。
【０１２１】
先の例とは異なり、TP=0のときの符号は"JMPS"であるため（ステップ２００１及び２００２）、ステップ２００４でIPがトレース情報中のTP=0に対応する分岐先アドレスに設定され（IP=0x50000200）、ステップ２００５でTPがインクリメントされた後（TP=1）、ステップ２００６に進む。以降の処理は、先の例と同様である。
【０１２２】
以上、本実施形態によると、プログラムの実行が開始された後に遅れてトレースが開始された場合であっても、トレース開始時の実行アドレス又は分岐先アドレスが出力され、また、トレース開始前に実行されたコール命令に対応するリターン命令が実行されたとき、その分岐先アドレスがトレース情報として出力される。これにより、プログラム実行の途中からトレースが開始されても、トレース開始時のプログラム部分を復元し、さらに、トレース開始前に実行されたプログラム部分までも復元することができる。
【０１２３】
（第３の実施形態）
図１８は、本発明の第３の実施形態に係る半導体集積回路の構成を示す。本実施形態に係る半導体集積回路１は、ＣＰＵ１００、トレースパケット制御部２００、ループ検出回路６００、及びシフトレジスタ７００を備えている。なお、シフトレジスタ７００については、第１の実施形態と同様であるため、説明を省略する。
【０１２４】
ＣＰＵ１００は、高速分岐命令としてレジスタ間接分岐命令を実装しており、例えば、プログラムのループ部分を実行するとき、ループアドレスレジスタ（LAR）１５０及びループ命令レジスタ（LIR）１６０に、それぞれ、分岐先アドレス及び分岐先の命令を格納し、これらレジスタを参照してループ部分を実行することによって高速分岐が可能となっている。ＣＰＵ１００は、レジスタ１５０を更新したとき、LAR更新信号１３０をアサートし、レジスタ１５０に格納された分岐先アドレスへの分岐命令を実行したとき、LAR間接分岐命令実行信号（LCC）をアサートする。これ以外の点については、第１の実施形態に係る半導体集積回路１におけるＣＰＵ１００と同様であるため、説明を省略する。
【０１２５】
ループ検出回路６００は、保持回路６１０及びリセット回路６２０を備えている。保持回路６１０は、ＲＳフリップフロップで構成され、LAR更新信号１３０をセット端子に、リセット回路６２０から出力されるリセット信号６２１をリセット端子に、それぞれ受け、LAR更新フラグ信号６０１を出力する。リセット回路６２０は、信号LCC及びJMPTKNの論理積を演算するＡＮＤ回路６３０、及びＡＮＤ回路６３０の出力を受け、リセット信号６２１を出力するＤフリップフロップ６４０を備えている。Ｄフリップフロップ６４０は、保持回路６１０のセット／リセットのタイミングを調整すべく、ＡＮＤ回路６３０の出力を遅延させるために設けている。以上の構成により、ループ検出回路６００は、レジスタ１５０が更新されてLAR更新信号１３０がアサートされたとき、LAR更新フラグ信号６０１をアサートし、ループ初回の信号LCC及びJMPTKNがアサートされたとき、LAR更新フラグ信号６０１をネゲートする。すなわち、ループ検出回路６００は、あるループ部分の実行が開始され、レジスタ間接分岐命令が初めて実行されたときにのみLAR更新フラグ信号６０１をアサートし、２回目以降のレジスタ間接分岐命令の実行についてはアサートしない。なお、図１９に示したように、ループ検出回路６００における保持回路６１０をＤフリップフロップで構成してもよい。
【０１２６】
図２０は、トレースパケット制御部２００の状態デコード表を示す。トレースパケット制御部２００は、信号EOI、JMPDIR、JMPIND、RET、LCC、JMPTKN及びEXP、並びにLAR更新フラグ信号６０１を受け、図２０に示した状態デコード表に従って、分岐先アドレスロードイネーブル信号（TPCLDEN）２０１及びトレース状態ポート（PCST）９０１に出力する符号２０４を決定する。
【０１２７】
一方、本実施形態に係る開発支援装置は、図４８に示した開発支援装置と同様の構成をしている。しかし、実行履歴復元部としてのホストコンピュータ３の動作が従来とは異なる。これについては後述する。
【０１２８】
次に、本実施形態に係る半導体集積回路１及び開発支援装置によるトレース情報出力及び実行履歴復元について、図２１に示したプログラムを実行する場合を例に説明する。この例では、半導体集積回路１は、アドレス"0x50000000"（実行順番"1"）からプログラム実行及びトレースを開始し、アドレス"0x50000004"（実行順番"2"）の命令"setlb"によって、レジスタ１５０にループ"loop0"の分岐先アドレス"0x50000008"を、レジスタ１６０に同ループの先頭の命令"命令2"を、それぞれ格納する。そして、アドレス"0x50000010"（実行順番"5"及び"8"）のレジスタ間接分岐命令"leq"によってループを２回実行した後、３回目のループ実行中に割込みを受理し、アドレス"0x40000100"（実行順番"10"）の割り込みハンドラ"int0h"の実行を開始する。割り込みハンドラ"int0h"において、レジスタ間接分岐命令"lne"を伴う別のループ"loop1"を２回実行した後、先ほどのループ"loop0"に復帰し、４回目のループを実行した後、同ループは終了する。
【０１２９】
図２２は、半導体集積回路１が図２１に示したプログラムを実行したときに出力するトレース情報を示す。図２２に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１３０】
ＣＰＵ１００がアドレス"0x50000004"（実行順番"2"）の命令"setlb"を実行したとき、LAR更新信号１３０がアサートされ、LAR更新フラグ信号６０１がアサートされるが、信号LCC及びJMPTKNはまだアサートされないため、トレースパケット制御部２００は、図２０に示した状態デコード表に従って、符号２０４として"SEQ"を出力する。その後、アドレス"0x50000010"（実行順番"5"）のレジスタ間接分岐命令"leq"を実行したとき、LAR更新フラグ信号６０１及び信号LCC及びJMPTKNがアサートされるため、符号２０４として"JMP"が出力されるとともに、データ７０１としてアドレス"0x50000008"が出力される。
【０１３１】
アドレス"0x50000010"（実行順番"5"）のレジスタ間接分岐命令"leq"が実行されてから１サイクル後に、保持回路６１０がリセットされ、LAR更新フラグ信号６０１がネゲートされる。これにより、ＣＰＵ１００がアドレス"0x50000010"（実行順番"8"）のレジスタ間接分岐命令"leq"を実行したとき、信号LCC及びJMPTKNはアサートされるが、LAR更新フラグ信号６０１がネゲートされているため、図２０に示した状態デコード表に従って、トレースパケット制御部２００から符号２０４として"NPC"が出力されるのみである。
【０１３２】
ＣＰＵ１００が割込みを受理して分岐を実行し、割込みハンドラ"int0h"に処理が移った後、同様に、ＣＰＵ１００がアドレス"0x40000104"（実行順番"11"）の命令"setlb"を実行したとき、LAR更新信号１３０がアサートされ、LAR更新フラグ信号６０１がアサートされるが、信号LCC及びJMPTKNはまだアサートされないため、トレースパケット制御部２００は、図２０に示した状態デコード表に従って、符号２０４として"SEQ"を出力する。その後、ＣＰＵ１００がアドレス"0x40000110"（実行順番"14"）のレジスタ間接分岐命令"lne"を実行したとき、この命令は、ループ"loop1"における初回の高速分岐命令であるため、符号２０４として"JMP"が出力されるとともに、データ７０１として"0x40000108"が出力される。一方、同じレジスタ間接分岐命令"lne"でも、実行順番"17"のとき、分岐条件が成立しないため、信号JMPTKNはアサートされず、符号２０４として"SEQ"が出力される。
【０１３３】
ＣＰＵ１００がアドレス"0x40000114"（実行順番"18"）の命令"movm (sp),regs"を実行したとき、LAR更新信号１３０がアサートされ、LAR更新フラグ信号６０１がアサートされる。そして、ＣＰＵ１００がアドレス"0x50000010"（実行順番"21"）のレジスタ間接分岐命令"leq"を実行したとき、この命令は、ループ"loop0"における初回のレジスタ間接分岐命令ではないが、LAR更新フラグ信号６０１がアサートされ、また、信号LCC及びJMPTKNがアサートされるため、符号２０４として"JMP"が出力されるとともに、データ７０１としてアドレス"0x50000008"が出力される。その後、ＣＰＵ１００が実行順番"24"のレジスタ間接分岐命令"leq"を実行したとき、分岐条件が成立しないため、信号JMPTKNはアサートされず、符号２０４として"SEQ"が出力される。
【０１３４】
以上の動作によって、本実施形態に係る半導体集積回路１から、図２２に示したトレース情報が出力される。
【０１３５】
一方、図２３及び図２４は、本実施形態に係る開発支援装置によって実行される実行履歴復元方法のフローチャートである。また、図２５は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図２５に示したプログラム実行履歴は、以下に説明する実行履歴復元方法の実行の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１３６】
TP=4のとき、トレース情報に示された符号は"JMP"であり（ステップ２００７，２００８及び２０１７）、ソースプログラムに示された命令はレジスタ間接分岐命令"leq"（LCC）であることから（ステップ２０１８，２０２０及び２０２２）、ステップ２０２３でソフトウェア的に実現された模擬ループアドレスレジスタ（以下、ソフトLARと称する）に、トレース情報に示されたTP=4に対応する分岐先アドレス"0x50000008"が格納される。その後、ステップ２０２８でIPがトレース情報に示されたTP=4に対応する分岐先アドレス"0x50000008"に設定され（IP=0x50000008）、ステップ２０３４でTPがインクリメントされた後（TP=5）、ステップ２００６に戻る。TP=14,21のときも同様に処理される。
【０１３７】
一方、TP=7のとき、トレース情報に示された符号は"NPC"であり（ステップ２００７及び２００８）、ソースプログラムに示された命令はTP=4のときと同じくレジスタ間接分岐命令"leq"（LCC）であることから（ステップ２００９及び２０１２）、ステップ２０１３でIPがソフトLARに格納された分岐先アドレス"0x50000008"に設定される（IP=0x50000008）。そして、ステップ２０３４でTPがインクリメントされた後（TP=8）、ステップ２００６に戻る。
【０１３８】
以上の処理によって、本実施形態に係る開発支援装置によって、図２５に示したプログラム実行履歴が復元される。
【０１３９】
以上、本実施形態によると、レジスタ間接分岐命令を含むループ処理において、初回のレジスタ間接分岐命令の実行に対して、トレース情報としてその分岐先アドレスが出力され、２回目以降のレジスタ間接分岐命令の実行に対してはトレース情報として分岐先アドレスが出力されないため、トレース情報出力に関してバンド幅が圧迫されることがない。すなわち、レジスタ間接分岐命令を実装した半導体集積回路のトレース情報出力が最適化され、半導体集積回路を実際の動作条件で動作させてトレースした場合であっても、正確なプログラム実行履歴を復元することができる。
【０１４０】
（第４の実施形態）
図２６は、本発明の第４の実施形態に係る半導体集積回路の構成を示す。本実施形態に係る半導体集積回路１は、第３の実施形態に係る半導体集積回路に、第２の実施形態で説明した同期要求要求生成回路８００及びセレクタ７５０を追加した構成をしている。以下、第２及び第３の実施形態に係る半導体集積回路と比較して異なる部分について説明する。
【０１４１】
ループ検出回路６００におけるＯＲ回路６５０は、LAR更新信号１３０及び同期要求信号８０１の論理和を演算し、この論理和は保持回路６１０のセット信号となる。すなわち、同期要求信号８０１がアサートされると、信号LCC及びJMPTKNが次にアサートされるまで、LAR更新フラグ信号６０１がアサートされる。なお、同期要求信号８０１がアサートされるタイミングは、第２の実施形態で説明したとおりである。
【０１４２】
図２７は、トレースパケット制御部２００の状態デコード表を示す。本実施形態に係るトレースパケット制御部２００は、第３の実施形態と比較して、入力として同期要求信号８０１が、出力として選択信号（TPCSEL）２０２が追加されている。また、出力符号として"SYN"及び"JMPS"が追加されている。
【０１４３】
一方、本実施形態に係る開発支援装置は、図４８に示した開発支援装置と同様の構成をしている。しかし、実行履歴復元部としてのホストコンピュータ３の動作が従来とは異なる。これについては後述する。
【０１４４】
次に、本実施形態に係る半導体集積回路１及び開発支援装置によるトレース情報出力及び実行履歴復元について、図２８に示したプログラムを実行する場合を例に説明する。この例では、半導体集積回路１は、ループ"loop0"を４回実行するうち、２回目の実行のとき、実行順番"6"でトレースが開始される。
【０１４５】
図２９は、半導体集積回路１が図２８に示したプログラムを実行したときに出力するトレース情報を示す。図２９に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１４６】
実行順番"6"のときトレースが開始され、同期要求信号８０１がアサートされ、LAR更新フラグ信号６０１がアサートされる。ＣＰＵ１００がアドレス"0x40000008"（実行順番"6"）の命令"命令2"を実行したとき、信号EOIがアサートされるとともに実行アドレス１１１（"0x40000008"）が出力される。このとき、信号LCCはアサートされず、図２７に示した状態デコード表に従って、トレースパケット制御部２００は、信号TPCLDENをアサートし、信号TPCSELの値を"0"に設定し、符号２０４として"SYN"を出力する。また、シフトレジスタ７００からはこのときの実行アドレス"0x40000008"がデータ７０１として出力される。
【０１４７】
その後、ＣＰＵ１００がアドレス"0x40000010"（実行順番"8"）のレジスタ間接分岐命令"leq"を実行したとき、信号LCC及びJMPTKNがアサートされる。このとき、LAR更新フラグ信号６０１がアサートされており、符号２０４として"JMP"が出力されるとともに、データ７０１として分岐先アドレス"0x40000008"が出力される。
【０１４８】
一方、図３０及び図３１は、本実施形態に係る開発支援装置によって実行される実行履歴復元方法のフローチャートである。また、図３２は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図３２に示したプログラム実行履歴は、以下に説明する実行履歴復元方法の実行の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１４９】
TP=0のとき、トレース情報に示された符号は"SYN"であるため（ステップ２００２）、ステップ２００３で、IPがトレース情報に示されたTP=0に対応する実行アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２００６に進む。
【０１５０】
TP=2のとき、トレース情報に示された符号は"JMP"であり（ステップ２００７，２００８及び２０１７）、ソースプログラムに示された命令はレジスタ間接分岐命令"leq"（LCC）であることから（ステップ２０１８，２０２０及び２０２２）、ステップ２０２３でソフトLARに、トレース情報に示されたTP=4に対応する分岐先アドレス"0x40000008"が格納される。その後、ステップ２０２８でIPがトレース情報に示されたTP=4に対応する分岐先アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２０３４でTPがインクリメントされた後（TP=3）、ステップ２００６に戻る。
【０１５１】
一方、TP=5のとき、トレース情報に示された符号は"NPC"であり（ステップ２００７及び２００８）、ソースプログラムに示された命令はTP=2のときと同じくレジスタ間接分岐命令"leq"（LCC）であることから（ステップ２００９及び２０１２）、ステップ２０１３でIPがソフトLARに格納された分岐先アドレス"0x40000008"に設定される（IP=0x40000008）。そして、ステップ２０３４でTPがインクリメントされた後（TP=6）、ステップ２００６に戻る。
【０１５２】
次に、本実施形態に係る半導体集積回路１によるトレース情報出力及び開発支援装置による実行履歴復元の別例について、図３３に示したプログラムを実行する場合を例に説明する。この例は、プログラム自体は図２８に示した先の例と同じであるが、トレースの開始が先の例よりも１命令前のアドレス"0x40000010"（実行順番"5"）の命令から始まっている。
【０１５３】
図３４は、半導体集積回路１が図３３に示したプログラムを実行したときに出力するトレース情報を示す。図３４に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１５４】
先の例とは異なり、TP=0のとき、トレース情報に示された符号は"JMPS"であるため（ステップ２００１及び２００２）、ステップ２００４でIPがトレース情報に示されたTP=0に対応する分岐先アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２００５でTPがインクリメントされた後（TP=1）、ステップ２００６に進む。以降の処理は、先の例と同様である。
【０１５５】
以上、本実施形態によると、プログラムの実行が開始された後にトレースが開始された場合であっても、トレース開始時の実行アドレス又は分岐先アドレスが出力され、また、ループ処理の途中でトレースが開始された場合、トレース開始後にループ先頭に分岐する間接分岐命令が初めて実行されたとき、その分岐先アドレスが出力される。これにより、プログラム実行の途中からトレースが開始されても、トレース開始時のプログラム部分を復元し、さらに、高速分岐命令を含むループのプログラム部分の実行履歴がが正確に復元される。
【０１５６】
（第５の実施形態）
図３６は、本発明の第５の実施形態に係る半導体集積回路の構成を示す。本実施形態に係る半導体集積回路１は、ＣＰＵ１００、トレースパケット制御部２００、比較器４００、アドレスレジスタ６７０、シフトレジスタ７００、セレクタ７５０、及び同期要求生成回路８００を備えている。このうち、シフトレジスタ７００、セレクタ７５０、及び同期要求生成回路８００は、第２の実施形態の場合と同様である。以下、ＣＰＵ１００、比較器４００、及びアドレスレジスタ６７０について説明する。
【０１５７】
ＣＰＵ１００は、高速分岐命令として、図示しない汎用のレジスタに格納された分岐先アドレスに分岐する間接分岐命令を実装している。ＣＰＵ１００は、分岐条件が成立し、間接分岐命令を実行したとき、信号JMPIND及びJMPTKNをアサートし、その分岐先アドレス１１０を出力する。また、ＣＰＵ１００は、命令を実行したとき、その命令の実行アドレス１１１を出力する。これ以外の点については、一部の信号を省略している以外は、第２の実施形態の場合と同様である。
【０１５８】
アドレスレジスタ６７０は、ＡＮＤ回路６６０によって演算された信号JMPIND及びJMPTKNの論理積をロード信号６６１として、ＣＰＵ１００から出力された分岐先アドレス１１０をデータとして、それぞれ受ける。すなわち、アドレスレジスタ６７０は、ＣＰＵ１００によって間接分岐命令令が実行されたとき、格納しているアドレスを出力し、分岐先アドレス１１０を格納する。また、アドレスレジスタ６７０は、同期要求信号８０１がアサートされたとき、格納している内容を初期化する。
【０１５９】
比較器４００は、アドレスレジスタ６７０から出力されたデータ６７１とＣＰＵ１００から出力された分岐先アドレス１１０とを比較し、これらの一致／不一致を比較結果信号４０１として出力する。比較結果信号４０１は、一致のときはアサートされ、不一致のときはネゲートされる。
【０１６０】
図３７は、トレースパケット制御部２００の状態デコード表を示す。トレースパケット制御部２００は、信号EOI、JMPDIR、JMPIND、JMPTKN及びEXP、並びに比較結果信号４０１及び同期要求信号８０１を受け、図３７に示した状態デコード表に従って、分岐先アドレスロードイネーブル信号（TPCLDEN）２０１、選択信号（TPCSEL）２０２、及びトレース状態ポート（PCST）９０１に出力する符号２０４を決定する。
【０１６１】
一方、本実施形態に係る開発支援装置は、図４８に示した開発支援装置と同様の構成をしている。しかし、実行履歴復元部としてのホストコンピュータ３の動作が従来とは異なる。これについては後述する。
【０１６２】
次に、本実施形態に係る半導体集積回路１及び開発支援装置によるトレース情報出力及び実行履歴復元について、図３８に示したプログラムを実行する場合を例に説明する。この例では、半導体集積回路１は、ループ"loop0"を４回実行するうち、２回目の実行のとき、実行順番"6"でトレースが開始される。
【０１６３】
図３９は、半導体集積回路１が図３８に示したプログラムを実行したときに出力するトレース情報を示す。図３９に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１６４】
ＣＰＵ１００がアドレス"0x40000010"（実行順番"5"）の間接分岐命令"beq (a0)"を実行したとき、信号JMPIND及びJMPTKNがアサートされ、アドレスレジスタ６７０に分岐先アドレス１１０（"0x40000008"）が格納される。なお、命令"beq (a0)"は、条件が成立したとき、レジスタ"a0"に格納した分岐先アドレスに分岐するといった間接分岐命令である。
【０１６５】
次に、実行順番"6"のときトレースが開始され、同期要求信号８０１がアサートされ、アドレスレジスタ６７０が初期化される。ＣＰＵ１００がアドレス"0x40000008"（実行順番"6"）の命令"命令2"を実行したとき、信号EOIがアサートされるとともに実行アドレス１１１（"0x40000008"）が出力される。このとき、信号JMPIND及びJMPTKNはアサートされず、図３７に示した状態デコード表に従って、トレースパケット制御部２００は、信号TPCLDENをアサートし、信号TPCSELの値を"0"に設定し、符号２０４として"SYN"を出力する。また、シフトレジスタ７００からは実行順番"6"の命令"命令2"の実行アドレス"0x40000008"がデータ７０１として出力される。
【０１６６】
その後、ＣＰＵ１００がアドレス"0x40000010"（実行順番"8"）の間接分岐命令"beq (a0)"を実行したとき、信号JMPIND及びJMPTKNがアサートされ、アドレスレジスタ６７０に格納されているアドレスと分岐先アドレス１１０とが比較される。アドレスレジスタ６７０は、トレース開始時に初期化されているため、これら両アドレスは一致せず、比較結果信号４０１はアサートされない。これにより、トレースパケット制御部２００は、図３７に示した状態デコード表に従って、信号TPCLDENをアサートし、信号TPCSELの値を"1"に設定し、符号２０４として"JMP"を出力する。また、シフトレジスタ７００からは実行順番"6"の命令"命令2"の実行アドレス"0x40000008"がデータ７０１として出力される。
【０１６７】
一方、ＣＰＵ１００がアドレス"0x40000010"（実行順番"11"）の間接分岐命令"beq (a0)"を実行したとき、信号JMPIND及びJMPTKNがアサートされ、アドレスレジスタ６７０に格納されているアドレスと分岐先アドレス１１０"0x40000008"とが比較される。アドレスレジスタ６７０には、実行順番"8"の間接分岐命令"beq (a0)"の実行によってアドレス"0x40000008"が格納されているため、これらの両アドレスは一致し、比較結果信号４０１がアサートされる。これにより、図３７に示した状態デコード表に従って、符号２０４として"NPC"が出力される。このとき、シフトレジスタ７００からデータ７０１は出力されない。
【０１６８】
以上の動作によって、本実施形態に係る半導体集積回路１から、図３９に示したトレース情報が出力される。
【０１６９】
一方、図４０及び図４１は、本実施形態に係る開発支援装置によって実行される実行履歴復元方法のフローチャートである。また、図４２は、本実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す。図４２に示したプログラム実行履歴は、以下に説明する実行履歴復元方法の実行の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１７０】
TP=0のとき、トレース情報に示された符号は"SYN"であるため（ステップ２００２）、ステップ２００３で、IPがトレース情報に示されたTP=0に対応する実行アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２００６に進む。
【０１７１】
TP=2のとき、トレース情報に示された符号は"JMP"であり（ステップ２００７，２００８及び２０１７）、ソースプログラムに示された命令は間接分岐命令"beq (a0)"であることから（ステップ２０１８，２０２０及び２０４２）、ステップ２０４３でソフトウェア的に実現された模擬レジスタ（以下、ソフトレジスタと称する）に、トレース情報に示されたTP=4に対応する分岐先アドレス"0x40000008"が格納される。その後、ステップ２０２８でIPがトレース情報に示されたTP=4に対応する分岐先アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２０３４でTPがインクリメントされた後（TP=3）、ステップ２００６に戻る。
【０１７２】
一方、TP=5のとき、トレース情報に示された符号は"NPC"であり（ステップ２００７及び２００８）、ソースプログラムに示された命令はTP=2のときと同じく間接分岐命令"beq (a0)"であることから（ステップ２００９及び２０４０）、ステップ２０４１でIPがソフトレジスタに格納された分岐先アドレス"0x40000008"に設定される（IP=0x40000008）。そして、ステップ２０３４でTPがインクリメントされた後（TP=6）、ステップ２００６に戻る。
【０１７３】
次に、本実施形態に係る半導体集積回路１によるトレース情報出力及び開発支援装置による実行履歴復元の別例について、図４３に示したプログラムを実行する場合を例に説明する。この例は、プログラム自体は図３８に示した先の例と同じであるが、トレースの開始が先の例よりも１命令前のアドレス"0x40000010"（実行順番"5"）の命令から始まっている。
【０１７４】
図４４は、半導体集積回路１が図４３に示したプログラムを実行したときに出力するトレース情報を示す。図４４に示したトレース情報は、以下に説明する半導体集積回路１の動作の結果として得られたものである。なお、本実施形態の特徴的な部分について説明する。
【０１７５】
先の例とは異なり、TP=0のとき、トレース情報に示された符号は"JMPS"であるため（ステップ２００１及び２００２）、ステップ２００４でIPがトレース情報に示されたTP=0に対応する分岐先アドレス"0x40000008"に設定され（IP=0x40000008）、ステップ２００５でTPがインクリメントされた後（TP=1）、ステップ２００６に進む。以降の処理は、先の例と同様である。
【０１７６】
以上、本実施形態によると、間接分岐命令を含むループ処理において、初回の間接分岐命令の実行に対して、トレース情報としてその分岐先アドレスが出力され、２回目以降の間接分岐命令の実行に対してはトレース情報として分岐先アドレスが出力されないため、トレース情報出力に関してバンド幅が圧迫されることがない。すなわち、間接分岐命令を実装した半導体集積回路のトレース情報出力が最適化され、半導体集積回路を実際の動作条件で動作させてトレースした場合であっても、正確なプログラム実行履歴を復元することができる。
【０１７７】
さらに、プログラムの実行が開始された後にトレースが開始された場合であっても、トレース開始時の実行アドレス又は分岐先アドレスが出力され、また、ループ処理の途中でトレースが開始された場合、トレース開始後にループ先頭に分岐する間接分岐命令が初めて実行されたとき、ループの先頭アドレスが出力される。これにより、プログラム実行の途中からトレースが開始されても、トレース開始時のプログラム部分を復元し、さらに、高速分岐命令を含むループのプログラム部分の実行履歴がが正確に復元される。
【０１７８】
なお、第１及び第３の実施形態と同様に、同期要求生成回路８００及びセレクタ７５０を備えない構成として、本発明によって奏されるトレース情報出力の最適化という効果は何ら損なわれない。
【０１７９】
また、上記各実施形態に係る半導体集積回路は、シフトレジスタ７００に代えて、保持データをパラレル出力するアドレスレジスタを備えていてもよい。分岐先アドレスをパラレル出力する場合であっても、本発明が奏する効果は何ら損なわれない。
【０１８０】
また、説明の便宜上、上記各実施形態に係る開発支援装置は、それぞれ、上記各実施形態に係る半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元するとしたが、上記以外の半導体集積回路から出力されたトレース情報に基づいてプログラム実行履歴を復元することが可能である。
【産業上の利用可能性】
【０１８１】
本発明に係る半導体集積回路及び開発支援装置は、プロセッサの動作を外部から解析、評価する手段として有用である。
【図面の簡単な説明】
【０１８２】
【図１】本発明の第１の実施形態に係る半導体集積回路の構成図である。
【図２】本発明の第１の実施形態に係る半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図３】プログラム例及び実行順番を示す図である。
【図４】本発明の第１の実施形態に係る半導体集積回路が図３に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図５】本発明の第１の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図６】本発明の第１の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図７】本発明の第１の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図８】本発明の第２の実施形態に係る半導体集積回路の構成図である。
【図９】本発明の第２の実施形態に係る半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図１０】プログラム例及び実行順番を示す図である。
【図１１】本発明の第２の実施形態に係る半導体集積回路が図１０に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図１２】本発明の第２の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図１３】本発明の第２の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図１４】本発明の第２の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図１５】プログラム例及び実行順番を示す図である。
【図１６】本発明の第２の実施形態に係る半導体集積回路が図１５に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図１７】本発明の第２の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図１８】本発明の第３の実施形態に係る半導体集積回路の構成図である。
【図１９】ループ検出回路の別の構成図である。
【図２０】本発明の第３の実施形態に係る半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図２１】プログラム例及び実行順番を示す図である。
【図２２】本発明の第３の実施形態に係る半導体集積回路が図２１に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図２３】本発明の第３の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図２４】本発明の第３の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図２５】本発明の第３の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図２６】本発明の第４の実施形態に係る半導体集積回路の構成図である。
【図２７】本発明の第４の実施形態に係る半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図２８】プログラム例及び実行順番を示す図である。
【図２９】本発明の第４の実施形態に係る半導体集積回路が図２８に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図３０】本発明の第４の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図３１】本発明の第４の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図３２】本発明の第４の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図３３】プログラム例及び実行順番を示す図である。
【図３４】本発明の第４の実施形態に係る半導体集積回路が図３３に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図３５】本発明の第４の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図３６】本発明の第５の実施形態に係る半導体集積回路の構成図である。
【図３７】本発明の第５の実施形態に係る半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図３８】プログラム例及び実行順番を示す図である。
【図３９】本発明の第５の実施形態に係る半導体集積回路が図３８に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図４０】本発明の第５の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図４１】本発明の第５の実施形態に係る開発支援装置による実行履歴復元方法のフローチャートである。
【図４２】本発明の第５の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図４３】プログラム例及び実行順番を示す図である。
【図４４】本発明の第５の実施形態に係る半導体集積回路が図４３に示したプログラムを実行したときに出力するトレース情報を示す図である。
【図４５】本発明の第５の実施形態に係る開発支援装置によって復元されたプログラム実行履歴を示す図である。
【図４６】従来のトレース情報出力機能を有する半導体集積回路の構成図である。
【図４７】図４６の半導体集積回路におけるトレースパケット制御部の状態デコード表である。
【図４８】開発支援装置の構成図である。
【図４９】実行プログラム例及び実行順番を示す図である。
【図５０】図４９のプログラムの実行によって出力されたトレース情報を示す図である。
【図５１】従来の実行履歴復元方法のフローチャートである。
【図５２】図５０のトレース情報に基づいて復元されたプログラム実行履歴を示す図である。
【符号の説明】
【０１８３】
１  半導体集積回路
１００  ＣＰＵ
３００  スタックメモリ
４００  比較器
２００  トレースパケット制御部
７００  シフトレジスタ（アドレスレジスタ、第２のアドレスレジスタ）
８００  同期要求生成回路
７５０  セレクタ
６００  ループ検出回路
６１０  保持回路
６２０  リセット回路
６７０  アドレスレジスタ（第１のアドレスレジスタ）
１０３０  トレースメモリ
３  ホストコンピュータ（実行履歴復元部）
【図１】
2005209172.tif 000003
【図２】
2005209172.tif 000004
【図３】
2005209172.tif 000005
【図４】
2005209172.tif 000006
【図５】
2005209172.tif 000007
【図６】
2005209172.tif 000008
【図７】
2005209172.tif 000009
【図８】
2005209172.tif 000010
【図９】
2005209172.tif 000011
【図１０】
2005209172.tif 000012
【図１１】
2005209172.tif 000013
【図１２】
2005209172.tif 000014
【図１３】
2005209172.tif 000015
【図１４】
2005209172.tif 000016
【図１５】
2005209172.tif 000017
【図１６】
2005209172.tif 000018
【図１７】
2005209172.tif 000019
【図１８】
2005209172.tif 000020
【図１９】
2005209172.tif 000021
【図２０】
2005209172.tif 000022
【図２１】
2005209172.tif 000023
【図２２】
2005209172.tif 000024
【図２３】
2005209172.tif 000025
【図２４】
2005209172.tif 000026
【図２５】
2005209172.tif 000027
【図２６】
2005209172.tif 000028
【図２７】
2005209172.tif 000029
【図２８】
2005209172.tif 000030
【図２９】
2005209172.tif 000031
【図３０】
2005209172.tif 000032
【図３１】
2005209172.tif 000033
【図３２】
2005209172.tif 000034
【図３３】
2005209172.tif 000035
【図３４】
2005209172.tif 000036
【図３５】
2005209172.tif 000037
【図３６】
2005209172.tif 000038
【図３７】
2005209172.tif 000039
【図３８】
2005209172.tif 000040
【図３９】
2005209172.tif 000041
【図４０】
2005209172.tif 000042
【図４１】
2005209172.tif 000043
【図４２】
2005209172.tif 000044
【図４３】
2005209172.tif 000045
【図４４】
2005209172.tif 000046
【図４５】
2005209172.tif 000047
【図４６】
2005209172.tif 000048
【図４７】
2005209172.tif 000049
【図４８】
2005209172.tif 000050
【図４９】
2005209172.tif 000051
【図５０】
2005209172.tif 000052
【図５１】
2005209172.tif 000053
【図５２】
2005209172.tif 000054