(57)【要約】【課題】ＶＬＩＷアーキテクチャを採用したプロセッサでは、並列に実行するように変換されたプログラムの命令列の任意の命令だけをデバッグのためのデバッグ命令に置き換え、１命令だけをステップ実行することはできない課題があった。【解決手段】ＶＬＩＷアーキテクチャを採用したプロセッサに、並列実行が可能な命令数と同じ数のデバッグ命令検出手段を備える命令解析手段と、デバッグ命令が検出された際に、デバッグ命令と同一の実行単位に含まれ且つ前記デバッグ命令より高位のアドレスに配置されている命令の実行を取り消す命令取消手段を備えたことを特徴とする。【選択図】図３２
2011181100.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ装置を用いて、並列実行境界を意味する特定のビットパターンを各命令のビット領域に備える命令並列実行可能なプロセッサで動作するプログラム中で、並列実行境界で区切られた命令列中のいずれかの命令にブレークポイントを設定させるブレークポイント制御方法であって、
ブレークポイントの設定の際に、前記ビットパターンを変更することによって、ブレークポイントの設定対象命令と後続する命令とが並列実行されないよう並列実行境界を追加するブレークポイント設定ステップと
前記プログラムを実行させ、前記設定対象命令で実行を停止させ、前記設定対象命令と後続する命令とが並列実行されないよう制御する実行・停止制御ステップと
を備えたブレークポイント制御方法。
【請求項２】
並列実行境界を意味する特定のビットパターンを各命令のビット領域に備える命令並列実行可能なプロセッサで動作するプログラム中で、並列実行境界で区切られた命令列中のいずれかの命令にブレークポイントを設定させる、コンピュータをデバッグ装置として機能させるためのブレークポイント制御プログラムであって、
ブレークポイントの設定の際に、前記ビットパターンを変更することによって、ブレークポイントの設定対象命令と後続する命令とが並列実行されないよう並列実行境界を追加するブレークポイント設定ステップと
前記プログラムを実行させ、前記設定対象命令で実行を停止させ、前記設定対象命令と後続する命令とが並列実行されないよう制御する実行・停止制御ステップと
を備えたブレークポイント制御プログラム。
【請求項３】
並列実行境界を意味する特定のビットパターンを各命令のビット領域に備える命令並列実行可能なプロセッサで動作するプログラム中で、並列実行境界で区切られた命令列中のいずれかの命令にブレークポイントを設定するデバッグ装置であって、
前記ブレークポイントを設定する際に、前記ビットパターンを変更することによって、ブレークポイントの設定対象命令と後続する命令とが並列実行されないよう並列実行境界を追加する並列実行命令列境界細分化手段と
前記プログラムを実行させ、前記設定対象命令で実行を停止させ、前記設定対象命令と後続する命令とが並列実行されないよう制御する実行・停止制御手段と
を備えたデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに係わるものであり、特に複数の命令を並列に実行するプロセッサにおけるデバッグ方法に関する。
【背景技術】
【０００２】
従来の技術では静的に並列に実行できる命令を決めるアーキテクチャを持つプロセッサのデバッグ装置において命令列を表示する場合、論理的または物理的に並列に実行可能な命令列の区切りがどこであるかを表示することができた。
【０００３】
また、並列に実行できる命令列の先頭の命令または、命令列の一部ずつを固定長に分割した入れ物の先頭にブレークポイントを設定することができた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−１９４９５７号公報
【非特許文献】
【０００５】
【非特許文献１】Ｊｏｎａｔｈａｎ  Ｂ．Ｒｏｓｅｎｂｅｒｇ著，吉川 邦夫訳，「デバッガの理論と実装」，ＩＳＢＮ  ４−７５６１−１７４５−７
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の技術では静的に並列に実行できる命令を決めるアーキテクチャを持つプロセッサのデバッグ装置において、並列に実行できる命令列の任意の命令にブレークポイントを設定することは以下のいずれかの課題によりできなかった。
【０００７】
一番目の課題はプロセッサのアーキテクチャによる制限で論理的に並列に実行できる命令の境界（以後、並列境界と略す）が例えば、１２８ｂｉｔ長単位であるなど固定的に決まって分割されている場合。この場合、この命令列中のいずれかの命令をデバッグ割込みを発生させるデバッグ命令に置き換えても、その命令と同一分割単位の他の命令も並列に実行されてしまう。例えば、図９に示すソースプログラムに対し、図１０に示す機械語コードが生成されたと仮定する。｜｜は次の行の命令と論理的に並列実行できることを意味している。ここで図９の行番号１０の命令にブレークを設定しようとするとデバッグ情報よりアドレス０ｘ８０００００００が得られ、図１１のようにアドレス０ｘ８０００００００のＭＯＶ  Ｒ１，１  ｜｜命令がデバッグ命令であるＢＲＫ  ｜｜に置換される。ここで、ＢＲＫ命令には｜｜が付与されているため、ブレーク成立と同時に後続するＭＯＶ  Ｒ２，２とＭＯＶ  Ｒ３，３命令も論理的に実行される可能性があり、元のソースプログラムにおいては行番号１０にブレークを設定したにも関わらず、１１、１２行目の命令も実行された状態で停止する可能性があるという課題が発生していた。
【０００８】
二番目の課題はプロセッサのアーキテクチャによる制限で並列境界が固定ではないが、いくつかのパターンに限定され、任意の命令では指定できない場合。この場合も一番目の課題と同様に、命令列中のいずれかの命令をデバッグ割込みを発生させるデバッグ命令に置き換えても、デバッグ命令に置き換える位置がパターンの制限により並列境界に設定できなかった場合、その命令と同一分割単位の他の命令も並列に実行されてしまう。
【０００９】
ここでも同じ例を用いて具体例を説明すると仮に並列境界が２命令か３命令おきにしか設定できないプロセッサの場合、先の例でＢＲＫ｜｜命令の｜｜を除去しようとしても、ＢＲＫ命令だけでは１命令なので、並列境界が設定できないため、解決できない課題が発
生していた。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のデバッグ方法は、デバッグ装置を用いて、並列実行境界を意味する特定のビットパターンを各命令のビット領域に備える命令並列実行可能なプロセッサで動作するプログラム中で、並列実行境界で区切られた命令列中のいずれかの命令にブレークポイントを設定させるブレークポイント制御方法であって、ブレークポイントの設定の際に、前記ビットパターンを変更することによって、ブレークポイントの設定対象命令と後続する命令とが並列実行されないよう並列実行境界を追加するブレークポイント設定ステップと前記プログラムを実行させ、前記設定対象命令で実行を停止させ、前記設定対象命令と後続する命令とが並列実行されないよう制御する実行・停止制御ステップとを備えるようにしたものである。
【発明の効果】
【００１１】
本発明によりソースプログラムから機械語プログラムへのプログラム変換時に論理的に並列実行できる命令を決めるプログラム装置を用いるプロセッサにおいて、デバッグを行なう場合に、任意の命令でブレークポイントを設定することが可能になる。
【図面の簡単な説明】
【００１２】
【図１】プログラム変換装置とデバッグ装置を組み合わせたデータの流れ
【図２】デバッグ装置の実施例
【図３】従来の技術のデバッグ装置の制御上の構成要素
【図４】並列命令実行対応デバッグ装置の制御上の構成要素
【図５】３２ビット長命令のビットパターンの構成例
【図６】１６ビット長命令のビットパターンの構成例
【図７】３２ビット長命令の並列境界を合成するビットパターンの例
【図８】１６ビット長命令の並列境界を合成するビットパターンの例
【図９】ソースプログラム例
【図１０】図９のソースプログラムが並列実行命令を含む実行プログラムに変換された例
【図１１】図１０の実行プログラムの先頭の命令を従来の技術でデバッグ命令に置換した例
【図１２】図１０の実行プログラムの先頭の命令を図２２の処理の流れでデバッグ命令に置換した例
【図１３】図１０の実行プログラムの先頭の命令を図２３の処理の流れでデバッグ命令に置換した例
【図１４】図１０の実行プログラムの先頭の命令を図２４の処理の流れでデバッグ命令に置換した例
【図１５】図１０の実行プログラムの二番目の命令の位置に図２５の処理の流れで順序変更してデバッグ命令に置換した例
【図１６】図１０の実行プログラムの二番目の命令の位置に図２６の処理の流れでデバッグ命令を補正した上で置換した例
【図１７】図１０の実行プログラムの先頭の命令を図２８の処理の流れでステップ実行可能に置換した例
【図１８】図１０の実行プログラムの先頭の命令を図２９の処理の流れでステップ実行可能に置換した例
【図１９】図１０の実行プログラムの２つ目の命令を図２９の処理の流れでステップ実行可能に置換した例
【図２０】図１０の実行プログラムの２つ目の命令を図２９の処理の流れに加え、命令順を入れ換えてステップ実行可能に置換した例
【図２１】従来の技術における命令置換処理の流れを示す図
【図２２】並列境界が変更できて、置換後命令が並列実行できる場合の命令置換処理の流れを示した図
【図２３】並列境界が変更できない場合の命令置換処理の流れを示した図
【図２４】並列境界が変更できるが、置換後命令が並列実行できない場合の命令置換処理の流れを示した図
【図２５】並列実行できる命令順序が変更できる場合の命令置換処理の流れを示した図
【図２６】ソフトウェアシミュレーションを利用する場合の命令置換処理の流れを示した図
【図２７】ステップ実行の処理の流れを示した図
【図２８】図２７のＳ２００３が並列境界を変更できる場合の流れを示した図
【図２９】図２７のＳ２００３が並列境界を変更できない場合の流れを示した図
【図３０】本発明におけるプロセッサに関わるブロック図
【図３１】従来技術におけるＶＬＩＷプロセッサの命令実効パイプラインのブロック図
【図３２】本発明におけるプロセッサの第１の実施例における命令実効パイプラインのブロック図
【図３３】本発明におけるプロセッサの第２の実施例における命令実効パイプラインのブロック図
【図３４】本発明におけるプロセッサの第１の実施例における取り消し信号生成部のブロック図
【図３５】本発明におけるプロセッサの第１の実施例における命令実行制御部のブロック図
【図３６】本発明におけるプロセッサの第２の実施例における命令のビットパターンの一例
【図３７】本発明におけるプロセッサの第２の実施例におけるデバッグ命令のビットパターンの一例
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。
【００１４】
図３０は本発明におけるプロセッサとメモリの関係を示したブロック図である。プロセッサ９０１は命令メモリ９０２とデータメモリ９０３に接続される。プロセッサ９０１は命令メモリ９０２より命令をフェッチし、フェッチされた命令を実行し、プロセッサ９０１のレジスタなどの内部状態やデータメモリ９０３の内容を変更する。
【００１５】
プロセッサ９０１は、複数の命令をひとつの命令パケットとして同時に実行するＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）アーキテクチャ構成をとっている。以下ＶＬＩＷアーキテクチャ構成をとるプロセッサをＶＬＩＷプロセッサと呼ぶ。
＜従来のプロセッサの構成＞
ここで、本発明との差異を明確にするために、従来のＶＬＩＷプロセッサの構成を説明する。
【００１６】
図３１に示されるブロック図は、３命令をひとつの命令パケットとして並列実行可能な従来のＶＬＩＷプロセッサにおける命令実行パイプライン構成の一例である。ただし、本発明において重要でない部分については、省略してある。
【００１７】
従来のプロセッサは、命令メモリより命令をフェッチする命令フェッチ部１００１と、フェッチされた命令を解読する命令解読部１０１１〜１０１３と、解読された命令に応じて演算器を選択するマルチプレクサ１０２１と、算術及び論理演算を行うＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  Ｌｏｇｉｃ  ｕｎｉｔ）１０３１と、データメモリにアクセスするメモリアクセスユニット１０３２と、命令のフェッチ先を変更する分岐ユニット１０３３からなる。
【００１８】
命令フェッチ部１００１でフェッチされた命令パケットに含まれる各命令は、命令解読部１０１１〜１０１３で個別に並行して解読される。この際、命令パケット中の最も低位のアドレスに配置された命令は命令解読部１０１１で、次に低位のアドレスに配置された命令は命令解読部１０１２で、最も高位のアドレスに配置された命令は命令解読部１０１
３で解読される。
【００１９】
マルチプレクサ１０２１は命令解読部１０１１〜１９１３で解読された命令を実行するために必要な演算器を選択し、各命令を演算器に送出する。ＶＬＩＷプロセッサにおいて、命令パケット中の各命令は、並列実行されることを前提に配置される。そのため、同一命令パケットに存在する命令には、使用する演算器資源の重複やデータ依存は存在しない。そのため、マルチプレクサ１０２１は非常に簡単な構成で済むことがＶＬＩＷプロセッサの特徴である。
【００２０】
ＡＬＵ１０３１、メモリアクセスユニット１０３２、分岐ユニット１０３３は、マルチプレクサ１０２１より送出された命令を個別に並行して実行する。
【００２１】
分岐ユニット１０３３でデバッグ命令が実行された場合、デバッグ割込み信号１０４１を命令フェッチ部１００１に送出する。命令フェッチ部１００１はデバッグ割込み信号１０４１を受け取ると、デバッグ割込みハンドラとして指定されているアドレスから命令フェッチを行う。
【００２２】
上記で説明したように、ＶＬＩＷプロセッサは複雑な命令スケジューリング機能を持たないながらも限られた演算器資源を有効に使用し、命令を並列実行する。
【００２３】
しかしながら、デバッグ命令は分岐ユニットで実行されるため、分岐ユニットを使用する命令と同じ命令パケットに配置することはできない。このため、プログラムを任意の箇所で停止させるためのブレークポイントを設定する際、任意の命令をデバッグ命令に置き換えることができない。
＜本発明におけるプロセッサの第１の実施例＞
本発明におけるプロセッサ９０１の第１の実施例を説明する。
【００２４】
図３２は本発明のＶＬＩＷプロセッサにおける命令実行パイプライン構成の一例である。ただし、本発明において重要でない部分については、省略してある。
【００２５】
本発明におけるプロセッサの第１の実施例において、プロセッサ９０１は、命令フェッチ部１００１と、命令解読部１０１１〜１０１３と、マルチプレクサ１０２１と、ＡＬＵ１０３１と、メモリアクセスユニット１０３２と、分岐ユニット１０３３を備え、これらは従来のプロセッサと同様の構成である。
【００２６】
本発明におけるプロセッサの第１の実施例において、プロセッサ９０１はさらに、任意の命令がデバッグ割込みを発生させるか否かを検出するデバッグ割込み検出部２０５１〜２０５３を備えるデバッグ割込み解読部２０８１と、命令実行を取り消すための取り消し信号２１１１〜２１１３を生成する取り消し信号生成部２０６１と、命令を無効化することで命令実行を取り消す命令実行制御部２０７１と、デバッグ割込み検出部２０５１〜２０５３より送出されたデバッグ割込み信号２１０１〜２１０３の論理和を取る論理和回路２０９１を備える。
【００２７】
デバッグ割込み検出部２０５１〜２０５３は、命令解読部１０１１〜１０１３より命令信号２１２１〜２１２３を取得し、解読された命令がデバッグ命令か否かを判定する。解読された命令がデバッグ命令であった場合、各デバッグ割込み検出部２０５１〜２０５３に対応するデバッグ割込み信号２１０１〜２１０３をアサートする。
【００２８】
デバッグ割込み検出部２０５１〜２０５３によりアサートされたデバッグ割込み信号２１０１〜２１０３は論理和回路２０９１によりマージされ、デバッグ割込み信号１０４１
として命令フェッチ部１００１に入力される。これにより、従来のプロセッサと同様にデバッグ割込みを発生させることができる。
【００２９】
取り消し信号生成部２０６１は、デバッグ割込み信号２１０１〜２１０３を受け、低位のアドレスに配置された命令のデバッグ割込み信号がアサートされている場合、デバッグ割込み信号がアサートされている命令及び、その命令より高位のアドレスに配置された命令の実行を取り消すように対応する取り消し信号２１１１〜２１１３をアサートする。
【００３０】
命令実行制御部２０７１は、アサートされている取り消し信号２１１１〜２１１３に対応する命令の命令信号２１２１〜２１２３を、ＮＯＰ（Ｎｏ  ＯＰｅｒａｔｉｏｎ）に相当する命令信号に変換し、命令信号２１３１〜２１３３としてＡＬＵ１０３１、メモリアクセスユニット１０３２、分岐ユニット１０３３に送出することで命令の実行を無効化する。
【００３１】
さらに以下で取り消し信号生成部２０６１と命令実行制御部２０７１の構成について説明する。
【００３２】
図３４に取り消し信号生成部２０６１の構成をより詳細に示す。
【００３３】
取り消し信号生成部２０６１は論理和回路４００１〜４００２を備える。
【００３４】
取り消し信号生成部２０６１はデバッグ割込み信号２１０１〜２１０３を入力とする。
【００３５】
デバッグ割込み信号２１０１は、命令パケット中の最も低位のアドレスに配置される命令に対応する。
【００３６】
デバッグ割込み信号２１０２は、命令パケット中の２番目に低位のアドレスに配置される命令に対応する。
【００３７】
デバッグ割込み信号２１０３は、命令パケット中の３番目に低位のアドレスに配置される命令に対応する。
【００３８】
取り消し信号生成部２０６１は取り消し信号２１１１〜２１１３を出力とする。
【００３９】
取り消し信号２１１１は、命令パケット中の最も低位のアドレスに配置される命令に対応する。
【００４０】
取り消し信号２１１２は、命令パケット中の２番目に低位のアドレスに配置される命令に対応する。
【００４１】
取り消し信号２１１３は、命令パケット中の３番目に低位のアドレスに配置される命令に対応する。
【００４２】
取り消し信号２１１１はデバッグ割込み信号２１０１から生成される。
【００４３】
取り消し信号２１１２は、論理和回路４００１に入力されたデバッグ割込み信号２１０２とデバッグ割込み信号２１０２の論理和から生成される。
【００４４】
取り消し信号２１１２は、論理和回路４００２に入力されたデバッグ割込み信号２１０２とデバッグ割込み信号２１０２とデバッグ割込み信号２１０３の論理和から生成される
。
【００４５】
上記の構成により、命令パケット中の任意の命令でデバッグ割込みが発生した場合は、デバッグ割込みが発生した命令及びデバッグ割込みが発生した命令より高位のアドレスに配置された命令に対応する取り消し信号がアサートされる。
【００４６】
図３５に命令実行制御部２０７１の構成をより詳細に示す。
【００４７】
命令実行制御部２０７１はマルチプレクサ５００１〜５００３を備える。
【００４８】
命令実行制御部２０７１は命令信号２１２１〜２１２３、取り消し信号２１１１〜２１１３を入力とする。
【００４９】
命令実行制御部２０７１は命令信号２１３１〜２１３３を出力とする。
【００５０】
マルチプレクサ５００１〜５００３は、命令信号２１３１〜２１３３とＮＯＰに相当する命令信号である０を入力とする。この入力を、取り消し信号２１１１〜２１１３で選択する。
【００５１】
マルチプレクサ５００１〜５００３は、取り消し信号２１１１〜２１１３が０の場合は命令信号２１３１〜２１３３を、取り消し信号が１の場合は０を選択し、出力する。
【００５２】
マルチプレクサ５００１〜５００３の出力が、そのまま命令信号２１３１〜２１３３となり、ＡＬＵ１０３１、メモリアクセスユニット１０３２、分岐ユニット１０３３に送出される。
【００５３】
上記の構成により、任意の命令に対応した取り消し信号２１１１〜２１１３がアサートされた場合、任意の対応する命令信号２１３１〜２１３３がＮＯＰ相当の命令信号に変換される。これにより、アサートされた取り消し信号に基づき、特定の命令を無効化することができる。
【００５４】
以上説明した構成により、本発明におけるプロセッサの第１の実施例におけるプロセッサ９０１では、デバッグ命令を解読すると、解読されたデバッグ命令及び解読されたデバッグ命令より高位のアドレスに配置された命令が無効化され、デバッグ命令を命令パケット中のどこに配置しようが演算器などの命令実行資源不足が発生することがなくなる。即ち、デバッグ命令の実行制限がなくなり、命令パケット中の任意の位置にデバッグ命令を配置可能となる。これにより、プログラムを任意の箇所で停止させるためのブレークポイントを設定する際、任意の命令をデバッグ命令に置き換えることができる。また、命令パケット中のデバッグ命令に後続する命令の実行が取り消されるため、デバッグ割込みが発生し、ブレークポイントでプログラムが停止した際には、ブレークポイントより高位のアドレスに配置された命令が実行されておらず、ブレークポイントと命令実行の関係がより直感的に捉えられる。
【００５５】
なお、以上の実施例において、説明の簡単のために同時実行命令数を３としているが、同時実行命令数が２以上のＶＬＩＷプロセッサにおいて同様の構成を適用可能であり、同様の効果が得られることは自明である。
＜本発明におけるプロセッサの第２の実施例＞
本発明におけるプロセッサ９０１の第２の実施例を説明する。
【００５６】
図３３は本発明のＶＬＩＷプロセッサにおける命令実行パイプライン構成の一例である
。ただし、本発明において重要でない部分については、省略してある。
【００５７】
本発明におけるプロセッサの第２の実施例において、プロセッサ９０１は、命令フェッチ部１００１と、マルチプレクサ１０２１と、ＡＬＵ１０３１と、メモリアクセスユニット１０３２と、分岐ユニット１０３３と、デバッグ割込み検出部２０５１〜２０５３を備えるデバッグ命令解読部２０８１と、論理和回路２０９１を備え、これらは本発明におけるプロセッサ９０１の第１の実施例と同様の構成である。
【００５８】
本発明におけるプロセッサの第２の実施例において、プロセッサ９０１はさらに、フェッチされた命令のうち、特定のビットパターンが検出された命令より高位のアドレスに配置される命令を無効化する命令無効化部３１５１と、有効な命令のみを命令解読部に発行する命令発行部３１６１と、発行された命令を解読する命令解読部２０１１〜２０１３を備える。
【００５９】
命令無効化部３１５１は、フェッチされた命令パケット中の各命令の一部が、特定のビットパターンを有するか否かを判定する。本発明におけるプロセッサの第２の実施例において、特定のビットパターンとは、図３６に示すように１６ｂｉｔ命令において、最上位の１ビットが１であるパターンとする。他のビットが０であるか１であるかは問わない。
【００６０】
命令無効化部３１５１は、任意の命令に特定のビットパターンが有ると判定すると、その命令が無効であることを示す信号を命令発行部３１６１に送出する。
【００６１】
命令発行部３１５１は、命令無効化部３１５１より命令が無効であることを示す信号を基に命令解読部２０８１に発行する命令を選別する。
【００６２】
命令発行部３１５１は、無効命令より高位のアドレスに配置された命令パケット中の全ての命令を無効とみなし、命令解読部に命令を発行しない。
【００６３】
命令解読部２０１１〜２０１３は、命令発行部３１５１から命令が発行されない場合は、命令を解読せずにＮＯＰ命令に相当する命令信号をマルチプレクサ１０２１に送出する。
【００６４】
命令解読部２０１１〜２０１３は、デバッグ命令を解読した際には、いずれの演算器も使用しないという信号を命令信号としてマルチプレクサ１０２１に出力する。
【００６５】
本発明におけるプロセッサの第２の実施例における、デバッグ命令のビットパターンを図３７に示す。
【００６６】
デバッグ命令は、ｂｉｔ０、ｂｉｔ４、ｂｉｔ８、ｂｉｔ１２が０であり、その他のビットが１で構成される。最上位ビットが１であるため、命令無効化部３１５１により、命令パケット中のデバッグ命令より高位のアドレスに配置された命令は全て無効となり、命令解読部２０１１〜２０１３に発行されることはない。これにより、デバッグ命令より高位のアドレスに配置された命令は実行されない。
【００６７】
以上説明した構成により、本発明におけるプロセッサの第２の実施例におけるプロセッサ９０１では、デバッグ命令はいずれの演算器資源も使用しないと解読されるため、デバッグ命令を命令パケット中のどこに配置しようが演算器などの命令実行資源不足が発生することがなくなる。即ち、デバッグ命令の実行制限がなくなり、命令パケット中の任意の位置にデバッグ命令を配置可能となる。これにより、プログラムを任意の箇所で停止させるためのブレークポイントを設定する際、任意の命令をデバッグ命令に置き換えることが
できる。また、命令パケット中のデバッグ命令に後続する命令の実行が取り消されるため、デバッグ割込みが発生し、ブレークポイントでプログラムが停止した際には、ブレークポイントより高位のアドレスに配置された命令が実行されておらず、ブレークポイントと命令実行の関係がより直感的に捉えられる。
【００６８】
なお、以上の実施例において、説明の簡単のために同時実行命令数を３としているが、同時実行命令数が２以上のＶＬＩＷプロセッサにおいて同様の構成を適用可能であり、同様の効果が得られることは自明である。
＜本発明におけるデバッグ方法の実施例＞
以下、本発明におけるデバッグ方法の実施の形態について、図１から図２９を用いて説明する。
【００６９】
図１に一般的なプログラム変換装置とデバッグ装置を組み合わせたデータの流れを示す。入出力装置１０５からのユーザの指示によりソースプログラム１０１はプログラム変換装置１０２により実行プログラム１０３ａに変換される。その際にソースプログラム１０１と実行プログラム１０３ａの対応づけをデバッグ情報１０３ｂとして出力させることもできる。
【００７０】
入出力装置１０５からのユーザの指示によりデバッグ装置１０４は実行プログラム１０３ａと存在する場合はソースプログラム１０１及びデバッグ情報１０３ｂを参照し、プログラムの実行、停止、状態参照などの様々なデバッグ操作を制御する。
【００７１】
図２はより具体的なデバッグ装置の例を示したものである。
【００７２】
２０１はプログラム変換装置及びデバッグ装置のホスト側ソフトウェアを実行するホストコンピュータである。２０４はターゲットとなるプロセッサの評価ボードであり、これらを接続ケーブル２０５で接続している。ターゲットとなるプロセッサをホストコンピュータ上でシミュレーションする場合は、２０４及び２０５は不要となる。２０１はホストコンピュータと接続された出力装置のディスプレイであり、２０３は同じく入力装置のキーボード及びマウスである。２０６はデバッグ装置が出力した表示画面である。
【００７３】
図３は従来の技術のデバッグ装置の制御上の構成要素を示したものである。入出力手段５０１、実行プログラム・デバッグ情報読み込み手段５０２、命令参照・変更手段５０３、実行・停止制御手段５０４、デバッグ情報検索手段５０５から構成される。
【００７４】
図４は本発明の実施の形態におけるデバッグ装置の制御上の構成要素を示したものである。６０１から６０５はそれぞれ５０１から５０５と同じものである。並列実行命令列境界細分化手段６０６は論理的に並列実行可能な命令列の並列境界をさらに細分化した命令列に分解し、そこに並列境界を追加設定する手段である。並列実行命令列再構成手段は論理的に並列実行可能な命令列中の並列境界を変更しないまま、その中の複数の命令を置換する手段である。
【００７５】
図５は可変長命令かつ論理的に並列実行可能なプロセッサの３２ビット長命令におけるビットパターン構成例を示している。ｌｅｎは命令長を区別するためのビットでｅｎｄは並列境界を示すビットを示している。
【００７６】
図６は可変長命令かつ論理的に並列実行可能なプロセッサの１６ビット長命令におけるビットパターン構成例を示している。ｌｅｎ、ｅｎｄの意味は図５と同じである。
【００７７】
図７は図４１のビットパターンに対する並列境界を設定するための論理和で、図８は同
じく図４２に対するものである。
【００７８】
図９はソースプログラム１０１の一部分を示した例である。図１０は図９のソースプログラムをコンパイルした後の実行プログラムの例である。
【００７９】
図１１は図１０の実行プログラムの先頭の命令を従来の技術でデバッグ命令に置換した例を示したものである。
【００８０】
図１２は図１０の実行プログラムの先頭の命令を図２２の処理の流れでデバッグ命令に置換した例を示したものである。
【００８１】
図１３は図１０の実行プログラムの先頭の命令を図２３の処理の流れでデバッグ命令に置換した例を示したものである。
【００８２】
図１４は図１０の実行プログラムの先頭の命令を図２４の処理の流れでデバッグ命令に置換した例を示したものである。
【００８３】
図１５は図１０の実行プログラムの二番目の命令の位置に図２５の処理の流れで順序変更してデバッグ命令に置換した例を示したものである。
【００８４】
図１６は図１０の実行プログラムの二番目の命令の位置に図２６の処理の流れでデバッグ命令を補正した上で置換した例を示したものである。
【００８５】
図１７は図１０の実行プログラムの先頭の命令を図２８の処理の流れでステップ実行可能に置換した例を示したものである。
【００８６】
図１８は図１０の実行プログラムの先頭の命令を図２９の処理の流れでステップ実行可能に置換した例を示したものである。
【００８７】
図１９は図１０の実行プログラムの２つ目の命令を図２９の処理の流れでステップ実行可能に置換した例を示したものである。
【００８８】
図２０は図１０の実行プログラムの２つ目の命令を図２９の処理の流れに加え、命令順を入れ換えてステップ実行可能に置換した例を示したものである。
【００８９】
図２１は従来の技術における命令置換処理の流れ図を示したものである。
【００９０】
図２２は並列境界が変更できて、置換後命令が並列実行できる場合の命令置換処理の流れ図を示したものである。
【００９１】
図２３は並列境界が変更できない場合の命令置換処理の流れ図を示したものである。
【００９２】
図２４は並列境界が変更できるが、置換後命令が並列実行できない場合の命令置換処理の流れ図を示したものである。
【００９３】
図２５は並列実行できる命令順序が変更できる場合の命令置換処理の流れ図を示したものである。
【００９４】
図２６はソフトウェアシミュレーションを利用する場合の命令置換処理の流れ図を示したものである。
【００９５】
図２７は、ステップ実行の処理の流れ図を示したものである。
【００９６】
図２８は、図２７のＳ２００３が並列境界を変更できる場合の流れ図を示したものである。
【００９７】
図２９は、図２７のＳ２００３が並列境界を変更できない場合の流れ図を示したものである。
【００９８】
以下、これらの図を用いて詳細に説明する。
【００９９】
並列命令実行が可能なプロセッサのプログラムをデバッグ装置を利用してデバッグする場合、利用者は図１で説明した通りの流れで、デバッグ装置１０４に実行プログラム１０３ａと存在する場合、デバッグ情報１０３ｂをロードする。
【０１００】
ここで、ソースプログラム１０１の一部が図９のような場合を想定して説明する。図７１をコンパイルした結果、実行プログラムの一部として図１０に示すようなコードが生成されたものとする。同図においてアドレスは命令が格納されている位置を示している。グループは説明の便宜上、論理的に並列に実行可能な命令列の固まりを区別するための通し番号で、実際の機械語コード中には番号自体は含まれていない。ニーモニックは機械語コードを利用者が理解できるように簡略化した英単語や記号の組合せに置き換えたものである。ここで、ＭＯＶ  Ｒ１，１とは、Ｒ１レジスタに１を転送することを、ＣＡＬＬ  ｓｕｂとは関数ｓｕｂを呼び出すことを意味している。またニーモニック末尾の｜｜記号は次のアドレスの命令と論理的に並列に実行可能なことを示しているものとする。また、デバッグ割込みを発生させるデバッグ命令はＢＲＫ命令、プログラムカウンタを進める命令はＮＯＰ命令とする。
【０１０１】
デバッグ装置の利用者が図９における行番号１０にブレークポイントを設定しようとした場合、該当する機械語コードのアドレスは従来技術を使ってデバッグ情報から０ｘ８０００００００と変換できる。これを従来の技術で命令境界を変更せずにそのままデバッグ命令に置き換えると図８１のＭＯＶ  Ｒ１，１  ｜｜命令は図８２のＢＲＫ  ｜｜命令に置換される。従来の技術の処理の流れは図２１に示す通りである。
【０１０２】
Ｓ１００１で命令置換処理を開始し、ブレークポイントを削除した時に備えて、元の命令をＳ１００２で保存し、１０２０にアドレスと元の命令を格納しておく。Ｓ１００３で置換後命令、即ちブレーク設定の場合はＢＲＫ命令に置き換える。Ｓ１００４で命令置換処理は終了する。ブレークポイントを削除する時はＳ１０１０で命令復元処理を開始し、１０２０に格納しておいた対応するアドレスと元の命令を使ってＳ１０１１で元の命令に置換する。Ｓ１０１２で命令復元処理を完了する。
【０１０３】
本発明ではこの処理の流れを図２２、図２３、図２４のいずれかの方法を用いて解決する。図２２，図２４は請求項３の実施例に対応する。図２３は請求項５の実施例に対応する。
【０１０４】
プロセッサが任意の命令に並列境界を設定可能なアーキテクチャの場合、図２２の方法が利用できる。Ｓ１１０１で命令置換処理を開始し、Ｓ１１０２で元の命令を１１２０に保存する。ここまでは従来技術と同様である。次にＳ１１０３において、置換後命令、即ちブレーク設定の場合はＢＲＫ命令と並列境界のビットパターンを合成する。ブレークの場合は、該当命令で区切りをつけたいので、並列境界として合成する。図５，図６の３２，１６ビット長の２種類の命令長を持つアーキテクチャを例にとると命令長を示すｌｅｎ
ビットでまず命令長を判断する。ｘｘｘ．．．の部分が命令そのものを示すビットパターンであるため、この部分がＢＲＫ命令のパターンとなる。ｅｎｄビットは並列境界を示しており、ここが０なら境界でなく、１なら境界であるとする。ＢＲＫ命令のパターンと命令長に合わせ、図７または図８の並列境界を設定するビットパターンの論理和をとることにより実現される。最後にＳ１１０４において合成されたビットパターンに置き換え、Ｓ１１０５で命令置換処理を終了する。ブレークを削除する場合は、従来のＳ１０１０からＳ１０１２と全く同様にＳ１１１０からＳ１１１２の処理を行なう。
【０１０５】
図２２の処理の流れにより、図９のソースプログラムに対応する行番号１０にブレークを設定した場合は、図１２のようにデバッグ装置内部で置換された状態となる。
【０１０６】
プロセッサが１または３命令単位に並列境界を設定可能だが、２命令単位には設定できないなど制約を持つアーキテクチャの場合、図２４の方法が利用できる。Ｓ１３０１で命令置換処理を開始し、Ｓ１３０２でブレークを設定したい自命令と論理的に同時に実行可能な命令グループの元の命令列を１３２０としてアドレスと元の命令列をセットで格納する。Ｓ１３０３において自命令と同じグループの命令をプロセッサの制約の範囲で別のグループに分解する。グループの分解は先の図２２の説明と同様に並列境界を設定することによって行なう。Ｓ１３０４で自命令を置換後命令、即ちＢＲＫ命令に置き換え、Ｓ１３０５で命令置換処理を終了する。ブレークを削除する場合は、従来のＳ１０１０からＳ１０１２と同様にＳ１３１０からＳ１３１２の処理を行なう。相違はＳ１３１１において単一命令ではなく、同一グループの命令列を復元している点がある。
【０１０７】
図２４の処理の流れにより、図９のソースプログラムに対応する行番号１０にブレークを設定した場合は、図１４のようにデバッグ装置内部で置換された状態となる。ブレークを設定する位置がプロセッサ制約内で並列境界に分解できれば、上記で解決できる。
【０１０８】
上記の方法でもプロセッサ制約で無理の場合は、図２３の方法が利用できる。
【０１０９】
Ｓ１２０１で命令置換処理を開始する。Ｓ１２０２は先のＳ１３０２と同じである。Ｓ１２０３はブレークを設定したい位置の命令を置換後命令、即ちＢＲＫ命令に置換する。次にＳ１２０４において、後続する同一グループの命令をプログラムカウンタを進めるだけのＮＯＰ命令に置き換える。Ｓ１２０５で命令置換処理を終える。
ブレークを削除する場合は、Ｓ１３１０からＳ１３１２と同様にＳ１２１０からＳ１２１２の処理を行なう。
【０１１０】
図２３の処理の流れにより、図９のソースプログラムに対応する行番号１０にブレークを設定した場合は、図１３のようにデバッグ装置内部で置換された状態となる。この場合、実際に停止するのは０ｘ８００００００８のＮＯＰ命令まで実施した後になる可能性があるが、デバッグ装置では１３２０の情報中のアドレスを利用して、０ｘ８０００００００で停止したと補正を行なう。
【０１１１】
次にデバッグ装置において図９のソースプログラムの行番号１０の位置から１実行文（命令ではなくステートメント）だけステップ実行する場合を例に説明する。このソースプログラムに対応する機械語コードは図１０のように生成されるものとする。
プロセッサにステップ実行を指示すると行番号１０に対応する機械語コードは行番号１１，１２に対応する機械語コードとも論理的に並列実行可能となっているために、同時に実行されてしまう可能性がある。
【０１１２】
図２７に本発明の並列実行に対応したステップ実行の基本の制御の流れを示す。Ｓ２００１においてステップ実行処理を開始する。Ｓ２００２でステップ実行したい命令が並列
実行命令であるかどうかを判定する。先に説明した図５や図６のような命令フォーマットの場合、ｅｎｄビットが０であれば、並列実行命令として判断できる。並列実行命令でないと判断された場合は、従来の並列実行でないプロセッサの時の技術と同様にＳ２００６で自命令のみを単位実行してＳ２００７でステップ実行処理を終える。並列実行命令と判断された場合は、Ｓ２００３で並列実行命令列を単位実行できるように再構成する。この際、元の命令を保存しておく。詳細は図２８と図２９を用いて後述する。Ｓ２００４で再構成した並列実行命令列を単位実行し、Ｓ２００５で再構成した命令列をＳ２００３で保存しておいた元の命令列に復元する。Ｓ２００７でステップ実行処理を終了する。
【０１１３】
Ｓ２００３の詳細を説明する。
【０１１４】
図２８は請求項４の実施例に対応する。Ｓ２１０１で命令置換処理が開始され、Ｓ２１０２で２１２０にステップ実行したい位置のアドレス、元の命令を保存する。Ｓ２１０３で自命令と並列境界のビットパターンを合成する。並列境界のビットパターンの合成方法は図２２のＳ１１０３の説明と同じである。Ｓ２１０４で合成したビットパターンに置き換え、Ｓ２１０５で命令置換処理を終える。この状態でステップ実行を行ない、停止した時点でＳ２１１０において命令復元処理を開始する。Ｓ２１１１で２１２０に保存したアドレス、元の命令に置換し、Ｓ２１１２で命令復元処理を終了する。
【０１１５】
これらの処理により、ステップ実行する間だけ図１７のように置換を行ない、０ｘ８０００００００の命令のみを単一のグループとして実行することが可能になる。これにより、行番号１０に１実行文に対応する命令列だけを区別して実行することが可能になる。
【０１１６】
プロセッサの制約により、並列境界が変更できない場合は、図２９の方法を用いる。図２９は請求項６の実施例に対応する。
【０１１７】
Ｓ２２０１により命令置換処理を開始する、Ｓ２２０２によりステップ実行したい位置の自命令と同じ命令グループのアドレスと元の命令列を２２２０として保存する。２９３において自命令と同じ命令グループの自命令以外の他の命令をＮＯＰ命令に置き換える。Ｓ２２０４で命令置換処理を終了する。この状態でステップ実行を行ない、実行が停止したら、Ｓ２２１０で命令復元処理を開始する。Ｓ２２１１で２２２０の情報を使って元の命令列に置換する。Ｓ２２１２で命令復元処理を終了する。
【０１１８】
これらの処理により、ステップ実行する間だけ図１８のように置換を行ない、０ｘ８０００００００からステップ実行を行なう。この場合、実際に停止するのは０ｘ８００００００８のＮＯＰ命令まで実施した後になる可能性もあるが、デバッグ装置では２２２０の情報中のアドレスを利用して、１命令分進めた０ｘ８００００００４で停止したと補正を行なう。同様に更にステップ実行を行なう場合は、０ｘ８０００００００と０ｘ８００００００８の命令をＮＯＰ命令に置き換えて、図１９のように置き換えて、０ｘ８００００００４の命令だけ実行したのと同様の結果が得られるようにする。
【０１１９】
ここで、もしプロセッサがＮＯＰ命令は命令グループの末尾にしか配置できないなど制約をもっている場合は、図２０のようにＮＯＰ命令以外を先頭に、ＮＯＰ命令を後続するように入れ換えることにより回避する。この方法が請求項８の実施例に対応する。
【０１２０】
デバッグ命令の記述箇所が命令グループの最後である必要があるなど制約を持ったプロセッサの場合、デバッグ命令の位置を制約に従い最後に移動し、元々設定したかった位置から移動した位置までの間をＮＯＰ命令に置き換える。この時の処理は図２９と同じである。そして停止した位置は元々ブレークを設定したかった場所であるとデバッグ装置が補正を行なうことで解決する。
【０１２１】
デバッグ命令の記述箇所が命令グループの先頭である必要があるなど制約を持ったプロセッサの場合、デバッグ命令の位置を制約に従い先頭に挿入し、元々設定したかった位置までの命令は命令順序をデバッグ命令を挿入した分だけ移動することで回避する。
例えば、図１０の二番目の命令にブレークを設定したい場合、図２５のようにＳ１４０１で命令置換処理を始め、Ｓ１４０２で自命令と同じ命令グループの元の命令をアドレスと元の命令列をセットで１４２０として保存する。Ｓ１４０３で自命令と同じ命令グループの命令を置換後命令配置制約、即ち今回の例の場合、先頭にしか配置できないため、自命令を先頭に移動し、元々先頭にあった命令の位置から自命令が元々あった位置までの命令を順に後ろへ移動する。Ｓ１４０４で順序変更後の自命令は置換後命令配置制約を受けなくなっているため置換後命令に置換を行なう。Ｓ１４０５にて命令置換処理を終了する。この結果として図１５のような命令列に置換が行なわれる。この方法が請求項７の実施例に対応する。
【０１２２】
デバッグ命令の記述箇所が命令グループの先頭である必要があるなど制約を持ったプロセッサの場合、デバッグ命令の位置を制約に従い先頭に移動し、元々ブレークを設定したかった位置までの命令はソフトウェアでシミュレーションすることで回避する。例えば、図１０の二番目の命令にブレークを設定したい場合、図２６におけるＳ１５０１で命令置換処理を始める。Ｓ１５０２で自命令と同じ命令グループの命令列をアドレスと元の命令列をセットにして１５２０として保存する。図２４におけるＳ１３０３と同様の方法でＳ１５０３にて自命令と同じ命令グループの命令を別グループに分解する。Ｓ１５０４にて、命令の配置制約に従い、自命令と同じ命令グループの先頭命令を置換後命令に置換し、Ｓ１５０５にて命令置換処理を終了する。ここまでで図８７のような状態になる。ここでプログラムの実行を開始し、ＢＲＫ命令でブレークが検出された場合、Ｓ１５１０で命令復元処理が開始され、Ｓ１５１１にて１５２０にて保存しておいたアドレスから元の命令列を復元する。Ｓ１５１２にて命令復元処理を終了する。ブレークを検出した位置から元々ブレークを設定したかった命令まで一命令ずつソフトウェアシミュレーションを実施する。ＭＯＶ  Ｒ１，１ならＲ１レジスタに１を設定することでソフトウェアシミュレーションする。元々ブレークを設定したかった位置に到達した時点で再度、Ｓ１５０１からのフローを処理し、命令置換された状態に戻す。ブレークを検出した場所を元々ブレークを設定したかった場所に置き換え、デバッグ装置のブレーク検出を処理を終える。この方法が請求項９の実施例に対応する。
【０１２３】
並列境界が変更できず、ＮＯＰ命令がないなどの制約を持つプロセッサにおいてステップ実行したい場合、既に説明した図２８，図２９のいずれの方法も解決できない。例えば、図９の先頭の実行文をステップ実行したい場合、実行文に対応する命令列をデバッグ情報中の１０３ｂから検索して求める。図１０のような機械語コードが生成されていた場合は、この時点でアドレス０ｘ８０００００００の命令のみが抽出される。ここで該当の命令がＭＯＶ  Ｒ１，１であるので、デバッグ装置においてＲ１レジスタに１を設定するようにソフトウェアエミュレーションすることで、見かけ上、プロセッサが該当命令のみをステップ実行したのと同じ結果を得ることができる。この方法が請求項１１において請求項１０を使った実施例に対応する。
【産業上の利用可能性】
【０１２４】
本発明にかかる並列命令実行可能なプロセッサは、各種制御装置、信号処理装置など高い実行性能を要求される電子機器に適用可能である。
【０１２５】
デバッグ命令を自由に配置可能という本発明のプロセッサの特徴は、電子機器のソフトウェア開発において有用となる。
【０１２６】
本発明にかかる並列命令実行対応デバッグ装置はソフトウェアの開発において、プログラム変換装置によって生成された並列に実行可能な命令列に対して、一命令単位に実行するプロセッサにおけるデバッグ装置と同様に自由にブレークポイントの設定、ステップ実行などの単位実行操作を利用する場合に有用である。
ホストコンピュータなど組み込み以外のプロセッサにも応用できる。
【符号の説明】
【０１２７】
１０１  ソースプログラム
１０２  プログラム変換装置
１０３ａ  実行プログラム
１０３ｂ  デバッグ情報
１０４  デバッグ装置
１０５  入出力装置
２０１  ホストコンピュータ
２０２  ディスプレイ
２０３  入力装置
２０４  評価用ボード
２０５  接続ケーブル
２０６  表示画面
５０１  入出力手段
５０２  実行プログラム・デバッグ情報読み込み手段
５０３  命令参照・変更手段
５０４  実行・停止制御手段
５０５  デバッグ情報検索手段
６０１  入出力手段
６０２  実行プログラム・デバッグ情報読み込み手段
６０３  命令参照・変更手段
６０４  実行・停止制御手段
６０５  デバッグ情報検索手段
６０６  条件付命令合成手段
６０７  条件別実行位置検出手段
１００１  命令フェッチ部
１０１１  命令解読部
１０１２  命令解読部
１０１３  命令解読部
１０２１  マルチプレクサ
１０３１  ＡＬＵ
１０３２  メモリアクセスユニット
１０３３  分岐ユニット
１０４１  デバッグ割込み信号
２０５１  デバッグ割込み検出部
２０５２  デバッグ割込み検出部
２０５３  デバッグ割込み検出部
２０６１  取消信号生成部
２０７１  命令実行制御部
２０８１  デバッグ命令解読部
２０９１  論理和回路
２１０１  デバッグ割込み信号
２１０２  デバッグ割込み信号
２１０３  デバッグ割込み信号
２１１１  取り消し信号
２１１２  取り消し信号
２１１３  取り消し信号
２１２１  命令信号
２１２２  命令信号
２１２３  命令信号
２１３１  命令信号
２１３２  命令信号
２１３３  命令信号
３０１１  命令解読部
３０１２  命令解読部
３０１３  命令解読部
３１５１  命令無効化部
３１６１  命令発行部
４００１  論理和回路
４００２  論理和回路
５００１  マルチプレクサ
５００２  マルチプレクサ
５００３  マルチプレクサ
【図１】
2011181100.tif 000003
【図２】
2011181100.tif 000004
【図３】
2011181100.tif 000005
【図４】
2011181100.tif 000006
【図５】
2011181100.tif 000007
【図６】
2011181100.tif 000008
【図７】
2011181100.tif 000009
【図８】
2011181100.tif 000010
【図９】
2011181100.tif 000011
【図１０】
2011181100.tif 000012
【図１１】
2011181100.tif 000013
【図１２】
2011181100.tif 000014
【図１３】
2011181100.tif 000015
【図１４】
2011181100.tif 000016
【図１５】
2011181100.tif 000017
【図１６】
2011181100.tif 000018
【図１７】
2011181100.tif 000019
【図１８】
2011181100.tif 000020
【図１９】
2011181100.tif 000021
【図２０】
2011181100.tif 000022
【図２１】
2011181100.tif 000023
【図２２】
2011181100.tif 000024
【図２３】
2011181100.tif 000025
【図２４】
2011181100.tif 000026
【図２５】
2011181100.tif 000027
【図２６】
2011181100.tif 000028
【図２７】
2011181100.tif 000029
【図２８】
2011181100.tif 000030
【図２９】
2011181100.tif 000031
【図３０】
2011181100.tif 000032
【図３１】
2011181100.tif 000033
【図３２】
2011181100.tif 000034
【図３３】
2011181100.tif 000035
【図３４】
2011181100.tif 000036
【図３５】
2011181100.tif 000037
【図３６】
2011181100.tif 000038
【図３７】
2011181100.tif 000039