JP2004522236A - 中間言語アクセラレータチップ - Google Patents
中間言語アクセラレータチップ Download PDFInfo
- Publication number
- JP2004522236A JP2004522236A JP2003519785A JP2003519785A JP2004522236A JP 2004522236 A JP2004522236 A JP 2004522236A JP 2003519785 A JP2003519785 A JP 2003519785A JP 2003519785 A JP2003519785 A JP 2003519785A JP 2004522236 A JP2004522236 A JP 2004522236A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- chip
- accelerator
- accelerator chip
- intermediate language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 229
- 238000000034 method Methods 0.000 claims description 23
- 230000008569 process Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 9
- 229910052710 silicon Inorganic materials 0.000 claims description 4
- 239000010703 silicon Substances 0.000 claims description 4
- 238000012546 transfer Methods 0.000 claims description 3
- 230000001413 cellular effect Effects 0.000 claims description 2
- 230000001133 acceleration Effects 0.000 claims 3
- 230000003068 static effect Effects 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 25
- 230000008901 benefit Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】アクセラレータチップを提供する。
【解決手段】アクセラレータチップは、プロセッサチップとメモリ(26)との間に配置することができる。アクセラレータチップは、「Java」プログラムのプロセッサチップ(24)に対する部分(22)を実行することにより、「Java」プログラムの作動を強化する。好ましい実施形態においては、アクセラレータチップは、ハードウェア変換プログラムユニット及び専用実行エンジンを含む。
【解決手段】アクセラレータチップは、プロセッサチップとメモリ(26)との間に配置することができる。アクセラレータチップは、「Java」プログラムのプロセッサチップ(24)に対する部分(22)を実行することにより、「Java」プログラムの作動を強化する。好ましい実施形態においては、アクセラレータチップは、ハードウェア変換プログラムユニット及び専用実行エンジンを含む。
Description
【技術分野】
【0001】
本発明は、「アクセラレータチップ」に関する。
【背景技術】
【0002】
「Java(登録商標)」は、サン・マイクロシステムズにより開発されたオブジェクト指向プログラミング言語である。「Java」言語は、ソースレベルにおいてもバイナリレベルにおいても、小さく、単純で、プラットフォーム間及びオペレーティングシステム間で移植可能である。このことが、「Java」プログラミング言語を「インターネット」上で非常に普及させている。
【0003】
このように「Java」がプラットフォームに依存しないこと、そしてコードがコンパクトであることは、従来のプログラミング言語に勝る「Java」の最も重要な利点である。従来のプログラミング言語では、プログラムのソースコードはコンパイラへ送られ、そこで機械コード又はプロセッサ命令へ変換される。プロセッサ命令は、システムのプロセッサに固有のものである。コードが「インテル」社製用のシステム上でコンパイルされた場合は、得られたプログラムは「インテル」を使用したシステム上でのみ実行されることになる。プログラムを別のシステム上で実行させることが必要な場合、ユーザは、元のソースコードへ戻り、新たなプロセッサのためのコンパイラを取得して、プログラムをその別のプロセッサに特有の機械コードへと再度コンパイルしなくてはならない。
【0004】
「Java」の動作はこれとは異なる。「Java」コンパイラは、「Java」プログラムを取得すると、特定プロセッサのための機械コードを生成する代わりに、バイトコードを生成する。バイトコードは、機械コードに似た命令であるが、いかなるプロセッサにも特有のものではない。「Java」プログラムを実行する場合は、バイトコード解釈プログラムは、「Java」バイトコードを取得し、それらを対応する固有のプロセッサ命令に変換して実行する。「Java」バイトコード解釈プログラムは、「Java仮想マシン(JVM)」の構成要素の一つである。
【0005】
バイトコードの形式で「Java」プログラムを有していれば、いずれか一つのシステムに固有というのではなく、「Java仮想マシン」が利用可能である限り任意のプラットフォーム及び任意のオペレーティングシステム上で実行可能となる。これにより、バイナリバイトコードファイルが複数のプラットフォーム間で実行可能となる。
【0006】
バイトコードを使用することの欠点は、実行速度である。ハードウェアによってコンパイルされハードウェア上で直接実行されるそのシステム固有のプログラムは、「Java」バイトコードよりもずっと速く実行される。これは、「Java」のバイトコードは「JAVA仮想マシン」によって処理する必要があるからである。プロセッサは、「Java」バイトコードを「Java仮想マシン」の固有命令に変換して、かつその固有命令を実行しなくてはならない。
【0007】
このような「Java」ソフトウェアの性能の低さは、特に内蔵型システム設計においては公知の問題であって、性能を上げるためにいくつかの技術が導入されてきた。しかしながら、これらの技術は望ましくない別の副作用も引き起こす。最も一般的な技術として、システム及び/又はマイクロプロセッサのクロック周波数を増大し、「Java」バイトコードをコンパイルするように「JVM」を修正し、専用「Java」マイクロプロセッサを使用することが挙げられる。
【0008】
マイクロプロセッサのクロック周波数を増大すると、「Java」ソフトウェアの実行における性能利得を含むシステム性能利得が全体的に改善される。しかし、周波数を増大することは、「Java」ソフトウェア性能の一対一の増大をもたらさない。周波数の増大は、電力消費と全体的なシステムのコストも増大させる。換言すると、マイクロプロセッサをより高い周波数でクロッキングさせることは、「Java」ソフトウェア性能を加速させる非効率的な方法である。
【0009】
コンパイル技術(例えば、ジャストインタイム「JIT」コンパイル)は、コンパイル中にソフトウェア実行速度が遅延するので不安定な性能を招く。コンパイルは、システムメモリの使用量も増大させる。その理由は、「Java」プログラムをコンパイルして記憶することは、元の「Java」プログラムを記憶するのに要するメモリ量の5倍から10倍のメモリ量を消費するからである。
【0010】
専用「Java」マイクロプロセッサは、それらの固有言語として「Java」バイトコード命令を使用し、典型的な市販マイクロプロセッサよりも良好な性能で「Java」ソフトウェアを実行するが、それらはいくつかの大きな設計上の制約を課す。専用「Java」マイクロプロセッサを使用することは、これを中心にシステムを設計することを必要とし、通常「Java」マイクロプロセッサ製造供給元からしか入手できない特殊開発ツールの利用を強要する。更に、この種の市販ソフトウェアは存在しないので、全てのオペレーティングシステムソフトウェア及びデバイスドライバを最初から特注で開発すべきである。
【発明の開示】
【発明が解決しようとする課題】
【0011】
「Java」ソフトウェア性能が改善された内蔵型システムを有することが望まれている。
【課題を解決するための手段】
【0012】
本発明の一実施形態は、少なくとも1つのメモリと、この1つのメモリと作動可能に接続されたプロセッサチップと、「アクセラレータチップ」とを有するシステムを含む。少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られる。「アクセラレータチップ」は、この少なくとも1つのメモリに対する直接アクセスを有する。「アクセラレータチップ」は、中間言語命令を使用したプログラムの少なくとも一部分を実行するようになっている。中間言語命令は、「Java」バイトコードを含み、また、他の解釈された言語の中間言語形式も含む。これらの中間言語形式には、「Multos」バイトコード、「UCSDパスカルPコード」、「C#/.NET」のための「MSIL」、及び他の命令が含まれる。本発明は、任意の中間言語に適用されるが、例示のため及び説明を明瞭にするために、以下では「Java」を参照する。
【0013】
「アクセラレータチップ」を使用することにより、従来のプロセッサチップ及びメモリユニットを有するシステムは、「Java」バイトコードのような中間言語命令を処理するために加速することができる。「アクセラレータチップ」は、好ましくは、プロセッサチップとメモリとの間の経路内に置かれ、中間言語プログラムを非常に効率的に実行することができる。好ましい実施形態においては、「アクセラレータチップ」は、少なくともいくつかの中間言語命令を変換するための変換プログラムユニットと、変換された命令を実行するための実行エンジンとを含む。複数の中間言語の実行は、1つのアクセラレータ内で同時に又は順番にサポートすることができる。例えば、一実施形態においては、アクセラレータは、「Java」バイトコード、及び、「C#/.NET」のための「MSIL」を実行する。
【0014】
本発明の別の実施形態は、「Java」バイトコードのような中間言語命令を実行するためのユニットとメモリインタフェースとを有する「アクセラレータチップ」を含む。メモリインタフェースは、少なくとも1つのメモリに対する「アクセラレータチップ」のメモリアクセスを準備し、この少なくとも1つのメモリに対する別のプロセッサチップのメモリアクセスを可能にするようになっている。そのようなメモリインタフェースを備えた「アクセラレータチップ」を有することにより、「アクセラレータチップ」をプロセッサチップとメモリユニットとの間の経路に配置することができる。
【0015】
本発明の別の実施形態は、ハードウェア変換プログラムユニットと、実行エンジンと、メモリインタフェースとを有する「アクセラレータチップ」を含む。
【0016】
本発明の別の実施形態においては、ハードウェア変換プログラムユニットに作動可能に接続された中間言語命令キャッシュが使用される。中間言語命令をキャッシュに記憶することにより、プログラムの実行速度を大きく改善することができる。
【0017】
本発明の別の実施形態は、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、ハードウェア変換プログラムユニットにより提供された固有命令を実行するようになった専用実行エンジンとを有する「アクセラレータチップ」を含む。専用実行エンジンは、ハードウェア変換プログラムユニットにより提供された命令のみを実行する。実行エンジンではなくハードウェア変換プログラムユニットが、好ましくは、変換する次の中間言語命令のアドレスを判断して専用実行エンジンに提供する。代替的に、実行エンジンが、中間言語命令に対する次のアドレスを判断することができる。
【0018】
一実施形態においては、ハードウェア変換プログラムユニットは、いくつかの中間言語命令のみを変換し、他の中間言語命令は、これらの例外的な命令を処理するための仮想マシンを作動させるプロセッサチップに対するコールバックを引き起こす。
【発明を実施するための最良の形態】
【0019】
図1は、本発明の一実施形態によるシステム20を示す。この実施形態においては、「アクセラレータチップ」22が、プロセッサチップ26とメモリユニット24との間に置かれる。プロセッサチップ26は、典型的にはメモリユニット24とインタフェースで接続している。これは特に、通信、携帯電話、及び携帯情報端末などのために使用される内蔵型システムにおいては一般的である。一実施形態においては、プロセッサチップは、様々な要素を含むシステムオンチップ(SOC)である。例えば、一実施形態においては、プロセッサチップ26は、ダイレクトメモリアクセスユニット(DMA)26a、中央処理ユニット(CPU)26b、デジタルシグナルプロセッサユニット(DSP)26c、及びローカルメモリ26dを含む。一実施形態においては、「SOC」は、「GSM」、「CDMA」、「W−CDMA」、及び「GPRS」などのような無線規格に対する携帯電話のためのベースバンドプロセッサである。
【0020】
以下に説明するように、「アクセラレータチップ」22は、好ましくは、プロセッサチップ26とメモリユニット24との間の経路内に置かれる。「アクセラレータチップ」22は、速度を改善してシステム全体の電力消費を減らすために、「Java」のようなプログラムの少なくとも一部分を加速された仕方で実行する。この実施形態においては、「アクセラレータチップ」22は、中間言語命令を実行するための実行ユニット32とメモリインタフェースユニット30とを含む。メモリインタフェースユニット30は、「アクセラレータチップ」22上の実行ユニット32が、プログラムを実行するための中間言語命令及びデータにアクセスすることを可能にする。メモリインタフェース30は、プロセッサチップ26がメモリユニット24から命令及びデータを取得することも可能にする。メモリインタフェース30は、「アクセラレータチップ」が現存するチップセット(SOC)に容易に統合されることを可能にする。アクセラレータ機能は、同一チップスタックパッケージ又は同一シリコン上に全体的又は部分的に「SOC」と共に一体化することができる。代替的に、それは、チップスタックパッケージとしてメモリ内に又は同一シリコン上に統合させることもできる。
【0021】
「アクセラレータチップ」22の実行ユニット部分32は、任意のタイプの中間言語命令実行ユニットとすることができる。例えば、一実施形態においては、専用「Java」プロセッサのような中間言語命令のための専用プロセッサが使用される。
【0022】
しかし、好ましい実施形態においては、中間言語命令実行ユニット32は、中間言語命令を実行エンジン36のための変換された命令に変換するハードウェア変換プログラムユニット34を含む。ハードウェア変換プログラムユニット34は、いくつかの中間言語命令を効率的に変換する。一実施形態においては、プロセッサチップ26は、ハードウェア変換プログラムユニットにより処理されないいくつかの中間言語命令を処理する。中間言語命令のいくつかを変換プログラムユニットに効率的に変換させ、次に、これらの変換された命令を実行エンジンにより実行させることにより、システムの速度を大きく増大させることができる。変換プログラムユニットは、マイクロコードに基づくものとすることができ、従って、「C#/.NET」に対する「Java」をこのマイクロコードと交換することを可能にする。
【0023】
仮想マシンを完全にプロセッサ26内で実行することは、いくつかの欠点を有する。仮想マシン解釈プログラムの変換部分は、極めて大きくなりがちであって、プロセッサチップ内で使用されるキャッシュよりも大きい可能性がある。これは、変換コードの一部分を外部メモリからキャッシュに繰り返し出し入れさせ、これがシステムの速度を低下させる。「アクセラレータチップ」22上の変換プログラムユニット34は、外部メモリユニットからの変換ソフトウェアの転送を必要とすることなく変換を行う。これにより、中間言語プログラムの演算速度を大きく増大させることができる。
【0024】
いくつかの中間言語命令に対するコールバックの使用は、「アクセラレータチップ」22のサイズ及び電力消費を減らすことができるので有用である。あらゆる中間言語命令を実行することができる比較的複雑な実行ユニットを有するよりも、変換プログラムユニット内で一定の中間言語命令のみを変換して、それらを実行エンジン36内で実行する方が「アクセラレータチップ」22のサイズ及び電力消費を減少させる。アクセラレータにより実行される中間言語命令は、好ましくは、最も一般的に使用される命令である。アクセラレータチップにより実行されない中間言語命令は、それらが「SoC」上で実行されるようにコールバックとして実施することができる。代替的に、一実施形態の「アクセラレータチップ」は、あらゆる中間言語命令を実行することができる。
【0025】
一実施形態の実行ユニット32内には、インタフェースユニット及びレジスタ42も示されている。好ましい実施形態においては、プロセッサユニット26は、「アクセラレータチップ」22に命令を与えるために使用される修正仮想マシンを実行する。コールバックが起った時、変換プログラムユニット34は、ユニット42内のレジスタを設定し、実行ユニットは、復元を必要とする全ての要素を復元させて、ユニット42内でそのように表示する。好ましい実施形態においては、プロセッサチップ26は、インタフェースユニット及びレジスタ42を通じて「アクセラレータチップ」22を制御する。制御が「アクセラレータチップ」に引き渡された状態で、実行ユニット32は、独立に作動する。
【0026】
好ましい実施形態においては、中間言語命令キャッシュ38が、変換プログラムユニット34に関連して使用される。中間言語命令キャッシュの使用は、システムの作動速度を更に増大させて電力を節減する。その理由は、中間言語命令がメモリユニット24からあまり頻繁に要求される必要がないからである。頻繁に使用される中間言語命令は、命令キャッシュ38内に保たれる。好ましい実施形態においては、命令キャッシュ38は、双方向連想キャッシュである。システムに同じく付随するのは、データを記憶するためのデータキャッシュ40である。
【0027】
図1には変換プログラムユニットが実行エンジンとは別個のものとして示されているが、変換プログラムユニットは、実行エンジン内に組み込むこともできる。その場合は、中央処理ユニット(CPU)又は実行エンジンは、中間言語命令を演算される固有の命令に「CPU」又は実行エンジンの主要部分により変換するためのハードウェア変換プログラムサブユニットを有する。
【0028】
中間言語命令は、好ましくは「Java」バイトコードである。尚、「Multos」バイトコード、「MSIL」、及び「BREW」などのような他の中間言語命令も同様に使用することができる。説明を簡潔にするために、以下においては「Java」が使用される実施形態について説明するが、他の中間言語命令も同様に使用することができる。
【0029】
図2は、「アクセラレータチップ」の一実施形態を示す図である。この実施形態においては、「Java」バイトコードが、命令キャッシュ52内に記憶される。これらのバイトコードは、次に「Java」変換プログラム34’に送られる。バイトコードバッファアライメントユニット50は、バイトコードを桁合わせして、それらをバイトコード復号ユニット52に供給する。好ましい実施形態においては、いくつかのバイトコードに対して命令レベルの並列処理が行われ、バイトコード復号ユニット52が1つよりも多い「Java」バイトコードを単一の変換された命令に結合する。別の状況においては、「Java」バイトコードは、必要に応じて1つよりも多い固有命令をもたらす。「Java」バイトコード復号ユニット52は、変換された命令を作り出すために命令構成ユニット54により使用される指示を発生する。好ましい実施形態においては、ユニット54内にあるか又はこれに付随するマイクロコード・ルックアップテーブルユニットは、変換された命令のベース部分を発生し、他の部分は、実行エンジン36’のプロセッサ60のレジスタファイル58内の位置の意味を追跡する「スタック及び変数マネージャ」56から提供される。一実施形態においては、プロセッサ60のレジスタファイル58は、上部8つの「Java」オペランドスタック値、16個の「Java」変数値、及び4つのスクラッチ値を記憶する。
【0030】
好ましい実施形態においては、実行エンジン36’は、「Java」変換プログラムユニットからの変換された命令を実行するためにのみ使用される。好ましい実施形態においては、プロセッサ60は、縮小命令セット計算(RISC)プロセッサであるか、又は「DSP」、又は「VLIW」、又は「CISC」プロセッサである。これらのプロセッサは、その命令セットが変換された命令を効率的に実行するように設計されるようにカスタム化又は修正することができる。必要とされない命令及び機能は、より単純な実行エンジンを作り出すために、好ましくは実行エンジンの命令セットから除去され、例えば、割込みは、好ましくは使用されない。更に、実行エンジン36’は、実行すべき次の命令の位置を直接計算する必要がない。その代わり、「Java」変換プログラムユニット34’は、変換すべき次の「Java」バイトコードのアドレスを計算することができる。プロセッサ60は、コントローラ62に対してフラグを生成し、このコントローラが、変換すべき次の「Java」バイトコードの位置を計算する。代替的に、標準的なプロセッサを使用することもできる。
【0031】
一実施形態においては、バイトコードバッファ制御ユニット72は、バイトコードのいくつのバイトが「Java」変換プログラムユニット内に受容されるかを検査し、「Java」プログラムカウンタ70を修正する。コントローラ62も、「Java」プログラムカウンタを修正することができる。アドレスユニット64は、命令キャッシュ又は外部メモリから次の命令を取得する。尚、例えば、「為された分岐」又はコールバックにより要求されるならば、コントローラ62は、「Java」変換プログラムユニットのパイプラインをクリアすることもできる。プロセッサ60からのデータも、データキャッシュ68に記憶される。
【0032】
仮想マシンがバイトコードを高速形式に修正する時、修正されるバイトコードを保持するハードウェアクセラレータ内のキャッシュ線を無効にすべきである。仮想マシンがこれとは逆の処理を行ってバイトコードを元の形式に復旧させる場合も、上記と同じことが言える。更に、コールバックは、インタフェースレジスタ内のキャッシュ無効化レジスタを使用して、命令キャッシュ内の適切なキャッシュ線を無効にする。
【0033】
いくつかの実施形態においては、高速バイトコードが使用される場合、修正された命令が命令キャッシュ52内へ再度記憶される。高速バイトコードが使用される場合は、システムは、「Java」バイトコードがどのように修正されるかを追跡しなければならず、最終的に、キャッシュと外部メモリとの間で命令の整合性を持たなければならない。
【0034】
一実施形態においては、バイトコード復号ユニットからの復号されたバイトコードは、命令構成ユニット54内の「演算論理ユニット(ALU)」と状態マシンユニットとに送られる。「ALU」は、バイトコード命令を並べ換えて状態マシンがそれらを演算するのを容易にし、メモリ参照の計算を含む様々な演算機能を実行するために設けられる。状態マシンは、ルックアップテーブルを使用して、バイトコードを固有命令に変換する。このようにして、状態マシンは、マイクロコードルックアップテーブル内における目標とする固有命令の位置を指示するアドレスを提供する。カウンタは、オペランドスタック上にいくつのエントリが配置されたかに関して計数を保ち、メモリ及びレジスタファイル内のオペランドスタックの最上部を追跡して更新するために維持される。好ましい実施形態においては、マイクロコードルックアップテーブルの出力は、レジスタファイル内で演算されるレジスタの指示で増強される。レジスタ指示は、カウンタから得られ、バイトコードから変換される。これを達成するために、レジスタファイル内のどのエントリ内にオペランド及び変数があるかというハードウェア指示を有するべきである。固有命令は、この基礎の上に構成される。代替的に、これらのレジスタ指示を直接レジスタファイルに送ることができる。
【0035】
本発明の別の実施形態においては、「スタック及び変数」マネージャは、レジスタファイル内の異なるレジスタに「スタック及び変数」値を割当てる。この別の実施形態の利点は、いくつかの場合に、「呼出しコール」により「スタック及び変数」値が切り換わることがあり、そのような切換えが、これを実行するためにいくつかの固有命令を生成するよりも「スタック及び変数」マネージャ内で一層効率的に行えることである。
【0036】
一実施形態においては、システムの作動を助けるために、いくつかの重要な値をハードウェアクセラレータ内に記憶させることができる。ハードウェアクセラレータ内に記憶されたこれらの値は、特に「Java」スタックの一部分を記憶するために実行エンジンのレジスタファイルが使用される場合は、システムの作動を改善することを助ける。
【0037】
ハードウェア変換プログラムユニットは、好ましくは、スタック値の最上部の指示を記憶する。このスタック値の最上部は、メモリからのスタック値の読込みを助ける。スタック値の最上部は、命令がスタックベースの命令からレジスタベースの命令に変換される時に更新される。命令レベル並列処理が使用される場合は、単一のレジスタベースの命令の一部である各スタックベースの命令は、「Java」スタックに対するその効果に関して評価される必要がある。
【0038】
一実施形態においては、オペランドスタック深度値が、ハードウェアクセラレータ内に維持される。このオペランドスタック深度は、実行エンジンレジスタファイル内におけるオペランドスタックの動的深度を表す。従って、8つのスタック値がレジスタファイル内に記憶されるとすれば、スタック深度指示器の読みは「8」であることになる。レジスタファイル内のスタックの深さを知ることは、レジスタファイルを出入りするスタック値の読込み及び記憶を助ける。
【0039】
更に、フレームスタックは、それ自身のアンダーフロー/オーバーフローと、フレームスタック上にいくつのフレームがあるかを表すフレーム深度指示と共にハードウェア内に維持することができる。フレームスタックは、独立したスタックとするか、又は「CPU」のレジスタファイル内に組み込むことができる。好ましい実施形態においては、フレームスタック及びオペランドスタックは、「CPU」の同一レジスタファイル内とすることができる。別の実施形態においては、フレームスタック及びオペランドスタックは、異なるエンティティである。ローカル変数もまた、オペランドスタック及び/又はフレームスタックを同じく有する「CPU」レジスタファイルの別の区域内に記憶されるであろう。
【0040】
好ましい実施形態においては、最小スタック深度値と最大スタック深度値とは、ハードウェア変換プログラムユニットにより維持される。スタック深度値は、要求された最大及び最小スタック深度と比較される。スタック値が最小値よりも低くなる時、ハードウェア変換プログラムユニットは、メモリからレジスタファイル内へスタック値を読み込むために読込み命令を構成する。スタック深度が最大値よりも高くなる時、ハードウェア変換プログラムユニットは、スタック値を再度メモリに記憶させるために記憶命令を構成する。
【0041】
一実施形態においては、実行エンジンレジスタファイル内のオペランドスタックの少なくとも最上部の8つのエントリは、リングバッファとして作動し、このリングバッファは、アクセラレータ内に維持されて、オーバーフロー/アンダーフローユニットと作動可能に接続される。
【0042】
ハードウェア変換プログラムユニットは、好ましくは、実行エンジンのレジスタファイル内に記憶されたオペランド及び変数の指示も記憶する。これらの指示は、ハードウェアクセラレータが、入ってくるスタックベースの命令から変換されたレジスタベースの命令又は固有命令を構成することを可能にする。
【0043】
ハードウェア変換プログラムユニットは、好ましくは、変数ベース及びオペランドベースの指示もメモリ内に記憶する。これは、実行エンジンのレジスタファイルとメモリとの間に変数及びオペランドを読み込んで記憶する命令を構成することを可能にする。例えば、変数(Var)がレジスタファイル内で利用可能でない時には、ハードウェアが読込み命令を発する。ハードウェアは、「Var」のメモリ位置を生成するために、「Var」数に4を掛けて「Var」ベースを加えるようになっている。生成された命令は、「Var」ベースが一時的に固有な実行エンジンレジスタ内にあるという知識に基づくものである。4を掛けた「Var」数は、構成されている固有命令の即値フィールドとして利用可能にすることができ、それは、アドレスが「Var」ベースに対するポインタと即値オフセットとを加えたものを保持する一時的レジスタの内容であるメモリアクセス命令とすることができる。代替的に、「Var」の最終的なメモリ位置は、実行エンジンにより命令として読まれ、次に「Var」に読み込むことができる。
【0044】
一実施形態においては、ハードウェア変換プログラムユニットは、変数が「Java」バイトコードの実行により更新された時、変更されたものとしてこの変数にマークを付ける。ハードウェアクセラレータは、変更されたものとしてマークを付された変数を、いくつかのバイトコードに対してシステムメモリにコピーすることができる。
【0045】
一実施形態においては、ハードウェア変換プログラムユニットは、固有命令を構成し、固有命令のオペランドは、少なくとも2つの固有実行エンジンレジスタファイル参照を含み、レジスタファイル内容は、オペランドスタック及び変数のためのデータである。
【0046】
一実施形態においては、スタック及び変数レジスタマネージャは、実行エンジンのレジスタファイルの変数及びスタックレジスタ内に何が記憶されているかの指示を維持する。この情報は、次に、「Java」バイトコードの復号化及び適切な固有命令の生成を助けるために、復号段とマイクロコード段とに供給される。
【0047】
好ましい実施形態においては、「スタック及び変数」レジスタマネージャの機能の1つは、スタックの最上部の指示を維持することである。すなわち、例えば、レジスタR1〜R4が、メモリから又はバイトコードを実行することにより最上部の4つのスタック値を記憶する場合、データがレジスタファイルに対して読込み及び読出しされる時に、スタックの最上部が変化することになる。従って、レジスタR2がレジスタファイル内のスタックの最上部となり、レジスタR1がスタックの底部となることができる。新しいデータがレジスタファイル内のスタックに読込まれる場合は、そのデータは、レジスタR3内に読込まれることになり、これがスタックの新たな最上部となって、スタックの底部はR1のままである。レジスタファイル内のスタックに更に2つの項目が読込まれる場合は、レジスタファイル内のスタックの新たな最上部がR1となり、初めのR1は、アクセラレータのオーバーフロー/アンダーフローユニットによりメモリに書き戻しされ、R2は、レジスタファイル内の部分スタックの底部になることになる。
【0048】
図3は、「アクセラレータチップ」の一実施例内の主要機能ユニットを示すと共に、それが典型的な無線受話器デザイン内にインタフェースする方法を示している。「アクセラレータチップ」は、ホストマイクロプロセッサ(又は、内蔵マイクロプロセッサを含む「SOC」)とシステム「SRAM」及び/又は「フラッシュ」メモリとの間に統合される。ホストマイクロプロセッサ及びシステムソフトウェアの観点からは、システム「SRAM」及び/又は「フラッシュ」メモリは、アクセラレータチップの背後にある。
【0049】
「アクセラレータチップ」は、システム「SRAM」及び/又は「フラッシュ」メモリに直接アクセスすることができる。ホストマイクロプロセッサ(又は、「SOC」内のマイクロプロセッサ)は、「アクセラレータチップ」を通じてシステム「SRAM」又は「フラッシュ」メモリに透過的にアクセスする(「システムメモリは、アクセラレータの背後にある」)。
【0050】
「アクセラレータチップ」は、その片方のソフトウェアカーネル内のモニタを通じて、ホストマイクロプロセッサと同期させるのが好ましい。ソフトウェアカーネル(又は、プロセッサチップ)は、「アクセラレータチップ」内の特定レジスタに「Java」バイトコード命令が位置するアドレスを読込み、次に、実行を始めるために制御をアクセラレータチップに移す。次に、ソフトウェアカーネルは、それがコールバック機構を使用してバイトコードを処理することが必要であることを検知するまで、又は、全てのバイトコードが実行されてしまうまで、ホストマイクロプロセッサ上で実行されるポーリングループ内で実行モード状態の読込みを待機する。ポーリングループは、「アクセラレータチップ」と「SOC」上の汎用入出力ピンとの間に電気的に接続された「実行モード」ピンを読み取ることにより実行することができる。代替的に、「実行モード」の同じ状態は、アクセラレータチップ内のレジスタを読み取ることによりポーリングすることができる。これらのいずれの場合も、「アクセラレータチップ」は、コールバック処理が完了するまで、又はより多くのバイトコードを実行するように指令されるまで自動的に節電スリープ状態に入る。
【0051】
「アクセラレータチップ」は、メモリからのオペランドを含む「Java」バイトコード全体をその内部キャッシュを通じて取り込み、その命令を実行する。キャッシュ内にある命令及びデータは、システムメモリのトランザクションが回避されたので、低減された電力消費でより高速に実行される。バイトコードストリームは、命令レベル並列処理(ILP)に基づく最適化プログラムを使用して、変換される前にバッファに入れられて分析される。ローカルにキャッシュされた「Java」データと結合された「ILP」最適化プログラムは、各サイクルにとって可能な最高速の実行をもたらす。
【0052】
「アクセラレータチップ」は、別々の独立「Java」バイトコード実行エンジンであるから、ホストマイクロプロセッサがそのポーリングループにおいて待機するか、又は割込みを処理するいずれの間も同時に処理を行う。更に、「アクセラレータチップ」は、ホストマイクロプロセッサがその背後のシステムメモリにアクセスする必要があり、「アクセラレータチップ」が同時にシステムメモリにアクセスすることを欲する場合の間だけ停止される。例えば、ホストマイクロプロセッサが割込みサービスルーチン又はそれ自身のキャッシュ内からのソフトウェアを実行しているとすれば、「アクセラレータチップ」は、同時にバイトコードを実行することができる。同様に、「Java」バイトコード命令及びデータが「アクセラレータチップ」の内部キャッシュ内にある場合、アクセラレータは、ホストマイクロプロセッサがその背後のシステムメモリにアクセスすることを必要とする場合でも、バイトコードを同時に実行することができる。
【0053】
図4Aは,一実施形態の「アクセラレータチップ」の2つの主要モードであるスリープ及び実行(「Java」バイトコード命令を実行すること)を示す状態マシンの図である。「アクセラレータチップ」は、その実行状態とスリープ状態との間で自動的に遷移する。「アクセラレータチップ」は、そのスリープ状態において、「Java」エンジンコア及びこれに付随する構成要素がアイドル状態にあるから最小限の電力しか消費しない。
【0054】
図4Bは、本発明のシステムの別の実施形態の、更に待機モードを含むアクセラレータチップの状態を示す図である。待機モードは、コールバック中に使用される。電力を減らすために、「Java」レジスタに対するクロックだけがオンにされる。待機モードにおいては、プロセッサチップは、コールバックを引き起こす「Java」バイトコードを処理するために仮想マシンを実行している。アクセラレータチップは、待機モードにあるから、全ての「Java」レジスタをリセットすることなく迅速に復帰することができる。
【0055】
図5は、図4Aの状態マシンの各モードにおいて、どの構成要素がアクティブで、どの構成要素がアイドルかを示す。「JVM」が実行されていない時、又は追加的節電が適切であるとシステムが判断した時に、「アクセラレータチップ」は、自動的にそのスリープモードに入る。
【0056】
「アクセラレータチップ」は、作動されると、下記イベントのいずれかが起るまで実行される。
1.「Java」バイトコード命令が、ソフトウェアコールバック機構を通じてホストマイクロプロセッサにより実行されることが必要な時。
2.ホストマイクロプロセッサが、典型的には割込み及び例外処理中にのみ起る、システムメモリへのアクセスを必要とする時。
3.ホストマイクロプロセッサが、「アクセラレータチップ」をそのスリープモードにさせることによりアクセラレータチップを停止させる時。
【0057】
「アクセラレータチップ」は、デフォルトにより使用不可にされて(そのスリープモードにおいて)全ての固有常駐ソフトウェアに対して透過的であり、修正「Java」仮想マシンがそれを初期化して「Java」バイトコード命令を実行するためにそれを呼び出す時に使用可能にされる。アクセラレータチップがそのスリープモードにある時、ホストマイクロプロセッサから「SRAM」又は「フラッシュ」メモリへのアクセスは、「アクセラレータチップ」を通過するだけである。
【0058】
「アクセラレータチップ」は、「SRAM」及び/又は「フラッシュ」メモリコントローラにおける典型的な方式でプログラムする必要があるそのメモリインタフェース回路の一体的部分としてメモリコントローラを含む。実際のプログラミングは、各デバイスの固有アーキテクチャ及びメモリマップに従う特定のメモリアドレスセットを有するソフトウェアカーネル内で行われる。修正「Java」仮想マシンの初期化シーケンスの一部として、「アクセラレータチップ」内のレジスタには適切な情報が読込まれる。「Java」ソフトウェアを実行するために、システムがその「JVM」を呼び出す時、それは、最初に「Java」バイトコードの開始のアドレスを「アクセラレータチップ」の「Javaプログラムカウンタ(JP)」内に読み込む。次に、カーネルは、ホストマイクロプロセッサ上で実行を始め、「アクセラレータチップ」が「Java」バイトコードの実行を完了したことを合図する時を見つけるためにそれをモニタする。完了すると、「アクセラレータチップ」は、そのスリープモードに入り、そのカーネルは、「JVM」及び/又はシステムソフトウェアに対する制御に戻る。
【0059】
「アクセラレータチップ」は、割込み又は例外処理を邪魔することはなく、何らの待ち時間を課すこともない。「アクセラレータチップ」が処理を行っている間に割込み又は例外が起った時、ホストマイクロプロセッサは、「アクセラレータチップ」に影響を及ぼすことなく、適切なハンドラルーチンに迂回する。ホストマイクロプロセッサは、ハンドラから復帰した時、ソフトウェアカーネルに実行を戻し、次に「アクセラレータチップ」のモニタを再開する。ホストマイクロプロセッサがメモリバスに取って代わった時でさえも、「アクセラレータチップ」は、その内部キャッシュから「Java」バイトコードを実行し続けることができ、これは、システムメモリバスの競合が起らぬ限り続くことができる。競合が起きた場合は、アクセラレータを停止させるために停止信号をアサートすることができる。
【0060】
「アクセラレータチップ」は、プログラム可能なベースから一定のオフセットにおいて、そのメモリマップ内に位置するいくつかの共用レジスタを有する。これらのレジスタは、その作動を制御し、一般的な使用のためにあるのではなく、むしろ「ソフトウェアカーネル」内のコードにより処理される。
【0061】
図3を参照すると、「アクセラレータチップ」は、ホストマイクロプロセッサ(又は、内蔵マイクロプロセッサを含む「SOC」)とシステム「SRAM」及び/又は「フラッシュ」メモリとの間に置かれていることが分る。全てのシステムメモリは、ホストマイクロプロセッサによりアクセスされ、従って「アクセラレータチップ」を通過する。一実施形態においては、全てのシステムソフトウェアに対して十分に透過的ではあるが、約4ナノ秒の遅延が各方向に対して導入され、各システムメモリトランザクションに対する合計約8ナノ秒の遅延に寄与する。
【0062】
図6は、「アクセラレータチップ」上の「Java」実行ユニットにより実行される「Java」バイトコードのリスト、及びプロセッサチップ上で実行される修正された「JVM」に対するコールバックを引き起こすバイトコードのリストの一実施形態を示す表である。尚、最も一般的なバイトコードは、「アクセラレータチップ」上で実行される。他のより一般的でなくより複雑なバイトコードは、プロセッサチップ上のソフトウェア内で実行される。「アクセラレータチップ」からいくつかの「Java」バイトコードを例外することにより、「アクセラレータチップ」の複雑性及び電力消費を低減させることができる。
【0063】
図7は、典型的なメモリ編成と、各タイプのメモリに記憶することができるソフトウェア及びデータのタイプとを示す。以下の表に列記された項目を配置することは、「Java」バイトコード命令を実行するために必要なバイトコードと対応するデータ項目とにアクセラレータチップがアクセスすることを可能にする。
【0064】
ホストマイクロプロセッサ上で作動するオペレーティングシステムは、アクセラレータチップがその「Java」処理の一部としてアクセスすることになるメモリの全領域に対して実際のメモリと仮想メモリが等しくなるように設定されるのが好ましい。
【0065】
「Java」仮想マシンとの統合は、好ましくは、以下に記す変更を通じて達成される。
1.「JVM」自身の初期化シーケンス内への修正された初期化コードの挿入。
2.「Java」バイトコード解釈プログラムの除去、及び、修正されたソフトウェアカーネルのインストール。これは、アクセラレータチップハードウェア内で直接に実行されない「Java」バイトコード命令に対する機能性を、アクセラレータチップソフトウェアカーネルにより使用可能にされたコールバック機構内に再び向けることを含む。更に、高速バイトコードに対しては、「JVM」がバイトコードをその高速形に修正する時、修正(高速化)されるバイトコードを保持した「ハードウェアクセラレータ」命令キャッシュ内のキャッシュ線は、無効化されるべきである。これは、「JVM」がこの処理を逆にしてバイトコードをその元の形に戻す場合にも言えることである。アクセラレータチップとそのソフトウェアカーネルとは、好ましくは、これらの状況を処理するために「アプリケーションプログラミングインタフェース(API)」呼出しを準備する。
3.ガーベッジコレクタを適応させること。「JVM」のガーベッジコレクタは、キャッシュ干渉問題を回避するために、「Javaヒープ」又は「Javaスタック」を走査する前にアクセラレータチップ内のデータキャッシュを無効にする。これは、好ましくは、「ソフトウェアカーネル」内の「API」機能を使用して達成される。
【0066】
「アクセラレータチップ」の一実施形態は、好ましくは、非同期「SRAM」及び/又はページモード「フラッシュ」メモリを含む非同期「フラッシュ」メモリを有するように設計された任意のシステムとインタフェースで接続する。そのような状況においては、「アクセラレータチップ」は、「SRAM」又は「フラッシュ」装置のようなシステムの方を向いているので容易に統合する。統合のために他の調節は何ら必要ではない。「アクセラレータチップ」は、それ自身のメモリコントローラを有し、それに応じて内部プログラムカウンタ(IPC)を通じて「アクセラレータの背後にある」メモリに直接アクセスする能力を有する。任意のプログラムカウンタの場合と同様に、「JP」は、取り込まれて実行される次の命令のアドレスを指し示す。これは、「アクセラレータチップ」がホストマイクロプロセッサと非同期かつ同時に作動することを可能にする。
【0067】
図8は、本発明の「アクセラレータチップ」の一例のためのアクセラレータピン機能の一例を示す表である。
【0068】
好ましい実施形態においては、プロセッサチップに達するピンとメモリに達するピンとは、バイパスモードに対してチップを通じた遅延を最小限に保つために、互いに近くに置かれる。
【0069】
図9は、「SOC」のようなプロセッサチップとメモリとの間に置かれたハードウェアクセラレータの一実施形態における異なるアクセス時間及びバス速度に対する待機状態を示す図である。尚、いくつかの場合は、プロセッサチップとメモリとの間の経路内にハードウェアクセラレータを導入することにより、アクセス時間に対して追加的な待機状態を加える必要がある。
【0070】
図10は、本発明の一実施形態によるハードウェアクセラレータの図である。ハードウェアクセラレータ100は、バイパス論理102を含む。これは、チップインタフェース104及びメモリインタフェース106上でシステムに接続する。メモリコントローラ108は、システムオンチップとハードウェアクセラレータとの間でメッセージを送るために使用されるインタフェースレジスタ110に相互接続される。メモリコントローラ108を通じて命令キャッシュ112に達する命令とデータキャッシュ114からのデータとは、メモリコントローラ108へ送られる。命令キャッシュ112からの中間言語命令は、ハードウェア変換プログラム114へ送られる。ハードウェア変換プログラム114は、中間言語命令を固有命令に変換し、変換された命令を実行エンジン116へ送る。この実施形態においては、実行エンジン116は、レジスタ読込み段116A、実行段116B、及びデータキャッシュ段116Cに分解される。
【0071】
図11は、「SRAM」メモリとインタフェースで接続するために使用されるハードウェアクセラレータ120の図である。一実施形態においては、「SRAM」メモリと「SDRAM」メモリとが大きく異なる可能性があるので、各タイプのメモリに対して専用のハードウェアクセラレータがある。図11は、命令キャッシュ、ハードウェアクセラレータ、データキャッシュ、実行エンジン、ハードウェアクセラレータの内部クロックが外部クロックと同期されるように内部クロックを設定するために使用される位相固定ループ(PLL)、インタフェースレジスタ、及び、「SRAM」スレーブインタフェース及び「SRAM」マスタインタフェースを含むハードウェアクセラレータを示す。「SRAM」スレーブインタフェースは、システムオンチップと相互接続し、「SRAM」マスタインタフェースは、メモリと相互接続する。図11に示す図は、システムオンチップとメモリとの間の接続が別々であり、別々のインタフェースを処理するという事実を強調している。従って、ハードウェアクセラレータとシステムオンチップとの相互作用、及びハードウェアクセラレータとメモリとの相互作用は、独立のオペレーションに対して同時に為されることが可能である。図示のシステムオンチップとハードウェアクセラレータとの相互接続は、アドレス線、データ線、バイト選択線、書込み使用可能化線、読込み使用可能化線、チップ選択線等々である。尚、非同期フラッシュピンは、プロセッサチップと非同期フラッシュユニットとの間に直接進むことができる。ハードウェアクセラレータチップは、システムオンチップのチップ選択メモリアドレス指定能力を変更することができる。一実施形態においては、任意選択のシステムオンチップメモリが、「SRAM」スレーブインタフェースに記憶される。ホストプロセッサは、ハードウェアクセラレータのインタフェースレジスタにより設定される実行モードを検査するために待機ループに入る。システムオンチップは、「SRAM」スレーブインタフェースからレジスタループ検査プログラムを取得する。ハードウェアクセラレータ120は、外部メモリ内のループプログラムにアクセスする「SOC」により割込まれることはなく、従って、外部メモリに記憶された中間言語プログラムをより効率的に作動させることができる。尚、ハードウェアクセラレータ120は、「JTAG」試験ユニットを含むことができる。
【0072】
図12は、ハードウェアクセラレータ130が「SDRAM」スレーブインタフェースと「SDRAM」マスタインタフェースとを含む本発明のシステムの一実施形態を示す。「SDRAM」に対する相互接続のための制御線は、「SRAM」に対する相互接続のための制御線と大きく異なり、それによって一実施形態内に2つの異なるバージョンのハードウェアクセラレータを有することに意味がある。「SDRAM」のための追加的な線は、行選択線、列選択線、及び書込み使用可能化線を含む。
【0073】
図13は、ホストハードウェアクセラレータ140の図を示す。この実施形態は、プロセッサチップからの16ビット相互接続と、ハードウェアクセラレータ140とメモリとの間の32ビット相互接続とを有する。メモリとハードウェアクセラレータとの間の相互接続は、プロセッサとメモリとの間の相互接続よりも高速度で作動することになる。プロセッサチップとメモリとの間でデータをバッファに入れることができるように、ホストアクセラレータ140内にはホストバーストバッファが含まれる。
【0074】
図14は、ハードウェアクセラレータ150が、グラフィックアクセラレータエンジン152と、「LCD」コントローラ及びディスプレイバッファ154とを含む実施形態を示す。これは、ハードウェアクセラレータ150が直接方式で「LCD」ディスプレイ156と対話することを可能にする。「Java」規格は、いくつかのライブラリを含む。これらのライブラリは、典型的には、装置が「Java」コード以外の異なるタイプのコードを実施するためにそれらを実行することができるように実装される。1つの新しいタイプのライブラリは、「LCD」ディスプレイのためのグラフィックを含む。例えば、低レベルイベントを処理して「LCD」ディスプレイ上に描くための図形呼出しを発する必要があるアプリケーションを書き込むために、キャンバスアプリケーションが使用される。そのようなアプリケーションは、典型的には、ゲームなどのために使用されるであろう。図14の実施形態においては、グラフィックアクセラレータエンジン152と、「LCD」制御及びディスプレイバッファエンジン154とがハードウェアクセラレータ150内に置かれるから、システムの制御は、プロセッサチップに渡される必要はない。グラフィック要素を作動させる場合はいつでも、従来のプログラムではなく「Java」プログラムが使用される。「LCD」ディスプレイ156を更新するためには、メモリに記憶された「Java」プログラムが使用される。一実施形態においては、「Java」プログラムは、そのプログラムが「LCD」グラフィックアクセラレータエンジン152に対するものであることを判断するために、ハードウェアクセラレータ150により使用される識別子バイトコードを使用する。その機能が「SOC」上で利用可能である場合は、「LCD」コントローラを同一チップ上に持つことは常に必要であるわけではない。この場合、グラフィックのみが依然としてアクセラレータ上に留まるであろう。グラフィックは、二次元グラフィック、及び三次元グラフィックに対するものとすることができる。更に、チップ上にビデオカメラインタフェースを含ませることもできる。このカメラインタフェースユニットは、ビデオユニットとインタフェースで接続することになり、そこで、ビデオ画像サイズをスケーリングすることができ、及び/又は色空間変換を適用することができる。アクセラレータチップ内にいくつかのレジスタを設定することにより、ディスプレイ上にある一定の配合及びウインドウ効果を提供するために映像とグラフィックとを融合させることが可能である。グラフィックユニットは、それ自身のフレームバッファと任意選択的に3D用の「Z」バッファとを有するであろう。効率を良くするために、アクセラレータチップ内にグラフィックフレームバッファを設け、システム「SRAM」又はシステム「SDRAM」内に「Z」バッファを設けることが最適であると考えられる。
【0075】
図15は、アクセラレータチップ162と、フラッシュチップ164と、「SRAM」チップ166とを含むチップスタックパッケージ160の図である。パッケージ内にアクセラレータチップ162とメモリチップ164及び166とを設けることにより、アクセラレータチップとメモリとを相互接続するためにパッケージに設ける必要のあるピンの数を減らすことができる。図15の例においては、ピンの数を減らしたことにより、一組のピンをバスデータ及び補助メモリ位置に対するアドレスのために使用することが可能になる。フラッシュメモリ及び「SRAM」チップと同じパッケージ上にアクセラレータチップを置くことにより、システムに対するメモリアクセス時間も短縮される。
【0076】
図16〜19は、本発明の一実施形態によるアクセラレータエンジンが、変換された中間言語命令、特に「Java」バイトコードを効率的に実行するように、アクセラレータエンジンに加えるのに有用な新たな命令を示す図である。図16〜19の実施形態は、ハードウェアクセラレータチップ内で使用することができるが、ハードウェア変換プログラム及び実行エンジンを使用した他のシステムと共に使用することもできる。
【0077】
図16Aは、変換された命令の演算を速める実行エンジンのための新たな命令を示す。これらの変換された命令を有することにより、変換された命令を実行する実行エンジンの作動を改善することができる。命令「SGTLT0」及び「SGTLT0U」は、レジスタに−1、0、又は1を次に書き込むために、前の演算における加算器/減算器のC、N、及びZ出力を使用する。これらの演算は、「Java」バイトコード「LCMP」の効率を改善する。境界検査演算(BNDCK)とレジスタヌル検査を備えた読込み及び記憶インデックス命令とは、インデックス付きアレーアクセスを行う「Java」バイトコードのための変換された命令の演算を速める。
【0078】
図16Bは、命令「SGTLT0」の演算を示す。最後の減算又は加算が1のZビットを生じた時、レジスタ内への出力は0である。前のZビットが0でありかつNビットが0である時、レジスタ内への出力は1である。Zビットが0であありかつNビットが1である時、レジスタ内への出力は−1である。
【0079】
図16Cは、符号なし演算が使用される命令「SGTLT0U」を示す。この例においては、Z値が高い場合は、レジスタに対する出力は0である。Z値が低い場合は、繰り上がりは0であり、レジスタに対する出力は−1である。Z値が低くかつ繰り上がりが1である場合は、レジスタに対する出力は1である。
【0080】
図16Dは、境界検査命令「BNDCK」を示す。この命令においては、インデックスがアレーサイズ値から減算される。インデックスがアレーサイズよりも大きい場合は、繰り上がりは1であり、例外が生成されることになる。インデックスがアレーサイズよりも小さい場合は、繰り上がりは0であり、例外は生じないことになる。
【0081】
図16Eは、インデックス演算に加えてヌル値に関してレジスタを検査するインデックス読込み及びインデックス記憶を含むインデックス付き命令を示す。この場合は、アレーポインタレジスタが0であるならば、例外が生じる。アレーポインタが0でないならば、例外は生じない。
【0082】
図17は、図16Aの新たな命令に対するシステムのいくつかの詳細を実施する実行エンジンの一例を示す。インデックス付き読込みに対しては、ゼロ検査論理170が、レジスタHのようなレジスタに記憶されたインデックスの値がゼロであるか否かを検査する。ゼロ検査使用可能化が設定されている場合(すなわち、命令が4つの命令「LDXNC」、「LWXNC」、「STXNC」、又は「SWXNC」の1つである場合)、ゼロ検査使用可能化は高く設定される。尚、読込みに対する他の演算は、この演算と同時に行うことができる。ゼロ検査論理170は、アレーに対するポインタが、アレーポインタに対するヌル値を表すゼロではないことを保証する。ポインタが正しく初期化された時は、値は0ではなく、従って値が0である時は、例外が生成される。
【0083】
加算器/減算器ユニット172は、結果を生み出し、また、N、Z、及びC論理174へ送られるN、Z、及びCビットも生み出す。境界検査の場合について言えば、境界検査論理176は、インデックスがアレーのサイズ内であるか否かを検査する。境界検査においては、インデックス値はアレーサイズから減算されて、インデックス値は1つのレジスタに記憶され、アレー値は別のレジスタに記憶される。繰り上がりが存在する場合は、これは例外を表しており、境界検査論理176は、境界検査が使用可能にされた時に範囲外インデックス例外を発生する。
【0084】
論理ユニット178は、新しい論理180を含む。この新しい論理180は、「SGTLT0」命令及び「SGTLT0U」命令を実行する。論理180は、前の減算又は加算からのN及びZ繰り上がりビットを使用する。図16A及び16Cに示すように、論理160は、1、0、又は−1を発生し、これらは次にマルチプレクサ(mux)182へ送られる。「SGTLT0」又は「SGTLT0U」命令が使用される時、論理180からの値は、mux182により選択される。
【0085】
図18Aは、「Java」バイトコード命令「IALOAD」を示す。スタックの上部2つのエントリは、インデックス及びアレー参照であって、これらは、アレー内へのインデックスオフセットにより指示された単一の値に変換される。図18Bに示すような従来の命令を使用して、アレー参照は、ヌルポインタ例外が発生されることになるか否かを調べるために0と比較される必要がある。次に、インデックスがアレー境界の外側にあるか否かを判断するために、分岐検査が行われる。インデックス値アドレスが計算され、次に、読込まれる。図18Cにおいては、新しい命令を使用して、「LWXNC」参照がアレーポインタを包含するレジスタに対してゼロ検査を行う。境界検査演算は、インデックスがアレーサイズ内であることを確実にする。その後に、アドレス及び読込みを判断するための加算が行われる。
【0086】
図19Aは、「LCMP」命令の演算を示しており、スタックの上部2つの値は、第1の値に対する2つのワードを含む。スタック上の第2の2つの値は、値1ワード1及び2を含んでおり、値1が値2と等しいか、値1が値2よりも大きいか、又は値1が値2よりも小さいかに基づいて整数結果が発生される。
【0087】
図19Bは、「Java」の「LCMP」命令の従来的な命令の実施を示す。尚、要求された時間を有する多数の分岐が必要とされる。
【0088】
図19Cにおいては、「SGTLT0U」命令の存在がコードの演算を単純化し、本発明のシステムの速度を速めることができる。
【0089】
ハードウェア変換プログラムは、上述の新たな命令内への変換のために使用可能にされる。これは、「Java」バイトコードからの変換をより効率的にする。
【0090】
本発明の「アクセラレータチップ」は、いくつかの利点を有する。この「アクセラレータチップ」は、ホストマイクロプロセッサがその割込みを行っている時、「Java」バイトコード命令を実行するために、システムメモリに直接アクセスし、「Java」ソフトウェア実行の速度を速めるのに貢献する。アクセラレータチップは、バイトコードを実行し、それらをコンパイルしないので、それは、追加的なメモリ要件を課さず、アヘッドオブタイム(AOT)又はジャストインタイム(JIT)コンパイル技術を使用するよりも廉価で効率のよい解決法となる。システムレベルのエネルギ使用は、より速い実行時間、減少されたメモリアクセス、及びアクセラレータチップ内に統合されたパワーマネージメントの組合せにより最小化される。バイトコードを実行していない時、「アクセラレータチップ」は、自動的にその節電スリープモードになる。アクセラレータチップは、データローカリゼーションを使用し、命令レベル並列処理(ILP)最適化は、最大の性能を達成する。アクセラレータチップ内に局所的に保持されたデータは、好ましくは、「Java」スタック上の最上部エントリと、「ILP」最適化の効力を増大させてシステムメモリに対するアクセスを減少させるローカル変数とを含む。これらの技術により、高速かつ一貫した実行が行われ、システムのエネルギ使用が減少する。これは、バイトコードをデータとして取り扱い、従って、それらの命令キャッシュからほとんど又は全く利益を導き出さないソフトウェア解釈に依存する典型的な市販マイクロプロセッサとは対照的である。また、「Java」バイトコードとそれらに付随するオペランドとは長さが変化するので、典型的なソフトウェアバイトコード解釈プログラムは、各「Java」バイトコード取出しサイクル、つまり性能及び電力消費に関して非効率な処理を完了するために、メモリからいくつかのデータアクセスを行わなくてはならない。「Java仮想マシン(JVM)」は、スタックベースマシンであって、ほとんどのソフトウェア解釈プログラムは、「Java」スタック全体をシステムメモリ内に置いており、各「Java」バイトコード命令を実行するためにいくつかの高価なメモリトランザクションを必要とする。バイトコード取出しの場合のように、メモリベース「Java」スタックを管理してこれと対話するために必要とされるメモリトランザクションは、性能の点で高価であり、システムの電力消費を増大させる。
【0091】
「アクセラレータチップ」は、直接に典型的なメモリシステム設計に対して容易にインタフェースで接続し、あらゆるシステムソフトウェアに対して十分に透過的であり、何らのポート又は新たな開発ツールを必要とすることなくその恩典をもたらす。「JVM」は、「Java」バイトコードの実行をアクセラレータチップ内に押し込めるために好ましくは変更されるが、全ての他のシステム構成要素及びソフトウェアは、その存在に気付かない。これは、任意の及び全ての市販の開発ツール、オペレーティングシステム、及び固有のアプリケーションソフトウェアが、何らの修正もなくかついかなる新しいツール又はソフトウェアを必要とすることもなく、そのまま作動することを可能にする。これは、オペレーティングシステムソフトウェア、常駐アプリケーション、デバッガ、シミュレータ、又は他の開発ツールへの投資を保存することでもある。アクセラレータチップの導入は、ホストマイクロプロセッサとシステムメモリとの間のメモリアクセスに対して透過的であるが、待機状態を導入する場合がある。「アクセラレータチップ」は、性能、装置サイズ、部品コスト、電力消費、組込みの容易さ、及び市場に出すまでの時間が重要な設計上の考慮事項である携帯/無線受話器、携帯情報端末、及び他の種類の「インターネット電気器具」に対して有用である。
【0092】
一実施形態においては、アクセラレータチップは、チップスタックとしてプロセッサチップと統合される。別の実施形態においては、アクセラレータチップは、メモリと同一のシリコン上に設けられる。代替的に、アクセラレータチップは、チップスタックとしてメモリと統合される。更に別の実施形態においては、プロセッサチップは、システムオンチップである。代替実施形態においては、システムオンチップは、セルラー電話に使用されるようになっている。
【0093】
一実施形態においては、アクセラレータチップは、「Java」バイトコード及び「C#/.NET」のための「MSIL」のような2つ又はそれ以上の中間言語の実行をサポートする。
【0094】
本発明の一実施形態においては、本システムは、少なくとも1つのメモリと、この少なくとも1つのメモリに作動可能に接続されたプロセッサチップと、アクセラレータチップとを含み、アクセラレータチップは、この少なくとも1つのメモリと作動可能に接続され、この少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも1つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、ハードウェアクセラレータは、中間言語命令を実行するための「Java」プロセッサのアクセラレータを含んでいる。
【0095】
本発明の更に別の実施形態においては、本システムは、少なくとも1つのメモリと、この少なくとも1つのメモリに作動可能に接続されたプロセッサチップと、この少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップとを含み、この少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも1つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、いくつかの命令は、コールバックを発生し、プロセッサチップ上で実行される。
【0096】
上述の実施形態を参照しながら本発明について説明したが、好ましい実施形態及び方法に対するこの説明は、限定的な意味に解釈されないものとする。例えば、本明細書の本文及び請求項で使用される「Java」という用語は、「Java」の後継プログラミング言語又は基本的な「Java」概念(仮想マシンの作動を指示するためのバイトコードのような汎用命令の使用)を使用した他のプログラミング言語を網羅するものと解釈されるべきである。本発明の全ての態様は、特定の説明又は本明細書に示した構成に限定されないということも理解すべきである。開示した発明の様々な実施形態の形態及び詳細のいくつかの修正、及び本発明の他の変形は、本発明の開示を参照すれば当業者には明らかであろう。従って、特許請求の範囲は、説明した実施形態の上述のあらゆる修正又は変形を、それらが本発明の真の精神及び範囲に入るものとして網羅するように考慮されている。
【図面の簡単な説明】
【0097】
【図1】本発明の一実施形態のシステムを示す図である。
【図2】本発明の一実施形態の「アクセラレータチップ」を示す図である。
【図3】本発明のシステムの別の実施形態を示す図である。
【図4A】本発明の一実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図4B】本発明の別の実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図5】本発明の「アクセラレータチップ」の一実施形態のパワーマネージメント方式を示す表である。
【図6】「アクセラレータチップ」により実行されるバイトコードのリスト、及び本発明のシステムの一実施形態に対するプロセッサチップへのコールバックを引き起こすバイトコードのリストの一例を示す表である。
【図7】本発明のシステムの一実施形態と共に使用することができるメモリユニットのための共通システムメモリ編成を示す図である。
【図8】本発明の「アクセラレータチップ」の一実施形態のためのピン機能の表である。
【図9】本発明の一実施形態に対するアクセラレータチップを通じた又はアクセラレータチップを用いない場合の異なるアクセス時間に対するメモリ待ち状態を示す図である。
【図10】本発明の一実施形態のアクセラレータチップの高レベルの図である。
【図11】アクセラレータチップが「SRAM」とインタフェースで接続しているシステムの図である。
【図12】「SDRAM」とインタフェースで接続したアクセラレータチップの図である。
【図13】システムオンチップよりもメモリに対するより大きなビットのインタフェースを有するアクセラレータチップを備えたシステムの図である。
【図14】「LCD」ディスプレイと相互接続されたグラフィックアクセラレータエンジンを含む「アクセラレータチップ」の図である。
【図15】ピンがフラッシュメモリ及び「SRAM」との相互接続専用である必要がないような、チップスタックパッケージ内のアクセラレータチップの使用を示す図である。
【図16A】本発明の一実施形態のアクセラレータエンジンの一実施形態のための新しい命令の図である。
【図16B】図16Aの新しい命令の演算を示す図である。
【図16C】図16Aの新しい命令の演算を示す図である。
【図16D】図16Aの新しい命令の演算を示す図である。
【図16E】図16Aの新しい命令の演算を示す図である。
【図17】図16Aの新しい命令に対する論理要素を示す、実行エンジンの一実施形態の図である。
【図18A】「Java」バイトコード命令を示す図である。
【図18B】「Java」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図18C】図18Aの「Java」バイトコード命令を実施するために図16Aの新しい命令を備えたマイクロコードを示す図である。
【図19A】「Java」バイトコード命令「LCMP」を示す図である。
【図19B】図19Aの「LCMP」の「Java」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図19C】図19Aの「Java」バイトコード命令「LCMP」を実施する新しい命令を備えたマイクロコードを示す図である。
【符号の説明】
【0098】
20 システム
22 アクセラレータチップ
24 メモリユニット
26 プロセッサチップ
30 メモリインタフェースユニット
34 ハードウェア変換プログラムユニット
36 実行エンジン
【0001】
本発明は、「アクセラレータチップ」に関する。
【背景技術】
【0002】
「Java(登録商標)」は、サン・マイクロシステムズにより開発されたオブジェクト指向プログラミング言語である。「Java」言語は、ソースレベルにおいてもバイナリレベルにおいても、小さく、単純で、プラットフォーム間及びオペレーティングシステム間で移植可能である。このことが、「Java」プログラミング言語を「インターネット」上で非常に普及させている。
【0003】
このように「Java」がプラットフォームに依存しないこと、そしてコードがコンパクトであることは、従来のプログラミング言語に勝る「Java」の最も重要な利点である。従来のプログラミング言語では、プログラムのソースコードはコンパイラへ送られ、そこで機械コード又はプロセッサ命令へ変換される。プロセッサ命令は、システムのプロセッサに固有のものである。コードが「インテル」社製用のシステム上でコンパイルされた場合は、得られたプログラムは「インテル」を使用したシステム上でのみ実行されることになる。プログラムを別のシステム上で実行させることが必要な場合、ユーザは、元のソースコードへ戻り、新たなプロセッサのためのコンパイラを取得して、プログラムをその別のプロセッサに特有の機械コードへと再度コンパイルしなくてはならない。
【0004】
「Java」の動作はこれとは異なる。「Java」コンパイラは、「Java」プログラムを取得すると、特定プロセッサのための機械コードを生成する代わりに、バイトコードを生成する。バイトコードは、機械コードに似た命令であるが、いかなるプロセッサにも特有のものではない。「Java」プログラムを実行する場合は、バイトコード解釈プログラムは、「Java」バイトコードを取得し、それらを対応する固有のプロセッサ命令に変換して実行する。「Java」バイトコード解釈プログラムは、「Java仮想マシン(JVM)」の構成要素の一つである。
【0005】
バイトコードの形式で「Java」プログラムを有していれば、いずれか一つのシステムに固有というのではなく、「Java仮想マシン」が利用可能である限り任意のプラットフォーム及び任意のオペレーティングシステム上で実行可能となる。これにより、バイナリバイトコードファイルが複数のプラットフォーム間で実行可能となる。
【0006】
バイトコードを使用することの欠点は、実行速度である。ハードウェアによってコンパイルされハードウェア上で直接実行されるそのシステム固有のプログラムは、「Java」バイトコードよりもずっと速く実行される。これは、「Java」のバイトコードは「JAVA仮想マシン」によって処理する必要があるからである。プロセッサは、「Java」バイトコードを「Java仮想マシン」の固有命令に変換して、かつその固有命令を実行しなくてはならない。
【0007】
このような「Java」ソフトウェアの性能の低さは、特に内蔵型システム設計においては公知の問題であって、性能を上げるためにいくつかの技術が導入されてきた。しかしながら、これらの技術は望ましくない別の副作用も引き起こす。最も一般的な技術として、システム及び/又はマイクロプロセッサのクロック周波数を増大し、「Java」バイトコードをコンパイルするように「JVM」を修正し、専用「Java」マイクロプロセッサを使用することが挙げられる。
【0008】
マイクロプロセッサのクロック周波数を増大すると、「Java」ソフトウェアの実行における性能利得を含むシステム性能利得が全体的に改善される。しかし、周波数を増大することは、「Java」ソフトウェア性能の一対一の増大をもたらさない。周波数の増大は、電力消費と全体的なシステムのコストも増大させる。換言すると、マイクロプロセッサをより高い周波数でクロッキングさせることは、「Java」ソフトウェア性能を加速させる非効率的な方法である。
【0009】
コンパイル技術(例えば、ジャストインタイム「JIT」コンパイル)は、コンパイル中にソフトウェア実行速度が遅延するので不安定な性能を招く。コンパイルは、システムメモリの使用量も増大させる。その理由は、「Java」プログラムをコンパイルして記憶することは、元の「Java」プログラムを記憶するのに要するメモリ量の5倍から10倍のメモリ量を消費するからである。
【0010】
専用「Java」マイクロプロセッサは、それらの固有言語として「Java」バイトコード命令を使用し、典型的な市販マイクロプロセッサよりも良好な性能で「Java」ソフトウェアを実行するが、それらはいくつかの大きな設計上の制約を課す。専用「Java」マイクロプロセッサを使用することは、これを中心にシステムを設計することを必要とし、通常「Java」マイクロプロセッサ製造供給元からしか入手できない特殊開発ツールの利用を強要する。更に、この種の市販ソフトウェアは存在しないので、全てのオペレーティングシステムソフトウェア及びデバイスドライバを最初から特注で開発すべきである。
【発明の開示】
【発明が解決しようとする課題】
【0011】
「Java」ソフトウェア性能が改善された内蔵型システムを有することが望まれている。
【課題を解決するための手段】
【0012】
本発明の一実施形態は、少なくとも1つのメモリと、この1つのメモリと作動可能に接続されたプロセッサチップと、「アクセラレータチップ」とを有するシステムを含む。少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られる。「アクセラレータチップ」は、この少なくとも1つのメモリに対する直接アクセスを有する。「アクセラレータチップ」は、中間言語命令を使用したプログラムの少なくとも一部分を実行するようになっている。中間言語命令は、「Java」バイトコードを含み、また、他の解釈された言語の中間言語形式も含む。これらの中間言語形式には、「Multos」バイトコード、「UCSDパスカルPコード」、「C#/.NET」のための「MSIL」、及び他の命令が含まれる。本発明は、任意の中間言語に適用されるが、例示のため及び説明を明瞭にするために、以下では「Java」を参照する。
【0013】
「アクセラレータチップ」を使用することにより、従来のプロセッサチップ及びメモリユニットを有するシステムは、「Java」バイトコードのような中間言語命令を処理するために加速することができる。「アクセラレータチップ」は、好ましくは、プロセッサチップとメモリとの間の経路内に置かれ、中間言語プログラムを非常に効率的に実行することができる。好ましい実施形態においては、「アクセラレータチップ」は、少なくともいくつかの中間言語命令を変換するための変換プログラムユニットと、変換された命令を実行するための実行エンジンとを含む。複数の中間言語の実行は、1つのアクセラレータ内で同時に又は順番にサポートすることができる。例えば、一実施形態においては、アクセラレータは、「Java」バイトコード、及び、「C#/.NET」のための「MSIL」を実行する。
【0014】
本発明の別の実施形態は、「Java」バイトコードのような中間言語命令を実行するためのユニットとメモリインタフェースとを有する「アクセラレータチップ」を含む。メモリインタフェースは、少なくとも1つのメモリに対する「アクセラレータチップ」のメモリアクセスを準備し、この少なくとも1つのメモリに対する別のプロセッサチップのメモリアクセスを可能にするようになっている。そのようなメモリインタフェースを備えた「アクセラレータチップ」を有することにより、「アクセラレータチップ」をプロセッサチップとメモリユニットとの間の経路に配置することができる。
【0015】
本発明の別の実施形態は、ハードウェア変換プログラムユニットと、実行エンジンと、メモリインタフェースとを有する「アクセラレータチップ」を含む。
【0016】
本発明の別の実施形態においては、ハードウェア変換プログラムユニットに作動可能に接続された中間言語命令キャッシュが使用される。中間言語命令をキャッシュに記憶することにより、プログラムの実行速度を大きく改善することができる。
【0017】
本発明の別の実施形態は、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、ハードウェア変換プログラムユニットにより提供された固有命令を実行するようになった専用実行エンジンとを有する「アクセラレータチップ」を含む。専用実行エンジンは、ハードウェア変換プログラムユニットにより提供された命令のみを実行する。実行エンジンではなくハードウェア変換プログラムユニットが、好ましくは、変換する次の中間言語命令のアドレスを判断して専用実行エンジンに提供する。代替的に、実行エンジンが、中間言語命令に対する次のアドレスを判断することができる。
【0018】
一実施形態においては、ハードウェア変換プログラムユニットは、いくつかの中間言語命令のみを変換し、他の中間言語命令は、これらの例外的な命令を処理するための仮想マシンを作動させるプロセッサチップに対するコールバックを引き起こす。
【発明を実施するための最良の形態】
【0019】
図1は、本発明の一実施形態によるシステム20を示す。この実施形態においては、「アクセラレータチップ」22が、プロセッサチップ26とメモリユニット24との間に置かれる。プロセッサチップ26は、典型的にはメモリユニット24とインタフェースで接続している。これは特に、通信、携帯電話、及び携帯情報端末などのために使用される内蔵型システムにおいては一般的である。一実施形態においては、プロセッサチップは、様々な要素を含むシステムオンチップ(SOC)である。例えば、一実施形態においては、プロセッサチップ26は、ダイレクトメモリアクセスユニット(DMA)26a、中央処理ユニット(CPU)26b、デジタルシグナルプロセッサユニット(DSP)26c、及びローカルメモリ26dを含む。一実施形態においては、「SOC」は、「GSM」、「CDMA」、「W−CDMA」、及び「GPRS」などのような無線規格に対する携帯電話のためのベースバンドプロセッサである。
【0020】
以下に説明するように、「アクセラレータチップ」22は、好ましくは、プロセッサチップ26とメモリユニット24との間の経路内に置かれる。「アクセラレータチップ」22は、速度を改善してシステム全体の電力消費を減らすために、「Java」のようなプログラムの少なくとも一部分を加速された仕方で実行する。この実施形態においては、「アクセラレータチップ」22は、中間言語命令を実行するための実行ユニット32とメモリインタフェースユニット30とを含む。メモリインタフェースユニット30は、「アクセラレータチップ」22上の実行ユニット32が、プログラムを実行するための中間言語命令及びデータにアクセスすることを可能にする。メモリインタフェース30は、プロセッサチップ26がメモリユニット24から命令及びデータを取得することも可能にする。メモリインタフェース30は、「アクセラレータチップ」が現存するチップセット(SOC)に容易に統合されることを可能にする。アクセラレータ機能は、同一チップスタックパッケージ又は同一シリコン上に全体的又は部分的に「SOC」と共に一体化することができる。代替的に、それは、チップスタックパッケージとしてメモリ内に又は同一シリコン上に統合させることもできる。
【0021】
「アクセラレータチップ」22の実行ユニット部分32は、任意のタイプの中間言語命令実行ユニットとすることができる。例えば、一実施形態においては、専用「Java」プロセッサのような中間言語命令のための専用プロセッサが使用される。
【0022】
しかし、好ましい実施形態においては、中間言語命令実行ユニット32は、中間言語命令を実行エンジン36のための変換された命令に変換するハードウェア変換プログラムユニット34を含む。ハードウェア変換プログラムユニット34は、いくつかの中間言語命令を効率的に変換する。一実施形態においては、プロセッサチップ26は、ハードウェア変換プログラムユニットにより処理されないいくつかの中間言語命令を処理する。中間言語命令のいくつかを変換プログラムユニットに効率的に変換させ、次に、これらの変換された命令を実行エンジンにより実行させることにより、システムの速度を大きく増大させることができる。変換プログラムユニットは、マイクロコードに基づくものとすることができ、従って、「C#/.NET」に対する「Java」をこのマイクロコードと交換することを可能にする。
【0023】
仮想マシンを完全にプロセッサ26内で実行することは、いくつかの欠点を有する。仮想マシン解釈プログラムの変換部分は、極めて大きくなりがちであって、プロセッサチップ内で使用されるキャッシュよりも大きい可能性がある。これは、変換コードの一部分を外部メモリからキャッシュに繰り返し出し入れさせ、これがシステムの速度を低下させる。「アクセラレータチップ」22上の変換プログラムユニット34は、外部メモリユニットからの変換ソフトウェアの転送を必要とすることなく変換を行う。これにより、中間言語プログラムの演算速度を大きく増大させることができる。
【0024】
いくつかの中間言語命令に対するコールバックの使用は、「アクセラレータチップ」22のサイズ及び電力消費を減らすことができるので有用である。あらゆる中間言語命令を実行することができる比較的複雑な実行ユニットを有するよりも、変換プログラムユニット内で一定の中間言語命令のみを変換して、それらを実行エンジン36内で実行する方が「アクセラレータチップ」22のサイズ及び電力消費を減少させる。アクセラレータにより実行される中間言語命令は、好ましくは、最も一般的に使用される命令である。アクセラレータチップにより実行されない中間言語命令は、それらが「SoC」上で実行されるようにコールバックとして実施することができる。代替的に、一実施形態の「アクセラレータチップ」は、あらゆる中間言語命令を実行することができる。
【0025】
一実施形態の実行ユニット32内には、インタフェースユニット及びレジスタ42も示されている。好ましい実施形態においては、プロセッサユニット26は、「アクセラレータチップ」22に命令を与えるために使用される修正仮想マシンを実行する。コールバックが起った時、変換プログラムユニット34は、ユニット42内のレジスタを設定し、実行ユニットは、復元を必要とする全ての要素を復元させて、ユニット42内でそのように表示する。好ましい実施形態においては、プロセッサチップ26は、インタフェースユニット及びレジスタ42を通じて「アクセラレータチップ」22を制御する。制御が「アクセラレータチップ」に引き渡された状態で、実行ユニット32は、独立に作動する。
【0026】
好ましい実施形態においては、中間言語命令キャッシュ38が、変換プログラムユニット34に関連して使用される。中間言語命令キャッシュの使用は、システムの作動速度を更に増大させて電力を節減する。その理由は、中間言語命令がメモリユニット24からあまり頻繁に要求される必要がないからである。頻繁に使用される中間言語命令は、命令キャッシュ38内に保たれる。好ましい実施形態においては、命令キャッシュ38は、双方向連想キャッシュである。システムに同じく付随するのは、データを記憶するためのデータキャッシュ40である。
【0027】
図1には変換プログラムユニットが実行エンジンとは別個のものとして示されているが、変換プログラムユニットは、実行エンジン内に組み込むこともできる。その場合は、中央処理ユニット(CPU)又は実行エンジンは、中間言語命令を演算される固有の命令に「CPU」又は実行エンジンの主要部分により変換するためのハードウェア変換プログラムサブユニットを有する。
【0028】
中間言語命令は、好ましくは「Java」バイトコードである。尚、「Multos」バイトコード、「MSIL」、及び「BREW」などのような他の中間言語命令も同様に使用することができる。説明を簡潔にするために、以下においては「Java」が使用される実施形態について説明するが、他の中間言語命令も同様に使用することができる。
【0029】
図2は、「アクセラレータチップ」の一実施形態を示す図である。この実施形態においては、「Java」バイトコードが、命令キャッシュ52内に記憶される。これらのバイトコードは、次に「Java」変換プログラム34’に送られる。バイトコードバッファアライメントユニット50は、バイトコードを桁合わせして、それらをバイトコード復号ユニット52に供給する。好ましい実施形態においては、いくつかのバイトコードに対して命令レベルの並列処理が行われ、バイトコード復号ユニット52が1つよりも多い「Java」バイトコードを単一の変換された命令に結合する。別の状況においては、「Java」バイトコードは、必要に応じて1つよりも多い固有命令をもたらす。「Java」バイトコード復号ユニット52は、変換された命令を作り出すために命令構成ユニット54により使用される指示を発生する。好ましい実施形態においては、ユニット54内にあるか又はこれに付随するマイクロコード・ルックアップテーブルユニットは、変換された命令のベース部分を発生し、他の部分は、実行エンジン36’のプロセッサ60のレジスタファイル58内の位置の意味を追跡する「スタック及び変数マネージャ」56から提供される。一実施形態においては、プロセッサ60のレジスタファイル58は、上部8つの「Java」オペランドスタック値、16個の「Java」変数値、及び4つのスクラッチ値を記憶する。
【0030】
好ましい実施形態においては、実行エンジン36’は、「Java」変換プログラムユニットからの変換された命令を実行するためにのみ使用される。好ましい実施形態においては、プロセッサ60は、縮小命令セット計算(RISC)プロセッサであるか、又は「DSP」、又は「VLIW」、又は「CISC」プロセッサである。これらのプロセッサは、その命令セットが変換された命令を効率的に実行するように設計されるようにカスタム化又は修正することができる。必要とされない命令及び機能は、より単純な実行エンジンを作り出すために、好ましくは実行エンジンの命令セットから除去され、例えば、割込みは、好ましくは使用されない。更に、実行エンジン36’は、実行すべき次の命令の位置を直接計算する必要がない。その代わり、「Java」変換プログラムユニット34’は、変換すべき次の「Java」バイトコードのアドレスを計算することができる。プロセッサ60は、コントローラ62に対してフラグを生成し、このコントローラが、変換すべき次の「Java」バイトコードの位置を計算する。代替的に、標準的なプロセッサを使用することもできる。
【0031】
一実施形態においては、バイトコードバッファ制御ユニット72は、バイトコードのいくつのバイトが「Java」変換プログラムユニット内に受容されるかを検査し、「Java」プログラムカウンタ70を修正する。コントローラ62も、「Java」プログラムカウンタを修正することができる。アドレスユニット64は、命令キャッシュ又は外部メモリから次の命令を取得する。尚、例えば、「為された分岐」又はコールバックにより要求されるならば、コントローラ62は、「Java」変換プログラムユニットのパイプラインをクリアすることもできる。プロセッサ60からのデータも、データキャッシュ68に記憶される。
【0032】
仮想マシンがバイトコードを高速形式に修正する時、修正されるバイトコードを保持するハードウェアクセラレータ内のキャッシュ線を無効にすべきである。仮想マシンがこれとは逆の処理を行ってバイトコードを元の形式に復旧させる場合も、上記と同じことが言える。更に、コールバックは、インタフェースレジスタ内のキャッシュ無効化レジスタを使用して、命令キャッシュ内の適切なキャッシュ線を無効にする。
【0033】
いくつかの実施形態においては、高速バイトコードが使用される場合、修正された命令が命令キャッシュ52内へ再度記憶される。高速バイトコードが使用される場合は、システムは、「Java」バイトコードがどのように修正されるかを追跡しなければならず、最終的に、キャッシュと外部メモリとの間で命令の整合性を持たなければならない。
【0034】
一実施形態においては、バイトコード復号ユニットからの復号されたバイトコードは、命令構成ユニット54内の「演算論理ユニット(ALU)」と状態マシンユニットとに送られる。「ALU」は、バイトコード命令を並べ換えて状態マシンがそれらを演算するのを容易にし、メモリ参照の計算を含む様々な演算機能を実行するために設けられる。状態マシンは、ルックアップテーブルを使用して、バイトコードを固有命令に変換する。このようにして、状態マシンは、マイクロコードルックアップテーブル内における目標とする固有命令の位置を指示するアドレスを提供する。カウンタは、オペランドスタック上にいくつのエントリが配置されたかに関して計数を保ち、メモリ及びレジスタファイル内のオペランドスタックの最上部を追跡して更新するために維持される。好ましい実施形態においては、マイクロコードルックアップテーブルの出力は、レジスタファイル内で演算されるレジスタの指示で増強される。レジスタ指示は、カウンタから得られ、バイトコードから変換される。これを達成するために、レジスタファイル内のどのエントリ内にオペランド及び変数があるかというハードウェア指示を有するべきである。固有命令は、この基礎の上に構成される。代替的に、これらのレジスタ指示を直接レジスタファイルに送ることができる。
【0035】
本発明の別の実施形態においては、「スタック及び変数」マネージャは、レジスタファイル内の異なるレジスタに「スタック及び変数」値を割当てる。この別の実施形態の利点は、いくつかの場合に、「呼出しコール」により「スタック及び変数」値が切り換わることがあり、そのような切換えが、これを実行するためにいくつかの固有命令を生成するよりも「スタック及び変数」マネージャ内で一層効率的に行えることである。
【0036】
一実施形態においては、システムの作動を助けるために、いくつかの重要な値をハードウェアクセラレータ内に記憶させることができる。ハードウェアクセラレータ内に記憶されたこれらの値は、特に「Java」スタックの一部分を記憶するために実行エンジンのレジスタファイルが使用される場合は、システムの作動を改善することを助ける。
【0037】
ハードウェア変換プログラムユニットは、好ましくは、スタック値の最上部の指示を記憶する。このスタック値の最上部は、メモリからのスタック値の読込みを助ける。スタック値の最上部は、命令がスタックベースの命令からレジスタベースの命令に変換される時に更新される。命令レベル並列処理が使用される場合は、単一のレジスタベースの命令の一部である各スタックベースの命令は、「Java」スタックに対するその効果に関して評価される必要がある。
【0038】
一実施形態においては、オペランドスタック深度値が、ハードウェアクセラレータ内に維持される。このオペランドスタック深度は、実行エンジンレジスタファイル内におけるオペランドスタックの動的深度を表す。従って、8つのスタック値がレジスタファイル内に記憶されるとすれば、スタック深度指示器の読みは「8」であることになる。レジスタファイル内のスタックの深さを知ることは、レジスタファイルを出入りするスタック値の読込み及び記憶を助ける。
【0039】
更に、フレームスタックは、それ自身のアンダーフロー/オーバーフローと、フレームスタック上にいくつのフレームがあるかを表すフレーム深度指示と共にハードウェア内に維持することができる。フレームスタックは、独立したスタックとするか、又は「CPU」のレジスタファイル内に組み込むことができる。好ましい実施形態においては、フレームスタック及びオペランドスタックは、「CPU」の同一レジスタファイル内とすることができる。別の実施形態においては、フレームスタック及びオペランドスタックは、異なるエンティティである。ローカル変数もまた、オペランドスタック及び/又はフレームスタックを同じく有する「CPU」レジスタファイルの別の区域内に記憶されるであろう。
【0040】
好ましい実施形態においては、最小スタック深度値と最大スタック深度値とは、ハードウェア変換プログラムユニットにより維持される。スタック深度値は、要求された最大及び最小スタック深度と比較される。スタック値が最小値よりも低くなる時、ハードウェア変換プログラムユニットは、メモリからレジスタファイル内へスタック値を読み込むために読込み命令を構成する。スタック深度が最大値よりも高くなる時、ハードウェア変換プログラムユニットは、スタック値を再度メモリに記憶させるために記憶命令を構成する。
【0041】
一実施形態においては、実行エンジンレジスタファイル内のオペランドスタックの少なくとも最上部の8つのエントリは、リングバッファとして作動し、このリングバッファは、アクセラレータ内に維持されて、オーバーフロー/アンダーフローユニットと作動可能に接続される。
【0042】
ハードウェア変換プログラムユニットは、好ましくは、実行エンジンのレジスタファイル内に記憶されたオペランド及び変数の指示も記憶する。これらの指示は、ハードウェアクセラレータが、入ってくるスタックベースの命令から変換されたレジスタベースの命令又は固有命令を構成することを可能にする。
【0043】
ハードウェア変換プログラムユニットは、好ましくは、変数ベース及びオペランドベースの指示もメモリ内に記憶する。これは、実行エンジンのレジスタファイルとメモリとの間に変数及びオペランドを読み込んで記憶する命令を構成することを可能にする。例えば、変数(Var)がレジスタファイル内で利用可能でない時には、ハードウェアが読込み命令を発する。ハードウェアは、「Var」のメモリ位置を生成するために、「Var」数に4を掛けて「Var」ベースを加えるようになっている。生成された命令は、「Var」ベースが一時的に固有な実行エンジンレジスタ内にあるという知識に基づくものである。4を掛けた「Var」数は、構成されている固有命令の即値フィールドとして利用可能にすることができ、それは、アドレスが「Var」ベースに対するポインタと即値オフセットとを加えたものを保持する一時的レジスタの内容であるメモリアクセス命令とすることができる。代替的に、「Var」の最終的なメモリ位置は、実行エンジンにより命令として読まれ、次に「Var」に読み込むことができる。
【0044】
一実施形態においては、ハードウェア変換プログラムユニットは、変数が「Java」バイトコードの実行により更新された時、変更されたものとしてこの変数にマークを付ける。ハードウェアクセラレータは、変更されたものとしてマークを付された変数を、いくつかのバイトコードに対してシステムメモリにコピーすることができる。
【0045】
一実施形態においては、ハードウェア変換プログラムユニットは、固有命令を構成し、固有命令のオペランドは、少なくとも2つの固有実行エンジンレジスタファイル参照を含み、レジスタファイル内容は、オペランドスタック及び変数のためのデータである。
【0046】
一実施形態においては、スタック及び変数レジスタマネージャは、実行エンジンのレジスタファイルの変数及びスタックレジスタ内に何が記憶されているかの指示を維持する。この情報は、次に、「Java」バイトコードの復号化及び適切な固有命令の生成を助けるために、復号段とマイクロコード段とに供給される。
【0047】
好ましい実施形態においては、「スタック及び変数」レジスタマネージャの機能の1つは、スタックの最上部の指示を維持することである。すなわち、例えば、レジスタR1〜R4が、メモリから又はバイトコードを実行することにより最上部の4つのスタック値を記憶する場合、データがレジスタファイルに対して読込み及び読出しされる時に、スタックの最上部が変化することになる。従って、レジスタR2がレジスタファイル内のスタックの最上部となり、レジスタR1がスタックの底部となることができる。新しいデータがレジスタファイル内のスタックに読込まれる場合は、そのデータは、レジスタR3内に読込まれることになり、これがスタックの新たな最上部となって、スタックの底部はR1のままである。レジスタファイル内のスタックに更に2つの項目が読込まれる場合は、レジスタファイル内のスタックの新たな最上部がR1となり、初めのR1は、アクセラレータのオーバーフロー/アンダーフローユニットによりメモリに書き戻しされ、R2は、レジスタファイル内の部分スタックの底部になることになる。
【0048】
図3は、「アクセラレータチップ」の一実施例内の主要機能ユニットを示すと共に、それが典型的な無線受話器デザイン内にインタフェースする方法を示している。「アクセラレータチップ」は、ホストマイクロプロセッサ(又は、内蔵マイクロプロセッサを含む「SOC」)とシステム「SRAM」及び/又は「フラッシュ」メモリとの間に統合される。ホストマイクロプロセッサ及びシステムソフトウェアの観点からは、システム「SRAM」及び/又は「フラッシュ」メモリは、アクセラレータチップの背後にある。
【0049】
「アクセラレータチップ」は、システム「SRAM」及び/又は「フラッシュ」メモリに直接アクセスすることができる。ホストマイクロプロセッサ(又は、「SOC」内のマイクロプロセッサ)は、「アクセラレータチップ」を通じてシステム「SRAM」又は「フラッシュ」メモリに透過的にアクセスする(「システムメモリは、アクセラレータの背後にある」)。
【0050】
「アクセラレータチップ」は、その片方のソフトウェアカーネル内のモニタを通じて、ホストマイクロプロセッサと同期させるのが好ましい。ソフトウェアカーネル(又は、プロセッサチップ)は、「アクセラレータチップ」内の特定レジスタに「Java」バイトコード命令が位置するアドレスを読込み、次に、実行を始めるために制御をアクセラレータチップに移す。次に、ソフトウェアカーネルは、それがコールバック機構を使用してバイトコードを処理することが必要であることを検知するまで、又は、全てのバイトコードが実行されてしまうまで、ホストマイクロプロセッサ上で実行されるポーリングループ内で実行モード状態の読込みを待機する。ポーリングループは、「アクセラレータチップ」と「SOC」上の汎用入出力ピンとの間に電気的に接続された「実行モード」ピンを読み取ることにより実行することができる。代替的に、「実行モード」の同じ状態は、アクセラレータチップ内のレジスタを読み取ることによりポーリングすることができる。これらのいずれの場合も、「アクセラレータチップ」は、コールバック処理が完了するまで、又はより多くのバイトコードを実行するように指令されるまで自動的に節電スリープ状態に入る。
【0051】
「アクセラレータチップ」は、メモリからのオペランドを含む「Java」バイトコード全体をその内部キャッシュを通じて取り込み、その命令を実行する。キャッシュ内にある命令及びデータは、システムメモリのトランザクションが回避されたので、低減された電力消費でより高速に実行される。バイトコードストリームは、命令レベル並列処理(ILP)に基づく最適化プログラムを使用して、変換される前にバッファに入れられて分析される。ローカルにキャッシュされた「Java」データと結合された「ILP」最適化プログラムは、各サイクルにとって可能な最高速の実行をもたらす。
【0052】
「アクセラレータチップ」は、別々の独立「Java」バイトコード実行エンジンであるから、ホストマイクロプロセッサがそのポーリングループにおいて待機するか、又は割込みを処理するいずれの間も同時に処理を行う。更に、「アクセラレータチップ」は、ホストマイクロプロセッサがその背後のシステムメモリにアクセスする必要があり、「アクセラレータチップ」が同時にシステムメモリにアクセスすることを欲する場合の間だけ停止される。例えば、ホストマイクロプロセッサが割込みサービスルーチン又はそれ自身のキャッシュ内からのソフトウェアを実行しているとすれば、「アクセラレータチップ」は、同時にバイトコードを実行することができる。同様に、「Java」バイトコード命令及びデータが「アクセラレータチップ」の内部キャッシュ内にある場合、アクセラレータは、ホストマイクロプロセッサがその背後のシステムメモリにアクセスすることを必要とする場合でも、バイトコードを同時に実行することができる。
【0053】
図4Aは,一実施形態の「アクセラレータチップ」の2つの主要モードであるスリープ及び実行(「Java」バイトコード命令を実行すること)を示す状態マシンの図である。「アクセラレータチップ」は、その実行状態とスリープ状態との間で自動的に遷移する。「アクセラレータチップ」は、そのスリープ状態において、「Java」エンジンコア及びこれに付随する構成要素がアイドル状態にあるから最小限の電力しか消費しない。
【0054】
図4Bは、本発明のシステムの別の実施形態の、更に待機モードを含むアクセラレータチップの状態を示す図である。待機モードは、コールバック中に使用される。電力を減らすために、「Java」レジスタに対するクロックだけがオンにされる。待機モードにおいては、プロセッサチップは、コールバックを引き起こす「Java」バイトコードを処理するために仮想マシンを実行している。アクセラレータチップは、待機モードにあるから、全ての「Java」レジスタをリセットすることなく迅速に復帰することができる。
【0055】
図5は、図4Aの状態マシンの各モードにおいて、どの構成要素がアクティブで、どの構成要素がアイドルかを示す。「JVM」が実行されていない時、又は追加的節電が適切であるとシステムが判断した時に、「アクセラレータチップ」は、自動的にそのスリープモードに入る。
【0056】
「アクセラレータチップ」は、作動されると、下記イベントのいずれかが起るまで実行される。
1.「Java」バイトコード命令が、ソフトウェアコールバック機構を通じてホストマイクロプロセッサにより実行されることが必要な時。
2.ホストマイクロプロセッサが、典型的には割込み及び例外処理中にのみ起る、システムメモリへのアクセスを必要とする時。
3.ホストマイクロプロセッサが、「アクセラレータチップ」をそのスリープモードにさせることによりアクセラレータチップを停止させる時。
【0057】
「アクセラレータチップ」は、デフォルトにより使用不可にされて(そのスリープモードにおいて)全ての固有常駐ソフトウェアに対して透過的であり、修正「Java」仮想マシンがそれを初期化して「Java」バイトコード命令を実行するためにそれを呼び出す時に使用可能にされる。アクセラレータチップがそのスリープモードにある時、ホストマイクロプロセッサから「SRAM」又は「フラッシュ」メモリへのアクセスは、「アクセラレータチップ」を通過するだけである。
【0058】
「アクセラレータチップ」は、「SRAM」及び/又は「フラッシュ」メモリコントローラにおける典型的な方式でプログラムする必要があるそのメモリインタフェース回路の一体的部分としてメモリコントローラを含む。実際のプログラミングは、各デバイスの固有アーキテクチャ及びメモリマップに従う特定のメモリアドレスセットを有するソフトウェアカーネル内で行われる。修正「Java」仮想マシンの初期化シーケンスの一部として、「アクセラレータチップ」内のレジスタには適切な情報が読込まれる。「Java」ソフトウェアを実行するために、システムがその「JVM」を呼び出す時、それは、最初に「Java」バイトコードの開始のアドレスを「アクセラレータチップ」の「Javaプログラムカウンタ(JP)」内に読み込む。次に、カーネルは、ホストマイクロプロセッサ上で実行を始め、「アクセラレータチップ」が「Java」バイトコードの実行を完了したことを合図する時を見つけるためにそれをモニタする。完了すると、「アクセラレータチップ」は、そのスリープモードに入り、そのカーネルは、「JVM」及び/又はシステムソフトウェアに対する制御に戻る。
【0059】
「アクセラレータチップ」は、割込み又は例外処理を邪魔することはなく、何らの待ち時間を課すこともない。「アクセラレータチップ」が処理を行っている間に割込み又は例外が起った時、ホストマイクロプロセッサは、「アクセラレータチップ」に影響を及ぼすことなく、適切なハンドラルーチンに迂回する。ホストマイクロプロセッサは、ハンドラから復帰した時、ソフトウェアカーネルに実行を戻し、次に「アクセラレータチップ」のモニタを再開する。ホストマイクロプロセッサがメモリバスに取って代わった時でさえも、「アクセラレータチップ」は、その内部キャッシュから「Java」バイトコードを実行し続けることができ、これは、システムメモリバスの競合が起らぬ限り続くことができる。競合が起きた場合は、アクセラレータを停止させるために停止信号をアサートすることができる。
【0060】
「アクセラレータチップ」は、プログラム可能なベースから一定のオフセットにおいて、そのメモリマップ内に位置するいくつかの共用レジスタを有する。これらのレジスタは、その作動を制御し、一般的な使用のためにあるのではなく、むしろ「ソフトウェアカーネル」内のコードにより処理される。
【0061】
図3を参照すると、「アクセラレータチップ」は、ホストマイクロプロセッサ(又は、内蔵マイクロプロセッサを含む「SOC」)とシステム「SRAM」及び/又は「フラッシュ」メモリとの間に置かれていることが分る。全てのシステムメモリは、ホストマイクロプロセッサによりアクセスされ、従って「アクセラレータチップ」を通過する。一実施形態においては、全てのシステムソフトウェアに対して十分に透過的ではあるが、約4ナノ秒の遅延が各方向に対して導入され、各システムメモリトランザクションに対する合計約8ナノ秒の遅延に寄与する。
【0062】
図6は、「アクセラレータチップ」上の「Java」実行ユニットにより実行される「Java」バイトコードのリスト、及びプロセッサチップ上で実行される修正された「JVM」に対するコールバックを引き起こすバイトコードのリストの一実施形態を示す表である。尚、最も一般的なバイトコードは、「アクセラレータチップ」上で実行される。他のより一般的でなくより複雑なバイトコードは、プロセッサチップ上のソフトウェア内で実行される。「アクセラレータチップ」からいくつかの「Java」バイトコードを例外することにより、「アクセラレータチップ」の複雑性及び電力消費を低減させることができる。
【0063】
図7は、典型的なメモリ編成と、各タイプのメモリに記憶することができるソフトウェア及びデータのタイプとを示す。以下の表に列記された項目を配置することは、「Java」バイトコード命令を実行するために必要なバイトコードと対応するデータ項目とにアクセラレータチップがアクセスすることを可能にする。
【0064】
ホストマイクロプロセッサ上で作動するオペレーティングシステムは、アクセラレータチップがその「Java」処理の一部としてアクセスすることになるメモリの全領域に対して実際のメモリと仮想メモリが等しくなるように設定されるのが好ましい。
【0065】
「Java」仮想マシンとの統合は、好ましくは、以下に記す変更を通じて達成される。
1.「JVM」自身の初期化シーケンス内への修正された初期化コードの挿入。
2.「Java」バイトコード解釈プログラムの除去、及び、修正されたソフトウェアカーネルのインストール。これは、アクセラレータチップハードウェア内で直接に実行されない「Java」バイトコード命令に対する機能性を、アクセラレータチップソフトウェアカーネルにより使用可能にされたコールバック機構内に再び向けることを含む。更に、高速バイトコードに対しては、「JVM」がバイトコードをその高速形に修正する時、修正(高速化)されるバイトコードを保持した「ハードウェアクセラレータ」命令キャッシュ内のキャッシュ線は、無効化されるべきである。これは、「JVM」がこの処理を逆にしてバイトコードをその元の形に戻す場合にも言えることである。アクセラレータチップとそのソフトウェアカーネルとは、好ましくは、これらの状況を処理するために「アプリケーションプログラミングインタフェース(API)」呼出しを準備する。
3.ガーベッジコレクタを適応させること。「JVM」のガーベッジコレクタは、キャッシュ干渉問題を回避するために、「Javaヒープ」又は「Javaスタック」を走査する前にアクセラレータチップ内のデータキャッシュを無効にする。これは、好ましくは、「ソフトウェアカーネル」内の「API」機能を使用して達成される。
【0066】
「アクセラレータチップ」の一実施形態は、好ましくは、非同期「SRAM」及び/又はページモード「フラッシュ」メモリを含む非同期「フラッシュ」メモリを有するように設計された任意のシステムとインタフェースで接続する。そのような状況においては、「アクセラレータチップ」は、「SRAM」又は「フラッシュ」装置のようなシステムの方を向いているので容易に統合する。統合のために他の調節は何ら必要ではない。「アクセラレータチップ」は、それ自身のメモリコントローラを有し、それに応じて内部プログラムカウンタ(IPC)を通じて「アクセラレータの背後にある」メモリに直接アクセスする能力を有する。任意のプログラムカウンタの場合と同様に、「JP」は、取り込まれて実行される次の命令のアドレスを指し示す。これは、「アクセラレータチップ」がホストマイクロプロセッサと非同期かつ同時に作動することを可能にする。
【0067】
図8は、本発明の「アクセラレータチップ」の一例のためのアクセラレータピン機能の一例を示す表である。
【0068】
好ましい実施形態においては、プロセッサチップに達するピンとメモリに達するピンとは、バイパスモードに対してチップを通じた遅延を最小限に保つために、互いに近くに置かれる。
【0069】
図9は、「SOC」のようなプロセッサチップとメモリとの間に置かれたハードウェアクセラレータの一実施形態における異なるアクセス時間及びバス速度に対する待機状態を示す図である。尚、いくつかの場合は、プロセッサチップとメモリとの間の経路内にハードウェアクセラレータを導入することにより、アクセス時間に対して追加的な待機状態を加える必要がある。
【0070】
図10は、本発明の一実施形態によるハードウェアクセラレータの図である。ハードウェアクセラレータ100は、バイパス論理102を含む。これは、チップインタフェース104及びメモリインタフェース106上でシステムに接続する。メモリコントローラ108は、システムオンチップとハードウェアクセラレータとの間でメッセージを送るために使用されるインタフェースレジスタ110に相互接続される。メモリコントローラ108を通じて命令キャッシュ112に達する命令とデータキャッシュ114からのデータとは、メモリコントローラ108へ送られる。命令キャッシュ112からの中間言語命令は、ハードウェア変換プログラム114へ送られる。ハードウェア変換プログラム114は、中間言語命令を固有命令に変換し、変換された命令を実行エンジン116へ送る。この実施形態においては、実行エンジン116は、レジスタ読込み段116A、実行段116B、及びデータキャッシュ段116Cに分解される。
【0071】
図11は、「SRAM」メモリとインタフェースで接続するために使用されるハードウェアクセラレータ120の図である。一実施形態においては、「SRAM」メモリと「SDRAM」メモリとが大きく異なる可能性があるので、各タイプのメモリに対して専用のハードウェアクセラレータがある。図11は、命令キャッシュ、ハードウェアクセラレータ、データキャッシュ、実行エンジン、ハードウェアクセラレータの内部クロックが外部クロックと同期されるように内部クロックを設定するために使用される位相固定ループ(PLL)、インタフェースレジスタ、及び、「SRAM」スレーブインタフェース及び「SRAM」マスタインタフェースを含むハードウェアクセラレータを示す。「SRAM」スレーブインタフェースは、システムオンチップと相互接続し、「SRAM」マスタインタフェースは、メモリと相互接続する。図11に示す図は、システムオンチップとメモリとの間の接続が別々であり、別々のインタフェースを処理するという事実を強調している。従って、ハードウェアクセラレータとシステムオンチップとの相互作用、及びハードウェアクセラレータとメモリとの相互作用は、独立のオペレーションに対して同時に為されることが可能である。図示のシステムオンチップとハードウェアクセラレータとの相互接続は、アドレス線、データ線、バイト選択線、書込み使用可能化線、読込み使用可能化線、チップ選択線等々である。尚、非同期フラッシュピンは、プロセッサチップと非同期フラッシュユニットとの間に直接進むことができる。ハードウェアクセラレータチップは、システムオンチップのチップ選択メモリアドレス指定能力を変更することができる。一実施形態においては、任意選択のシステムオンチップメモリが、「SRAM」スレーブインタフェースに記憶される。ホストプロセッサは、ハードウェアクセラレータのインタフェースレジスタにより設定される実行モードを検査するために待機ループに入る。システムオンチップは、「SRAM」スレーブインタフェースからレジスタループ検査プログラムを取得する。ハードウェアクセラレータ120は、外部メモリ内のループプログラムにアクセスする「SOC」により割込まれることはなく、従って、外部メモリに記憶された中間言語プログラムをより効率的に作動させることができる。尚、ハードウェアクセラレータ120は、「JTAG」試験ユニットを含むことができる。
【0072】
図12は、ハードウェアクセラレータ130が「SDRAM」スレーブインタフェースと「SDRAM」マスタインタフェースとを含む本発明のシステムの一実施形態を示す。「SDRAM」に対する相互接続のための制御線は、「SRAM」に対する相互接続のための制御線と大きく異なり、それによって一実施形態内に2つの異なるバージョンのハードウェアクセラレータを有することに意味がある。「SDRAM」のための追加的な線は、行選択線、列選択線、及び書込み使用可能化線を含む。
【0073】
図13は、ホストハードウェアクセラレータ140の図を示す。この実施形態は、プロセッサチップからの16ビット相互接続と、ハードウェアクセラレータ140とメモリとの間の32ビット相互接続とを有する。メモリとハードウェアクセラレータとの間の相互接続は、プロセッサとメモリとの間の相互接続よりも高速度で作動することになる。プロセッサチップとメモリとの間でデータをバッファに入れることができるように、ホストアクセラレータ140内にはホストバーストバッファが含まれる。
【0074】
図14は、ハードウェアクセラレータ150が、グラフィックアクセラレータエンジン152と、「LCD」コントローラ及びディスプレイバッファ154とを含む実施形態を示す。これは、ハードウェアクセラレータ150が直接方式で「LCD」ディスプレイ156と対話することを可能にする。「Java」規格は、いくつかのライブラリを含む。これらのライブラリは、典型的には、装置が「Java」コード以外の異なるタイプのコードを実施するためにそれらを実行することができるように実装される。1つの新しいタイプのライブラリは、「LCD」ディスプレイのためのグラフィックを含む。例えば、低レベルイベントを処理して「LCD」ディスプレイ上に描くための図形呼出しを発する必要があるアプリケーションを書き込むために、キャンバスアプリケーションが使用される。そのようなアプリケーションは、典型的には、ゲームなどのために使用されるであろう。図14の実施形態においては、グラフィックアクセラレータエンジン152と、「LCD」制御及びディスプレイバッファエンジン154とがハードウェアクセラレータ150内に置かれるから、システムの制御は、プロセッサチップに渡される必要はない。グラフィック要素を作動させる場合はいつでも、従来のプログラムではなく「Java」プログラムが使用される。「LCD」ディスプレイ156を更新するためには、メモリに記憶された「Java」プログラムが使用される。一実施形態においては、「Java」プログラムは、そのプログラムが「LCD」グラフィックアクセラレータエンジン152に対するものであることを判断するために、ハードウェアクセラレータ150により使用される識別子バイトコードを使用する。その機能が「SOC」上で利用可能である場合は、「LCD」コントローラを同一チップ上に持つことは常に必要であるわけではない。この場合、グラフィックのみが依然としてアクセラレータ上に留まるであろう。グラフィックは、二次元グラフィック、及び三次元グラフィックに対するものとすることができる。更に、チップ上にビデオカメラインタフェースを含ませることもできる。このカメラインタフェースユニットは、ビデオユニットとインタフェースで接続することになり、そこで、ビデオ画像サイズをスケーリングすることができ、及び/又は色空間変換を適用することができる。アクセラレータチップ内にいくつかのレジスタを設定することにより、ディスプレイ上にある一定の配合及びウインドウ効果を提供するために映像とグラフィックとを融合させることが可能である。グラフィックユニットは、それ自身のフレームバッファと任意選択的に3D用の「Z」バッファとを有するであろう。効率を良くするために、アクセラレータチップ内にグラフィックフレームバッファを設け、システム「SRAM」又はシステム「SDRAM」内に「Z」バッファを設けることが最適であると考えられる。
【0075】
図15は、アクセラレータチップ162と、フラッシュチップ164と、「SRAM」チップ166とを含むチップスタックパッケージ160の図である。パッケージ内にアクセラレータチップ162とメモリチップ164及び166とを設けることにより、アクセラレータチップとメモリとを相互接続するためにパッケージに設ける必要のあるピンの数を減らすことができる。図15の例においては、ピンの数を減らしたことにより、一組のピンをバスデータ及び補助メモリ位置に対するアドレスのために使用することが可能になる。フラッシュメモリ及び「SRAM」チップと同じパッケージ上にアクセラレータチップを置くことにより、システムに対するメモリアクセス時間も短縮される。
【0076】
図16〜19は、本発明の一実施形態によるアクセラレータエンジンが、変換された中間言語命令、特に「Java」バイトコードを効率的に実行するように、アクセラレータエンジンに加えるのに有用な新たな命令を示す図である。図16〜19の実施形態は、ハードウェアクセラレータチップ内で使用することができるが、ハードウェア変換プログラム及び実行エンジンを使用した他のシステムと共に使用することもできる。
【0077】
図16Aは、変換された命令の演算を速める実行エンジンのための新たな命令を示す。これらの変換された命令を有することにより、変換された命令を実行する実行エンジンの作動を改善することができる。命令「SGTLT0」及び「SGTLT0U」は、レジスタに−1、0、又は1を次に書き込むために、前の演算における加算器/減算器のC、N、及びZ出力を使用する。これらの演算は、「Java」バイトコード「LCMP」の効率を改善する。境界検査演算(BNDCK)とレジスタヌル検査を備えた読込み及び記憶インデックス命令とは、インデックス付きアレーアクセスを行う「Java」バイトコードのための変換された命令の演算を速める。
【0078】
図16Bは、命令「SGTLT0」の演算を示す。最後の減算又は加算が1のZビットを生じた時、レジスタ内への出力は0である。前のZビットが0でありかつNビットが0である時、レジスタ内への出力は1である。Zビットが0であありかつNビットが1である時、レジスタ内への出力は−1である。
【0079】
図16Cは、符号なし演算が使用される命令「SGTLT0U」を示す。この例においては、Z値が高い場合は、レジスタに対する出力は0である。Z値が低い場合は、繰り上がりは0であり、レジスタに対する出力は−1である。Z値が低くかつ繰り上がりが1である場合は、レジスタに対する出力は1である。
【0080】
図16Dは、境界検査命令「BNDCK」を示す。この命令においては、インデックスがアレーサイズ値から減算される。インデックスがアレーサイズよりも大きい場合は、繰り上がりは1であり、例外が生成されることになる。インデックスがアレーサイズよりも小さい場合は、繰り上がりは0であり、例外は生じないことになる。
【0081】
図16Eは、インデックス演算に加えてヌル値に関してレジスタを検査するインデックス読込み及びインデックス記憶を含むインデックス付き命令を示す。この場合は、アレーポインタレジスタが0であるならば、例外が生じる。アレーポインタが0でないならば、例外は生じない。
【0082】
図17は、図16Aの新たな命令に対するシステムのいくつかの詳細を実施する実行エンジンの一例を示す。インデックス付き読込みに対しては、ゼロ検査論理170が、レジスタHのようなレジスタに記憶されたインデックスの値がゼロであるか否かを検査する。ゼロ検査使用可能化が設定されている場合(すなわち、命令が4つの命令「LDXNC」、「LWXNC」、「STXNC」、又は「SWXNC」の1つである場合)、ゼロ検査使用可能化は高く設定される。尚、読込みに対する他の演算は、この演算と同時に行うことができる。ゼロ検査論理170は、アレーに対するポインタが、アレーポインタに対するヌル値を表すゼロではないことを保証する。ポインタが正しく初期化された時は、値は0ではなく、従って値が0である時は、例外が生成される。
【0083】
加算器/減算器ユニット172は、結果を生み出し、また、N、Z、及びC論理174へ送られるN、Z、及びCビットも生み出す。境界検査の場合について言えば、境界検査論理176は、インデックスがアレーのサイズ内であるか否かを検査する。境界検査においては、インデックス値はアレーサイズから減算されて、インデックス値は1つのレジスタに記憶され、アレー値は別のレジスタに記憶される。繰り上がりが存在する場合は、これは例外を表しており、境界検査論理176は、境界検査が使用可能にされた時に範囲外インデックス例外を発生する。
【0084】
論理ユニット178は、新しい論理180を含む。この新しい論理180は、「SGTLT0」命令及び「SGTLT0U」命令を実行する。論理180は、前の減算又は加算からのN及びZ繰り上がりビットを使用する。図16A及び16Cに示すように、論理160は、1、0、又は−1を発生し、これらは次にマルチプレクサ(mux)182へ送られる。「SGTLT0」又は「SGTLT0U」命令が使用される時、論理180からの値は、mux182により選択される。
【0085】
図18Aは、「Java」バイトコード命令「IALOAD」を示す。スタックの上部2つのエントリは、インデックス及びアレー参照であって、これらは、アレー内へのインデックスオフセットにより指示された単一の値に変換される。図18Bに示すような従来の命令を使用して、アレー参照は、ヌルポインタ例外が発生されることになるか否かを調べるために0と比較される必要がある。次に、インデックスがアレー境界の外側にあるか否かを判断するために、分岐検査が行われる。インデックス値アドレスが計算され、次に、読込まれる。図18Cにおいては、新しい命令を使用して、「LWXNC」参照がアレーポインタを包含するレジスタに対してゼロ検査を行う。境界検査演算は、インデックスがアレーサイズ内であることを確実にする。その後に、アドレス及び読込みを判断するための加算が行われる。
【0086】
図19Aは、「LCMP」命令の演算を示しており、スタックの上部2つの値は、第1の値に対する2つのワードを含む。スタック上の第2の2つの値は、値1ワード1及び2を含んでおり、値1が値2と等しいか、値1が値2よりも大きいか、又は値1が値2よりも小さいかに基づいて整数結果が発生される。
【0087】
図19Bは、「Java」の「LCMP」命令の従来的な命令の実施を示す。尚、要求された時間を有する多数の分岐が必要とされる。
【0088】
図19Cにおいては、「SGTLT0U」命令の存在がコードの演算を単純化し、本発明のシステムの速度を速めることができる。
【0089】
ハードウェア変換プログラムは、上述の新たな命令内への変換のために使用可能にされる。これは、「Java」バイトコードからの変換をより効率的にする。
【0090】
本発明の「アクセラレータチップ」は、いくつかの利点を有する。この「アクセラレータチップ」は、ホストマイクロプロセッサがその割込みを行っている時、「Java」バイトコード命令を実行するために、システムメモリに直接アクセスし、「Java」ソフトウェア実行の速度を速めるのに貢献する。アクセラレータチップは、バイトコードを実行し、それらをコンパイルしないので、それは、追加的なメモリ要件を課さず、アヘッドオブタイム(AOT)又はジャストインタイム(JIT)コンパイル技術を使用するよりも廉価で効率のよい解決法となる。システムレベルのエネルギ使用は、より速い実行時間、減少されたメモリアクセス、及びアクセラレータチップ内に統合されたパワーマネージメントの組合せにより最小化される。バイトコードを実行していない時、「アクセラレータチップ」は、自動的にその節電スリープモードになる。アクセラレータチップは、データローカリゼーションを使用し、命令レベル並列処理(ILP)最適化は、最大の性能を達成する。アクセラレータチップ内に局所的に保持されたデータは、好ましくは、「Java」スタック上の最上部エントリと、「ILP」最適化の効力を増大させてシステムメモリに対するアクセスを減少させるローカル変数とを含む。これらの技術により、高速かつ一貫した実行が行われ、システムのエネルギ使用が減少する。これは、バイトコードをデータとして取り扱い、従って、それらの命令キャッシュからほとんど又は全く利益を導き出さないソフトウェア解釈に依存する典型的な市販マイクロプロセッサとは対照的である。また、「Java」バイトコードとそれらに付随するオペランドとは長さが変化するので、典型的なソフトウェアバイトコード解釈プログラムは、各「Java」バイトコード取出しサイクル、つまり性能及び電力消費に関して非効率な処理を完了するために、メモリからいくつかのデータアクセスを行わなくてはならない。「Java仮想マシン(JVM)」は、スタックベースマシンであって、ほとんどのソフトウェア解釈プログラムは、「Java」スタック全体をシステムメモリ内に置いており、各「Java」バイトコード命令を実行するためにいくつかの高価なメモリトランザクションを必要とする。バイトコード取出しの場合のように、メモリベース「Java」スタックを管理してこれと対話するために必要とされるメモリトランザクションは、性能の点で高価であり、システムの電力消費を増大させる。
【0091】
「アクセラレータチップ」は、直接に典型的なメモリシステム設計に対して容易にインタフェースで接続し、あらゆるシステムソフトウェアに対して十分に透過的であり、何らのポート又は新たな開発ツールを必要とすることなくその恩典をもたらす。「JVM」は、「Java」バイトコードの実行をアクセラレータチップ内に押し込めるために好ましくは変更されるが、全ての他のシステム構成要素及びソフトウェアは、その存在に気付かない。これは、任意の及び全ての市販の開発ツール、オペレーティングシステム、及び固有のアプリケーションソフトウェアが、何らの修正もなくかついかなる新しいツール又はソフトウェアを必要とすることもなく、そのまま作動することを可能にする。これは、オペレーティングシステムソフトウェア、常駐アプリケーション、デバッガ、シミュレータ、又は他の開発ツールへの投資を保存することでもある。アクセラレータチップの導入は、ホストマイクロプロセッサとシステムメモリとの間のメモリアクセスに対して透過的であるが、待機状態を導入する場合がある。「アクセラレータチップ」は、性能、装置サイズ、部品コスト、電力消費、組込みの容易さ、及び市場に出すまでの時間が重要な設計上の考慮事項である携帯/無線受話器、携帯情報端末、及び他の種類の「インターネット電気器具」に対して有用である。
【0092】
一実施形態においては、アクセラレータチップは、チップスタックとしてプロセッサチップと統合される。別の実施形態においては、アクセラレータチップは、メモリと同一のシリコン上に設けられる。代替的に、アクセラレータチップは、チップスタックとしてメモリと統合される。更に別の実施形態においては、プロセッサチップは、システムオンチップである。代替実施形態においては、システムオンチップは、セルラー電話に使用されるようになっている。
【0093】
一実施形態においては、アクセラレータチップは、「Java」バイトコード及び「C#/.NET」のための「MSIL」のような2つ又はそれ以上の中間言語の実行をサポートする。
【0094】
本発明の一実施形態においては、本システムは、少なくとも1つのメモリと、この少なくとも1つのメモリに作動可能に接続されたプロセッサチップと、アクセラレータチップとを含み、アクセラレータチップは、この少なくとも1つのメモリと作動可能に接続され、この少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも1つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、ハードウェアクセラレータは、中間言語命令を実行するための「Java」プロセッサのアクセラレータを含んでいる。
【0095】
本発明の更に別の実施形態においては、本システムは、少なくとも1つのメモリと、この少なくとも1つのメモリに作動可能に接続されたプロセッサチップと、この少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップとを含み、この少なくとも1つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも1つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、いくつかの命令は、コールバックを発生し、プロセッサチップ上で実行される。
【0096】
上述の実施形態を参照しながら本発明について説明したが、好ましい実施形態及び方法に対するこの説明は、限定的な意味に解釈されないものとする。例えば、本明細書の本文及び請求項で使用される「Java」という用語は、「Java」の後継プログラミング言語又は基本的な「Java」概念(仮想マシンの作動を指示するためのバイトコードのような汎用命令の使用)を使用した他のプログラミング言語を網羅するものと解釈されるべきである。本発明の全ての態様は、特定の説明又は本明細書に示した構成に限定されないということも理解すべきである。開示した発明の様々な実施形態の形態及び詳細のいくつかの修正、及び本発明の他の変形は、本発明の開示を参照すれば当業者には明らかであろう。従って、特許請求の範囲は、説明した実施形態の上述のあらゆる修正又は変形を、それらが本発明の真の精神及び範囲に入るものとして網羅するように考慮されている。
【図面の簡単な説明】
【0097】
【図1】本発明の一実施形態のシステムを示す図である。
【図2】本発明の一実施形態の「アクセラレータチップ」を示す図である。
【図3】本発明のシステムの別の実施形態を示す図である。
【図4A】本発明の一実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図4B】本発明の別の実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図5】本発明の「アクセラレータチップ」の一実施形態のパワーマネージメント方式を示す表である。
【図6】「アクセラレータチップ」により実行されるバイトコードのリスト、及び本発明のシステムの一実施形態に対するプロセッサチップへのコールバックを引き起こすバイトコードのリストの一例を示す表である。
【図7】本発明のシステムの一実施形態と共に使用することができるメモリユニットのための共通システムメモリ編成を示す図である。
【図8】本発明の「アクセラレータチップ」の一実施形態のためのピン機能の表である。
【図9】本発明の一実施形態に対するアクセラレータチップを通じた又はアクセラレータチップを用いない場合の異なるアクセス時間に対するメモリ待ち状態を示す図である。
【図10】本発明の一実施形態のアクセラレータチップの高レベルの図である。
【図11】アクセラレータチップが「SRAM」とインタフェースで接続しているシステムの図である。
【図12】「SDRAM」とインタフェースで接続したアクセラレータチップの図である。
【図13】システムオンチップよりもメモリに対するより大きなビットのインタフェースを有するアクセラレータチップを備えたシステムの図である。
【図14】「LCD」ディスプレイと相互接続されたグラフィックアクセラレータエンジンを含む「アクセラレータチップ」の図である。
【図15】ピンがフラッシュメモリ及び「SRAM」との相互接続専用である必要がないような、チップスタックパッケージ内のアクセラレータチップの使用を示す図である。
【図16A】本発明の一実施形態のアクセラレータエンジンの一実施形態のための新しい命令の図である。
【図16B】図16Aの新しい命令の演算を示す図である。
【図16C】図16Aの新しい命令の演算を示す図である。
【図16D】図16Aの新しい命令の演算を示す図である。
【図16E】図16Aの新しい命令の演算を示す図である。
【図17】図16Aの新しい命令に対する論理要素を示す、実行エンジンの一実施形態の図である。
【図18A】「Java」バイトコード命令を示す図である。
【図18B】「Java」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図18C】図18Aの「Java」バイトコード命令を実施するために図16Aの新しい命令を備えたマイクロコードを示す図である。
【図19A】「Java」バイトコード命令「LCMP」を示す図である。
【図19B】図19Aの「LCMP」の「Java」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図19C】図19Aの「Java」バイトコード命令「LCMP」を実施する新しい命令を備えたマイクロコードを示す図である。
【符号の説明】
【0098】
20 システム
22 アクセラレータチップ
24 メモリユニット
26 プロセッサチップ
30 メモリインタフェースユニット
34 ハードウェア変換プログラムユニット
36 実行エンジン
Claims (99)
- 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっている、
ことを特徴とするシステム。 - 前記中間言語命令で書かれたプログラムは、「Java」バイトコードであることを特徴とする請求項1に記載のシステム。
- 前記プロセッサは、修正「Java」仮想マシンを実行することを特徴とする請求項2に記載のシステム。
- 前記中間言語は、バイトコード形式であることを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、メモリバス上に配置されることを特徴とする請求項1に記載のシステム。
- 前記メモリは、複数のメモリユニットを含むことを特徴とする請求項1に記載のシステム。
- 前記メモリユニットは、スタティックランダムアクセスメモリを含むことを特徴とする請求項6に記載のシステム。
- 前記メモリユニットは、フラッシュメモリを含むことを特徴とする請求項6に記載のシステム。
- 前記プロセッサは、修正仮想マシンを実行することを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、ある一定のバイトコードを実行せず、前記プロセッサチップ上で作動する前記仮想マシンに対するコールバックを有することを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、低電力消費のスリープモードを有することを特徴とする請求項1に記載のシステム。
- 前記プロセッサチップは、システムオンチップであることを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、中間言語命令を固有命令に変換するようにされたハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された該固有命令を実行するようにされた実行ユニットとを含むことを特徴とする請求項1に記載のシステム。
- 前記ハードウェア変換プログラムユニットは、「Java」バイトコードを固有命令に変換するようにされていることを特徴とする請求項13に記載のシステム。
- 前記アクセラレータチップは、少なくとも1つのメモリに対する該アクセラレータチップのためのメモリアクセスを可能にするとともに、該少なくとも1つのメモリに対する前記プロセッサチップのためのアクセスを準備するようにされたインタフェースを含むことを特徴とする請求項1に記載のシステム。
- 前記インタフェースは、前記プロセッサチップに対する第1のインタフェースと前記メモリユニットに対する第2のインタフェースとを含み、
前記第1及び第2のインタフェースは、独立に作動するようになっていることを特徴とする請求項15に記載のシステム。 - 前記アクセラレータチップは、該アクセラレータチップ内で実行される命令を記憶するために作動可能に接続された命令キャッシュを含むことを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、該アクセラレータチップ内で実行される命令を記憶するために作動可能に接続された命令キャッシュを含むことを特徴とする請求項17に記載のシステム。
- 前記アクセラレータチップは、ハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された固有命令を実行するようになった専用実行ユニットとを含み、
前記専用実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行する、
ことを特徴とする請求項1に記載のシステム。 - 前記アクセラレータチップは、チップスタックとして前記プロセッサチップと統合されることを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、前記メモリと同じシリコン上にあることを特徴とする請求項1に記載のシステム。
- 前記アクセラレータチップは、チップスタックとして前記メモリと統合されることを特徴とする請求項1に記載のシステム。
- 前記プロセッサチップは、システムオンチップであることを特徴とする請求項1に記載のシステム。
- 前記システムオンチップは、セルラー電話に使用されるようになっていることを特徴とする請求項23に記載のシステム。
- 前記アクセラレータチップは、2つ又はそれ以上の中間言語の実行をサポートすることを特徴とする請求項1に記載のシステム。
- 前記中間言語は、「Java」バイトコードと「C#/.NET」のための「MSIL」とであることを特徴とする請求項25に記載のシステム。
- 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
前記ハードウェアクセラレータは、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された該固有命令を実行するようになった実行エンジンとを含む、
ことを特徴とするシステム。 - 前記中間命令言語で書かれたプログラムは、「Java」プログラムであり、
前記ハードウェア変換プログラムユニットは、「Java」バイトコードを固有命令に変換する、
ことを特徴とする請求項27に記載のシステム。 - 前記プロセッサは、修正「Java」仮想マシンを実行することを特徴とする請求項28に記載のシステム。
- 前記アクセラレータチップは、前記プロセッサチップと前記少なくとも1つのメモリとの間でメモリバス上に配置されることを特徴とする請求項27に記載のシステム。
- 前記メモリは、いくつかのメモリユニットを含むことを特徴とする請求項27に記載のシステム。
- 前記メモリユニットのうちの1つは、スタティックランダムアクセスメモリを含むことを特徴とする請求項31に記載のシステム。
- 前記メモリユニットのうちの少なくとも1つは、フラッシュメモリを含むことを特徴とする請求項31に記載のシステム。
- 前記プロセッサは、修正仮想マシンを実行することを特徴とする請求項27に記載のシステム。
- 前記アクセラレータチップは、ある一定の中間言語命令を実行せず、これらの中間言語命令が生じた時にコールバックが起り、
これらの中間言語命令は、前記プロセッサチップ上で作動する前記仮想マシン上で実行される、
ことを特徴とする請求項34に記載のシステム。 - 前記アクセラレータチップは、電力消費の低いスリープモードを有することを特徴とする請求項27に記載のシステム。
- 前記プロセッサチップは、システムオンチップであることを特徴とする請求項27に記載のシステム。
- 前記アクセラレータチップは、少なくとも1つのメモリに対する該アクセラレータチップのためのメモリアクセスを準備し、該少なくとも1つのメモリに対する前記プロセッサチップのためのメモリアクセスを準備するようになったインタフェースを含むことを特徴とする請求項27に記載のシステム。
- 前記アクセラレータチップは、前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される前記中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項27に記載のシステム。
- 前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行する専用実行エンジンであることを特徴とする請求項27に記載のシステム。
- 中間言語命令を実行するようになったユニットと、
インタフェースと、
を含み、
前記インタフェースは、少なくとも1つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも1つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになっている、
ことを特徴とするアクセラレータチップ。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項41に記載のアクセラレータチップ。
- ある一定の中間言語命令を実行しないが、その代わりに、前記別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項41に記載のアクセラレータチップ。
- 電力消費の低いスリープモードを有することを特徴とする請求項41に記載のアクセラレータチップ。
- 前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを含むことを特徴とする請求項41に記載のアクセラレータチップ。
- 前記ユニットは、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された固有命令を実行するようになった実行エンジンとを含むことを特徴とする請求項41に記載のアクセラレータチップ。
- 前記ユニットは、固有命令が前記中間言語命令である専用プロセッサを含むことを特徴とする請求項41に記載のアクセラレータチップ。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも1つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも1つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
を含むことを特徴とするアクセラレータチップ。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項48に記載のアクセラレータチップ。
- アクセラレータチップが全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令が、修正仮想マシンを作動させる前記別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項48に記載のアクセラレータチップ。
- 電力消費の低いスリープモードを有することを特徴とする請求項48に記載のアクセラレータチップ。
- 前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項48に記載のアクセラレータチップ。
- 前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された固有命令のみを実行する専用実行エンジンであることを特徴とする請求項48に記載のアクセラレータチップ。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも1つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも1つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
を含むことを特徴とするアクセラレータチップ。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項47に記載のアクセラレータチップ。
- 全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令については、修正仮想マシンを作動させるプロセッサに対するコールバックを引き起こすことを特徴とする請求項54に記載のアクセラレータチップ。
- 電力消費の低いスリープモードを有することを特徴とする請求項54に記載のアクセラレータチップ。
- 前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行するようになった専用実行エンジンであることを特徴とする請求項54に記載のアクセラレータチップ。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった、該ハードウェア変換プログラムユニットにより供給された命令のみを実行する専用実行エンジンと、
を含み、
前記実行エンジンではなく前記ハードウェア変換プログラムユニットが、変換する次の中間言語命令のアドレスを判断して該専用実行エンジンに供給する、
ことを特徴とするアクセラレータチップ。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項59に記載のアクセラレータチップ。
- アクセラレータチップが全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令が、解釈のための修正仮想マシンを作動させる別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項59に記載のアクセラレータチップ。
- 電力消費の低いスリープモードを含むことを特徴とする請求項59に記載のアクセラレータチップ。
- 少なくとも1つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも1つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースを含むことを特徴とする請求項59に記載のアクセラレータチップ。
- 前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項59に記載のアクセラレータチップ。
- ハードウェア変換プログラムユニットにおいて、実行する中間言語命令のアドレスを計算する段階と、
前記中間言語命令をメモリから取得する段階と、
前記ハードウェア変換プログラムユニットにおいて、前記中間言語命令を固有命令に変換する段階と、
前記固有命令を実行エンジンに供給する段階と、
前記実行エンジンにおいて、前記固有命令を実行する段階と、
を含み、
少なくとも1つの中間言語命令に対して、該中間言語命令を処理するために、仮想マシンを作動させる別のプロセッサチップに対するコールバックが行われる、
ことを特徴とする、アクセラレータチップを作動させる方法。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項65に記載の方法。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも1つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも1つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
ディスプレイに相互接続されるようになった、表示に関する中間言語命令を実行するグラフィック加速エンジンと、
を含むことを特徴とするアクセラレータチップ。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項67に記載のアクセラレータチップ。
- 「Java」ベースのライブラリが使用されることを特徴とする請求項68に記載のアクセラレータチップ。
- 前記「Java」ベースのライブラリは、「Java」ベースのプログラムを含むことを特徴とする請求項69に記載のシステム。
- 前記「Java」ベースのプログラムは、修正された「Java」プログラムであることを特徴とする請求項70に記載のシステム。
- 前記ディスプレイは、「LCD」ディスプレイであり、
前記グラフィック加速エンジンは、「LCD」ディスプレイを実行する、
ことを特徴とする請求項67に記載のアクセラレータチップ。 - 前記グラフィック加速エンジンは、「Java」の「LCD」ディスプレイライブラリ機能を実行することを特徴とする請求項72に記載のアクセラレータチップ。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、アレーからインデックス付き読込みを行うか、又はアレー内に記憶するための少なくとも1つのインデックス付き命令を含み、
前記命令は、アレーポインタを記憶する第1のレジスタを同時に検査して、それがヌルであるか否かを調べる、
ことを特徴とするシステム。 - 前記ハードウェア変換プログラムユニット及び前記実行エンジンは、アクセラレータチップ上に配置されることを特徴とする請求項74に記載のシステム。
- アクセラレータチップが、プロセッサチップとメモリとの間に配置されることを特徴とする請求項74に記載のシステム。
- 前記中間言語命令は、「Java」命令であることを特徴とする請求項74に記載のシステム。
- 前記ハードウェア変換プログラムユニットは、少なくとも1つのインデックス命令を使用するために、いくつかのアレー読込み及びアレー記憶命令を変換することを特徴とする請求項74に記載のシステム。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、アレーからインデックス付き読込みを行うか、又はアレー内に記憶するための少なくとも1つのインデックス付き命令を含み、また、第1のレジスタがアレーポインタを記憶しているか否かを検査して、それがヌルであるか否かを調べるようになったゼロ検査ユニットを有し、
前記実行エンジンの前記ヌル検査ユニットは、アレーから前記インデックス付き読込みを行うか、又はアレー内に記憶する該実行エンジンの部分と同時に作動する、
ことを特徴とするシステム。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項79に記載のシステム。
- 前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップ上にあることを特徴とする請求項79に記載のシステム。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、少なくとも1つの境界検査命令を含み、
前記境界検査命令は、第1のレジスタに記憶されたインデックス値が、第2のレジスタに記憶されたアレー長さの値よりも小さいか又は等しいことを保証する、
ことを特徴とするシステム。 - 前記中間言語命令は、「Java」バイトコードであることを特徴とする請求項82に記載のシステム。
- 前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップの一部であることを特徴とする請求項82に記載のシステム。
- 前記アクセラレータチップは、プロセッサチップとメモリとの間に配置されることを特徴とする請求項84に記載のシステム。
- 中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、最終の加算又は減算からの値に基づいて、レジスタに1、0、又は−1を記憶する命令を含む、
ことを特徴とするシステム。 - 前記値は、Nビット、Zビット、及び繰り上がりビットを含むことを特徴とする請求項86に記載のシステム。
- 符号付き命令は、Z及びNビットを検査し、
Zビットが高い場合は、0が前記レジスタに入れられ、
Zビットが低く、かつNも低い場合は、1が前記レジスタに入れられ、
Zビットが低く、かつNが高い場合は、−1が前記レジスタに入れられる、
ことを特徴とする請求項86に記載のシステム。 - 符号なし命令検査が、Z及びCビットを検査するために行われ、
Zビットが高い場合は、0が前記レジスタに入れられ、
Zビットが低く,かつCが高い場合は、1が前記レジスタに入れられ、
Zビットが低く、かつCも低い場合は、−1が前記レジスタに入れられる、
ことを特徴とする請求項86に記載のシステム。 - 符号付き及び符号なし検査の両方が行われることを特徴とする請求項86に記載のシステム。
- 前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップ上にあることを特徴とする請求項86に記載のシステム。
- 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
前記ハードウェアクセラレータは、中間言語命令を実行するための「Java」プロセッサのアクセラレータを含む、
ことを特徴とするシステム。 - 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
いくつかの命令は、コールバックを発生して、前記プロセッサチップ上で実行される、
ことを特徴とするシステム。 - レジスタのシステムが、コールバックに対する「SoC」とアクセラレータとの間で情報を転送するために使用されることを特徴とする請求項93に記載のシステム。
- 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、
前記アクセラレータチップの用途は、セル電話又は移動携帯装置内である、
ことを特徴とするシステム。 - 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、
前記アクセラレータは、同じパッケージ内で「SoC」上に積み重ねられる、
ことを特徴とするシステム。 - 前記アクセラレータチップの用途は、セル電話又は移動携帯装置内であることを特徴とする請求項96に記載のシステム。
- 少なくとも1つのメモリと、
前記少なくとも1つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも1つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも1つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも1つのメモリに対する直接アクセスを有し、
前記アクセラレータは、同じパッケージ内に1つ又はそれ以上のメモリと共に積み重ねられる、
ことを特徴とするシステム。 - 前記アクセラレータチップの用途は、セル電話又は移動携帯装置内であることを特徴とする請求項98に記載のシステム。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US30289101P | 2001-07-02 | 2001-07-02 | |
US30637601P | 2001-07-17 | 2001-07-17 | |
US10/187,858 US20030023958A1 (en) | 2001-07-17 | 2002-06-27 | Intermediate language accelerator chip |
PCT/US2002/020992 WO2003014921A1 (en) | 2001-07-02 | 2002-07-02 | Intermediate language accelerator chip |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004522236A true JP2004522236A (ja) | 2004-07-22 |
JP2004522236A5 JP2004522236A5 (ja) | 2006-01-05 |
Family
ID=32074255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003519785A Pending JP2004522236A (ja) | 2001-07-02 | 2002-07-02 | 中間言語アクセラレータチップ |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP1412852A1 (ja) |
JP (1) | JP2004522236A (ja) |
KR (1) | KR20040034620A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006323844A (ja) * | 2005-05-19 | 2006-11-30 | Samsung Electronics Co Ltd | ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法 |
WO2010016299A1 (ja) * | 2008-08-07 | 2010-02-11 | 三菱電機株式会社 | 半導体集積回路装置、設備機器制御装置、及び機器状態表示装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100597414B1 (ko) | 2004-10-21 | 2006-07-05 | 삼성전자주식회사 | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 |
KR101407629B1 (ko) | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
-
2002
- 2002-07-02 EP EP02752154A patent/EP1412852A1/en not_active Withdrawn
- 2002-07-02 KR KR10-2003-7017332A patent/KR20040034620A/ko not_active Application Discontinuation
- 2002-07-02 JP JP2003519785A patent/JP2004522236A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006323844A (ja) * | 2005-05-19 | 2006-11-30 | Samsung Electronics Co Ltd | ジャバ仮想マシンでバイトコードの実行時間を短縮するシステム及び方法 |
WO2010016299A1 (ja) * | 2008-08-07 | 2010-02-11 | 三菱電機株式会社 | 半導体集積回路装置、設備機器制御装置、及び機器状態表示装置 |
JP5355573B2 (ja) * | 2008-08-07 | 2013-11-27 | 三菱電機株式会社 | 半導体集積回路装置及び設備機器制御装置 |
US8823723B2 (en) | 2008-08-07 | 2014-09-02 | Mitsubishi Electric Corporation | Semiconductor integrated circuit device, facility appliance control device, and appliance state display apparatus |
Also Published As
Publication number | Publication date |
---|---|
KR20040034620A (ko) | 2004-04-28 |
EP1412852A1 (en) | 2004-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20120032965A1 (en) | Intermediate language accelerator chip | |
US6332215B1 (en) | Java virtual machine hardware for RISC and CISC processors | |
JP4171496B2 (ja) | スタックを用いる演算マシンのための命令フォールディング処理 | |
US6349377B1 (en) | Processing device for executing virtual machine instructions that includes instruction refeeding means | |
US5937193A (en) | Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof | |
US8473718B2 (en) | Java hardware accelerator using microcode engine | |
JP4485198B2 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
EP1447742A1 (en) | Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor | |
WO2000034844A9 (en) | Java virtual machine hardware for risc and cisc processors | |
EP0938703A4 (en) | REAL TIME PROGRAMMING LANGUAGE ACCELERATOR | |
US8769508B2 (en) | Virtual machine hardware for RISC and CISC processors | |
JP2000515270A (ja) | ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ | |
JP2004519775A (ja) | スイッチ命令処理ロジックによるバイトコード命令処理装置 | |
US20040215444A1 (en) | Hardware-translator-based custom method invocation system and method | |
Dolle et al. | A 32-b RISC/DSP microprocessor with reduced complexity | |
JP2004522236A (ja) | 中間言語アクセラレータチップ | |
WO2003014921A1 (en) | Intermediate language accelerator chip | |
JPH04104350A (ja) | マイクロプロセッサ | |
Säntti et al. | Java Co-Processor for Embedded Systems | |
Yan et al. | An accelerator design for speedup of Java execution in consumer mobile devices | |
JPH06266553A (ja) | 計算機システム | |
Xin et al. | The architecture of the Java extension of 32-bit RISC for smart cards and other embedded systems | |
Yamada et al. | A Hardware Accelerator for Java TM Platforms on a 130-nm Embedded Processor Core | |
Bhaskaran et al. | RISC and DSP Cores |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050701 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050701 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080616 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20081208 |