(57)【要約】 【課題】  ハードウェア処理とソフトウェア処理の切換えを高速化する。【解決手段】  スタックベースの中間言語（バイトコード）をレジスタベースのＣＰＵ命令に変換するバイトコードアクセラレータ（５）では、ハードウェア処理と、ソフトウェア仮想マシンによるソフトウェア処理との間を移行する際に、バイトコードアクセラレータ起動時に、バイトコードアクセラレータとＣＰＵとの間の内部転送バス（２２）及びバイトコードアクセラレータの入力選択論理（２８）により、ＣＰＵのレジスタファイル（１４）からバイトコードアクセラレータ内部に複数の内部情報を転送し、バイトコードアクセラレータの動作終了時には、内部転送バス、バイトコードアクセラレータの出力セレクタ（２３）及び出力セレクタ選択論理（２４）２４によって、バイトコードアクセラレータ内部の複数の内部情報をＣＰＵのレジスタファイルに転送する。【選択図】        図１
2006127183.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタを含むレジスタファイルと、
前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、
第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する情報処理装置であって、
前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、
前記レジスタファイルと命令変換回路の間にデータを転送する専用バスを有し、
前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じて複数の内部情報を選択的に前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力された内部情報を取り込み制御する選択制御回路を有する情報処理装置。
【請求項２】
前記内部情報は、複数のレジスタをスタックとして利用するためのレジスタ管理情報である請求項１記載の情報処理装置。
【請求項３】
前記内部情報は、イベント切り換えのためのイベントカウント情報である請求項２記載の情報処理装置。
【請求項４】
第１動作モードから第２動作モードに移行するとき前記専用バスに出力される内部情報は、前記第２フォーマットの命令から切り出されたオペランド部である請求項３記載の情報処理装置。
【請求項５】
前記選択制御回路は、前記専用バスに出力する内部情報を選択するセレクタと、第１動作モードから第２動作モードに移行するとき命令実行部による命令実行に応じて前記セレクタの選択動作を制御する出力選択論理回路と、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて専用バスに出力された内部情報の取り込み先を選択制御する入力選択論理回路とを有する請求項４記載の情報処理装置。
【請求項６】
前記選択制御回路は、命令実行部のパイプラインを模擬する模擬パイプラインを有し、前記模擬パイプラインにおける所定のパイプラインステージに同期して前記専用バスへ内部情報を出力するタイミングと、専用バスの内部情報を取り込むタイミングとを生成する請求項５記載の情報処理装置。
【請求項７】
第１動作モードから第２動作モードに移行するとき、前記変換回路は命令実行部に複数のストア命令を実行させ、前記選択制御回路は前記ストア命令の実行に応じて複数の内部情報を選択的に前記専用バスに出力し、第２動作モードから第１動作モードに移行するとき、前記変換回路は命令実行部に複数のロード命令を実行させ、前記選択制御回路は前記ロード命令の実行に応じて前記レジスタファイルから専用バスに出力された内部情報を取り込み制御する請求項１記載の情報処理装置。
【請求項８】
複数のレジスタを含むレジスタファイルと、
前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、
第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する情報処理装置であって、
前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、
前記レジスタと命令変換回路の間にデータを転送する専用バスを有し、
前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じてレジスタ管理情報を前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力されたレジスタ管理情報を取り込み制御する選択制御回路を有する情報処理装置。
【請求項９】
前記第１フォーマット命令はレジスタベースの命令であり、
前記第２フォーマット命令はスタックベースの命令であり、
前記レジスタ管理情報は前記複数のレジスタをスタックとして利用するためのスタック割り当てに関する情報である請求項８記載の情報処理装置。
【請求項１０】
複数のレジスタを含むレジスタファイルと、
前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、
第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する情報処理装置であって、
前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、
前記レジスタと命令変換回路の間にデータを転送する専用バスを有し、
前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じてイベント切り換えのためのイベントカウント情報を前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力されたイベント切り換えのためのイベントカウント情報を取り込み制御する選択制御回路を有する情報処理装置。
【請求項１１】
前記選択制御回路は更に、第１動作モードから第２動作モードに移行するとき前記第２フォーマットの命令から切り出されたオペランド部を前記専用バスに出力してレジスタファイルに格納可能とする請求項８又は１０記載の情報処理装置。
【請求項１２】
複数のレジスタと、
前記複数のレジスタを利用して第１フォーマット命令を固有命令として実行する命令実行部と、
第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する情報処理装置であって、
前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、
前記レジスタと命令変換回路の間にデータを転送する専用バスを有し、
前記命令変換回路は、前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行に並行して、前記専用バスによる前記複数のレジスタと前記命令変換回路との間のデータ転送を行い、前記命令変換回路は、前記データ転送タイミングを命令実行部による複数回のレジスタストア動作に同期させ、前記レジスタストア動作を規定する命令毎に転送元データを変更する情報処理装置。
【請求項１３】
アンテナと、
前記アンテナから得られる信号を符号処理する第１情報処理装置と、
前記第１情報処理装置に結合された第１主記憶と、
複数のレジスタ、第１フォーマット命令を実行するためのものであってレジスタベースの処理を行う命令実行部及び命令変換回路を備え前記第１主記憶をアクセス可能とされる第２情報処理装置と、
前記第２情報処理装置に結合された第２主記憶と、を有し、
前記第２情報処理装置は、前記アンテナを介して前記第１主記憶に転送されてきた第２フォーマット命令で記述されたプログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、
前記命令変換回路は、前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行に並行して、前記専用バスによる前記複数のレジスタと前記命令変換回路との間のデータ転送を行い、前記命令変換回路は、前記データ転送タイミングを命令実行部による複数回のレジスタストア動作に同期させ、前記レジスタストア動作を規定する命令毎に転送元データを変更する携帯情報システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、中間言語の命令をネイティブ命令に変換して実行可能なマイクロプロセッサなどの情報処理装置に関し、バイトコードのような中間言語をマイクロプロセッサの固有命令に変換するハードウェアアクセラレータを搭載するマイクロプロセッサに適用して有効な技術に関する。
【背景技術】
【０００２】
近年、特定のハードウェア及びＯＳといったプラットフォームに依存せず、様々な機器で動作が可能なＪａｖａ［ＴＭ］が大型のサーバーから携帯電話まで広く普及している。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語であり、”Ｊａｖａ”はサン・マイクロシステムズ社の登録商標である。
【０００３】
Ｊａｖａは、コンパイル時にソースコードからプラットフォームに依存しないバイトコードと呼ばれる中間言語に翻訳される。バイトコードは、Ｊａｖａ仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）と呼ばれるソフトウェアを用いて、マイクロプロセッサ固有のネイティブコードに解釈され、実行される。プラットフォームに対応するＪａｖａ仮想マシンを用意することで、プラットフォームの差異は、Ｊａｖａ仮想マシンが吸収する。
【０００４】
バイトコードのＪａｖａ仮想マシンでの実行は、インタプリタ方式でバイトコードを逐一解釈しながら処理するために低速である。インタプリタ方式はバイトコードによる多方向分岐処理があることと、逐一解釈のためオペランドスタックの使用が非効率である。そこで、インタプリタ処理によるオーバヘッドを削減するために、使用頻度の高いバイトコードにおいて、バイトコードからネイティブコードへの変換をハードウェア（バイトコードアクセラレータ）で実行することで高速化を行なっている。例えば、特許文献１には、バイトコードをマイクロプロセッサのネイティブコードへ変換するハードウェアが示されている。使用頻度の低い複雑なバイトコードはソフトウェアのＪａｖａ仮想マシンを用いて処理するようになっている。
【０００５】
特許文献２には、ハードウェア処理とソフトウェアＪａｖａ仮想マシン間の移行時間の高速化に着目し、バイトコードがバイトコードアクセラレータによってネイティブコードに変換できない場合、変換動作モードをソフトウェアＪａｖａ仮想マシンを用いるモードに移行するとき、専用バスを用いてハードウェアアクセラレータのレジスタとＣＰＵのレジスタファイルとの間で内部情報のデータ転送を行うことについて記載される。その逆の場合にはＣＰＵのレジスタファイルからハードウェアアクセラレータのレジスタに内部情報を転送する。
【０００６】
【特許文献１】米国特許第６，３３２，２１５号明細書
【特許文献２】特開２００４−３０２２２
【発明の開示】
【発明が解決しようとする課題】
【０００７】
実アプリケーションでは、ハードウェア処理とソフトウェアで処理されるバイトコードが混在し、高頻度でハードウェア処理とソフトウェア処理が切替えられる場合がある。従って、ハードウェア処理とソフトウェア処理の移行時間の高速化が重要となってくる。処理の移行の際は、ハードウェアとソフトウェアのＪａｖａ仮想マシン間で情報の受渡しを行なうため、ハードウェアとソフトウェアＪａｖａ仮想マシン間のリソース共有を工夫することで、情報の受渡しを高速化することができる。情報の受渡しには、外部メモリ、キャッシュメモリ、汎用レジスタによるデータ共有が考えられるが、汎用レジスタによるデータ共有が最も高速である。
【０００８】
特許文献２では、上述の如く、変換モードの移行時に専用バスを用いてハードウェアとレジスタファイルでデータ転送を行い、レジスタによるデータ共有を行なった。しかしながら、特許文献２では、専用バスで転送すべき内部情報の選択という技術的事項について考慮されていない。モード移行時には、専用バスのデータを固定するため、データ転送は一つのデータに限られていた。より高速化を行なうためには、複数のデータをハードウェア処理とソフトウェアＪａｖａ仮想マシン間でレジスタによるデータ共有を行なう必要があり、これを実現するためには専用バスを用いて複数のデータを転送する別の機構が必要となる。
【０００９】
本発明の目的は、ハードウェア処理とソフトウェア処理の切換えを高速に行うことである。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１２】
〔１〕本発明に係る情報処理装置は、複数のレジスタを含むレジスタファイルと、前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する。前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、更に、前記レジスタと命令変換回路の間にデータを転送する専用バス（２２）を有する。前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じて複数の内部情報を選択的に前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力された内部情報を取り込み制御する選択制御回路（２３，２４，２８）を有する。
【００１３】
上記より、動作モードの移行時に内部情報を選択して前記専用バスで転送することができ、複数の内部情報をハードウェア処理とソフトウェア仮想マシンとの間でレジスタファイルを介して共有することが可能になり、ハードウェア処理とソフトウェア処理との間の切換えを高速化するのに資することができる。
【００１４】
本発明の具体的な形態として、前記内部情報は、複数のレジスタをスタックとして利用するためのレジスタ管理情報、更には、イベント切り換えのためのイベントカウント情報である。また、第１動作モードから第２動作モードに移行するとき前記専用バスに出力される内部情報は、前記第２フォーマットの命令から切り出されたオペランド部である。例えば第２フォーマット命令をＪａｖａにおけるバイトコードとすると、バイトコードのオペランドはバイトコードに付随するから命令キャッシュメモリに格納されることになり、一方、第1フォーマット命令であるネイティブコードのオペランドはデータキャッシュメモリに格納されることになるから、命令変換回路に取り込まれたバイトコードが非サポートバイトコード（命令変換回路で変換不可能なバイトコード）の場合には第１モードから第２モードに移行して、バイトコードの変換を行ってこれを実行しなければならない。命令実行部は第２モードで変換された命令を実行するとき、必要なオペランドをデータアクセスによって取得しなければならない。このとき、既に命令変換回路に取り込まれているオペランドは、専用バスを介して予めレジスタファイルに内部転送されているから、データキャッメモリが必要なオペランドを保有していなくても、データキャッシュミスによる外部メモリのアクセスは必要なく、データキャッシュミスペナルティーによる処理の遅れを生じない。
【００１５】
本発明の更に具体的な形態として、前記選択制御回路は、前記専用バスに出力する内部情報を選択するセレクタ（２３）と、第１動作モードから第２動作モードに移行するとき命令実行部による命令実行に応じて前記セレクタの選択動作を制御する出力選択論理回路（２４）と、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて専用バスに出力された内部情報の取り込み先を選択制御する入力選択論理回路（２８）とを有する。
【００１６】
前記選択制御回路は、命令実行部のパイプラインを模擬する模擬パイプラインを有し、前記模擬パイプラインにおける所定のパイプラインステージに同期して前記専用バスへ内部情報を出力するタイミングと、専用バスの内部情報を取り込むタイミングとを生成する。専用バスに対する内部情報の出力と、専用バス上の内部情報の取り込みとの同期を容易に採る事が可能になる。
【００１７】
関する本発明の具体的な形態として、専用バスに対する内部情報の出力と、専用バス上の内部情報の取り込みタイミングに着目すると、第１動作モードから第２動作モードに移行するとき、前記変換回路は命令実行部に複数のストア命令を実行させ、前記選択制御回路は前記ストア命令の実行に応じて複数の内部情報を選択的に前記専用バスに出力し、第２動作モードから第１動作モードに移行するとき、前記変換回路は命令実行部に複数のロード命令を実行させ、前記選択制御回路は前記ロード命令の実行に応じて前記レジスタファイルから専用バスに出力された内部情報を取り込み制御する。
【００１８】
〔２〕本発明の別の観点による情報処理装置は、複数のレジスタを含むレジスタファイルと、前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する。前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、さらに、前記レジスタと命令変換回路の間にデータを転送する専用バスを有する。前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じてレジスタ管理情報を前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力されたレジスタ管理情報を取り込み制御する選択制御回路を有する。
【００１９】
本発明の具体的な形態として、前記第１フォーマット命令はレジスタベースの命令であり、前記第２フォーマット命令はスタックベースの命令であり、このとき、前記レジスタ管理情報は前記複数のレジスタをスタックとして利用するためのスタック割り当てに関する情報である。
【００２０】
〔３〕本発明の更に別の観点による情報処理装置は、複数のレジスタを含むレジスタファイルと、前記レジスタファイルを利用して第１フォーマット命令を固有命令として実行する命令実行部と、第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する。前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、更に、前記レジスタと命令変換回路の間にデータを転送する専用バスを有する。前記命令変換回路は、第１動作モードから第２動作モードに移行するとき、命令実行部による命令実行に応じてイベント切り換えのためのイベントカウント情報を前記専用バスに出力してレジスタファイルに格納可能とし、第２動作モードから第１動作モードに移行するとき命令実行部による命令実行に応じて前記レジスタファイルから専用バスに出力されたイベント切り換えのためのイベントカウント情報を取り込み制御する選択制御回路を有する。
【００２１】
本発明の具体的な形態として、前記選択制御回路は更に、第１動作モードから第２動作モードに移行するとき前記第２フォーマットの命令から切り出されたオペランド部を前記専用バスに出力してレジスタファイルに格納可能とする。
【００２２】
〔４〕本発明の更に別の観点による情報処理装置は、複数のレジスタと、前記複数のレジスタを利用して第１フォーマット命令を固有命令として実行する命令実行部と、第２フォーマット命令を第１フォーマット命令に変換する命令変換回路とを有する。前記情報処理装置は、第２フォーマット命令で記述された第１プログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有し、更に、前記レジスタと命令変換回路の間にデータを転送する専用バスを有する。前記命令変換回路は、前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行に並行して、前記専用バスによる前記複数のレジスタと前記命令変換回路との間のデータ転送を行い、前記命令変換回路は、前記データ転送タイミングを命令実行部による複数回のレジスタストア動作に同期させ、前記レジスタストア動作を規定する命令毎に転送元データを変更する。
【００２３】
〔５〕本発明の更に別の観点による形態情報システムは、アンテナと、前記アンテナから得られる信号を符号処理する第１情報処理装置と、前記第１情報処理装置に結合された第１主記憶と、複数のレジスタ、第１フォーマット命令を実行するためのものであってレジスタベースの処理を行う命令実行部及び命令変換回路を備え前記第１主記憶をアクセス可能とされる第２情報処理装置と、前記第２情報処理装置に結合された第２主記憶とを有する。前記第２情報処理装置は、前記アンテナを介して前記第１主記憶に転送されてきた第２フォーマット命令で記述されたプログラムを実行するとき、前記命令変換回路によって変換した第１フォーマット命令を実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって変換した第１フォーマット命令を実行する第２動作モードとを有する。前記命令変換回路は、前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行に並行して、前記専用バスによる前記複数のレジスタと前記命令変換回路との間のデータ転送を行い、前記命令変換回路は、前記データ転送タイミングを命令実行部による複数回のレジスタストア動作に同期させ、前記レジスタストア動作を規定する命令毎に転送元データを変更する。
【発明の効果】
【００２４】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００２５】
すなわち、ハードウェア処理とソフトウェア処理の切換えを高速化するのに資することができる。
【発明を実施するための最良の形態】
【００２６】
図１には本発明の一例に係る情報処理装置の一例に係るマイクロプロセッサが示される。同図に示されるマイクロプロセッサ（ＭＰＵ）１は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタなどを形成する半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板に形成される。
【００２７】
マイクロプロセッサ１は、代表的に示された命令キャッシュメモリ（ＩＣＡＣＨ）２、データキャッシュメモリ（ＤＣＡＣＨ）３、メインプロセッサとしての中央処理装置（ＣＰＵ）４、バイトコードアクセラレータ（ＢＣＡ）５、ＳＤＲＡＭを接続可能なバスステートコントローラ（ＳＢＳＣ）３０、周辺バス用バスブリッジ（ＰＢ）３１、シリアルＩ／Ｏモジュール（ＳＩＯ）３２、Ｉ２Ｃコントローラ（Ｉ２Ｃ）３３を有する。中央処理装置４は命令バス（ＩＢＵＳ）６を介して命令キャッシュメモリ２に接続され、データバス（ＤＢＵＳ）７を介してデータキャッシュメモリ３に接続される。命令キャッシュメモリ２、データキャッシュメモリ３、バスステートコントローラ３０及びバスブリッジ３１はメイン内部バス（MＢＵＳ）に接続される。バスコントローラ３０は外部に接続されるＳＤＲＡＭ３４とのインタフェース制御機能を有する。周辺バス用バスブリッジ３１はメイン内部バス８と周辺バス（ＰＢＵＳ）９のバスブリッジ機能を有する。シリアルＩ／Ｏモジュール３２、Ｉ２Ｃコントローラ３３などの周辺インタフェースは、周辺バス９に接続される。
【００２８】
中央処理装置４は、命令キャッシュメモリ３等から命令をフェッチする命令フェッチ部（ＦＥＴ）１０、命令フェッチ部１０とバイトコードアクセラレータ５の出力を選択するセレクタ１１、命令のデコードを行うデコード部（ＤＥＣ）１２、命令デコード結果に基づいて命令の演算と実行を行う実行部（ＥＸＥ）１３、制御信号を生成する制御部（ＣＴＬ）１５、及び複数のレジスタから成るレジスタファイル（ＲＥＧ）１４などを備えて構成される。
【００２９】
バイトコードアクセラレータ５は、バイトコードフェッチ部（ＢＦＡ）２０、バイトコード変換論理部（ＴＲＳ）２１、転送バス（ＢＣＡＢＵＳ）２２、出力セレクタ２３、出力セレクタ選択論理（ＯＳＬ）２４、入力選択論理（ＩＳＬ）２８、オペランド出力部（ＯＰＲ）２５、ＢＣＡの内部ステート部（ＳＴＭ）２６、コンフィグレーションレジスタ部（ＣＦＧ）２７などから成る。バイトコードフェッチ部（ＢＦＡ）２０はＣＰＵ４の命令フェッチ部１０から出力される命令からバイトコード（ｂｙｔｅｃｏｄｅ）への切り出しと命令の要求を行なう。命令の要求とは、例えば分岐先のバイトコードが必要なときはＣＰＵ４の命令フェッチ部１０に対し、分岐先のアドレスを出力することにより分岐先のバイトコードが含まれる命令を要求する、というようなことである。バイトコード変換論理部２１はバイトコードをネイティブコードに変換する。転送バス２２はバイトコードアクセラレータ５とＣＰＵ４のレジスタファイル１４との間の転送を行なうための専用バスである。出力セレクタ２３は転送バス２２にどのデータを出力するかを選択する。その制御は出力セレクタ選択論理（ＯＳＬ）２４が出力する制御信号で行われる。入力選択論理２８はＣＰＵ４のレジスタファイル１４から転送バス２２に与えられたデータをバイトコードアクセラレータ５の内部で選択するための制御信号を生成する論理回路である。入力選択回路２８による入力選択は、転送バス２２からコンフィグレーションレジスタ部２７に至る信号経路に接続する記憶段の入力ゲート若しくはフリップフロップを制御し、また、転送バス２２から内部ステート部２６に至る信号経路に接続する記憶段の入力ゲート若しくはフリップフロップを制御する。オペランド出力部２５はバイトコードのオペランドを出力する。バイトコードは可変長であり、その先頭にはオペレーションコードが配置され、オペランドを必要とバイトコードはその後ろにバイトコードを有する。内部ステート部２６は、スタックベースのバイトコードを処理する性質上、スタックトップ、スタックボトム、有効エントリ数などの管理情報を有する。コンフィグレーションレジスタ部２７はＢＣＡのコンフィグレーション情報を格納する。コンフィグレーションレジスタ部２７はメモリマップされたレジスタ（メモリマップドレジスタ）であり、メモリアクセスサイクルを用いてアクセスされる。特に制限されないが、中央処理装置４のレジスタファイル１５には１６本の汎用レジスタが含まれ、Ｒ０〜Ｒ１５で表される。
【００３０】
バイトコードとは中央処理装置４のアーキテクチャに依存しない仮想マシン命令を意味し、例えばＪａｖａバイトコードを意味する。ネイティブコードとは中央処理装置（ＣＰＵ）４のアーキテクチャに依存するネイティブ命令を意味する。ここでは、仮想マシン命令もネイティブ命令も命令キャッシュメモリ２に格納されている。ここで、バイトコードのオペランドはバイトコードに付随するから命令キャッシュメモリ２に格納されることになる。一方、ネイティブコードのオペランドはデータキャッシュメモリ３に格納されることになる。バイトコードアクセラレータ５に取り込まれたバイトコードがオペランドを持ち、非サポートバイトコード（バイトコードアクセラレータ５で変換不可能なバイトコード）の場合がある。このとき、バイトコードアクセラレータは処理を終了し、ソフトウェア仮想マシンのインタープリタで当該バイトコードの変換を行わなければならない。ＣＰＵ４はソフトウェア仮想マシンで変換されたコードを実行するとき、必要なオペランドを取得しなければならないが、データキャッシュメモリ３は当該必要なオペランドを保有していないことがある。このとき、外部メモリ３４のアクセスが必要なため、オーバヘッドが大きい。このオペランド取得の高速化のため、バイトコードアクセラレータは処理を終了する際に、バイトコードアクセラレータ５に取り込まれているオペランドを転送バス２２を介して予めレジスタファイル１４に内部転送する機構を持つ。そこで、ソフトウェア仮想マシンのインタープリタで当該バイトコードを変換するとき、オペランドとしてレジスタファイルの値を使用すればよい。これにより、データキャッシュミスによる外部メモリ３４のアクセスは必要ないため、高速化が実現できる。このオペランドの内部転送をはじめとして幾つかの内部情報をバス２２を介してバイトコードアクセラレータ５からＣＰＵ４に、またその逆にＣＰＵ４からバイトコードアクセラレータ５にＣＰＵ4の内部情報を転送可能になっている。前者の転送はバイトコードアクセラレータが終了されるときに並行して行われ、後者の転送はバイトコードアクセラレータが起動するときに並行して行われる。以下にそれら内部情報の転送について説明する。
【００３１】
まず、命令の処理について言及する。マイクロプロセッサ１は２つの命令を処理する。ＣＰＵ４固有のネイティブ命令とＪａｖａなどの中間言語のバイトコードである。ＣＰＵ命令はＣＰＵ４の命令フェッチ部１０にフェッチされ、セレクタ１１で命令フェッチ部出力が選択され、デコード部１２に入力される。デコード部でＣＰＵ命令はデコードされ、実行部１３で処理される。実行部１３はレジスタファイル１４又はデータバス７からからリードしたデータにより演算を行なったり、データバス７に演算データをロードし、或いはレジスタファイル１４に演算データをライトする。
【００３２】
バイトコードは、ＣＰＵ４とバイトコードアクセラレータ５を用いて処理される。まず、命令キャッシュメモリ２などから命令がＣＰＵ４の命令フェッチ部１０にフェッチされる。命令はバイトコードアクセラレータ５のバイトコードフェッチ部２０に出力され、バイトコード切り出しのための整形（アライン）処理が行なわれる。バイトコードフェッチ部２０はバイトコードの保持及び、ＣＰＵ４の命令フェッチ部１０にバイトコードのフェッチ要求を行なう。例えば、分岐先のバイトコードが必要なときはＣＰＵ４の命令フェッチ部１０に対し、分岐先のアドレスを出力することにより分岐先のバイトコードが含まれる命令を要求する。整形されたバイトコードはバイトコード変換論理部２１で一つまたは複数のＣＰＵ命令に変換され、ＣＰＵ４に出力される。そして、セレクタ１１でバイトコードアクセラレータの出力が選択され、デコード部１２に入力される。デコード部１２以後の処理は、ＣＰＵ命令の処理と共通である。セレクタ１１は、バイトコードアクセラレータ５が起動しているときバイトコード変換論理部２１の出力を選択し、この状態においてバイトコードアクセラレータが終了しているときは命令フェッチ部１０の出力を選択するように制御される。
【００３３】
ここで、バイトコードアクセラレータ５の起動と停止について簡単に説明する。バイトコードアクセラレータ５の制御レジスタ（ＢＦＡ２０に含まれる）にはバイトコードアクセラレータ５のイネーブルビットが含まれる。バイトコードアクセラレータ５を使用可能とするためには、まず制御レジスタのイネーブルビットを設定する。そして、バイトコードアクセラレータ５は、特定のＣＰＵ命令（例えばＪ＿ＪＰ命令）を検出することで起動し、バイトコードの変換を開始する。バイトコードアクセラレータ５は起動の際、ＣＰＵ４のプログラムカウンタ（制御部１５に含まれる）にＪａｖａ命令（バイトコード）のアドレス（ＪａｖａＰＣ）を設定する動作を行い、ＣＰＵ４の汎用レジスタ（例えばＲ１０）に記憶されたスタック情報などの内部情報をバス２２を介してバイトコードアクセラレータ５のＳＴＭ２６やＣＦＧ２７に設定する。プログラムカウンタの設定は、レジスタファイル１４中の一つの汎用レジスタから、実行部１３、制御部１５を経て、プログラムカウンタＰＣに前記一つの汎用レジスタに格納されたＪａｖａ命令のアドレスを設定することによって行う。これに並行して、前記レジスタファイル１４の汎用レジスタに記憶されたスタック情報などの内部情報をデータ転送経路２２を介してバイトコードアクセラレータＢＣＡのＳＴＭ２６やＣＦＧ２７に設定する。内部情報の転送についてその詳細は後述する。
【００３４】
また、バイトコードアクセラレータ５は動作の終了に際して、要するに、ソフトウェア仮想マシンを起動すべきとき、ＣＰＵ４のプログラムカウンタにソフトウェア仮想マシンのＣＰＵ命令アドレスを設定する動作、バイトコードアクセラレータ５の内部情報をＣＰＵ４のレジスタファイル１４などに待避する動作、ＣＰＵ４のプログラムカウンタのＪａｖａバイトコードのアドレス（ＪａｖａＰＣ）を汎用レジスタに退避する動作などを行う。ＣＰＵのプログラムカウンタにソフトウェア仮想マシンのＣＰＵ命令アドレスを設定するには、バイトコードアクセラレータ５が該当する動作を行う分岐命令に変換して出力し、セレクタ１１にて該当命令が選択され、デコード部１２、制御部１５を経てプログラムカウンタＰＣに設定すればよい。ＣＰＵ４のプログラムカウンタのＪａｖａバイトコードのアドレス（ＪａｖａＰＣ）を退避するには、プログラムカウンタのＪａｖａＰＣから制御部１５、実行部１３を経てレジスタファイル１４の汎用レジスタに退避すればよい。バイトコードアクセラレータ５の内部情報はバス２２を介してレジスタファイル１４に転送すればよい。この内部情報の転送についてその詳細は後述する。これによってソフトウェア仮想マシンによるソフトウェア処理に移行する。
【００３５】
次に、バイトコードアクセラレータ５とレジスタファイル１４との間の複数データ転送について説明する。
【００３６】
マイクロプロセッサ１は、固有のＣＰＵ命令を処理する状態とバイトコードアクセラレータ５によるＪａｖａなどのバイトコードを処理する２つの状態が存在する。バイトコードアクセラレータ５を用いたバイトコード処理では、バイトコードアクセラレータ５のハードウェア規模を削減するために、使用頻度が高く、複雑でないバイトコードのみをバイトコードアクセラレータ５で処理し、複雑なバイトコードはソフトウェア仮想マシンによるソフトウェアで処理する。このため、実Ｊａｖａアプリケーションでは、バイトコードアクセラレータ５によるハードウェア処理とソフトウェア処理が混在する。すなわち、バイトコードアクセラレータ５によるバイトコード処理状態と、ソフトウェア仮想マシンによる固有ＣＰＵ命令処理状態の２つが混在するため、２つの状態間でのリソース共有による移行時間の短縮が、Ｊａｖａアプリケーション処理の高速化に重要となってくる。
【００３７】
リソースの共有化には、外部メモリ、内蔵キャッシュメモリ、レジスタを用いる方法があるが、レジスタによる共有が最も高速である。レジスタの本数は限られていることから、リソース共有に必要で優先度の高い情報をレジスタに置くことになる。共有すべき情報は大別すると、次の３通りに分類できる。
【００３８】
（１）バイトコードアクセラレータ５の内部ステート情報
バイトコードアクセラレータ５を用いたハードウェア処理では、バイトコードのオペランドスタックの上位側の一部をレジスタファイル１４に置き、スタック間演算をレジスタ間演算とすることにより高速化を行なっている。このため、バイトコードアクセラレータ５ではレジスタファイル１４上に置かれるスタック情報を管理している。アドレス変換バッファ（ＴＬＢ）ミスや割込みなどの例外処理ではバイトコードアクセラレータ５の処理を終了し、例外処理が行なわれるが、復帰時に必要となるスタック情報をバイトコードアクセラレータ５からレジスタファイル１４上に転送する必要がある。バイトコードアクセラレータ５の内部情報はこのカテゴリに含まれる。
【００３９】
（２）バイトコードオペランド情報
バイトコードは1から数バイトのコード長を持つ。最初のバイトコードがオペコード（オペレーションコード）で、それ以外はオペランドである。複雑なバイトコードであってソフトウェア仮想マシンで処理されるバイトコード（非サポートバイトコードと称する）のうち、一つ以上のオペランドを持つバイトコードは、ソフトウェア仮想マシンで必ずリードされるので、バイトコードアクセラレータ５でアラインされたオペランドデータがレジスタファイル１４上にあると、高速化に有効であるからである。
【００４０】
（ａ）ゲットフィールド（ｇｅｔｆｉｅｌｄ）バイトコードとプットフィールド（ｐｕｔｆｉｅｌｄ）バイトコードにおいて、ソフトウェア仮想マシン上で参照アドレスを名前から実アドレスとするための処理に変換する場合に、オペランド情報をコンスタントプールインデックスとして使用する。
【００４１】
（ｂ）ｇｏｔｏ＿ｗバイトコードやｊｓｒ＿ｗバイトコードは分岐オフセットとして使用する。バイトコードのオペランドをレジスタファイル１４上に置くことは、命令とデータを分離したキャッシュメモリに有効である。非サポートバイトコードのオペランドをレジスタファイル１４のレジスタに渡すことによって、インデックスなどのオペランド情報に対し、外部メモリ３４からデータキャッシュ３にロードする時間を無くすことができる。インデックスは命令キャッシュメモリ２上にあるがデータキャッシュメモリ３上に無いため、データキャッシュメモリ３にロードするためには外部メモリ３４からロードしなければならない。今後、動作周波数が向上するにつれて外部メモリ３４からのアクセスはレイテンシが大きくなるので、処理の高速化という効果が見込める。更に、オペランドを整形して渡すことで、ソフトウェア仮想マシンに処理命令数を削減できる。外部メモリ３４の情報をバイトコードアクセラレータ５からＣＰＵ１４のレジスタファイル１４に渡すことに対応される。
【００４２】
（３）イベントカウント情報
バイトコードアクセラレータ５による処理の占有を避け、ソフトウェア仮想マシン一定の間隔で何らかの処理を行うことを目的として、特定のバイトコードを複数回実行することをカウントすることで実現できる。全てソフトウェア仮想マシン上のインタプリタで処理される場合は、ソフトウェア仮想マシンでバイトコードの実行数を管理すればよいが、バイトコードアクセラレータ５でバイトコードが実行される場合、ソフトウェア仮想マシンでバイトコードの実行数を把握することができない。そこで、バイトコードアクセラレータ５はイベントをカウントする機能を持つ。イベントカウント機能には、実行バイトコード数と後方分岐数のカウントがある。イベントカウンタレジスタはメモリマップドレジスタとされえ、ソフトウェア仮想マシンでリードまたは改変することができる。イベントレジスタはメモリマップドレジスタなのでアクセスが非常に低速である。スレッドの実行を中断する場合、ソフトウェア仮想マシンでイベントレジスタの値を改変した値をバイトコードアクセラレータ５が使用する。そのため、イベントカウンタがレジスタファイル１４上にあると高速化に効果が有る。バイトコードアクセラレータ５のメモリマップドレジスタの情報のように、リードまたは改変が可能だが非常に多くのサイクル数を要する情報の一例として位置付けられる。
【００４３】
バイトコードアクセラレータ５の動作終了の際、上記の複数のデータをバイトコードアクセラレータ５からＣＰＵ４のレジスタファイル１４に転送する方法は次の通りである。（１）バイトコードオペランド情報（ｏｐｒｄ）はオペランド出力部２５から出力され、（２）バイトコードアクセラレータ５の内部ステート情報（ｓｔｃｔｌ）は内部ステート部２６から出力され、（３）イベントカウント情報（ｅｖｔｃｕｎｔ）はコンフィグレーションレジスタ部２７から出力される。出力セレクタ２３はそれら複数のデータから一つのデータを選択する。出力セレクタ選択論理２４が生成する制御信号ｓｌｃｔ［２：０］により、セレクタ２３による転送バス２２へのい出力データが選択される。そして、転送バス２２によりバイトコードアクセラレータ５からレジスタファイル１４へデータが転送され、レジスタファイル１４にデータがライトされる。
【００４４】
逆に、バイトコードアクセラレータ５起動の際は、レジスタファイル１４からバイトコードアクセラレータ５に複数のデータを転送する。バイトコードアクセラレータ５に転送されるデータは、内部ステート情報とイベントカウント情報である。レジスタファイルのデータは順番に転送バス２２上に載せられるため、入力選択論理２８で適切なタイミングで内部ステート部２６とコンフィグレーションレジスタ部２７のフリップフロップの入力の制御を行ない、転送バスのデータを格納すればよい。前記フリップフロップは内部ステート部２６やコンフィグレーションレジスタ部２７の記憶段を構成するフリップフロップである。
【００４５】
以上より、バイトコードアクセラレータ５の起動と終了の際に、バイトコードアクセラレータ５とＣＰＵ４のレジスタファイル１４間で複数の内部情報のデータ転送を行なうことができる。
【００４６】
図２にはオペランド出力部２５の詳細な一例が示される。図３にはオペランド出力部２５に入力されるバイトコードとそれに対して整形された出力が例示される。
【００４７】
オペランド出力部２５はバイトコードを入力とし、オペランドを整形し、出力する。バイトコードは先頭のオペコードと続くオペランドから構成される。例えば、ｉａｄｄ、ｂｉｐｕｓｈ、ｉｉｎｃはバイトコード長がそれぞれ１、２、３であり、オペランド数はそれぞれ０、１、２である。オペランドは順にｏｐ１、ｏｐ２と呼ぶことにする。オペランド出力部２５では、バイトコード長判定部（ＢＣＬＤ）４０にてバイトコードをデコードしてバイトコード長を調べた後に、バイトコード長に従ってオペランドをアラインし、出力ｏｕｔ［３１：０］を決定する。オペランドのアラインまたはゼロ出力はセレクタ３５、３６を用いて実現する。例えば、ｉａｄｄではバイトコード長が１のためゼロ出力、ｂｉｐｕｓｈはバイトコード長が１のため上位１６ビットにゼロ、続く８ビットがｏｐ１、下位８ビットにゼロ、ｉｉｎｃは上位１６ビット、続く１６ビットにｏｐ１とｏｐ２を出力する。オペランドを整形しているため、ソフトウェア仮想マシン処理でオペランド整形のための命令が不要である。
【００４８】
図４には出力セレクタ選択論理２４の詳細な一例が示される。出力セレクタ選択論理２４は、バイトコードとＣＰＵ４からのステージ制御信号ｓｔｇｃｎｔ（Ｓｔａｇｅ  Ｃｏｎｔｒｏｌ）を入力とし、出力セレクタ２３のセレクタ信号Ｓｌｃｔ［２：０］を出力する。出力セレクタ選択論理２４は、非サポートバイトコード判定論理部（ＵＳＢＤ）４１と、カウンタ及びフラグ生成部（ＣＦＬＧ）４２と、模擬ＣＰＵパイプライン部（ＳＣＰ）４３から構成される。
【００４９】
非サポート判定論理部４１では、バイトコードｂｃ［７：０］を入力し、バイトコードがバイトコードアクセラレータ５で実行するかどうかを判定する。バイトコードアクセラレータ５で実行しない場合はＹｅｓとなる信号をカウンタ及びフラグ生成部４２に出力する。カウンタ及びフラグ生成部４２は、ダウンカウンタ（ＤＣＵＮＴ）４４を有し、そのカウント値からフラグ情報Ｆｌａｇ［２：０］を生成する。カウント値Ｃｎｔが２のとき（Ｃｎｔ＝＝２）フラグ情報Ｆｌａｇ［２］が論理値１、カウント値Ｃｎｔが１のとき（Ｃｎｔ＝＝１）フラグ情報Ｆｌａｇ［１］が論理値１、カウント値Ｃｎｔが０のとき（Ｃｎｔ＝＝０）フラグ情報Ｆｌａｇ［０］が論理値１となる。非サポートバイトコードでは、バイトコードアクセラレータ５はハードウェアの処理からソフトウェア仮想マシンへの処理に移すために、５つのＣＰＵ命令をＣＰＵ４へ出力する。５個のＣＰＵ命令は図５に例示される。最初の２命令が、ソフトウェア仮想マシンへの分岐アドレスのロード命令と分岐命令である。残りの３命令が、順にオペランドのレジスタライト、バイトコードアクセラレータ５の内部ステートのレジスタライト、イベントカウントレジスタのレジスタライトである。これらの命令を変換するのはバイトコード変換論理部２１である。バイトコード変換論理部は、命令変換を順に行なうために内部にはダウンカウンタを持つ。図５の命令列の隣に記述された数値はダウンカウンタの対応するカウント値である。カウンタ及びフラグ部４２では、バイトコード変換論理部２１と同じダウンカウンタ４４を持ち、非サポートバイトコードのときに図５の５つの命令の実行状態を把握する。ここで、ダウンカウンタはバイトコード変換論理部２１と共有化し、出力セレクタ選択論理２４はそのカウンタのカウンタ信号を入力としても構わない。カウンタと命令は１対１に対応するため、カウンタのカウント値をデコードすることで、バイトコードアクセラレータ５からレジスタファイル１４にライトするための命令の実行を知ることができる。ここでは、Ｃｎｔが２、１、０のときが、バイトコードアクセラレータ５からレジスタファイル１４に内部情報をライトするための命令である。そこで、それらの命令の実行をフラグ情報Ｆｌａｇ［２：０］から把握する。このとき、Ｆｌａｇ［２］が１のときはオペランド（ｏｐｒｄ）出力（Ｏｐｅｒａｎｄ  Ｏｕｔｐｕｔ）、Ｆｌａｇ［１］が１のときは内部ステート（ｓｔｃｔｌ）出力（Ｓｔａｔｅｃｔｌ  Ｏｕｔｐｕｔ）、Ｆｌａｇ［０］が１のときはイベントカウンタ（ｅｖｔｃｕｎｔ）出力（Ｅｖｅｎｔ  Ｃｏｕｎｔｅｒ  Ｏｕｔｐｕｔ）である。次に、模擬ＣＰＵパイプライン部４３を用いて実際に転送バス２２にデータを出力するタイミングを正確に把握する。ここでは、バイトコードアクセラレータ５からレジスタファイル１４にライトする命令はＭＡ（メモリアクセス）ステージにおけるバス２２の値をレジスタファイル１４にライトするものとする。このとき、バイトコードアクセラレータ５はフラグ情報Ｆｌａｇ［２：０］がＭＡステージに到達したときに、正しくバス２２に値を載せなければならない。模擬ＣＰＵパイプライン部４３を用いることにより、バス２２に載せ���タイミングを正確に知ることができる。ＣＰＵの制御部１５からＣＰＵの内部パイプラインのステージ制御信号ｓｔｇｃｎｔ（Ｓｔａｇｅ  Ｃｏｎｔｒｏｌ）がバイトコードアクセラレータ５に出力される。バイトコードアクセラレータ５の模擬ＣＰＵパイプライン部４３では、ＣＰＵ４と同じパイプラインをステージ制御信号を用いて再現する。ここでは、デコードステージＩＤ、実行ステージＥＸ、メモリアクセスステージＭＡ、ライトバックステージＷＢがあることにする。ＳＴＣ命令では、ＣＰＵ４がＭＡステージでバス２２をリードするため、バイトコードアクセラレータ５のＯＳＬ２４はフラグ情報Ｆｌａｇ［２：０］がＭＡステージ到達したときに、セレクタ信号ｓｌｃｔ［２：０］を決定することにより、ＣＰＵ４と同期してバス２２に内部情報を出力することができる。
【００５０】
図６には入力選択論理（ＩＳＬ）２８の詳細な一例が示される。入力選択論理２８は、ＣＰＵ４からの起動信号ｓｔｒ（ｓｔａｒｔ）とステージ制御信号ｓｔｇｃｎｔ（Ｓｔａｇｅ  Ｃｏｎｔｒｏｌ）を入力とし、内部ステート部（ＳＴＭ）２６とコンフィグレーションレジスタ部（ＣＦＧ）２７のフリップフロップの入力制御信号ｉｎｅｎ（Ｉｎｐｕｔ  ｅｎａｂｌｅ）［１：０］を出力する。入力選択論理２８は、起動信号判定部（ＳＳＤ）４５、カウンタ及びフラグ生成部（ＣＦＬＧ）４６、模擬ＣＰＵパイプライン部（ＳＣＰ）４７から構成される。まず、起動信号判定部４５では、ＣＰＵ４からのバイトコードアクセラレータ５の起動信号をチェックし、起動信号（ｓｔｒ）によりバイトコードアクセラレータ５を起動するかどうかを判定する。バイトコードアクセラレータ５を起動する場合はＹｅｓとなる信号をカウンタ及びフラグ生成部４６に出力する。カウンタ及びフラグ生成部４６は、ダウンカウンタ（ＤＣＵＮＴ）４８を有し、そのカウント値Ｃｎｔ［２：０］からフラグ情報Ｆｌａｇ［１：０］を生成する。カウント値Ｃｎｔが１のとき（Ｃｎｔ＝＝１）フラグ情報Ｆｌａｇ［１］が論理値１、カウント値Ｃｎｔが０のとき（Ｃｎｔ＝＝０）フラグ情報Ｆｌａｇ［０］が論理値１となる。バイトコードアクセラレータ５を起動する際、バイトコードアクセラレータ５は図７に例示される３つのＣＰＵ命令をＣＰＵ４へ出力する。最初の１命令が、Ｊａｖａプログラムへの分岐命令である。残りの２命令が、順にＣＰＵ４の汎用レジスタからバイトコードアクセラレータ５内部ステート部２６へのライト（Ｓｔａｔｅｃｔｌ  Ｉｎｐｕｔ）、ＣＰＵ４の汎用レジスタファイル１４からイベントカウントレジスタ部２７へのライト（Ｅｖｅｎｔ  Ｃｏｕｎｔｅｒ  Ｉｎｐｕｔ）である。これらの命令を変換するのはバイトコード変換論理部（ＴＲＳ）２１である。バイトコード変換論理部２１は、命令変換を順に行なうために内部にはダウンカウンタを持つ。図７において命令列の隣に記述された数値はダウンカウンタのカウント値である。カウンタ及びフラグ部４２では、バイトコード変換論理部２１と同じダウンカウンタ４８を持ち、起動時における図７の３つの命令を把握する。ここで、ダウンカウンタ４８はバイトコード変換論理部（ＴＲＳ）２１と共有化し、入力選択論理（ＩＳＬ）２８はそのカウンタ信号を入力としても構わない。カウント値と命令は１対１に対応するため、ダウンカウンタの値をデコードすることで、ＣＰＵ４のレジスタファイル１４からバイトコードアクセラレータ５にライトするための命令の実行状態を知ることができる。ここでは、カウント値Ｃｎｔが１のときと０のときの命令が、レジスタファイル１４からバイトコードアクセラレータ５へのライトを行う命令である。そこで、それらの命令をフラグ情報Ｆｌａｇ［１：０］を用いて把握する。カウント値Ｃｎｔが１のときＦｌａｇ［１］が論理値１にされ、このとき内部ステート部２６へのライトが行われ、カウント値Ｃｎｔが１のときＦｌａｇ［０］が論理値１にされ、このときイベントカウンタ部２７へのライトが行われる。模擬ＣＰＵパイプライン部４７を用いてＣＰＵ４と協調してデータの転送を行なう。実際に��ジスタファイル１４のデータが転送バス２２に載せられるタイミングを正確に把握する。ここでは、ＭＡステージのバス２２の値をバイトコードアクセラレータ５の内部ステート部（ＳＴＭ）２６とコンフィグレーションレジスタ部（ＣＦＧ）２７のフリップフロップにライトする。このとき、バイトコードアクセラレータ５はフラグ情報Ｆｌａｇ［２：０］がＭＡステージに到達したときに、バス２２の値を正しく取り込まなければならない。模擬ＣＰＵパイプライン４７を用いることにより、バス２２に載せるタイミングを正確に知ることができる。ＣＰＵ４の制御部１５からＣＰＵ４の内部パイプラインのステージ制御信号ｓｔｇｃｎｔ（Ｓｔａｇｅ  Ｃｏｎｔｒｏｌ）をバイトコードアクセラレータ５に出力する。バイトコードアクセラレータ５の模擬ＣＰＵパイプライン部４７では、ＣＰＵ４と同じパイプラインをステージ制御信号ｓｔｇｃｎｔを用いて再現する。ここでは、デコードステージＩＤ、実行ステージＥＸ、メモリアクセスステージＭＡ、ライトバックステージＷＢがある。ＬＤＣ命令では、ＣＰＵ４がレジスタファイル１４のデータをＭＡステージでバス２２に載せるので、バイトコードアクセラレータ５はフラグ情報Ｆｌａｇ［１：０］がＭＡステージ到達したときに、順に入力イネーブル信号ｉｎｅｎ（Ｉｎｐｕｔ  ｅｎａｂｌｅ）の値を決定することにより、ＣＰＵ４と同期してバイトコードアクセラレータ５に正しい内部情報をライトすることができる。
【００５１】
次に、バイトコードアクセラレータ５とソフトウェア仮想マシンの協調動作に関して説明する。バイトコードアクセラレータ５はバイトコードのハードウェア実行を行い、それ以外のソフトウェアによる実装部分と協調して仮想マシンを構成する。このソフトウェアによる実装部分がソフトウェア仮想マシン（ＳＯＦＴ＿ＶＭ）である。図８には、ハードウェアで実行しない非サポートバイトコードの実行時におけるバイトコードアクセラレータ（ＢＣＡ）５とソフトウェア仮想マシン（ＳＯＦＴ＿ＶＭ）との動作の分担及び相互の遷移状態が示される。
【００５２】
ソフトウェア仮想マシン（ＳＯＦＴ＿ＶＭ）６０は、ソフトウェア仮想マシン実行の初期設定を行う初期化部分（ＩＮＩＴ）６１、バイトコードアクセラレータ５を起動する際の起動命令が置かれたフックアップ部（ＨＯＯＫＵＰ）６２、ソフトウェアで解釈実行を行うために各バイトコードの処理開始アドレスを示すディスパッチテーブル（ＤＩＳＰ＿ＴＢＬ）６３、該当バイトコードのインタプリタ開始アドレスが置かれるディスパッチテーブル上のアドレスＡＤＤＲ（６４）、ソフトウェアで解釈実行を行うインタプリタ部（ＩＮＴＰＲＥＴ）６５から構成される。ソフトウェア仮想マシンのプログラムは命令キャッシュ２または外部メモリ３４に格納されている。ソフトウェア仮想マシンプログラムにはバイトコードアクセラレータ５を起動するためのフックアップ処理ルーチン（ＨＯＯＫＵＰ）６２を有する。ＣＰＵ４がフックアップ処理ルーチン６２を実行することによりバイトコードアクセラレータ５が動作可能な状態（ＡＣＴＶ）にされる。ハードウェアで実行しない非サポートバイトコードのとき（ＵＳＰ＿ＢＣＯＤＥ）は、ソフトウェアの仮想マシン、即ちソフトウェア仮想マシンプログラムに分岐する。非サポートバイトコード時は、ディスパッチテーブル部（ＤＩＳＰ＿ＴＢＬ）６３の該当するバイトコードよりインタプリタ６４の処理アドレス（ＡＤＤＲ）が与えられ、インタプリタ部（ＩＮＴＰＲＥＴ）５５上で解釈実行を行う。ディスパッチテーブル部６３は８ビットのバイトコード数分の２５６個の配列で構成される。インタプリタ部６５で該当バイトコードが解釈実行された後は、再びフックアップ部（ＨＯＯＫＵＰ）に分岐することにより、バイトコードアクセラレータ５が起動され、バイトコード処理が継続される。
【００５３】
図９にはマイクロプロセッサ１の好適な応用例としての携帯電話システムの一例を示す。携帯電話システムは、大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波をアンテナで送受信する高周波部（ＲＦ）９０、ベースバンドのモデム及びコーデックを行うベースバンドプロセッサ（ＢＢＰ）８９、メモリ（ＭＲＹａ）８８を有する。アプリケーション部分は、前記バイトコードアクセラレータ（ＢＣＡ）５、中央処理装置（ＣＰＵ）４を内蔵するマイクロプロセッサ１を中心に構成される。マイクロプロセッサ１はインターフェース（Ｉ／Ｆ）８１を介して外部バス（ＥＸＢＵＳ１）１００でベースバンドプロセッサ８９が接続され、周辺インターフェース（ＰＰＨ）８２を介してカメラ（ＣＭＲ）８３、メモリカード（ＣＡＲＤ）８４、音源部（ＳＯＤ）８５、及びキーボード（ＫＥＹ）８６が接続され、外部バス（ＥＸＢＵＳ２）１０１を介して液晶ディスプレイ（ＬＣＤ）８７、メモリ（ＭＲＹｂ）９１が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【００５４】
このシステムにより、バイトコードの処理が高速に行えるので、携帯情報システムの付加価値を高めることができる。
【００５５】
図１０には前記マイクロプロセッサ１の好適な応用例として車載情報システム例えばカーナビゲーションの構成が例示される。前記中央処理装置（ＣＰＵ）４、バイトコードアクセラレータ（ＢＣＡ）５を備えたマイクロプロセッサ（ＭＰＵ）１には、３次元グラフィックアクセラレータ（３ＤＧ）９２、２次元グラフィックアクセラレータ（２ＤＧ）９３、全地球測位システム（ＧＰＳ）９４、周辺インターフェース（ＰＰＨ）８２が集積される。外部バス（ＥＸＢＵＳ）１０３を介して液晶ディスプレイ（ＬＣＤ）８７、メモリ（ＭＲＹｃ）９５が接続される。
【００５６】
本システム構成例では、Ｊａｖａアプリケーション及びソフトウェア仮想マシン６０はメモリ（ＭＲＹｃ）９５に格納される。ソフトウェア仮想マシン６０のインタプリタ部６５はアクセス頻度が高いため半導体集積回路化されたマイクロプロセッサのオンチップメモリ上に配置されることが望ましい。この発明により、バイトコードの処理が高速に行えるため、車載情報システムの付加価値を高めることができる。
【００５７】
以上より以下の作用効果を得ることができる。
【００５８】
スタックベースの中間言語（バイトコード）をレジスタベースのＣＰＵ命令に変換するバイトコードアクセラレータ（ＢＣＡ）によるハードウェア処理と、ソフトウェア仮想マシンによるソフトウェア処理の移行に際して、バイトコードアクセラレータ５起動時には、バイトコードアクセラレータ５とＣＰＵ４の間の内部転送バス２２と入力選択論理（ＩＳＬ）２８により、ＣＰＵ４のレジスタファイル１４からバイトコードアクセラレータ５の内部に複数の内部情報を転送し、バイトコードアクセラレータの動作終了時には、内部転送バス２２とバイトコードアクセラレータの出力セレクタ２３及び出力セレクタ選択論理２４によって、バイトコードアクセラレータ５の内部の複数の内部情報をＣＰＵ４のレジスタファイル１４に転送することができる。これにより、ハードウェアとソフトウェアの情報共有を高速化することができ、データ処理装置における情報処理の高速化に資することができる。
【００５９】
更に本発明を拡張することにより、仮想マシン命令をネイティブ命令に変換してメインプロセッサに実行させることが可能なアクセラレータと共に、メインプロセッサからコプロセッサ命令を受取って動作するコプロセッサを有するデータ処理装置において、仮想マシン命令の実行効率を向上させることができる。すなわち、浮動小数点演算ユニット（ＦＰＵ）などのコプロセッサのレジスタをテンポラリレジスタに見立てて利用することにより、ＣＰＵを有するメインプロセッサとＦＰＵ等のコプロセッサに対するオペランドスタックの管理を簡素化することができる。
【００６０】
演算非サポートデータを直接検出するから、ＦＰＵ等のコプロセッサが取り扱えない演算動作に対して、取り扱えない演算動作の検出を正確に行うことができる。
【００６１】
演算非サポートデータを直接検出してその演算を抑止するから、ＦＰＵ等のコプロセッサが取り扱えない演算動作に対するソフトウェア処理への移行にも既存の例外ハンドラを修正せずに使用することができる。
【００６２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００６３】
例えば、バイトコードアクセラレータ（ＢＣＡ）とレジスタファイル間の転送は非サポートバイトコードのときに限定されず、別のハードウェア処理とソフトウエア処理の移行の際も実行できる。例えば、ＴＬＢミスや割込み処理を行なうＣＰＵ例外処理や、Ｊａｖａが実行時に検出するＪａｖａ例外処理である。Ｊａｖａ例外処理とは、Ｊａｖａが言語規定上定めた実行時の例外で、配列アクセス時のＮｕｌｌ  Ｐｏｉｎｔｅｒ  ＥｘｃｅｐｔｉｏｎやＡｒｒａｙ  Ｉｎｄｅｘ  Ｏｕｔ  Ｏｆ  Ｂｏｕｎｄｓ  Ｅｘｃｅｐｔｉｏｎ、整数ゼロ除算のＡｒｉｔｈｍｅｔｉｃ  Ｅｘｃｅｐｔｉｏｎが挙げられる。また、バイトコードやインタプリタを含む実行環境はＪａｖａに限定されない。
【図面の簡単な説明】
【００６４】
【図１】本発明の情報処理装置の一例に係るマイクロプロセッサを示すブロック図である。
【図２】オペランド出力部の詳細な一例を示すブロック図である。
【図３】オペランド出力部に入力されるバイトコードとそれに対して整形された出力を例示する説明図である。
【図４】出力セレクタ選択論理の詳細な一例を示すブロック図である。
【図５】バイトコードアクセラレータがハードウェアの処理からソフトウェア仮想マシンへの処理に移すためにＣＰＵに出力する５つのＣＰＵ命令を示す説明図である。
【図６】入力選択論理（ＩＳＬ）の詳細な一例を示すブロック図である。
【図７】バイトコードアクセラレータ５を起動する際にバイトコードアクセラレータがＣＰＵに出力する３つのＣＰＵ命令を示す説明図である。
【図８】ハードウェアで実行しない非サポートバイトコードの実行時におけるバイトコードアクセラレータ（ＢＣＡ）５とソフトウェア仮想マシン（ＳＯＦＴ＿ＶＭ）との動作の分担及び相互の遷移状態を示す説明図である。
【図９】マイクロプロセッサの好適な応用例である携帯電話システムを例示するブロック図である。
【図１０】マイクロプロセッサの好適な応用例である車載情報システム例えばカーナビゲーションの構成を示すブロック図である。
【符号の説明】
【００６５】
１  マイクロプロセッサ（ＭＰＵ）
２  命令キャッシュ（Ｉ−Ｃａｃｈｅ）
３  データキャッシュ（Ｄ−Ｃａｃｈｅ）
４  中央処理装置（ＣＰＵ）  
５  バイトコードアクセラレータ（ＢＣＡ）  
６  命令バス（Ｉ−Ｂｕｓ）
７  データバス（Ｄ−Ｂｕｓ）
8  メイン内部バス（M−Ｂｕｓ）
9  周辺バス（P−Ｂｕｓ）
１０  命令フェッチ部（ＦＥＴ）
１１  セレクタ
１２  デコード部（ＤＥＣ）
１３  命令実行部（ＥＸＥ）
１４  レジスタファイル（ＲＥＧ）
１５  制御部（ＣＴＬ）
２０  バイトコードフェッチ部（ＢＦＡ）
２１  バイトコード変換論理部（ＴＲＳ）
２２  転送バス（ＢＣＡＢＵＳ）
２３  出力セレクタ
２４  出力セレクタ選択論理（ＯＳＬ）
２５  オペランド出力部（ＯＰＲ）
２６  内部ステート部（ＳＴＭ）
２７  コンフィグレーションレジスタ部（ＣＦＧ）
２８  入力選択論理（ＩＳＬ）
３０  ＳＤＲＡＭ用バスステートコントローラ（ＳＢＳＣ）
３１  周辺バス用バスブリッジ（ＰＢ）
３２  シリアルＩ／Ｏモジュール（ＳＩＯ）
３３  Ｉ２Ｃコントローラ（Ｉ２Ｃ）
３４  ＳＤＲＡＭ
３５、３６  セレクタ
４０  バイトコード長判定部（ＢＣＬＤ）
４１  非サポートバイトコード判定論理部（ＵＳＲＤ）
４２、４６  カウンタとフラグ生成部（ＣＦＬＧ）
４３、４７  模擬ＣＰＵパイプライン部（ＳＣＰ）
４４、４８  ダウンカウンタ（ＤＣＵＮＴ）
４５  アクセラレータ起動信号
４９、５０  入力セレクタ
６０  ソフトウェア仮想マシン（ＳＯＦＴ＿ＶＭ）
６１  初期化ルーチン部（ＩＮＩＴ）
６２  起動部（ＨＯＯＫＵＰ）
６３  ディスパッチテーブル部（ＤＩＳＰ＿ＴＢＬ）
６４  ディスパッチテーブル内アドレス（ＡＤＤＲ）
６５  インタプリタ部（ＩＮＴＰＲＥＴ）
ＡＣＴ…起動
ＵＳＰ  ＢＣＯＤＥ…非サポートバイトコード検出
８１  インターフェース（Ｉ／Ｆ）
８２  周辺インターフェース（ＰＰＨ）
８３  カメラ（ＣＭＲ）
８４  メモリカード（ＣＡＲＤ）８４
８５  音源部（ＳＯＤ）
８６  キーボード（ＫＥＹ）
８７  液晶ディスプレイ（ＬＣＤ）
８８  メモリ（ＭＲＹａ）
８９  ベースバンドプロセッサ（ＢＢＰ）８９、
９０  高周波部（ＲＦ）
９１  メモリ（ＭＲＹｂ）
９２  ３次元グラフィックアクセラレータ（３ＤＧ）
９３  ２次元グラフィックアクセラレータ（２ＤＧ）
９４  全地球測位システム（ＧＰＳ）
９５  メモリ（ＭＲＹｃ）
１００  外部バス（ＥＸＢＵＳ１）
１０１  外部バス（ＥＸＢＵＳ２）
【図１】
2006127183.tif 000003
【図２】
2006127183.tif 000004
【図３】
2006127183.tif 000005
【図４】
2006127183.tif 000006
【図５】
2006127183.tif 000007
【図６】
2006127183.tif 000008
【図７】
2006127183.tif 000009
【図８】
2006127183.tif 000010
【図９】
2006127183.tif 000011
【図１０】
2006127183.tif 000012