(57)【要約】【課題】プロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の仮想処理ユニットを備える組込みプロセッサアーキテクチャを提供すること。【解決手段】  本発明は、処理ユニットによって共有される１つ以上の実行ユニットは、スレッドからの命令を実行する。イベント送達メカニズムは、非限定的例として、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベント等のイベントを、命令を実行することなく、それぞれのスレッドに送達する。各イベントは、本発明のある局面によると、スレッドの外で命令を実行することなく、それぞれのスレッドによって処理され得る。スレッドは、これらのスレッドが生きている間、同じそれぞれの処理ユニット上での実行を強いられる必要はない（しかしながら、いくつかの実施形態では、これらは、それを強いられ得る）。【選択図】  図１
2005182791.tif 000002
【特許請求の範囲】
【請求項１】
組込みプロセッサであって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の処理ユニットと、
Ｂ．前記複数の処理ユニットによって共有され、かつ、前記複数の処理ユニットと通信接続された１つ以上の実行ユニットであって、前記実行ユニットは、前記スレッドからの命令を実行する、１つ以上の実行ユニットと、
Ｃ．イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、
ｉ    前記複数の処理ユニットと通信接続され、
ｉｉ  そのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムと
を備える、組込みプロセッサ。
【請求項２】
前記イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理する、請求項１に記載の組込みプロセッサ。
【請求項３】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項１に記載の組込みプロセッサ。
【請求項４】
前記実行ユニットは、どのスレッドからの命令であるかを知ることを必要とせずに、前記スレッドからの命令を実行する、請求項１に記載の組込みプロセッサ。
【請求項５】
各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、請求項１に記載の組込みプロセッサ。
【請求項６】
前記処理ユニットの少なくとも１つは、仮想処理ユニットである、請求項１に記載の組込みプロセッサ。
【請求項７】
組込みプロセッサであって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の仮想処理ユニットであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、
Ｂ．複数の実行ユニットと、
Ｃ．前記複数の処理ユニットおよび前記複数の実行ユニットと通信接続されるパイプラインコントロールであって、前記パイプラインコントロールは、前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令を起動する、パイプラインコントロールと、
Ｄ．前記複数の処理ユニットと通信接続され、かつ、命令の実行なしに、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、ここで、前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、イベント送達メカニズムと
を備える組込みプロセッサであって、
Ｅ．イベントが送達されるスレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理する、組込みプロセッサ。
【請求項８】
前記パイプラインコントロールは、それぞれの仮想処理ユニットと各々が関連付けられた複数の命令キューを備える、請求項７に記載の組込みプロセッサ。
【請求項９】
前記パイプラインコントロールは、前記命令キューからの命令クラスをデコードする、請求項８に記載の組込みプロセッサ。
【請求項１０】
前記パイプラインコントロールは、前記処理ユニットによって、リソース供給ソースと、前記命令キューからディスパッチされた前記命令の宛先レジスタとにアクセスする、請求項８に記載の組込みプロセッサ。
【請求項１１】
前記実行ユニットは、命令アドレスの生成、アドレス変換および命令のフェッチのいずれかを担う分岐実行ユニットを備える、請求項８に記載の組込みプロセッサ。
【請求項１２】
前記分岐実行ユニットは、前記仮想処理ユニットの状態を維持する、請求項１１に記載の組込みプロセッサ。
【請求項１３】
前記パイプラインコントロールは、前記仮想処理ユニットによって、前記実行ユニットにアクセスする、請求項７に記載の組込みプロセッサ。
【請求項１４】
前記パイプラインコントロールは、仮想処理ユニットごとの前記命令キューが空になると、前記仮想処理ユニットによって共有される分岐実行ユニットにシグナリングする、請求項７に記載の組込みプロセッサ。
【請求項１５】
前記パイプラインコントロールは、前記実行ユニットをアイドリングする、請求項７に記載の組込みプロセッサ。
【請求項１６】
前記複数の実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリユニットのいずれかを備える、請求項７に記載の組込みプロセッサ。
【請求項１７】
組込みプロセッサシステムであって、
Ａ．複数の組込みプロセッサと、
Ｂ．前記複数の組込みプロセッサ上で実行する複数の仮想処理ユニットであって、各仮想処理は、１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を実行し、かつ、各仮想処理ユニットは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、
Ｃ．前記複数の処理ユニットによって共有され、かつ、前記複数の処理ユニットと通信接続された１つ以上の実行ユニットであって、前記実行ユニットは、前記スレッドからの命令を実行し、前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリ実行ユニットのいずれかを備える、１つ以上の実行ユニットと、
Ｄ．イベントが関連付けられるそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、
ｉ    前記複数の処理ユニットと通信接続され、
ｉｉ  そのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムと
を備える、組込みプロセッサシステム。
【請求項１８】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理する、請求項１７に記載の組込みプロセッサシステム。
【請求項１９】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項１８に記載の組込みプロセッサシステム。
【請求項２０】
前記分岐ユニットは、前記スレッドのために実行されるべき命令のフェッチを担う、請求項１８に記載の組込みプロセッサシステム。
【請求項２１】
前記分岐ユニットは、命令アドレスの生成およびアドレス変換のいずれかをさらに担う、請求項２０に記載の組込みプロセッサシステム。
【請求項２２】
前記分岐ユニットは、前記それぞれの仮想処理ユニットごとのスレッド状態を格納するスレッド状態記憶装置を備える、請求項２１に記載の組込みプロセッサシステム。
【請求項２３】
Ａ．前記複数の処理ユニットおよび前記複数の実行ユニットと通信接続されるパイプラインコントロールであって、前記パイプラインコントロールは、前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令をディスパッチする、パイプラインコントロールを備え、
Ｂ．前記パイプラインコントロールは、それぞれの仮想処理ユニットと各々が関連付けられた複数の命令キューを備え、
Ｃ．前記分岐実行ユニットによってフェッチされた命令は、対応するスレッドが実行される前記それぞれの仮想処理ユニットと関連付けられた前記命令キュー内に配置される、請求項１８に記載の組込みプロセッサシステム。
【請求項２４】
１つ以上の命令が、前記命令キューを等しいレベルに保つという目的で、前記スレッドのために、ある時点にフェッチされる、請求項２３に記載の組込みプロセッサシステム。
【請求項２５】
前記パイプラインコントロールは、１つ以上の命令を、実行するために、ある時点に所与の命令キューからディスパッチする、請求項２４に記載の組込みプロセッサシステム。
【請求項２６】
前記パイプラインコントロールによって、所与の時点に所与の命令キューからディスパッチされた多数の命令は、前記キューの命令シーケンス内のストップフラグによってコントロールされる、請求項２５に記載の組込みプロセッサシステム。
【請求項２７】
１つ以上のスレッドからの複数の命令を同時に、前記パイプラインコントロールが起動し、かつ前記実行ユニットが実行する、請求項２３に記載の組込みプロセッサシステム。
【請求項２８】
組込みプロセッサであって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の処理ユニットであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の処理ユニットと、
Ｂ．イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、
ｉ    前記複数の処理ユニットと通信接続され、
ｉｉ  そのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムと
を備える、組込みプロセッサ。
【請求項２９】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理する、請求項２８に記載の組込みプロセッサ。
【請求項３０】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項２８に記載の組込みプロセッサ。
【請求項３１】
前記処理ユニットの少なくとも１つは、仮想処理ユニットである、請求項２８に記載の組込みプロセッサ。
【請求項３２】
組込みプロセッサシステムであって、
Ａ．複数の組込みプロセッサと、
Ｂ．前記複数の組込みプロセッサ上で実行する複数の仮想処理ユニットであって、各仮想処理は、１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を実行し、かつ、各仮想処理ユニットは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、
Ｃ．イベントが関連付けられるそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、
ｉ    前記複数の処理ユニットと通信接続され、
ｉｉ  そのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムと
を備える、組込みプロセッサシステム。
【請求項３３】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理する、請求項３２に記載の組込みプロセッサシステム。
【請求項３４】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項３３に記載の組込みプロセッサシステム。
【請求項３５】
組込みプロセシングの方法であって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の処理ユニットの各々上で実行するステップと、
Ｂ．前記複数の処理ユニットによって共有される１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップと、
Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドにイベントを送達するステップと
を包含する、方法。
【請求項３６】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含する、請求項３５に記載の方法。
【請求項３７】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項３５に記載の方法。
【請求項３８】
前記１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップは、どのスレッドからの命令であるかを知ることを必要としない、請求項３５に記載の方法。
【請求項３９】
各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、請求項３５に記載の方法。
【請求項４０】
前記処理ユニットの少なくとも１つは、仮想処理ユニットである、請求項３５に記載の方法。
【請求項４１】
前記組込みプロセシングの方法であって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、ステップと、
Ｂ．前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令を起動するステップと、
Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップであって、前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、ステップと、
Ｄ．前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップと
を包含する、方法。
【請求項４２】
前記起動するステップは、前記命令キューからの命令クラスをデコードするステップを包含する、請求項４１に記載の方法。
【請求項４３】
前記起動するステップは、前記仮想処理ユニットによる、リソース供給ソース、および前記命令キューからディスパッチされた前記命令の宛先レジスタへのアクセスをコントロールするステップを包含する、請求項４１に記載の方法。
【請求項４４】
前記仮想処理ユニットのすべてによって共有される分岐実行ユニットを用いて、命令アドレスの生成、アドレス変換、および命令をフェッチするステップのいずれかを実行するステップを包含する、請求項４１に記載の方法。
【請求項４５】
前記分岐実行ユニットを用いて、前記仮想処理ユニットの状態を維持するステップを包含する、請求項４４に記載の方法。
【請求項４６】
前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリユニットのいずれかを備える、請求項４１に記載の方法。
【請求項４７】
組込みプロセシングの方法であって、
Ａ．複数の仮想処理ユニットを複数の組込みプロセッサ上で実行するステップと、
Ｂ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ仮想処理ユニットおよび／または同じ組込みプロセッサ上での実行を強いられるか、または強いられない、ステップと、
Ｃ．前記複数の処理ユニットによって共有される１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップであって、前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリ実行ユニットのいずれかを備える、ステップと、
Ｄ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップと
を包含する、方法。
【請求項４８】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含する、請求項４７に記載の方法。
【請求項４９】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項４８に記載の方法。
【請求項５０】
前記分岐実行ユニットを用いて、前記スレッドのために実行されるべき命令をフェッチするステップを包含する、請求項４８に記載の方法。
【請求項５１】
前記分岐実行ユニットで、命令アドレスの生成およびアドレス変換のいずれかを実行するステップを包含する、請求項５０に記載の方法。
【請求項５２】
Ａ．前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令をディスパッチするステップを包含し、
Ｂ．前記ディスパッチするステップは、前記それぞれのスレッドごとにフェッチされた命令を、前記スレッドが実行される前記仮想処理ユニットと関連付けられた命令キュー内に配置するステップを包含する、請求項４８に記載の方法。
【請求項５３】
前記ディスパッチするステップは、前記命令キューを等しいレベルに保つという目的で、与えられたスレッドのために、１つ以上の命令をある時点にフェッチするステップを包含する、請求項５２に記載の方法。
【請求項５４】
前記ディスパッチするステップは、前記実行ユニットによって実行するために、１つ以上の命令を、ある時点に所与の命令キューからディスパッチするステップを包含する、請求項５３に記載の方法。
【請求項５５】
前記パイプラインコントロールによって、所与の時点に所与の命令キューからディスパッチされた多数の命令は、前記キューの命令シーケンス内のストップフラグによってコントロールされる、請求項５４に記載の方法。
【請求項５６】
１つ以上のスレッドから複数の命令を同時に起動および実行するステップを包含する、請求項５２に記載の方法。
【請求項５７】
組込みプロセシングの方法であって、
Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、ステップと、
Ｂ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップと
を包含する、方法。
【請求項５８】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含する、請求項５７に記載の方法。
【請求項５９】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項５７に記載の方法。
【請求項６０】
前記処理ユニットの少なくとも１つは、仮想処理ユニットである、請求項５７に記載の方法。
【請求項６１】
組込みプロセシングの方法であって、
Ａ．複数の仮想処理ユニットを複数の組込みプロセッサ上で実行するステップと、
Ｂ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各仮想処理ユニットは、前記スレッドが生きている間、同じ仮想処理ユニットおよび／または同じ組込みプロセッサ上での実行を強いられるか、または強いられない、ステップと、
Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップと
を包含する、方法。
【請求項６２】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理する、請求項６１に記載の方法。
【請求項６３】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、請求項６２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、「Ｖｉｒｔｕａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｍｅｔｈｏｄｓ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｗｉｔｈ  Ｕｎｉｆｉｅｄ  Ｅｖｅｎｔ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ａｎｄ  Ｃｏｎｓｕｍｅｒ−ｐｒｏｄｕｃｅｒ  Ｍｅｍｏｒｙ  Ｏｐｅｒａｔｉｏｎｓ」と称される、同一人に譲受された、係属中の米国特許出願シリアルナンバー第１０／４４９，７３２号（２００３年５月３０日出願）の継続出願であり、かつ、その特権権の利益を主張する。この出願の教示は、参考のため、本明細書中に援用される。
【０００２】
本発明は、デジタルデータ処理に関し、より具体的には、組込みプロセッサアーキテクチャおよびオペレーションに関する。本発明は、高品位テレビ、ゲームシステム、デジタルビデオレコーダ、ビデオおよび／またはオーディオプレーヤ、パーソナルデジタルアシスタント、パーソナルナリッジナビゲータ、携帯電話、ならびに他のマルチメディアおよび非マルチメディアデバイスに適用される。
【背景技術】
【０００３】
従来技術の組込みプロセッサベースまたはアプリケーションシステムは、通常、（１）ユーザインターフェース処理、ハイレベルアプリケーション処理、およびオペレーティングシステムタスクをハンドリングする、例えば、ＡＲＭ、ＭＩＰまたはｘ８６の変種等の１つ以上の汎用プロセッサを、（２）特定のインターフェース、または特定のアプリケーション内での特定のタイプの算術演算をリアルタイム／低レイテンシーベースでハンドリングするためのメディアプロセッサを含む１つ以上のデジタル信号プロセッサ（ＤＳＰ）と組み合わせる。ＤＳＰの代わりに、またはこれに加えて、例えば、ＤＳＰが複数のアクティビティを同時にハンドリングすることができないか、またはＤＳＰが特別に専門的な演算素子のニーズを満たすことができないことが原因で、プログラマブルベースでハンドリングすることができない専用のニーズに対処するために、特定用途向けハードウェアが提供されることが多い。
【０００４】
これらの従来技術の例は、通常、メインプロセッサを別個のグラフィックプロセッサおよび別個のサウンドプロセッサと組み合わせるパーソナルコンピュータ；通常、メインプロセッサと、別個にプログラムされたグラフィックプロセッサとを組み合わせるゲームシステム；通常、汎用プロセッサと、ｍｐｅｇ２デコーダチップおよびｍｐｅｇ２エンコーダチップと、特殊用途向けデジタル信号プロセッサとを組み合わせるデジタルビデオレコーダ；通常、汎用プロセッサと、ｍｐｅｇ２デコーダチップおよびｍｐｅｇ２エンコーダチップと、特殊用途向けＤＳＰまたはメディアプロセッサとを組み合わせるデジタルテレビ；通常、ユーザインターフェースおよびアプリケーション処理用のプロセッサと、携帯電話ＧＳＭ、ＣＤＭＡまたは他のプロトコル処理用の特定用途向けＤＳＰとを組み合わせる携帯電話を含む。
【０００５】
米国特許第６，４０８，３８１号（特許文献１）は、各種パイプラインステージの命令の状態を示すエントリを有するスナップショットファイルを利用するパイプラインプロセッサを開示する。パイプライン内で命令が移動すると、対応するスナップショットファイルエントリが変更される。これらのファイルをモニタリングすることによって、デバイスは、あるパイプラインステージからの中間結果が、例えば、最初にレジスタに格納されることなく、内部オペランドバスを介して別のステージに直接転送され得る。
【０００６】
米国特許第６，２１９，７８０号（特許文献２）は、クラスタに分類された複数の実行ユニットでのコンピュータのスループットの向上に関する技術を開示する。この特許は、「生産者（ｐｒｏｄｕｃｅｒ）」命令の結果に従属する「消費者（ｃｏｎｓｕｍｅｒ）」命令を識別することを提示する。その後、各生産者命令の複数のコピーが実行され、すなわち、従属する消費者命令を実行するために引き続いて用いられるクラスタごとに１つのコピーが実行される。
【特許文献１】米国特許第６，４０８，３８１号
【特許文献２】米国特許第６，２１９，７８０号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一般的な従来技術のアプローチが汎用プロセッサをＤＳＰおよび／または特定用途向けハードウェアと組み合わせる理由は、複数のアクティビティ（例えば、イベントまたはスレッド）をリアルタイムベースで同時にハンドリングする必要があるためであり、ここで、各アクティビティは、異なったタイプの演算素子を必要とする。さらに、従来技術の単一プロセッサは、アクティビティのすべてをハンドリングする容量を有さない。さらに、これらのアクティビティのいくつかは、従来技術のプロセッサがこれらのうちの２つ以上を適切に処理することができないような性質のものである。これは、特に、リアルタイムアクティビティに当てはまり、完全に避けられなければ、オペレーティングシステムの介入によって、これへの時間的パフォーマンスが低下する。
【０００８】
従来技術のアプローチの１つの問題は、ハードウェア設計の複雑性であり、異種の演算素子をプログラムおよびインターフェースする際のソフトウェアの複雑性を併せ持つ。別の問題は、ハードウェアおよびソフトウェアの両方をアプリケーションごとにリエンジニアしなければならないことである。さらに、従来技術のシステムは負荷分散しない。すなわち、容量が、あるハードウェア素子から別のハードウェア素子に転送され得ない。
【０００９】
本発明の目的は、デジタルデータ処理の改善された装置および方法を提供することである。本発明のさらなる目的は、複数の動作がリアルタイムであろうとなかろうと単一のプロセッサ上で実行することをサポートするような装置および方法を提供すること、および、一緒に動作することができるような複数のプロセッサを提供することである。関連目的は、組込み環境またはアプリケーションに適するような装置および方法を提供することである。別の関連目的は、設計、製造、市場投入までの期間、コストおよび／または保守を容易にするような装置および方法を提供することである。
【００１０】
本発明のさらなる目的は、ごく少数挙げると、デジタルテレビ、デジタルビデオレコーダ、ビデオおよび／またはオーディオプレーヤ、パーソナルデジタルアシスタント、パーソナルナリッジナビゲータ、および携帯電話を例として含むがこれらに限定されない、現在および将来のアプライアンスの計算、サイズ、パワーおよびコスト要件を満たす組込み（または他の）プロセシングの改善された装置および方法を提供することである。
【００１１】
さらに別の目的は、種々のアプリケーションをサポートする改善された装置および方法を提供することである。
【００１２】
さらに別の目的は、低コスト、低パワーであり、および／または、市場への投入が高速のロバストな実装をサポートするような装置および方法を提供することである。
【課題を解決するための手段】
【００１３】
これらおよび他の目的は、ある局面では、プロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の処理ユニットを備える組込みプロセッサを提供する本発明によって達成される。１つ以上の実行ユニットが処理ユニットによって共有され、スレッドからの命令を実行する。イベント送達メカニズムは、命令を実行することなく、それぞれのスレッドにイベント（ハードウェア割込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」およびメモリイベントを例として含むがこれらに限定されない）を送達する。各イベントは、そのスレッドの外で命令を実行することなく、それぞれのスレッドによって処理され得る。
【００１４】
本発明の関連する局面によると、スレッドが生きている間、これらのスレッドは、それぞれの同じ処理ユニット上での実行を強いられる必要がない。さらに別の関連する局面では、実行ユニットは、これらの命令が、どのスレッドからのものであるかを知ることを必要とせずに、スレッドからの命令を実行する。
【００１５】
本発明は、他の局面では、複数の実行ユニット上で並列実行するための複数のスレッドからの命令を開始するパイプラインコントロールユニットをさらに備える上述の組込みプロセッサを提供する。このパイプラインコントロールユニットは、仮想処理ユニットのそれぞれ１つと各々が関連付けられた複数の命令キューを備え得、このキューから命令がディスパッチされる。命令キューからの命令クラスをデコードすることに加えて、パイプラインコントロールユニットは、ディスパッチされる命令のソースレジスタおよび宛先レジスタを提供するリソースへのアクセスを仮想処理ユニットによってコントロールし得る。
【００１６】
他の関連する局面によると、複数の実行ユニットの中に分岐実行ユニットがある。これは、命令アドレス生成、アドレス変換および命令フェッチのいずれかを担当する。分岐実行ユニットは、さらに、仮想処理ユニットの状態を維持し得る。これは、パイプラインコントロールユニットによってコントロールされ得、このユニットは、各仮想処理ユニット命令キューが空になると、分岐実行ユニットにシグナリングする。
【００１７】
本発明の他の局面によると、上述の複数の仮想処理ユニットは、組込みプロセッサ上で実行し得る。他方、関連する局面では、これらの複数の仮想処理ユニットは、複数の組込みプロセッサ上で実行し得る。
【００１８】
本発明のさらなる局面は、上述のように、１つ以上のスレッドを各々が実行する、複数の処理ユニットを備える組込みプロセッサを提供する。イベント送達メカニズムは、上述のように、命令を実行することなく、イベントを、それらのイベントが関連付けられたそれぞれのスレッドに送達する。上述のように、処理ユニットは、仮想処理ユニットであり得る。そして、上述のように、これらは１つ以上の組込みプロセッサ上で実行し得る。
【００１９】
上述のように、組込みプロセッサおよびシステムは、わずかなレイテンシーで、またはレイテンシーなしで、かつオペレーティングシステムスイッチングオーバーヘッドを用いずに、複数のスレッドの実行と複数のイベントの処理とを同時に行うことができる。スレッドは、リアルタイムビデオ処理からＬｉｎｕｘオペレーティングシステム機能、最終使用アプリケーションの範囲であり得る。従って、組込みプロセッサおよびシステムは、非限定的な例として、高品位デジタルテレビ、ゲームシステム、デジタルビデオレコーダ、ビデオおよび／またはオーディオプレーヤ、パーソナルデジタルアシスタント、パーソナルナリッジナビゲータ、携帯電話、および他のマルチメディアデバイスおよび非マルチメディアデバイスのような、マルチメディアまたは他のデバイスに必要とされる多様な機能の直接実行をサポートするアプリケーションを有する。
【００２０】
さらに、上述のように、組込みプロセッサおよびシステムによって、特定用途向けハードウェアアクセラレータ、特定用途向けＤＳＰ、特定用途向けプロセッサ、または他の特定用途向けハードウェアを必要とせずに、すべての機能を単一のプログラミングおよび実行環境で展開および実行することが可能になる。複数のこのような組込みプロセッサが足し合わされた場合、これらは、シームレスに動作し、より多くの実行容量、および、より多くの並列スレッドハンドリング容量の両方を含む全容量をより大きくする。これらのプロセッサの付加は、スレッド、および特定のスレッドに向けたれたイベントの両方の観点からトランスペアレントである。プロセッサが処理するイベントおよびスレッドを割り当てる方法に基づいて、負荷分散もまた、部分的にトランスペアレントである。
【００２１】
本発明の他の局面は、上述のような構造を有して動作する、組込みプラットフォーム上で動作しないデジタルデータ処理システムを提供する。
【００２２】
本発明のさらなる局面は、上述のようなシステムのオペレーションを並列化する方法を提供する。
【００２３】
本発明のこれらおよび他の局面は、以下の図面および詳細な説明において明らかである。
【００２４】
図面を参照することによって、本発明がより完全に理解され得る。
【００２５】
本発明による組込みプロセッサは、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の処理ユニットと、Ｂ．前記複数の処理ユニットによって共有され、かつ、前記複数の処理ユニットと通信接続された１つ以上の実行ユニットであって、前記実行ユニットは、前記スレッドからの命令を実行する、１つ以上の実行ユニットと、Ｃ．イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、ｉ前記複数の処理ユニットと通信接続され、ｉｉそのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムとを備え、これにより上記目的を達成する。
【００２６】
前記イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理してもよい。
【００２７】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００２８】
前記実行ユニットは、どのスレッドからの命令であるかを知ることを必要とせずに、前記スレッドからの命令を実行してもよい。
【００２９】
各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられなくてもよい。
【００３０】
前記処理ユニットの少なくとも１つは、仮想処理ユニットであってもよい。
【００３１】
本発明による組込みプロセッサは、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の仮想処理ユニットであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、Ｂ．複数の実行ユニットと、Ｃ．前記複数の処理ユニットおよび前記複数の実行ユニットと通信接続されるパイプラインコントロールであって、前記パイプラインコントロールは、前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令を起動する、パイプラインコントロールと、Ｄ．前記複数の処理ユニットと通信接続され、かつ、命令の実行なしに、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、ここで、前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、イベント送達メカニズムとを備える組込みプロセッサであって、Ｅ．イベントが送達されるスレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理し、これにより、上記目的を達成する。
【００３２】
前記パイプラインコントロールは、それぞれの仮想処理ユニットと各々が関連付けられた複数の命令キューを備えてもよい。
【００３３】
前記パイプラインコントロールは、前記命令キューからの命令クラスをデコードしてもよい。
【００３４】
前記パイプラインコントロールは、前記処理ユニットによって、リソース供給ソースと、前記命令キューからディスパッチされた前記命令の宛先レジスタとにアクセスしてもよい。
【００３５】
前記実行ユニットは、命令アドレスの生成、アドレス変換および命令のフェッチのいずれかを担う分岐実行ユニットを備えてもよい。
【００３６】
前記分岐実行ユニットは、前記仮想処理ユニットの状態を維持してもよい。
【００３７】
前記パイプラインコントロールは、前記仮想処理ユニットによって、前記実行ユニットにアクセスしてもよい。
【００３８】
前記パイプラインコントロールは、仮想処理ユニットごとの前記命令キューが空になると、前記仮想処理ユニットによって共有される分岐実行ユニットにシグナリングしてもよい。
【００３９】
前記パイプラインコントロールは、前記実行ユニットをアイドリングしてもよい。
【００４０】
前記複数の実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリユニットのいずれかを備えてもよい。
【００４１】
本発明による組込みプロセッサシステムは、Ａ．複数の組込みプロセッサと、Ｂ．前記複数の組込みプロセッサ上で実行する複数の仮想処理ユニットであって、各仮想処理は、１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を実行し、かつ、各仮想処理ユニットは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、Ｃ．前記複数の処理ユニットによって共有され、かつ、前記複数の処理ユニットと通信接続された１つ以上の実行ユニットであって、前記実行ユニットは、前記スレッドからの命令を実行し、前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリ実行ユニットのいずれかを備える、１つ以上の実行ユニットと、Ｄ．イベントが関連付けられるそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、ｉ前記複数の処理ユニットと通信接続され、ｉｉそのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムとを備え、これにより、上記目的を達成する。
【００４２】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理してもよい。
【００４３】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００４４】
前記分岐ユニットは、前記スレッドのために実行されるべき命令のフェッチを担ってもよい。
【００４５】
前記分岐ユニットは、命令アドレスの生成およびアドレス変換のいずれかをさらに担ってもよい。
【００４６】
前記分岐ユニットは、前記それぞれの仮想処理ユニットごとのスレッド状態を格納するスレッド状態記憶装置を備えてもよい。
【００４７】
本発明による組込みプロセッサシステムは、Ａ．前記複数の処理ユニットおよび前記複数の実行ユニットと通信接続されるパイプラインコントロールであって、前記パイプラインコントロールは、前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令をディスパッチする、パイプラインコントロールを備え、Ｂ．前記パイプラインコントロールは、それぞれの仮想処理ユニットと各々が関連付けられた複数の命令キューを備え、Ｃ．前記分岐実行ユニットによってフェッチされた命令は、対応するスレッドが実行される前記それぞれの仮想処理ユニットと関連付けられた前記命令キュー内に配置されてもよい。１つ以上の命令が、前記命令キューを等しいレベルに保つという目的で、前記スレッドのために、ある時点にフェッチされてもよい。
【００４８】
前記パイプラインコントロールは、１つ以上の命令を、実行するために、ある時点に所与の命令キューからディスパッチしてもよい。
【００４９】
前記パイプラインコントロールによって、所与の時点に所与の命令キューからディスパッチされた多数の命令は、前記キューの命令シーケンス内のストップフラグによってコントロールされてもよい。
【００５０】
１つ以上のスレッドからの複数の命令を同時に、前記パイプラインコントロールが起動し、かつ前記実行ユニットが実行してもよい。
【００５１】
本発明の組込みプロセッサは、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を各々が実行する複数の処理ユニットであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の処理ユニットと、Ｂ．イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、ｉ前記複数の処理ユニットと通信接続され、ｉｉそのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムとを備え、これにより、上記目的を達しする。
【００５２】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理してもよい。
【００５３】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００５４】
前記処理ユニットの少なくとも１つは、仮想処理ユニットであってもよい。
【００５５】
本発明による組込みプロセッサシステムは、Ａ．複数の組込みプロセッサと、Ｂ．前記複数の組込みプロセッサ上で実行する複数の仮想処理ユニットであって、各仮想処理は、１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を実行し、かつ、各仮想処理ユニットは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、複数の仮想処理ユニットと、Ｃ．イベントが関連付けられるそれぞれのスレッドに前記イベントを送達するイベント送達メカニズムであって、前記イベント送達メカニズムは、ｉ前記複数の処理ユニットと通信接続され、ｉｉそのような各イベントを、命令を実行することなく、前記それぞれのスレッドに送達する、イベント送達メカニズムとを備え、これにより、上記目的を達成する。
【００５６】
イベントが送達される前記スレッドは、前記スレッドの外で命令を実行することなく、前記イベントを処理してもよい。
【００５７】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００５８】
本発明による組込みプロセシングの方法は、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の処理ユニットの各々上で実行するステップと、Ｂ．前記複数の処理ユニットによって共有される１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップと、Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドにイベントを送達するステップとを包含し、これにより、上記目的を達成する。
【００５９】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含してもよい。
【００６０】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００６１】
前記１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップは、どのスレッドからの命令であるかを知ることを必要としなくてもよい。
【００６２】
各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられなくてもよい。
【００６３】
前記処理ユニットの少なくとも１つは、仮想処理ユニットであってもよい。
【００６４】
本発明による前記組込みプロセシングの方法は、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、ステップと、Ｂ．前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令を起動するステップと、Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップであって、前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含む、ステップと、Ｄ．前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップとを包含し、これにより、上記目的を達成する。
【００６５】
前記起動するステップは、前記命令キューからの命令クラスをデコードするステップを包含してもよい。
【００６６】
前記起動するステップは、前記仮想処理ユニットによる、リソース供給ソース、および前記命令キューからディスパッチされた前記命令の宛先レジスタへのアクセスをコントロールするステップを包含してもよい。
【００６７】
前記仮想処理ユニットのすべてによって共有される分岐実行ユニットを用いて、命令アドレスの生成、アドレス変換、および命令をフェッチするステップのいずれかを実行するステップを包含してもよい。
【００６８】
前記分岐実行ユニットを用いて、前記仮想処理ユニットの状態を維持するステップを包含してもよい。
【００６９】
前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリユニットのいずれかを備えてもよい。
【００７０】
本発明による組込みプロセシングの方法は、Ａ．複数の仮想処理ユニットを複数の組込みプロセッサ上で実行するステップと、Ｂ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ仮想処理ユニットおよび／または同じ組込みプロセッサ上での実行を強いられるか、または強いられない、ステップと、Ｃ．前記複数の処理ユニットによって共有される１つ以上の実行ユニットにおいて、前記スレッドからの命令を実行するステップであって、前記実行ユニットは、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリ実行ユニットのいずれかを備える、ステップと、Ｄ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップとを包含し、これにより、上記目的を達成する。
【００７１】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含してもよい。
【００７２】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００７３】
前記分岐実行ユニットを用いて、前記スレッドのために実行されるべき命令をフェッチするステップを包含してもよい。
【００７４】
前記分岐実行ユニットで、命令アドレスの生成およびアドレス変換のいずれかを実行するステップを包含してもよい。
【００７５】
本発明による方法は、Ａ．前記実行ユニットのうちの複数のユニット上で同時に実行するために、前記スレッドのうちの複数のスレッドからの命令をディスパッチするステップを包含し、Ｂ．前記ディスパッチするステップは、前記それぞれのスレッドごとにフェッチされた命令を、前記スレッドが実行される前記仮想処理ユニットと関連付けられた命令キュー内に配置するステップを包含してもよい。
【００７６】
前記ディスパッチするステップは、前記命令キューを等しいレベルに保つという目的で、与えられたスレッドのために、１つ以上の命令をある時点にフェッチするステップを包含してもよい。
【００７７】
前記ディスパッチするステップは、前記実行ユニットによって実行するために、１つ以上の命令を、ある時点に所与の命令キューからディスパッチするステップを包含してもよい。
【００７８】
前記パイプラインコントロールによって、所与の時点に所与の命令キューからディスパッチされた多数の命令は、前記キューの命令シーケンス内のストップフラグによってコントロールされてもよい。
【００７９】
本発明による方法は、１つ以上のスレッドから複数の命令を同時に起動および実行するステップを包含してもよい。
【００８０】
本発明による組込みプロセシングの方法は、Ａ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の処理ユニットの各々上で実行するステップであって、各スレッドは、前記スレッドが生きている間、同じ処理ユニット上での実行を強いられるか、または強いられない、ステップと、Ｂ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップとを包含し、これにより、上記目的を達成する。
【００８１】
前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理するステップを包含してもよい。
【００８２】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【００８３】
前記処理ユニットの少なくとも１つは、仮想処理ユニットであってもよい。
【００８４】
本発明による組込みプロセシングの方法は、Ａ．複数の仮想処理ユニットを複数の組込みプロセッサ上で実行するステップと、Ｂ．１つ以上のプロセスまたはスレッド（集合的に「スレッド」）を複数の仮想処理ユニットの各々上で実行するステップであって、各仮想処理ユニットは、前記スレッドが生きている間、同じ仮想処理ユニットおよび／または同じ組込みプロセッサ上での実行を強いられるか、または強いられない、ステップと、
Ｃ．命令を実行することなく、イベントが関連付けられたそれぞれのスレッドに前記イベントを送達するステップとを包含し、これにより、上記目的を達成する。
【００８５】
本発明による方法は、前記スレッドの外で命令を実行することなく、前記スレッドが送達される前記イベントを処理してもよい。
【００８６】
前記イベントは、ハードウェア割り込み、ソフトウェアによって開始されるシグナリングイベント（「ソフトウェアイベント」）およびメモリイベントのいずれかを含んでもよい。
【発明を実施するための最良の形態】
【００８７】
図１は、本発明のある実施形態により構成され動作し、かつ、本明細書および添付の図面中で「ＳＥＰ」と呼ばれることがあるプロセッサモジュール５を示す。このモジュールは、ＰＣ、ワークステーション、またはメインフレームコンピュータ等（しかしながら、示された実施形態は組込みプロセッサとして利用される）の汎用プロセッサの基礎を提供し得る。
【００８８】
モジュール５は、単一で、または、１つ以上の他のそのようなモジュールと組み合わせて用いられ得、計算要件が、実質的に並列であり、同時に実行する複数のアプリケーションおよび／または命令レベル並列性から利益を得るデバイスまたはシステムに特に適している。これは、リアルタイム要件のデバイスまたはシステム、マルチメディアアプリケーションを実行するデバイスまたはシステム、ならびに／あるいは、イメージ、信号、グラフィックおよび／またはネットワーク処理等の高度な計算要件のデバイスまたはシステムを含み得る。このモジュールは、さらに、例えば、アプリケーションを同時に使用する場合に単一プラットフォーム上に複数のアプリケーションを統合するために適切である。このモジュールは、これが組み込まれるか、そうでなければ内蔵されているデバイスおよび／またはシステムを横断して、ならびにネットワーク（有線、無線、その他）を横断して、あるいは、これらのデバイスおよび／またはシステムが結合される他の媒体を横断してシームレスアプリケーションを提供する。さらに、このモジュールは、ピアツーピア（Ｐ２Ｐ）アプリケーション、およびユーザの対話性を有するアプリケーションに適している。これまでの記述は、モジュール５が適しているアプリケーションおよび環境の広範囲な列挙であることを意図しているのではなく、１例にすぎない。
【００８９】
モジュール５が組込まれ得るデバイスおよびシステムの例は、特に、例えば、図２４に示されるタイプのデジタルＬＣＤ−ＴＶを含み、モジュール５は、ＳＯＣ（ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）コンフィギュレーションで具現化される。（当然、モジュールは、単一チップ上に組み入れられる必要がなく、むしろ、おそらく、複数チップ、１つ以上の基板、別々に収容された１つ以上のデバイス、および／またはこれらの組み合わせを含む多数のフォームファクタのいずれかで具現化され得ることがわかる。）さらなる例は、デジタルビデオレコーダ（ＤＶＲ）およびサーバ、ＭＰ３サーバ、携帯電話、スチルおよびビデオカメラ（ＤＶＲ）、ゲームプラットフォーム、ユニバーサルネットワークディスプレイ（例えば、デジタルＬＣＤ−ＴＶ、ネットワーク情報／インターネットアプライアンス、および汎用アプリケーションプラットフォームの組み合わせ）、Ｇ３携帯電話、パーソナルデジタルアシスタント等を含む。
【００９０】
モジュール５は、スレッド処理ユニット（ＴＰＵ）１０〜２０、レベルワン（Ｌ１）命令およびデータキャッシュ２２、２４、レベルツー（Ｌ２）キャッシュ２６、パイプラインコントロール２８および実行（または機能ユニット）３０〜３８、すなわち、整数処理ユニット、浮動少数点処理ユニット、比較ユニット、メモリユニット、および分岐ユニットを備える。ユニット１０〜３８は、図面に示されているように結合されており、以下において、特に詳述されない。
【００９１】
概観として、ＴＰＵ１０〜２０は、仮想処理ユニットであり、プロセッサモジュール５内に物理的に実装されており、各々が結合され、そして、１つ（以上）のプロセス（単数または複数）および／またはスレッド（単数または複数）（集合的に、スレッド（単数または複数））を所与の瞬間に処理する。ＴＰＵは、汎用レジスタ、述語レジスタ、コントロールレジスタで表されるそれぞれのスレッド単位の状態を有する。ＴＰＵは、スレッドの各サイクルの任意の組み合わせから５つまでの命令を起動する、起動およびパイプラインコントロール等のハードウェアを共有する。図面に示されるように、ＴＰＵは、さらに、起動された命令を、どのスレッドからのものかを知ることを必要とせずに、起動された命令を独立して実行する実行ユニット３０〜３８を共有する。
【００９２】
さらなる概観として、示されたＬ２キャッシュ２６は、スレッド処理ユニット１０〜２０のすべてによって共有され、命令およびデータを、モジュール５が組み入れられたチップの内部（ローカル）および外部の両方の記憶装置に格納する。示されたＬ１命令キャッシュ２２およびデータキャッシュ２４もまた、ＴＰＵ１０〜２０によって共有され、上述のチップにローカルである記憶装置に搭載される（当然、他の実施形態では、レベル１およびレベル２キャッシュは、例えば、モジュール５に完全にローカルである、完全に外部である、またはその他の）異なった構成であり得ることが分かる。）。
【００９３】
モジュール５の設計はスケーラブルである。２つ以上のモジュール５が、Ｓｏｃまたは他のコンフィギュレーションにまとめられ（ｇａｎｇｅｄ）、これにより、アクティブスレッドの数および処理パワー全体が増加する。モジュール５によって用いられ、本明細書中に記載されるスレディングモデルに基づいて、結果としてのＴＰＵの増加はソフトウェアトランスペアレントである。示されたモジュール５は、６つのＴＰＵ１０〜２０を有するが、他の実施形態は、より多くの数の（さらに、当然、より少ない数の）ＴＰＵを有してもよい。さらに、追加的機能ユニットは、例えば、サイクルごとに起動される命令の数を５から１０〜１５以上に増加して提供されてもよい。Ｌ１およびＬ２キャッシュ構造の以下の記載において明らかなように、これらの２つはスケーリングされ得る。
【００９４】
示されたモジュール５は、アプリケーションソフトウェア環境としてＬｉｎｕｘを利用する。マルチスレッドと共に、これは、リアルタイムおよび非リアルタイムアプリケーションが１つのプラットフォーム上で動作することを可能にする。これにより、さらに、オープンソースソフトウェアおよびアプリケーションのレバレッジが製品機能を向上させることが可能になる。さらに、これにより、種々のプロバイダによるアプリケーションの実行が可能になる。
（マルチスレッド）
上述のように、ＴＰＵ１０〜２０は、仮想処理ユニットであり、単一のプロセッサモジュール５内に物理的に実装されており、各々が結合され、所与の瞬間に１つ（以上）のスレッド（単数または複数）を処理する。スレッドは、広範囲にわたるアプリケーションを具現化し得る。デジタルＬＣＤ−ＴＶにおいて有用な例は、例えば、ＭＰＥＧ２信号多重分離、ＭＰＥＧ２ビデオデコード、ＭＰＥＧオーディオデコード、デジタル−ＴＶユーザインターフェースオペレーション、オペレーティングシステム実行（例えば、Ｌｉｎｕｘ）を含む。当然、これらおよび／または他のアプリケーションは、デジタルＬＣＤＴＶ、およびモジュール５が組み入れられ得る種々の他のデバイスおよびシステムにおいて有用であり得る。
【００９５】
ＴＰＵによって実行されるスレッドは独立しているが、メモリおよびイベントを通じて通信し得る。プロセッサモジュール５の各サイクルの間、実行ユニットまたは機能ユニット３０〜３８を利用するために必要な数のアクティブ実行スレッドから命令が起動される。示された実施形態では、この点に関して「公正」を保証するためにそれぞれのスレッドにラウンドロビンプロトコルが課せられる（しかしながら、他の実施形態では、特権プロトコルまたは他のプロトコルが代替的または追加的に用いられてもよい）。（例えば、アプリケーションを起動、スレッドの活性化を容易にする等のために）１つ以上のシステムスレッドがＴＰＵ上で実行し得るが、アクティブスレッドを実行するためにオペレーションシステムの介入は必要とされない。
【００９６】
プロセッサごとの複数のアクティブスレッド（仮想プロセッサ）をサポートする基本的理由は以下のとおりである。
【００９７】
機能能力
プロセッサごとの複数のアクティブスレッドは、単一のマルチスレッドプロセッサが複数のアプリケーション、メディア、信号処理およびネットワークプロセッサに取って代わることを可能にする。これは、さらに、アプリケーション、イメージ、信号処理およびネットワーキングに対応する複数のスレッドが低レイテンシーおよび高性能で同時に動作および相互運用することを可能にする。コンテキストスイッチおよびインターフェースオーバーヘッドは最小化される。ＭＰ４でコードのような単一のイメージ処理アプリケーション内であっても、スレッドは、例えば、フレームｎが作成されている間にフレームｎ＋１のデータを準備するために、パイプラインの態様で、容易に同時に動作し得る。
【００９８】
性能
プロセッサごとの複数のアクティブスレッドは、機能ユニットをより良好に利用し、かつ、メモリおよび他のイベントレイテンシーを容認することによって個々のプロセッサの性能を向上させる。スレッドを４つまで同時に実行するために２ｘ性能の向上を達成することは珍しくはない。パワー消費およびダイサイズの増大は重要ではなく、従って、ユニットごとの性能、パワーおよび価格パフォーマンスが改善される。プロセッサごとの複数のアクティブスレッドは、さらに、分岐およびキャッシュミスによる性能の低下を、これらのイベントの間に別のスレッドを実行することによって低減する。さらに、これは、ほとんどのコンテキストスイッチオーバーヘッドを除去し、リアルタイムアクティビティのレイテンシーを低減する。さらに、これにより、一般的な高性能イベントモデルがサポートされる。
【００９９】
インプリメンテーション
プロセッサごとの複数のアクティブスレッドは、パイプラインおよび設計全体の簡略化ももたらす。複雑な分岐プレディケーションの必要がない。なぜなら、別のスレッドが動作し得るからである。これにより、複数のプロセッサチップに対して単一プロセッサチップのコストが低減され、かつ、他の複雑性が除去された場合にコストが低減される。さらに、これにより、単位電力当りの性能が向上する。
【０１００】
図２は、従来のスーパースカラプロセッサによるスレッド処理を、示されたプロセッサモジュール５のスレッド処理と比較する。図２Ａを参照して、スーパースカラプロセッサにおいて、単一の実行スレッドから（斜めのスティップリングで示される）の命令が、実行されているコード内の実際の並列および依存性に基づいて利用可能な実行ユニット上で実行するように動的にスケジューリングされる。これは、各サイクルの間に平均的にほとんどの実行ユニットを利用することができないことを意味する。実行ユニットの数が増加するにつれて、利用率が、通常、低下する。さらに、実行ユニットは、メモリシステムおよび分岐予測ミス／待ちの間にアイドル状態になる。
【０１０１】
これとは異なり、図２Ｂを参照して、モジュール５において、複数のスレッドからの命令（異なったそれぞれのスティップリングパターンで示される）が同時に実行する。各サイクル、モジュール５が複数のスレッドからの命令が利用可能な実行ユニットリソースを最適に利用するようにスケジューリングする。従って、実行ユニットの利用および性能全体がより高くなる一方で、同時に、ソフトウェアにトランスペアレントである。
（イベントおよびスレッド）
示された実施形態では、イベントは、割り込み等のハードウェア（またはデバイス）イベントと、デバイスイベントと等しいがソフトウェア命令によって開始されるソフトウェアイベントと、キャッシュミスの完了またはメモリ生産者−消費者（フル−エンプティ）変換の結果等のメモリイベントとを含む。ハードウェアの割り込みは、通常、アイドル状態のスレッド（例えば、ターゲットスレッドまたはターゲットグループのスレッド）によって扱われるデバイスイベントに変換される。ソフトウェアイベントは、例えば、あるスレッドが別のスレッドを直接起こすことを可能にするために用いられ得る。
【０１０２】
各イベントは、アクティブスレッドにバインドする。特定のスレッドバインディングが存在しない場合、これは、示された実施形態では常時アクティブであるデフォルトシステムスレッドにバインドする。そのスレッドは、その後、新しいスレッドを仮想プロセッサ上でスケジューリングすることを含む、イベントの処理を適宜行う。特定のスレッドバインディングが存在しない場合、ハードウェアまたはソフトウェアイベントが送達されると（後述されるように、イベント送達メカニズムで）、ターゲットスレッドはアイドル状態から実行状態に遷移する。ターゲットスレッドがすでにアクティブであり、実行している場合、イベントはハンドリングのためにデフォルトシステムスレッドに向けられる。
【０１０３】
示された実施形態では、スレッドは、キャッシュミスおよび同期化待ちを含むメモリシステムストール（略して遮断（ｂｌｏｃｋａｇｅ））；分岐ミス予測（非常に簡単には遮断）；明示的な（ソフトウェアまたはハードウェアによって生成された）イベント待ち；ならびにシステムスレッドによるアプリケーションスレッドの明示的ブロックにより、非実行状態（ブロック）になり得る。
【０１０４】
本発明の好ましい実施形態では、イベントは、効率的な動的分散実行環境の基礎を提供する物理プロセッサモジュール５とネットワークとを介してイベントを操作する。従って、例えば、デジタルＬＣＤ−ＴＶにおいて実行するモジュール５、あるいは他のデバイスまたはシステムは、スレッドを実行し、ネットワーク（無線、特権、その他）を介して動的に拡散するメモリ、またはサーバまたは他の（リモート）デバイスからの他の媒体を利用する。スレッドおよびメモリベースのイベントは、例えば、スレッドがその原理により動作する任意のモジュール５上でトランスペアレントに実行し得ることを保証する。これにより、例えば、モバイルデバイスが他のネットワークデバイスのパワーをレバレッジすることが可能になる。これにより、さらに、リモートネットワークデバイス上でのピアツーピアおよびマルチスレッドアプリケーションのトランスペアレントな実行が可能になる。優利な点は、性能の向上、機能の向上、およびパワー消費の低減を含む。
【０１０５】
スレッドは、システムおよびアプリケーションの２つの特権レベルで動作する。システムスレッドは、そのスレッドおよびプロセッサ内のすべての他のスレッドのすべての状態にアクセスし得る。アプリケーションスレッドは、それ自体に対応する非特権状態にのみアクセスし得る。デフォルトにより、スレッド０はシステム特権で動作する。他のスレッドは、システム特権スレッドによって生成されている場合にシステム特権用に構成され得る。
【０１０６】
図３を参照して、示された実施形態では、スレッド状態は以下のとおりである。
【０１０７】
アイドル状態（または非アクティブ）
スレッドコンテキストはＴＰＵ内にロードされ、スレッドは、命令を実行していない。アイドルスレッドは、例えば、ハードウェアまたはソフトウェアイベントが生じた場合、実行状態に遷移する。
【０１０８】
待ち状態（またはアクティブ、待ち状態
スレッドコンテキストは、ＴＰＵ内にロードされるが、現在、命令を実行していない。待ちスレッドは、例えば、メモリ命令が続行することを可能にする、キャッシュオペレーション等の、起こるが待たれるイベントが完了した場合に実行状態に遷移する。
【０１０９】
実行状態（またはアクティブ、実行状態）
スレッドコンテキストがＴＰＵ内にロードされ、現在、命令を実行している。スレッドは、例えば、キャッシュミスまたはエンプティ／フィル（生産者−消費者メモリ（ｃｏｎｓｕｍｅｒ−ｐｒｏｄｕｃｅｒ  ｍｅｍｏｒｙ））命令が完了し得ない動作をキャッシュが完了することをメモリ命令が待たなければならない場合、メモリ命令が待ち状態に遷移する。イベント命令が実行された場合、スレッドはアイドル状態に遷移する。
【０１１０】
スレッドは、各ＴＰＵと関連したスレッドイネーブルビット（またはフラグまたは他のインジケータ）が、ソフトウェアがＴＰＵにスレッドをロードおよびアンロードするために、いずれのスレッド状態も妨げることなくスレッドをディセーブルする。
【０１１１】
プロセッサモジュール５は、実行する命令のアベイラビリティに基づいてアクティブスレッドにわたって負荷分散する。このモジュールは、さらに、スレッドごとの命令キューを一様にフルに保つことを試みる。従って、アクティブの状態に留まるスレッドがほとんどの命令を実行する。
【０１１２】
（イベント）
図４は、本発明のある実施形態によるシステムにおけるイベント送達メカニズムを示す。イベントがスレッドに知らされた場合、このスレッドは、（現在、実行状態にある場合）実行をペンディングし、かつ、例えば、仮想アドレス０ｘ０でデフォルトイベントハンドラを実行することによって、そのイベントを認識する。
【０１１３】
示された実施形態では、特定のスレッドに知らされ得る５つのイベントタイプがある。
【０１１４】
【数１】
2005182791.tif 000003
示されたイベントキュー４０は、ハードウェアデバイスおよびソフトウェアベースのイベント命令（例えば、ソフトウェア「割り込み」）によって提供されたイベントを仮想スレッド数（ＶＴＮ）およびイベント数を含むタプルの形態で段階的に行う。
【０１１５】
【表１】
2005182791.tif 000004
【０１１６】
【表２】
2005182791.tif 000005
当然、ハードウェアデバイスおよびソフトウェア命令によって提供されたイベントは、他の形態で、および／または他の情報を含んで提供されてもよいことが分かる。
【０１１７】
イベントタプルは、次に、受け取られた順序で、イベント−スレッドルックアップテーブル（イベントテーブルまたはスレッドルックアップテーブルとも呼ばれる）４２に渡される。このルックアップテーブルは、表示された各スレッドを現在ハンドリングしているのはどのＴＰＵかを決定する。イベントは、次に、イベント−スレッド送達メカニズム４４を介して、イベント数で構成されている「ＴＰＵイベント」の形態でＴＰＵ（および、これにより、そのそれぞれのスレッド）に提供される。特定のイベントをハンドリングするスレッドがまだ示されていない場合、対応するイベントが、ＴＰＵの１つでアクティブなデフォルトシステムスレッドに渡される。
【０１１８】
イベントキュー４０は、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現され得る。モジュール５によって表された組み込みＳｏＣ（ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）のインプリメンテーションは、必要なキューイング関数を提供する一連のゲートおよび専用バッファとして実現される。これに代わる実施形態では、これは、ソフトウェア（またはハードウェア）リンクリスト、アレイ等で実現される。
【０１１９】
テーブル４２は、ハードウェアデバイスによって提供されたイベントナンバー（例えば、ハードウェア割り込み）またはイベント命令と、そのイベントをシグナリングするために好ましいスレッドとの間にマッピングを確立する。可能なケースは以下のとおりである。
【０１２０】
イベント数のエントリがない：デフォルトシステムスレッドにシグナリングする
スレッドに提供：スレッドが実行、アクティブまたはアイドル状態にある場合、特定のスレッド数シグナリングし、そうでない場合、特定のシステムスレッドにシグナリングする。
【０１２１】
テーブル４２は、専用またはその他の単一の記憶領域であり得、イベントースレッドの更新されたマッピングを維持する。このテーブルは、さらに、分散またはその他の複数の記憶領域を構成し得る。これに関わらず、テーブル４２は、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現されてもよい。モジュール５によって表された組込みＳｏＣインプリメンテーションにおいて、テーブルは、イベント−レッドの更新されたマッピングを維持する専用格納領域（単数または複数）で「ハードウェア」ルックアップを実行するゲートによってインプリメントされる。このテーブルは、例えば、ＴＰＵ１０〜２０内にスレッドが新規にロードされ、および／または、不活性化およびこれらからアンロードされるとマッピングを更新するシステムレベル特権スレッドによってソフトウェアにアクセス可能でもある。次の実施形態では、テーブル４２は、マッピングを維持する格納領域のソフトウェアベースのルックアップによって実現される。
【０１２２】
イベント−スレッド送達メカニズム４４もまた、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現され得る。モジュール５によって表される組込みＳｏＣインプリメンテーションにおいて、メカニズム４４は、それ自体、キューイングが送達されるイベントの一連のゲートおよび専用バッファ４６〜４８として実現されるＴＰＵキューにシグナリングされたイベントをルーティングするゲート（およびラッチ）によって実現される。上述のように、代替的実施形態では、メカニズム４４は、必要な機能を提供するソフトウェア（または他のハードウェア構造）で実現され、同様に、キュー４６〜４８は、ソフトウェア（またはハードウェア）リンクリスト、アレイ等で実現される。
【０１２３】
示された実施形態におけるハードウェアおよびソフトウェアイベント（すなわち、ソフトウェアによって開始されるシグナリングイベントまたは「ソフトウェア割り込み」）を処理する手順の大要は以下のとおりである。
【０１２４】
１．アクティブスレッドを現在実行中のＴＰＵにイベントがシグナリングされる。
【０１２５】
２．そのＴＰＵがアクティブスレッドの実行をペンディングする。例外ステータス、例外ＩＰ、および例外Ｍｅｍアドレスコントロールレジスタが、イベントのタイプに基づいてイベントに対応する情報を示すようにセットされる。すべてのスレッド状態が有効である。
【０１２６】
３．ＩＰＵは、仮想アドレス０ｘ０でデフォルトイベントハンドラのシステム特権の実行を開始し、イベントシグナリングは、対応するスレッドユニットに対してディセーブルにされる。ＧＰレジスタ０〜３および述語レジスタ０〜１は、イベントハンドラによってスクラッチレジスタとして利用され、かつ、システム特権である。慣例により、ＧＰ［０］はイベント処理スタックポインタである。
【０１２７】
４．イベントハンドラは、リエントラントになり、かつ、対応するスレッド実行ユニットへのイベントシグナリングを再イネーブルし得るために十分な状態をセーブする。
【０１２８】
５．イベントハンドラは、その後、イベントを処理する。これは、ＳＷベースのキューにイベントをポスティングするか、または任意の他のアクションをとることができるに過ぎない。
【０１２９】
６．イベントハンドラは、その後、状態を復元し、元のスレッドの実行に戻る。
【０１３０】
メモリ関連イベントは、いくらか異なった態様でハンドリングされる。ペンディング中（メモリ）イベントテーブル（ＰＥＴ）５０は、スレッドを実行状態から待ち状態に遷移させる（メモリ参照命令からの）メモリ動作のエントリを保持する。テーブル５０は、イベント−スレッドルックアップテーブル４２のように実現され得、リファレンスを開始したペンディング中メモリ動作、状態情報、およびスレッドＩＤのアドレスを保持する。ＰＥＩにおけるエントリに対応するメモリ動作が完了し、そのスレッドのＰＥＴ内に他のペンディング中動作がない場合、対応するスレッドにＰＥＴイベントがシグナリングされる。
【０１３１】
示された実施形態によるメモリイベント処理の大要は以下のとおりである。
【０１３２】
１．アクティブスレッドを現在実行中のユニットにイベントがシグナリングされる。
【０１３３】
２．そのスレッドがアクティブ−待ち状態であり、イベントがメモリイベントである場合、スレッドは、アクティブ−実行状態に遷移し、現在のＩＰで実行を継続する。そうでない場合、イベントは無視される。
【０１３４】
図面においてさらに示されるように、示された実施形態では、スレッド待ちタイムアウトおよびスレッド例外が、スレッドに直接シグナリングされ、イベント−スレッド送達メカニズム４４を通じて渡されない。
（トラップ）
マルチスレッドおよびイベントの目標は、スレッドの正常なプログラムの実行が妨げられないようにすることである。発生するイベントおよび割り込みは、イベントを待つ適切なスレッドによって処理される。これが不可能であり、正常な処理が割り込まれることを余儀なくされる場合もある。ＳＥＰは、この目的で、トラップメカニズムをサポートする。イベントタイプに基づいたアクションのリストは以下のとおりであり、トラップの全リストは、システム例外状態レジスタに列挙される。
【０１３５】
【表３】
2005182791.tif 000006
示されたプロセッサモジュール５は、トラップが発生した場合に以下のアクションをとる。
【０１３６】
１．次に実行される命令を特定するＩＰ（命令ポインタ）が例外ＩＰレジスタ内にロードされる
２．特権レベルが例外ＩＰレジスタのビット０内に格納される
３．例外タイプが例外状態レジスタ内にロードされる
４．例外がメモリユニット命令と関連する場合、例外に対応するメモリアドレスが例外メモリアドレスレジスタ内にロードされる
５．現在の特権レベルがシステムにセットされる
６．ＩＰ（命令ポインタ）がクリア（ゼロに）される
７．実行がＩＰ０で開始する。
【０１３７】
（仮想メモリおよびメモリシステム）
示されたプロセッサモジュール５は、６４ビット仮想アドレス（ＶＡ）空間、６４ビットシステムアドレス（ＳＡ）（標準的な物理アドレスとは異なった特性を有する）、およびまばらに埋められたＶＡまたはＳＡでのシステムアドレスへの仮想アドレスの変換のセグメントモデルを有する仮想メモリおよびメモリシステムアーキテクチャを利用する。
【０１３８】
ＴＰＵ１０〜２０によってアクセスされるすべてのメモリは、キャッシュとして効率的に管理されるが、オフチップメモリは、ＤＤＲ  ＤＲＡＭまたはダイナミックメモリの他の形態を利用し得る。図１を再び参照して、示された実施形態では、メモリシステムは、２つのロジックレベルで構成される。レベル１キャッシュは、最適なレイテンシーおよび帯域幅の別個のデータキャッシュ２４と命令キャッシュ２２とに分割される。示されたレベル２キャッシュ２６は、拡張されたレベル２と呼ばれるオンチップ部分とオフチップ部分とからなる。全体として、レベル２キャッシュは、個々のＳＥＰプロセッサ（単数または複数）５のメモリシステムであり、複数のＳＥＰプロセッサ５が用いられるインプリメンテーションの分散した「すべてのキャッシュ」メモリシステムに寄与する。当然、これらの複数のプロセッサは、同じメモリシステム、チップまたはバスを物理的に共有している必要はなく、例えば、ネットワークまたはその他の方法を介して接続され得ることが分かる。
【０１３９】
図５は、示されたシステムにおいて用いられるＶＡからＳＡへの変換を示し、この変換は、セグメントごとにハンドリングされ、その際（示された実施形態では）これらのセグメントのサイズは、例えば、２２４〜２４８バイトと様々であり得る。ＳＡは、メモリシステムにキャッシュされる。従って、メモリシステムに存在するＳＡは、キャッシュ２２／２４、２６のレベルの１つにエントリを有する。キャッシュ（およびメモリシステム）に存在しないＳＡは、実質的に、メモリシステムに存在しない。従って、メモリシステムは、ページ（およびサブページ）粒度で、プロセッサ上のページテーブルのオーバーヘッドなしに、ソフトウェアおよびＯＳに固有の態様でまばらに埋められる。
【０１４０】
上述のことに加えて、示された実施形態の仮想メモリおよびメモリシステムアーキテクチャは、以下のさらなる特徴を有する。これらは、分散共有メモリ（ＤＳＭ）、ファイル（ＤＳＦ）、オブジェクト（ＤＳＯ）、ピアツーピア（ＤＳＰ２Ｐ）の直接サポート；スケーラブルキャッシュおよびメモリシステムアーキテクチャ；スレッド間で共有され得るセグメント；ルックアップがタグアクセスと並列であるため、完全な仮想−物理アドレス変換や仮想キャッシュの複雑性を伴わない高速レベル１キャッシュである。
【０１４１】
（仮想メモリの概観）
示されるシステムにおける仮想アドレスは、メモリリファレンスおよび分岐命令によって構成された６４ビットアドレスである。仮想アドレスは、すべてのシステムメモリおよびＩＯデバイスにアクセスするために用いられるシステムに、セグメントごとに変換される。各セグメントは、２２４から２４８バイトまでサイズが様々である。より具体的には、図５を参照して、仮想アドレス５０を用いて、図面に示される態様で、エントリがセグメントテーブル５２内にマッチされる。図面において識別される仮想アドレスのコンポーネントと組み合わせて用いられた場合、マッチしたエントリ５４は、対応するシステムアドレスを特定する。さらに、マッチしたエントリ５４は、対応するセグメントサイズおよび特権を特定する。次に、そのシステムアドレスは、システムメモリ（示された実施形態では、別々にフィルされた２６４バイトを備える）にマッピングする。示された実施形態は、システム特権を有するスレッドによって、アドレス変換がディセーブルされることを可能にし、この場合、セグメントテーブルは、バイパスされ、すべてのアドレスが低３２ビットに丸められる。
【０１４２】
示されたセグメントテーブル５２は、スレッド（ＴＰＵ）ごとに１６〜３２個のエントリを備える。このテーブルは、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現されてもよい。モジュール５によって表される、組込みＳｏＣのインプリメンテーションでは、テーブルは、ハードウェアで実現され、メモリ内の別個のエントリがスレッドごとに提供されている（例えば、スレッドごとに別個のテーブル）。セグメントは、同じシステムアドレスを示すスレッドごとに別個のエントリをセットアップすることによって２つ以上のスレッド間で共有され得る。この目的で、他のハードウェアまたはソフトウェア構造が代替的または追加的に用いられてもよい。
【０１４３】
（キャッシュメモリシステムの概観）
上述のように、レベル１キャッシュは、別個のレベル１命令キャッシュ２２およびｌレベル１データキャッシュ２４として組織され、命令およびデータ帯域幅を最大化する。
【０１４４】
図６を参照して、オンチップＬ２キャッシュ２６ａは、タグおよびデータ部分で構成される。示された実施形態では、これは、サイズが５．１Ｍｙｔｅ、１２８ブロック、１６ウェイ連想である。各ブロックは、１２８バイトデータまたは１６個の拡張Ｌ２タグを格納し、拡張Ｌ２タグに格納するために６４ｋｂｙｔｅが提供される。タグ内のタグモードビットは、データ部分が拡張Ｌ２キャッシュの１６個のタグで構成されることを示す。
【０１４５】
拡張Ｌ２キャッシュ２６ｂは、上述のように、ＤＤＲ  ＤＲＡＭベースであるが、他のメモリタイプも用いられ得る。示された実施形態では、１ｇｂｙｔｅまでのサイズ、２５６ウェイ連想であり、１６ｋバイトページおよび１２８バイトサブページを有する。５ｍｂｙｔｅＬ２キャッシュ２６ａおよび１ｇｂｙｔｅＬ２拡張キャッシュ２６ｂのコンフィギュレーションの場合、Ｌ２拡張を完全に記述するためにオンチップＬ２キャッシュの１２％が必要とされるにすぎない。より大きいオンチップＬ２またはより小さいＬ２拡張サイズの場合、このパーセンテージはより低い。Ｌ２キャッシュ（オンチップおよび拡張）のアグリゲーションは、分散ＳＥＰメモリシステムを構成する。
【０１４６】
示された実施形態では、Ｌ１命令キャッシュ２２およびＬ１データキャッシュ２４の両方が８ウェイ連想であり、３２ｋｂｙｔｅおよび１２８バイトブロックを有する。図面に示されるように、両方のレベル１キャッシュはレベル２キャッシュの固有のサブセットである。レベル２キャッシュは、オンチップおよびオフチップ拡張Ｌ２キャッシュで構成される。
【０１４７】
図７は、Ｌ２キャッシュ２６ａと、示された例では、Ｌ２キャッシュ２６ａにおいてタグルックアップを実行し、Ｌ２キャッシュアドレス７８とマッチするデータブロック７０を識別するために用いられるロジックとを示す。示された実施形態では、ロジックは、１６個のキャッシュタグアレイグル−プ７２ａ〜７２ｐと、対応するタグ比較素子７４ａ〜７４ｐと、対応するデータアレイグループ７６ａ〜７６ｐとを備える。示されるように、これらは結合され、Ｌ２キャッシュアドレス７８をグループタグアレイ７２ａ〜７２ｐに対してマッチさせ、さらに示されるように、示されたデータアレイグループ７６ａ〜７６ｐによって識別されたデータブロック７０を選択する。
【０１４８】
キャッシュタグアレイグループ７２ａ〜７２ｐ、タグ比較素子７４ａ〜７４ｐ、および対応するデータアレイグループ７６ａ〜７６ｐは、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現され得る。モジュール５によって表される組込みＳｏＣのインプリメンテーションでは、これらは、図１９に示されるように実現される。図１９は、３２ｘ２５６のシングルポートメモリセルに組み込まれたキャッシュタグアレイグループ７２ａ〜７２ｐ、および１２８ｘ２５６のシングルポートメモリセルに組み込まれたデータアレイグループ７６ａ〜７６ｐを示し、これらすべては、示されるように、現在の状態コントロールロジック１９０と結合されている。示されるように、この素子は、次に、Ｌ２キャッシュユニット２６ａの動作を容易にする状態マシン１９２に本明細書中で一貫した態様で、ならびに、Ｌ１命令およびデータキャッシュ２２、２４からのリクエストをバッファするリクエストキュー１９２に結合される。
【０１４９】
論理素子１９０は、Ｌ２キャッシュのオフチップ部分２６ｂにインターフェースを提供するＤＤＲ  ＤＲＡＭコントロールインターフェース２６ｃとさらに結合される。これは、同様に、少数の例を挙げると、液晶ディスプレイ（ＬＣＤ）、オーディオ出力インターフェース、ビデオ入力インターフェースビデオ出力インターフェース、ネットワークインターフェース（無線、有線等）、記憶装置インターフェース、ペリフェラルインターフェース（例えば、ＵＳＢ，ＵＳＢ２）、バスインターフェース（ＰＣＩ、ＡＴＡ）といったＡＭＢＡと互換性のあるコンポーネントにインターフェースを提供するＡＭＢＡインターフェース２６ｄに結合される。ＤＤＲ  ＤＲＡＭインターフェース２６ｃおよびＡＭＢＡインターフェース２６ｄは、示されるように、同様に、Ｌ２データキャッシュバス１９８によって、Ｌ１命令およびデータキャッシュへのインターフェース１９６に結合される。
【０１５０】
図８は、同様に、示された実施形態で用いられ、Ｌ２拡張キャッシュ２６ｂにおいてタグルックアップを実行し、かつ、指定されたアドレス７８とマッチするデータブロック８０を識別するロジックを示す。示された実施形態では、このロジックは、データアレイグループ８２ａ〜８２ｐと、対応するタグ比較素子８４ａ〜８４ｐと、タグラッチ８６とを備える。これらは、示されるように結合され、示されるように、Ｌ２キャッシュアドレス７８をデータアレイグループ７２ａ〜７２ｐに対してマッチさせ、かつ、さらに示されるように、アドレス７８の対応する部分とマッチするグループの１つからタグを選択する。マッチングタグからの物理ページ番号は、示されるように、アドレス７８のインデックス部分と組み合わせられ、オフチップメモリ２６ｂにおいてデータブロック８０を識別する。
【０１５１】
データアレイグループ８２ａ〜８２ｐおよびタグ比較素子８４ａ〜８４ｐは、ハードウェア、ソフトウェアおよび／またはこれらの組み合わせで実現され得る。モジュール５によって表された組込みＳｏＣのインプリメンテーションにおいて、これらは、必要なルックアップおよびタグ比較機能を提供するゲートおよび専用メモリで実現される。この目的で、他のハードウェアまたはソフトウェア構造が代替的または追加的に用いられてもよい。
【０１５２】
以下に記載されるのは、示された実施形態のＬ２およびＬ２Ｅキャッシュ動作を示す擬似コードである。
【０１５３】
【数２】
2005182791.tif 000007
（スレッド処理ユニットの状態）
図９を参照して、示された実施形態は、６個までのアクティブスレッドをサポートする６個のＴＰＵを有する。各ＴＰＵ１０〜２０は、図９に示されるように、汎用レジスタと述語レジスタとコントロールレジスタとを備える。システムおよびアプリケーション特権レベルの両方のスレッドは、同じ状態を含むが、システム特権レベルにおいて（キーおよびそれぞれのスティプリングパターンによって示されるように）いくつかのスレッド状態情報のみが見られる。レジスタに加えて、各ＴＰＵは、ペンディングメモリイベントテーブル、イベントキュー、およびイベント−スレッドルックアップテーブルをさらに備えるが、これらのいずれも図９には示されていない。
【０１５４】
実施形態によるが、４８（以下）〜１２８（以上）個（示された実施形態は１２８個を有する）の汎用レジスタと、２４（以下）〜６４（以上）個（示された実施形態は３２個を有する）の述語レジスタと、６（以下）〜２５６（以上）個（示された実施形態は８個を有する）のアクティブスレッドと、１６（以下）〜５１２（以上）個のエントリ（示された実施形態は１６個のエントリ）とを有するペンディングメモリイベントテーブルと、スレッドごとの、複数の、好ましくは、少なくとも２個（場合によっては、これより少ない）のペンディングメモリイベントと、２５６個（以上または以下）のイベントキューと、１６（以下）〜２５６（以上）個のエントリ（示された実施例は３２個）を有するイベント−スレッドルックアップテーブルとがあり得る。
【０１５５】
（汎用レジスタ）
示された実施形態では、各スレッドは、インプリメンテーションによるが、１２８個までの汎用レジスタを有する。汎用レジスタ３−０（ＧＰ［３：０］）は、システム特権レベルにおいて見られ、かつ、イベント処理の初期段階において、イベントスタックポインタおよびワーキングレジスタのために利用され得る。
【０１５６】
（プレディケーションレジスタ）
述語レジスタは、汎用ＳＥＰプレディケーションメカニズムの一部である。各命令の実行は、リファレンス述語レジスタの値に基づいて条件付である。
【０１５７】
ＳＥＰは、スレッド状態の一部として６４個までの１ビット述語レジスタを提供する。
【０１５８】
各述語レジスタは、いわゆる述語を保持し、これは、比較命令を実行する結果に基づいて、１（真（ｔｒｕｅ））にセットされるか、または、０（偽（ｆａｌｓｅ））にリセットされる。述語レジスタ３−１（ＰＲ「３：１」）は、システム特権レベルにおいて見られ、かつ、イベント処理の初期段階において、ワーキング述語（ｗｏｒｋｉｎｇ  ｐｒｅｄｉｃａｔｅ）のために利用され得る。述語レジスタ０は、読み出し専用であり、常に１、真と読み出す。これは、実行を無条件にするという命令による。
【０１５９】
（コントロールレジスタ）
スレッド状態レジスタ
【０１６０】
【表４】
2005182791.tif 000008
【０１６１】
【表５】
2005182791.tif 000009
ＩＤレジスタ
【０１６２】
【表６】
2005182791.tif 000010
【０１６３】
【表７】
2005182791.tif 000011
命令ポインタレジスタ
【０１６４】
【表８】
2005182791.tif 000012
実行されるべき次の命令の６４ビット仮想アドレスを特定する。
【０１６５】
【表９】
2005182791.tif 000013
システム例外状態レジスタ
【０１６６】
【表１０】
2005182791.tif 000014
【０１６７】
【表１１】
2005182791.tif 000015
アプリケーション例外状態レジスタ
【０１６８】
【表１２】
2005182791.tif 000016
【０１６９】
【表１３】
2005182791.tif 000017
システム例外ＩＰ
【０１７０】
【表１４】
2005182791.tif 000018
命令のアドレスは、システム特権のシグナリングされた例外に対応する。ビット［０］は、例外の時点では特権レベルである。
【０１７１】
【表１５】
2005182791.tif 000019
命令のアドレスは、シグナリングされた例外に対応する。ビット［０］は、例外の時点では特権レベルである。
【０１７２】
アプリケーション例外ＩＰ
【０１７３】
【表１６】
2005182791.tif 000020
命令のアドレスは、アプリケーション特権のシグナリングされた例外に対応する。
【０１７４】
【表１７】
2005182791.tif 000021
命令のアドレスは、シグナリングされた例外に対応する。ビット［０］は、例外の時点では特権レベルである。
【０１７５】
例外Ｍｅｍアドレス
【０１７６】
【表１８】
2005182791.tif 000022
メモリのアドレスは、シグナリングされた例外を参照する。メモリフォールとにのみ有効。実行状態レジスタがメモリリファレンスフォールトを示す場合、フィルを待つか、またはエンプティを待ちながら、ペンディングメモリ動作のアドレスを保持する。
【０１７７】
命令Ｓｅｇテーブルポインタ（ＩＳＴＰ）、データＳｅｇテーブルポインタ（ＤＳＴＰ）
【０１７８】
【表１９】
2005182791.tif 000023
ＩＳＴＥおよびＩＳＴＥレジスタによって利用され、読み出しまたは書き込みされるｓｔｅおよびフィールドを特定する。
【０１７９】
【表２０】
2005182791.tif 000024
命令セグメントテーブルエントリ（ＩＳＴＥ）、データセグメントテーブルエントリ（ＤＳＴＥ）
【０１８０】
【表２１】
2005182791.tif 000025
読み出される場合、ＩＳＴＥレジスタによって特定されたＳＴＥは、宛先汎用レジスタに配置される。書き込まれる場合、ＩＳＴＥまたはＤＳＴＥによって特定されたＳＴＥは、汎用ソースレジスタから書き込まれる。セグメントテーブルエントリのフォーマットは、第６章（「変換テーブルの組織およびエントリの説明」と称される節において明確にされる。
【０１８１】
命令またはデータレベル１キャッシュタグポインタ（ＩＣＴＰ、ＤＣＴＰ）
【０１８２】
【表２２】
2005182791.tif 000026
ＩＣＴＥまたはＤＣＴＥによって読み出しまたは書き込みされる命令キャッシュタグエントリを特定する。
【０１８３】
【表２３】
2005182791.tif 000027
命令またはデータレベル１キャッシュタグエントリ（ＩＣＴＥ、ＤＣＴＥ）
【０１８４】
【表２４】
2005182791.tif 000028
読み出される場合、ＩＣＴＰまたはＤＣＴＰレジスタによって特定されたキャッシュタグは、宛先汎用レジスタに配置される。書き込まれる場合、ＩＣＴＰまたはＤＣＴＰによって特定されたキャッシュタグは、汎用ソースレジスタから書き込まれる。キャッシュタグエントリのフォーマットは、第６章（「変換テーブルの組織およびエントリの説明」と称される節において明確にされる。
【０１８５】
イベントキューコントロールレジスタ
【０１８６】
【表２５】
2005182791.tif 000029
イベントキューコントロールレジスタ（ＥＱＣＲ）は、イベントキューへの通常のアクセスおよびダイアグノスティックアクセス（ｄｉａｇｎｏｓｔｉｃ  ａｃｃｅｓｓ）をイネーブルする。レジスタを使用するためのシーケンスは、レジスタ書き込みに続いてレジスタ読み出しである。ｒｅｇ＿ｏｐフィールドのコンテンツは、書き込み、および次の読み出しの動作を特定する。
【０１８７】
【表２６】
2005182791.tif 000030
イベント−スレッドルックアップテーブルコントロール
【０１８８】
【表２７】
2005182791.tif 000031
イベント−スレッドルックアップテーブルは、ハードウェアデバイスによって提供されたイベント数またはイベント命令と、好ましいスレッドとの間のマッピングを確立して、イベントをシグナリングする。テーブルにおける各エントリは、ビットマスク、およびイベントがマッピングされる対応するスレッドと共にイベント数を明確にする。
【０１８９】
【表２８】
2005182791.tif 000032
（タイマおよび性能モニタ）
示された実施形態では、すべてのタイマおよび性能モニタレジスタは、アプリケーション特権でアクセス可能である。
【０１９０】
クロック
【０１９１】
【表２９】
2005182791.tif 000033
【０１９２】
【表３０】
2005182791.tif 000034
実行される命令
【０１９３】
【表３１】
2005182791.tif 000035
【０１９４】
【表３２】
2005182791.tif 000036
スレッド実行クロック
【０１９５】
【表３３】
2005182791.tif 000037
【０１９６】
【表３４】
2005182791.tif 000038
タイムアウト待ちカウンタ
【０１９７】
【表３５】
2005182791.tif 000039
【０１９８】
【表３６】
2005182791.tif 000040
（仮想プロセッサおよびスレッドＩＤ）
示された実施形態では、各アクティブスレッドは、仮想プロセッサに対応し、かつ、８ビットアクティブスレッド数によって特定される（アクティブスレッド［７：０］）モジュール５は、１６ビットスレッドＩＤ（スレッド［１５：０］）をサポートし、スレッドの高速のロード（活性化）およびアンロード（不活性化）を可能にする。他の実施形態は、異なったサイズのスレッドＩＤをサポートし得る。
（スレッド−命令フェッチ抽象化）
上述のように、モジュール５のＴＰＵ１０〜２０は、Ｌ１命令キャッシュ２２、およびこれらのＴＰＵ内でアクティブのスレッドの任意の組み合わせから、各サイクルごとに５つまでの命令を起動するパイプラインコントロールハードウェアを共有する。図１０は、機能ユニット３０〜３８上で実行するためのこれらの命令をフェッチおよびディスパッチするために、モジュール５によって用いられるメカニズムの抽象化である。
【０１９９】
この図面に示されるように、各サイクルの間、命令がＬ１キャッシュ２２からフェッチされ、かつ、各それぞれのＴＰＵ１０〜２０と関連付けられた命令キュー１０ａ〜２０ａに配置される。示された実施形態では、スレッドキュー１０ａ〜２０ａを等しいレベルに保つという上位目標により、シングルスレッドごとに３〜６つの命令がフェッチされる。他の実施形態では、異なった数の命令がフェッチされてもよいし、および／またはキューをだいたい埋めるために異なった目標がセットされてもよい。フェッチステージの間もまた、モジュール５（および、特に、例えば、上述のイベントハンドリングメカニズム）は、イベント、および対応するスレッドの待ち状態から実行状態への変換を認識する。
【０２００】
ディスパッチステージの間（フェッチおよび実行／リタイアステージと並列して実行する）、１つ以上の実行スレッドの各々からの命令は、そのサイクルのためにそれらのリソースの最良の利用を考慮するラウンドロビンプロトコルに基づいて、機能ユニット３０〜３８にディスパッチされる。これらの命令は、スレッドの任意の組み合わせからのものであり得る。コンパイラは、例えば、命令セットに提供された「ストップ」フラグを利用して、単一サイクルで起動され得るスレッド内の命令のグループ間の境界を特定する。他の実施形態では、例えば、特定のスレッドを優先するプロトコル、リソースの利用を無視するプロトコル等の他のプロトコルが用いられてもよい。
【０２０１】
実行およびリタイア段階の間（フェッチおよびディスパッチステージと並列で実行される）、１つ以上のスレッドから複数の命令が同時に実行される。上述のように、示された実施形態では、５つまでの命令がサイクルごとに、例えば、整数ユニット、浮動ユニット、分岐ユニット、比較ユニット、およびメモリ機能ユニット３０〜３８によって起動および実行される。他の実施形態では、より多いか、またはより少ない命令が、例えば、機能ユニットの数およびタイプに依存して、およびＴＰＵの数に依存して起動され得る。
【０２０２】
実行が完了した場合、命令はリタイアされる。その結果は書き込まれ、命令は命令キューからクリアされる。
【０２０３】
他方、命令がブロックした場合、対応するスレッドは、実行状態から待ち状態に変換される。ブロックを引き起こした条件が解決された場合、対応するスレッドのブロックされた命令、および、次に、これに続くすべての命令が再スタートされる。図１１は、これを容易にするための、示された実施形態で用いられる３つのポインタのキュー管理メカニズムを示す。
【０２０４】
この図面を参照して、命令キューおよび３つのポインタのセットがＴＰＵ１０〜２０ごとに維持される。ここで、そのような単一キュー１１０および１１２〜１１６のセットのみが示される。キュー１１０は、関連したＴＰＵ、および、より具体的には、そのＴＰＵ内の現在アクティブなスレッドの、フェッチされ、実行し、リタイアした（または無効の）命令を保持する。命令がフェッチされると、これらの命令は、キューの先頭に挿入される。これは、挿入（またはフェッチ）ポインタ１１２によって指定される。実行するための次の命令が抽出（または発行）ポインタ１１４によって識別される。コミットポインタ１１６は、実行がコミットされた最後の命令を識別する。命令がブロックされるか、そうでない場合、中止された場合、コミットポインタ１１６はロールバックされ、コミットポインタと抽出ポインタ間の命令を実行パイプラインに押し込む。逆に、分岐が用いられた場合、全部のキューがフラッシュされ、ポインタがリセットする。
【０２０５】
キュー１１０は円として示されるが、他のコンフィギュレーションが利用されてもよいことが分かる。図１１に示されるキューイングメカニズムは、例えば、図１２に示されるように実現され得る。命令は、デュアルポートメモリ１２０または、あるいは、一連のレジスタ（図示せず）に格納される。各々の新規にフェッチされた命令が格納される書き込みアドレスは、フェッチコマンド（例えば、パイプラインコントロールによって発行される）に応答して、メモリ１２０の連続的アドレスを生成するフェッチポインタロジック１２２によって供給される。発行された命令は、ここでは下部に示された他のポートから取得される。各命令が取得される読み出しアドレスが発行／コミットポインタロジック１２４によって供給される。そのロジックは、コミットおよび発行コマンド（例えば、パイプラインコントロールによって発行される）に応答し、連続的アドレスを、適宜、生成および／またはリセットする。
（プロセッサモジュールインプリメンテーション）
図１３は、特に、ＴＰＵ１０〜２０を実現するためのロジックを含む図１のプロセッサモジュール５のＳｏＣインプリメンテーションを示す。図１におけるように、図１３のインプリメンテーションは、上述のように構成され動作するＬ１およびＬ２キャッシュ２２〜２６を備える。同様に、このインプリメンテーションは、整数ユニット、浮動小数点ユニットおよび比較ユニットをそれぞれ備える機能ユニット３０〜３４を備える。さらなる機能ユニットが代替的または追加的に提供され得る。ＩＰＵ１０〜２０を実現するためのロジックは、パイプラインコントロール１３０、分岐ユニット３８、メモリユニット３６、レジスタファイル１３６、およびロード−格納バッファ１３８を備える。図１３に示されるコンポーネントは、示されるように、コントロールおよび情報転送するために相互接続される。破線は主要コントロールを示し、実線は述語値コントロールを示し、太い実線は６４ビットデータバスを同定し、さらに太い線は１２８ビットデータバスを同定する。図１３は本発明によるプロセッサモジュール５のあるインプリメンテーションを表し、他のインプリメンテーションが実現されてもよいことが分かる。
（パイプラインコントロールユニット）
示された実施形態では、パイプラインコントロール１３０は、図１１〜図１２との関連ですでに述べられたスレッドごとのキューを含む。スレッドごとに１２、１５または１８個の命令がパラメータ化され得る。コントロール１３０は、これらのキューからラウンドロビンベースで命令をピックアップする（しかしながら、上述のように、これは、他のベースでも実行され得る。これは、レジスタファイル１３６（これは、命令のソースおよび宛先レジスタを提供するリソースである）、および機能ユニット３０〜３８へのアクセスのシーケンスをコントロールする。パイプラインコントロール１３０は、スレッドごとのキューからの基本命令クラスをデコードし、命令を機能ユニット３０〜３８にディスパッチする。上述のように、１つ以上のスレッドからの複数の命令は、同じサイクルのそれらの機能ユニットによって実行するためにスケジューリングされ得る。コントロール１３０は、さらに、スレッドごとの構成キューを空にすること、分岐ユニット３８にシグナリングすること、および、可能である場合、例えば、サイクルごとのベースで機能ユニットをアイドリングしてユーザの消費を低減することを担う。
【０２０６】
図１４は、パイプラインコントロールユニット１３０のブロック図である。ユニットは、スレッドクラスキューのコントロールロジック１４０、スレッドクラス（またはスレッドごとの）キュー１４２それ自体、命令ディスパッチ１４４、ロングワードデコードユニット１４６、および機能ユニットキュー１４８ａ〜１４８ｅを備え、これらは相互に（そして、モジュール５の他のコンポーネントに接続される。スレッドクラス（スレッドごとの）キューは、図１１〜１２との関連ですでに述べられたように構成され動作する。スレッドクラスキューコントロールロジック１４０は、これらのキュー１４２の入力側をコントロールし、従って、図１１〜図１２に示され、かつすでに述べられた挿入ポインタ機能を提供する。コントロールロジック１４０は、さらに、ユニットキュー１４８ａ〜１４８ｅの入力側をコントロールすること、および分岐ユニット３８とインターフェースして命令フェッチをコントロールすることを担う。後者に関して、ロジック１４０は、（例えば、ほとんどの命令をリタイアするＴＰＵを補償するために）上述の態様で命令フェッチのバランシングを担う。
【０２０７】
命令ディスパッチ１４４は、スレッドクラスキューの各々において利用可能な命令のスケジューリングをサイクルごとに評価および決定する。上述のように、示された実施形態では、命令をより迅速にリタイアするキューを考慮して、キューがラウンドロビンベースでハンドリングされる。命令ディスパッチ１４４もまた、スレッドクラスキュー１４２の出力側をコントロールする。これに関して、命令ディスパッチ１４４は、図１１〜図１２との関連ですでに述べられた抽出およびコミットポインタを管理し、これは、命令がリタイアされたコミットポインタを更新すること、および命令が中止された場合（例えば、スレッドスイッチまたは例外のため）、そのポインタをロールバックすることを包含する。
【０２０８】
ロングワードデコードユニット１４６は、Ｌ１命令キャッシュ２２から入来する命令ロングワードをデコードする。示された実施形態では、そのような各ロングワードは、命令へとデコードされる。これは、１つまたは２つのロングワードをデコードするためにパラメータ化され得、それぞれ、３つの命令および６つの命令にデコードされる。デコードユニット１４６は、さらに、各命令の命令クラスをデコードすることを担う。
【０２０９】
ユニットキュー１４８ａ〜１４８ｅは、機能ユニット３０〜３８によって実行されるべき実際の命令をキューに入れる。各キューは、スレッド単位ベースで組織され、クラスキューとの一致が保たれる。ユニットキューは、上述のように、コントロールの目的で、スレッドクラスキューコントロール１４０および命令ディスパッチ１４４に結合される。キュー１４８ａ〜１４８ｅからの命令は、対応するパイプライン１５０ａ〜１５０ｂに転送され、機能ユニットそれ自体３０〜３８にルーティングされる。命令は、さらに、レジスタファイルパイプライン１５２に渡される。
【０２１０】
図１５は、例えば、１４８ａ等の個別ユニットキューのブロック図である。これは、ＴＰＵごとに１つの命令キュー１５４ａ〜１５４ｅを備える。これらは、コントロールの目的で、スレッドクラスキューコントロール１４０（ｔｃｑｕｅｕｅ＿ｃｔｌとラベル付けされる）および命令ディスパッチ１４４（ｉｄｉｓｐａｔｃｈとラベル付けされる）に結合される。これらは、さらに、示されるように、命令入力のロングワードデコードユニット１４６（ｌｗｄｅｃｏｄｅとラベル付けされる）およびスレッド選択ユニット１５６に結合される。このユニットは、示されるように、命令ディスパッチ１４４によって提供されるコントロール信号に基づいて、スレッド選択をコントロールする。ユニット１５６からの出力は、対応するパイプライン１５０ａ〜１５０ｅ、およびレジスタファイルパイプライン１５２にルーティングされる。
【０２１１】
図１４を再び参照して、整数ユニットパイプライン１５０ａおよび浮動小数点ユニットパイプライン１５０ｂは、それぞれの機能ユニットの適切な命令フィールドをデコードする。各パイプラインは、さらに、それぞれの機能ユニットへのコマンドの時間を測定する。さらに、各パイプライン１５０ａ、１５０ｂは、分岐または中止に基づいて、それぞれのパイプラインに押し込み（ｓｑｕａｓｈｉｎｇ）を適用する。さらに、各々は、パワーダウン信号が１つのサイクルの間に用いられない場合、これをそれぞれの機能ユニットに印加する。示された比較ユニットパイプライン１５０ｃ、分岐ユニットパイプライン１５０ｄおよびメモリユニットパイプライン１５０ｅは、そのそれぞれの機能ユニット、比較ユニット３４、分岐ユニット３８、およびメモリユニット３６に同様の機能を提供する。レジスタファイルパイプライン１５０もまた、同様に、レジスタファイル１３６に対して同様の機能を提供する。
【０２１２】
ここで、図１３に戻って、示された分岐ユニット３８は、命令アドレスの生成およびアドレス変換、ならびに命令フェッチを担う。さらに、これは、スレッド処理ユニット１０〜２０の状態を維持する。図１６は、分岐ユニット３８のブロック図である。これは、図面に示されるように、相互に（および、モジュール５の他のコンポーネントに）接続されるコントロールロジック１６０、スレッド状態記憶装置１６２ａ〜１６２ｅ、スレッド選択１６４、アドレス加算器１６６、セグメント変換ＣＡＭ（ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）１６８を備える。
【０２１３】
コントロールロジック１６０は、パイプラインコントロール１３０からのコマンド信号に基づいてユニット３８を駆動する。これは、示されるように、さらに、入力として、命令キャッシュ２２状態およびＬ２キャッシュ２６アクノリッジメントを取得する。ロジック１６０は、示されるように、スレッドスイッチをパイプラインコントロール１３０に、かつ、コマンドを命令キャッシュ２２およびＬ２キャッシュに出力する。スレッド状態記憶装置１６２ａ〜１６２ｅは、それぞれのＴＰＵ１０〜２０の各々のスレッド状態を格納する。これらのＴＰＵの各々に、図３に示され、すでに述べられた汎用レジスタ、述語レジスタ、およびコントロールレジスタが維持される。
【０２１４】
スレッド状態記憶装置から取得されたアドレス情報は、示されるように、スレッドセレクタにルーティングされる。このセレクタは、その情報からスレッドアドレスを選択し、かつ、コントロール１６０からのコントロール信号（示される）に基づいてアドレス演算が実行され得る。アドレス加算器１６６は、示されるように、スレッドセレクタ１６４、およびレジスタファイル（ｒｅｇｉｓｔｅｒ  ｓｏｕｒｃｅとラベル付けされる）によって供給されるアドレス指定情報の出力に基づいて、選択されたアドレスをインクリメントするか、または、分岐アドレス計算を実行する。さらに、アドレス加算器１６６は、分岐結果を出力する。新規に計算されたアドレスは、上述のように、図５との関連ですでに述べられたように動作し、次の命令フェッチと共に用いるために変換された命令キャッシュアドレスを生成するセグメント変換メモリ１６８にルーティングされる。
（機能ユニット）
図１３に戻って、メモリユニット３６は、データキャッシュ２４アドレス生成およびアドレス変換を含む、メモリ参照命令の実行を担う。さらに、ユニット３６は、上述のように、ペンディング（メモリ）イベントテーブル（ＰＥＴ）５０を維持する。図１７は、メモリユニット３６のブロック図である。これは、図面に示されるように、相互に（および、モジュール５の他のコンポーネントに）接続される、コントロールロジック１７０、アドレス加算器１７２、およびセグメント変換ＣＡＭ１７４を備える。
【０２１５】
コントロールロジック１７０は、パイプラインコントロール１３０からのコマンド信号に基づいて、ユニット３６を駆動する。これは、示されるように、さらに、入力として、データキャッシュ２２状態およびＬ２キャッシュ２６アクノリッジメントを取得する。ロジック１７０は、示されるように、スレッドスイッチをパイプラインコントロール１３０および分岐ユニット３８に、かつコマンドをデータキャッシュ２４およびＬ２キャッシュに出力する。アドレス加算器１７２は、レジスタファイル１３６から提供されたアドレス指定情報をインクリメントするか、または必要なアドレス計算を実行する。新規に計算されたアドレスは、セグメント変換メモリ１７４にルーティングされる。このメモリは、図５との関連ですでに述べられたように動作し、データアクセスと共に用いるための変換命令キャッシュアドレスを生成する。図面には示されないが、ユニット３６もまた、上述のように、ＰＥＴを備える。
【０２１６】
図１８は、Ｌ１命令キャッシュ２２またはＬ２データキャッシュ２４のいずれかを実現するキャッシュユニットのブロック図である。このユニットは、データアレイとして機能する１６個の１２８ｘ２５６バイトシングルポートメモリセル１８０ａ〜１８０ｐを、タグアレイとして機能する、対応する１６個の３２ｘ５６バイトデュアルポートメモリセル１８２ａ〜１８２ｐと一緒に備える。これらは、示されるように、Ｌ１およびＬ２アドレスおよびデータバスに結合される。コントロールロジック１８４および１８６は、メモリセルと、Ｌ１キャッシュコントロールおよびＬ２キャッシュコントロールとに結合される。
【０２１７】
再び図１３に戻って、レジスタファイル１３６は、機能ユニット３０〜３８によって実行される命令によってアクセスされるすべてのソースおよび宛先レジスタのリソースとして機能する。このレジスタファイルは、図２０に示されるように実現される。ここに示されるように、遅延およびワイヤオーバーヘッドを低減するために、ユニット１３６は、機能ユニット３０〜３８ごとに別々のレジスタファイルに分解される。示された実施形態では、各インスタンスは、ＴＰＵの各々につき４８個の６４ビットレジスタを提供する。他の実施形態は、ＴＰＵに割り当てられたレジスタの数、ＴＰＵの数およびレジスタのサイズにより様々であり得る。
【０２１８】
各インスタンス２００ａ〜２００ｅは、各インスタンスの上部に入る矢印によって示されるように、５個のワイヤポートを有し、これらのポートを介して、機能ユニット３０〜３８の各々が、出力データを同時に書き込み得る（これにより、インスタンスが均一なデータを保持することを保証する）。各々は、各インスタンスの下部から発する矢印によって示されるように、異なった数の読み出しポートを提供する。このポートを介してそれぞれの機能ユニットがデータを取得する。従って、示されるように、整数ユニット３０、浮動小数点ユニット３２、およびメモリユニットと関連付けられたインスタンスは、すべて、３つの読み出しポートを有し、比較ユニット３４と関連付けられたインスタンスは、２つの読み出しポートを有し、分岐ユニット３８と関連付けられたインスタンスは、１つのポートを有する。
【０２１９】
レジスタファイルインスタンス２００〜２００ｅは、各サイクルのシングルスレッドについてすべてのポートが読み出されることによって最適化され得る。さらに、記憶ビットは、ポートアクセスのワイヤ下で折りたたまれ得る。
【０２２０】
図２１および図２２は、それぞれ、整数ユニット３０および比較ユニット３４のブロック図である。図２３Ａおよび図２３Ｂは、それぞれ、浮動小数点ユニット３２、および本明細書中で用いられる乗算加算融合ユニット（ｆｕｓｅｄ  ｍｕｌｔｉｐｌｙ−ａｄｄ  ｕｎｉｔ）のブロック図である。これらのユニットの構成および動作は、図面で提供されるコンポーネント、相互接続、および表示から明らかである。
（消費者−生産者メモリ）
従来技術のマルチプロセッサシステムでは、スレッドまたはプロセッサ間でデータに基づく処理の流れを実現するための同期オーバーヘッドおよびプログラミングの困難性が非常に高い。プロセッサモジュール５は、あるスレッドが、データが利用可能であることを示す場合に、他のスレッドは、データが利用可能である状態で待ち、かつ、トランスペアレントにウェイクアップすることを可能にして、上述のことが容易に行われることを可能にするメモリ命令を提供する。このようなソフトウェアトランスペアレントの消費者−生産者メモリ動作は、より高性能の細粒度スレッドレベルと、効率的にデータが配向された、消費者−生産者プログラミングスタイルとの並列処理を可能にする。
【０２２１】
示された実施形態は、「フィル」メモリ命令を提供する。これは、選択されたメモリロケーションにデータをロードし、そのロケーションにある状態、すなわち、「フル」状態を関連付けるためのデータ生産者であるスレッドによって用いられる。命令が実行されるときにロケーションがすでにその状態である場合、実行がシグナリングされる。
【０２２２】
この実施形態は、さらに、「エンプティ」命令を提供する。これは、選択されたロケーションからデータを取得するためにデータ消費者によって用いられる。ロケーションがフル状態と関連付けられた場合、データは、そこから読み出され（例えば、指定されたレジスタに）、かつ、命令は、そのロケーションが「エンプティ」状態と関連付けられるようにする。逆に、エンプティ命令が実行されている時点に、ロケーションがフル状態と関連付けられていない場合、命令は、それを実行したスレッドを一時的にアイドル状態（または、これに代わる実施形態では、アクティブ、非実行状態）に遷移させ、これが一旦そのように関連付けられると、これをアクティブ、実行状態に再び遷移させ（そして、エンプティ命令を実行して完了する）。エンプティ命令を用いることによって、低オーバーヘッドおよびソフトウェアトランスペアレンシーでデータが利用可能であるときにスレッドを実行することが可能である。
【０２２３】
示された実施形態では、フィルおよびエンプティオペレーションの対象であるメモリロケーションに関するステータス情報を格納するペンディング（メモリ）イベントテーブル（ＰＥＴ）５０がある。これは、ロケーションのアドレス、それぞれのフルまたはエンプティ状態、およびこれらのロケーションのデータの「消費者（ｃｏｎｓｕｍｅｒ）」、すなわち、エンプティ命令を実行し、ロケーションが埋められるのを待っているスレッドの識別情報を備える。このペンディングイベントテーブルは、例えば、例外（例えば、連続的フィル命令が特定のアドレスに実行され、介入するエンプティ命令がない場合等）の原因をシグナリングおよびトラッキングする際に有用であり得る、データの生産者の識別情報をさらに備え得る。
【０２２４】
それぞれのロケーションのデータは、ＰＥＴ５０に格納されず、フィルおよび／またはエンプティ命令の対象でないデータと同様に、むしろ、キャッシュおよび／またはメモリシステムそれ自体に残る。他の実施形態では、ステータス情報は、メモリシステム内で、それが関係するロケーションと並んでおよび／または別個のテーブル、リンクリスト等に格納される。
【０２２５】
従って、例えば、エンプティ命令が所与のメモリロケーション上で実行される場合、ＰＥＴがチェックされ、これが、同じロケーションが現在フル状態であることを示すエントリを有するかどうかを決定する。そのエントリを有する場合、フル状態である場合、そのエントリは、データをメモリロケーションからエンプティ命令によって指定されたレジスタに移動させて、エンプティに変更され、読み出しが行われる。
【０２２６】
他方、エンプティ命令が実行されているときに所与のメモリロケーションのＰｅＴにエントリがない場合（または、任意のそのようなエントリが、ロケーションは現在エンプティであることを示す場合）、ＰＥＴにエントリが生成（または更新）されて、所与のロケーションがエンプティであることを示し、かつ、そのエンプティ命令を実行したスレッドが、フィル命令によってそのロケーションに次に格納される任意のデータの消費者であることを示す。
【０２２７】
フィル命令が、次に（おそらく、別のスレッドによって）実行された場合、ＰＥＴがチェックされて、その同じロケーションが現在エンプティ状態であることを示すエントリを有するかどうかを決定する。このようなエントリが発見されると、その状態は、フルに変更され、そのエントリにおいて識別された消費者スレッドに通知をルーティングするためにイベント送達メカニズム４４（図４）が用いられる。そのスレッドがアクティブであり、ＴＰＵ内で待ち状態である場合、通知はＴＰＵに進み、スレッドがアクティブ、実行状態に入り、そのエンプティ命令を再実行する（今回、完了する）（なぜなら、メモリロケーションは、ここで、フル状態だからである）。そのスレッドがアイドル状態である場合、通知は、システムスレッドに進み（現在実行中のどのＩＰＵにおいても）、これは、スレッドが実行中のアクティブ状態のＴＰＵにロードされるようにし、これにより、エンプティ命令は、再実行され得る。
【０２２８】
示された実施形態では、消費者／生産者のようなメモリ動作のための、ＰＥＴのこの使用は、例えば、フィルおよびエンプティ等の選択されたメモリ命令に関してのみ行われ、より一般的なロードおよびストアメモリ命令では行われない。従って、例えば、現在、エンプティ命令の対象であるメモリロケーションに対してロード命令が実行された場合であっても、そのエンプティ命令を実行したスレッドへの通知は行われず、これにより、命令は再実行され得る。他の実施形態は、この点について異なり得る。
【０２２９】
図２４Ａは、３つの相互依存するスレッド２３０、２３２および２３４を示す。これらのスレッド間の同期化およびデータ変換は、本発明によるフィルおよびエンプティ命令によって容易になり得る。例えば、スレッド２３０は、ＭＰＥＧ２多重分離スレッド２３０であり、例えば、チューナ、ストリーミングソース等の、例えば、ＭＰＥＧ２ソース２３６から取得されたＭＰＥＧ２の多重分離を担う。例を続けるために、ＴＰＵ１０についてアクティブ、実行状態であると想定される。スレッド２３２は、ビデオデコーディングステップ１スレッドであり、多重分離されたＭＰＥＧ２信号からのビデオ信号をデコードする第１ステージを担う。ＴＰＵについてアクティブ、実行状態であると想定される。スレッド２３４は、ビデオデコーディングステップ２スレッドであり、ＬＣＤインターフェース２３８または他のデバイスを介して出力するために、多重分離したＭＰＥＧ２信号からビデオ信号をデコードする第２ステージを担う。ＴＰＵ１４についてアクティブ、実行状態であると想定される。
【０２３０】
ソース２３６からのデータストリーミングをリアルタイムで収容するために、スレッド２３０〜２３４の各々は、そのアップストリームソースによって提供されたデータを連続的に処理し、従って、他のスレッドと並列でこれを行う。図２４Ｂは、同期を保証し、かつスレッド間のデータ転送を容易にする態様で、これを容易にするフィルおよびエンプティ命令の使用を示す。図面を参照して、矢印２４０ａ〜２４０ｇは、スレッド間、特に、１つのスレッドによって書き込み（埋められる）、および別のスレッドによって読み出し（空にされる）されるデータロケーション間のフィル依存状態（ｆｉｌｌ  ｄｅｐｅｎｄｅｎｃｉｅｓ）を示す。従って、スレッド２３０は、アドレスＡ０に予定されたデータを処理する一方で、スレッド２３２は、そのロケーションに向けられるエンプティ命令を実行し、スレッド２３４は、（スレッド２３２が最終的にフィル）アドレスＢ０に向けられたエンプティ命令を実行する。エンプティ命令の結果、スレッド２３２は、ロケーションＡ０のフィルの完了を待っている間、待ち状態（例えば、アクティブ、非実行、またはアイドル）に入り、スレッド２３４は、ロケーションＢ０のフィルの完了を待っている間、待ち状態に入る。
【０２３１】
Ａ０のスレッド２３０のフィルが完了すると、そのスレッドがＡ０からのデータを処理することが可能になり、その結果が、フィル命令を介してＢ０に向けられる。スレッド２３４は、待ち状態に留まり、依然として、そのフィルの完了を待っている。その間、スレッド２３０は、アドレスＡ１に向けられたデータの処理を開始し、スレッド２３２は、エンプティ命令を実行し、Ａ１のフィルの完了を待っている間、スレッドを待ち状態に置く。
【０２３２】
スレッド２３２がＢ０のフィル要求を実行する場合、スレッド２３４のエンプティが完了して、スレッドがＢ０からのデータを処理することを可能にし、結果がＣ０に向けられ、ここでＴＶビュワーに表示するためにＬＣＤインターフェース（図示せず）によって読み出される。３つのスレッド２３０、２３２、２３４は処理を継続し、ＭＰＥＧ２ストリーム全体の処理が完了するまで、フィルおよびエンプティ命令をこの態様で（図面に示されるように）実行する。
【０２３３】
フィルおよびエンプティ命令は、その命令フォーマットを精査することによってさらに理解され得る。
（エンプティ）
フォーマット：ｐｓ  ＥＭＰＴＹ  ｃａｃｈｅ  ｔｈｒｅａｄｓ  ｄｒｅｇ，ｂｒｅｇ，ｉｒｅｇ｛，ｓｔｏｐ｝
説明：エンプティは、メモリシステムに命令して、実効アドレスの状態をチェックさせる。状態がフルである場合、エンプティ命令は、その状態をエンプティに変更し、値をｄｒｅｇにロードする。状態がすでにエンプティである場合、命令は、その命令がフルになるまで待ち、待ち挙動は、スレッドフィールドによって表される。
（オペランドおよびフィールド）
ｐｓ    述語ソースレジスタは、命令が実行されているかどうかを特定する。真（ｔｒｕｅ）である場合、命令が実行され、そうでなく偽（ｆａｌｓｅ）である場合、命令は実行されていない（副次的影響なし）
ｓｔｏｐ  ０  命令グループがこの命令によって表現されていないことを表す。
【０２３４】
１  命令グループが、この命令によって表現されていることを表す。
ｔｈｒｅａｄ  ０  無条件スレッドスイッチなし
１  無条件スレッドスイッチ
２  ストール時（スレッドの実行をブロック）条件付スレッドスイッチ
３  リザーブ
ｓｃａｃｈｅ  ０  再利用キャッシュヒントでのｔｂｄ
１  再利用キャッシュヒントでの読み出し／書き込み
２  再利用なしのキャッシュヒントでｔｂｄ
３  再利用なしのキャッシュヒントでの読み出し／書き込み
ｉｍ          ０  アドレス計算用のインデックスレジスタ（ｉｒｅｇ）を表す
１  アドレス計算用のｄｉｓｐを表す
ｉｒｅｇ      命令のインデックスレジスタを表す
ｂｒｅｇ      命令のベースレジスタを表す
ｄｉｓｐ      メモリ参照命令用の２の補数の変位定数（８ビット）を表す
ｄｒｅｇ      命令の宛先レジスタを表す
（フィル）
フォーマット：ｐｓ  ＦＩＬＬ  ｃａｃｈｅ  ｔｈｒｅａｄｓ  ｓ１ｒｅｇ，ｂｒｅｇ，ｉｒｅｇ｛，ｓｔｏｐ｝
説明：レジスタｓ１ｒｅｇは、実効アドレスでメモリ内のワードに書き込まれる。実効アドレスは、ｉｍ（即時記憶）フィールドに基づいて、ｂｒｅｇ（ベースレジスタ）と、ｉｒｅｇ（インデックスレジスタ）またはｄｉｓｐ（変位）とを加算することによって計算される。実効アドレスの状態は、フルに変更される。状態がすでにフルである場合、実行がシグナリングされる。
（オペランドおよびフィールド）
ｐｓ    述語ソースレジスタは、命令が実行されているかどうかを表す。真である場合、命令が実行され、そうでなく偽である場合、命令は実行されていない（副次的影響なし）
ｓｔｏｐ  ０  命令グループがこの命令によって表現されていないことを表す。
【０２３５】
１  命令グループが、この命令によって表現されていることを表す。
ｔｈｒｅａｄ  ０  無条件スレッドスイッチなし
１  無条件スレッドスイッチ
２  ストール時（スレッドの実行をブロック）条件付スレッドスイッチ
３  リザーブ
ｓｃａｃｈｅ  ０  再利用キャッシュヒントでのｔｂｄ
１  再利用キャッシュヒントでの読み出し／書き込み
２  再利用なしのキャッシュヒントでのｔｂｄ
３  再利用なしのキャッシュヒントでの読み出し／書き込み
ｉｍ          ０  アドレス計算用のインデックスレジスタ（ｉｒｅｇ）を特定
１  アドレス計算用のｄｉｓｐを特定
ｉｒｅｇ      命令のインデックスレジスタを特定
ｂｒｅｇ      命令のベースレジスタを特定
ｄｉｓｐ      メモリ参照命令用の２の補数の変位定数（８ビット）を特定
ｄｒｅｇ      命令の宛先レジスタを特定
（ソフトウェアイベント）
ハードウェアおよびソフトウェアイベントの処理は、それらの命令フォーマットを精査することによって、より完全に理解される。
（イベント）
フォーマット：ｐｓＥＶＥＮＴ  ｓ１ｒｅｇ｛，ｓｔｏｐ｝
説明：イベント命令は、実行スレッドのイベントキューをポーリングする。イベントが存在する場合、命令は、例外状態レジスタにロードされたイベント状態で完了する。イベントがイベントキューに存在しない場合、スレッドはアイドル状態に遷移する。
（オペランドおよびフィールド）
ｐｓ    述語ソースレジスタは、命令が実行されているかどうかを特定する。真である場合、命令が実行され、そうでなく偽である場合、命令は実行されていない（副次的影響なし）
ｓｔｏｐ  ０  命令グループがこの命令によって表現されていないことを表す。
【０２３６】
１  命令グループが、この命令によって表現されていることを表す。
ｓ１ｒｅｇ    命令の第１のソースオペランドを含むレジスタを特定する
（ＳＷイベント）
フォーマット：ｐｓ  ＳＷＥＶＥＮＴ  ｓ１ｒｅｇ｛，ｓｔｏｐ｝
説明：ＳＷイベント命令は、イベントをスレッドによってハンドリングされるべきイベントキューにエンキューする。イベントフォーマットのｘｘｘを参照。
【０２３７】
（オペランドおよびフィールド：
ｐｓ    述語ソースレジスタは、命令が実行されているかどうかを特定する。真である場合、命令が実行され、そうでなく偽である場合、命令は実行されていない（副次的影響なし）
ｓｔｏｐ  ０  命令グループがこの命令によって表現されていないことを表す。
【０２３８】
１  命令グループが、この命令によって表現されていることを表す。
ｓ１ｒｅｇ    命令の第１のソースオペランドを含むレジスタを特定する
（ＣＴＬＦＬＤ）
フォーマット：ｐｓ  Ｃｔ１Ｆｌｄ  ｔｉ  ｃｆｉｅｌｄ，｛，ｓｔｏｐ｝
説明：コントロールフィールド命令は、ｃｆｉｅｌｄによって特定されたコントロールフィールドを変更する。コントロールレジスタ内の他のフィールドは変更されない。
【０２３９】
（オペランドおよびフィールド）
ｐｓ    述語ソースレジスタは、命令が実行されているかどうかを特定する。真である場合、命令が実行され、そうでなく偽である場合、命令は実行されていない（副次的影響なし）
ｓｔｏｐ  ０  命令グループがこの命令によって表現されていないことを表す。
【０２４０】
１  命令グループが、この命令によって表現されていることを表す。
ｔｉ      ０  このスレッドコントロールレジスタへのアクセスを表す
１  ＩＤｔ＿ｉｎｄｉｒｅｃｔ  ｆｉｅｌｄ（スレッドインダイレクション）（特権化）によって特定されたスレッドのコントロールレジスタへのアクセスを表す
ｃｆｉｅｌｄ
ｃｆｉｅｌｄ［４：０］  コントロールフィールド  特権
【０２４１】
【表３７】
2005182791.tif 000041
（デバイス内蔵プロセッサモジュール５）
図２５は、ＳｏＣフォーマットに組み込まれた本発明によるデジタルＬＣＤ−ＴＶサブシステム２４２のブロック図である。このサブシステム２４２は、上述のように構成され、例えば、上述のように、ＭＰＥＧ２信号多重分離、ＭＰＥＧ２ビデオデコーディング、ＭＰＥＧオーディオデコーディング、デジタルＴＶユーザインターフェースオペレーション、およびオペレーティングシステムの実行（例えば、Ｌｉｎｕｘ）、プロセッサモジュール５を提供するスレッドを同時に実行するように動作するプロセッサモジュール５を備える。モジュール５は、上述のように、Ｌ２キャッシュ２６のオフチップ部分を備えるＤＤＲ  ＤＲＡＭフラッシュメモリに結合される。このモジュールは、ＡＭＢＡＡＨＢバス２４４へのインターフェース（図示せず）を備え、これを介して、デジタルＬＣＤ−ＴＶのコンポーネントにインターフェース、すなわち、ビデオ入力インターフェース、ビデオ出力インターフェース、オーディオ出力インターフェースおよびＬＣＤインターフェースを提供する「インテレクチャルプロパティ」または「ＩＰ」２４６と通信する。当然、ＡＨＢバス５等を介してモジュール５に結合される他のＩＰが、追加的または代替的に提供されてもよい。例えば、図面において、示されたモジュール５は、デジタルＬＣＤ−ＴＶがソース信号を取得および／またはコントロールされる、ＤＭＡエンジン２４８、高速Ｉ／Ｏデバイスコントローラ２５０および低速デバイスコントローラ２５２（ＡＰＢブリッジ２５４を介する）等の選択的ＩＰと通信する。
【０２４２】
図２６は、再びＳｏＣフォーマットで具現化されるデジタルＬＣＤ−ＴＶまたは本発明による他のアプリケーションサブシステム２５６のブロック図である。示されたサブシステムは、図２４に示される特定のＩＰの代わりにＡＰＢおよびＡＨＢ／ＡＰＢで示されるという点を除いて、上述のように構成される。アプリケーションニーズによるが、素子２５８は、上述のインプリメンテーションにおけるように、ビデオ入力インターフェース、ビデオ出力インターフェース、オーディオ出力インターフェース、およびＬＣＤインターフェース等を備え得る。
【０２４３】
示されたサブシステムは、さらに、複数のモジュール５、例えば、モジュール５によって利用されるオフチップＬ２キャッシュ２６ｂの一部とインターフェースし、好ましくは、これを形成する相互接続を介して結合される１〜２０（以上）のモジュールを備える。その相互接続は、モジュール５によって、および、より具体的には、Ｌ２キャッシュ２６によって共有されるシフトレジスタバスを備えるリング相互接続（Ｒ１）の形態でもよい。あるいは、これは、モジュール５の組み合わされたメモリシステム内でのデータの迅速な移動を容易にする、プロプライエタリ等、別の形態の相互接続でもよい。これと関係なく、Ｌ２キャッシュは、好ましくは、任意の１つのモジュール５のＬ２キャッシュが個々のプロセッサのメモリシステムのみでなく、プロセッサモジュール５のすべての分散オールキャッシュメモリシステムにも寄与するように結合される。当然、上述のように、モジュール５は、同じメモリシステム、チップまたはバスを物理的に共有する必要はなく、その代わりに、ネットワーク等を介して接続され得る。
【０２４４】
これまで、所望の目的を満たす装置、システムおよび方法が記載された。本明細書中に記載された実施形態が本発明の例示であること、および、変更を含む、他の実施形態が本発明の範囲に含まれることは明らかである。  
【図面の簡単な説明】
【０２４５】
【図１】図１は、本発明のある実施形態により構成され動作するプロセッサモジュールを示す。
【図２】図２は、従来のスーパースカラプロセッサによるスレッド処理を本発明のある実施形態により構成され動作するプロセッサモジュールによるスレッド処理と比較する。
【図３】図３は、本発明のある実施形態により構成され動作するプロセッサにおける仮想処理ユニット（またはスレッド処理ユニット（ＴＰＵ））で実行するスレッドの可能な状態を示す。
【図４】図４は、本発明のある実施形態により構成され動作するプロセッサモジュールにおけるイベント送達メカニズムを示す。
【図５】図５は、本発明のある実施形態による構成され動作するシステムにおけるシステムアドレス変換への仮想アドレスのメカニズムを示す。
【図６】図６は、本発明のある実施形態により構成され動作するシステムにおけるレベル１およびレベル２キャッシュ構成を示す。
【図７】図７は、本発明のある実施形態により構成され動作するシステムにおけるタグルックアップを実行するために用いられるＬ２キャッシュおよびロジックを示す。
【図８】図８は、本発明のある実施形態により構成され動作するシステムにおけるＬ２拡張キャッシュのタグルックアップを実行するために用いられるロジックを示す。
【図９】図９は、本発明のある実施形態により構成され動作するシステムにおけるスレッド処理ユニット（ＴＰＵ）ごとに維持される汎用レジスタ、述語レジスタ、およびスレッド状態またはコントロールレジスタを示す。
【図１０】図１０は、本発明のある実施形態により構成され動作するシステムにおけるスレッドによって実行される命令をフェッチおよびディスパッチするメカニズムを示す。
【図１１】図１１は、本発明のある実施形態により構成され動作するシステムにおいて用いられるキュー管理メカニズムを示す。
【図１２】図１２は、本発明のある実施形態により構成され動作するシステムにおいて用いられるキュー管理メカニズムを示す。
【図１３】図１３は、本発明のある実施形態によるスレッド処理ユニットを実現するためのロジックを含む図１のプロセッサモジュールのＳｏＣ（ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）のインプリメンテーションを示す。
【図１４】図１４は、本発明のある実施形態により構成され動作するシステムにおけるパイプラインコントロールユニットのブロック図である。
【図１５】図１５は、本発明のある実施形態により構成され動作するシステムにおける個々のユニットキューのブロック図である。
【図１６】図１６は、本発明のある実施形態により構成され動作するシステムにおける分岐ユニットのブロック図である。
【図１７】図１７は、本発明のある実施形態により構成され動作するシステムにおけるメモリユニットのブロック図である。
【図１８】図１８は、本発明のある実施形態により構成され動作するシステムにおけるＬ１命令キャッシュまたはＬ１データキャッシュのいずれかを実現するキャッシュユニットのブロック図である。
【図１９】図１９は、本発明のある実施形態により構成され動作するシステムにおける図７のＬ２キャッシュおよびロジックのインプリメンテーションを示す。
【図２０】図２０は、本発明のある実施形態により構成され動作するシステムにおけるレジスタファイルのインプリメンテーションを示す。
【図２１】図２１は、本発明のある実施形態により構成され動作するシステムにおける整数ユニットおよび比較ユニットのブロック図である。
【図２２】図２２は、本発明のある実施形態により構成され動作するシステムにおける整数ユニットおよび比較ユニットのブロック図である。
【図２３Ａ】図２３Ａは、本発明のある実施形態により構成され動作するシステムにおける浮遊少数点のブロック図である。
【図２３Ｂ】図２３Ｂは、本発明のある実施形態により構成され動作するシステムにおける浮遊少数点のブロック図である。
【図２４Ａ】図２４Ａは、本発明のある実施形態により構成され動作するシステムにおける消費者および生産者メモリ命令の使用を示す。
【図２４Ｂ】図２４Ｂは、本発明のある実施形態により構成され動作するシステムにおける消費者および生産者メモリ命令の使用を示す。
【図２５】図２５は、本発明のある実施形態により構成され動作するシステムにおけるデジタルＬＣＤ−ＴＶのブロック図である。
【図２６】図２６は、本発明のある実施形態により構成され動作するシステムにおけるデジタルＬＣＤ−ＴＶまたは他のアプリケーションサブシステムのブロック図である。
【符号の説明】
【０２４６】
１０      アドレス変換
１４      アドレス変換
２０      アドレス変換
２２      Ｌ１命令キャッシュ
２４      Ｌ１データキャッシュ
２６      Ｌ２キャッシュ
２８      起動およびパイプラインコントロール
３０      整数ユニット（ｉｕｎｉｔ）
３２      浮動小数点ユニット（ｆｐｕｎｉｔ）
３４      比較ユニット（ｃｕｎｉｔ）
３６      メモリユニット（ｍｅｍｕｎｉｔ）
３８      分岐ユニット（ｂｒｕｎｉｔ）
４４      イベント−スレッド送達
４６      ＴＰＵキュー
４８      ＴＰＵキュー
７０      データブロック
７２ａ    キャッシュタグアレイグループ
７２ｐ    キャッシュタグアレイグループ
７４ａ    タグ比較
７４ｐ    タグ比較
８０      データブロック
８２ａ    データアレイグループ
８２ｐ    データアレイグループ
８４ａ    マッチしたタグを選択
８４ｐ    マッチしたタグを選択
８６      物理ページ番号
１１２    挿入（またはフェッチ）ポインタ
１１６    コミットポインタ
１１４    抽出（または発行）ポインタ
１２０    デュアルポートメモリまたはレジスタ
１３０    パイプコントロール
１３８    ロード格納バッファ
１４０    スレッドクラスキューコントロール
１４２    スレッドクラス
１４４    命令ディスパッチ
１４８ａ  ユニットキュー
１４８ｅ  ユニットキュー
１６０    コントロール
１６８    セグメント変換
１６６    アドレス加算器
１６４    スレッドセレクタ
１６２ａ  スレッド０状態
１６２ｂ  スレッド１状態
１６２ｅ  スレッドｎ状態
１７０    コントロール
１７２    アドレス加算器
１７４    セグメント変換ＣＡＭ  
１９２    状態マシン
１９４    リクエストキュー
１９０    現在状態コントロールロジック
１９６    Ｌ１キャッシュインターフェース
２６ｃ    ＤＤＲ  ドラムＣｔｌ
２００ａ  整数レジスタファイル
２００ｂ  ＦＰレジスタファイル
２００ｃ  比較レジスタファイル
２００ｄ  分岐レジスタファイル
２００ｅ  メモリレジスタファイル
２３６    チューナまたはストリーム生成器
２３０    ＭＰＥＧ２  ＤＭＵＸスレッド
２３２    ビデオデコードステップ１スレッド
２３４    ビデオデコードステップ２スレッド
【図１】
2005182791.tif 000042
【図２】
2005182791.tif 000043
【図３】
2005182791.tif 000044
【図４】
2005182791.tif 000045
【図５】
2005182791.tif 000046
【図６】
2005182791.tif 000047
【図７】
2005182791.tif 000048
【図８】
2005182791.tif 000049
【図９】
2005182791.tif 000050
【図１０】
2005182791.tif 000051
【図１１】
2005182791.tif 000052
【図１２】
2005182791.tif 000053
【図１３】
2005182791.tif 000054
【図１４】
2005182791.tif 000055
【図１５】
2005182791.tif 000056
【図１６】
2005182791.tif 000057
【図１７】
2005182791.tif 000058
【図１８】
2005182791.tif 000059
【図１９】
2005182791.tif 000060
【図２０】
2005182791.tif 000061
【図２１】
2005182791.tif 000062
【図２２】
2005182791.tif 000063
【図２３Ａ】
2005182791.tif 000064
【図２３Ｂ】
2005182791.tif 000065
【図２４Ａ】
2005182791.tif 000066
【図２４Ｂ】
2005182791.tif 000067
【図２５】
2005182791.tif 000068
【図２６】
2005182791.tif 000069