(57)【要約】直接ハードウェアにバイトコンパイルされたJava(R)プログラムを実行するためのマイクロプロセッサアーキテクチャ（３０）。マイクロプロセッサは埋込システムドメインのローエンドを対象とし、２つの直交性のあるプログラミングモデル、すなわちJava(R)モデルおよびＲＩＳＣモデルを特徴とする。エンティティは共通のデータパスを共有し独立して動作するが、並列には動作しない。マイクロプロセッサは組合されたレジスタファイルを含み、ここでJava(R)モジュール（３１）はレジスタファイル（３５）における要素を循環オペランドスタックと見なし、ＲＩＳＣモジュール（３３）は要素を従来のレジスタファイルと見なす。統合されたマイクロプロセッサアーキテクチャは、ハードウェアに接近した命令へのアクセスを容易にし、かつ強力な割込および命令トラッピング能力を提供する。
2004532466.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアにおいてバイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサであって、
ＲＩＳＣプロセッサと、
ＲＩＳＣプロセッサにおいて第１のJava(R)命令の組を実行するためのJava(R)モジュールと、
ＲＩＳＣプロセッサにおいて第２のJava(R)命令の組をマイクロコードとして実行するためのＲＩＳＣモジュールとを含み、前記ＲＩＳＣモジュールは、割込を処理するための手段と、高度に特化された周辺機器を制御するためのフレキシブルなハードウェアインターフェイスとを含み、さらに、
両方のモジュールによって共有されるＲＩＳＣプロセッサにおけるデータパスを含み、前記データパスは、両方のモジュールによって共有されるレジスタファイルを含み、前記レジスタファイルは、Java(R)モジュールとＲＩＳＣモジュールとによって共有される複数の要素を有し、前記Java(R)モジュールは、前記複数の要素のうちの第１の部分を循環Java(R)オペランドスタックと見なし、かつ前記複数の要素のうちの残りの部分を記憶レジスタと見なし、前記ＲＩＳＣモジュールは複数の要素をレジスタファイルと見なす、マイクロプロセッサ。
【請求項２】
前記レジスタファイルは、どちらのモジュールが動作しているかを追跡するための制御ビットを含む、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記レジスタファイルは、実行されるべき命令のアドレスを含むプログラムカウンタを含む、請求項１に記載のマイクロプロセッサ。
【請求項４】
前記レジスタファイルは、呼出されるべき新しい方法のアドレスを記憶するためのプログラムカウンタベースレジスタを含む、請求項１に記載のマイクロプロセッサ。
【請求項５】
前記レジスタファイルは、Java(R)方法においてローカル変数に対するベースアドレス情報を記憶するためのローカル変数ベースアドレスを含む、請求項１に記載のマイクロプロセッサ。
【請求項６】
前記レジスタファイルは、Java(R)オペランドスタックのトップの場所を追跡するためのJava(R)スタックポインタを含む、請求項１に記載のマイクロプロセッサ。
【請求項７】
前記レジスタファイルは、レジスタファイルがフルである場合にＲＩＳＣが一時的に変数を記憶し得る場所を指すためのＲＩＳＣスタックポインタを含む、請求項１に記載のマイクロプロセッサ。
【請求項８】
前記レジスタファイルは、Java(R)命令を実行する場合に、Java(R)オペランドスタックのトップの値をレジスタオペランドとして用いるようＲＩＳＣモジュールに通知する１対のステータスビットを有するステータスレジスタを含み、前記１対のステータスビットの各々はソースまたはデスティネーションオペランドを制御する、請求項１に記載のマイクロプロセッサ。
【請求項９】
前記ステータスビットがセットされている場合、ＲＩＳＣモジュールはソースまたはデスティネーションオペランドを無視して、予め定められたレジスタの内容をソースまたはデスティネーションオペランドとして用いる、請求項８に記載のマイクロプロセッサ。
【請求項１０】
前記ステータスビットは、Java(R)命令に置換わるＲＩＳＣプログラムによってセット
されクリアされる、請求項８に記載のマイクロプロセッサ。
【請求項１１】
前記ＲＩＳＣプロセッサはSMILE RISCアーキテクチャを有する、請求項１に記載のマイクロプロセッサ。
【請求項１２】
制御ビットが、前記レジスタファイルの外部に位置決めされるステータスレジスタ内に位置決めされる、請求項１に記載のマイクロプロセッサ。
【請求項１３】
ＲＩＳＣプロセッサにおいてJava(R)コードを実行するための方法であって、前記方法は、
Java(R)モジュールでプロセッサにおいて第１のJava(R)命令の組を実行するステップと、
ＲＩＳＣモジュールでＲＩＳＣプロセッサにおいて第２のJava(R)命令の組を実行するステップとを含み、前記第２の組は前記第１の組よりも複雑であり、さらに
Java(R)モジュールによる実行には過度に複雑である命令が現われた場合にプロセッサに割込むステップと、
ＲＩＳＣモジュールにおいて複雑な命令を他の命令とは別に実行するステップと、
ＲＩＳＣモジュールが複雑な命令の実行を終了した場合にJava(R)モジュールに戻るステップとを含む、方法。
【請求項１４】
前記プロセッサに割込むステップは、
実現化固有条件の組がプロセッサが割込まれるべきことを要求することを確認するステップと、
戻りアドレスをＲＩＳＣモジュールにおいてスタックのトップに記憶するステップと、
予め定められたアドレスにジャンプして新しい分岐アドレスを読出すステップと、
ＲＩＳＣモジュールにおいて新しい分岐アドレスへの分岐命令を実行するステップと、
Java(R)モジュールを用いるプログラム実行に戻るためのreturn命令を実行するステップとを含む、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は一般的にマイクロプロセッサに関し、より特定的には、Java(R)バーチャルマシンコアアーキテクチャを備えたマイクロプロセッサに関する。
【背景技術】
【０００２】
Java(R)は、ネットワークプログラミングにおいて事実上の標準となったオブジェクト指向プログラミング言語である。現在、Java(R)はまた、埋込システムにおいて、もしくはマイクロプロセッサまたはマイクロコントローラを含むシステムのドメインにおいて利用され始めている。Java(R)環境のいくつかの強み、たとえばそのオブジェクト指向性、自動的な不要部分の整理およびランタイムセキュリティ特徴は、埋込アプリケーションにおいてうまく用いることができる。しかしながら、そのランタイム環境は、インタープリタまたは実行時コンパイラなどのバーチャルマシンでのJava(R)コードの実行に関連するリソースオーバーヘッドにより、システム設計者に対して課題を課す。バイトコードと呼ばれるJava(R)バイナリコードは、１つ以上のクラスファイルで分配される。バイトコードは、Java(R)プログラムの実行のために特に設計された仮想的コンピュータの命令である。従来のＣＰＵはこのバイトコードを実行できず、したがってJava(R)バーチャルマシンと呼ばれるソフトウェアレイヤーにおいてこれを実行する。この機械は抽象機械規格であり、実現ガイドラインは設けられていない。Java(R)バーチャルマシン規格はサンマイクロシステムズ（Sun microsystems）によって出版されている。
【０００３】
図１７を参照して、Java(R)プログラムを物理コンピュータプラットフォームで実行するための方法が基本的に４つ存在する。第１の方法９０２においては、オプコードがJava(R)コンパイラ９１５において計算され、Java(R)バイトコード９２５がインタープリタ９３０に送られ、その後オペレーティングシステム９５０に送られ、ＣＰＵ９６０によって実行される。しかしながら、インタープリタ９３０は、ネイティブコードにコンパイルされたプログラムを実行する場合と比較して５倍の速度ペナルティを有する。
【０００４】
第２の方法９０３は、インタープリタを用いる代わりに、Java(R)バイトコードが実行時（ＪＩＴ）コンパイラ９３５によってネイティブプラットフォームのためのバイナリフォーマット９４０に動的にコンパイルされることを除いて、同様である。このプロセスはバーチャルマシン内で生じ、プログラムが終了した後には記憶されない。最新のJava(R)ＪＩＴ技術はホットスポットと呼ばれ、プログラム実行の間にボトルネックが解析されてリコンパイルされる原則を用いる。しかしながら、ＪＩＴコンパイラは同じアプリケーションを実行している間に、２〜３倍のメモリオーバーヘッドを被る。
【０００５】
第３の方法９０１は、Java(R)ソースコードをネイティブプラットフォームのためのバイナリフォーマット９２０にコンパイルするためのクロスコンパイラ９１０の使用にかかわる。しかしながら、プラットフォーム独立性は失われ、バイナリプログラムは多数のプラットフォームでは実行できない。
【０００６】
第４の方法９０４においては、Java(R)オペレーティングシステム９４５およびJava(R)プロセッサ９７０が用いられ、バイトコードをシリコンで直接実行する。いくつかのJava(R)プロセッサはフォールディング機構を有するが、これはいくつかの命令が組合されて１つとして実行されることを意味する。しかしながら、ほとんどのJava(R)プロセッサは、各オプコードが読出され、次いで命令を実行するための適切な動作がとられるインタープリタとして実行する。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一般的に好ましいランタイム環境はない。これらの環境の各々を、異なったシステムに対してその要件に依存してうまく用い得る。しかしながら、埋込システムに対しては、Java(R)を埋込システムで実現すべき場合には、Java(R)プロセッサの使用（第４の方法９０４）ははるかに好ましい技術的解決策である。近年、埋込プロセッサプラットフォームに対していくつかのJava(R)バーチャルマシンが開発されている。ほとんどのソフトウェア解決策は、数１００Ｋメモリサイズの３２ビットプロセッサを目指している。さらに、Java(R)プログラムをシリコンで実行するためのいくつかのJava(R)ハードウェアプロセッサもまた開発されている。これらのプロセッサは、Java(R)命令の直接実行をサポートするものであるが、３２ビットスタックマシンを実現する。いくつかは、直接アドレッシングおよびビット操作命令などの特徴を提供するために、Java(R)バイナリフォーマットへの拡張に依拠する。他のものは、直接的にはJava(R)バイナリコードを実行しないが極めて近いアーキテクチャ上の一致を有し、それにより、バーチャルマシンの性能を向上させる。プロセッサはすべて、中型から大型の埋込システムを対象とする。８ビットプロセッサ市場が３２ビットプロセッサ市場よりもかなり大きいにもかかわらず、現在はJava(R)バイトコンパイルされたコードの直接実行に利用可能である８または１６ビットプロセッサはない。
【０００８】
この発明の目的は、Java(R)バイトコンパイルされたコードをハードウェアで実行するためのマイクロプロセッサを提供することである。
【０００９】
この発明のさらなる目的は、小型から中型の埋込アプリケーションにおいて好ましい解決策となるのに十分に小型でパワー効率のよい、Java(R)を実行するためのマイクロプロセッサアーキテクチャを提供することである。
【課題を解決するための手段】
【００１０】
発明の概要
上述の目的は、ハードウェアにおいてバイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサによって実行されるが、該マイクロプロセッサは、ＲＩＳＣプロセッサと、ＲＩＳＣプロセッサにおいて第１のJava(R)命令の組を実行するためのJava(R)モジュールと、ＲＩＳＣプロセッサにおいて第２のJava(R)命令の組をマイクロコードとして実行するためのＲＩＳＣモジュールと、両方のモジュールによって共有される、レジスタファイルを含むＲＩＳＣプロセッサにおけるデータパスとを含む。Java(R)モジュールは、レジスタファイルにおける要素を循環オペランドスタックと見なし、ＲＩＳＣモジュールは複数の要素をレジスタファイルと見なす。
【発明の効果】
【００１１】
マイクロプロセッサアーキテクチャは、Java(R)の高度なセマンティック内容命令セットにもかかわらず、これが、実行される命令の大部分を包括的ＲＩＳＣプロセッサの命令と共有しているという観測に基づいて演繹される。このアーキテクチャは、埋込アプリケーションの設計者に、統合が容易であり小型で費用対効果の大きいプロセッサ解決策、および明確に定義されたプログラミングモデルを提供することを意図する。これは、２つのプログラミングモデルに等しいプロセッサアーキテクチャをもたらし、Java(R)を小型から中型サイズの埋込アプリケーションに統合することを容易にする。
【発明を実施するための最良の形態】
【００１２】
図１を参照して、Java(R)命令セット２０と典型的なＲＩＳＣ命令セット２２とが重なるのを示す。Java(R)バーチャルマシン命令は、行なうべき動作を指定するオプコードと、行なわれるべき値を具体化する０またはそれ以上のオペランドとからなる。Java(R)バーチャルマシン命令セットには、合計で２０１のオプコードが存在する。Java(R)バーチャルマシン命令セットの重要な特徴は、多数の命令が高度なセマンティック内容を有することである。これらの命令はシリコンで実現するのが困難である。通常は１クロックサイクルで高度なセマンティック内容を有する命令を実行することは可能ではなく、これらをいくつかのより複雑ではない命令に分解する作業は、リソース割当およびタイミング制約の点から困難である。Java(R)命令の大部分はタイプ固有であり、したがって同じセマンティック意味を有する多くの命令が存在する。
【００１３】
ＲＩＳＣは、「縮小命令セットコンピュータ（reduced instruction set computer）」の略語である。ＲＩＳＣアーキテクチャの背後にある概念とは、より簡単な命令セットをより高いクロック周波数およびより効率的なパイプライニングで実行することが可能であって、従来のスタックマシンよりも高いスループットを確実にし得ることである。もちろん、ＲＩＳＣの命令セットはプロセッサ間で異なり得るが、一般的にはこれは以下の命令を有する：ＬＯＡＤ，ＳＴＯＲＥ，ＡＤＤ，ＳＵＢ，ＡＮＤ，ＯＲ，ＳＨＩＦＴ，ＢＲＡＮＣＨ。さらに、一般的には付加的なＲＩＳＣアーキテクチャは何らかの形態のビット操作命令を含む。Java(R)の命令セットと包括的ＲＩＳＣ命令セットとを比較すると、ほとんどのＲＩＳＣ命令がJava(R)命令セットに現れることがわかる。共通の命令の重複２５を図１に示す。残りの命令は、ＲＩＳＣ低レベルビット操作命令２３とJava(R)の高レベルオブジェクト作成および操作命令２１とに分割される。これらの観察は、ＲＩＳＣおよびJava(R)スタックマシンの両方がほぼ同じハードウェアリソースを必要とするという概念を確立した。さらに、シリコンにおけるJava(R)バーチャルマシン実現化は、ビット操作、直接メモリアドレッシング、および複雑なオプコードのトラッピングに対する命令のサポートを必要とする。また、両方のアーキテクチャにおいて最も頻繁に実行される命令は、ロード／記憶命令である。両方のアーキテクチャにおいて、これらは同じセマンティック内容を有する。シリコンで実現されると、これらの命令は同じハードウェアリソースを共有し得る。２つの命令セットの性質に対するこれらの観察は、この発明のマイクロプロセッサアーキテクチャにつながる。
【００１４】
図２を参照して、この発明のマイクロプロセッサ３０は、同じデータパスを共有するJava(R)制御ユニット３１とＲＩＳＣ制御ユニット３３とを含む。２つの制御ユニット３１、３３は独立して動作するが、同時には動作できない。言い換えれば、２つのバーチャルプロセッサは１つのデータパスを共有するが、独立して動作するにもかかわらず、これらは並列には動作しない。プロセッサ３０は他のJava(R)プロセッサのようにJava(R)バイナリフォーマットへの翻訳または拡張に依拠せず、２つの直交性のあるプログラミングモデルを提供する。マイクロプロセッサ３０は原則的にはフォンノイマンアーキテクチャであるが、これは別個のデータおよび命令バスによりハーバードアーキテクチャに簡単に拡張可能である。マイクロプロセッサは、ステータスレジスタ３２とプログラムカウンタ３４とを有するレジスタファイル３５を含む。レジスタファイルはデータバス４０に接続される。論理演算装置（ＡＬＵ）４２はレジスタファイル３５に接続され、ＡＬＵの出力はデータバス４０に供給される。この理由の一部は、クリティカルパスの大部分がＡＬＵを通るからであり、また理由の別の一部はこれが埋込マイクロプロセッサにおけるより大きなモジュールのうちの１つであるからである。最小限のＡＬＵ実現化は以下の動作を実行する：ＡＤＤ，ＳＵＢ，ＡＮＤ，ＯＲ，ＸＯＲ，ＭＯＶＥ，ＳＥＴ，ＣＬＥＡＲ，ＳＨＩＦＴおよびＲＯＴＡＴＥ。レジスタファイル３５およびプログラムカウンタ３４の出力は、加算器３６を通じてアドレス乗算器３７へと処理される。アドレス乗算器３７はまた、アドレスバス４１にも接続される。命令フェッチデコーダ３９は、信号をデータバス４０から受け、出力をスタック制御ユニット３８に与える。
【００１５】
図３を参照して、マイクロプロセッサは最初に、初期化コードを実行するために動作のＲＩＳＣモードでパワーアップする。初期化５２の後で、マイクロプロセッサはJava(R)モード５３に切換わり、Java(R)プログラム５４の実行を開始する。マイクロプロセッサは、３つの事象のうちの１つが生じるまでJava(R)モードで動作する：割込５９、実現されないJava(R)命令６０、またはＲＩＳＣモードに戻るために指定されるJava(R)オプコード５８。もしこれらの事象のいずれかが生じれば、プロセッサは予め定められたアドレスにジャンプしてＲＩＳＣモード５５に切換わり、この態様で事象を処理する。ＲＩＳＣルーチン５６を終了すると、プロセッサはJava(R)モード５７に戻り、中断したポイントからJava(R)コードの実行を続ける。
【００１６】
こうして、Java(R)モデルはプログラムのJava(R)部分を実行することが可能である。このような部分は、既に企業のソフトウェアライブラリで実現されて再利用のためにレガシーソフトウェアのモジュールを構成するネットワーク機能またはアルゴリズムであり得る。ＲＩＳＣモデルは、複雑な命令をマイクロコードとして実行することにより、Java(R)コードの実行を支援する。これはまた、センサおよびアクチュエータのような高度に特化された周辺機器を制御するために用い得るフレキシブルなハードウェアインターフェイスをも提供する。Java(R)バーチャルマシン規格と互換性があるようになるためには、すべてのJava(R)命令が実現化されなければならない。しかしながら、小型から中型アプリケーションを対象とする埋込プロセッサにおいては、Java(R)バーチャルマシンによって支援される数の書式のいくつかは過剰になる。たとえば、このセグメントにおいて浮動小数点単位を提供するプロセッサはほとんどない。いくつかのJava(R)のより複雑な命令はトラップされてマイクロコードとして実行されなければならない。どの命令をトラップしてどれを直接的にハードウェアに実現化するかは、通常、設計者が決定する実現化に固有の問題である。さらに、どのＲＩＳＣ命令セットを用いるかは、選択されるＲＩＳＣモデルに依存するが、なぜならばこの発明はここに記載するＲＩＳＣアーキテクチャに加えて、他のタイプのＲＩＳＣアーキテクチャでも用い得るからである。
【００１７】
提案されるマイクロプロセッサアーキテクチャにおいてキーとなるアーキテクチャ要素は、レジスタファイルである。このモジュールは、Java(R)モードにおけるプッシュポップスタックの機能と、ＲＩＳＣモードにおける従来のロード／記憶レジスタファイルとを有する。これはまた、２つのバーチャルプロセッサが通信することを可能にするモデルである。図４を参照して、アーキテクチャ７１のＲＩＳＣ部分は、Ｎ個のレジスタを備えたレジスタファイルを見て、ＲＩＳＣアーキテクチャはロード／記憶命令７２、７３、７４を通してデータメモリを備えたレジスタとインターフェイスする。プログラムカウンタとステータスレジスタとはレジスタファイル内に含まれる。直交性を保つために、これらの特別レジスタは、他のどのようなレジスタとも同様にアクセス可能である。Java(R)制御ユニット６１は、同じレジスタファイルをＭ＝Ｎ／２要素を備えたプッシュポップスタックと見なす。データはレジスタスタックにプッシュされ６２、レジスタスタックからJava(R)制御ユニットにポップされる６３。図４は、ＲＩＳＣおよびJava(R)モードから見たレジスタファイルの半分を示す。レジスタ８０、８１、８２は、Java(R)制御ユニット６１および回路のＲＩＳＣ部分７１の両方によって見られる。残りのＮ／２レジスタは、特に、プログラムカウンタ、ステータスレジスタ、スクラッチレジスタおよびスタック制御レジスタとして用いられる。スタックは循環スタックとして実現され、要求されるスタックサイズは比較的小さい。スタックサイズはスケーラブルであり、スタック要素のサイズは実現化固有の問題として残される。スタックオーバーフロー／アンダーフローは、オーバーフロー／アンダーフロー機構を通じてメモリ８３にコピーし得る。可能であるスタックオーバーフロー／アンダーフロー機構もまた、ケースバイケースの態様で開発し得る。
【００１８】
図５を参照して、完全なレジスタファイル９０を示す。ＲＩＳＣモジュールは、すべてのレジスタの読出および書込が可能であり、ＲＩＳＣモジュールがアクセス可能であるレジスタに対するハードウェア限定はない。プログラム実行の間にＲＩＳＣモジュールが特別レジスタに上書きしないという検証は、ソフトウェアレイヤーにおいて行なわれる。プログラマが特別レジスタのうちの１つを一時的メモリとして用いることを所望する場合、もし後でこのレジスタ内の値を実行の間に復元しなければならないのであれば、これはＲＩＳＣモジュールスタックに記憶されなければならない。図５に示すように、完全なＲＩＳＣレジスタファイル９０はJava(R)オペランドスタック９１を含むが、これは図４を参照して説明したように複数のレジスタ９２、９３、９４、９５を含む。ＲＩＳＣレジスタ９０はまた複数の特別レジスタをも含む。特別レジスタは、プログラムカウンタ１０６、プログラムカウンタベース１０５、定数プールベースアドレス１０７、ローカル変数ベースアドレス１０４、Java(R)スタックポインタ１０３、ステータスレジスタ１０１、およびＲＩＳＣスタックポインタ１０２を含む。これらのレジスタ機能のほとんどは自明である。プログラムカウンタベースレジスタ１０５は、Java(R)プロセッサによって用いられる。新しい方法が呼出された場合、Java(R)モジュールのプログラムカウンタは０にセットされる。プログラムカウンタベースレジスタは、この方法が呼出されるアドレスを記憶する。アドレスバスにおいて、このレジスタには、プログラムメモリにおける正しい場所から命令をフェッチするためのプログラムカウンタが加えられる。ローカル変数ベースアドレスレジスタ１０４は同様の機能を果たす。これは、Java(R)方法におけるローカル変数のためのベースアドレスを記憶する。これらのレジスタはレジスタファイル９０の外に存在するように選択されることが可能である。しかしながら、これらのレジスタを内部に存在できるようにする点について利点が示されるが、それはレジスタがいずれのＲＩＳＣ命令によっても到達可能であり、特別レジスタで動作するための特別な命令を実現する必要がないからである。Java(R)スタックポインタ１０３は、Java(R)オペランドスタックのトップの場所を追跡し、こうしてこのオペランドがフェッチされるべきＭレジスタのうちの特定のレジスタ、またはオペランドが書込まれるべき特定のレジスタを追跡する。ＲＩＳＣスタックポインタ１０２は、もしレジスタファイルがフルであれば、ＲＩＳＣが変数を一時的に記憶し得るメモリ内の場所を指す。
【００１９】
バーチャルプロセッサは、レジスタファイルを通じて通信する。ＲＩＳＣユニットは、特に、複雑なJava(R)命令を実行する。これらの小さなＲＩＳＣプログラムはそれらのオペランドをJava(R)オペランドスタックのトップからフェッチし、その結果をJava(R)オペランドスタックのトップに返し、同時にJava(R)スタックポインタが行なわれる動作に依存してインクリメントまたはデクリメントされることを確実にしなければならない。これはＲＩＳＣ命令フォーマットが静的なレジスタだけを処理するので問題である。この問題は、ステータスレジスタにおける２つのステータスビットをセットしかつクリアすることにより解決される。各ステータスビットは、ソース（Ｘ）またはデスティネーション（Ｙ）オペランドが命令に示されるレジスタからフェッチされるべきであるか、またはレジスタ番号がJava(R)スタックポインタレジスタから動的に読出されるべきであるかを制御する。Java(R)命令に置き換わるＲＩＳＣプログラムは、適切な時間にこれらのビットをセットしかつクリアしなければならない。レジスタファイルにおける２つのビットをセットすることにより、ＲＩＳＣプロセッサはスタックのトップレジスタの内容をレジスタがアクセスするための引数として用いることができる。
【００２０】
図７を参照して、マイクロプロセッサのモード転送機構の実現化を示す。Java(R)制御１２０およびＲＩＳＣ制御１２２モジュールはマルチプレクサ１２４に接続されるが、これは制御ライン１３０をデータパスに与える。レジスタファイルにおけるステータスレジスタは、制御ビット１２８を含み、これはJava(R)制御モジュール１２０およびＲＩＳＣ制御モジュール１２２に供給される。制御ビット１２８はまた、マルチプレクサ１２４に対する制御入力としても機能する。制御ビットは、どちらの制御ユニットのユニットが、すなわちJava(R)制御ユニット１２０またはＲＩＳＣ制御ユニット１２２のどちらの制御ユニットが動作中であるかを判断する。制御は、両方の制御モジュールにおいて予め定められた状態で転送される。制御はしたがって、両方のマシンが同じ定められた状態にあるようにシンクロナスに転送される。
【００２１】
Java(R)バーチャルマシン規格は、割込の概念を記述しない。したがって、割込はデフォルトでＲＩＳＣモジュールによって扱われる。図６を参照して、割込処理機構を示す。一般的に、割込が生じた場合、プロセッサは特定のフラグのような実現化固有条件が真であるか否かをチェックし、その後予め定められたアドレスにジャンプしてＲＩＳＣモードに切換わる。次いで、戻りアドレスがＲＩＳＣスタックのトップに記憶される。図６において、ジャンプアドレス（０ｘ６３）１１２が予め定められたアドレス（０ｘａｆ）１１１で記憶されるのを示す。この予め定められたアドレスにおいて、ジャンプアドレスが読出され、新しいアドレスに対する適切な分岐命令が行なわれる。実行はＲＩＳＣモードにおいてこの新しいアドレスで続けられる。通常のプログラム実行に戻るためには、プロセッサは「割込から戻る（Return from Interrupt）」ＲＩＳＣ命令を実行するが、ここで戻りアドレスがＲＩＳＣスタックのトップからポップされる。
【００２２】
命令トラッピング機構は、割込機構と同様のステップを含む。実現されない命令が生じた場合、Java(R)制御モジュールはこれを検出して、戻りアドレスがスタックのトップに記憶される。次いでプロセッサはＲＩＳＣモードに切換わり、メモリ内の予め定められた場所からジャンプアドレスをフェッチする。次いでＲＩＳＣモジュールは最後のステップでフェッチされたアドレスで実行を続ける。トラッピング機構を割込機構と同様にすることにより、設計においては第１のジャンプアドレスのみが予め定められるので、最大限の柔軟性が達成される。これにより、プログラム内に実際に存在するJava(R)オプコードに対してＲＩＳＣルーチンをリンクするだけで、ソフトウェアリンカがメモリ使用を最適に計画することが可能になり、こうして、貴重なメモリ空間が節約される。ＲＩＳＣルーチンは、プログラムカウンタをスタックのトップからポップし、これをプログラムカウンタレジスタに保存することにより終了する。これにより、Java(R)プログラムが正しい場所で継続することが確実になる。さらに、マイクロプロセッサはスタックオーバーフロー／アンダーフロー処理機構を有する。このJava(R)プッシュポップスタックにおける機構は、命令トラッピングに対する既存の論理を再利用することにより実現可能である。オーバーフローが生じた場合に、プロセッサはオーバーフローフラグをトラップし、予め定められたアドレスにジャンプし、ここでオーバーフロー／アンダーフロー条件を処理するソフトウェア手続に対するジャンプベクトルを見出す。
【００２３】
図８を参照して、このプロセッサ概念を備えたシステムに対する典型的なランタイム環境を示す。開発者は、Java(R)ソースコード１４１を通常のJava(R)コンパイラ１４２においてコンパイルし、Java(R)クラスファイル１４４で終了し得る。もしプロセッサがファイルローダおよび自動メモリ管理システムを備えたオペレーティングシステムを含むならば、このプロセスの残りの部分は動的にかつ自動的に生じ得る。しかしながら、小型の埋込システムはしばしばオペレーティングシステムを必要としないので、このプロセスの残りの部分は、プログラムのメモリイメージが外部のプラットフォームにおいて生成されなければならないという意味で、手動で行なわなければならない。Java(R)クラスファイル１４４は、リンカ１４８を通じてパーズされなければならない。リンカによって実行されるプログラムは、クラスファイルが、使用上の解決策に依存して、イリーガルなオプコード、修正コード、またはオペランドを何ら含まないことを検証し、アプリケーションと指定されたJava(R)クラスライブラリ１４５とをリンクし、アセンブリコードをＲＩＳＣ部分１４３にリンクして、ヒープ領域をセットアップし、分岐およびジャンプアドレスをセットアップし、かつメモリマップを作成する。リンカからの出力は、埋込システム１５２においてＲＯＭまたはフラッシュメモリ１５１に転送され得るメモリイメージとなる。Java(R)プロセッサを作成することの目的の大部分は、プログラマが可能な限り制約なしにJava(R)プログラミング言語を使用できるようにすることである。しかしながら、この場合、サポートされる種類のみしか使用できず、限られたランタイムライブラリしか利用可能にはならない。これらの制約は、しかしながら、Java(R)の主な機能の用途を限定するものではない。
【００２４】
Java(R)バーチャルマシン規格は２０１の命令を含むが、それらの多くがタイプ固有である。ハードウェア実現される命令の数、およびトラップされる命令の数は、用いられるＲＩＳＣアーキテクチャに依存する。他のタイプのＲＩＳＣアーキテクチャもまた、ハードウェア実現されトラップされる命令の数に影響を与え得る。以下の命令は、これらの命令が小型の埋込プロセッサにおいて重要であるとは考えられないので、この発明の好ましい実施例においてハードウェア実現されなかった：すべての「float」タイプの命令、すべての「double」タイプの命令、およびすべての「long」タイプの命令。これにより、２０１の可能なJava(R)命令のうちの約９０の命令が削除される。残りの命令のうち、６８の命令がJava(R)バーチャルマシンにおいて実現され、４３の命令がトラップされてＲＩＳＣルーチンとして実行される。トラップされＲＩＳＣルーチンとして実行される命令を以下の表１に示す。
【００２５】
【表１】
2004532466.tif 000003
【００２６】
この実現化選択により、実行される命令の約７０％がプロセッサで直接実行される一方、約３０％がトラップされてＲＩＳＣプログラムとして実行される。これらのパーセンテージは、動的な測定により導出される。
【００２７】
ＲＩＳＣアーキテクチャに対して、SMILE RISCアーキテクチャが選択された。SMILEとは、「スケーラブル・マイクロコントローラ・ライブラリ要素（scalable microcontroller library element）」の略語であり、ユニバーシティ・カレッジ・ロンドン（University College London）のアンドリュー・Ｋ・ベッツ（A.K. Betts）によって開発され、いくつかの出版物に記載されるが、それらは以下を含む。
【００２８】
Ａ・Ｋ・ベッツ、Ｉ・ボルセンス、Ｅ・シカード、Ｍ・レナーディン、およびＡ・ジョンストン、SMILE、スケーラブル・マイクロコントローラ・ライブラリ要素（A.K. Betts, I. Bolsens, E. Sicard, M. Renaudin, and A. Johnstone, SMILE, a scalable microcontroller library element）、 In Proceedings of Euromicro, 1993;
Ａ・Ｋ・ベッツ、Ｉ・ボルセンス、Ｅ・シカード、Ｍ・レナーディン、およびＡ・ジョンストン、SMILE、スケーラブル・マイクロコントローラ・ライブラリ要素（A.K. Betts, I. Bolsens, E. Sicard, M. Renaudin, and A. Johnstone, SMILE, a scalable microcontroller library element）、 Microprocessors and Microprogramming, 39:259-262, 1994;
Ａ・Ｋ・ベッツ、SMILE、スケーラブル・マイクロコントローラ・ライブラリ要素、機能、Ｖ６（A.K. Betts, SMILE, scalable microcontroller library element, function, V.6.）、Technical report, University College London, 1993。
【００２９】
SMILE規格の本質的な細部を、後にこのセクションの最後に記載する。SMILEは小型の埋込システムを対象とし、あるスケーラビリティ品質を有する。この発明のバーチャルＲＩＳＣは、図９に示すように３２レジスタアドレッシングを処理するために命令フォーマットがわずかに変更されている点を除いては、修正されたSMILE命令セットを実現する。さらに、この発明におけるステータスレジスタは、以下に図１８を参照して説明する標準のSMILE規格レジスタから修正されている。この発明のステータスレジスタは図１０に示され、読出／書込レジスタＳＲ１  １８０と、読出専用部分１８５および書込専用部分１８８を含む第２のレジスタＳＲ２とを含む。読出／書込レジスタＳＲ１  １８０は、図６を参照して上述のJava(R)フラグ１８３を含み、またＲｘ１８２およびＲｙ１８１フラグを含むが、これらは図１４を参照して後に説明する。レジスタ内の残りのビットは、図１８から図２１を参照して以下に説明するSMILE規格と同様である。さらに、いくつかの命令の範囲は拡張され、すべてのレジスタは「long」タイプとして定義され、レジスタのスケーリングパラメータは変更され、いくつかの新しい命令が追加される。新しい命令は：Java(R)トラップから戻る（Return from Java (R) trap）（ＲＪ）、ＲＩＳＣからJava(R)へ制御転送（RISC to Java (R) control transfer）（Ｒ２Ｊ）、Java(R)アライメントを左へシフト（shift Java (R) alignment left）（ＳＪＬ）、およびJava(R)アライメントを右へシフト（shift Java (R) alignment right）（ＳＪＲ）。これらの新しい命令のセマンティックを図１１から図１６を参照して以下に説明する。
【００３０】
図１１から図１６の各々に示す信号は、リセット信号２４１、クロック信号２４２、Java(R)命令レジスタ２４３、ＲＩＳＣ命令レジスタ２４４、Java(R)フラグ２４５、データバス２４６、プログラムカウンタ２４７、アドレスバス２４８、Java(R)スタックポインタ２４９および実際の時間２５０である。また、時間期間ごとの命令シーケンス２０１から２０６をも示す。
【００３１】
図１１において、最初の１０クロックサイクルが示される。リセット信号２４１が非活性化した後で、プロセッサはＲＩＳＣモードであり、これがアドレス０ｘ００００で読出した命令を実行することにより初期化する。次いでこれは一連のload命令を実行して、特別レジスタスタックポインタ、ローカル変数ベースアドレスおよびプログラムカウンタベースアドレスを初期化する。説明した命令は、リセットルーチンに対して有効である。Java(R)コールは、ローカル変数ベースアドレスおよびプログラムカウンタベースアドレスのみを初期化することを含む。さらに、定数プールベースアドレスは、もし新しいクラスが呼出されるならば初期化されなければならない。時間９５において、プロセッサは命令Ｒ２Ｊを実行するが、これはステータスレジスタにおけるビット６をセットすることと等価である。
【００３２】
命令Ｒ２Ｊが実行された後で、プロセッサは次のクロックサイクルでJava(R)モードに切換わる。制御の転送は、図１２に示すようにシームレスである。Java(R)フラグ信号２４５が時間１０５においてハイにセットされ、プログラムカウンタ２４７はすべてのJava(R)方法が０でスタートするので０にセットされることに留意されたい。アドレスバス２４８におけるアドレスは、プログラムカウンタとプログラムカウンタベースアドレスレジスタとの合計である。
【００３３】
図１３に示すように、時間２１５で、Java(R)命令「istore＜index＞」が実行される（Java(R)命令レジスタ２４３における「３６」）。この命令は、「スタックのトップ」の変数をポップして、これをアドレス「＜index＞」のローカル変数に記憶する。数「０」（データバス２４６を参照）がアドレスバス２４８においてアドレス「１８４」に記憶されるのがわかるであろう。アドレスは、ＬＶベースアドレスと、ＰＣベースアドレスと、命令に属するオペランド<index>とを加算して計算される。ここで<index>は０ｘ４であったので、アドレスは０ｘ６９＋０ｘ４Ｂ＋０ｘ０４＝０ｘＢ８＝１８４となる。さらに、現在「スタックのトップ」であるレジスタをポイントするスタックのトップポインタ２４９は、数がスタックからポップされるに従ってデクリメントされることが観察される。
【００３４】
時間２１５における「istore」の実行は、図１３に示すように２クロックサイクルを必要とする。同じ図の中で後に「istore」が時間２４５で再び実行される。このときに、メモリ内の命令のアライメントは、オプコードとオペランドとが異なったクロックサイクルで読出されることを強制する。この命令の実行はこうして３つのクロックサイクルで行なわれる。
【００３５】
図１４における時間３１５において、Java(R)制御モジュールは実現されない命令「newarray」に到達する。この命令はトラップされる。トラップシーケンスは上述のように４クロックサイクルを必要とする。３５０において、トラップシーケンスの終了時に、Java(R)フラグはローになる。プロセッサはここで、ＲＩＳＣルーチンとして命令newarrayの実行を開始する。命令は、アレイを初期化してそのアレイに対する開始アドレスを返す。ＲＩＳＣ命令であるＳＪＬおよびＳＪＲは、メモリ内のJava(R)オプコードのアライメントを処理するための移動（move）命令である。
【００３６】
図１５を参照して、Java(R)スタックポインタはポストインクリメント機能を有する。時間４３５において、ＲＩＳＣが正しいレジスタにアクセスするためにスタックポインタがデクリメントされる。次に、図１４の時間４５５において、ステータスレジスタ内のＲＸフラグがセットされる。これは、ＲＩＳＣがJava(R)スタックポインタレジスタを読出して、「スタックのトップ」を判断し、これを次の命令でＲＸレジスタとして用いることを意味する。これは、定数が「スタックのトップ」にロードされる時間４６５で起こることである。この定数は、新しく生成されたアレイのアドレスを返すＲＩＳＣルーチンからのリターン値である。この例においては、アレイは静的であり、リターン値はしたがって定数としてロードされる。
【００３７】
最後に、Java(R)スタックポインタが時間４９５において再びインクリメントされ、その後ＲＩＳＣは図１６における時間５１５において制御を再びJava(R)モジュールに返す。プロセッサは次いで、Java(R)モードで実行を継続する。
【００３８】
Smile規格
上述のように、SMILE RISC規格がこの発明を実現するために選択された。この発明において用いられるSMILE実現化の規格を以下に説明する。
【００３９】
SMILEマイクロコントローラは以下の要件を満たさなければならない：スケーラブルなサイズ、設計簡略化、適度な速度および適度なコード効率。SMILEは典型的には、タイマ、メモリおよび何らかの形態のアナログインターフェイスを含むより大きなシステムの一部である。設計は、実際的でありかつ関連性がある場合には常にＲＩＳＣ原則に従う。コンパクトな命令セット（２４命令）は以下の特徴を有する：
・均一性：すべてのタイプの動作がすべてのプロセッサレジスタおよびプロセッサレジスタのすべての組合せに対して同じ態様で適用可能であり（ステータスレジスタへのいくつかの動作を除く）、かつすべての命令が条件付けされる。
【００４０】
・完全性：命令セットは埋込制御のアプリケーション領域に対して完全である。
【００４１】
・直交性：命令セットは直交性があり、デコードされない命令は存在しない。
【００４２】
・パラメータ化およびスケーラビリティ：ユーザがコアハードウェアを修正する立場になり得るので、設計はパラメータ化される。最小の幅が４ビットであるメモリの幅に従って設計をスケールすることも可能である。メモリ幅が減じられるにつれて、機能は徐々に劣化する。最後に、命令セットの拡張はアプリケーション固有命令の追加によって可能になる。
【００４３】
以下の３つのパラメータが、SMILEの特定のバージョンを特徴付けるために特定される：
ＷＳＲ  ビットにおいて短いレジスタの幅（Width of short register in bits）  ＷＳＲ≧４
ＷＩＲ  （Width of instruction register）命令レジスタの幅  ＷＩＲ≧１２
ＮＲＥ  レジスタの数（Number of registers）  ＮＲＥ≧８
以下の制約は、上述のパラメータの選択に適用される。ＮＲＥは２の累乗である。
【００４４】
６≦ＷＩＲ−２ｌｏｇ2（ＮＲＥ）≦１０
SMILEバージョンは、ＳＭＩＬＥＷＳＲ＿ＷＩＲ＿ＮＲＥとして特定される。
【００４５】
以下のパラメータが上記から導出される：
ＷＲＦ  命令におけるレジスタフィールドの幅（Width of register field in insn）
２・ｌｏｇ2（ＮＲＥ）
ＷＣＦ  命令における条件フィールドの幅（Width of condn. Field in insn.）  ＷＩＲ−ＷＲＦ−６
ＮＩＳ  命令レジスタにおけるセグメントの数（Number of segs in insn reg）  （ＷＩＲ＋ＷＳＲ−１）／ＷＳＲ（整数切捨て）
ＷＬＲ  長いレジスタの幅（Width of long registers）  ２・ＷＳＲ
ＷＩＦ  命令フィールドの幅（Width of instruction field）  ＝３
ＷＡＦ  アドレスモードフィールドの幅（Width of address-mode fields）  ＝３
ＮＳＲ  短いレジスタの数（Number of short registers）  ２(WRD/2)／２
ＮＬＲ  長いレジスタの数（Number of long registers）  ＮＳＲ
ＮＰＡ  プロセスアドレスの数（Number of process addresses）  ２WLR
ＮＴＡ  合計アドレスの数（Number of total addresses）  ２2WLR
割込の際に、プロセッサはプロセス間で切換わる。各プロセスは、ＮＳＲ＋ＮＬＲ汎用レジスタのセットを見る。レジスタＬ［ＮＬＲ−１］はプログラムカウンタ、ＰＣとなる。
【００４６】
レジスタＬ［０］はスタックポインタ、ＳＰとなる。レジスタＳ［ＮＳＲ−１］は割込制御およびステータスレジスタ、ＳＲとなる。「ローカル」と指定されるレジスタは、割込の際にスタックされる。ローカルレジスタは、プログラムカウンタ、ＰＣ（Ｌ［ＮＬＲ−１］、ステータスレジスタ、ＳＲ（Ｓ［ＮＳＲ−１］）、およびメモリ構成レジスタ、ＭＣＲとなる。すべての他のレジスタは、「グローバル」として指定される。短いレジスタが長いレジスタと動作において組合わされた場合、またはアドレスとして用いられる場合、これらはゼロ拡張される。これにより、データメモリの第１のページ（２WSR場所）を指すために短いレジスタを用いることが可能になる。
【００４７】
以下の図に定義されるように、ステータス情報は２つのレジスタ、ＳＲ１およびＳＲ２に保持される。この情報にアクセスするために用いられるアドレッシングモードを図１８に示し以下に説明する。
【００４８】
図１８を参照して、ステータスビットは以下のとおりである：
ＳＲ１（読出／書込）、４１１：
Ｕ  ユーザビット（User bit）−専用機能なし
Ｎ  ネガティブフラグ（Negative flag）
Ｖ  オーバーフローフラグ（Overflow flag）
Ｚ  ゼロフラグ（Zero flag）
Ｃ  キャリーフラグ（Carry flag）
ＳＲ２（読出専用）、４２１：
Ｍ  ＝Ｚ＋Ｃｂａｒ（「lower or same」の条件に対する便利なアクセス）
Ｉ  ＝Ｚ＋Ｌ（「less or equal」の条件に対する便利なアクセス）
Ｌ  ＝Ｎ＾Ｖ（「less」の条件に対する便利なアクセス）
Ｅ  これがセットされた場合に割込はイネーブルされる
ＳＲ２  （書込専用）、４２２：
Ｓ  他の命令によって１にセットされるＴＢおよびＦＢ命令の結果を保持する
Ｋ  命令が明示的にクリアしない限り１にセットされる
Ｐ  命令が明示的にクリアしない限り１にセットされる
Ｅ  上に同じ
規格のこのバージョンに対して、データおよび命令メモリは同一である。プログラムカウンタをポインタとして用いるメモリアクセスは命令メモリを読出す一方、残りのすべてはデータメモリを読出しまたは書込する（ただし、したがって即定数は命令メモリ内にある）。命令メモリに対するアクセスは読出専用である。メモリは動作に依存して、shortまたはlongとしてアクセスされる。longのハイおよびロー部分は、リトルエンディアン規定に従って順序付けされる。
【００４９】
以下の表２に命令セットを示す。
【００５０】
【表２】
2004532466.tif 000004
【００５１】
ただし、略語は：
＜offset＞  符号付きオフセット、長さＷＳＲ
＜laddr＞  絶対アドレス、長さＷＬＲ
＜dladdr＞  絶対アドレス、長さ２・ＷＬＲ（ＰＣ＋ＭＣＲに対して）
＜constant＞  即定数値
｜＜arg＞｜  関数に渡すための指定されない任意のパラメータ
以下は、表２に示す命令セットの属性である。ＳＴ  ｘ，ｙは許可される命令ではない。ステータスビットＫおよびＰはすべての命令によって影響される。すべての命令は、（上述の表には示されない）条件を指定するためのさらなるフィールド＜cdn＞を付与され得る。これが指定されない場合は、デフォルト条件がＳビットをテストする。このビットは、ＴＢおよびＦＢ以外のすべての命令によってセットされ、ＴＢおよびＦＢはテストの結果に依存してこれをセットまたはクリアする。命令は常に実行され、適切なステータスビットがセットされる。しかしながら、結果は＜cdn＞が真である場合にのみ記憶される。ｙ結果は常にプリデクリメントおよびポストインクリメント命令に記憶される。ＶＳ命
令は、ジャンプアドレスが命令の後に続くことを要求されない点を除いて、ＪＳ命令と同一である。その代わりに、このアドレスはSMILEコア内のアドレステーブルからフェッチされ、適切なアドレスを検索するために用いられるインデックスはｎ、すなわちＶＳ引数である。したがってこの命令は、ジャンプのデスティネーションが命令それ自体にコード化されるサブルーチンジャンプを可能にする。
【００５２】
Ａｘオペランドに対するアドレッシングモードは以下のように定義される：
2004532466.tif 000005
Ａｙオペランドに対するアドレッシングモードは以下のように定義される：
2004532466.tif 000006
変位モードに対しては、変位はメモリ内の命令の後に続く。ポストインクリメントおよびプリデクリメントモードについては、Ｘフィールドにおけるレジスタがshortである場合にはインクリメント／デクリメント値＝１であり、それ以外は＝２である。＜dist＞は変位であり、ｙと同じ幅である。これはｙに加えられ、次いで結果はゼロ拡張され、それにより、ｙがshortである場合に、モードはメモリの第１のページのいずれかの要素にアクセスするために用い得る。引数ＡｘおよびＡｙは常にレジスタｘと同じ幅を有するものとして扱われる。もしｙアドレッシングモードが「レジスタ」でありｙがｘよりも長い場合には、ｙの最下位部分が動作のために用いられる。もしｙアドレッシングモードが「レジスタ」でありｙがｘよりも短ければ、ｙは動作のために０拡張される。ステータスレジスタアドレスは特別論理解釈を有する。
【００５３】
【表３】
2004532466.tif 000007
【００５４】
指定されない限り、ＳＫおよびＹは命令ごとに１にセットされる。
【００５５】
表３はステータス計算を定義する。ここで、Ａｘ＿resultは、Ａｘに対する計算の結果を示し、これは実際には動作に対応する条件が満たされた場合にのみ記憶される。Ａｙ＿resultは、プリデクリメント、ポストインクリメントおよび変位アドレッシングモードにおけるｙフィールドに対する有効なアドレスの計算の結果を示す。
【００５６】
【表４】
2004532466.tif 000008
【００５７】
即モード命令に対するコード、ＩＮ  Ａｘ，＜constant＞、は、ＩＮ  Ａｘ，（ＰＣ）＋の後に＜constant＞値を続けたものと同一であり、ここで後者の値はｘレジスタのサイズを有する。この文脈において、ＩＮはＬＤ｜ＳＴ｜ＡＤ｜ＳＵ｜ＡＮ｜ＯＲ｜ＥＯを意味する。ＬＤ，ＳＴ，ＡＤ，ＳＵ，ＡＮ，ＯＲ，ＥＯに対する命令フォーマットを図１８に示すが、ここで命令５０６は命令フィールドであり、ax（以前のid）５０４はｘに対するアドレッシングモードフィールドであり、ay５０３はｙに対するアドレッシングモードフィールドであり、cdn５０５は条件フィールドであり、rx、ry  ５０１、５０２はレジスタフィールドである。図１９におけるフィールドの配列は最上位の末尾にrxフィールド５０１を備える。ＢＲ，ＪＳ，ＪＩ，ＲＩ，ＶＳ，ＦＮに対してのフォーマットを図２０に示す。この場合には、フォーマット１の命令、ayおよびaxに対応するフィールドは、それぞれＳＴ５５５、「レジスタ（register）」５５２および「単純（simple）」５５３に対応するコードによって占められる。残りの３つのフィールドは、命令を指定する部分５５１および条件を指定する部分５５４に分割されなければならない。条件付け部分は、組合されたフィールドの４つの最下位のビットである。残りの命令は「操作（manipulate）」命令（ＭＡ命令）と称する。ＬＬ命令はこのカテゴリに含まれる。それらのフォーマットを図２１に示す。ＭＡ命令５８２をコード化するために利用可能であるビットの数はＷＩＲおよびＮＲＥの関数であり、ビットの最小数は５である。これは、上述の命令テーブルにおいてＴＢからＲＣへの命令のコード化を可能にするために十分である。余剰なビットは命令ＬＬをコード化するために用いられるが、ここでコード化することができるリテラルの数は余剰な利用可能であるビットの数に依存する。
【００５８】
SMILE命令のフィールドは以下のようにコード化される：
【００５９】
【表５】
2004532466.tif 000009
【００６０】
残りのフィールドは固定された幅を有さないので、以下の規格は特定の用途において利用可能であるビットの数に従って解釈しなければならない。
【００６１】
【表６】
2004532466.tif 000010
【００６２】
もしアプリケーション固有命令が実現化されるのであれば、それらは最大の数が付与されたＶＳコードのコードをとる。
【００６３】
【表７】
2004532466.tif 000011
【図面の簡単な説明】
【００６４】
【図１】Java(R)命令セットと典型的なＲＩＳＣ命令セットとの間の重複を示すベン図である。
【図２】この発明のマイクロプロセッサのアーキテクチャのブロック図である。
【図３】図２のマイクロプロセッサに対する通常のランシーケンスを示すフローチャートである。
【図４】図２のマイクロプロセッサのレジスタファイルの部分のブロック図である。
【図５】図２のマイクロプロセッサの完全なレジスタファイルのブロック図である。
【図６】図２のマイクロプロセッサの割込処理機構を示すブロック図である。
【図７】図２のマイクロプロセッサのモード転送機構を示すブロック図である。
【図８】図２のマイクロプロセッサを実現化し得るランタイムシステムを示すブロック図である。
【図９】図２のマイクロプロセッサのＲＩＳＣ部分に対する命令フォーマットを示すブロック図である。
【図１０】この発明において用いられるステータスレジスタに対するアドレッシングモードを示すブロック図である。
【図１１】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１２】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１３】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１４】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１５】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１６】図２のマイクロプロセッサの実行シーケンスの間のタイミング信号を示すタイミング図である。
【図１７】先行技術において公知である、物理コンピュータプラットフォームにおいてJava(R)プロセスを実行するためのさまざまな方法を示すブロック図である。
【図１８】SMILE RISCアーキテクチャのステータスレジスタに対するアドレッシングモードを示すブロック図である。
【図１９】この発明において用いられるSMILE RISCアーキテクチャの転送および算術論理命令に対する命令フォーマットのブロック図である。
【図２０】この発明において用いられるSMILE RISCアーキテクチャの制御命令に対する命令フォーマットのブロック図である。
【図２１】この発明において用いられるSMILE RISCアーキテクチャのＬＬ命令の命令フォーマットのブロック図である。
【図１】
2004532466.tif 000012
【図２】
2004532466.tif 000013
【図３】
2004532466.tif 000014
【図４】
2004532466.tif 000015
【図５】
2004532466.tif 000016
【図７】
2004532466.tif 000017
【図８】
2004532466.tif 000018
【図９】
2004532466.tif 000019
【図１０】
2004532466.tif 000020
【図１１】
2004532466.tif 000021
【図１２】
2004532466.tif 000022
【図１３】
2004532466.tif 000023
【図１４】
2004532466.tif 000024
【図１５】
2004532466.tif 000025
【図１６】
2004532466.tif 000026
【図１７】
2004532466.tif 000027
【図１８】
2004532466.tif 000028
【図２０】
2004532466.tif 000029
【国際公開パンフレット】
2004532466.tif 000030
2004532466.tif 000031
2004532466.tif 000032
2004532466.tif 000033
2004532466.tif 000034
2004532466.tif 000035
2004532466.tif 000036
2004532466.tif 000037
2004532466.tif 000038
2004532466.tif 000039
2004532466.tif 000040
2004532466.tif 000041
2004532466.tif 000042
2004532466.tif 000043
2004532466.tif 000044
2004532466.tif 000045
2004532466.tif 000046
2004532466.tif 000047
2004532466.tif 000048
2004532466.tif 000049
2004532466.tif 000050
2004532466.tif 000051
2004532466.tif 000052
2004532466.tif 000053
2004532466.tif 000054
2004532466.tif 000055
2004532466.tif 000056
2004532466.tif 000057
2004532466.tif 000058
2004532466.tif 000059
2004532466.tif 000060
2004532466.tif 000061
2004532466.tif 000062
2004532466.tif 000063
2004532466.tif 000064
2004532466.tif 000065
2004532466.tif 000066
2004532466.tif 000067
2004532466.tif 000068
2004532466.tif 000069
2004532466.tif 000070
2004532466.tif 000071
2004532466.tif 000072
2004532466.tif 000073
2004532466.tif 000074
【国際公開パンフレット（コレクトバージョン）】
2004532466.tif 000075
2004532466.tif 000076
【手続補正書】
【提出日】平成15年7月18日(2003.7.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１
【補正方法】変更
【補正の内容】
【請求項１】
ハードウェアにおいてバイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサであって、
ＲＩＳＣプロセッサと、
ＲＩＳＣプロセッサにおいて第１のJava(R)命令の組を実行するためのJava(R)モジュールとを含み、前記第１の命令の組はJava(R)バーチャルマシン命令セットから選択され、さらに、
ＲＩＳＣプロセッサにおいて第２のJava(R)命令の組をマイクロコードとして実行するためのＲＩＳＣモジュールを含み、前記第２の命令の組はJava(R)バーチャルマシン命令セットから選択され、前記選択された命令は高度なセマンティック内容を有し、かつJava(R)モジュールによる実行のために１クロックサイクル以上を必要とし、前記ＲＩＳＣモジュールは、割込を処理するための手段と、高度に特化された周辺機器を制御するためのフレキシブルなハードウェアインターフェイスとを含み、さらに、
両方のモジュールによって共有されるＲＩＳＣプロセッサにおけるデータパスを含み、前記データパスは、両方のモジュールによって共有されるレジスタファイルを含み、前記レジスタファイルは、Java(R)モジュールとＲＩＳＣモジュールとによって共有される複数の要素を有し、前記Java(R)モジュールは、前記複数の要素のうちの第１の部分を循環Java(R)オペランドスタックと見なし、かつ前記複数の要素のうちの残りの部分を記憶レジスタと見なし、前記ＲＩＳＣモジュールは複数の要素をレジスタファイルと見なす、マイクロプロセッサ。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１３
【補正方法】変更
【補正の内容】
【請求項１３】
ＲＩＳＣプロセッサにおいてJava(R)コードを実行するための方法であって、前記方法は、
Java(R)モジュールでプロセッサにおいて、Java(R)バーチャルマシン命令セットから選択された第１のJava(R)命令の組を実行するステップと、
ＲＩＳＣモジュールでＲＩＳＣプロセッサにおいて、第２のJava(R)命令の組をマイクロコードとして実行するステップとを含み、前記第２の組はJava(R)バーチャルマシン命令セットから選択され、かつ前記第１の命令の組よりも複雑であり、前記第２の命令の組は高度なセマンティック内容を有し、かつJava(R)モジュールによる実行のために１クロックサイクル以上を必要とし、さらに
Java(R)モジュールによる実行には過度に複雑である命令が現われた場合にプロセッサに割込むステップと、
ＲＩＳＣモジュールにおいて複雑な命令を他の命令とは別に実行するステップと、
ＲＩＳＣモジュールが複雑な命令の実行を終了した場合にJava(R)モジュールに戻るステップとを含む、方法。
【国際調査報告】
2004532466.tif 000077
2004532466.tif 000078
2004532466.tif 000079
2004532466.tif 000080
2004532466.tif 000081