(57)【要約】【課題】バス調停に係る優先順位を変更しながらデバッグを行う際に、当該優先順位以外のパラメータを変動させることなくハードウェア検証を行うことを可能にする。【解決手段】プログラム実行装置であるＣＰＵ（１０）に、アドレス空間を指すアドレス空間情報とバス調停を行う際の優先順位を示すバス優先順位情報とが対応付けられたテーブル（１１）を参照して、命令アドレスが、テーブル（１１）に登録されたアドレス空間情報のいずれに該当するかについての判定を行うアドレス空間判定部（１２）と、テーブル（１１）に登録されたバス優先順位情報の中からアドレス空間判定部（１２）によって判定されたアドレス空間情報に対応するものを選択し、選択したバス優先順位情報を、バス調停を行うバス調停部（１００）に通知する優先順位通知部（１３）とを設ける。【選択図】図１
2005202741.tif 000002
【特許請求の範囲】
【請求項１】
機械語プログラムを実行するプログラム実行装置であって、
当該プログラム実行装置におけるアドレス空間を指すアドレス空間情報とバス調停を行う際の優先順位を示すバス優先順位情報とが対応付けられたテーブルを参照して、命令アドレスが、前記テーブルに登録されたアドレス空間情報のいずれに該当するかについての判定を行うアドレス空間判定部と、
前記テーブルに登録されたバス優先順位情報の中から前記アドレス空間判定部によって判定されたアドレス空間情報に対応するものを選択し、当該選択したバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知部とを備えた
ことを特徴とするプログラム実行装置。
【請求項２】
請求項１に記載のプログラム実行装置において、
前記機械語プログラムの実行開始時に、前記テーブルに、アドレス空間情報およびバス優先順位情報を登録するテーブル登録部を備えた
ことを特徴とするプログラム実行装置。
【請求項３】
請求項１に記載のプログラム実行装置において、
前記アドレス空間判定部は、前記テーブルに登録されたアドレス空間情報の上位所定数ビットと前記命令アドレスの上位所定数ビットとを比較し、当該比較結果に基づいて前記判定を行う
ことを特徴とするプログラム実行装置。
【請求項４】
機械語プログラムを実行するプログラム実行装置であって、
前記機械語プログラムは、バス調停を行う際の優先順位を示すバス優先順位情報が付加されたものであり、
前記機械語プログラムに付加されたバス優先順位情報を抽出する優先順位抽出部と、
前記優先順位抽出部によって抽出されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知部とを備えた
ことを特徴とするプログラム実行装置。
【請求項５】
請求項４に記載のプログラム実行装置において、
前記優先順位抽出部は、前記抽出したバス優先順位情報を格納するための状態レジスタを有し、前記機械語プログラム中のコール命令が実行されるとき、前記状態レジスタに格納されたバス優先順位情報を退避する一方、前記コール命令が復帰するとき、前記退避したバス優先順位情報を前記状態レジスタに戻すものであり、
前記優先順位通知部は、前記状態レジスタに格納されたバス優先順位情報を読み出し、当該読み出したバス優先順位情報を前記バス調停部に通知するものである
ことを特徴とするプログラム実行装置。
【請求項６】
ソースプログラムをコンパイルして機械語プログラムを生成するコンパイラ装置であって、
前記ソースプログラムを構成する命令列とは別に与えられた情報から、バス調停を行う際の優先順位を示すバス優先順位情報を抽出する優先順位情報抽出部と、
前記優先順位情報抽出部によって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加部とを備えた
ことを特徴とするコンパイラ装置。
【請求項７】
請求項６に記載のコンパイラ装置において、
前記優先順位情報抽出部は、コンパイラオプションとして与えられた情報から前記バス優先順位情報を抽出する
ことを特徴とするコンパイラ装置。
【請求項８】
請求項６に記載のコンパイラ装置において、
前記優先順位情報抽出部は、前記ソースプログラムに記述されたプリプロセッサ命令から前記バス優先順位情報を抽出する
ことを特徴とするコンパイラ装置。
【請求項９】
請求項６に記載のコンパイラ装置において、
前記優先順位情報抽出部は、前記ソースプログラム中の手続きと前記バス優先順位情報とが対応付けられたテーブルを参照して、前記ソースプログラム中の手続きに対応する前記バス優先順位情報を抽出する
ことを特徴とするコンパイラ装置。
【請求項１０】
請求項９に記載のコンパイラ装置において、
前記優先順位情報付加部は、前記機械語プログラム中のコール命令に前記バス優先順位情報を付加する
ことを特徴とするコンパイラ装置。
【請求項１１】
ソースプログラムをコンパイルして機械語プログラムを生成するコンパイラ装置であって、
前記ソースプログラムにおけるループ処理のループ回数を検出するループ回数検出部と、
前記ループ回数検出部によって検出されたループ回数に対応する、バス調停を行う際の優先順位を示すバス優先順位情報を選択する優先順位情報選択部と、
前記優先順位情報抽出部によって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加部とを備えた
ことを特徴とするコンパイラ装置。
【請求項１２】
機械語プログラムの実行方法であって、
アドレス空間を指すアドレス空間情報とバス調停を行う際の優先順位を示すバス優先順位情報とが対応付けられたテーブルを参照して、命令アドレスが、前記テーブルに登録されたアドレス空間情報のいずれに該当するかについての判定を行うアドレス空間判定ステップと、
前記テーブルに登録されたバス優先順位情報の中から前記アドレス空間判定ステップによって判定されたアドレス空間情報に対応付けられたものを選択する優先順位選択ステップと、
前記優先順位選択ステップによって選択されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知ステップとを備えた
ことを特徴とするプログラム実行方法。
【請求項１３】
機械語プログラムを実行する方法であって、
前記機械語プログラムは、バス調停を行う際の優先順位を示すバス優先順位情報が付加されたものであり、
前記機械語プログラムに付加されたバス優先順位情報を抽出する優先順位抽出ステップと、
前記優先順位抽出ステップによって抽出されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知ステップとを備えた
ことを特徴とするプログラム実行方法。
【請求項１４】
ソースプログラムをコンパイルして機械語プログラムを生成するプログラム生成方法であって、
前記ソースプログラムを構成する命令列とは別に与えられた情報から、バス調停を行う際の優先順位を示すバス優先順位情報を抽出する優先順位情報抽出ステップと、
前記優先順位情報抽出ステップによって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加ステップとを備えた
ことを特徴とするプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行装置およびコンパイラ装置に関し、特に、バス調停に係る優先順位をさまざまに変更しながらハードウェアの挙動の検証を行うプログラム実行装置、およびそのようなプログラム実行装置が実行する機械語プログラムを生成するコンパイラ装置に関する。
【背景技術】
【０００２】
大規模なプログラムを実行するシステムにおいて、ハードウェアの不具合は、プログラムの暴走やシステムのハングアップといった現象として現れることが多い。この不具合の原因を特定するためには、新たにパラメータを設定するなどして、不具合に関する情報を収集する必要がある。たとえば、バス調停に問題があるか否かという情報を収集する場合、バス調停の優先順位をさまざまに変更してプログラムを実行する必要がある。
【０００３】
通常、バス調停の優先順位の設定は、ＣＰＵが優先度設定レジスタに値を設定することで行う（たとえば、特許文献１参照）。また、バス調停を行うバス調停部におけるバス制御レジスタにバス優先順位に関する情報を割り当てる方法もある。
【０００４】
バス優先順位を変更するためには、プログラムに、バス制御レジスタの内容を変更するための命令列を追加する必要がある。図１５は、バス優先順位を変更するために追加される命令列の例を示す。命令列の追加によって、関数“FUNC()”が実行されるとき、バス制御レジスタ（図中で示した“ＢＣＣＲ”）を構成するビットのうちバス調停の優先順位を格納する部分が“0b000”に変更される。
【特許文献１】特開平２０００―２０１１６１号公報（第３頁、第１図）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、デバッグを行うためにプログラムに新たな命令列を追加すると、ＣＰＵの内部状態が不具合発生時の状態と異なってしまい、ハードウェアの挙動がまったく変わってしまうおそれがある。たとえば、キャッシュの状態が変化した場合にはキャッシュミスが発生してＣＰＵの内部状態が変化してしまう。つまり、命令列の追加によって、バス調停の優先順位というパラメータだけではなく、それ以外の固定すべき条件までもが変動してしまい、ハードウェア検証が正確に行えなくなるおそれがある。また、ハードウェア検証者やアプリケーション開発者などが、ＯＳなどのシステム全体を管理するプログラムが管理する制御レジスタを変更すること自体、困難である。
【０００６】
上記問題に鑑み、本発明は、バス調停に係る優先順位を変更しながらデバッグを行う際に、当該優先順位以外のパラメータを変動させることなくハードウェア検証を行うことが可能なプログラム実行装置およびプログラム実行方法を実現することを課題とする。また、そのようなプログラム実行装置において実行される機械語プログラムを生成するコンパイラ装置およびプログラム生成方法を実現することを課題とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明が講じた手段は、機械語プログラムを実行するプログラム実行装置として、当該プログラム実行装置におけるアドレス空間を指すアドレス空間情報とバス調停を行う際の優先順位を示すバス優先順位情報とが対応付けられたテーブルを参照して、命令アドレスが、前記テーブルに登録されたアドレス空間情報のいずれに該当するかについての判定を行うアドレス空間判定部と、前記テーブルに登録されたバス優先順位情報の中から前記アドレス空間判定部によって判定されたアドレス空間情報に対応するものを選択し、当該選択したバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知部とを備えたものとする。
【０００８】
これによると、プログラムの実行に伴って、あらかじめテーブルに登録しておいたバス優先順位がバス調停部に通知され、その優先順位でバス調停が行われる。すなわち、プログラムに命令列を追加することなく、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【０００９】
好ましくは、上記のプログラム実行装置は、前記機械語プログラムの実行開始時に、前記テーブルに、アドレス空間情報およびバス優先順位情報を登録するテーブル登録部を備えたものとする。
【００１０】
また、具体的には、前記アドレス空間判定部は、前記テーブルに登録されたアドレス空間情報の上位所定数ビットと前記命令アドレスの上位所定数ビットとを比較し、当該比較結果に基づいて前記判定を行うものとする。
【００１１】
また、上記課題を解決するために本発明が講じた手段は、バス調停を行う際の優先順位を示すバス優先順位情報が付加された機械語プログラムを実行するプログラム実行装置として、前記機械語プログラムに付加されたバス優先順位情報を抽出する優先順位抽出部と、前記優先順位抽出部によって抽出されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知部とを備えたものとする。
【００１２】
これによると、プログラムの実行に伴って、プログラムに付加されたバス優先順位がバス調停部に通知され、その優先順位でバス調停が行われる。すなわち、プログラムに命令列を追加することなく、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【００１３】
好ましくは、前記優先順位抽出部は、前記抽出したバス優先順位情報を格納するための状態レジスタを有し、前記機械語プログラム中のコール命令が実行されるとき、前記状態レジスタに格納されたバス優先順位情報を退避する一方、前記コール命令が復帰するとき、前記退避したバス優先順位情報を前記状態レジスタに戻すものとする。また、前記優先順位通知部は、前記状態レジスタに格納されたバス優先順位情報を読み出し、当該読み出したバス優先順位情報を前記バス調停部に通知するものとする。
【００１４】
一方、上記課題を解決するために本発明が講じた手段は、ソースプログラムをコンパイルして機械語プログラムを生成するコンパイラ装置として、前記ソースプログラムを構成する命令列とは別に与えられた情報から、バス調停を行う際の優先順位を示すバス優先順位情報を抽出する優先順位情報抽出部と、前記優先順位情報抽出部によって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加部とを備えたものとする。
【００１５】
これによると、ソースプログラムを構成する命令列とは別に与えられた情報から抽出されたバス優先順位情報が、機械語プログラムに付加される。すなわち、ソースプログラムに命令列を追加することなく、所望のバス優先順位が割り当てられた機械語プログラムを生成することができる。そして、当該機械語プログラムを、たとえば、上記の本発明に係るプログラム実行装置で実行することによって、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【００１６】
具体的には、前記優先順位情報抽出部は、コンパイラオプションとして与えられた情報から前記バス優先順位情報を抽出するものである。
【００１７】
また、具体的には、前記優先順位情報抽出部は、前記ソースプログラムに記述されたプリプロセッサ命令から前記バス優先順位情報を抽出するものである。
【００１８】
また、具体的には、前記優先順位情報抽出部は、前記ソースプログラム中の手続きと前記バス優先順位情報とが対応付けられたテーブルを参照して、前記ソースプログラム中の手続きに対応する前記バス優先順位情報を抽出するものである。
【００１９】
さらに具体的には、前記優先順位情報付加部は、前記機械語プログラム中のコール命令に前記バス優先順位情報を付加するものである。
【００２０】
また、上記課題を解決するために本発明が講じた手段は、ソースプログラムをコンパイルして機械語プログラムを生成するコンパイラ装置として、前記ソースプログラムにおけるループ処理のループ回数を検出するループ回数検出部と、前記ループ回数検出部によって検出されたループ回数に対応する、バス調停を行う際の優先順位を示すバス優先順位情報を選択する優先順位情報選択部と、前記優先順位情報抽出部によって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加部とを備えたものとする。
【００２１】
これによると、ソースプログラムにおけるループ処理のループ回数に応じて、異なるバス優先順位情報が、機械語プログラムに付加される。すなわち、ソースプログラムに命令列を追加することなく、所望のバス優先順位が割り当てられた機械語プログラムを生成することができる。そして、当該機械語プログラムを、たとえば、上記の本発明に係るプログラム実行装置で実行することによって、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【００２２】
一方、上記課題を解決するために本発明が講じた手段は、機械語プログラムの実行方法として、アドレス空間を指すアドレス空間情報とバス調停を行う際の優先順位を示すバス優先順位情報とが対応付けられたテーブルを参照して、命令アドレスが、前記テーブルに登録されたアドレス空間情報のいずれに該当するかについての判定を行うアドレス空間判定ステップと、前記テーブルに登録されたバス優先順位情報の中から前記アドレス空間判定ステップによって判定されたアドレス空間情報に対応付けられたものを選択する優先順位選択ステップと、前記優先順位選択ステップによって選択されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知ステップとを備えたものとする。
【００２３】
これによると、プログラムの実行に伴って、あらかじめテーブルに登録しておいたバス優先順位がバス調停部に通知され、その優先順位でバス調停が行われる。すなわち、プログラムに命令列を追加することなく、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【００２４】
また、上記課題を解決するために本発明が講じた手段は、バス調停を行う際の優先順位を示すバス優先順位情報が付加された機械語プログラムを実行する方法として、前記機械語プログラムに付加されたバス優先順位情報を抽出する優先順位抽出ステップと、前記優先順位抽出ステップによって抽出されたバス優先順位情報を、バス調停を行うバス調停部に通知する優先順位通知ステップとを備えたものとする。
【００２５】
これによると、プログラムの実行に伴って、プログラムに付加されたバス優先順位がバス調停部に通知され、その優先順位でバス調停が行われる。すなわち、プログラムに命令列を追加することなく、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【００２６】
また、上記課題を解決するために本発明が講じた手段は、ソースプログラムをコンパイルして機械語プログラムを生成するプログラム生成方法として、前記ソースプログラムを構成する命令列とは別に与えられた情報から、バス調停を行う際の優先順位を示すバス優先順位情報を抽出する優先順位情報抽出ステップと、前記優先順位情報抽出ステップによって抽出されたバス優先順位情報を前記機械語プログラムに付加する優先順位情報付加ステップとを備えたものとする。
【００２７】
これによると、ソースプログラムを構成する命令列とは別に与えられた情報から抽出されたバス優先順位情報が、機械語プログラムに付加される。すなわち、ソースプログラムに命令列を追加することなく、所望のバス優先順位が割り当てられた機械語プログラムを生成することができる。そして、当該機械語プログラムを、たとえば、上記の本発明に係るプログラム実行方法に従って実行することによって、バス優先順位を変更しながらハードウェア検証を行うことが可能となる。
【発明の効果】
【００２８】
以上、本発明によると、ハードウェアの不具合を解析する際、プログラムに命令列を一切追加することなく、プログラムの所望の区間でバス調停の優先順位を変更することができる。これにより、デバッグ時にバス調停の優先順位以外のパラメータを固定することができ、デバッグ精度を高めることができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
【００３０】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るプログラム実行装置の構成を示す。本実施形態に係るプログラム実行装置であるＣＰＵ（Central Processing Unit）１０は、優先順位情報テーブル１１と、アドレス空間判定部１２と、優先順位通知部１３と、テーブル登録部１４と、ページサイズ設定レジスタ１５と、プログラムカウンタ１６とを備えている。
【００３１】
図２（ａ）は、優先順位情報テーブル１１に登録された情報の例を示す。優先順位情報テーブル１１は、３２ビットのアドレス空間情報とそれに対応する８ビットのバス優先順位情報とを保持する。また、図２（ｂ）は、バス優先順位情報の内容を示す。たとえば、バス優先順位情報“0x1”は、ＤＭＡ（Direct Memory Access）、ＣＩ（ＣＰＵ命令バス）およびＣＤ（ＣＰＵデータバス）から同時にバス使用の要求が発生したときに、ＤＭＡ、ＣＩ、ＣＤの順に調停を行うことを表す。
【００３２】
アドレス空間判定部１２は、プログラムカウンタ１６が保持する命令アドレスと優先順位情報テーブル１１に登録されたアドレス空間情報とを比較し、プログラムが実行されているアドレス空間を判定する。これは、アドレス空間判定ステップに相当する。図３は、アドレス空間判定部１２の内部構成を示す。マスク値生成部１２１は、ページサイズ設定レジスタ１５の値を参照してマスク値を生成する。図４は、ページサイズ設定レジスタ１５の設定値とマスク値との対応関係を示す。たとえば、設定値が“0x00”のとき、アドレス空間を分割するページサイズは４ｋバイトであり、後述するアドレス空間の比較において上位２０ビットを有効にすべく、マスク値生成部１２１は、マスク値“0xfffff000”を生成する。
【００３３】
図３に戻り、判定部１２２は、プログラムカウンタ１６の値とマスク値との論理積の結果、および優先順位情報テーブル１１に登録されたアドレス空間情報とマスク値との論理積の結果を受け、両者を比較する。そして、両者が一致する場合には、当該アドレス空間情報に対応するエントリ番号を出力する一方、両者が一致しない場合には、エントリ番号として“null”を出力する。
【００３４】
図１に戻り、優先順位通知部１３は、優先順位情報テーブル１１を参照し、アドレス空間判定部１２から受けたエントリ番号に対応するバス優先順位情報を選択する。これは、優先順位選択ステップに相当する。そして、優先順位通知部１３は、バス調停を行うバス調停部１００に当該バス優先順位情報を通知する。これは、優先順位通知ステップに相当する。なお、アドレス空間判定部１２から受けたエントリ番号が“null”のとき、優先順位通知部１３は、バス調停部１００に優先順位情報として“0x0”（ラウンド・ロビン）を通知するものとする。バス調停部１００におけるバス調停には、既存のバス調停制御方法を用いるものとする。
【００３５】
テーブル登録部１４は、アドレス設定レジスタ１７および優先順位情報設定レジスタ１８とを備え、これらレジスタに設定された値をペアとして、優先順位情報テーブル１１に情報の書き込みを行う。たとえば、図２（ａ）において、エントリ番号“０”〜“３”に対応する情報が登録されている場合、アドレス設定レジスタ１７に“0x00004000”を設定し、優先順位情報設定レジスタ１８に“0x3”を設定したとき、これら情報は、エントリ番号“４”として登録される。
【００３６】
上記構成のＣＰＵ１０にプログラムを実行させるとき、次の初期設定を行う。まず、ページサイズ設定レジスタ１５を用いてページサイズを設定する。図４に示したように、たとえば、アドレス空間を４ｋバイトで分割する場合には、ページサイズ設定レジスタ１５を“0x00”に設定する。次に、アドレス設定レジスタ１７および優先順位情報設定レジスタ１８に、それぞれ、アドレス空間情報および優先順位情報を設定し、優先順位情報テーブル１１にこれら情報を登録する。なお、これら初期設定は、たとえば、デバッグ対象の機械語プログラムとは別のユーザープログラムなどのスタートアップルーチンで行うようにするとよい。
【００３７】
上記初期設定を行ってからプログラムを実行させることによって、ユーザがあらかじめ設定したアドレス空間について、あらかじめ設定した優先順位でバス調停が行われる。すなわち、ユーザは、ターゲットとするプログラムについて、アドレス空間およびバス優先順位の情報に基づいてアドレス解決をしておくだけで、所望のバス優先度を割り当てることができる。したがって、プログラムに命令列を一切追加することなく、バス調停に係る優先順位をさまざまに変えながら、ハードウェアの検証を行うことが可能となる。
【００３８】
なお、上記説明において、ＣＰＵ１０は優先順位テーブル１１を備えているものとしたが、優先順位テーブル１１はＣＰＵ１０の外部に設けてもよい。
【００３９】
（第２の実施形態）
図５は、本発明の第２の実施形態に係るコンパイラ装置およびプログラム実行装置の構成を示す。本実施形態に係るコンパイラ装置２０は、優先順位情報抽出部２１および優先順位情報付加部２２を有する翻訳部２３と、連結部２４とを備えている。一方、本実施形態に係るプログラム実行装置であるＣＰＵ３０は、命令フェッチ部３１と、優先順位抽出部３２と、優先順位通知部３３とを備えている。以下では、まず、コンパイラ装置２０による機械語プログラムの生成について説明し、続いて当該機械語プログラムを実行するＣＰＵ３０について説明する。
【００４０】
コンパイラ装置２０における翻訳部２３は、ソースプログラムを含むソースファイルＡ４１およびソースファイルＢ４２を入力し、オブジェクトプログラムを含む出力ファイルＡ４３および出力ファイルＢ４４を生成する。このとき、優先順位情報抽出部２１は、ソースプログラムを構成する命令列とは別に与えられた情報から、バス調停を行う際の優先順位を示すバス優先順位情報を抽出する。これは、優先順位情報抽出ステップに相当する。優先順位情報付加部２２は、オブジェクトプログラムの該当個所に当該バス優先順位情報を付加する。これは、優先順位情報付加ステップに相当する。そして、連結部２４は、これら出力ファイルＡ４３および出力ファイルＢ４４を連結し、最終的に、プログラム実行装置で実行可能な機械語プログラムを含む実行ファイル４５を出力する。
【００４１】
図６は、コンパイラオプションによるバス優先順位指定の様子を表す。コマンドラインＡは、ファイル名“fileA.c”で表されるソースファイルＡ４１を、コンパイラオプション“-buspriority=1”で表されるバス優先順位でコンパイルすることを表す。一方、コマンドラインＢは、ファイル名“fileB.c”で表されるソースファイルＡ４２を、コンパイラオプション“-buspriority=2”で表されるバス優先順位でコンパイルすることを表す。ここで言うバス優先順位は、図２（ｂ）に示したものと同様である。なお、この例ではＣコンパイラ（コマンド“cc”）を用いているが、本発明はこれに限定されるものではない。
【００４２】
優先順位抽出部２１は、コンパイラオプションで指定されたバス優先順位からバス優先順位情報を抽出する。そして、優先順位情報付加部２２は、優先順位抽出部２１が抽出したバス優先順位情報をオブジェクトプログラムに付加する。図６に示した例では、出力ファイルＡ４３に含まれるオブジェクトプログラムに、コンパイラオプションで指定したバス優先順位に対応する３ビットのバス優先順位情報“PRIORITY_001”が付加されている。同様に、出力ファイルＢ４４に含まれるオブジェクトプログラムに、コンパイラオプションで指定したバス優先順位に対応する３ビットのバス優先順位情報“PRIORITY_010”が付加されている。なお、コンパイラオプションが指定されない場合、オブジェクトプログラムに、ラウンドロビンのバス調停を表すバス優先順位情報“PRIORITY_000”を与えるものとする。
【００４３】
以上のように、コンパイラオプションでバス優先順位を指定することにより、ソースファイル単位で、バス優先順位情報を設定することができる。
【００４４】
バス優先順位の指定は、コンパイラオプション以外によっても行うことができる。たとえば、図５に示した優先順位指定テーブル４６を参照して、バス優先順位情報を付加することも可能である。図７は、優先順位指定テーブルによるバス優先順位指定の様子を表す。図７に示した優先順位指定テーブル４７は、ソースプログラム中の手続きとそれに対応するバス優先順位とを保持する。なお、ここで言う「手続き」とは、Ｃ言語などの手続き型の言語で用いられる文字通りの「手続き」と「関数」とを含むものである。
【００４５】
図７に示した例では、優先順位指定テーブル４７において関数“FuncA”にバス優先順位“0b001”が割りつけられている。優先順位情報抽出部２１は、優先順位指定テーブル４７を参照して、手続き“FuncA”についてバス優先順位“0b001”を抽出し、優先順位情報付加部２２は、オブジェクトプログラムの該当個所にバス優先順位情報“PRIORITY_001”を付加する。
【００４６】
以上のように、優先順位指定テーブルでバス優先順位を指定することにより、手続きごとに異なるバス優先順位を設定することができる。
【００４７】
また、ソースプログラムにあらかじめバス優先順位に関する情報を記載しておき、その情報に基づいてバス優先順位を指定してすることもできる。具体的には、ソースプログラムにプリプロセッサ命令としてプラグマを指定しておく。図８は、ソースプログラムに記載したプラグマによるバス優先順位指定の様子を表す。図８に示した例では、ソースプログラムにプラグマＡおよびＢが記載されている。なお、プラグマ“bus_priority=x”は、指定箇所をバス優先順位“x”にすることを表す。バス優先順位が表す内容は、図２（ｂ）で説明したとおりである。
【００４８】
図８に示した例では、ソースファイル４１の前半のループを構成する命令列にバス優先順位情報“0x1”を設定し、後半のループを構成する命令列にバス優先順位情報“0x2”を設定している。優先順位情報抽出部２１は、ソースプログラムに記載されたプラグマからバス優先順位情報を抽出する。そして、優先順位情報付加部２２は、抽出されたバス優先順位をオブジェクトプログラムに付加する。この結果、図８に示したソースファイルＡ４１から、出力ファイルＡ４３が生成される。出力ファイルＡ４３において、オブジェクトプログラムの該当個所がプラグマによって指定されたバス優先順位となっている。
【００４９】
また、図８に示した例では、ソースプログラム中のループ命令列にプラグマを指定しているが、プラグマ指定はこれ以外にも可能である。たとえば、ソースプログラムの任意の箇所にプラグマ“bus_priority_start=x”およびプラグマ“bus_priority_end=x”を指定することによって、これらプラグマで挟まれた命令列にバス優先順位“x”を指定することが可能である。
【００５０】
一方、ソースプログラム中のループ命令列について、ループ回数に応じて、異なるバス優先順位を指定することも可能である。図９は、ループ回数ごとに、異なるバス優先順位を指定するコンパイラ装置の構成の一部分を表す。翻訳部２３´は、ループ回数検出部２５と、優先順位情報選択部２６と、優先順位情報付加部２７とを備えている。
【００５１】
ループ回数検出部２５は、ソースファイルＡ４１およびソースファイルＢ４２に記述されたソースプログラム中の個々のループ命令列について、ループ回数を検出する。そして、優先順位情報選択部２６は、検出されたループ回数に対してあらかじめ設定されたバス優先順位を選択する。具体的には、ループ回数とバス優先順位との対応関係は、優先順位指定テーブル４６´に格納されている。翻訳部２３´は、優先順位指定テーブル４６´を参照して、ループ回数に対応するバス優先順位を選択する。図１０は、優先順位指定テーブル４６´に格納されている、ループ回数閾値とバス優先順位との対応関係の例を示す。図１０に示した例では、たとえば、１０００回以上２０００回未満のループに対応するバス優先順位情報は“0b001”である。優先順位情報選択部２６は、図１０に示したようなテーブルを参照して、バス優先順位を選択する。なお、当該テーブルは、ユーザがあらかじめ設定しておく。優先順位情報付加部２７は、優先順位情報選択部２６によって選択されたバス優先順位情報を、出力ファイルＡ４３および出力ファイルＢ４４におけるオブジェクトプログラムの該当個所に付加する。
【００５２】
次に、本実施形態に係るプログラム実行装置であるＣＰＵ３０について説明する。図５に戻り、ＣＰＵ３０における命令フェッチ部３１は、実行ファイル４５から命令メモリ１１０にロードされた機械語プログラムの各命令をフェッチする。上述したように、コンパイラ装置２０が生成した機械語プログラムにはバス優先順位情報が付加されている。優先順位抽出部３２は、命令フェッチ部３１がフェッチした命令をデコードして、当該命令に付加されたバス優先順位情報を抽出する。これは、優先順位抽出ステップに相当する。そして、優先順位通知部３３は、優先順位抽出部３２によって抽出されたバス優先順位情報をバス調停部１００に通知する。これは、優先順位通知ステップに相当する。
【００５３】
以上、本実施形態によると、コンパイラ装置２０によって、バス優先順位情報が付加された機械語プログラムが生成される。そして、ＣＰＵ３０は、当該機械語プログラムからバス優先順位情報を抽出し、バス調停部１１０に通知する。これにより、プログラムに命令列を一切追加することなく、バス調停に係る優先順位をさまざまに変えながら、ハードウェアの検証を行うことが可能となる。
【００５４】
なお、優先順位情報抽出部２１および優先順位情報付加部２２を優先順位情報制御部として、翻訳部２３の後段に設けるようにすることも可能である。図１１は、優先順位情報制御部を翻訳部の後段に設けたコンパイラ装置の構成を示す。図１１に示したコンパイラ装置２０´において、優先順位情報制御部２８は、翻訳部２３が生成した出力ファイルＡ４３および出力ファイルＢ４４にバス優先順位情報を付加して、出力ファイルＡ´４７および出力ファイルＢ´４８を生成する。バス優先順位情報の抽出および付加方法は、上述したとおりである。このような構成にすることで、バス優先順位を変更する際に、ソースプログラムを再度コンパイルする必要がなくなる。
【００５５】
また、上記説明では、コンパイラ装置２０および２０´は、ソースファイルＡ４１およびソースファイルＢ４２から、実行ファイル４５を生成するものとしたが、これは説明の便宜のためである。コンパイラ装置２０および２０´が入力可能なソースファイルの数に制限はない。
【００５６】
（第３の実施形態）
第２の実施形態に係るコンパイラ装置２０が、優先順位指定テーブル４６を参照して、手続きごとに異なるバス優先順位を設定する場合において、特に、オブジェクトプログラム中のコール命令にのみバス優先順位情報を付加するようにしてもよい。図１２は、オブジェクトプログラム中のコール命令にバス優先順位情報を付加した例を示した図である。図１２に示した例では、ソースプログラム５１から生成されたオブジェクトプログラム５２において、関数“Func_B()”の部分にのみバス優先順位情報“PRIORITY_010”が付加されている。以下、このようなコール命令にのみバス優先順位情報が付加されているプログラムを実行するプログラム実行装置について説明する。
【００５７】
図１３は、本発明の第３の実施形態に係るプログラム実行装置の構成を示す。図５と比較してわかるように、本実施形態に係るＣＰＵ３０´は、第２の実施形態における優先順位抽出部３２とは異なる構成の優先順位抽出部３２´を備えている。以下、優先順位抽出部３２´について詳細に説明する。
【００５８】
優先順位抽出部３２´は、命令フェッチ部３１がフェッチした命令をデコードし、コール命令に付加されたバス優先順位情報を抽出する。そして、抽出したバス優先順位情報を、状態レジスタ３２１における所定のフィールドに書き込む。そして、優先順位通知部３３は、状態レジスタ３２１に書き込まれたバス優先順位情報を、バス調停部１００に通知する。
【００５９】
コール命令が実行される場合、優先順位情報抽出部３２´は、状態レジスタ３２１の値をスタックメモリ１２０に退避する。図１４は、コール命令実行時のスタックメモリのデータ格納状態を示す。図１４に示したように、コール命令実行時には、プログラムカウンタ３４が保持する命令アドレス（ＰＣ）とともに、状態レジスタ３２１の値（ＣＳＲ）がスタックメモリ１２０に退避される。そして、コール命令からのリターン時に、プログラムカウンタ３４および状態レジスタ３２１に、元の値が復帰する。
【００６０】
以上、本実施形態によると、あるバス優先順位が割り当てられた手続きの中で呼び出される別の手続きに、別のバス優先順位を割り当てることができる。そして、当該呼び出した手続きが復帰したとき、バス優先順位を元の状態に戻すことができる。
【産業上の利用可能性】
【００６１】
本発明に係るプログラム実行装置およびコンパイラ装置は、ハードウェア不具合の発生時に、バス調停に係る優先順位以外のパラメータを固定してハードウェア検証を行うことが必要とされる分野において特に有用である。
【図面の簡単な説明】
【００６２】
【図１】本発明の第１の実施形態に係るプログラム実行装置の構成図である。
【図２】優先順位情報テーブルに登録された情報の例を示した図である。
【図３】アドレス空間判定部の内部構成図である。
【図４】ページサイズ設定レジスタの設定値とマスク値との対応関係を示した図である。
【図５】本発明の第２の実施形態に係るコンパイラ装置およびプログラム実行装置の構成図である。
【図６】コンパイラオプションによるバス優先順位指定の様子を表した図である。
【図７】優先順位指定テーブルによるバス優先順位指定の様子を表した図である。
【図８】ソースプログラムに記載したプラグマによるバス優先順位指定の様子を表した図である。
【図９】ループ回数ごとにバス優先順位を指定するコンパイラ装置の構成の一部分を表した図である。
【図１０】ループ回数閾値とバス優先順位との対応関係の例を示した図である。
【図１１】優先順位情報制御部を翻訳部の後段に設けたコンパイラ装置の構成図である。
【図１２】オブジェクトプログラム中のコール命令にバス優先順位情報を付加した例を示した図である。
【図１３】本発明の第３の実施形態に係るプログラム実行装置の構成図である。
【図１４】コール命令実行時のスタックメモリのデータ格納状態を示した図である。
【図１５】バス優先順位を変更するために追加される命令列の例を示す図である。
【符号の説明】
【００６３】
１０  プログラム実行装置
１１  優先順位情報テーブル
１２  アドレス空間判定部
１３  優先順位通知部
１４  テーブル登録部
２０，２０´  コンパイラ装置
２１  優先順位情報抽出部
２２  優先順位情報付加部
２５  ループ回数検出部
２６  優先順位情報選択部
２７  優先順位情報付加部
３０，３０´  プログラム実行装置
３２，３２´  優先順位抽出部
３３  優先順位通知部
３２１  状態レジスタ
【図１】
2005202741.tif 000003
【図２】
2005202741.tif 000004
【図３】
2005202741.tif 000005
【図４】
2005202741.tif 000006
【図５】
2005202741.tif 000007
【図６】
2005202741.tif 000008
【図７】
2005202741.tif 000009
【図８】
2005202741.tif 000010
【図９】
2005202741.tif 000011
【図１０】
2005202741.tif 000012
【図１１】
2005202741.tif 000013
【図１２】
2005202741.tif 000014
【図１３】
2005202741.tif 000015
【図１４】
2005202741.tif 000016
【図１５】
2005202741.tif 000017