(57)【要約】【課題】アクセラレータチップを提供する。【解決手段】アクセラレータチップは、プロセッサチップとメモリ（２６）との間に配置することができる。アクセラレータチップは、「Ｊａｖａ」プログラムのプロセッサチップ（２４）に対する部分（２２）を実行することにより、「Ｊａｖａ」プログラムの作動を強化する。好ましい実施形態においては、アクセラレータチップは、ハードウェア変換プログラムユニット及び専用実行エンジンを含む。【特許請求の範囲】
【請求項１】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっている、
ことを特徴とするシステム。
【請求項２】
前記中間言語命令で書かれたプログラムは、「Ｊａｖａ」バイトコードであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記プロセッサは、修正「Ｊａｖａ」仮想マシンを実行することを特徴とする請求項２に記載のシステム。
【請求項４】
前記中間言語は、バイトコード形式であることを特徴とする請求項１に記載のシステム。
【請求項５】
前記アクセラレータチップは、メモリバス上に配置されることを特徴とする請求項１に記載のシステム。
【請求項６】
前記メモリは、複数のメモリユニットを含むことを特徴とする請求項１に記載のシステム。
【請求項７】
前記メモリユニットは、スタティックランダムアクセスメモリを含むことを特徴とする請求項６に記載のシステム。
【請求項８】
前記メモリユニットは、フラッシュメモリを含むことを特徴とする請求項６に記載のシステム。
【請求項９】
前記プロセッサは、修正仮想マシンを実行することを特徴とする請求項１に記載のシステム。
【請求項１０】
前記アクセラレータチップは、ある一定のバイトコードを実行せず、前記プロセッサチップ上で作動する前記仮想マシンに対するコールバックを有することを特徴とする請求項１に記載のシステム。
【請求項１１】
前記アクセラレータチップは、低電力消費のスリープモードを有することを特徴とする請求項１に記載のシステム。
【請求項１２】
前記プロセッサチップは、システムオンチップであることを特徴とする請求項１に記載のシステム。
【請求項１３】
前記アクセラレータチップは、中間言語命令を固有命令に変換するようにされたハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された該固有命令を実行するようにされた実行ユニットとを含むことを特徴とする請求項１に記載のシステム。
【請求項１４】
前記ハードウェア変換プログラムユニットは、「Ｊａｖａ」バイトコードを固有命令に変換するようにされていることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記アクセラレータチップは、少なくとも１つのメモリに対する該アクセラレータチップのためのメモリアクセスを可能にするとともに、該少なくとも１つのメモリに対する前記プロセッサチップのためのアクセスを準備するようにされたインタフェースを含むことを特徴とする請求項１に記載のシステム。
【請求項１６】
前記インタフェースは、前記プロセッサチップに対する第１のインタフェースと前記メモリユニットに対する第２のインタフェースとを含み、
前記第１及び第２のインタフェースは、独立に作動するようになっていることを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記アクセラレータチップは、該アクセラレータチップ内で実行される命令を記憶するために作動可能に接続された命令キャッシュを含むことを特徴とする請求項１に記載のシステム。
【請求項１８】
前記アクセラレータチップは、該アクセラレータチップ内で実行される命令を記憶するために作動可能に接続された命令キャッシュを含むことを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記アクセラレータチップは、ハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された固有命令を実行するようになった専用実行ユニットとを含み、
前記専用実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行する、
ことを特徴とする請求項１に記載のシステム。
【請求項２０】
前記アクセラレータチップは、チップスタックとして前記プロセッサチップと統合されることを特徴とする請求項１に記載のシステム。
【請求項２１】
前記アクセラレータチップは、前記メモリと同じシリコン上にあることを特徴とする請求項１に記載のシステム。
【請求項２２】
前記アクセラレータチップは、チップスタックとして前記メモリと統合されることを特徴とする請求項１に記載のシステム。
【請求項２３】
前記プロセッサチップは、システムオンチップであることを特徴とする請求項１に記載のシステム。
【請求項２４】
前記システムオンチップは、セルラー電話に使用されるようになっていることを特徴とする請求項２３に記載のシステム。
【請求項２５】
前記アクセラレータチップは、２つ又はそれ以上の中間言語の実行をサポートすることを特徴とする請求項１に記載のシステム。
【請求項２６】
前記中間言語は、「Ｊａｖａ」バイトコードと「Ｃ＃／．ＮＥＴ」のための「ＭＳＩＬ」とであることを特徴とする請求項２５に記載のシステム。
【請求項２７】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
前記ハードウェアクセラレータは、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された該固有命令を実行するようになった実行エンジンとを含む、
ことを特徴とするシステム。
【請求項２８】
前記中間命令言語で書かれたプログラムは、「Ｊａｖａ」プログラムであり、
前記ハードウェア変換プログラムユニットは、「Ｊａｖａ」バイトコードを固有命令に変換する、
ことを特徴とする請求項２７に記載のシステム。
【請求項２９】
前記プロセッサは、修正「Ｊａｖａ」仮想マシンを実行することを特徴とする請求項２８に記載のシステム。
【請求項３０】
前記アクセラレータチップは、前記プロセッサチップと前記少なくとも１つのメモリとの間でメモリバス上に配置されることを特徴とする請求項２７に記載のシステム。
【請求項３１】
前記メモリは、いくつかのメモリユニットを含むことを特徴とする請求項２７に記載のシステム。
【請求項３２】
前記メモリユニットのうちの１つは、スタティックランダムアクセスメモリを含むことを特徴とする請求項３１に記載のシステム。
【請求項３３】
前記メモリユニットのうちの少なくとも１つは、フラッシュメモリを含むことを特徴とする請求項３１に記載のシステム。
【請求項３４】
前記プロセッサは、修正仮想マシンを実行することを特徴とする請求項２７に記載のシステム。
【請求項３５】
前記アクセラレータチップは、ある一定の中間言語命令を実行せず、これらの中間言語命令が生じた時にコールバックが起り、
これらの中間言語命令は、前記プロセッサチップ上で作動する前記仮想マシン上で実行される、
ことを特徴とする請求項３４に記載のシステム。
【請求項３６】
前記アクセラレータチップは、電力消費の低いスリープモードを有することを特徴とする請求項２７に記載のシステム。
【請求項３７】
前記プロセッサチップは、システムオンチップであることを特徴とする請求項２７に記載のシステム。
【請求項３８】
前記アクセラレータチップは、少なくとも１つのメモリに対する該アクセラレータチップのためのメモリアクセスを準備し、該少なくとも１つのメモリに対する前記プロセッサチップのためのメモリアクセスを準備するようになったインタフェースを含むことを特徴とする請求項２７に記載のシステム。
【請求項３９】
前記アクセラレータチップは、前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される前記中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項２７に記載のシステム。
【請求項４０】
前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行する専用実行エンジンであることを特徴とする請求項２７に記載のシステム。
【請求項４１】
中間言語命令を実行するようになったユニットと、
インタフェースと、
を含み、
前記インタフェースは、少なくとも１つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも１つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになっている、
ことを特徴とするアクセラレータチップ。
【請求項４２】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４３】
ある一定の中間言語命令を実行しないが、その代わりに、前記別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４４】
電力消費の低いスリープモードを有することを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４５】
前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを含むことを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４６】
前記ユニットは、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、該ハードウェア変換プログラムユニットにより供給された固有命令を実行するようになった実行エンジンとを含むことを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４７】
前記ユニットは、固有命令が前記中間言語命令である専用プロセッサを含むことを特徴とする請求項４１に記載のアクセラレータチップ。
【請求項４８】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも１つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも１つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
を含むことを特徴とするアクセラレータチップ。
【請求項４９】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項４８に記載のアクセラレータチップ。
【請求項５０】
アクセラレータチップが全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令が、修正仮想マシンを作動させる前記別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項４８に記載のアクセラレータチップ。
【請求項５１】
電力消費の低いスリープモードを有することを特徴とする請求項４８に記載のアクセラレータチップ。
【請求項５２】
前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項４８に記載のアクセラレータチップ。
【請求項５３】
前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された固有命令のみを実行する専用実行エンジンであることを特徴とする請求項４８に記載のアクセラレータチップ。
【請求項５４】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも１つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも１つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
を含むことを特徴とするアクセラレータチップ。
【請求項５５】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項４７に記載のアクセラレータチップ。
【請求項５６】
全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令については、修正仮想マシンを作動させるプロセッサに対するコールバックを引き起こすことを特徴とする請求項５４に記載のアクセラレータチップ。
【請求項５７】
電力消費の低いスリープモードを有することを特徴とする請求項５４に記載のアクセラレータチップ。
【請求項５８】
前記実行エンジンは、前記ハードウェア変換プログラムユニットにより供給された命令のみを実行するようになった専用実行エンジンであることを特徴とする請求項５４に記載のアクセラレータチップ。
【請求項５９】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった、該ハードウェア変換プログラムユニットにより供給された命令のみを実行する専用実行エンジンと、
を含み、
前記実行エンジンではなく前記ハードウェア変換プログラムユニットが、変換する次の中間言語命令のアドレスを判断して該専用実行エンジンに供給する、
ことを特徴とするアクセラレータチップ。
【請求項６０】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項５９に記載のアクセラレータチップ。
【請求項６１】
アクセラレータチップが全ての中間言語命令を実行するわけではなく、いくつかの中間言語命令が、解釈のための修正仮想マシンを作動させる別のプロセッサチップに対するコールバックを引き起こすことを特徴とする請求項５９に記載のアクセラレータチップ。
【請求項６２】
電力消費の低いスリープモードを含むことを特徴とする請求項５９に記載のアクセラレータチップ。
【請求項６３】
少なくとも１つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも１つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースを含むことを特徴とする請求項５９に記載のアクセラレータチップ。
【請求項６４】
前記ハードウェア変換プログラムユニットに作動可能に接続された、変換される中間言語命令を記憶する命令キャッシュを更に含むことを特徴とする請求項５９に記載のアクセラレータチップ。
【請求項６５】
ハードウェア変換プログラムユニットにおいて、実行する中間言語命令のアドレスを計算する段階と、
前記中間言語命令をメモリから取得する段階と、
前記ハードウェア変換プログラムユニットにおいて、前記中間言語命令を固有命令に変換する段階と、
前記固有命令を実行エンジンに供給する段階と、
前記実行エンジンにおいて、前記固有命令を実行する段階と、
を含み、
少なくとも１つの中間言語命令に対して、該中間言語命令を処理するために、仮想マシンを作動させる別のプロセッサチップに対するコールバックが行われる、
ことを特徴とする、アクセラレータチップを作動させる方法。
【請求項６６】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項６５に記載の方法。
【請求項６７】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
少なくとも１つのメモリに対するアクセラレータチップのためのメモリアクセスを準備し、かつ、該少なくとも１つのメモリに対する別のプロセッサチップのためのメモリアクセスを準備するようになったインタフェースと、
ディスプレイに相互接続されるようになった、表示に関する中間言語命令を実行するグラフィック加速エンジンと、
を含むことを特徴とするアクセラレータチップ。
【請求項６８】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項６７に記載のアクセラレータチップ。
【請求項６９】
「Ｊａｖａ」ベースのライブラリが使用されることを特徴とする請求項６８に記載のアクセラレータチップ。
【請求項７０】
前記「Ｊａｖａ」ベースのライブラリは、「Ｊａｖａ」ベースのプログラムを含むことを特徴とする請求項６９に記載のシステム。
【請求項７１】
前記「Ｊａｖａ」ベースのプログラムは、修正された「Ｊａｖａ」プログラムであることを特徴とする請求項７０に記載のシステム。
【請求項７２】
前記ディスプレイは、「ＬＣＤ」ディスプレイであり、
前記グラフィック加速エンジンは、「ＬＣＤ」ディスプレイを実行する、
ことを特徴とする請求項６７に記載のアクセラレータチップ。
【請求項７３】
前記グラフィック加速エンジンは、「Ｊａｖａ」の「ＬＣＤ」ディスプレイライブラリ機能を実行することを特徴とする請求項７２に記載のアクセラレータチップ。
【請求項７４】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、アレーからインデックス付き読込みを行うか、又はアレー内に記憶するための少なくとも１つのインデックス付き命令を含み、
前記命令は、アレーポインタを記憶する第１のレジスタを同時に検査して、それがヌルであるか否かを調べる、
ことを特徴とするシステム。
【請求項７５】
前記ハードウェア変換プログラムユニット及び前記実行エンジンは、アクセラレータチップ上に配置されることを特徴とする請求項７４に記載のシステム。
【請求項７６】
アクセラレータチップが、プロセッサチップとメモリとの間に配置されることを特徴とする請求項７４に記載のシステム。
【請求項７７】
前記中間言語命令は、「Ｊａｖａ」命令であることを特徴とする請求項７４に記載のシステム。
【請求項７８】
前記ハードウェア変換プログラムユニットは、少なくとも１つのインデックス命令を使用するために、いくつかのアレー読込み及びアレー記憶命令を変換することを特徴とする請求項７４に記載のシステム。
【請求項７９】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、アレーからインデックス付き読込みを行うか、又はアレー内に記憶するための少なくとも１つのインデックス付き命令を含み、また、第１のレジスタがアレーポインタを記憶しているか否かを検査して、それがヌルであるか否かを調べるようになったゼロ検査ユニットを有し、
前記実行エンジンの前記ヌル検査ユニットは、アレーから前記インデックス付き読込みを行うか、又はアレー内に記憶する該実行エンジンの部分と同時に作動する、
ことを特徴とするシステム。
【請求項８０】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項７９に記載のシステム。
【請求項８１】
前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップ上にあることを特徴とする請求項７９に記載のシステム。
【請求項８２】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、少なくとも１つの境界検査命令を含み、
前記境界検査命令は、第１のレジスタに記憶されたインデックス値が、第２のレジスタに記憶されたアレー長さの値よりも小さいか又は等しいことを保証する、
ことを特徴とするシステム。
【請求項８３】
前記中間言語命令は、「Ｊａｖａ」バイトコードであることを特徴とする請求項８２に記載のシステム。
【請求項８４】
前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップの一部であることを特徴とする請求項８２に記載のシステム。
【請求項８５】
前記アクセラレータチップは、プロセッサチップとメモリとの間に配置されることを特徴とする請求項８４に記載のシステム。
【請求項８６】
中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、
前記ハードウェア変換プログラムユニットにより供給された前記固有命令を実行するようになった実行エンジンと、
を含み、
前記実行エンジンは、最終の加算又は減算からの値に基づいて、レジスタに１、０、又は−１を記憶する命令を含む、
ことを特徴とするシステム。
【請求項８７】
前記値は、Ｎビット、Ｚビット、及び繰り上がりビットを含むことを特徴とする請求項８６に記載のシステム。
【請求項８８】
符号付き命令は、Ｚ及びＮビットを検査し、
Ｚビットが高い場合は、０が前記レジスタに入れられ、
Ｚビットが低く、かつＮも低い場合は、１が前記レジスタに入れられ、
Ｚビットが低く、かつＮが高い場合は、−１が前記レジスタに入れられる、
ことを特徴とする請求項８６に記載のシステム。
【請求項８９】
符号なし命令検査が、Ｚ及びＣビットを検査するために行われ、
Ｚビットが高い場合は、０が前記レジスタに入れられ、
Ｚビットが低く，かつＣが高い場合は、１が前記レジスタに入れられ、
Ｚビットが低く、かつＣも低い場合は、−１が前記レジスタに入れられる、
ことを特徴とする請求項８６に記載のシステム。
【請求項９０】
符号付き及び符号なし検査の両方が行われることを特徴とする請求項８６に記載のシステム。
【請求項９１】
前記ハードウェア変換プログラムユニット及び実行エンジンは、アクセラレータチップ上にあることを特徴とする請求項８６に記載のシステム。
【請求項９２】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続されたアクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
前記ハードウェアクセラレータは、中間言語命令を実行するための「Ｊａｖａ」プロセッサのアクセラレータを含む、
ことを特徴とするシステム。
【請求項９３】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、また、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、
いくつかの命令は、コールバックを発生して、前記プロセッサチップ上で実行される、
ことを特徴とするシステム。
【請求項９４】
レジスタのシステムが、コールバックに対する「ＳｏＣ」とアクセラレータとの間で情報を転送するために使用されることを特徴とする請求項９３に記載のシステム。
【請求項９５】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、
前記アクセラレータチップの用途は、セル電話又は移動携帯装置内である、
ことを特徴とするシステム。
【請求項９６】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、
前記アクセラレータは、同じパッケージ内で「ＳｏＣ」上に積み重ねられる、
ことを特徴とするシステム。
【請求項９７】
前記アクセラレータチップの用途は、セル電話又は移動携帯装置内であることを特徴とする請求項９６に記載のシステム。
【請求項９８】
少なくとも１つのメモリと、
前記少なくとも１つのメモリと作動可能に接続されたプロセッサチップと、
前記少なくとも１つのメモリと作動可能に接続された中間言語アクセラレータチップと、
を含み、
前記少なくとも１つのメモリに対する前記プロセッサチップのメモリアクセスは、前記アクセラレータチップを通じて送られ、
前記アクセラレータチップは、前記少なくとも１つのメモリに対する直接アクセスを有し、
前記アクセラレータは、同じパッケージ内に１つ又はそれ以上のメモリと共に積み重ねられる、
ことを特徴とするシステム。
【請求項９９】
前記アクセラレータチップの用途は、セル電話又は移動携帯装置内であることを特徴とする請求項９８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、「アクセラレータチップ」に関する。
【背景技術】
【０００２】
「Ｊａｖａ（登録商標）」は、サン・マイクロシステムズにより開発されたオブジェクト指向プログラミング言語である。「Ｊａｖａ」言語は、ソースレベルにおいてもバイナリレベルにおいても、小さく、単純で、プラットフォーム間及びオペレーティングシステム間で移植可能である。このことが、「Ｊａｖａ」プログラミング言語を「インターネット」上で非常に普及させている。
【０００３】
このように「Ｊａｖａ」がプラットフォームに依存しないこと、そしてコードがコンパクトであることは、従来のプログラミング言語に勝る「Ｊａｖａ」の最も重要な利点である。従来のプログラミング言語では、プログラムのソースコードはコンパイラへ送られ、そこで機械コード又はプロセッサ命令へ変換される。プロセッサ命令は、システムのプロセッサに固有のものである。コードが「インテル」社製用のシステム上でコンパイルされた場合は、得られたプログラムは「インテル」を使用したシステム上でのみ実行されることになる。プログラムを別のシステム上で実行させることが必要な場合、ユーザは、元のソースコードへ戻り、新たなプロセッサのためのコンパイラを取得して、プログラムをその別のプロセッサに特有の機械コードへと再度コンパイルしなくてはならない。
【０００４】
「Ｊａｖａ」の動作はこれとは異なる。「Ｊａｖａ」コンパイラは、「Ｊａｖａ」プログラムを取得すると、特定プロセッサのための機械コードを生成する代わりに、バイトコードを生成する。バイトコードは、機械コードに似た命令であるが、いかなるプロセッサにも特有のものではない。「Ｊａｖａ」プログラムを実行する場合は、バイトコード解釈プログラムは、「Ｊａｖａ」バイトコードを取得し、それらを対応する固有のプロセッサ命令に変換して実行する。「Ｊａｖａ」バイトコード解釈プログラムは、「Ｊａｖａ仮想マシン（ＪＶＭ）」の構成要素の一つである。
【０００５】
バイトコードの形式で「Ｊａｖａ」プログラムを有していれば、いずれか一つのシステムに固有というのではなく、「Ｊａｖａ仮想マシン」が利用可能である限り任意のプラットフォーム及び任意のオペレーティングシステム上で実行可能となる。これにより、バイナリバイトコードファイルが複数のプラットフォーム間で実行可能となる。
【０００６】
バイトコードを使用することの欠点は、実行速度である。ハードウェアによってコンパイルされハードウェア上で直接実行されるそのシステム固有のプログラムは、「Ｊａｖａ」バイトコードよりもずっと速く実行される。これは、「Ｊａｖａ」のバイトコードは「ＪＡＶＡ仮想マシン」によって処理する必要があるからである。プロセッサは、「Ｊａｖａ」バイトコードを「Ｊａｖａ仮想マシン」の固有命令に変換して、かつその固有命令を実行しなくてはならない。
【０００７】
このような「Ｊａｖａ」ソフトウェアの性能の低さは、特に内蔵型システム設計においては公知の問題であって、性能を上げるためにいくつかの技術が導入されてきた。しかしながら、これらの技術は望ましくない別の副作用も引き起こす。最も一般的な技術として、システム及び／又はマイクロプロセッサのクロック周波数を増大し、「Ｊａｖａ」バイトコードをコンパイルするように「ＪＶＭ」を修正し、専用「Ｊａｖａ」マイクロプロセッサを使用することが挙げられる。
【０００８】
マイクロプロセッサのクロック周波数を増大すると、「Ｊａｖａ」ソフトウェアの実行における性能利得を含むシステム性能利得が全体的に改善される。しかし、周波数を増大することは、「Ｊａｖａ」ソフトウェア性能の一対一の増大をもたらさない。周波数の増大は、電力消費と全体的なシステムのコストも増大させる。換言すると、マイクロプロセッサをより高い周波数でクロッキングさせることは、「Ｊａｖａ」ソフトウェア性能を加速させる非効率的な方法である。
【０００９】
コンパイル技術（例えば、ジャストインタイム「ＪＩＴ」コンパイル）は、コンパイル中にソフトウェア実行速度が遅延するので不安定な性能を招く。コンパイルは、システムメモリの使用量も増大させる。その理由は、「Ｊａｖａ」プログラムをコンパイルして記憶することは、元の「Ｊａｖａ」プログラムを記憶するのに要するメモリ量の５倍から１０倍のメモリ量を消費するからである。
【００１０】
専用「Ｊａｖａ」マイクロプロセッサは、それらの固有言語として「Ｊａｖａ」バイトコード命令を使用し、典型的な市販マイクロプロセッサよりも良好な性能で「Ｊａｖａ」ソフトウェアを実行するが、それらはいくつかの大きな設計上の制約を課す。専用「Ｊａｖａ」マイクロプロセッサを使用することは、これを中心にシステムを設計することを必要とし、通常「Ｊａｖａ」マイクロプロセッサ製造供給元からしか入手できない特殊開発ツールの利用を強要する。更に、この種の市販ソフトウェアは存在しないので、全てのオペレーティングシステムソフトウェア及びデバイスドライバを最初から特注で開発すべきである。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
「Ｊａｖａ」ソフトウェア性能が改善された内蔵型システムを有することが望まれている。
【課題を解決するための手段】
【００１２】
本発明の一実施形態は、少なくとも１つのメモリと、この１つのメモリと作動可能に接続されたプロセッサチップと、「アクセラレータチップ」とを有するシステムを含む。少なくとも１つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られる。「アクセラレータチップ」は、この少なくとも１つのメモリに対する直接アクセスを有する。「アクセラレータチップ」は、中間言語命令を使用したプログラムの少なくとも一部分を実行するようになっている。中間言語命令は、「Ｊａｖａ」バイトコードを含み、また、他の解釈された言語の中間言語形式も含む。これらの中間言語形式には、「Ｍｕｌｔｏｓ」バイトコード、「ＵＣＳＤパスカルＰコード」、「Ｃ＃／．ＮＥＴ」のための「ＭＳＩＬ」、及び他の命令が含まれる。本発明は、任意の中間言語に適用されるが、例示のため及び説明を明瞭にするために、以下では「Ｊａｖａ」を参照する。
【００１３】
「アクセラレータチップ」を使用することにより、従来のプロセッサチップ及びメモリユニットを有するシステムは、「Ｊａｖａ」バイトコードのような中間言語命令を処理するために加速することができる。「アクセラレータチップ」は、好ましくは、プロセッサチップとメモリとの間の経路内に置かれ、中間言語プログラムを非常に効率的に実行することができる。好ましい実施形態においては、「アクセラレータチップ」は、少なくともいくつかの中間言語命令を変換するための変換プログラムユニットと、変換された命令を実行するための実行エンジンとを含む。複数の中間言語の実行は、１つのアクセラレータ内で同時に又は順番にサポートすることができる。例えば、一実施形態においては、アクセラレータは、「Ｊａｖａ」バイトコード、及び、「Ｃ＃／．ＮＥＴ」のための「ＭＳＩＬ」を実行する。
【００１４】
本発明の別の実施形態は、「Ｊａｖａ」バイトコードのような中間言語命令を実行するためのユニットとメモリインタフェースとを有する「アクセラレータチップ」を含む。メモリインタフェースは、少なくとも１つのメモリに対する「アクセラレータチップ」のメモリアクセスを準備し、この少なくとも１つのメモリに対する別のプロセッサチップのメモリアクセスを可能にするようになっている。そのようなメモリインタフェースを備えた「アクセラレータチップ」を有することにより、「アクセラレータチップ」をプロセッサチップとメモリユニットとの間の経路に配置することができる。
【００１５】
本発明の別の実施形態は、ハードウェア変換プログラムユニットと、実行エンジンと、メモリインタフェースとを有する「アクセラレータチップ」を含む。
【００１６】
本発明の別の実施形態においては、ハードウェア変換プログラムユニットに作動可能に接続された中間言語命令キャッシュが使用される。中間言語命令をキャッシュに記憶することにより、プログラムの実行速度を大きく改善することができる。
【００１７】
本発明の別の実施形態は、中間言語命令を固有命令に変換するようになったハードウェア変換プログラムユニットと、ハードウェア変換プログラムユニットにより提供された固有命令を実行するようになった専用実行エンジンとを有する「アクセラレータチップ」を含む。専用実行エンジンは、ハードウェア変換プログラムユニットにより提供された命令のみを実行する。実行エンジンではなくハードウェア変換プログラムユニットが、好ましくは、変換する次の中間言語命令のアドレスを判断して専用実行エンジンに提供する。代替的に、実行エンジンが、中間言語命令に対する次のアドレスを判断することができる。
【００１８】
一実施形態においては、ハードウェア変換プログラムユニットは、いくつかの中間言語命令のみを変換し、他の中間言語命令は、これらの例外的な命令を処理するための仮想マシンを作動させるプロセッサチップに対するコールバックを引き起こす。
【発明を実施するための最良の形態】
【００１９】
図１は、本発明の一実施形態によるシステム２０を示す。この実施形態においては、「アクセラレータチップ」２２が、プロセッサチップ２６とメモリユニット２４との間に置かれる。プロセッサチップ２６は、典型的にはメモリユニット２４とインタフェースで接続している。これは特に、通信、携帯電話、及び携帯情報端末などのために使用される内蔵型システムにおいては一般的である。一実施形態においては、プロセッサチップは、様々な要素を含むシステムオンチップ（ＳＯＣ）である。例えば、一実施形態においては、プロセッサチップ２６は、ダイレクトメモリアクセスユニット（ＤＭＡ）２６ａ、中央処理ユニット（ＣＰＵ）２６ｂ、デジタルシグナルプロセッサユニット（ＤＳＰ）２６ｃ、及びローカルメモリ２６ｄを含む。一実施形態においては、「ＳＯＣ」は、「ＧＳＭ」、「ＣＤＭＡ」、「Ｗ−ＣＤＭＡ」、及び「ＧＰＲＳ」などのような無線規格に対する携帯電話のためのベースバンドプロセッサである。
【００２０】
以下に説明するように、「アクセラレータチップ」２２は、好ましくは、プロセッサチップ２６とメモリユニット２４との間の経路内に置かれる。「アクセラレータチップ」２２は、速度を改善してシステム全体の電力消費を減らすために、「Ｊａｖａ」のようなプログラムの少なくとも一部分を加速された仕方で実行する。この実施形態においては、「アクセラレータチップ」２２は、中間言語命令を実行するための実行ユニット３２とメモリインタフェースユニット３０とを含む。メモリインタフェースユニット３０は、「アクセラレータチップ」２２上の実行ユニット３２が、プログラムを実行するための中間言語命令及びデータにアクセスすることを可能にする。メモリインタフェース３０は、プロセッサチップ２６がメモリユニット２４から命令及びデータを取得することも可能にする。メモリインタフェース３０は、「アクセラレータチップ」が現存するチップセット（ＳＯＣ）に容易に統合されることを可能にする。アクセラレータ機能は、同一チップスタックパッケージ又は同一シリコン上に全体的又は部分的に「ＳＯＣ」と共に一体化することができる。代替的に、それは、チップスタックパッケージとしてメモリ内に又は同一シリコン上に統合させることもできる。
【００２１】
「アクセラレータチップ」２２の実行ユニット部分３２は、任意のタイプの中間言語命令実行ユニットとすることができる。例えば、一実施形態においては、専用「Ｊａｖａ」プロセッサのような中間言語命令のための専用プロセッサが使用される。
【００２２】
しかし、好ましい実施形態においては、中間言語命令実行ユニット３２は、中間言語命令を実行エンジン３６のための変換された命令に変換するハードウェア変換プログラムユニット３４を含む。ハードウェア変換プログラムユニット３４は、いくつかの中間言語命令を効率的に変換する。一実施形態においては、プロセッサチップ２６は、ハードウェア変換プログラムユニットにより処理されないいくつかの中間言語命令を処理する。中間言語命令のいくつかを変換プログラムユニットに効率的に変換させ、次に、これらの変換された命令を実行エンジンにより実行させることにより、システムの速度を大きく増大させることができる。変換プログラムユニットは、マイクロコードに基づくものとすることができ、従って、「Ｃ＃／．ＮＥＴ」に対する「Ｊａｖａ」をこのマイクロコードと交換することを可能にする。
【００２３】
仮想マシンを完全にプロセッサ２６内で実行することは、いくつかの欠点を有する。仮想マシン解釈プログラムの変換部分は、極めて大きくなりがちであって、プロセッサチップ内で使用されるキャッシュよりも大きい可能性がある。これは、変換コードの一部分を外部メモリからキャッシュに繰り返し出し入れさせ、これがシステムの速度を低下させる。「アクセラレータチップ」２２上の変換プログラムユニット３４は、外部メモリユニットからの変換ソフトウェアの転送を必要とすることなく変換を行う。これにより、中間言語プログラムの演算速度を大きく増大させることができる。
【００２４】
いくつかの中間言語命令に対するコールバックの使用は、「アクセラレータチップ」２２のサイズ及び電力消費を減らすことができるので有用である。あらゆる中間言語命令を実行することができる比較的複雑な実行ユニットを有するよりも、変換プログラムユニット内で一定の中間言語命令のみを変換して、それらを実行エンジン３６内で実行する方が「アクセラレータチップ」２２のサイズ及び電力消費を減少させる。アクセラレータにより実行される中間言語命令は、好ましくは、最も一般的に使用される命令である。アクセラレータチップにより実行されない中間言語命令は、それらが「ＳｏＣ」上で実行されるようにコールバックとして実施することができる。代替的に、一実施形態の「アクセラレータチップ」は、あらゆる中間言語命令を実行することができる。
【００２５】
一実施形態の実行ユニット３２内には、インタフェースユニット及びレジスタ４２も示されている。好ましい実施形態においては、プロセッサユニット２６は、「アクセラレータチップ」２２に命令を与えるために使用される修正仮想マシンを実行する。コールバックが起った時、変換プログラムユニット３４は、ユニット４２内のレジスタを設定し、実行ユニットは、復元を必要とする全ての要素を復元させて、ユニット４２内でそのように表示する。好ましい実施形態においては、プロセッサチップ２６は、インタフェースユニット及びレジスタ４２を通じて「アクセラレータチップ」２２を制御する。制御が「アクセラレータチップ」に引き渡された状態で、実行ユニット３２は、独立に作動する。
【００２６】
好ましい実施形態においては、中間言語命令キャッシュ３８が、変換プログラムユニット３４に関連して使用される。中間言語命令キャッシュの使用は、システムの作動速度を更に増大させて電力を節減する。その理由は、中間言語命令がメモリユニット２４からあまり頻繁に要求される必要がないからである。頻繁に使用される中間言語命令は、命令キャッシュ３８内に保たれる。好ましい実施形態においては、命令キャッシュ３８は、双方向連想キャッシュである。システムに同じく付随するのは、データを記憶するためのデータキャッシュ４０である。
【００２７】
図１には変換プログラムユニットが実行エンジンとは別個のものとして示されているが、変換プログラムユニットは、実行エンジン内に組み込むこともできる。その場合は、中央処理ユニット（ＣＰＵ）又は実行エンジンは、中間言語命令を演算される固有の命令に「ＣＰＵ」又は実行エンジンの主要部分により変換するためのハードウェア変換プログラムサブユニットを有する。
【００２８】
中間言語命令は、好ましくは「Ｊａｖａ」バイトコードである。尚、「Ｍｕｌｔｏｓ」バイトコード、「ＭＳＩＬ」、及び「ＢＲＥＷ」などのような他の中間言語命令も同様に使用することができる。説明を簡潔にするために、以下においては「Ｊａｖａ」が使用される実施形態について説明するが、他の中間言語命令も同様に使用することができる。
【００２９】
図２は、「アクセラレータチップ」の一実施形態を示す図である。この実施形態においては、「Ｊａｖａ」バイトコードが、命令キャッシュ５２内に記憶される。これらのバイトコードは、次に「Ｊａｖａ」変換プログラム３４’に送られる。バイトコードバッファアライメントユニット５０は、バイトコードを桁合わせして、それらをバイトコード復号ユニット５２に供給する。好ましい実施形態においては、いくつかのバイトコードに対して命令レベルの並列処理が行われ、バイトコード復号ユニット５２が１つよりも多い「Ｊａｖａ」バイトコードを単一の変換された命令に結合する。別の状況においては、「Ｊａｖａ」バイトコードは、必要に応じて１つよりも多い固有命令をもたらす。「Ｊａｖａ」バイトコード復号ユニット５２は、変換された命令を作り出すために命令構成ユニット５４により使用される指示を発生する。好ましい実施形態においては、ユニット５４内にあるか又はこれに付随するマイクロコード・ルックアップテーブルユニットは、変換された命令のベース部分を発生し、他の部分は、実行エンジン３６’のプロセッサ６０のレジスタファイル５８内の位置の意味を追跡する「スタック及び変数マネージャ」５６から提供される。一実施形態においては、プロセッサ６０のレジスタファイル５８は、上部８つの「Ｊａｖａ」オペランドスタック値、１６個の「Ｊａｖａ」変数値、及び４つのスクラッチ値を記憶する。
【００３０】
好ましい実施形態においては、実行エンジン３６’は、「Ｊａｖａ」変換プログラムユニットからの変換された命令を実行するためにのみ使用される。好ましい実施形態においては、プロセッサ６０は、縮小命令セット計算（ＲＩＳＣ）プロセッサであるか、又は「ＤＳＰ」、又は「ＶＬＩＷ」、又は「ＣＩＳＣ」プロセッサである。これらのプロセッサは、その命令セットが変換された命令を効率的に実行するように設計されるようにカスタム化又は修正することができる。必要とされない命令及び機能は、より単純な実行エンジンを作り出すために、好ましくは実行エンジンの命令セットから除去され、例えば、割込みは、好ましくは使用されない。更に、実行エンジン３６’は、実行すべき次の命令の位置を直接計算する必要がない。その代わり、「Ｊａｖａ」変換プログラムユニット３４’は、変換すべき次の「Ｊａｖａ」バイトコードのアドレスを計算することができる。プロセッサ６０は、コントローラ６２に対してフラグを生成し、このコントローラが、変換すべき次の「Ｊａｖａ」バイトコードの位置を計算する。代替的に、標準的なプロセッサを使用することもできる。
【００３１】
一実施形態においては、バイトコードバッファ制御ユニット７２は、バイトコードのいくつのバイトが「Ｊａｖａ」変換プログラムユニット内に受容されるかを検査し、「Ｊａｖａ」プログラムカウンタ７０を修正する。コントローラ６２も、「Ｊａｖａ」プログラムカウンタを修正することができる。アドレスユニット６４は、命令キャッシュ又は外部メモリから次の命令を取得する。尚、例えば、「為された分岐」又はコールバックにより要求されるならば、コントローラ６２は、「Ｊａｖａ」変換プログラムユニットのパイプラインをクリアすることもできる。プロセッサ６０からのデータも、データキャッシュ６８に記憶される。
【００３２】
仮想マシンがバイトコードを高速形式に修正する時、修正されるバイトコードを保持するハードウェアクセラレータ内のキャッシュ線を無効にすべきである。仮想マシンがこれとは逆の処理を行ってバイトコードを元の形式に復旧させる場合も、上記と同じことが言える。更に、コールバックは、インタフェースレジスタ内のキャッシュ無効化レジスタを使用して、命令キャッシュ内の適切なキャッシュ線を無効にする。
【００３３】
いくつかの実施形態においては、高速バイトコードが使用される場合、修正された命令が命令キャッシュ５２内へ再度記憶される。高速バイトコードが使用される場合は、システムは、「Ｊａｖａ」バイトコードがどのように修正されるかを追跡しなければならず、最終的に、キャッシュと外部メモリとの間で命令の整合性を持たなければならない。
【００３４】
一実施形態においては、バイトコード復号ユニットからの復号されたバイトコードは、命令構成ユニット５４内の「演算論理ユニット（ＡＬＵ）」と状態マシンユニットとに送られる。「ＡＬＵ」は、バイトコード命令を並べ換えて状態マシンがそれらを演算するのを容易にし、メモリ参照の計算を含む様々な演算機能を実行するために設けられる。状態マシンは、ルックアップテーブルを使用して、バイトコードを固有命令に変換する。このようにして、状態マシンは、マイクロコードルックアップテーブル内における目標とする固有命令の位置を指示するアドレスを提供する。カウンタは、オペランドスタック上にいくつのエントリが配置されたかに関して計数を保ち、メモリ及びレジスタファイル内のオペランドスタックの最上部を追跡して更新するために維持される。好ましい実施形態においては、マイクロコードルックアップテーブルの出力は、レジスタファイル内で演算されるレジスタの指示で増強される。レジスタ指示は、カウンタから得られ、バイトコードから変換される。これを達成するために、レジスタファイル内のどのエントリ内にオペランド及び変数があるかというハードウェア指示を有するべきである。固有命令は、この基礎の上に構成される。代替的に、これらのレジスタ指示を直接レジスタファイルに送ることができる。
【００３５】
本発明の別の実施形態においては、「スタック及び変数」マネージャは、レジスタファイル内の異なるレジスタに「スタック及び変数」値を割当てる。この別の実施形態の利点は、いくつかの場合に、「呼出しコール」により「スタック及び変数」値が切り換わることがあり、そのような切換えが、これを実行するためにいくつかの固有命令を生成するよりも「スタック及び変数」マネージャ内で一層効率的に行えることである。
【００３６】
一実施形態においては、システムの作動を助けるために、いくつかの重要な値をハードウェアクセラレータ内に記憶させることができる。ハードウェアクセラレータ内に記憶されたこれらの値は、特に「Ｊａｖａ」スタックの一部分を記憶するために実行エンジンのレジスタファイルが使用される場合は、システムの作動を改善することを助ける。
【００３７】
ハードウェア変換プログラムユニットは、好ましくは、スタック値の最上部の指示を記憶する。このスタック値の最上部は、メモリからのスタック値の読込みを助ける。スタック値の最上部は、命令がスタックベースの命令からレジスタベースの命令に変換される時に更新される。命令レベル並列処理が使用される場合は、単一のレジスタベースの命令の一部である各スタックベースの命令は、「Ｊａｖａ」スタックに対するその効果に関して評価される必要がある。
【００３８】
一実施形態においては、オペランドスタック深度値が、ハードウェアクセラレータ内に維持される。このオペランドスタック深度は、実行エンジンレジスタファイル内におけるオペランドスタックの動的深度を表す。従って、８つのスタック値がレジスタファイル内に記憶されるとすれば、スタック深度指示器の読みは「８」であることになる。レジスタファイル内のスタックの深さを知ることは、レジスタファイルを出入りするスタック値の読込み及び記憶を助ける。
【００３９】
更に、フレームスタックは、それ自身のアンダーフロー／オーバーフローと、フレームスタック上にいくつのフレームがあるかを表すフレーム深度指示と共にハードウェア内に維持することができる。フレームスタックは、独立したスタックとするか、又は「ＣＰＵ」のレジスタファイル内に組み込むことができる。好ましい実施形態においては、フレームスタック及びオペランドスタックは、「ＣＰＵ」の同一レジスタファイル内とすることができる。別の実施形態においては、フレームスタック及びオペランドスタックは、異なるエンティティである。ローカル変数もまた、オペランドスタック及び／又はフレームスタックを同じく有する「ＣＰＵ」レジスタファイルの別の区域内に記憶されるであろう。
【００４０】
好ましい実施形態においては、最小スタック深度値と最大スタック深度値とは、ハードウェア変換プログラムユニットにより維持される。スタック深度値は、要求された最大及び最小スタック深度と比較される。スタック値が最小値よりも低くなる時、ハードウェア変換プログラムユニットは、メモリからレジスタファイル内へスタック値を読み込むために読込み命令を構成する。スタック深度が最大値よりも高くなる時、ハードウェア変換プログラムユニットは、スタック値を再度メモリに記憶させるために記憶命令を構成する。
【００４１】
一実施形態においては、実行エンジンレジスタファイル内のオペランドスタックの少なくとも最上部の８つのエントリは、リングバッファとして作動し、このリングバッファは、アクセラレータ内に維持されて、オーバーフロー／アンダーフローユニットと作動可能に接続される。
【００４２】
ハードウェア変換プログラムユニットは、好ましくは、実行エンジンのレジスタファイル内に記憶されたオペランド及び変数の指示も記憶する。これらの指示は、ハードウェアクセラレータが、入ってくるスタックベースの命令から変換されたレジスタベースの命令又は固有命令を構成することを可能にする。
【００４３】
ハードウェア変換プログラムユニットは、好ましくは、変数ベース及びオペランドベースの指示もメモリ内に記憶する。これは、実行エンジンのレジスタファイルとメモリとの間に変数及びオペランドを読み込んで記憶する命令を構成することを可能にする。例えば、変数（Ｖａｒ）がレジスタファイル内で利用可能でない時には、ハードウェアが読込み命令を発する。ハードウェアは、「Ｖａｒ」のメモリ位置を生成するために、「Ｖａｒ」数に４を掛けて「Ｖａｒ」ベースを加えるようになっている。生成された命令は、「Ｖａｒ」ベースが一時的に固有な実行エンジンレジスタ内にあるという知識に基づくものである。４を掛けた「Ｖａｒ」数は、構成されている固有命令の即値フィールドとして利用可能にすることができ、それは、アドレスが「Ｖａｒ」ベースに対するポインタと即値オフセットとを加えたものを保持する一時的レジスタの内容であるメモリアクセス命令とすることができる。代替的に、「Ｖａｒ」の最終的なメモリ位置は、実行エンジンにより命令として読まれ、次に「Ｖａｒ」に読み込むことができる。
【００４４】
一実施形態においては、ハードウェア変換プログラムユニットは、変数が「Ｊａｖａ」バイトコードの実行により更新された時、変更されたものとしてこの変数にマークを付ける。ハードウェアクセラレータは、変更されたものとしてマークを付された変数を、いくつかのバイトコードに対してシステムメモリにコピーすることができる。
【００４５】
一実施形態においては、ハードウェア変換プログラムユニットは、固有命令を構成し、固有命令のオペランドは、少なくとも２つの固有実行エンジンレジスタファイル参照を含み、レジスタファイル内容は、オペランドスタック及び変数のためのデータである。
【００４６】
一実施形態においては、スタック及び変数レジスタマネージャは、実行エンジンのレジスタファイルの変数及びスタックレジスタ内に何が記憶されているかの指示を維持する。この情報は、次に、「Ｊａｖａ」バイトコードの復号化及び適切な固有命令の生成を助けるために、復号段とマイクロコード段とに供給される。
【００４７】
好ましい実施形態においては、「スタック及び変数」レジスタマネージャの機能の１つは、スタックの最上部の指示を維持することである。すなわち、例えば、レジスタＲ１〜Ｒ４が、メモリから又はバイトコードを実行することにより最上部の４つのスタック値を記憶する場合、データがレジスタファイルに対して読込み及び読出しされる時に、スタックの最上部が変化することになる。従って、レジスタＲ２がレジスタファイル内のスタックの最上部となり、レジスタＲ１がスタックの底部となることができる。新しいデータがレジスタファイル内のスタックに読込まれる場合は、そのデータは、レジスタＲ３内に読込まれることになり、これがスタックの新たな最上部となって、スタックの底部はＲ１のままである。レジスタファイル内のスタックに更に２つの項目が読込まれる場合は、レジスタファイル内のスタックの新たな最上部がＲ１となり、初めのＲ１は、アクセラレータのオーバーフロー／アンダーフローユニットによりメモリに書き戻しされ、Ｒ２は、レジスタファイル内の部分スタックの底部になることになる。
【００４８】
図３は、「アクセラレータチップ」の一実施例内の主要機能ユニットを示すと共に、それが典型的な無線受話器デザイン内にインタフェースする方法を示している。「アクセラレータチップ」は、ホストマイクロプロセッサ（又は、内蔵マイクロプロセッサを含む「ＳＯＣ」）とシステム「ＳＲＡＭ」及び／又は「フラッシュ」メモリとの間に統合される。ホストマイクロプロセッサ及びシステムソフトウェアの観点からは、システム「ＳＲＡＭ」及び／又は「フラッシュ」メモリは、アクセラレータチップの背後にある。
【００４９】
「アクセラレータチップ」は、システム「ＳＲＡＭ」及び／又は「フラッシュ」メモリに直接アクセスすることができる。ホストマイクロプロセッサ（又は、「ＳＯＣ」内のマイクロプロセッサ）は、「アクセラレータチップ」を通じてシステム「ＳＲＡＭ」又は「フラッシュ」メモリに透過的にアクセスする（「システムメモリは、アクセラレータの背後にある」）。
【００５０】
「アクセラレータチップ」は、その片方のソフトウェアカーネル内のモニタを通じて、ホストマイクロプロセッサと同期させるのが好ましい。ソフトウェアカーネル（又は、プロセッサチップ）は、「アクセラレータチップ」内の特定レジスタに「Ｊａｖａ」バイトコード命令が位置するアドレスを読込み、次に、実行を始めるために制御をアクセラレータチップに移す。次に、ソフトウェアカーネルは、それがコールバック機構を使用してバイトコードを処理することが必要であることを検知するまで、又は、全てのバイトコードが実行されてしまうまで、ホストマイクロプロセッサ上で実行されるポーリングループ内で実行モード状態の読込みを待機する。ポーリングループは、「アクセラレータチップ」と「ＳＯＣ」上の汎用入出力ピンとの間に電気的に接続された「実行モード」ピンを読み取ることにより実行することができる。代替的に、「実行モード」の同じ状態は、アクセラレータチップ内のレジスタを読み取ることによりポーリングすることができる。これらのいずれの場合も、「アクセラレータチップ」は、コールバック処理が完了するまで、又はより多くのバイトコードを実行するように指令されるまで自動的に節電スリープ状態に入る。
【００５１】
「アクセラレータチップ」は、メモリからのオペランドを含む「Ｊａｖａ」バイトコード全体をその内部キャッシュを通じて取り込み、その命令を実行する。キャッシュ内にある命令及びデータは、システムメモリのトランザクションが回避されたので、低減された電力消費でより高速に実行される。バイトコードストリームは、命令レベル並列処理（ＩＬＰ）に基づく最適化プログラムを使用して、変換される前にバッファに入れられて分析される。ローカルにキャッシュされた「Ｊａｖａ」データと結合された「ＩＬＰ」最適化プログラムは、各サイクルにとって可能な最高速の実行をもたらす。
【００５２】
「アクセラレータチップ」は、別々の独立「Ｊａｖａ」バイトコード実行エンジンであるから、ホストマイクロプロセッサがそのポーリングループにおいて待機するか、又は割込みを処理するいずれの間も同時に処理を行う。更に、「アクセラレータチップ」は、ホストマイクロプロセッサがその背後のシステムメモリにアクセスする必要があり、「アクセラレータチップ」が同時にシステムメモリにアクセスすることを欲する場合の間だけ停止される。例えば、ホストマイクロプロセッサが割込みサービスルーチン又はそれ自身のキャッシュ内からのソフトウェアを実行しているとすれば、「アクセラレータチップ」は、同時にバイトコードを実行することができる。同様に、「Ｊａｖａ」バイトコード命令及びデータが「アクセラレータチップ」の内部キャッシュ内にある場合、アクセラレータは、ホストマイクロプロセッサがその背後のシステムメモリにアクセスすることを必要とする場合でも、バイトコードを同時に実行することができる。
【００５３】
図４Ａは，一実施形態の「アクセラレータチップ」の２つの主要モードであるスリープ及び実行（「Ｊａｖａ」バイトコード命令を実行すること）を示す状態マシンの図である。「アクセラレータチップ」は、その実行状態とスリープ状態との間で自動的に遷移する。「アクセラレータチップ」は、そのスリープ状態において、「Ｊａｖａ」エンジンコア及びこれに付随する構成要素がアイドル状態にあるから最小限の電力しか消費しない。
【００５４】
図４Ｂは、本発明のシステムの別の実施形態の、更に待機モードを含むアクセラレータチップの状態を示す図である。待機モードは、コールバック中に使用される。電力を減らすために、「Ｊａｖａ」レジスタに対するクロックだけがオンにされる。待機モードにおいては、プロセッサチップは、コールバックを引き起こす「Ｊａｖａ」バイトコードを処理するために仮想マシンを実行している。アクセラレータチップは、待機モードにあるから、全ての「Ｊａｖａ」レジスタをリセットすることなく迅速に復帰することができる。
【００５５】
図５は、図４Ａの状態マシンの各モードにおいて、どの構成要素がアクティブで、どの構成要素がアイドルかを示す。「ＪＶＭ」が実行されていない時、又は追加的節電が適切であるとシステムが判断した時に、「アクセラレータチップ」は、自動的にそのスリープモードに入る。
【００５６】
「アクセラレータチップ」は、作動されると、下記イベントのいずれかが起るまで実行される。
１．「Ｊａｖａ」バイトコード命令が、ソフトウェアコールバック機構を通じてホストマイクロプロセッサにより実行されることが必要な時。
２．ホストマイクロプロセッサが、典型的には割込み及び例外処理中にのみ起る、システムメモリへのアクセスを必要とする時。
３．ホストマイクロプロセッサが、「アクセラレータチップ」をそのスリープモードにさせることによりアクセラレータチップを停止させる時。
【００５７】
「アクセラレータチップ」は、デフォルトにより使用不可にされて（そのスリープモードにおいて）全ての固有常駐ソフトウェアに対して透過的であり、修正「Ｊａｖａ」仮想マシンがそれを初期化して「Ｊａｖａ」バイトコード命令を実行するためにそれを呼び出す時に使用可能にされる。アクセラレータチップがそのスリープモードにある時、ホストマイクロプロセッサから「ＳＲＡＭ」又は「フラッシュ」メモリへのアクセスは、「アクセラレータチップ」を通過するだけである。
【００５８】
「アクセラレータチップ」は、「ＳＲＡＭ」及び／又は「フラッシュ」メモリコントローラにおける典型的な方式でプログラムする必要があるそのメモリインタフェース回路の一体的部分としてメモリコントローラを含む。実際のプログラミングは、各デバイスの固有アーキテクチャ及びメモリマップに従う特定のメモリアドレスセットを有するソフトウェアカーネル内で行われる。修正「Ｊａｖａ」仮想マシンの初期化シーケンスの一部として、「アクセラレータチップ」内のレジスタには適切な情報が読込まれる。「Ｊａｖａ」ソフトウェアを実行するために、システムがその「ＪＶＭ」を呼び出す時、それは、最初に「Ｊａｖａ」バイトコードの開始のアドレスを「アクセラレータチップ」の「Ｊａｖａプログラムカウンタ（ＪＰ）」内に読み込む。次に、カーネルは、ホストマイクロプロセッサ上で実行を始め、「アクセラレータチップ」が「Ｊａｖａ」バイトコードの実行を完了したことを合図する時を見つけるためにそれをモニタする。完了すると、「アクセラレータチップ」は、そのスリープモードに入り、そのカーネルは、「ＪＶＭ」及び／又はシステムソフトウェアに対する制御に戻る。
【００５９】
「アクセラレータチップ」は、割込み又は例外処理を邪魔することはなく、何らの待ち時間を課すこともない。「アクセラレータチップ」が処理を行っている間に割込み又は例外が起った時、ホストマイクロプロセッサは、「アクセラレータチップ」に影響を及ぼすことなく、適切なハンドラルーチンに迂回する。ホストマイクロプロセッサは、ハンドラから復帰した時、ソフトウェアカーネルに実行を戻し、次に「アクセラレータチップ」のモニタを再開する。ホストマイクロプロセッサがメモリバスに取って代わった時でさえも、「アクセラレータチップ」は、その内部キャッシュから「Ｊａｖａ」バイトコードを実行し続けることができ、これは、システムメモリバスの競合が起らぬ限り続くことができる。競合が起きた場合は、アクセラレータを停止させるために停止信号をアサートすることができる。
【００６０】
「アクセラレータチップ」は、プログラム可能なベースから一定のオフセットにおいて、そのメモリマップ内に位置するいくつかの共用レジスタを有する。これらのレジスタは、その作動を制御し、一般的な使用のためにあるのではなく、むしろ「ソフトウェアカーネル」内のコードにより処理される。
【００６１】
図３を参照すると、「アクセラレータチップ」は、ホストマイクロプロセッサ（又は、内蔵マイクロプロセッサを含む「ＳＯＣ」）とシステム「ＳＲＡＭ」及び／又は「フラッシュ」メモリとの間に置かれていることが分る。全てのシステムメモリは、ホストマイクロプロセッサによりアクセスされ、従って「アクセラレータチップ」を通過する。一実施形態においては、全てのシステムソフトウェアに対して十分に透過的ではあるが、約４ナノ秒の遅延が各方向に対して導入され、各システムメモリトランザクションに対する合計約８ナノ秒の遅延に寄与する。
【００６２】
図６は、「アクセラレータチップ」上の「Ｊａｖａ」実行ユニットにより実行される「Ｊａｖａ」バイトコードのリスト、及びプロセッサチップ上で実行される修正された「ＪＶＭ」に対するコールバックを引き起こすバイトコードのリストの一実施形態を示す表である。尚、最も一般的なバイトコードは、「アクセラレータチップ」上で実行される。他のより一般的でなくより複雑なバイトコードは、プロセッサチップ上のソフトウェア内で実行される。「アクセラレータチップ」からいくつかの「Ｊａｖａ」バイトコードを例外することにより、「アクセラレータチップ」の複雑性及び電力消費を低減させることができる。
【００６３】
図７は、典型的なメモリ編成と、各タイプのメモリに記憶することができるソフトウェア及びデータのタイプとを示す。以下の表に列記された項目を配置することは、「Ｊａｖａ」バイトコード命令を実行するために必要なバイトコードと対応するデータ項目とにアクセラレータチップがアクセスすることを可能にする。
【００６４】
ホストマイクロプロセッサ上で作動するオペレーティングシステムは、アクセラレータチップがその「Ｊａｖａ」処理の一部としてアクセスすることになるメモリの全領域に対して実際のメモリと仮想メモリが等しくなるように設定されるのが好ましい。
【００６５】
「Ｊａｖａ」仮想マシンとの統合は、好ましくは、以下に記す変更を通じて達成される。
１．「ＪＶＭ」自身の初期化シーケンス内への修正された初期化コードの挿入。
２．「Ｊａｖａ」バイトコード解釈プログラムの除去、及び、修正されたソフトウェアカーネルのインストール。これは、アクセラレータチップハードウェア内で直接に実行されない「Ｊａｖａ」バイトコード命令に対する機能性を、アクセラレータチップソフトウェアカーネルにより使用可能にされたコールバック機構内に再び向けることを含む。更に、高速バイトコードに対しては、「ＪＶＭ」がバイトコードをその高速形に修正する時、修正（高速化）されるバイトコードを保持した「ハードウェアクセラレータ」命令キャッシュ内のキャッシュ線は、無効化されるべきである。これは、「ＪＶＭ」がこの処理を逆にしてバイトコードをその元の形に戻す場合にも言えることである。アクセラレータチップとそのソフトウェアカーネルとは、好ましくは、これらの状況を処理するために「アプリケーションプログラミングインタフェース（ＡＰＩ）」呼出しを準備する。
３．ガーベッジコレクタを適応させること。「ＪＶＭ」のガーベッジコレクタは、キャッシュ干渉問題を回避するために、「Ｊａｖａヒープ」又は「Ｊａｖａスタック」を走査する前にアクセラレータチップ内のデータキャッシュを無効にする。これは、好ましくは、「ソフトウェアカーネル」内の「ＡＰＩ」機能を使用して達成される。
【００６６】
「アクセラレータチップ」の一実施形態は、好ましくは、非同期「ＳＲＡＭ」及び／又はページモード「フラッシュ」メモリを含む非同期「フラッシュ」メモリを有するように設計された任意のシステムとインタフェースで接続する。そのような状況においては、「アクセラレータチップ」は、「ＳＲＡＭ」又は「フラッシュ」装置のようなシステムの方を向いているので容易に統合する。統合のために他の調節は何ら必要ではない。「アクセラレータチップ」は、それ自身のメモリコントローラを有し、それに応じて内部プログラムカウンタ（ＩＰＣ）を通じて「アクセラレータの背後にある」メモリに直接アクセスする能力を有する。任意のプログラムカウンタの場合と同様に、「ＪＰ」は、取り込まれて実行される次の命令のアドレスを指し示す。これは、「アクセラレータチップ」がホストマイクロプロセッサと非同期かつ同時に作動することを可能にする。
【００６７】
図８は、本発明の「アクセラレータチップ」の一例のためのアクセラレータピン機能の一例を示す表である。
【００６８】
好ましい実施形態においては、プロセッサチップに達するピンとメモリに達するピンとは、バイパスモードに対してチップを通じた遅延を最小限に保つために、互いに近くに置かれる。
【００６９】
図９は、「ＳＯＣ」のようなプロセッサチップとメモリとの間に置かれたハードウェアクセラレータの一実施形態における異なるアクセス時間及びバス速度に対する待機状態を示す図である。尚、いくつかの場合は、プロセッサチップとメモリとの間の経路内にハードウェアクセラレータを導入することにより、アクセス時間に対して追加的な待機状態を加える必要がある。
【００７０】
図１０は、本発明の一実施形態によるハードウェアクセラレータの図である。ハードウェアクセラレータ１００は、バイパス論理１０２を含む。これは、チップインタフェース１０４及びメモリインタフェース１０６上でシステムに接続する。メモリコントローラ１０８は、システムオンチップとハードウェアクセラレータとの間でメッセージを送るために使用されるインタフェースレジスタ１１０に相互接続される。メモリコントローラ１０８を通じて命令キャッシュ１１２に達する命令とデータキャッシュ１１４からのデータとは、メモリコントローラ１０８へ送られる。命令キャッシュ１１２からの中間言語命令は、ハードウェア変換プログラム１１４へ送られる。ハードウェア変換プログラム１１４は、中間言語命令を固有命令に変換し、変換された命令を実行エンジン１１６へ送る。この実施形態においては、実行エンジン１１６は、レジスタ読込み段１１６Ａ、実行段１１６Ｂ、及びデータキャッシュ段１１６Ｃに分解される。
【００７１】
図１１は、「ＳＲＡＭ」メモリとインタフェースで接続するために使用されるハードウェアクセラレータ１２０の図である。一実施形態においては、「ＳＲＡＭ」メモリと「ＳＤＲＡＭ」メモリとが大きく異なる可能性があるので、各タイプのメモリに対して専用のハードウェアクセラレータがある。図１１は、命令キャッシュ、ハードウェアクセラレータ、データキャッシュ、実行エンジン、ハードウェアクセラレータの内部クロックが外部クロックと同期されるように内部クロックを設定するために使用される位相固定ループ（ＰＬＬ）、インタフェースレジスタ、及び、「ＳＲＡＭ」スレーブインタフェース及び「ＳＲＡＭ」マスタインタフェースを含むハードウェアクセラレータを示す。「ＳＲＡＭ」スレーブインタフェースは、システムオンチップと相互接続し、「ＳＲＡＭ」マスタインタフェースは、メモリと相互接続する。図１１に示す図は、システムオンチップとメモリとの間の接続が別々であり、別々のインタフェースを処理するという事実を強調している。従って、ハードウェアクセラレータとシステムオンチップとの相互作用、及びハードウェアクセラレータとメモリとの相互作用は、独立のオペレーションに対して同時に為されることが可能である。図示のシステムオンチップとハードウェアクセラレータとの相互接続は、アドレス線、データ線、バイト選択線、書込み使用可能化線、読込み使用可能化線、チップ選択線等々である。尚、非同期フラッシュピンは、プロセッサチップと非同期フラッシュユニットとの間に直接進むことができる。ハードウェアクセラレータチップは、システムオンチップのチップ選択メモリアドレス指定能力を変更することができる。一実施形態においては、任意選択のシステムオンチップメモリが、「ＳＲＡＭ」スレーブインタフェースに記憶される。ホストプロセッサは、ハードウェアクセラレータのインタフェースレジスタにより設定される実行モードを検査するために待機ループに入る。システムオンチップは、「ＳＲＡＭ」スレーブインタフェースからレジスタループ検査プログラムを取得する。ハードウェアクセラレータ１２０は、外部メモリ内のループプログラムにアクセスする「ＳＯＣ」により割込まれることはなく、従って、外部メモリに記憶された中間言語プログラムをより効率的に作動させることができる。尚、ハードウェアクセラレータ１２０は、「ＪＴＡＧ」試験ユニットを含むことができる。
【００７２】
図１２は、ハードウェアクセラレータ１３０が「ＳＤＲＡＭ」スレーブインタフェースと「ＳＤＲＡＭ」マスタインタフェースとを含む本発明のシステムの一実施形態を示す。「ＳＤＲＡＭ」に対する相互接続のための制御線は、「ＳＲＡＭ」に対する相互接続のための制御線と大きく異なり、それによって一実施形態内に２つの異なるバージョンのハードウェアクセラレータを有することに意味がある。「ＳＤＲＡＭ」のための追加的な線は、行選択線、列選択線、及び書込み使用可能化線を含む。
【００７３】
図１３は、ホストハードウェアクセラレータ１４０の図を示す。この実施形態は、プロセッサチップからの１６ビット相互接続と、ハードウェアクセラレータ１４０とメモリとの間の３２ビット相互接続とを有する。メモリとハードウェアクセラレータとの間の相互接続は、プロセッサとメモリとの間の相互接続よりも高速度で作動することになる。プロセッサチップとメモリとの間でデータをバッファに入れることができるように、ホストアクセラレータ１４０内にはホストバーストバッファが含まれる。
【００７４】
図１４は、ハードウェアクセラレータ１５０が、グラフィックアクセラレータエンジン１５２と、「ＬＣＤ」コントローラ及びディスプレイバッファ１５４とを含む実施形態を示す。これは、ハードウェアクセラレータ１５０が直接方式で「ＬＣＤ」ディスプレイ１５６と対話することを可能にする。「Ｊａｖａ」規格は、いくつかのライブラリを含む。これらのライブラリは、典型的には、装置が「Ｊａｖａ」コード以外の異なるタイプのコードを実施するためにそれらを実行することができるように実装される。１つの新しいタイプのライブラリは、「ＬＣＤ」ディスプレイのためのグラフィックを含む。例えば、低レベルイベントを処理して「ＬＣＤ」ディスプレイ上に描くための図形呼出しを発する必要があるアプリケーションを書き込むために、キャンバスアプリケーションが使用される。そのようなアプリケーションは、典型的には、ゲームなどのために使用されるであろう。図１４の実施形態においては、グラフィックアクセラレータエンジン１５２と、「ＬＣＤ」制御及びディスプレイバッファエンジン１５４とがハードウェアクセラレータ１５０内に置かれるから、システムの制御は、プロセッサチップに渡される必要はない。グラフィック要素を作動させる場合はいつでも、従来のプログラムではなく「Ｊａｖａ」プログラムが使用される。「ＬＣＤ」ディスプレイ１５６を更新するためには、メモリに記憶された「Ｊａｖａ」プログラムが使用される。一実施形態においては、「Ｊａｖａ」プログラムは、そのプログラムが「ＬＣＤ」グラフィックアクセラレータエンジン１５２に対するものであることを判断するために、ハードウェアクセラレータ１５０により使用される識別子バイトコードを使用する。その機能が「ＳＯＣ」上で利用可能である場合は、「ＬＣＤ」コントローラを同一チップ上に持つことは常に必要であるわけではない。この場合、グラフィックのみが依然としてアクセラレータ上に留まるであろう。グラフィックは、二次元グラフィック、及び三次元グラフィックに対するものとすることができる。更に、チップ上にビデオカメラインタフェースを含ませることもできる。このカメラインタフェースユニットは、ビデオユニットとインタフェースで接続することになり、そこで、ビデオ画像サイズをスケーリングすることができ、及び／又は色空間変換を適用することができる。アクセラレータチップ内にいくつかのレジスタを設定することにより、ディスプレイ上にある一定の配合及びウインドウ効果を提供するために映像とグラフィックとを融合させることが可能である。グラフィックユニットは、それ自身のフレームバッファと任意選択的に３Ｄ用の「Ｚ」バッファとを有するであろう。効率を良くするために、アクセラレータチップ内にグラフィックフレームバッファを設け、システム「ＳＲＡＭ」又はシステム「ＳＤＲＡＭ」内に「Ｚ」バッファを設けることが最適であると考えられる。
【００７５】
図１５は、アクセラレータチップ１６２と、フラッシュチップ１６４と、「ＳＲＡＭ」チップ１６６とを含むチップスタックパッケージ１６０の図である。パッケージ内にアクセラレータチップ１６２とメモリチップ１６４及び１６６とを設けることにより、アクセラレータチップとメモリとを相互接続するためにパッケージに設ける必要のあるピンの数を減らすことができる。図１５の例においては、ピンの数を減らしたことにより、一組のピンをバスデータ及び補助メモリ位置に対するアドレスのために使用することが可能になる。フラッシュメモリ及び「ＳＲＡＭ」チップと同じパッケージ上にアクセラレータチップを置くことにより、システムに対するメモリアクセス時間も短縮される。
【００７６】
図１６〜１９は、本発明の一実施形態によるアクセラレータエンジンが、変換された中間言語命令、特に「Ｊａｖａ」バイトコードを効率的に実行するように、アクセラレータエンジンに加えるのに有用な新たな命令を示す図である。図１６〜１９の実施形態は、ハードウェアクセラレータチップ内で使用することができるが、ハードウェア変換プログラム及び実行エンジンを使用した他のシステムと共に使用することもできる。
【００７７】
図１６Ａは、変換された命令の演算を速める実行エンジンのための新たな命令を示す。これらの変換された命令を有することにより、変換された命令を実行する実行エンジンの作動を改善することができる。命令「ＳＧＴＬＴ０」及び「ＳＧＴＬＴ０Ｕ」は、レジスタに−１、０、又は１を次に書き込むために、前の演算における加算器／減算器のＣ、Ｎ、及びＺ出力を使用する。これらの演算は、「Ｊａｖａ」バイトコード「ＬＣＭＰ」の効率を改善する。境界検査演算（ＢＮＤＣＫ）とレジスタヌル検査を備えた読込み及び記憶インデックス命令とは、インデックス付きアレーアクセスを行う「Ｊａｖａ」バイトコードのための変換された命令の演算を速める。
【００７８】
図１６Ｂは、命令「ＳＧＴＬＴ０」の演算を示す。最後の減算又は加算が１のＺビットを生じた時、レジスタ内への出力は０である。前のＺビットが０でありかつＮビットが０である時、レジスタ内への出力は１である。Ｚビットが０であありかつＮビットが１である時、レジスタ内への出力は−１である。
【００７９】
図１６Ｃは、符号なし演算が使用される命令「ＳＧＴＬＴ０Ｕ」を示す。この例においては、Ｚ値が高い場合は、レジスタに対する出力は０である。Ｚ値が低い場合は、繰り上がりは０であり、レジスタに対する出力は−１である。Ｚ値が低くかつ繰り上がりが１である場合は、レジスタに対する出力は１である。
【００８０】
図１６Ｄは、境界検査命令「ＢＮＤＣＫ」を示す。この命令においては、インデックスがアレーサイズ値から減算される。インデックスがアレーサイズよりも大きい場合は、繰り上がりは１であり、例外が生成されることになる。インデックスがアレーサイズよりも小さい場合は、繰り上がりは０であり、例外は生じないことになる。
【００８１】
図１６Ｅは、インデックス演算に加えてヌル値に関してレジスタを検査するインデックス読込み及びインデックス記憶を含むインデックス付き命令を示す。この場合は、アレーポインタレジスタが０であるならば、例外が生じる。アレーポインタが０でないならば、例外は生じない。
【００８２】
図１７は、図１６Ａの新たな命令に対するシステムのいくつかの詳細を実施する実行エンジンの一例を示す。インデックス付き読込みに対しては、ゼロ検査論理１７０が、レジスタＨのようなレジスタに記憶されたインデックスの値がゼロであるか否かを検査する。ゼロ検査使用可能化が設定されている場合（すなわち、命令が４つの命令「ＬＤＸＮＣ」、「ＬＷＸＮＣ」、「ＳＴＸＮＣ」、又は「ＳＷＸＮＣ」の１つである場合）、ゼロ検査使用可能化は高く設定される。尚、読込みに対する他の演算は、この演算と同時に行うことができる。ゼロ検査論理１７０は、アレーに対するポインタが、アレーポインタに対するヌル値を表すゼロではないことを保証する。ポインタが正しく初期化された時は、値は０ではなく、従って値が０である時は、例外が生成される。
【００８３】
加算器／減算器ユニット１７２は、結果を生み出し、また、Ｎ、Ｚ、及びＣ論理１７４へ送られるＮ、Ｚ、及びＣビットも生み出す。境界検査の場合について言えば、境界検査論理１７６は、インデックスがアレーのサイズ内であるか否かを検査する。境界検査においては、インデックス値はアレーサイズから減算されて、インデックス値は１つのレジスタに記憶され、アレー値は別のレジスタに記憶される。繰り上がりが存在する場合は、これは例外を表しており、境界検査論理１７６は、境界検査が使用可能にされた時に範囲外インデックス例外を発生する。
【００８４】
論理ユニット１７８は、新しい論理１８０を含む。この新しい論理１８０は、「ＳＧＴＬＴ０」命令及び「ＳＧＴＬＴ０Ｕ」命令を実行する。論理１８０は、前の減算又は加算からのＮ及びＺ繰り上がりビットを使用する。図１６Ａ及び１６Ｃに示すように、論理１６０は、１、０、又は−１を発生し、これらは次にマルチプレクサ（ｍｕｘ）１８２へ送られる。「ＳＧＴＬＴ０」又は「ＳＧＴＬＴ０Ｕ」命令が使用される時、論理１８０からの値は、ｍｕｘ１８２により選択される。
【００８５】
図１８Ａは、「Ｊａｖａ」バイトコード命令「ＩＡＬＯＡＤ」を示す。スタックの上部２つのエントリは、インデックス及びアレー参照であって、これらは、アレー内へのインデックスオフセットにより指示された単一の値に変換される。図１８Ｂに示すような従来の命令を使用して、アレー参照は、ヌルポインタ例外が発生されることになるか否かを調べるために０と比較される必要がある。次に、インデックスがアレー境界の外側にあるか否かを判断するために、分岐検査が行われる。インデックス値アドレスが計算され、次に、読込まれる。図１８Ｃにおいては、新しい命令を使用して、「ＬＷＸＮＣ」参照がアレーポインタを包含するレジスタに対してゼロ検査を行う。境界検査演算は、インデックスがアレーサイズ内であることを確実にする。その後に、アドレス及び読込みを判断するための加算が行われる。
【００８６】
図１９Ａは、「ＬＣＭＰ」命令の演算を示しており、スタックの上部２つの値は、第１の値に対する２つのワードを含む。スタック上の第２の２つの値は、値１ワード１及び２を含んでおり、値１が値２と等しいか、値１が値２よりも大きいか、又は値１が値２よりも小さいかに基づいて整数結果が発生される。
【００８７】
図１９Ｂは、「Ｊａｖａ」の「ＬＣＭＰ」命令の従来的な命令の実施を示す。尚、要求された時間を有する多数の分岐が必要とされる。
【００８８】
図１９Ｃにおいては、「ＳＧＴＬＴ０Ｕ」命令の存在がコードの演算を単純化し、本発明のシステムの速度を速めることができる。
【００８９】
ハードウェア変換プログラムは、上述の新たな命令内への変換のために使用可能にされる。これは、「Ｊａｖａ」バイトコードからの変換をより効率的にする。
【００９０】
本発明の「アクセラレータチップ」は、いくつかの利点を有する。この「アクセラレータチップ」は、ホストマイクロプロセッサがその割込みを行っている時、「Ｊａｖａ」バイトコード命令を実行するために、システムメモリに直接アクセスし、「Ｊａｖａ」ソフトウェア実行の速度を速めるのに貢献する。アクセラレータチップは、バイトコードを実行し、それらをコンパイルしないので、それは、追加的なメモリ要件を課さず、アヘッドオブタイム（ＡＯＴ）又はジャストインタイム（ＪＩＴ）コンパイル技術を使用するよりも廉価で効率のよい解決法となる。システムレベルのエネルギ使用は、より速い実行時間、減少されたメモリアクセス、及びアクセラレータチップ内に統合されたパワーマネージメントの組合せにより最小化される。バイトコードを実行していない時、「アクセラレータチップ」は、自動的にその節電スリープモードになる。アクセラレータチップは、データローカリゼーションを使用し、命令レベル並列処理（ＩＬＰ）最適化は、最大の性能を達成する。アクセラレータチップ内に局所的に保持されたデータは、好ましくは、「Ｊａｖａ」スタック上の最上部エントリと、「ＩＬＰ」最適化の効力を増大させてシステムメモリに対するアクセスを減少させるローカル変数とを含む。これらの技術により、高速かつ一貫した実行が行われ、システムのエネルギ使用が減少する。これは、バイトコードをデータとして取り扱い、従って、それらの命令キャッシュからほとんど又は全く利益を導き出さないソフトウェア解釈に依存する典型的な市販マイクロプロセッサとは対照的である。また、「Ｊａｖａ」バイトコードとそれらに付随するオペランドとは長さが変化するので、典型的なソフトウェアバイトコード解釈プログラムは、各「Ｊａｖａ」バイトコード取出しサイクル、つまり性能及び電力消費に関して非効率な処理を完了するために、メモリからいくつかのデータアクセスを行わなくてはならない。「Ｊａｖａ仮想マシン（ＪＶＭ）」は、スタックベースマシンであって、ほとんどのソフトウェア解釈プログラムは、「Ｊａｖａ」スタック全体をシステムメモリ内に置いており、各「Ｊａｖａ」バイトコード命令を実行するためにいくつかの高価なメモリトランザクションを必要とする。バイトコード取出しの場合のように、メモリベース「Ｊａｖａ」スタックを管理してこれと対話するために必要とされるメモリトランザクションは、性能の点で高価であり、システムの電力消費を増大させる。
【００９１】
「アクセラレータチップ」は、直接に典型的なメモリシステム設計に対して容易にインタフェースで接続し、あらゆるシステムソフトウェアに対して十分に透過的であり、何らのポート又は新たな開発ツールを必要とすることなくその恩典をもたらす。「ＪＶＭ」は、「Ｊａｖａ」バイトコードの実行をアクセラレータチップ内に押し込めるために好ましくは変更されるが、全ての他のシステム構成要素及びソフトウェアは、その存在に気付かない。これは、任意の及び全ての市販の開発ツール、オペレーティングシステム、及び固有のアプリケーションソフトウェアが、何らの修正もなくかついかなる新しいツール又はソフトウェアを必要とすることもなく、そのまま作動することを可能にする。これは、オペレーティングシステムソフトウェア、常駐アプリケーション、デバッガ、シミュレータ、又は他の開発ツールへの投資を保存することでもある。アクセラレータチップの導入は、ホストマイクロプロセッサとシステムメモリとの間のメモリアクセスに対して透過的であるが、待機状態を導入する場合がある。「アクセラレータチップ」は、性能、装置サイズ、部品コスト、電力消費、組込みの容易さ、及び市場に出すまでの時間が重要な設計上の考慮事項である携帯／無線受話器、携帯情報端末、及び他の種類の「インターネット電気器具」に対して有用である。
【００９２】
一実施形態においては、アクセラレータチップは、チップスタックとしてプロセッサチップと統合される。別の実施形態においては、アクセラレータチップは、メモリと同一のシリコン上に設けられる。代替的に、アクセラレータチップは、チップスタックとしてメモリと統合される。更に別の実施形態においては、プロセッサチップは、システムオンチップである。代替実施形態においては、システムオンチップは、セルラー電話に使用されるようになっている。
【００９３】
一実施形態においては、アクセラレータチップは、「Ｊａｖａ」バイトコード及び「Ｃ＃／．ＮＥＴ」のための「ＭＳＩＬ」のような２つ又はそれ以上の中間言語の実行をサポートする。
【００９４】
本発明の一実施形態においては、本システムは、少なくとも１つのメモリと、この少なくとも１つのメモリに作動可能に接続されたプロセッサチップと、アクセラレータチップとを含み、アクセラレータチップは、この少なくとも１つのメモリと作動可能に接続され、この少なくとも１つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも１つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、ハードウェアクセラレータは、中間言語命令を実行するための「Ｊａｖａ」プロセッサのアクセラレータを含んでいる。
【００９５】
本発明の更に別の実施形態においては、本システムは、少なくとも１つのメモリと、この少なくとも１つのメモリに作動可能に接続されたプロセッサチップと、この少なくとも１つのメモリと作動可能に接続された中間言語アクセラレータチップとを含み、この少なくとも１つのメモリに対するプロセッサチップのメモリアクセスは、アクセラレータチップを通じて送られ、アクセラレータチップは、この少なくとも１つのメモリに対する直接アクセスを有し、中間言語で書かれたプログラムの少なくとも一部分を実行するようになっており、いくつかの命令は、コールバックを発生し、プロセッサチップ上で実行される。
【００９６】
上述の実施形態を参照しながら本発明について説明したが、好ましい実施形態及び方法に対するこの説明は、限定的な意味に解釈されないものとする。例えば、本明細書の本文及び請求項で使用される「Ｊａｖａ」という用語は、「Ｊａｖａ」の後継プログラミング言語又は基本的な「Ｊａｖａ」概念（仮想マシンの作動を指示するためのバイトコードのような汎用命令の使用）を使用した他のプログラミング言語を網羅するものと解釈されるべきである。本発明の全ての態様は、特定の説明又は本明細書に示した構成に限定されないということも理解すべきである。開示した発明の様々な実施形態の形態及び詳細のいくつかの修正、及び本発明の他の変形は、本発明の開示を参照すれば当業者には明らかであろう。従って、特許請求の範囲は、説明した実施形態の上述のあらゆる修正又は変形を、それらが本発明の真の精神及び範囲に入るものとして網羅するように考慮されている。
【図面の簡単な説明】
【００９７】
【図１】本発明の一実施形態のシステムを示す図である。
【図２】本発明の一実施形態の「アクセラレータチップ」を示す図である。
【図３】本発明のシステムの別の実施形態を示す図である。
【図４Ａ】本発明の一実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図４Ｂ】本発明の別の実施形態の「アクセラレータチップ」のモードを示す状態マシンの図である。
【図５】本発明の「アクセラレータチップ」の一実施形態のパワーマネージメント方式を示す表である。
【図６】「アクセラレータチップ」により実行されるバイトコードのリスト、及び本発明のシステムの一実施形態に対するプロセッサチップへのコールバックを引き起こすバイトコードのリストの一例を示す表である。
【図７】本発明のシステムの一実施形態と共に使用することができるメモリユニットのための共通システムメモリ編成を示す図である。
【図８】本発明の「アクセラレータチップ」の一実施形態のためのピン機能の表である。
【図９】本発明の一実施形態に対するアクセラレータチップを通じた又はアクセラレータチップを用いない場合の異なるアクセス時間に対するメモリ待ち状態を示す図である。
【図１０】本発明の一実施形態のアクセラレータチップの高レベルの図である。
【図１１】アクセラレータチップが「ＳＲＡＭ」とインタフェースで接続しているシステムの図である。
【図１２】「ＳＤＲＡＭ」とインタフェースで接続したアクセラレータチップの図である。
【図１３】システムオンチップよりもメモリに対するより大きなビットのインタフェースを有するアクセラレータチップを備えたシステムの図である。
【図１４】「ＬＣＤ」ディスプレイと相互接続されたグラフィックアクセラレータエンジンを含む「アクセラレータチップ」の図である。
【図１５】ピンがフラッシュメモリ及び「ＳＲＡＭ」との相互接続専用である必要がないような、チップスタックパッケージ内のアクセラレータチップの使用を示す図である。
【図１６Ａ】本発明の一実施形態のアクセラレータエンジンの一実施形態のための新しい命令の図である。
【図１６Ｂ】図１６Ａの新しい命令の演算を示す図である。
【図１６Ｃ】図１６Ａの新しい命令の演算を示す図である。
【図１６Ｄ】図１６Ａの新しい命令の演算を示す図である。
【図１６Ｅ】図１６Ａの新しい命令の演算を示す図である。
【図１７】図１６Ａの新しい命令に対する論理要素を示す、実行エンジンの一実施形態の図である。
【図１８Ａ】「Ｊａｖａ」バイトコード命令を示す図である。
【図１８Ｂ】「Ｊａｖａ」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図１８Ｃ】図１８Ａの「Ｊａｖａ」バイトコード命令を実施するために図１６Ａの新しい命令を備えたマイクロコードを示す図である。
【図１９Ａ】「Ｊａｖａ」バイトコード命令「ＬＣＭＰ」を示す図である。
【図１９Ｂ】図１９Ａの「ＬＣＭＰ」の「Ｊａｖａ」バイトコード命令を実施するための従来のマイクロコードを示す図である。
【図１９Ｃ】図１９Ａの「Ｊａｖａ」バイトコード命令「ＬＣＭＰ」を実施する新しい命令を備えたマイクロコードを示す図である。
【符号の説明】
【００９８】
２０  システム
２２  アクセラレータチップ
２４  メモリユニット
２６  プロセッサチップ
３０  メモリインタフェースユニット
３４  ハードウェア変換プログラムユニット
３６  実行エンジン
【図１】
2004522236.tif 000002
【図２】
2004522236.tif 000003
【図３】
2004522236.tif 000004
【図４Ａ】
2004522236.tif 000005
【図４Ｂ】
2004522236.tif 000006
【図５】
2004522236.tif 000007
【図６】
2004522236.tif 000008
【図７】
2004522236.tif 000009
【図８】
2004522236.tif 000010
【図９】
2004522236.tif 000011
【図１０】
2004522236.tif 000012
【図１１】
2004522236.tif 000013
【図１２】
2004522236.tif 000014
【図１３】
2004522236.tif 000015
【図１４】
2004522236.tif 000016
【図１５】
2004522236.tif 000017
【図１６Ａ】
2004522236.tif 000018
【図１６Ｂ】
2004522236.tif 000019
【図１６Ｃ】
2004522236.tif 000020
【図１６Ｄ】
2004522236.tif 000021
【図１６Ｅ】
2004522236.tif 000022
【図１７】
2004522236.tif 000023
【図１８Ａ】
2004522236.tif 000024
【図１８Ｂ】
2004522236.tif 000025
【図１８Ｃ】
2004522236.tif 000026
【図１９Ａ】
2004522236.tif 000027
【図１９Ｂ】
2004522236.tif 000028
【図１９Ｃ】
2004522236.tif 000029
【国際公開パンフレット】
2004522236.tif 000030
2004522236.tif 000031
2004522236.tif 000032
2004522236.tif 000033
2004522236.tif 000034
2004522236.tif 000035
2004522236.tif 000036
2004522236.tif 000037
2004522236.tif 000038
2004522236.tif 000039
2004522236.tif 000040
2004522236.tif 000041
2004522236.tif 000042
2004522236.tif 000043
2004522236.tif 000044
2004522236.tif 000045
2004522236.tif 000046
2004522236.tif 000047
2004522236.tif 000048
2004522236.tif 000049
2004522236.tif 000050
2004522236.tif 000051
2004522236.tif 000052
2004522236.tif 000053
2004522236.tif 000054
2004522236.tif 000055
2004522236.tif 000056
2004522236.tif 000057
2004522236.tif 000058
2004522236.tif 000059
2004522236.tif 000060
2004522236.tif 000061
2004522236.tif 000062
2004522236.tif 000063
2004522236.tif 000064
2004522236.tif 000065
2004522236.tif 000066
2004522236.tif 000067
2004522236.tif 000068
2004522236.tif 000069
2004522236.tif 000070
2004522236.tif 000071
2004522236.tif 000072
2004522236.tif 000073
2004522236.tif 000074
2004522236.tif 000075
2004522236.tif 000076
2004522236.tif 000077
2004522236.tif 000078
2004522236.tif 000079
2004522236.tif 000080
2004522236.tif 000081
2004522236.tif 000082
2004522236.tif 000083
2004522236.tif 000084
2004522236.tif 000085
2004522236.tif 000086
2004522236.tif 000087
【国際調査報告】
2004522236.tif 000088