(57)【要約】【課題】プログラム修正に伴う制御タイミングの変化を抑制するための機械語プログラムの生成に要する時間を減少させる制御タイミング調整方法を提供すること。【解決手段】修正後ソースコード２ａから修正後中間言語コード５を生成し、修正後ソースコード２ａをコンパイルして得られる修正後機械語コードの実行クロック数である第１の実行クロック数を、修正後中間言語コード５を用いて算出し、修正前ソースコードをコンパイルして得られる修正前機械語コードの実行クロック数である第２の実行クロック数と第１の実行クロック数を比較し、第１の実行クロック数と第２の実行クロック数の差分を小さくするように機械語命令の追加、削除及び変更の少なくとも１つが行われた修正後機械語コード６１を、修正後中間言語コード５から生成する。また、修正後中間言語コード５は、修正後機械語コード６1の機械語命令に一意に対応付けられる命令群を含む。【選択図】図２
2009076002.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置により実行される機械語プログラムのプログラム修正に伴う制御タイミングを調整する制御タイミング調整方法であって、
修正後ソースプログラムから修正後中間言語プログラムを生成し、
前記修正後ソースプログラムをコンパイルして得られる修正後機械語プログラムの実行クロック数である第１の実行クロック数を、前記修正後中間言語プログラムを用いて算出し、
修正前ソースプログラムをコンパイルして得られる修正前機械語プログラムの実行クロック数である第２の実行クロック数と前記第１の実行クロック数を比較し、
前記第１の実行クロック数と前記第２の実行クロック数の差分を小さくするように前記修正後機械語プログラムに対して機械語命令の追加、削除及び変更の少なくとも１つが行われた調整済機械語プログラムを、前記修正後中間言語プログラムから生成し、
前記修正後中間言語プログラムは、前記修正後機械語プログラムの機械語命令夫々に一意に対応付けられる命令を含む、制御タイミング調整方法。
【請求項２】
前記第２の実行クロック数は、修正前ソースプログラムから生成される修正前中間言語プログラムを用いて算出され、
前記修正前中間言語プログラムは、前記修正前機械語プログラムの機械語命令夫々に一意に対応付けられる命令を含む、請求項１に記載の制御タイミング調整方法。
【請求項３】
前記第１の実行クロック数と前記第２の実行クロック数の比較は、前記修正前中間言語プログラム及び前記修正後中間言語プログラムの命令毎又は複数の命令から成る一塊の処理である命令群毎に行われる請求項２に記載の制御タイミング調整方法。
【請求項４】
前記機械語命令は、前記情報処理装置における当該機械語命令の実行クロック数の制御に使用される実行クロック数指定情報を含む請求項１乃至３のいずれか１項に記載の制御タイミング調整方法。
【請求項５】
前記情報処理装置は、前記実行クロック数指定情報から前記機械語命令の実行すべき実行クロック数を判定し、
前記判定された実行クロック数に基づき、前記機械語命令を実行することを特徴とする請求項４に記載の制御タイミング調整方法。
【請求項６】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数の増加又は減少を示す情報であり、
前記情報処理装置は、前記実行クロック数指定情報を前記機械語命令の実行クロック数に反映することを特徴とする請求項５に記載の制御タイミング調整方法。
【請求項７】
ソースプログラムに対応する機械語プログラムを生成するコンパイル処理をコンピュータに実行させるためのコンパイルプログラムであって、
前記コンパイル処理は、
修正後ソースプログラムから修正後中間言語プログラムを生成する処理と、
前記修正後ソースプログラムをコンパイルして得られる修正後機械語プログラムの実行クロック数である第１の実行クロック数を、前記修正後中間言語プログラムを用いて算出する処理と、
修正前ソースプログラムをコンパイルして得られる修正前機械語プログラムの実行クロック数である第２の実行クロック数と前記第１の実行クロック数の差分を判定する処理と、
前記修正後中間言語プログラムから生成される前記修正後機械語プログラムに、前記第１の実行クロック数と前記第２の実行クロック数の差分を小さくするように機械語命令の設定を行う処理と、を含むコンパイルプログラム。
【請求項８】
前記機械語命令は、当該機械語命令の実行クロック数を指定する実行クロック数指定情報を含めて生成される請求項７に記載のコンパイルプログラム。
【請求項９】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数を予め定められた基準値からの相対値として表した情報である請求項８に記載のコンパイルプログラム。
【請求項１０】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数である請求項８に記載のコンパイルプログラム。
【請求項１１】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数の増加を示す情報である請求項８又は９に記載のコンパイルプログラム。
【請求項１２】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数の減少を示す情報である請求項８又は９に記載のコンパイルプログラム。
【請求項１３】
ソースプログラムに対応する機械語プログラムを生成するコンパイル処理を行うコンパイル装置であって、
修正後ソースプログラムから修正後中間言語プログラムを生成する中間言語プログラム生成部と、
前記修正後ソースプログラムをコンパイルして得られる修正後機械語プログラムの実行クロック数である第１の実行クロック数を、前記修正後中間言語プログラムを用いて算出する実行クロック数算出部と、
修正前ソースプログラムをコンパイルして得られる修正前機械語プログラムの実行クロック数である第２の実行クロック数と前記第１の実行クロック数の差分を判定する実行クロック数判定部と、
前記修正後中間言語プログラムから生成される前記修正後機械語プログラムに、前記第１の実行クロック数と前記第２の実行クロック数の差分を小さくするように機械語命令の設定を行う実行クロック数設定部と、を備えるコンパイル装置。
【請求項１４】
前記実行クロック数設定部は、前記機械語命令に前記第１の実行クロック数と前記第２の実行クロック数の差分を小さくするように当該機械語命令の実行クロック数を指定する実行クロック数指定情報を設定する請求項１３に記載のコンパイル装置。
【請求項１５】
機械語命令当たりの実行クロック数の制御に使用される実行クロック数指定情報を含む機械語命令を読み込む命令読込部と、
前記実行クロック数指定情報を参照して前記機械語命令の実行クロック数を判定する実行クロック数指定判定部と、
前記実行クロック数によって前記機械語命令を実行する命令実行部と、
を備える情報処理装置。
【請求項１６】
前記実行クロック数指定判定部により判定された実行クロック数を前記機械語命令の実行クロック数に反映する実行クロック数反映部をさらに備える請求項１５に記載の情報処理装置。
【請求項１７】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数が予め定められた基準値からの相対値として指定される請求項１５又は１６に記載の情報処理装置。
【請求項１８】
前記実行クロック数指定情報は、前記機械語命令の実行クロック数の増加又は減少を示す情報である請求項１５乃至１７のいずれか１項に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御タイミング調整方法、コンパイルプログラム、コンパイル装置、及び情報処理装置に関するものであり、特に、コンパイルされたプログラムを情報処理装置上で実行する際に制御タイミングを調整する方法に関する。
【背景技術】
【０００２】
プログラム開発では、検査工程などで検出したプログラムの不具合の修正を施した場合、その修正の確認は、不具合を検出するに至った処理のみならず、デグレードの発生を回避するため、それまで正常に動作していた処理についても、その修正の影響が及ぶであろう全てのルートの正常性確認をも行わなければならないということが原則とされている。
【０００３】
近年、組み込みシステム向けマイクロコンピュータのプログラム開発においては、高級言語（例えば、Ｃ言語）でソースプログラムを作成し、コンパイラにより低級言語（例えば、アセンブリ言語や機械語）で記述されたオブジェクトプログラム（目的プログラム）へ自動変換する開発手法が中心となっている。
【０００４】
一般に、高級言語を用いた開発手法は、プログラム作成にかける手間を軽減させ、設計に注力できるというメリットがある反面、高級言語レベルでの僅かなプログラム修正が、低級言語レベルでは複数個所に影響が及び、プログラム処理の実行タイミングが微妙に変化することで、事前に想定し得なかったプログラム動作に起因する不具合が生じることが懸念される。そこで、この高級言語でのプログラム修正に起因するプログラム実行時間の増減を最小限に抑えることがプログラム開発の効率化やプログラムの再利用という観点で重要とされている。
【０００５】
このように、組み込みシステム向けマイクロコンピュータなどのコンピュータ機器においては、上述のようなプログラム実行タイミングの変化の影響で、内部処理あるいは外部機器を制御するための制御信号の出力タイミング（制御タイミング）が誤動作を引き起こすことになりかねないため、制御タイミングを調整することが必要となる。（このように、制御タイミングを調整することを以下では制御タイミング調整と称す。）このとき、高精度を求められる処理における制御タイミングの調整は、マイクロコンピュータに内蔵されたハードウェアタイマや割り込み機能を用いて行う。一方、高精度を求められない処理における制御タイミングの調整は、低級言語レベルでの実行命令を増減させることで、マイクロコンピュータのプログラム実行時間を調節し、所望の動作が行われるようにしている。
【０００６】
上記のような高級言語開発での制御タイミング調整方法が、特許文献１に記載されている。ここでは、３つの段階により制御タイミングの調整が行われている。
【０００７】
第１の段階では、ソースプログラムに対し、コンパイラ（又はアセンブラ）の静的解析により目的プログラム及び前記目的プログラムのステップ数調整オブジェクトを生成する。前記ステップ数調整オブジェクトとは、前記目的プログラムのすべての分岐ルートにおける命令（ステップ）数が等しくなるように追加される、実質的な処理を伴わないダミー命令の集合体である。第２の段階では、前記目的プログラムに対し、リンカによる実メモリ配置による静的解析を行い、前記ステップ数調整オブジェクトを修正し、前記ステップ数調整オブジェクトを結合した実行形式プログラムを生成する。第３の段階では、前記実行形式プログラムをエミュレータやシミュレータなどを用いて動的解析を行い、前記ステップ数調整オブジェクトを修正する。尚、第３の段階で前記ステップ数調整オブジェクトの修正が行われた場合は、修正後の前記ステップ数調整オブジェクトを結合した実行形式プログラムを再生成し、動的解析を繰り返す。
【０００８】
すなわち、特許文献１に記載された技術は、ソースプログラムの修正の都度、実行形式プログラムを実行して動的解析を行うものである。それは、実行形式プログラムの実行、つまり、機械語で記述されたプログラム（以降、機械語プログラム）の実行を通して、修正前後の機械語プログラムの実行時間を比較し、ステップ数調整オブジェクトの修正を繰り返すことで、最終的に制御タイミングが調整された機械語プログラムを生成するというものである。
【特許文献１】特開２００２−３２３９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載された制御タイミング調整方法では、最終的に制御タイミングが調整された機械語プログラムの生成に時間を要すという問題点がある。それは、上述した機械語プログラムを生成する過程において、ソースプログラムの修正の都度、ステップ数調整オブジェクトが多段階に渡って生成、修正され、その際、機械語プログラムの実行による動的解析が必要となるためである。とりわけ、動的解析でステップ数調整オブジェクトに修正が施された場合、調整後のステップ数調整オブジェクトを結合した実行形式プログラムを再生成することになるため、さらに時間を必要とする。
【課題を解決するための手段】
【００１０】
本発明の第１の態様にかかる制御タイミング調整方法は、情報処理装置により実行される機械語プログラムにおけるプログラム修正に伴う制御タイミングを調整する制御タイミング調整方法であって、修正後ソースプログラム（例えば、本発明の実施の形態における修正後ソースコード２ａ）のコンパイル処理において得られる修正後中間言語プログラム（例えば、本発明の実施の形態における修正後中間言語コード５）を用いて、前記修正後機械語プログラムの実行クロック数である第１の実行クロック数を算出し、同様に修正前ソースプログラムのコンパイル過程で得られる修正前中間言語を用いて修正前機械語プログラムの実行クロック数である第２の実行クロック数と前記第１の実行クロック数を比較し、前記第１の実行クロック数と前記第２の実行クロック数の差分を小さくするように前記修正後機械語プログラムに対して機械語命令の追加、削除及び変更の少なくとも１つが行われた調整済機械語プログラム（例えば、本発明の実施の形態における修正後機械語言語コード６１）を、前記修正後中間言語プログラムから生成するものである。尚、ソースプログラムのコンパイル過程で得られる中間言語プログラムにおける各命令は、機械語プログラム（例えば、本発明の実施の形態における修正後機械語コード６１）における各機械語命令の実行クロック数と密接に関係していることが知られている。
【００１１】
上述の制御タイミング調整方法により、従来技術で行われている多段階での調整、特に動的解析が不要となり、制御タイミングが調整された機械語プログラムの生成に要す時間を減少させることができる。すなわち、ソースプログラムからコンパイル動作を経て生成される中間言語プログラムと機械語プログラムの各命令の実行クロック数が各々一意に対応付けられるという特徴を用いて、それぞれ実行形式プログラムとして生成される修正前機械語プログラムと修正後機械語プログラムを実行して比較することなく、ソースプログラムから導かれる中間言語プログラムから求められる実行クロック数を用いて命令群ごとに比較することで、修正前後における実行時間の差異を求めることができる。
【発明の効果】
【００１２】
本発明により、プログラム修正に伴う制御タイミングの変化を抑制するための機械語プログラムの生成に要する時間を減少させる制御タイミング調整方法を提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１４】
発明の実施の形態１．
図１は、本発明の実施の形態１にかかる制御タイミング調整方法の対象の一例であるコンピュータシステム９０の概略構成を示すブロック図である。コンピュータシステム９０は、コンパイラ１ａ、マイクロコンピュータ７ａ、修正後ソースコード２ａ、修正前中間言語コード６及び、修正後機械語コード６１を有する。ここでは各構成要素の概要を説明し、各構成要素の詳細は後述する。また、以降では、プログラムファイル自体を「コード」と呼ぶ。
【００１５】
コンパイラ１ａは、修正後ソースコード２ａと修正前中間言語コード６を入力する。また、コンパイラ１ａは、修正後ソースコード２ａを修正後中間言語コード（不図示）に変換し、修正前中間言語コード６及び修正後中間言語コードそれぞれについて実行クロック数を算出して両者の差分を求め、それを各命令における実行クロック数の増加値とし、修正後中間言語コードから実行クロック数の増加値が反映された修正後機械語コード６１を生成する。また、コンパイラ１ａは、ソースコードに対応する機械語コードを生成するコンパイル処理を行う情報処理装置であれば良い。または、コンパイラ１ａは、相当する処理をプログラムにより表現されたコンパイルプログラムであり、コンパイルプログラムをコンピュータ上で実行することで実現されても良い。尚、修正後機械語コード６１は、機械語命令の集合体である。また、修正後機械語コード６１は、コンパイラ１ａにより機械語命令への変換に合わせて、必要なライブラリなどが結合され、マイクロコンピュータ７ａで実行可能な実行形式プログラムとして生成される。尚、コンパイラ１ａは、ソースコードの命令を機械語命令に変換することが必須であるが、機械語命令にライブラリなどを結合するリンク処理については、別途、一般的なリンカを使用してもよい。
【００１６】
マイクロコンピュータ７ａは、修正後機械語コード６１に含まれる機械語命令を読み込み、機械語命令内の実行クロック数の増加値を判定し、実行クロック数の増加値が反映された機械語命令が実行される。これが、制御タイミング調整処理である。
【００１７】
図１５は、本発明の実施の形態１にかかるコンパイラにおける制御タイミング調整方法のフローチャート図である。ステップＳ１１０では、今回の制御タイミングの調整対象である修正後ソースコードが入力される。ステップＳ１２０では、入力された修正後ソースコードから修正後中間言語コードを生成する。ステップＳ１３０では、修正後中間言語コードを用いて、各命令の実行クロック数を算出する。ここで、中間言語コードから得られる実行クロック数は、ソースコードをコンパイルして得られる機械語コードの実行クロック数と一対一に対応付けられている。そのため、実際に修正後機械語コードを生成せずとも、中間言語コードから実行クロック数を算出することが可能である。さらに、ステップＳ１３０では、複数の命令から成る一塊の処理である命令群毎に、命令群内の各命令の実行クロック数を累積して、命令群の実行クロック数を算出することとしてもよい。尚、ステップＳ１２０で生成された修正後中間言語コードは、別途、保存しておき、次回のソースコードの修正後に、修正前中間言語コードとして使用しても構わない。
【００１８】
また、ステップＳ１１０乃至Ｓ１３０に並行して、ステップＳ２２０及びＳ２３０が処理される。尚、ステップＳ２２０及びＳ２３０の処理は、ステップＳ１１０乃至Ｓ１３０の前後に行われても構わない。ステップＳ２２０では、修正前中間言語コードが入力される。ここで、修正前中間言語コードは、前記修正後ソースコードの修正元である修正前ソースコードから得られた中間言語コードである。ステップＳ２３０では、ステップＳ１３０と同様に、修正前中間言語コードを用いて、各命令毎に実行クロック数を算出し、命令群内の各命令の実行クロック数を累積して、各命令群毎に実行クロック数を算出する。尚、ステップＳ２２０の代わりに、ステップＳ１１０のように修正前ソースコードを入力し、ステップＳ１２０のように修正前中間言語コード生成してもよい。
【００１９】
ステップＳ３４０では、ステップＳ１３０及びＳ２３０で算出された修正前後の各命令群の実行クロック数を比較し、命令群単位に実行クロック数値の差分を求める。
【００２０】
ステップＳ３５０では、ステップＳ３４０で求められた実行クロック数値の差分を基に、各命令群内の各命令に実行クロック数指定情報を決める。ここで、実行クロック数指定情報とは、命令の実行クロック数を増加させるための値である。
【００２１】
ステップＳ３６０では、次の修正前後の命令群が存在するかを確認し、存在する場合、ステップＳ３７０へ進む。存在しない場合、ステップＳ３８０へ進む。ステップＳ３７０では、次の修正前後の命令群を比較対象とし、以後、全ての命令群に対して、ステップＳ３４０乃至ステップＳ３７０の処理を繰り返す。尚、ステップＳ３４０乃至ステップＳ３７０の処理の繰り返しは、各ステップごと又は、別の組み合わせにより繰り返されても構わない。
【００２２】
ステップＳ３８０では、修正後中間言語コードと各命令の実行クロック数指定情報とから修正後機械語コードを生成する。その際、中間言語コードの各命令は、実行クロック数指定情報が反映された機械語命令に変換される。つまり、修正後機械語コードは、従来のコンパイラ機能により修正後ソースコードから変換された機械語コードに対し、上述のように任意の実行クロック数の増加をもたらす機械語命令に対する実行クロック数の変更が行われたものである。発明の実施の形態１では、修正後中間言語コードの実行クロック数が修正前中間言語コードに比べ減少している例を示した。逆に、修正後中間言語コードの実行クロック数が修正前中間言語コードに比べ増加した場合には、実行クロック数を減少させるように機械語命令自体を変更することで対応可能である。
【００２３】
尚、上述した制御タイミング調整方法では、命令群単位の比較、命令単位の実行クロック数指定情報を例として扱ったが、これに限定されるものではない。例えば、命令単位の比較、命令群単位の実行クロック数指定情報であっても構わない。
【００２４】
このように、本発明の実施の形態１にかかる制御タイミング調整方法は、実際に実行形式プログラムである機械語プログラムを実行することなく、また、多段階での実行クロック数の比較を行うことなく、修正前後の中間言語コードの比較を一度行うことで、制御タイミングの調整を行うことができる。
【００２５】
図２は、本発明の実施の形態１にかかるコンパイラ１ａのブロック図である。
【００２６】
コンパイラ１ａは、修正後ソースコード２ａと修正前中間言語コード６を入力し、修正後機械語コード６１を生成する。つまり、修正後ソースコード２ａは、コンパイラ１ａによって修正後機械語コード６１に変換される。
【００２７】
コンパイラ１ａは、言語解釈部８、中間コード生成部９、最適化部１０、実行クロック数比較判定部１１、実行クロック数増加設定部１２ａ及び機械語コード変換部１３により構成される。
【００２８】
修正後ソースコード２ａは、高級言語ソースコードを解析する言語解釈部８、中間言語コードを仮生成する中間コード生成部９、仮生成した中間言語コードを最適化して最適化中間言語コードを生成する最適化部１０を経て、修正後中間言語コード５に変換される。また、修正後中間言語コード５は、修正前中間言語コード６と併せて処理され、実行クロック数比較判定部１１、実行クロック数増加設定部１２ａ、機械語コード変換部１３を経て、マイクロコンピュータ７ａが実行可能な実行形式プログラムである修正後機械語コード６１に変換される。
【００２９】
実行クロック数比較判定部１１は、修正後中間言語コード５及び修正前中間言語コード６を用いて、命令毎及び命令群毎の実行クロック数を算出し（図１５のステップＳ１３０及びＳ２３０）、修正後中間言語コード５及び修正前中間言語コード６の命令群毎に実行クロック数を比較し、差分を求める（図１５のステップＳ３４０）。
【００３０】
実行クロック数増加設定部１２ａは、実行クロック数比較判定部１１で求められた差分を得ると共に、命令群内の各命令の差分を累積することにより各命令群毎に実行クロック数の増加値を算出する。続いて、実行クロック数増加設定部１２ａは、算出された実行クロック数の増加値を基に、各命令群内の各命令に対して実行クロック数指定情報を決める（図１５のステップＳ３５０）。尚、実行クロック数比較判定部１１及び実行クロック数増加設定部１２ａにおける処理は、全ての命令群において繰り返し実施される（図１５のステップＳ３４０乃至Ｓ３７０）。
【００３１】
機械語コード変換部１３は、修正後中間言語コード５の各命令について、実行クロック数指定情報を反映した機械語命令に変換し、修正後機械語コード６１を生成する（図１５のステップＳ３８０）。
【００３２】
図３は、本発明の実施の形態１にかかるマイクロコンピュータ７ａのブロック図である。マイクロコンピュータ７ａは、メモリ１４、メモリアクセス部１５、命令読込部１６、命令解釈部１７、実行クロック数増加反映部１９ａ、命令実行部１８を有する。命令解釈部１７は、デコード部２０、オペランドアクセス部２１及び実行クロック数増加指定判定部２２ａを有する。命令実行部１８は、演算部２３及びレジスタ２４により構成される。
【００３３】
ここで、図２のコンパイラ１ａで生成された修正後機械語コード６１が、図３のマイクロコンピュータ７ａによって実行される流れを説明する。修正後機械語コード６１は、メモリ１４に格納される。修正後機械語コード６１の各機械語命令は、プログラム実行時にメモリアクセス部１５を通じて命令読込部１６に読み出され、命令解釈部１７で命令解析が行われ、命令実行部１８で実行される。このとき、コンパイラ１ａで実行クロック数の増加指定が行われた機械語命令は、実行クロック数増加指定判定部２２ａにより実行クロック数指定情報が判定され、実行クロック数増加反映部１９ａで実行クロック数の増加が行われ、命令実行部１８で実行される。
【００３４】
図７は、本発明の実施の形態１にかかるコンパイラ１ａで生成され、マイクロコンピュータ７ａで処理可能な機械語コードの構造を示す。本発明の実施の形態１にかかる機械語コードは、オペコード部８０とオペランド部８１からなる。オペコード部８０は命令内容を示す命令部８２とクロック数増加（実行クロック数指定情報）を指定する実行クロック数増加指定部８３からなる。実施の形態１においては、実行クロック数指定情報は、２ｂｉｔで表現されるものとしている。実行クロック数指定情報の設定内容は、００から１１までの４通りとなり、それぞれ実行クロック数を０クロックから３クロック分を表わす。そのため、同じ命令（命令部が同一）で３クロック分まで実行クロックを増加設定出来るようになっている。また、オペランド部８１は、命令部８２の処理対象であるアドレス部８４からなる。
【００３５】
図４は、修正前のプログラムである修正前ソースコード３ａと、コンパイラ１ａにより生成された中間言語コードである修正前中間言語コード６を示している。ブロック２７乃至３２は、修正前ソースコード３ａと修正前中間言語コード６で対応する命令群である。
【００３６】
図５は、修正後のプログラムである修正後ソースコード２ａと、コンパイラ１ａにより生成された中間言語コードである修正後中間言語コード５を示している。ブロック２７乃至３２は、修正後ソースコード２ａと修正後中間言語コード５で対応する命令群である。また、ブロック２７乃至３２は、図４及び図５で対応する。
【００３７】
修正後ソースコード２ａは、修正前ソースコード３ａのブロック３２にプログラム修正２６が施されたものである。また、修正後中間言語コード５は、修正後ソースコード２ａからコンパイラ１ａによりにより生成される。図５では、プログラム修正２６により修正後中間言語コード５において、ブロック２７のプログラム修正２６ａと、ブロック２８のプログラム修正２６ｂと、ブロック３２のプログラム修正２６ｃ及び２６ｄに変更が生じていることを示している。具体的には、プログラム修正２６ａ及び２６ｂは、それぞれ１命令ずつ削除されたことを示す。また、プログラム修正２６ｃ及び２６ｄは、図４に記載の修正前中間言語コード６とは異なる命令に変更されていることを示す。
【００３８】
図６は、従来のコンパイラを使用した場合における中間言語コード及び実行クロック数を、プログラム修正の前後で対比させて示したものである。具体的には、図６は、修正後プログラムのプログラム実行クロック数が修正前プログラムと比べて減少しているケースを示している。また、図８は、修正前機械語コード６０及び修正後機械語コード６１と増加設定後の実行クロック数を示す説明図である。修正前機械語コード６０は、修正前中間言語コード６が変換されて生成されたものである。また、修正後機械語コード６１は、修正後中間言語コード５が変換されて生成されたものである。以降では、修正後中間言語コード５から修正後機械語コード６１が生成される過程を具体的に説明する。
【００３９】
コンパイラ１ａの実行クロック数比較判定部１１は、修正前中間言語コード６及び修正後中間言語コード５から、命令及び命令群（ブロック）ごとの実行クロック数である図６の修正前実行クロック数５０及び増加設定前修正後実行クロック数５１を算出し、ブロック毎の実行クロック数の比較を行う。具体的には、ブロック２７について、図６の修正前実行クロック数２９ａ（１６クロック）と修正後実行クロック数２９ｂ（１４クロック）を比較し、差分が２クロック（実行クロック２９ｃ分）であることが求まる。これにより、ブロック２７は、修正前に比べ実行クロック数が減少していることがわかる。また、ブロック２８について、図６の修正前実行クロック数３０ａ（２４クロック）と修正後実行クロック数３０ｂ（２２クロック）を比較し、同様に、差分が２クロック（実行クロック３０ｃ分）であることが求まる。これにより、ブロック２８は、修正前に比べ実行クロック数が減少していることがわかる。すなわち、修正後中間言語コード５は、修正前中間言語コード６に比べてブロック２７及び２８のプログラム実行クロック数が変化しているため、制御タイミングを調整する必要がある。
【００４０】
その後、コンパイラ１ａの実行クロック数増加設定部１２ａは、ブロックごとに実行クロック数比較判定部１１で求められた実行クロック数の差分に応じて、実行クロック数指定情報を決める。ここでは、ブロック２７及び２８は、それぞれ２クロック減少しているため、差分を減らすために、それぞれ２クロックを各ブロックの命令に対して実行クロック数を増加させることになる。そのため、実行クロック数増加設定部１２ａは、ブロック２７及び２８の各２命令に対して、各１クロックずつ増加することを実行クロック数指定情報として、機械語コード変換部１３へ通知する。
【００４１】
続いて、コンパイラ１ａの機械語コード変換部１３は、修正後中間言語コード５の各命令を機械語命令に変換する。機械語コード変換部１３は、実行クロック数増加設定部１２ａで定められた実行クロック数指定情報に基づき、ブロック２７及び２８の各２命令における実行クロック数増加指定部６１ａ及び６１ｂ（図８）に、それぞれ１クロックを設定する。具体的には、実行クロック数増加指定部６１ａの２行目及び４行目は０１となる。同様に、実行クロック数増加指定部６１ｂ（図８）の２行目及び４行目は０１となる。このようにして修正後機械語コード６１は、コンパイラ１ａにより生成される。また、マイクロコンピュータ７ａによって実行される際の修正後機械語コード６１の実行クロック数が、増加設定後修正後実行クロック数５２（図８）である。
【００４２】
従来のコンパイラで修正前ソースコード３ａから生成される修正前機械語コード６０において、ブロック２７及び２８の実行クロック数は、それぞれ、１４クロック及び２２クロックとなる（図６の２９ｂ、３０ｂ）。しかし、本発明の実施の形態１にかかるコンパイラ１ａにより修正後ソースコード２ａから生成された修正後機械語コード６１は、上述したように実行クロック数が増加されるので、図８の増加設定後修正後実行クロック数５２のブロック２７及び２８は、それぞれ修正前機械語コード６０と同じく１６クロック、２４クロックで実行する命令として生成される（図８の２９ｄ、３０ｄ）。このことから、ブロック２７及び２８において機械語命令の数が減少したが、実行クロック数増加指定部６０ａ及び６０ｂに対応する実行クロック数増加指定部６１ａ及び６１ｂに増加値を設定していることにより、修正前実行クロック数２９ａ及び３０ａと同じ実行クロック数（２９ｄ及び３０ｄ）とすることができ、実行クロック数の差異が無くなり、制御タイミングが調整されることがわかる。
【００４３】
本発明の実施の形態１にかかるコンパイラ１ａは、コンパイル時に生成される中間言語コードと機械語コードの各命令の実行クロック数が各々一意に対応付けられるという特徴を用いて、修正前後の中間言語コードを比較することで、修正前後におけるプログラム実行クロック数の差異を、自動的に求めることができる。これにより、従来技術のように、それぞれ実行形式プログラムとして生成される修正前機械語コードと修正後機械語コードを実行して比較する必要がなくなり、実行形式プログラムの生成に要する時間を短くすることができる。
【００４４】
また、本発明の実施の形態１にかかるマイクロコンピュータ７ａで使用される機械語コードは、実行クロック数を指定する部分をオペコード部に含む。このため、本実施の形態にかかるマイクロコンピュータ７ａは、機械語命令に設定されている実行クロック数の増加設定値を用いて、機械語命令の実行時に命令実行クロック数を調節することができる。
【００４５】
これら一連の動作により本発明の実施の形態１にかかる制御タイミング調整方法は、高級言語ソースコードのプログラム修正により生じる中間言語コードへの複数個所のコード変更に起因したプログラム修正後の制御タイミングの変化を最小限に、抑制することが可能になる。
【００４６】
また実行クロック数の増加は、オペコード部８０内の実行クロック数増加指定部８３に指定されるため、実行クロック数調整のためにダミー命令を必要とせず、プログラムコード容量の増加を伴わずに制御タイミングの変化を抑制する事が可能となる。
【００４７】
これにより、プログラム開発の最終局面（検査工程など）において発生したプログラム不具合（バグ）の修正による制御タイミングの変化を抑制できる。そのため、制御タイミングの変化に伴う不具合発生を防止でき、かつ制御タイミングに関する試験の再実施が不要になる。
【００４８】
さらに、本発明の実施の形態１における機械語コードにより、修正前中間言語コードと修正後中間言語コードの間に差異のある命令群に対して実行クロック数の調整を指示することできる。ダミー命令を増やす必要がないため、プログラム容量の過度な増大を防ぐことができる。
【００４９】
発明の実施の形態２．
本発明の実施の形態１では、プログラム修正後に実行クロック数が減少する場合に、修正後機械語コードの実行クロック数を増加させる例であった。これに対して、本発明の実施の形態２では、プログラム修正後に実行クロック数が増加する場合に、実施の形態１に変更を加えることで、修正後機械語コードの実行クロック数を減少させて制御タイミングを調整することができる例を扱う。つまり、実施の形態２は、実行クロック数の増加と減少に対応できる。
【００５０】
尚、本実施の形態にかかる制御タイミング調整方法の対象の一例であるコンピュータシステムの構成は、図１と同様であるため、図示及び説明を省略する。また、本実施の形態にかかる制御タイミング調整方法のフローチャート図は図１５と同様であるため、図示及び説明を省略する。以下、図９乃至１４において本発明の実施の形態２にかかる制御タイミング調整方法について説明する。
【００５１】
図９は、本発明の実施の形態２にかかるコンパイラ１ｂのブロック図である。コンパイラ１ｂは、発明の実施の形態１にかかるコンパイラ１ａの実行クロック数増加設定部１２ａが、実行クロック数増減設定部１２ｂに置き換えてある。
【００５２】
図１０は、本発明の実施の形態２にかかるマイクロコンピュータ７ｂのブロック図である。本発明の実施の形態１にかかるマイクロコンピュータ７ａの実行クロック数増加指定判定部２２ａと実行クロック数増加反映部１９ａが、それぞれ、実行クロック数増減指定判定部２２ｂと実行クロック数増減反映部１９ｂに置き換えてある。
【００５３】
図１３は、本発明の実施の形態２にかかるコンパイラ１ｂで生成され、マイクロコンピュータ７ｂで処理可能な機械語コードの構造を示す。本発明の実施の形態１にかかる図７の機械語コードの実行クロック数増加指定部８３が、実行クロック数増減指定部８３ａに置き換えてある。実施の形態２においては、本発明の実施の形態１と同様に、実行クロック数指定情報は、２ｂｉｔ（００から１１までの４通り）で表現されるものとしている。１ｂｉｔ目は、０を増加、１を減少という増減を表わす符号とする。２ｂｉｔ目は、実行クロック数の変更数とする。そのため、同じ命令（命令部が同一）で±１クロック分まで実行クロックを増減設定出来るようになっている。
【００５４】
図１１及び図１２では、本発明の実施の形態２における修正前後の実行クロック数の差について示す。具体的には、図１１及び図１２では、修正後プログラムのプログラム実行クロック数が修正前プログラムと比べて増加及び減少しているケースを示している。
【００５５】
本発明の実施の形態２では、図１２の修正後ソースコード２ｂは、図１１の修正前ソースコード３ｂのブロック３７に、図１２のプログラム修正３９が施されたものである。尚、図１１及び図１２のブロック３３乃至３７は、修正前ソースコード３ｂと修正後ソースコード２ｂで対応する命令群である。
【００５６】
本発明の実施の形態２のコンパイラ１ｂは、修正後ソースコード２ｂから図１２の修正後中間言語コード５ａを生成する。図１２では、プログラム修正３９により修正後中間言語コード５ａにおいて、ブロック３３のプログラム修正３９ａと、ブロック３７のプログラム修正３９ｂに変更が生じていることを示している。具体的には、プログラム修正３９ａは、１命令削除されたことを示し、プログラム修正３９ｂは、１命令変更及び１命令追加されたことを示す。
【００５７】
また、図１４は、修正前機械語コード６２及び修正後機械語コード６３と増加設定後の実行クロック数を示す説明図である。修正前機械語コード６２は、修正前中間言語コード６ａが変換されて生成されたものである。また、修正後機械語コード６３は、修正後中間言語コード５ａが変換されて生成されたものである。以降では、修正後中間言語コード５ａから修正後機械語コード６３が生成される過程を、本発明の実施の形態１との違いを中心に説明する。
【００５８】
まず、図９の実行クロック数比較判定部１１は、修正前中間言語コード６ａ及び修正後中間言語コード５ａから、命令及び命令群ごとの実行クロック数である図１１の修正前実行クロック数５０ｂ及び図１２の増減設定前修正後実行クロック数５３を算出し、ブロック毎の実行クロック数の比較を行う。具体的には、ブロック３３について、図１１の修正前実行クロック数４０ａ（２２クロック）と図１２の修正後実行クロック数４０ｂ（１９クロック）を比較し、差分が３クロック（実行クロック４０ｃ分）であることが求まる。これにより、ブロック３３は、修正前に比べ減少していることがわかる。また、ブロック３７について、図１１の修正前実行クロック数４１ａ（１４クロック）と図１２の修正後実行クロック数４１ｂ（１９クロック）を比較し、差分が５クロック（実行クロック４１ｃ分）であることが求まる。これにより、ブロック３７は、修正前に比べ増加していることがわかる。すなわち、修正後中間言語コード５ａは、修正前中間言語コード６ａに比べてブロック３３及び３７のプログラム実行クロック数が変化しているため、制御タイミングを調整する必要がある。
【００５９】
図９の実行クロック数増減設定部１２ｂは、ブロックごとに実行クロック数比較判定部１１で求められた実行クロック数の差分に応じて、実行クロック数指定情報を決める。ここでは、ブロック３３は、３クロック減少しているため、差分を減らすために、３クロックをブロック３３の命令に対して実行クロック数の増加をすることになる。また、ブロック３７は、５クロック増加しているため、差分を減らすために、４クロックをブロック３７の命令に対して実行クロック数の減少をすることになる。そのため、実行クロック数増減設定部１２ｂは、ブロック３３の３命令に対して各１クロックずつ増加すること及びブロック３７の４命令に対して各１クロックずつ減少することを実行クロック数指定情報として、機械語コード変換部１３へ通知する。
【００６０】
続いて、図９の機械語コード生成部１３は、修正後中間言語コード５ａの各命令を機械語命令に変換する。機械語コード生成部１３は、実行クロック数増減設定部１２ｂで定められた実行クロック数指定情報に基づき、ブロック３３の３命令における実行クロック数増減指定部６３ａ（図１４）に、それぞれ＋１クロックを設定し、ブロック３７の４命令における実行クロック数増減指定部６３ｂ（図１４）に、それぞれ−１クロックを設定する。具体的には、実行クロック数増減指定部６３ａの２行目、４行目及び５行目は０１となる。また、実行クロック数増減指定部６３ｂの１行目乃至４行目は１１となる。このようにして修正後機械語コード６３は、コンパイラ１ｂにより生成される。また、マイクロコンピュータ７ｂによって実行される際の修正後機械語コード６３の実行クロック数が、増加設定後修正後実行クロック数５４（図１４）である。
【００６１】
従来のコンパイラで修正前ソースコード３ｂから生成される修正前機械語コード６２において、ブロック３３及び３７の実行クロック数は、それぞれ、１９クロック及び１９クロックとなる（図１２の４０ｂ、４１ｂ）。しかし、本発明の実施の形態２にかかるコンパイラ１ｂにより修正後ソースコード２ｂから生成された修正後機械語コード６３は、上述したように実行クロック数が増加及び減少されるので、図１４の増減設定後修正後実行クロック数５４のブロック３３は、修正前機械語コード６２と同じく２２クロックとなり、増減設定後修正後実行クロック数５４のブロック３７は、修正前機械語コード６２より１クロックだけ多い１５クロックで実行する命令として生成される（図１４の４０ｄ、４１ｄ）。このことから、ブロック３３において機械語命令の数が減少したが、実行クロック数増加指定部６２ａに対応する実行クロック数増加指定部６３ａに増加値を設定していることにより、修正前実行クロック数４０ａと同じ実行クロック数（４０ｄ）とすることができ、また、ブロック３３において機械語命令の数が増加したが、実行クロック数増加指定部６２ｂに対応する実行クロック数増加指定部６３ｂに減少値を設定していることにより、修正前実行クロック数４１ａに近い実行クロック数（４１ｄ）とすることができるために、実行クロック数の差異を最小限に抑えることができ、制御タイミングが調整されることがわかる。
【００６２】
また、本発明の実施の形態２のマイクロコンピュータ７ｂは、実行形式プログラムである修正後機械語コード６３を実行し、実行クロック数増減指定判定部２２ｂで実行クロック数増減指定部８３ａの実行クロック数増減指定を判定し、実行クロック数増減反映部１９ｂで実行クロック数の増減を行って、命令実行する。
【００６３】
尚、本発明の前提となった特許文献１に開示された制御タイミング調整手法は、他にいくつかの課題がある。一つ目は、実行クロック数を減らす方向で調整することはできないことである。
【００６４】
特許文献１では、プログラムの各命令群間の実行クロック数を等しくするため、足りない命令群には、ダミー命令が追加される。そのため、プログラム修正により、実行クロック数が増加した場合は、全体のダミー命令を増やすことで調整しなければならない。
【００６５】
それに対し、本発明の実施の形態２では、実行クロック数の増加だけでなく、減少させることを可能にすることで、従来では不可能であったプログラムコードの増加に対する修正に関しても制御タイミングの変化を抑制することが可能となる。
【００６６】
さらに、特許文献１の二つ目の課題は、システムが複雑、大掛かりになることである。また、特許文献１の三つ目の課題は、動的解析による修正が収束しない場合があるということである。
【００６７】
以上のことから、本発明の実施の形態１及び２は、従来の技術と比較して、システムを単純にするとともに、調整に要する時間を短くして、より短時間で修正後のプログラムを得られるという効果がある。
【００６８】
さらに、高級言語レベルの僅かな修正による低級言語レベルの複数個所への変更の波及による制御タイミングの変更を抑制することで、制御タイミング関係の新たな不具合発生の抑制、制御タイミングに起因する再検証工数の削減が可能となるなど、プログラム開発工数削減と品質向上をもたらすという効果がある。
【００６９】
また、既存プログラムの再利用に当たっても、修正箇所以外の制御タイミングの変更を抑制することで、プログラム再利用の効率化を図ることが可能となる。
【００７０】
なお、本発明の実施の形態２は、実行クロック数を減少させるため、予め命令に対応する実行クロック数に冗長性を持たせるというものである。例えば、ある命令が３クロックで実行されるものであった場合、それが５クロックで実行されるようにマイクロコンピュータに含まれるＣＰＵで定義する。このとき、実行クロック数に２クロック分の冗長性を持たせたこととなる。このように実行クロック数に冗長性を持たせることは、一見、性能低下を誘発することにつながると思われる。しかしながら、近年のＣＰＵの動作クロックの高速化によって大きな性能低下を引き起こす要因にはならず、むしろ本発明による検査工程における制御タイミング検証工数の削減を実現し、プログラム開発効率向上といった効果をもたらすと言える。さらには、既存プログラムの他プログラムへの適用など、プログラムの再利用が推進されることにもなり、その効果は絶大なものとなる。
【００７１】
その他の発明の実施の形態.
尚、上述の例では、実行クロック数指定情報に該当命令の実行クロック数との差分を設定することを例示し説明したが、これに限らず、差分反映後の該当命令の実行クロック数自体を設定してもよい。
【００７２】
また、上述の例では、実行クロック数指定情報を２ｂｉｔで表現することを例示し説明したが、それ以外のｂｉｔ数で表現してもよい。例えば、ｂｉｔ数を増やすことで、命令当たりに調整できるクロック数の幅を広げることができる。
【００７３】
さらに、上述の例では、実行クロック数指定情報を格納する箇所（実行クロック数指定領域）を、１機械語命令のオペコード部８０内、命令部８２の後ろに定義していたが、実行クロック数指定領域は、命令部８２の前、もしくは、オペコード部以外でもよい。
【００７４】
または、上述の例では、実行クロック数指定領域を、１機械語命令内に定義していたが、実行クロック数指定領域を１機械語命令内ではなく、別途、専用の指定領域を定義してもよい。
【００７５】
さらに、上述の例では、コンパイラ１、コンパイラ１ａ及びコンパイラ１ｂにて機械語コード内に実行クロック数指定領域を定義する例を説明した。しかしながら、実行クロック数の調整は、機械語コードの実行クロック数指定領域を用いるのではなく、ダミー命令を追加することで行ってもよい。
【００７６】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００７７】
【図１】発明の実施の形態１にかかる制御タイミング調整方法の概要構成図である。
【図２】発明の実施の形態１にかかるコンパイラ１ａの構成図である。
【図３】発明の実施の形態１にかかるマイクロコンピュータ７ａの構成図である。
【図４】プログラム修正前の高級言語ソースコードおよびプログラム修正前の中間言語コードの一例を示す図である。
【図５】プログラム修正後の高級言語ソースコードおよびプログラム修正後の中間言語コードを示す図である。
【図６】修正前後の中間言語コードと従来のコンパイラでの実行クロック数の差を示す図である。
【図７】発明の実施の形態１にかかるマイクロコンピュータ７ａの機械語コードの構成を示す図である。
【図８】発明の実施の形態１にかかるコンパイラ１ａにてコンパイルされた機械語コードに対してクロック数が増加される原理を説明した図である。
【図９】発明の実施の形態２にかかるコンパイラ１ｂの構成図である。
【図１０】発明の実施の形態２にかかるマイクロコンピュータ７ｂの構成図である。
【図１１】プログラム修正前の高級言語ソースコードおよびプログラム修正前の中間言語コードの一例を示す図である。
【図１２】プログラム修正後の高級言語ソースコードおよびプログラム修正後の中間言語コードを示す図である。
【図１３】発明の実施の形態２にかかるマイクロコンピュータ７ｂの機械語コードの構成を示す図である。
【図１４】発明の実施の形態２にかかるコンパイラ１ｂにてコンパイルされた機械語コードに対してクロック数が増加される原理を説明した図である。
【図１５】発明の実施の形態１にかかる制御タイミング調整方法のフローチャート図である。
【符号の説明】
【００７８】
１ａ    コンパイラ
１ｂ    コンパイラ
１１        実行クロック数比較判定部
１２ａ        実行クロック数増加設定部
１２ｂ        実行クロック数増減設定部
８        言語解釈部
９        中間コード生成部
１０        最適化部
１３        機械語コード変換部
７ａ    マイクロコンピュータ
７ｂ    マイクロコンピュータ
１６        命令読込部
１７        命令解釈部
２２ａ          実行クロック数増加指定判定部
２２ｂ          実行クロック数増減指定判定部
２０          デコード部
２１          オペランドアクセス部
１９ａ        実行クロック数増加反映部
１９ｂ        実行クロック数増減反映部
１８        命令実行部
２３          演算部
２４          レジスタ
１４        メモリ
１５        メモリアクセス部
２ａ      修正後高級言語ソースコード
２ｂ      修正後高級言語ソースコード
５      修正後中間言語コード
５ａ    修正後中間言語コード
３ａ    修正前ソースコード
３ｂ    修正前ソースコード
６    修正前中間言語コード
６ａ    修正前中間言語コード
６１      修正後機械語コード
６３      修正後機械語コード
８０    オペコード部
８２      命令部
８３      実行クロック数増加指定部
８３ａ    実行クロック数増減指定部
８１    オペランド部
８４      アドレス部
９０    コンピュータシステム
【図１】
2009076002.tif 000003
【図２】
2009076002.tif 000004
【図３】
2009076002.tif 000005
【図４】
2009076002.tif 000006
【図５】
2009076002.tif 000007
【図６】
2009076002.tif 000008
【図７】
2009076002.tif 000009
【図８】
2009076002.tif 000010
【図９】
2009076002.tif 000011
【図１０】
2009076002.tif 000012
【図１１】
2009076002.tif 000013
【図１２】
2009076002.tif 000014
【図１３】
2009076002.tif 000015
【図１４】
2009076002.tif 000016
【図１５】
2009076002.tif 000017