(57)【要約】【課題】  効率的なパイプラインプロセッサ、マルチタスクプロセッサおよびリソースアクセス技術を提供する。【解決手段】  マルチタスクパイプラインプロセッサにおいて、連続する命令が種々のタスクによって実行され、前の命令を完了できないときに後の命令の命令実行パイプラインを取除く必要をなくす。タスクはタスク特定値をストアするレジスタを共用せず、それによって新しいタスクが実行のためにスケジュールされるときにレジスタをセーブまたはロードする必要をなくす。命令が利用不可なリソースにアクセスすれば、その命令はサスペンドされ、リソースが利用可となるまで他のタスクの命令が代わりに実行される。ハードウェアによってタスクスケジュールが行なわれ、オペレーティングシステムは必要ではない。【選択図】        図１
2004342132.tif 000002
【特許請求の範囲】
【請求項１】
長さの等しい連続したタイムスロットにおいてネットワークデータを処理する複数の所定のグループ｛Ｇ１｝のタスクを実行するためのコンピュータプロセッサを含む装置であって、各タスクグループＧ１は複数のタスクを含み、前記コンピュータプロセッサは
各タイムスロットをタスクグループＧ１と関連づけ、かつ各タイムスロットに対し、関連づけられたタスクグループＧ１からのタスクのうちの１つを選択するタスク選択回路を含み、どの２個の連続したタイムスロットもそれぞれの異なるタスクグループＧ１と関連づけられており、前記コンピュータプロセッサはさらに
各タイムスロットにおいて、前記タイムスロットに対して選択された前記タスクに対する最大１個の命令の実行を開始する命令実行ユニットを含む、装置。
【請求項２】
前記タスク選択回路は
グループＧ１における各タスクに対し、前記タスクが実行のために利用可能であるかどうかを判定するタスク情報に基づいて単一のタスクグループＧ１の前記タスクからあるタスクを選択するための選択回路と、
各々が１個のタスクグループＧ１に対する前記タスク情報を保持する複数のラッチ回路とを含み、各タイムスロットにおいて、各ラッチ回路の内容は次のラッチ回路に転送され、最後のラッチ回路の内容が前記選択回路に与えられる、請求項１に記載の装置。
【請求項３】
各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能でないかもしれない複数のリソースをさらに含み、各リソースはただ１個のタスクグループＧ１のタスクによって共用される、請求項１に記載の装置。
【請求項４】
前記装置は、１個以上のネットワークセグメントからデータのフレームを受信し、および／または１個以上のネットワークセグメントへデータのフレームを送信し、データの各フレームは前記タスクの単一のものによって処理されるものである、請求項１に記載の装置。
【請求項５】
前記命令実行ユニットは、各タスクに対し、タスク特有の値をストアする１個以上のレジスタを含み、タスクが実行のためにスケジュールされているときは前記１個以上のレジスタのいずれのものもセーブもリストアもされる必要がないようにする、請求項１に記載の装置。
【請求項６】
複数のネットワークポート上でネットワークデータを受信し、および／または前記ネットワークポート上でネットワークデータを送信するための複数の第１の回路をさらに含み、異なる第１の回路はそれぞれの異なるネットワークポート上でデータを受信および／または送信し、各タスクグループＧ１は前記第１の回路のうちの１つと関連づけられ、各タスクグループＧ１は関連づけられた第１の回路によって受信および／または送信されたネットワークデータを処理する、請求項１に記載の装置。
【請求項７】
各第１の回路はただ１個のポート上でネットワークデータを受信および／または送信する、請求項６に記載の装置。
【請求項８】
前記第１の回路は前記ネットワークポートとネットワークスイッチとの間のインターフェイスをもたらす、請求項６に記載の装置。
【請求項９】
各々が１個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および／または送信する複数の第１の回路をさらに含み、異なる第１の回路はそれぞれの異なるフロー上でデータを受信および／または送信し、各タスクグループＧ１は前記第１
の回路のうちの１つと関連づけられており、各タスクグループＧ１は関連づけられた第１の回路によって受信および／または送信されたネットワークデータを処理する、請求項１に記載の装置。
【請求項１０】
各タスクグループＧ１はネットワークポートに対応し、各タスクグループＧ１の前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項９に記載の装置。
【請求項１１】
各タスクグループＧ１は各データフローのデータを処理するため少なくとも２個のタスクを含む、請求項９に記載の装置。
【請求項１２】
各タスクに対してプログラムカウンタレジスタをさらに含み、
各タイムスロットにおいて、（ａ）前記タイムスロットに対してあるタスクが選択された場合、前記命令実行ユニットは、選択されたタスクのプログラムカウンタレジスタによって識別される命令に対する実行を開始し、（ｂ）前記タイムスロットに対して選択されたタスクがない場合、前記実行ユニットはＮＯＰ命令の実行を開始する、請求項１に記載の装置。
【請求項１３】
ネットワークデータを処理する複数の所定のグループ｛Ｇ１｝のタスクを実行するためのコンピュータプロセッサを含む装置であって、各タスクグループＧ１は複数のタスクを含み、前記コンピュータプロセッサは
連続したタスク選択動作を行なうためのタスク選択回路を含み、各タスク選択動作はグループＧ１と関連づけられ、関連づけられたグループＧ１からの前記タスクのうちの１つを選択し、どの２個の連続したタスク選択動作もそれぞれ異なるタスクグループＧ１と関連づけられており、前記コンピュータプロセッサはさらに
前記連続したタスク選択動作によって選択された前記タスクに対する命令を実行するための命令実行ユニットを含み、各タスク選択動作に対し、前記命令実行ユニットは対応する選択されたタスクに対して最大１個の命令の実行を開始する、装置。
【請求項１４】
前記タスク選択回路は
グループＧ１における各タスクに対し、前記タスクが実行のために利用可能であるかどうかを判定するタスク情報に基づいて単一のタスクグループＧ１の前記タスクからあるタスクを選択するための選択回路と、
各々が１個のタスクグループＧ１に対する前記タスク情報を保持する複数のラッチ回路とを含み、各タスク選択動作の後、各ラッチ回路の内容は次のラッチ回路へ転送され、最後のラッチ回路の内容は前記選択回路に与えられる、請求項１３に記載の装置。
【請求項１５】
各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれない複数のリソースをさらに含み、各リソースはただ１個のタスクグループＧ１のタスクによって共用される、請求項１３に記載の装置。
【請求項１６】
前記リソースは、前記コンピュータプロセッサへのリクエストをストアしてネットワークデータを処理するためのリクエストＦＩＦＯと、ネットワークデータに適用すべき前記プロセッサからのコマンドをストアするためのコマンドＦＩＦＯとを含む、請求項１５に記載の装置。
【請求項１７】
複数のネットワークポート上でネットワークデータを受信し、および／または前記ネットワークポート上でネットワークデータを送信する複数の第１の回路をさらに含み、異なる第１の回路はそれぞれの異なるネットワークポート上でデータを受信および／または送信し、各タスクグループＧ１は前記第１の回路のうちの１つと関連づけられ、各タスクグ
ループＧ１は関連づけられた第１の回路によって受信および／または送信されたネットワークデータを処理する、請求項１３に記載の装置。
【請求項１８】
各第１の回路はただ１個のポート上でネットワークデータを受信および／または送信する、請求項１７に記載の装置。
【請求項１９】
各々が１個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および／または送信する複数の第１の回路をさらに含み、異なる第１の回路はそれぞれの異なるフロー上でデータを受信および／または送信し、各タスクグループＧ１は前記第１の回路のうちの１つと関連づけられており、各タスクグループＧ１は関連づけられた第１の回路によって受信および／または送信されたネットワークデータを処理する、請求項１３に記載の装置。
【請求項２０】
各タスクグループＧ１はネットワークポートに対応し、各グループの前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項１９に記載の装置。
【請求項２１】
命令実行回路を含む回路によって複数の所定のグループ｛Ｇ１｝のタスク｛ＴＳＫ１｝を実行するステップを含む方法であって、前記タスクＴＳＫ１はネットワーク上で受信および／または送信されたネットワークデータを処理し、前記命令実行回路は長さの等しい複数の連続したタイムスロットにおける各タイムスロットＴ１において命令を実行することを始めるように動作可能であり、前記複数のタスクを実行するステップは
どの２個の連続したタイムスロットもそれぞれの異なるグループＧ１と関連づけられるように、前記所定のタスクグループのうちの１つであるタスクグループＧ１（Ｔ１）に各タイムスロットＴ１を関連づけるステップを含み、前記実行するステップはさらに
各タイムスロットＴ１に対し、タスク選択動作ＴＳＯＰ１（Ｔ１）を行なって前記タイムスロットＴ１と関連づけられた前記グループＧ１（Ｔ１）からあるタスクを選択するステップと、
各タイムスロットＴ１において、前記タスク選択動作ＴＳＯＰ１（Ｔ１）によってタスクがうまく選択された場合、前記命令実行回路が前記タイムスロットに対して選択された前記タスクに対する命令の実行を開始するステップとを含む、方法。
【請求項２２】
前記タスクＴＳＫ１は、各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用しており、各リソースはただ１個のタスクグループＧ１の前記タスクによって共用される、請求項２１に記載の方法。
【請求項２３】
前記タスクＴＳＫ１は前記ネットワークデータからアドレス情報を抽出し、アドレス変換を行なう、請求項２１に記載の方法。
【請求項２４】
前記タスクＴＳＫ１は、複数のネットワークデータフローのネットワークデータを処理し、ネットワークデータは複数の回路Ｃ１によって受信および／または送信され、各回路Ｃ１は、異なる回路Ｃ１がそれぞれの異なるフロー上でネットワークデータを受信および／または送信する態様で１個以上のそれぞれのデータフロー上でデータを受信および／または送信し、各回路Ｃ１は、そのタスクが前記回路Ｃ１によって受信および／または送信されたデータに対して動作するグループＧ１に対応する、請求項２１に記載の方法。
【請求項２５】
各グループＧ１はネットワークポートに対応し、各グループＧ１の前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項２４に記載の方法。
【請求項２６】
命令実行回路を含む回路によって複数の所定のグループ｛Ｇ１｝のタスク｛ＴＳＫ１｝を実行するステップを含む方法であって、前記タスクＴＳＫ１はネットワーク上で受信および／または送信されたネットワークデータを処理し、前記複数のタスクを実行するステップは
前記命令実行回路によって実行すべき各命令に対し、その命令が実行されるべきタスクＴＳＫ１を選択する選択動作を実行するステップを含み、各選択動作はグループＧ１に関連づけられ、前記グループＧ１が実行に利用可能であるタスクを有している場合に、前記グループＧ１からあるタスクを選択し、どの２個の連続した選択動作もそれぞれの異なるグループＧ１と関連づけられており、前記実行するステップはさらに
タスクの選択につながる各選択動作に対し、前記命令実行回路が、選択されたタスクに対する命令を実行するステップを含む、方法。
【請求項２７】
１個以上のネットワークセグメントからデータのフレームを受信するステップおよび／または１個以上のネットワークセグメントへデータのフレームを送信するステップをさらに含み、データの各フレームは単一のタスクＴＳＫ１によって処理される、請求項２６に記載の方法。
【請求項２８】
前記タスクＴＳＫ１は、各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用しており、各リソースはただ１個のタスクグループＧ１の前記タスクによって共用される、請求項２６に記載の方法。
【請求項２９】
前記タスクＴＳＫ１は前記ネットワークデータからアドレス情報を抽出し、アドレス変換を行なう、請求項２６に記載の方法。
【請求項３０】
前記タスクＴＳＫ１は複数のネットワークポートに対するネットワークデータを処理し、ネットワークデータは、異なる回路Ｃ１がそれぞれの異なるネットワークポート上でネットワークデータを受信および／または送信する態様で複数の回路Ｃ１によって受信および／または送信され、各回路Ｃ１は、そのタスクが前記回路Ｃ１によって受信および／または送信されたデータに対して動作するグループＧ１に対応し、
前記回路Ｃ１は前記ネットワークポートとネットワークスイッチとの間のインターフェイスをもたらす、請求項２６に記載の方法。
【請求項３１】
前記タスクＴＳＫ１は、複数のネットワークデータフローのネットワークデータを処理し、ネットワークデータは複数の回路Ｃ１によって受信および／または送信され、各回路Ｃ１は、異なる回路Ｃ１がそれぞれの異なるフロー上でネットワークデータを受信および／または送信する態様で１個以上のそれぞれのデータフロー上でネットワークデータを受信および／または送信し、各回路Ｃ１は、そのタスクが前記回路Ｃ１によって受信および／または送信されたデータに対して動作するグループＧ１に対応する、請求項２６に記載の方法。
【請求項３２】
各グループＧ１はネットワークポートに対応し、各グループＧ１の前記タスクＴＳＫ１は対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項３１に記載の方法。
【請求項３３】
各グループＧ１は、各データフローのデータを処理するため少なくとも２個のタスクＴＳＫ１を含む、請求項３１に記載の方法。
【請求項３４】
複数のタスクに対するコンピュータ命令を実行して複数のネットワークポートに対する
ネットワークデータを処理するステップを含む方法であって、ネットワークデータは、異なるポート回路がそれぞれの異なるネットワークポート上でネットワークデータを受信および／または送信する態様で複数のポート回路によって受信および／または送信され、各ポート回路は、前記ポート回路によって受信および／または送信されたデータに対して動作する複数の対応するタスクに対応し、
前記タスクに対して実行されるべき各コンピュータ命令に対し、前記方法は
どの２個の連続した命令もそれぞれ異なるポート回路に対して実行される態様で、前記命令が実行されるべきポート回路Ｐ１を定めるステップを含み、前記方法はさらに
タスク選択動作を行ない、前記ポート回路Ｐ１に対応する前記タスクのうちの１つを選択するステップと、
前記タスク選択動作によってタスクが選択された場合、選択されたタスクに対して命令を実行するステップと、
実行されるのに利用可能である前記ポート回路Ｐ１にいずれの前記タスクも対応していないことにより前記タスク選択動作によってタスクが選択されなかった場合、ＮＯＲ命令を実行するステップとを含む、方法。
【請求項３５】
複数のネットワークポート上で受信されるネットワークデータおよび／または前記ネットワークポート上で送信されるネットワークデータを処理するポートインターフェイス回路を制御するパイプライン化されたネットワークプロセッサによって複数のソフトウェアタスクを実行するための方法であって、前記ポートインターフェイス回路は、異なるハードウェアタスクがそれぞれの異なるネットワークポートに対するネットワークデータを処理する態様で複数のハードウェアタスクを含み、各ソフトウェアタスクは前記ハードウェアタスクのうちの対応する１つによって処理されるデータに対して動作し、各ハードウェアタスクは複数の前記ソフトウェアタスクに対応し、
長さの等しい連続したタイムスロットの各々において、前記パイプライン化されたプロセッサは前の命令を実行し続けるとともに命令の実行を始めるように動作可能であり、
前記方法は
各タイムスロットをハードウェアタスクと関連づけるステップを含み、このため、各タイムスロットにおいて、前記プロセッサは、関連づけられたハードウェアタスクに対応するソフトウェアタスクが実行のために利用可能である場合に前記関連づけられたハードウェアタスクに対応するソフトウェアタスクの命令の実行を始め、どの２個の連続したタイムスロットもそれぞれの異なるハードウェアタスクと関連づけられており、前記方法はさらに
各タイムスロットに対し、前記タイムスロットに関連づけられた前記ハードウェアタスクに対応するソフトウェアタスクが実行のため利用可能である場合に前記タイムスロットに関連づけられた前記ハードウェアタスクに対応するソフトウェアタスクを選択するステップと、
各タイムスロットにおいて、前記タイムスロットに関連づけられた前記ハードウェアタスクに対応する前記ソフトウェアタスクが実行のため利用可能である場合に、前記タイムスロットに対して選択された前記ソフトウェアタスクからの命令の実行を開始するステップとを含む、方法。
【請求項３６】
長さの等しい連続したタイムスロットにおいてネットワークデータを処理する複数の所定のグループのタスクを実行するためのコンピュータプロセッサを含む装置であって、各所定のグループのタスクは複数のタスクを含み、前記コンピュータプロセッサは
各タイムスロットにおいて、所定のグループのタスクからあるタスクを選択するためのタスク選択回路を含み、どの２個の連続したタイムスロットにおいても、前記タスク選択回路はそれぞれの異なる所定のグループのタスクからタスクを選択し、前記コンピュータプロセッサはさらに
前記タスクが選択されるたびにタスクに対する最大１個の命令の実行を開始する命令実
行ユニットを含む、装置。
【請求項３７】
前記タスクは、各々がどの所与の時点においてもタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用し、各リソースは前記所定のグループのタスクのうちのただ１個のグループのタスクによって共用される、請求項３６に記載の装置。
【請求項３８】
各々が、１個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および／または送信する複数の第１の回路をさらに含み、異なる第１の回路はそれぞれの異なるフロー上でデータを受信および／または送信し、各所定のグループのタスクは、前記第１の回路のうちの１つと関連づけられており、各所定のグループのタスクは関連づけられた第１の回路によって受信および／または送信されたネットワークデータを処理する、請求項３６に記載の装置。
【請求項３９】
長さの等しい連続したタイムスロットにおいて複数のタスクを実行するためのコンピュータプロセッサを含むネットワーク装置であって、各タスクは前記タスクに対応する１個以上のネットワークデータフロー上で受信された、および／または前記タスクに対応する１個以上のネットワークデータフロー上で送信されたネットワークデータを処理するものであり、前記コンピュータプロセッサは
各タイムスロットにおいてタスクを選択するためのタスク選択回路を含み、２個の連続したタイムスロットにおいて選択されたどの２個のタスクＴＳＫ１およびＴＳＫ２に対しても、前記タスクＴＳＫ１によって処理された前記１個以上のネットワークデータフローは前記タスクＴＳＫ２によって処理された前記１個以上のデータフローとは異なり、このため、前記タスクＴＳＫ１およびＴＳＫ２の双方によって処理されるデータフローがなく、前記コンピュータプロセッサはさらに
前記タスクが選択されるたびにタスクに対して最大１個の命令の実行を開始する命令実行ユニットを含む、ネットワーク装置。
【請求項４０】
複数のタスクを実行するためのコンピュータプロセッサを含むネットワーク装置であって、各タスクは対応するネットワークポート上で受信された、または対応するネットワークポート上で送信されたデータを処理するものであり、前記コンピュータプロセッサは
長さの等しい２個の連続したタイムスロットにおいて選択されたどの２個のタスクもそれぞれ異なるポートに対するデータを処理する態様で、各タイムスロットにおいてタスクを選択するためのタスク選択回路を含み、前記コンピュータプロセッサはさらに
タスクが選択されるたびに前記タスクに対する最大１個の命令の実行を開始する命令実行ユニットを含む、ネットワーク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願への相互参照）
該当なし
（連邦政府資金による研究または開発に関する陳述）
該当せず
【背景技術】
【０００２】
この発明はデータ処理に関し、より特定的にはパイプライン化された命令実行、マルチタスキングおよびリソースアクセス技術に関する。
【０００３】
パイプライン化およびマルチタスキングによりプロセッサの帯域幅が増加する。これらの技術に伴う時間および複雑さを低減することが望ましい。
【０００４】
特に、命令実行がパイプライン化されると、プロセッサは、命令を実行すべきであるかどうかがわかる前に命令を実行し始めることもあり得る。たとえば、プロセッサが命令Ｉ１を実行し始め、次に、Ｉ１の実行が完了する前に命令Ｉ２を実行し始めたとする。Ｉ１の実行が完了できないのであれば、命令Ｉ２を実行すべきではなく、命令Ｉ２をパイプラインから除去しなければならない。実際に、どの時点においてもプロセッサはパイプラインから除去すべきである２つ以上の命令を実行しているかもしれない。パイプライン除去に関連する回路の複雑さを低減することが望ましい。
【０００５】
また、マルチタスキング環境においてさまざまなタスク間での切替えに伴うオーバヘッドを低減することも望ましい。タスクを切替えるには、プロセッサにより実行されるオペレーティングシステムが、どのタスクが次に実行されるべきであるかを定めなければならない。また、オペレーティングシステムは、あるタスクにより用いられたレジスタ値をセーブし、別のタスクにより用いられる値をレジスタにロードしなければならない。これらの機能は相当な数のオペレーティングシステム命令を伴うことがある。こうした動作に関連のある命令の数を減少することが望ましい。
【０００６】
また、利用可能でないかもしれないリソースへのアクセスを改善することが望ましい。そのようなリソースの一例としては、プロセッサが読もうとする際には空であり、またはプロセッサが書こうとする際には一杯であるかもしれないＦＩＦＯが挙げられる。ＦＩＦＯにアクセスする前に、プロセッサはＦＩＦＯが利用可能であるかどうかを示すフラグを調べる。利用可能でないかもしれないリソースにアクセスする速度を改善することが望ましい。
【０００７】
また、複数のタスクによるコンピュータリソースの利用を同期化するための単純な同期化方法を提供し、リソースが別のタスクによりアクセスされるよう設定されている際に、あるタスクがそのリソースにアクセスすることによって生じ得るエラーを回避することが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
この発明はいくつかの実施例において、効率のよいパイプラインプロセッサ、マルチタ
スキングプロセッサおよびリソースアクセス技術を提供する。
【課題を解決するための手段】
【０００９】
いくつかの命令実行パイプライン実施例において、パイプライン除去オーバヘッドはプロセッサがどのタスクに対しても続けて実行できる命令の数を制限することによって低減または消去される。このため、いくつかの実施例では、連続した命令は別々のタスクにより実行される。そのため、命令を実行できない場合でも、次の命令は異なるタスクに属するため当該次の命令は依然として実行されなければならない。このため、次の命令はパイプラインから除去されない。
【００１０】
いくつかの実施例では、同じタスクのどの２つの命令の間でも、プロセッサは別のタスクからの十分な数の命令を実行してパイプライン除去の必要をなくしている。
【００１１】
タスク切替えに関連するオーバヘッドを低減するため、いくつかの実施例では各々のタスクに対する別個のレジスタが含まれており、レジスタ値がタスク切替え動作においてセーブされたり、またはリストアされたりする必要がないようにする。特に、いくつかの実施例では、各タスクは別個のプログラムカウンタ（ＰＣ）レジスタおよび別個のフラグを有する。いくつかの実施例において、タスク切替えはハードウェアによって１クロックサイクルで行なわれる。
【００１２】
いくつかの実施例において、プロセッサは、リソースが利用可能であるかどうかを予めチェックすることなくリソースにアクセスすることができる。プロセッサがリソースにアクセスする命令を実行する際にリソースが利用可能でない場合、プロセッサはその命令をサスペンドする。その命令を実行するはずであったプロセッサ回路は、たとえば別のタスクの命令など、別の命令を実行するのに利用可能となる。
【００１３】
そのため、いくつかの実施例では、プロセッサはすべてのリソース（たとえばＦＩＦＯなど）の状態を追跡する。（特に断っていない限り、ここで用いている術語「リソース」はある時点において利用可能であるかもしれない、または利用可能でないかもしれない何かを意味する。）生成される信号は各リソースの状態を示しており、特にどのリソースがどのタスクに利用可能であるのかを示す。あるタスクが利用可能でないリソースにアクセスを試みた場合、そのタスクはサスペンドされ、プロセッサは本来そのサスペンドされたタスクが利用できたはずのタイムスロット内で他のタスクを実行できる。リソースが利用可能となると、そのサスペンドされたタスクは再開され、そのリソースにアクセスする命令が再実行される。
【００１４】
複数のタスクが１つ以上のリソースを共用する際の同期エラーを避けるため、いくつかの実施例では、あるタスクがリソースのいずれか１つにアクセスし終わると、そのタスクは、そのリソースを共用する他のすべてのタスクがそのリソースにアクセスし終わるまでそのリソースにアクセスすることができない。このため、いくつかのネットワーク実施例では、さまざまなタスクがＦＩＦＯリソースを共用してデータフレームを処理する。各タスクは別個のデータフレームを処理する。フレームを処理するには、タスクは「リクエスト」ＦＩＦＯからフレームアドレスを読む。次に、タスクはコマンドＦＩＦＯに、チャネルプロセッサがフレームを処理するようにというチャネルプロセッサへのコマンドを書込む。２つ目のタスクは異なるフレームに対して同様の動作を行なう。始めのタスクは再び、さらに別のフレームに対して同じ動作を行なう。あるフレームに対して書かれたコマンドが別のフレームに誤って適用された場合、フレームは誤って処理される可能性がある。
【００１５】
この可能性をなくし、リクエストＦＩＦＯにおけるフレームアドレスとコマンドＦＩＦＯにおけるコマンドとを正確に一致させるため、以下の技術が用いられる。まず、あるタ
スク（たとえばＴ１）がリクエストＦＩＦＯおよびコマンドＦＩＦＯの双方にアクセスを許されるが、他のどのタスクもこれらのリソースにアクセスすることを許されない。一旦タスクＴ１がいずれかのリソースにアクセスし終わると、そのリソースに別のタスクがアクセスすることが許可され、さらにタスクＴ１は、そのリソースを共用する他のすべてのタスクがそのリソースにアクセスし終わるまでは再びそのリソースにアクセスすることを許されない。このため、リクエストＦＩＦＯにおけるフレームアドレスの順序はコマンドＦＩＦＯにおけるコマンドの順序と対応しており、チャネルがフレームアドレスとコマンドとを正確に一致させることができるようにする。この一致を確立するのに特殊なタグは何ら必要ではなく、この一致は単純なデータ構造であるＦＩＦＯを用いて確立される。
【００１６】
いくつかの実施例では、プロセッサはネットワークのデータフローを処理するいくつかのタスクを実行する。プロセッサは高い帯域幅をもたらすのに、上述のパイプラインおよびタスク切替え技術を用いる。
【００１７】
他の実施例および変更例を以下に説明する。この発明は添付の特許請求の範囲により規定される。
【発明を実施するための最良の形態】
【００１８】
図１には、パイプライン化されたマルチタスキングプロセッサ（マイクロコントローラ）１６０を含むポートインターフェイス（ＰＩＦ）回路１１０が示される。ポートインターフェイス１１０は、４つの全二重ポートを含み、これらはＡＴＭスイッチ１２０とそれぞれ対応の４つのイーサネット（登録商標）セグメント（図示せず）との間でインターフェイスをもたらし、４つのイーサネット（登録商標）セグメントの各々は対応するＭＡＣ１３０．０−１３０．３に接続される。各ポート「ｘ」（ｘ＝０，１，２，３）において、イーサネット（登録商標）セグメントとＡＴＭスイッチ１２０との間のデータは、対応するＭＡＣ１３０．ｘおよび対応するスライサ１４０．ｘを通って流れる。スライサは周知のＡＴＭ  ＳＡＲ機能を実行し、イーサネット（登録商標）フレームをＡＴＭセルに分割し、ＡＴＭスイッチへ向かう途中でセルにＡＴＭヘッダを付加し、イーサネット（登録商標）セグメントへ向かう途中でセルからフレームをアセンブルする。いくつかの実施例では、ＰＩＦ１１０へのＡＴＭスイッチインターフェイスはフレームモードで動作し、このモードにおいてはＡＴＭスイッチは、間に介在するセルのない状態でセルのフレームをスライサ１４０に送る。スライサ１４０はＡＡＬ−５プロトコルを用いる。フレームモードはたとえば、Ａ．ヨッフェ（Joffe ）他による１９９６年８月３０日出願の「ＡＴＭスイッチにおけるセルキューイング」（“Cell Queuing in ATM Switches”）と題された米国特許出願第０８／７０６，１０４号に記述される。また、１９９７年８月２８日出願の、ここに引用により援用されるＰＣＴ出願ＰＣＴ／ＵＳ９７／１４８２１を参照されたい。
【００１９】
ＰＩＦ１１０の他の実施例では、必ずしもＡＴＭまたはイーサネット（登録商標）ではない他のネットワーク間でインターフェイスがもたらされる。いくつかの実施例では、スライサ１４０は適当なＭＡＣで置換えられる。
【００２０】
プロトコル変換（たとえば、ＡＴＭ／イーサネット（登録商標）変換）を実行するのに加えて、ＰＩＦ１１０はＩＰルーティング、レイヤー２スイッチングまたは、ＰＩＦマイクロコントローラ１６０により実行されるソフトウェアにより定められる他の処理を行なうことができる。図３、図４に関連して以下の説明を参照されたい。また、本出願と同日出願のＡ．ヨッフェ他による「ネットワークでデータを転送するためのネットワークプロセッサシステムおよび方法」（“SYSTEMS AND METHODS FOR DATA TRANSFORMATION AND TRANSFER IN NETWORKS”）と題された米国特許出願第０９／０５５，０４４号（代理人事件番号Ｍ−４８５５  ＵＳ）も参照されたい。これもここに引用により援用される。
【００２１】
ＰＩＦ１１０はさほど速くないクロック速度においてであってもスループットが高い。そのため、いくつかの実施例では、ＰＩＦ１１０はわずか５０ＭＨｚのクロック速度において４つの１００ＭＢ／秒イーサネット（登録商標）ポートおよびそれぞれ対応の４つの１５５ＭＢ／秒ＡＴＭポートに対してＩＰルーティングを行なうことができる。
【００２２】
図１では、各スライサ１４０．ｘとその対応するＭＡＣ１３０．ｘとの間のデータフローは対応するチャネル１５０．ｘ（以下、チャネル「ｘ」、すなわちチャネル０，１，２または３、とも称される）により制御される。チャネル１５０はマイクロコントローラ１６０からのコマンドを実行する。いくつかの実施例では、４つのチャネル１５０．ｘは、時分割多重方式を用いて４つのチャネル１５０の機能を果たす１つのチャネル回路により実現される。ここに引用により援用される前述の米国特許出願第０９／０５５，０４４号の代理人事件番号Ｍ−４８５５  ＵＳ「ネットワークでデータを転送するためのネットワークプロセッサシステムおよび方法」を参照されたい。
【００２３】
チャネル、マイクロコントローラ、スライサ１４０およびＭＡＣ１３０はメモリ１６４を介して通信し、メモリ１６４は以下に説明する内部メモリ（「フレームおよびコマンドメモリ」）１７０およびＦＩＦＯ２３０、２４０を含む。
【００２４】
いくつかのイーサネット（登録商標）の実施例では、マイクロコントローラはＭＩＩ（メディア独立インターフェイス）管理回路１８０に接続され、ＭＩＩ管理回路１８０は当該技術分野において公知であるイーサネット（登録商標）物理層装置に接続される。
【００２５】
サーチマシン（ＳＭ）１９０はメモリ２００内にアドレス導出データベースを保持し、ＩＰルーティングまたはソフトウェアにより定められる他の処理を行なう。ＳＭ１９０はまた、メモリ２００内に（たとえばＶＬＡＮまたはアクセス制御リストを規定することによって）ネットワーク接続性を制限するデータベースを保持する。サーチマシンはマイクロコントローラ１６０により提示されるキー（たとえばイーサネット（登録商標）またはＩＰアドレス）を探索することができ、学習アルゴリズムを実行してそのアドレスがデータベースにない場合にレイヤー２またはレイヤー３アドレスを学習する。サーチマシン１９０はいくつかの実施例ではソフトウェアプログラマブルではないが、サーチマシンはフレキシブルなデータベースノード構造をサポートしており、このため、サーチマシンは異なる機能（たとえばＩＰルーティング、レイヤー２スイッチングなど）にたやすく適合できる。サーチマシン１９０は、サーチ、インサート、デリートなどのマイクロコントローラからのコマンドを実行する。サーチマシンはまた、マイクロコントローラにメモリ２００への直接のアクセスを与える。サーチマシンについては、追補８に記載する。
【００２６】
いくつかの実施例では、メモリ２００はフロースルー動作モードにおいてシンクロナススタティックＲＡＭを用いて実現される。いくつかの実施例では複数のメモリバンクが用いられている。
【００２７】
いくつかの実施例では、ＰＩＦ１１０は集積回路である。メモリ２００は集積回路の一部ではないため「外部」と称される。しかしながら、他の実施例では、メモリ２００は同じ集積回路の一部である。この発明はいかなる特定の集積方式によっても限定されるものではない。
【００２８】
ＰＩＦ１１０はまた、シリアル読出専用メモリ（ＲＯＭ）２０４（いくつかの実施例ではシリアルＥＰＲＯＭ）に接続され、ブート時にＲＯＭ２０４からマイクロコントローラへソフトウェア（「ファームウェア」）がロードされるようにする。
【００２９】
図２には、メモリ１６４内の１つのチャネル１５０．ｘおよびその関連のＦＩＦＯリソースが示される。チャネルは以下の２つの類似した部分に分割される。すなわち、対応するＭＡＣ１３０から対応するスライサ１４０へのデータフローを制御する入ってくる（イングレス）サブチャネル１５０Ｉと、スライサ１４０からＭＩＣ１３０へのデータフローを制御する出ていく（イーグレス）サブチャネル１５０Ｅとである。特に断っていない限り、参照番号においてサフィックス「Ｉ」はイングレスサブチャネルに属する回路を示し、サフィックス「Ｅ」はイーグレスサブチャネルに属する回路を示す。
【００３０】
各サブチャネル１５０Ｉ、１５０Ｅにおいてデータ処理は以下のステップを含む。
【００３１】
（１）  対応する入力制御ブロック２１０（すなわち２１０Ｉまたは２１０Ｅ）は対応するデータＦＩＦＯ２２０に入来データをストアする。マイクロコントローラがアドレス変換または他の処理を開始できるようにするのに十分なデータフレームの部分が受取られると（たとえばＩＰルーティング実施例ではＩＰアドレスおよびホップカウントが受取られると）、入力制御２１０はそれぞれ対応のリクエストＦＩＦＯ２３０にリクエストを書く。リクエストがＦＩＦＯ２３０に書かれる前に受取られるフレームバイトの数は、前述の米国特許出願第０９／０５５，０４４号の代理人事件番号Ｍ−４８５５  ＵＳに説明されるようにマイクロコントローラにより書込可能なレジスタにより規定される。
【００３２】
（２）  マイクロコントローラ１６０はリクエストを読み、対応するデータＦＩＦＯ２２０から適当なパラメータ（たとえばイングレス側での発信元および行先アドレスまたはイーグレス側でのＶＰＩ／ＶＣＩ）を読み、適当な処理を行なう。マイクロコントローラはたとえばアドレス導出探索を行なうため、必要に応じてサーチマシン１９０を用いる。
【００３３】
（３）  サーチマシン１９０がマイクロコントローラ１６０に探索結果を返すと、マイクロコントローラはそれぞれ対応のコマンドＦＩＦＯ２６０に１つ以上のチャネルコマンドを書き、これはフレームをどのように出力装置（ＭＡＣ１３０またはスライサ１４０）に転送するべきであるかを特定する。
【００３４】
（４）  フレーム全体が受取られた後、入力制御２１０はそれぞれ対応のステータスＦＩＦＯ２４０にステータス情報を書く。ステータスＦＩＦＯはマイクロコントローラ１６０により読まれる。ステータスによりフレームが不良であることが示されると（たとえばチェックサムが不良である場合）、マイクロコントローラはコマンドＦＩＦＯ２６０に「破棄」コマンドを書いて出力制御２５０がそのフレームを破棄するようにさせる。
【００３５】
ステップ（２）、ステップ（３）およびステップ（４）は図３、図４に関連して以下に説明する他の処理を含んでいてもよい。
【００３６】
（５）  出力制御２５０はそれぞれ対応のコマンドＦＩＦＯ２６０からのコマンドを実行する。
【００３７】
いくつかの実施例では、データＦＩＦＯ２２０およびコマンドＦＩＦＯ２６０は内部メモリ１７０内にストアされる。リクエストＦＩＦＯ２３０およびステータスＦＩＦＯ２４０はメモリ２３０、２４０（図１）内にストアされる。
【００３８】
イーグレス出力制御ブロック２５０Ｅの出力はマイクロコントローラに接続され、ＡＴＭスイッチ１２０がプログラム（「アプレット」）をマイクロコントローラにロードして実行できるようにする。アプレットはまず、他のフレームと類似した態様でイーグレス側に転送されるが、これらのアプレットのＶＰＩ／ＶＣＩパラメータはマイクロコントローラを示している。そこで、アプレットはＭＡＣ１３０には転送されない。代わりに、アプ
レットは回路２５０Ｅの出力からマイクロコントローラプログラムメモリ３１４（図６）にＤＭＡ転送によりロードされる。
【００３９】
マイクロコントローラ１６０はまた、それ自身のフレームを発生し、これをいずれかのデータＦＩＦＯ２２０へ書き、対応するコマンドＦＩＦＯ２６０へコマンドを書くことができる。対応する出力制御２５０はそのコマンドにより特定されるとおりにフレームを転送する。
【００４０】
マイクロコントローラはまた、コマンドＦＩＦＯ２６０に、各サブチャネル１５０Ｉ、１５０Ｅのための別個のメモリ（図示せず）にストアされる統計情報を転送するコマンドを書くことができる。
【００４１】
いくつかの実施例では、マイクロコントローラ１６０は費用のかかるリソースである。注目すべきことは、いくつかの実施例においてマイクロコントローラ命令実行ユニット（図６において３１０として示され以下に説明される）がＰＩＦ１１０のゲートカウントの約７０％を占めることである。このため、マイクロコントローラを常に稼動させることが望ましい。以下のように適当なマルチタスキングによって完全稼動させることができる。
【００４２】
マイクロコントローラは、各ポート０、１、２、３につき１つずつの、４つの「ハードウェアタスク」ＨＴ０、ＨＴ１、ＨＴ２、ＨＴ３を実行する。ハードウェアタスクは以下の表に示すように時分割多重方式で実行される。
【００４３】
【表１】
2004342132.tif 000003
【００４４】
ハードウェアタスクが利用可能でない場合（たとえば、ハードウェアタスクがサーチマシンを待っているためなど）、それぞれのクロックサイクルにおいてどのマイクロコントローラ命令も開始されない。
【００４５】
各ハードウェアタスクは１つ以上のソフトウェアタスクを含む。各ソフトウェアタスクはフレーム全体を処理するコードを含む。イングレス側のフレームとイーグレス側のフレームとが並列に到着し得るため、いくつかの実施例では各ハードウェアタスクは少なくとも２つのソフトウェアタスクを含んでおり少なくとも２つのフレームを並列処理できるようにする。いくつかの実施例では、異なるソフトウェアタスクがイングレス側とイーグレス側とに提供される。イングレスソフトウェアタスクが、たとえばマイクロコントローラがサーチマシンを待っているため実行できない場合、マイクロコントローラはイーグレスソフトウェアタスクを実行できる。また、その逆も可能である。
【００４６】
以下、術語「タスク」は、特に「ハードウェアタスク」と記載しない限り、ソフトウェアタスクを意味するものとする。
【００４７】
図３には、イングレスタスクによる１つのフレームのレイヤー３処理が示される。ステージ２９０ＤＡでは、サブステージ２９０ＤＡ．１においてマイクロコントローラはフレームから、イーサネット（登録商標）（ＭＡＣ）行先アドレスＤＡを読む。マイクロコントローラはこのアドレスをサーチマシン１９０に供給し、サーチマシン１９０はサブステ
ージ２９０ＤＡ．２において探索を行なう。
【００４８】
サブステージ２９０ＤＡ．３において、マイクロコントローラは探索結果を調べる。ＤＡが見つからなかった場合、フレームは捨てられるか、またはブロードキャストされる。ＤＡが見つかり、サーチマシンがそのＤＡを最終行先ステーションのアドレスであると認識した場合、探索結果は、フレームが最終行先に送られることとなる仮装接続（ＶＣ）のＶＰＩ／ＶＣＩを含むことになる。この場合、ＩＰステージ２９０ＩＰはスキップされる。探索結果からＤＡがＩＰルーティングエンティティに割当てられたアドレスであることが示されると、ＩＰ処理がステージ２９０ＩＰにおいて行なわれる。
【００４９】
そのステージでは、サブステージ２９０ＩＰ．１においてマイクロコントローラはフレームからＩＰ行先アドレスを読む。サーチマシンはステージ２９０ＩＰ．２においてそのアドレスに対して探索を行なう。マイクロコントローラはサブステージ２９０ＩＰ．３において探索結果を調べる。結果にはＶＰＩ／ＶＣＩが含まれ、またアクセス制御制約が含まれることもある。サブステージ２９０ＩＰ．３において、マイクロコントローラはアクセス制御制約をＩＰ発信元アドレスと突き合わせ、フレームが許可されるかどうかを判定する。許可されない場合、フレームは捨てられる。
【００５０】
ステージ２９０ＳＡにおいて、イーサネット（登録商標）発信元アドレスＳＡは処理され、アドレス学習アルゴリズムを実現し、またＶＬＡＮを実現する。より特定的には、サブステージ２９０ＳＡ．１において、サーチマシンはＳＡに対して探索を行なう。サーチマシンは学習アルゴリズムがリクエストするのであればＳＡデータを挿入または修正する。サブステージ２９０ＳＡ．２において、サーチマシンは、ＳＡが属するＶＬＡＮを戻す。サブステージ２９０ＳＡ．３において、マイクロコントローラはそのＶＬＡＮをステージ２９０ＤＡ．２においてサーチマシンが返したＤＡ  ＶＬＡＮと比較する。イーサネット（登録商標）発信元および行先アドレスが異なるＶＬＡＮに属する場合、フレームは捨てられる。
【００５１】
サブステージ２９０ＤＡ．３、２９０ＩＰ．３、２９０ＳＡ．３のうちの１つまたは２つ以上において、マイクロコントローラはそれぞれ対応のデータフロー（すなわちそれぞれ対応のサブチャネル）に対してコマンドＦＩＦＯ２６０Ｉへコマンドを書く。コマンドはチャネル１５０がフレームを捨てるように指示しても、またはフレームをそれぞれ対応のスライサ１４０に転送するように指示してもよい。フレームが転送される場合、チャネルは、コマンドの指示に従い、スライサにＶＰＩ／ＶＣＩを供給したり、また、ＩＰホップカウントをインクリメントしたり、および／または発信元アドレスをそれぞれ対応のＭＡＣ１３０のアドレスで置換えたりする。
【００５２】
図４には、１つのフレームに対してイーグレスタスクにより行なわれる処理が示される。ステージ２９４ＶＣにおいて、タスクはＶＰＩ／ＶＣＩを調べてフレームがアプレットであるかどうかを判定する。もしそうであれば、タスクはそのフレームをマイクロコントローラプログラムメモリ（以下に説明する図６において３１４として示される）にロードし、アプレットを実行する。ステージ２９４ＩＰはスキップされる。
【００５３】
代わりに、ＶＰＩ／ＶＣＩはフレームがＡＴＭスイッチ１２０からの情報リクエストであることを示していてもよい。そのようなリクエストの例としては、ＰＩＦ１１０内のレジスタを読むリクエスト、または統計情報を読むリクエストが含まれる。イーグレスタスクがそのリクエストを行なう。それが情報のリクエストであれば、イーグレスタスクは、イーグレスタスクを実行するのと同じハードウェアタスクのイングレスコマンドＦＩＦＯ２６０Ｉに１つ以上のコマンドを書く。これらのコマンドにより、チャネルがその情報をスイッチに送ることになる。ステージ２９４ＩＰはスキップされる。
【００５４】
ＶＩＰ／ＶＣＩがスイッチ１２０からのどの管理リクエスト（情報のリクエストなど）をも示さない場合、ステージ２９４ＩＰが行なわれる。サブステージ２９４ＩＰ．１において、タスク（すなわちマイクロコントローラ）はフレームからＩＰ行先アドレスを読み、そのアドレスをサーチマシンに供給する。ステージ２９４ＩＰ．２において、サーチマシンは探索を行ない、イーサネット（登録商標）行先アドレスを返し、場合によってはアクセス制御情報をも返す。ステージ２９４ＩＰ．３において、タスクはそのイーグレスコマンドＦＩＦＯ２６０Ｅへコマンドを書き、フレームのイーサネット（登録商標）行先アドレスをサーチマシンがもたらすアドレスで置換えさせ、イーサネット（登録商標）発信元アドレスをそれぞれ対応のＭＡＣ１３０．ｘのアドレスで置換えさせ、フレームをＭＡＣへ転送させる。また、タスクソフトウェアに応じて他の種類の処理が行なわれてもよい。
【００５５】
マイクロコントローラがステージ２９０ＤＡ．２、２９０ＩＰ．２、２９０ＩＳＡ．２、２９４ＩＰ．２においてサーチマシンを待っている間、マイクロコントローラは同じまたは別のハードウェアタスクにおける別のソフトウェアタスクを実行するのに利用可能である。
【００５６】
いくつかの実施例では、各イングレスフローおよび各イーグレスフローに対して１つのタスクを有しているだけではマイクロコントローラを完全に稼動させることにならず、そのため、各半二重データフローに対して２つ以上のタスクが提供され、マイクロコントローラが各データフローにおいて２つ以上のフレームを並列に処理できるようにする。このことは以下を考慮することによって説明される。イーサネット（登録商標）フレームが短いときにマイクロコントローラの速度が最も要求される。なぜなら、図３、図４に示される同じ処理を短いフレームと長いフレームとの双方に対して行なわなければならないからである。最も短いイーサネット（登録商標）フレームは６４バイトを有する。たとえば、４つのイーサネット（登録商標）ポートが１００ＭＢ／秒ポートであり、ＡＴＭポートが１５５ＭＢ／秒であるとする。１００ＭＢ／秒では、最も短いフレームはイーサネット（登録商標）ポートを５．１２マイクロ秒で通過する。このため、マイクロコントローラおよびサーチマシンはフレームを５．１２＋１．６＝６．７２マイクロ秒で処理しなければならない（１．６マイクロ秒はフレーム間ギャップである）。
【００５７】
５０ＭＨｚのマイクロコントローラクロック速度を仮定しよう。これは信頼性のある動作を確実にするためのかなり遅いクロック速度である。他の実施例ではより速い速度（たとえば１００ＭＨｚ）が用いられる。５０ＭＨｚにおいて、６．７２マイクロ秒は３３６クロックサイクルである。このため、１つのハードウェアタスクのイングレスおよびイーグレスタスクのためのクロックサイクル割当は３３６／４＝８４クロックサイクルである。
【００５８】
フレームの処理はマイクロコントローラとサーチマシンとで分けられているが、これらは必ずしも同じフレームに対して並列に作業する訳ではないため、同じハードウェアタスク内の１つのイングレスフレームと１つのイーグレスフレームとに対する処理レイテンシは結線速度での処理においてさえ、８４サイクルより長くてよい。処理するのに８４サイクルよりも長くかかり、６４バイトのフレームがイングレス側およびイーグレス側において連続して到着する場合、同じデータフローにおける前のフレームが処理される前に次のフレームが到着し始めることがあり得る。このため、マイクロコントローラが、同じデータフローにおける前のフレームの処理が完了する前に次のフレームを処理し始めることができるようにすることが望ましい。同じデータフローにおける複数のフレームのこのような並列処理を実現するために、各データフローに対して２つ以上のソフトウェアタスクが提供される。
【００５９】
このように、いくつかの実施例では、各ハードウェアタスクＨＴｘは２つのイングレスタスクＩＧｘ．０、ＩＧｘ．１および２つのイーグレスタスクＥＧｘ．０、ＥＧｘ．１を含む。たとえば、ハードウェアタスクＨＴ１はイングレスタスクＩＧ１．０、ＩＧ１．１およびイーグレスタスクＥＧ１．０、ＥＧ１．１を含む。各タスクは以下のものを含む４ビットのタスク番号により識別される。
【００６０】
ＣＨＩＤ−−それぞれ対応のポート０、１、２、３に対してのチャネルＩＤ（２ビット）＝０、１、２、または３
ＳＮ−−シーケンス番号（ＩＧｘ．０、ＥＧｘ．０では０、ＩＧｘ．１、ＥＧｘ．１では１）
Ｉ／Ｅ−−イングレスには０、イーグレスには１
タスクの総数はすなわち１６である。
【００６１】
１つのフレームは１つのタスクにより処理される。フレームがアプレットである場合、そのアプレットは同じタスクにより実行される。
【００６２】
マイクロコントローラ命令実行はパイプライン化される。このため、上記の表１では、それぞれ対応のハードウェアタスクに対して新しい命令が開始されるクロックサイクルが示される。たとえば、サイクル１では、ハードウェアタスクＨＴ０に対して命令実行が開始される。命令実行は後続のサイクルにおいても続く。
【００６３】
各サブチャネルにおけるＦＩＦＯ２３０、２４０、２６０へのタスクのアクセスは図５の論理図に示される態様で制御される。図５では、「タスク０」および「タスク１」は同じサブチャネルに対する２つのタスクであり、たとえばチャネル１５０．１のサブチャネル１５０Ｉに対するイングレスタスクＩＧ１．０、ＩＧ１．１である。始めはタスク０のみがサブチャネルＦＩＦＯ２３０、２４０、２６０へのアクセスを有する。タスク０がリクエストＦＩＦＯ２３０にアクセスすると、スイッチ「ａ」が切替えられ、リクエストＦＩＦＯをタスク１に接続する。タスク０はタスク１がリクエストＦＩＦＯを読むまでリクエストＦＩＦＯを読むことが許されない。
【００６４】
スイッチ「ｂ」はコマンドＦＩＦＯ２６０へのタスクのアクセスを制御する。スイッチ「ｂ」は、タスク０によってあるフレームに対するすべてのコマンドが書かれた際に切替えられる。
【００６５】
ステータスＦＩＦＯ２４０へのタスクのアクセスを制御するスイッチ「ｃ」はステータスＦＩＦＯがタスク０により読まれた際に切替えられる。
【００６６】
サーチマシンへのタスクのアクセスを同期化するため、サーチマシン１９０は次々にコマンドを実行し、結果を同じ順序でもたらす。
【００６７】
各命令において、実行のためのタスクを選択するのには１クロックサイクルしか要さない（以下に説明する図７におけるパイプラインステージＴＳ）。さらに、タスクの選択はパイプライン化されており、そのためスループットに影響を及ぼさない。タスクの選択はハードウェアにより行なわれる。マイクロコントローラにおいてオペレーティングシステムは用いられない。このため、低いレイテンシが達成される。
【００６８】
どの時点においても、各タスクは３つの状態、すなわち、アクティブ、レディまたはサスペンド、のうちの１つにある。アクティブ状態では、タスクは実行されている状態である。最も多くて４つのタスク（各ハードウェアタスクにつき１つ）が同時にアクティブで
あり得る。各アクティブタスクは４クロックサイクルごとに実行がスケジュールされる（上の表１を参照のこと）。
【００６９】
アクティブタスクは、タスクが利用可能でないリソースにアクセスを試みるとサスペンド状態に移行する。リソースは追補２に記載される。リソースが利用可能となるとタスクはレディ状態に入る。
【００７０】
アクティブタスクがサスペンドされると、同じチャネルにおけるレディ状態にあるタスクのうちの１つがタスク制御３２０（図６）により実行のため選択され、アクティブ状態に移行する。
【００７１】
図６はマイクロコントローラ１６０のブロック図である。実行ユニット３１０はプログラムメモリ３１４にストアされるプログラムを実行する。プログラムはブートの間に、ＲＯＭ２０４（図１）からダウンロードされる。さらに、上述のようにアプレットをロードして動的に実行することもできる。アプレットは実行された後に破棄されてもよく、またはアプレットはメモリ３１４に残されてもよい。
【００７２】
実行ユニット３１０は、汎用レジスタを有するレジスタファイル３１２、特殊レジスタブロック３１５およびデータメモリ３１６を含む。レジスタファイル３１２は、それぞれ対応のバスsa＿bus 、sb＿bus に接続される２つの３２ビット出力を含み、バスsa＿bus 、sb＿bus はＡＬＵ３１８の入力に接続される。データメモリ３１６および特殊レジスタブロック３１５の３２ビット出力はsa＿bus に接続される。バスsa＿bus に別個に接続されているのは特殊レジスタ「ヌル」および「ワン」の出力であり（追補６、表Ａ６−１）、特殊レジスタは定数値をストアする（これらのレジスタは図６において「定数レジスタ」と記される）。
【００７３】
バスsa＿bus はまた、プログラムメモリ３１４から読まれる命令の即値フィールド「ｉｍｍ」を受取る。
【００７４】
ＡＬＵ３１８の６４ビット出力は６４ビットバスres ＿bus に接続され、６４ビットバスres ＿bus はレジスタファイル３１２、データメモリ３１６および特殊レジスタブロック３１５の入力に接続される。
【００７５】
レジスタファイル３１２、データメモリ３１６および特殊レジスタ３１５は追補６に記載される。そこに記載されるように、レジスタおよびデータメモリはタスク間で分けられているため、タスクが再スケジュールされる際にセーブ／リストア動作は必要ではない。特に、特殊レジスタ３１５は各タスクにつき１つずつの１６個のＰＣ（プログラムカウンタ）レジスタを含む。
【００７６】
ロード／ストアユニット（ＬＳＵ）３３０は実行ユニット３１０、サーチマシン１９０および内部メモリ１７０の間でインターフェイスをもたらす。ＬＳＵ３３０は、メモリからレジスタをロードするか、またはレジスタ内容をメモリにストアするためのロードおよびストアリクエストの待ち行列を維持する。ＬＳＵ３３０の入力はres ＿bus に接続され、またＬＳＵ３３０の６４ビットの出力ｒｆｉはレジスタファイル３１２の入力に接続される。
【００７７】
ＤＭＡブロック３４０の入力はバスres ＿bus に接続され、実行ユニット３１０がＤＭＡ３４０をプログラムできるようにする。ＤＭＡ３４０はアプレットをプログラムメモリにロードすることができる。
【００７８】
図７には命令実行パイプラインが示される。パイプラインには７つのステージがある。
【００７９】
（１）  タスクセレクト（ＴＳ）ステージｔ０。このステージでは、アクティブタスクがタスク制御３２０によってそれぞれ対応のチャネル１５０．ｘに対して選択される。いくつかの実施例では、タスク制御ブロックは固定優先順位機構を実現しており、タスクＩＧｘ．０が最高優先順位を有し、次にＩＧｘ．１、その次にＥＧｘ．０、そしてその次にＥＧｘ．１となる。
【００８０】
いくつかの実施例では、タスクは一度アクティブにされると、より高い優先順位のタスクがランする用意ができたというだけではサスペンドされない。その優先順位のより低いタスクは利用可能でないリソースにアクセスを試みるまでアクティブのままである。
【００８１】
（２）  フェッチ（Ｆ）ステージｔ１において、タスク制御ブロック３２０は実行ユニット３１０に対してアクティブタスク番号信号task# ＿t1（追補１の表Ａ１−１におけるtsk ＿taskNumt1 と同じ）を駆動する。信号task# ＿t1は特殊レジスタ３１５内の１６個のＰＣ値のうちの１つを選択する。
【００８２】
どのタスクもアクティブではない場合、タスク制御ブロック３２０は実行ユニット３１０に「アイドル」信号をアサートする。この信号は表Ａ１−１において「tsk ＿idle」と表わされている。「アイドル」がアサートされると、task# ＿t1は「ドントケア」であり、命令実行ユニット３１０は残りのパイプラインステージにおいてＮＯＰ（ノーオペレーション）命令を実行する。
【００８３】
「アイドル」がデアサートされると、特殊レジスタブロック３１５においてtask# ＿t1により選択されたＰＣレジスタ値はプログラムメモリ３１４に与えられる。選択されたＰＣにより示される命令がメモリから実行ユニット３１０へ読出される。
【００８４】
（３）  デコード（Ｄ）ステージｔ２において、命令は実行ユニットによりデコードされる。
【００８５】
（４）  読出（Ｒ）ステージｔ３において、レジスタファイル３１２および／または特殊レジスタ３１５および／またはデータメモリ３１６から命令オペランドが読まれ、ＡＬＵ３１８に提示される。
【００８６】
また、このステージにおいて、以下に図８から図１５に関連してより詳しく説明するように、タスク制御３２０は配線４１０（図６）上にサスペンド信号（表Ａ１−１におけるtsk ＿susp）を発生する。サスペンド信号がアサートされると、タスクはサスペンドされ、命令実行はアボートされ、タスクのＰＣレジスタは凍結される。後にタスクがアクティブにされると、同じ命令が再実行されることになる。
【００８７】
また、このステージにおいて、実行ユニット３１０はウェイト信号を発生する。ウェイト信号がアサートされると、命令実行は完了させられずＰＣレジスタは凍結するが、タスクはアクティブのままであり、次のクロックサイクルから命令は再び実行される。たとえば、図７の命令１が、サイクル３においてアサートされるウェイト信号によって遅延された場合、同じ命令はサイクル４において開始される命令番号５として再実行されることになる。
【００８８】
ウェイト信号は、命令を妨害している条件が、同じハードウェアタスクが再スケジュールされるころまでにはなくなりそうである場合にアサートされる。ウェイト条件は追補３に記載される。
【００８９】
サスペンド信号およびウェイト信号がデアサートされると、ＰＣレジスタは次の命令を指すように変えられる。
【００９０】
（５）  実行（Ｅ）ステージｔ４において、命令は実行される。
【００９１】
（６）  ライトバック（ＷＢ）ステージｔ５において、実行ステージの結果は行先がレジスタファイル３１２内にある場合を除いて、その行先に書かれる。
【００９２】
（７）  レジスタ書込（ＷＲ）ステージにおいて、実行ステージの結果は必要であればレジスタファイル３１２に書込まれる。
【００９３】
注目すべきなのは、各命令のＷＲステージ（たとえばサイクル６の命令１）が同じハードウェアタスクの次の命令のＲステージの前に起こることである（サイクル７の命令５を参照のこと）。そのため、たとえば命令５が命令１の結果を用いるとすると、その結果は命令５がそれをサイクル７において読む前にレジスタファイルまたは特殊レジスタに書かれることになる。
【００９４】
図７に示したように、（Ｒステージにおいて）命令がアボートされると、パイプラインはすでに開始された他の命令から除去されなくてもよい。なぜなら、これらの命令は他のタスク（さらには他のハードウェアタスク）に属するからである。たとえば、命令１をアボートしなければならない場合、命令１のＲステージにおいて、またはその前に開始された他の命令とは命令２、３および４だけである。これらの命令は他のタスクによって実行されるため、除去されなくてもよい。
【００９５】
所与のハードウェアタスクに関して、対応する４つのソフトウェアタスクの間で切替えをするのに、タスク切替えがオペレーティングシステムソフトウェアにより行なわれる場合とは異なり、別個の命令を実行することは必要ではない。このため、高いスループットが達成される。
【００９６】
図８には、１つのリクエストＦＩＦＯ２３０またはステータスＦＩＦＯ２４０に関するタスク同期化のバブル図が示される。下方のダイアグラム７０４では、「タスク０」および「タスク１」は図５と同じ意味を有する。より特定的には、これらはリクエストまたはステータスＦＩＦＯを共用する２つのソフトウェアタスクである。いくつかの実施例では、タスク０はイングレスサブチャネルに対するＩＧｉ．０またはイーグレスサブチャネルに対するＥＧｉ．０である。
【００９７】
ダイアグラム７０４はＦＩＦＯの所有権を示す状態機械である。ＲＥＳＥＴにおいて、ＦＩＦＯは状態７１０ＲＳ．０によって示されるようにタスク０により所有される。
【００９８】
タスク０がＦＩＦＯを読むのに成功すると、ＦＩＦＯは状態７１０ＲＳ．１により示されるように、タスク１により所有されることになる。ＦＩＦＯを読むことは図５の「ａ」または「ｃ」スイッチを切替えることに等しい。タスク１がＦＩＦＯを読むのに成功すると、状態機械は状態７１０ＲＳ．０に戻る。
【００９９】
ＦＩＦＯ読出動作は条件mfsel[x] & ffrd により示される。信号mfsel は追補４に記載される。信号ffrdは、マイクロコントローラによりいずれかのリクエストまたはステータスＦＩＦＯが読まれると、ステージｔ３において実行ユニットによりアサートされる。別個のffrdバージョンが各リクエストおよびステータスＦＩＦＯに対して生成される（ＦＩＦＯ読出が成功すると、追補４の信号mfrdがステージｔ５においてアサートされる）。
【０１００】
リクエストおよびステータスＦＩＦＯは１６個ある。これらＦＩＦＯの各々は０から１５までの一意の数「ｘ」により識別される。ＦＩＦＯ「ｘ」が読まれている際、図８のmfsel[x]により示されるように、その数「ｘ」はラインmfsel 上に駆動される。
【０１０１】
ダイアグラム７２０および７４０はタスク０およびタスク１がＦＩＦＯに関連してどのように状態を変化させるかを示している。上に示したように、各タスクには３つの状態、すなわちレディ（「ＲＤＹ」）、アクティブおよびサスペンドがある。ＲＥＳＥＴにおいて、すべてのタスクはレディとなる。タスクはパイプラインステージｔ０において選択されるとアクティブとなる。
【０１０２】
ここで説明する実施例では、タスクは直接アクティブ状態からレディ状態へ移行することができないが、これは他の実施例では可能である。
【０１０３】
ここで説明する実施例では、各タスクは「サスペンド」条件７３０が生ずるとアクティブ状態からサスペンド状態へ移行する。サスペンドされたタスクはリリース条件７３４が生ずるとレディとなる。可能なサスペンド条件を追補１の表Ａ１−２に列挙する。リリース条件は表Ａ１−３に列挙する。
【０１０４】
ダイアグラム７２０では、サスペンド条件７３０は、タスク０がＦＩＦＯが利用可能でないときにＦＩＦＯにアクセスを試みる際に生じる。より特定的には、条件７３０とは以下のとおりである。
【０１０５】
（１）  タスクがパイプラインステージｔ３にあること（実行ユニット３１０により生成される信号「Ｔ３」により示される）。
【０１０６】
（２）  ffrdがアサートされ、ＦＩＦＯ読出動作を示していること。
【０１０７】
（３）  mfsel がＦＩＦＯ「ｘ」を識別していること。また、
（４）  ＦＩＦＯがタスク１により所有されている（状態機械７０４が状態７１０ＲＳ．１にある）か、または信号cfifordy[x] がローであり、ＦＩＦＯ「ｘ」が空であることを示していること。（信号cfifordyは追補４に記載される。この信号は４つ目のサイクルごとにサンプリングされ、サンプリングされる際には有効である。）
ＦＩＦＯがタスク０によって読まれておりそれ以外のどのタスクによっても読まれているのではないことは、タスク０がパイプラインステージｔ３にあることにより確証される。
【０１０８】
タスク１に対する条件７３０（ダイアグラム７４０）も同様である。
【０１０９】
ダイアグラム７２０、７４０における条件７３０は表Ａ１−２（追補１）において、各種類のタスク（イングレスタスク０、イングレスタスク１、イーグレスタスク０、イーグレスタスク１）および各種類のＦＩＦＯ（リクエストおよびステータス）について別々に示される。リクエストＦＩＦＯ条件は４つのセクション「イングレスタスク０」、「イングレスタスク１」、「イーグレスタスク０」、「イーグレスタスク１」の各々において条件番号１として列挙されている。すなわち、イングレスタスク０についての条件は、
exe ＿RfifoRd & mfsel[x] &（Ireqf ｜〜cfifordy[x] ）である。
【０１１０】
信号exe ＿RfifoRd はffrdと同じである。Ireqf はＦＩＦＯがイングレスタスク１により所有されていることを示す。表Ａ１−２のすべての信号はステージｔ３においてサンプリングされるため、「ｔ３」は表中の条件のいくつかでは省いてある。イーグレスタスク
０に関して、信号Ereqf はそれぞれ対応のリクエストＦＩＦＯがイーグレスタスク１により所有されていることを示す。すなわち、Ereqf がIreqf と入れ代わっている。タスク制御３２０は各リクエストＦＩＦＯに対して別個の信号Ireqf またはEreqf を発生する。
【０１１１】
追補１において、信号の否定は（〜cfifordyのように）信号名称の前の「〜」により示されるか、または（イーグレスタスク１に対する条件１のEreqf ＿のように）信号名称の後に続く下線によって示される。
【０１１２】
ステータスＦＩＦＯに関して、サスペンド条件７３０は表Ａ１−２において２と番号のつけられた条件である。信号exe ＿SfifoRd はステータスＦＩＦＯに対するffrdバージョンである。ステータスＦＩＦＯを識別する番号は「ｘ」ではなく「ｙ」で示される。
【０１１３】
ダイアグラム７２０におけるリリース条件７３４は、タスク０がＦＩＦＯを所有している（状態機械７０４が状態７１０ＲＳ．０にある）ことと、cfifordy[x] がハイでありＦＩＦＯが空ではないことを示していることである。タスク１に対するリリース条件７３４（ダイアグラム７４０）は同様である。
【０１１４】
リリース条件は追補１の表Ａ１−３に示されている。各リリース条件は表Ａ１−２の同じスロット内のサスペンド条件に対応する。たとえば、表Ａ１−３における「イングレスタスク０」セクションのリリース条件１は、タスクが表Ａ１−２における「イングレスタスク０」セクションのサスペンド条件１によりサスペンドされた場合にそのタスクをレディ状態にリリースする。このように、表Ａ１−３におけるリリース条件１および２は、リクエストおよびステータスＦＩＦＯに対するダイアグラム７２０および７４０でのリリース条件７３４に対応する。
【０１１５】
図９には、サブチャネルコマンドＦＩＦＯ２６０（すなわち２６０Ｉ）に関するイングレスサブチャネルにおけるタスク同期化が示される。下部のダイアグラム８０４には、イングレスコマンドＦＩＦＯのための状態機械が示される。このＦＩＦＯはイングレスタスクおよびイーグレスタスクの双方により所有され得る。ＲＥＳＥＴにおいて、状態機械は状態Ｓ０にある。この状態において、ＦＩＦＯはイングレスタスク０により所有されている。イングレスタスク０が、（図５のスイッチ「ｂ」を切替えて）ＦＩＦＯをロックすることなく１つのワードをＦＩＦＯに書くと、ＦＩＦＯは状態Ｓ１に移行し、この状態ではＦＩＦＯはイングレスタスク１により所有される。書込動作は信号IcmdFifoWr[x] により示され、ここで「ｘ」はイングレスコマンドＦＩＦＯに書くことができる４つのイングレスおよびイーグレスタスクのうちの１つを特定する。（IcmdFifoWr[x] がステージｔ３において実行ユニットによりアサートされると、対応するmfloadビット（追補４）がステージｔ５においてアサートされる。）信号IcmdFifoWr[x] は、それぞれ対応のタスクがＦＩＦＯに書くたびに適当な「ｘ」に対してアサートされる。
【０１１６】
ロックされていないことは「アンロック」信号により示され、「アンロック」信号は、コマンドＦＩＦＯを書くのに用いられるマイクロコントローラ命令「ＣＭＤ」（追補７）のＬフラグから実行ユニット３１０によって生成される。
【０１１７】
イングレスタスク１が、コマンドＦＩＦＯをロックすることなく（「ｘ」がイングレスタスク１を示しているIcmdFifoWr[x] により示されるように）そのコマンドＦＩＦＯに書くと、状態機械は状態Ｓ０に戻る。
【０１１８】
イングレスタスク０が状態Ｓ０にあるＦＩＦＯに書き、「ロック」信号がアサートされてそのＦＩＦＯをロックすべきであることを示すと、状態機械は状態Ｓ２に移行する。この状態においては、ＦＩＦＯは依然としてイングレスタスク０により所有されている。ロ
ック信号は、マイクロコントローラ命令ＣＭＤ（追補７）におけるＬフラグから実行ユニット３１０により生成される。ＦＩＦＯは、イングレスタスク０が「アンロック」信号がアサートされている状態でＦＩＦＯに書くまで状態Ｓ２に留まる。書かれた時点でＦＩＦＯは状態Ｓ１に移行する。
【０１１９】
同様に、イングレスタスク１が「ロック」がアサートされている状態で状態Ｓ１にあるＦＩＦＯに書くと、ＦＩＦＯは状態Ｓ３に移行する。この状態においてＦＩＦＯは依然としてイングレスタスク１により所有されている。ＦＩＦＯは、イングレスタスク１が「アンロック」がアサートされた状態でＦＩＦＯに書くまで状態Ｓ３に留まる。書かれた時点でＦＩＦＯは状態Ｓ０に移行する。
【０１２０】
状態機械が状態Ｓ０またはＳ１にあり、イーグレスタスクがコマンドＦＩＦＯをロックすることなくそのコマンドＦＩＦＯに書く場合、状態遷移は起こらない。イーグレスタスク０が状態Ｓ０にあるＦＩＦＯをロックしてＦＩＦＯに書くと、ＦＩＦＯは状態Ｓ４に移行する。この状態において、コマンドＦＩＦＯはイーグレスタスク０により所有される。状態機械は、イーグレスタスク０が「アンロック」がアサートされている状態でコマンドＦＩＦＯに書くまで状態Ｓ４に留まる。書いた時点で、状態機械は状態Ｓ０に戻る。
【０１２１】
状態Ｓ５はＳ４に類似しているが、イーグレスタスク１がコマンドＦＩＦＯに書込をしこれを所有することを表わす。
【０１２２】
状態Ｓ６およびＳ７はそれぞれ対応の状態Ｓ４およびＳ５に類似しているが、状態Ｓ６およびＳ７には状態Ｓ０ではなくＳ１から入る。
【０１２３】
ダイアグラム８２０および８４０には、コマンドＦＩＦＯに関するそれぞれ対応のイングレスタスク０および１の状態遷移が示される。サスペンド条件７３０は表Ａ１−２において番号が３の条件である。信号IcmdFifoWr[x] はイングレスタスク０および１に対する条件３におけるexe ＿IcmdFifoWr[x] と同じである。表Ａ１−２における信号task# ＿t3はダイアグラム８２０および８４０における「Ｔ３」と同じである。信号ccmdfull[x] は、コマンドＦＩＦＯ「ｘ」が一杯であるという信号である（追補４を参照のこと）。この信号はステージｔ３において有効である。信号IcmdfOwnedByI0は、コマンドＦＩＦＯがイングレスタスク０により所有されていることを示す（すなわち、状態機械８０４は状態Ｓ０またはＳ２にある）。信号IcmdfOwnedByI1は、コマンドＦＩＦＯがイングレスタスク１により所有されていることを示す（ダイアグラム８０４における状態Ｓ１、Ｓ３）。
【０１２４】
イーグレスタスクに関して、イングレスコマンドＦＩＦＯに書込むことにより生じたサスペンド条件は表Ａ１−２の条件８である。信号IcmdfOwnedByE0は、コマンドＦＩＦＯがイーグレスタスク０により所有されていることを示す（ダイアグラム８０４における状態Ｓ４、Ｓ６）。信号IcmdfOwnedByE1は、コマンドＦＩＦＯがイーグレスタスク１により所有されていることを示す（ダイアグラム８０４における状態Ｓ５、Ｓ３）。
【０１２５】
リリース条件７３４（図９）は表Ａ１−３におけるイングレスタスクに対する条件３である。
【０１２６】
イーグレスコマンドＦＩＦＯに関するイーグレスタスク同期化も同様である。イーグレスＦＩＦＯについては、状態Ｓ４、Ｓ５、Ｓ６、Ｓ７は存在しない。表Ａ１−２およびＡ１−３において、関係のある条件は番号が３である条件である。信号exe ＿EcmdFifoWrがexe ＿IcmdFifoWrと置換わり、イーグレスＦＩＦＯへの書込動作を示す。信号Ecmdf1は、ＦＩＦＯがイーグレスタスク１により所有されていることを示す。
【０１２７】
図１０には、ＤＭＡリソースに関するイーグレスタスク同期化が示される。下部のダイアグラム９０４には、ＤＭＡ状態機械が示される。ＲＥＳＥＴにおいて、ＤＭＡはＩＤＬＥである。図１０において「dmaa＿wr」により示されるように、イーグレスタスクがＤＭＡアドレス（プログラムメモリ３１４におけるＤＭＡ転送先アドレス）をＤＭＡ３４０（図６）のＤＭＡアドレスレジスタＤＭＡＡ（追補６）へ書くと、そのタスクはＤＭＡ所有者となり、ＤＭＡ３４０がアクティブとなり内部メモリ１７０からＤＭＡ転送を開始する。図１０の例において、ＤＭＡ所有者はイーグレスタスク０である。
【０１２８】
図１０の「last＿word」により示されるように、転送が完了すると、ＤＭＡはレディ（「ＲＤＹ」）となる。
【０１２９】
ＤＭＡがレディ状態にあり、ＤＭＡ所有者タスクがＤＭＡアドレスレジスタを読むと（図１０において「dmaa＿rd」として示される）、ＤＭＡは実行状態に移行する。ＤＭＡ所有者はＤＭＡレディ状態においてしかアドレスレジスタを読むことが許されない。非所有者タスクはどのＤＭＡ状態においてもＤＭＡアドレスレジスタを読むことが許される。
【０１３０】
ＤＭＡが実行状態にあると、ＤＭＡ所有者タスクはＤＭＡによりロードされるアプレットを実行する。新たなＤＭＡアクセスは許されない。
【０１３１】
ＤＭＡ所有者タスクがリリースコード１１１をＤＭＡＡレジスタ（追補１）のＯＰフィールドに書込むと、ＤＭＡはアイドル状態に戻る。
【０１３２】
ダイアグラム９２０、９３０には、必ずしも同じハードウェアタスクにあるわけではない２つのイーグレスタスク、すなわちタスク０、タスクＮ、に対する状態遷移が示される。条件７３０は表Ａ１−２におけるイーグレスタスクに対する条件７である。表において、exe ＿dmaaRdは図１０のdmaa＿rdと同じであり、exe ＿dmaaWrはdmaa＿wrと同じである。図１０の「dmaa＿rd,wr 」は「dmaa＿rdまたはdmaa＿wr」という意味である。信号exe ＿dmaaRd、exe ＿dmaaWrは実行ユニット３１０により生成される。
【０１３３】
このように、ＤＭＡ所有者タスクは、このＤＭＡ所有者タスクが、ＤＭＡがアクティブである間にステージｔ３においてＤＭＡアドレスレジスタを読もうと試みるか、またはＤＭＡアドレスレジスタに書こうと試みる際にサスペンドされる。所有者タスクはＤＭＡがレディとなるとリリースされる。非所有者タスクはＤＭＡがレディである間にステージｔ３においてＤＭＡレジスタに書こうと試みる際にサスペンドされる。非所有者タスクはＤＭＡがアイドルとなるとリリースされる。
【０１３４】
リリース条件７３４は表Ａ１−２においてイーグレスタスク０および１に対する条件７において「clast ＿word」として示される。
【０１３５】
図１１には、セマフォレジスタｓｅｍｒ（追補２、６）に関するタスク同期化が示される。サスペンド条件７３０は表Ａ１−２において条件５として示される。各サスペンド条件は以下のとおりである。すなわち、（１）タスクがパイプラインステージｔ３にあることと、（２）ＢＩＴＣまたはＢＩＴＣＩ命令がタスクにより実行され、そのターゲットのオペランドがセマフォレジスタであり、その命令が、その命令の以前からセマフォレジスタビットが有していた値と同じ値をセマフォレジスタビットに書こうとしているためアボートされなければならないこと（これは表Ａ１−２の信号exe ＿bitcSemRegにより示されており、「exe ＿」で始まる信号名称はすべて実行ユニット３１０により生成される信号を表わしている）とである。サスペンドが生じると、タスク制御ブロック３２０はフラグＳＰｘを１に設定し、ここで「ｘ」はタスク番号（０−１５）である。
【０１３６】
リリース条件７３０はフラグＳＰｘがクリアされる（すなわち０に設定される）ことである。タスク制御ブロック３２０は以下の２つの条件のうちのいずれか１つでも生じるとすべてのフラグＳＰｘをクリアする。すなわち、
（１）  パイプラインステージｔ３において、命令ＢＩＴＣまたはＢＩＴＣＩの実行がどれか他のタスクＹによって成功したこと。この条件は表Ａ１−３におけるリリース条件５の信号exe ＿bitcSemAccにより示される。
【０１３７】
（２）  チャネル１５０がセマフォレジスタに書くこと。これはcstrobe がアサートされており（追補４における表Ａ４−１）、ｃｓｅｍ［５］が１にあることによって示される。チャネルは、チャネルコマンドによりコマンドされると、セマフォレジスタにアクセスしてマイクロコントローラ１６０に表示を送る。ここに引用により援用される、上記の米国特許出願第０９／０５５，０４４号の代理人事件番号Ｍ−４８５５  ＵＳ「ネットワークでデータを転送するためのネットワークプロセッサシステムおよび方法」を参照されたい。
【０１３８】
図１２には、サーチマシン１９０に関するタスク状態遷移が示される。サスペンド条件７３０（表Ａ１−２における条件４）は以下の条件（１）および（２）の両方が真であることである。すなわち、
（１）  タスクがパイプラインステージＴ３にあり、そのタスクがサーチマシンにコマンドを書くという命令を実行する（表Ａ１−２においてexe ＿scmdWrとして示される、信号scmd＿wr）か、またはサーチマシンから結果を読むという命令を実行すること（表Ａ１−２においてexe ＿scmdRdとして示される、信号sres＿rd）。追補７のマイクロコントローラ命令ＳＭＷＲ（サーチマシンコマンド書込）および追補６のレジスタscmd、scmde の記載を参照されたい。
【０１３９】
（２）  信号task＿ownbit[x] が０であること（「ｘ」はタスク番号）により示されるように、サーチマシンリソースがタスクによって利用可能でないこと。この信号は追補１の表Ａ１−１およびＡ１−２ではsm＿task＿ownbitとして示される。名称が「sm＿」で始まる信号はサーチマシン１９０により生成される。サーチマシンリソースおよびサスペンド条件は追補２に記載される。
【０１４０】
リリース条件７３４とはそれぞれ対応のtask＿ownbit[x] が１であることである。
【０１４１】
図１３には、メモリ１７０におけるフリーリストのスクラッチバッファ１６１０（図１８および追補５）に関するタスク同期化が示される。サスペンド条件７３０（表Ａ１−２での条件６）は、以下のすべてが真であることである。すなわち、
（１）  タスクがパイプラインステージｔ３にあること。
【０１４２】
（２）  実行ユニットにより生成される信号ifreel＿rdにより示されるように、タスクが内部フリーリストレジスタＩＦＲＥＥＬ（追補６）を読んでいること。この信号は表Ａ１−２においてはexu ＿ifreelRdと表わされる。ＩＦＲＥＥＬレジスタが読まれてフリーバッファ番号が得られる。
【０１４３】
（３）  「no＿free＿buffers 」（「no＿free＿buf 」）信号が特殊レジスタブロック３１５によりアサートされ、フリーバッファがないことを示していること。
【０１４４】
リリース条件７３４は、以下の３つの条件のうちのいずれかが真となることである。すなわち、
（１）  cstrobe （追補４における表Ａ４−１）がチャネル１５０によりアサートされ、ｃｓｅｍ［５］が０であり、チャネル１５０が、信号ｃｓｅｍ［４：０］により特定さ
れるスクラッチバッファ１６１０を内部フリーリストに戻そうとしていることを示していること。
【０１４５】
（２）  信号IfreelWr（表Ａ１−３におけるexu ＿ifreelWr）は実行ユニットによりアサートされ、マイクロコントローラがＩＦＲＥＥＬレジスタ（追補６）へ書いていることを示していること。このレジスタには、フリーとなったスクラッチバッファの番号が書込まれる。
【０１４６】
（３）  信号IfreerWr（exu ＿ifreerWr）が実行ユニットによりアサートされ、マイクロコントローラがＩＦＲＥＥＲレジスタへ書いていることを示していること。
【０１４７】
図１４はタスク制御ブロック３２０のブロック図である。タスク制御３２０は、４つの同じラッチのブロック１３０４．０、１３０４．１、１３０４．２、１３０４．３を含む。ラッチ１３０４．０はパイプラインステージｔ０（ＴＳ）におけるハードウェアタスクに関する情報をストアする。その情報はラッチ１３０４．１の入力に与えられる。ラッチ１３０４．１はパイプラインステージｔ１におけるハードウェアタスクに関する情報をストアする。同様にラッチ１３０４．２、１３０４．３はそれぞれ対応のステージｔ２、ｔ３におけるハードウェアタスクに関する情報をストアする。ラッチ１３０４．１の出力はラッチ１３０４．２のそれぞれ対応の入力に接続される。ラッチ１３０４．２の出力はラッチ１３０４．３のそれぞれ対応の入力に接続される。ラッチ１３０４．３の出力は、パイプラインステージｔ３におけるソフトウェアタスクがサスペンドされるべきであるかどうかを判定するのに用いられ、また、以下に説明するようにそれぞれ対応のハードウェアタスクに対するソフトウェアタスクの状態を判定するのに用いられる。
【０１４８】
すべてのラッチは同じクロック（図示せず）によりクロックされる。
【０１４９】
各ブロック１３０４において、ラッチ１３２０はそれぞれ対応のハードウェアタスク番号ＨＴ＃（上のＣＨＩＤと同じ）をストアする。ラッチ１３２２はハードウェアタスクに対するアクティブなソフトウェアタスク番号ST#=<SN,I/E>をストアする。そのハードウェアタスクに対していずれのタスクもアクティブではない場合、ラッチ１３２２の出力は「ドントケア」である。
【０１５０】
このように、ブロック１３０４．１のラッチ１３２０、１３２２の出力は信号task# ＿t1を形成し（図６）、ブロック１３０４．２のラッチ１３２０、１３２２の出力は信号task# ＿t2を形成する。ブロック１３０４．３のラッチ１３２０、１３２２の出力はラッチ回路１３６０の入力に接続され、ラッチ回路１３６０の出力はラッチ回路１３６２の入力に接続される。回路１３６２の出力は信号task# ＿t5をもたらす（図６）。
【０１５１】
ブロック１３０４．３のラッチ１３２０の出力はブロック１３０４．０のラッチ１３２０の入力に接続される。
【０１５２】
各ブロック１３０４は、４つのソフトウェアタスクＩＧｘ．０（図１４において「Ｉ０」とも示される）、ＩＧｘ．１（「Ｉ１」）、ＥＧｘ．０（「Ｅ０」）およびＥＧｘ．１（「Ｅ１」）の各々につき１つずつの４つのラッチ回路１３３０を含み、ここで「ｘ」はそれぞれ対応のラッチ１３２０にストアされるハードウェアタスク番号である。各ラッチ回路１３３０は２つのラッチ１３３０Ｓ、１３３０Ｃを含み、これらは簡単にするためタスクＥ１に対してのみ示される。回路１３３０Ｓはタスクの状態（すなわちレディ、アクティブまたはサスペンド）をストアする。回路１３３０Ｃはタスクをレディ状態に移行させるのに必要であるリリース条件７３４をストアする。リリース条件は（表Ａ１−３にあるように）１から７まで、または０から６までのインデックスの形でストアされる。各種
のタスク（Ｉ０、Ｉ１、Ｅ０、Ｅ１）に対する可能なリリース条件のインデックスは追補１の表Ａ１−３の左の欄に示される。
【０１５３】
ラッチ１３３０Ｃにある情報は、それぞれ対応のラッチ１３３０Ｓにストアされる状態が「サスペンド」である場合にしか意味をもたない。レディおよびアクティブ状態に対しては、ラッチ１３３０Ｃにある情報は「ドントケア」である。
【０１５４】
各ブロック１３０４は６つのラッチ１３５０を含み、６つのラッチ１３５０は対応するハードウェアタスクに対する６つのそれぞれ対応のリクエスト、ステータスおよびコマンドＦＩＦＯの状態をストアする。可能な状態はダイヤグラム７０４（図８）および８０４（図９）に示され、上に説明したとおりである。
【０１５５】
ブロック１３０４．３のラッチ回路１３３０、１３５０の出力は次の状態および条件発生器１３５４に接続される。回路１３５４はタスクとリクエスト、ステータスおよびコマンドＦＩＦＯとの次の状態を生成し、また次のリリース条件値を生成する。これらの状態および条件信号はバス１３５８を介してブロック１３０４．０の回路１３３０、１３５０の入力へ与えられる。
【０１５６】
図１５には回路１３５４がより詳しく示される。回路１３５４において、リソース次ステージ発生器１３８０はブロック１３０４．３のラッチ回路１３５０からリクエスト、ステータスおよびコマンドＦＩＦＯの状態を受取る。発生器１３８０はまた、いずれかのリソース、ステータスおよびコマンドＦＩＦＯの状態遷移を引き起こし得る、ダイヤグラム７０４および８０４に関連して上に説明した信号のすべてを受取る。発生器１３８０はダイヤグラム７０４および８０４に従ってＦＩＦＯの次の状態を計算し、次の状態を同じクロックサイクルｔ３においてラッチブロック１３０４．０のラッチ回路１３５０へ与える。
【０１５７】
各ラッチ回路１３３０の出力はそれぞれ対応の回路１３９０の入力に接続される。簡単にするため、タスクＥ１のための回路１３９０のみが詳しく示される。タスクＥ１に関して、ラッチ１３３０Ｃのリリース条件出力はマルチプレクサ１３９４のセレクト入力に接続される。マルチプレクサ１３９４のデータ入力はタスクＥ１に対する７つの可能なリリース条件７３４を受取る（表Ａ１−３「イーグレスタスク１」のセクション）。マルチプレクサ１３９４に入力される各データは、対応するリリース条件が真である場合にはアサートされ条件が偽である場合にはデアサートされる１ビット信号である。
【０１５８】
マルチプレクサ１３９４により選択されるリリース条件信号（すなわち、ブロック１３０４．３のラッチ１３３０Ｃにストアされるリリース条件に対応する信号）はタスク次状態発生器１３９８に与えられる。発生器１３９８はまた、タスクの現在の状態をラッチ１３３０Ｓから受取り、配線４１０上のサスペンド信号を以下に説明するサスペンド論理およびリリース条件発生器１４０１から受取る。タスク次状態発生器１３９８は、タスクがサスペンドされたままであるかどうか、または代わりにタスクが同じクロックサイクル内にアクティブになれるかどうかを示す信号Ａを発生する。信号Ａは以下の表２に従って生成される。
【０１５９】
【表２】
2004342132.tif 000004
【０１６０】
アービタ１４０３は４つの回路１３９０からＡ出力を受取り、これらからバス１３５８上に以下の信号を発生する。すなわち、（１）ブロック１３０４．０のそれぞれ対応のラッチ１３３０Ｓに対する各タスクの次のステージと、（２）配線１４０４上のアクティブソフトウェアタスク番号ＳＴ＃とである。ソフトウェアタスク番号はブロック１３０４．０のラッチ１３２２へ送られる。
【０１６１】
アービタ１４０３はまた、信号「アイドル」を発生し、これはアサートされるとどのタスクもアクティブではないことを示す（図６も参照のこと）。
【０１６２】
タスクＩ０、Ｉ１、Ｅ０に対する各回路１３９０は、マルチプレクサへのリリース条件入力を、それぞれ対応のタスク（イングレスタスク０、イングレスタスク１またはイーグレスタスク０）に対応する表Ａ１−３のセクションから取っていることを除いて、タスクＥ１のためのタスク次状態発生器１３９８およびマルチプレクサ１３９４と同じである信号Ａ発生論理を含む。
【０１６３】
サスペンド論理およびリリース条件発生器１４０１はブロック１３０４．３のラッチ回路１３５０の出力を受取り、また、サスペンド条件７３０（図８から図１３および追補１の表Ａ１−２）を計算するのに必要である信号のすべて（たとえばcfifordy、mfsel など）を受取る。ブロック１４０１は、ブロック１３０４．３のラッチ１３２２の出力により識別されるアクティブタスクに対するサスペンド条件を計算する。サスペンド論理１４０１は配線４１０上に、タスク次状態発生器１３９８と他の３つの回路１３９０内の同様の発生器とへサスペンド信号をもたらす。
【０１６４】
さらに、サスペンド論理１４０１は各マルチプレクサ１３９４と他の３つのブロック１３９０内の同様のマルチプレクサ（図示せず）とに対するリリース条件データ入力７３４を生成する。リリース条件は表Ａ１−３の式に従って生成される。
【０１６５】
さらに、サスペンド論理１４０１はブロック１３０４．３におけるすべての状態ラッチ１３３０Ｓの状態出力を受取る。各タスクについて、（１）状態出力がアクティブ状態を示し、かつ（２）タスクに対するサスペンド条件のうちの１つが真である場合、サスペンド論理１４０１は、そのタスクをレディにするのに必要なリリース条件のインデックス７３４＿ｉｎを発生する。別個のインデックス７３４＿ｉｎが表Ａ１−３のそれぞれ対応のセクションに従って各タスクに対して生成される。図１５にはタスクＥ１のためだけのインデックス７３４＿ｉｎが示される。
【０１６６】
これ以外のすべての場合において（すなわち、タスクに対する状態出力が「アクティブ
」ではないか、または状態出力はアクティブであるがタスクに対するサスペンド条件のいずれも真ではない場合）、タスクに対するリリースインデックス７３４＿ｉｎは「ドントケア」である。
【０１６７】
タスクＥ１に対するリリースインデックス７３４＿ｉｎはマルチプレクサ１４０６の１つのデータ入力に与えられる。マルチプレクサの他方のデータ入力はタスクＥ１のためのブロック１３０４．３のラッチ１３３０Ｃからの条件出力を受取る。セレクト入力はタスクＥ１に対するブロック１３０４．３のラッチ１３３０Ｓの状態出力から「ａｃｔ」ビットを受取る。状態出力は２ビットを有する。ビット「ａｃｔ」は２ビットのうちの１ビットである。ビット「ａｃｔ」は状態が「アクティブ」であるかどうかを示す。「ａｃｔ」がアクティブ状態を示す場合、マルチプレクサ１４０６はリリースインデックス７３４＿ｉｎを選択する。「ａｃｔ」が非アクティブ状態を示す場合、マルチプレクサ１４０６は条件ラッチ１３３０Ｃの出力を選択する。選択された信号はバス１３５８に与えられ、バス１３５８はその信号をブロック１３０４．０におけるタスクＥ１に対するラッチ１３３０Ｃへ供給する。
【０１６８】
同様に、各タスクのための各回路１３９０は以下のものを選択する同様なマルチプレクサ１４０６（図示せず）を含む。すなわち、同様なマルチプレクサ１４０６は（１）それぞれ対応のタスクに対するブロック１３０４．３のラッチ回路１３３０からの出力「ａｃｔ」がアクティブ状態を示す場合には、サスペンド論理１４０１からのそれぞれ対応のタスクに対するリリース条件インデックス７３４＿ｉｎを選択し、また、（２）「ａｃｔ」が非アクティブ状態を示す場合には、それぞれ対応のタスクに対するブロック１３０４．３のラッチ１３３０の条件出力を選択する。選択された条件インデックスはブロック１３０４．０におけるそれぞれ対応のラッチ１３３０の入力に与えられる。
【０１６９】
いくつかの実施例では、１つのタスクがサスペンドされると、タスク特有の値を有するレジスタはセーブされない。特に、各タスクは、タスクＰＣおよびフラグを有するそれ自体のＰＣレジスタを有する（追補６を参照のこと）。さらに、レジスタファイル３１２は８つのバンクに分割される。各バンクは、同じチャネルからのイングレスタスクおよびイーグレスタスクの対の専用のものである。タスク対により実行されるソフトウェアは、その対の間に共通のレジスタがないような態様で書かれる。このため、レジスタファイルレジスタはタスク特有の値をストアするのだが、これらのレジスタをセーブしたりリストアしたりする必要はない。
【０１７０】
ここで説明する実施例はこの発明を限定するものではない。特に、この発明はポートの数によっても、ポートが全二重または半二重であるということによっても、いかなるタイミング、信号、コマンドまたは命令によっても限定されない。いくつかの実施例では、マイクロコントローラは、図７のパイプラインまたは何らかの別のパイプラインを有する複数の実行ユニットを含む。いくつかの実施例では、１つ以上のマイクロコントローラが、スーパースカラまたはＶＬＩＷ（very large instruction word ）プロセッサに存在するような複数の実行ユニットを含む。いくつかの実施例では、マイクロコントローラは複数の集積回路で実現されるプロセッサにより置換えられる。ここで用いた術語「タスク」にはプロセスおよびスレッドも含まれる。他の実施例および変更例も、添付の特許請求の範囲に記載されるこの発明の範囲内に含まれる。
【０１７１】
追補１
タスク制御ブロック
【０１７２】
【表３】
2004342132.tif 000005
【０１７３】
【表４】
2004342132.tif 000006
【０１７４】
【表５】
2004342132.tif 000007
【０１７５】
追補２
リソース
全リソースは特殊レジスタまたは専用マイクロコントローラコマンドによってアクセスされる。
【０１７６】
サーチマシン
サーチマシンは、マイクロコントローラによって書込まれるコマンドと結果との２個のリソースを有する。
【０１７７】
書込専用のコマンドリソースは１６個ある（タスクごとに１個）。このリソースが利用可でない唯一の場合は、同じタスクからの先のコマンドが完了されていないときである。
【０１７８】
読出専用の結果リソースは１６個ある（タスクごとに１個）。あるコマンドがサーチマシンに通知されると、そのコマンドが実行されるまで結果が利用不可となる。いくつかのコマンド（たとえば、インサートまたはデリート）は結果を持たない。
【０１７９】
チャネル制御
チャネル制御はコマンドＦＩＦＯ２６０、リクエストＦＩＦＯ２３０およびステータスＦＩＦＯ２４０との３種のリソースを有する。
【０１８０】
コマンドリソースは以下の２つの場合利用不可である。
【０１８１】
ａ．リソースが別のタスクに属する。この場合、他のタスクがそのリソースをリリースすると、それはこのタスクに対して利用可となる。
【０１８２】
ｂ．コマンドＦＩＦＯがフルである。この場合、コマンドＦＩＦＯがフルでなくなると、タスクはこのリソースを使用し続けることができる。
【０１８３】
コマンドリソースはセッション保護を有する（すなわち、いくつかのコマンドがあるタスクによって書込まれ得るのはリソースが別のタスクに渡される前である）。これは、最初のアクセスの間にリソースをロックし、最後のアクセスの際にそれをアンロックすることによって達成される。コマンドリソースがロックされると、他のどのタスクもこのリソースにアクセスできない。
【０１８４】
チャネル１５０．ｘのイーグレスタスクＥＧｘは、メッセージをスイッチ１２０に送るために同じチャネル１５０．ｘのイングレスコマンドＦＩＦＯ２６０Ｉにコマンドを書込むことができる。イングレスコマンドＦＩＦＯがアンロックされるたびにイーグレスタスクがイングレスコマンドＦＩＦＯに書込まれ得る。イーグレスタスクがその最初のコマンドをイングレスコマンドＦＩＦＯ２６０Ｉに書込むと、イーグレスタスクからの最後のコマンドが書込まれるまでコマンドＦＩＦＯがロックされた状態となる。
【０１８５】
リクエストまたはステータスＦＩＦＯリソースは以下の２つの場合利用可でない。
【０１８６】
ａ．リソースが別のタスクに属する。この場合、他のタスクがＦＩＦＯを読出すと、リソースはこのタスクに対して利用可となる。
【０１８７】
ｂ．ＦＩＦＯが空である。この場合、ＦＩＦＯがレディになると、タスクはこのリソースを使用し続けることができる。
【０１８８】
ＤＭＡ
データＦＩＦＯからのアプレットをプログラムメモリ３１４にダウンロードするのはＤＭＡブロックである。このリソースは、転送前にＤＭＡアドレスをセットし、転送完了時に最後のワードアドレスを読出すイーグレスタスクによって用いられる。転送の間に最後のワードアドレスが読出されると、最後のワードが転送されるまでタスクがサスペンドされる。また、最初の転送が完了していないときに別のイーグレスタスクによって新しいＤＭＡアドレスを書込む試みもタスクサスペンドを引き起こす。
【０１８９】
内部メモリ１７０管理
内部メモリにおけるスクラッチパッドエリア内のフリーバッファ１６１０（図１７）を管理するのは内部メモリ管理である。メモリには３２個のフリーバッファがある。タスクは、次の利用可能なフリーバッファを得ることを望むとき、フリーリスト（ＦｒｅｅＬ）リソース（追補６のレジスタＩＦＲＥＥＬ）にアクセスする。バッファが残されていなけ
れば、このタスクはサスペンドされる。このバッファを用いたチャネルコマンドによってバッファがリリースされるべきだと示されると、バッファはリリースされてフリーリストに戻る。
【０１９０】
セマフォ
セマフォレジスタｓｅｍｒは３２ビットを有する。その各々がマイクロコントローラの即値ビット変更（ＢＩＴＣＩ）およびＢＩＴＣコマンドを用いて直接的にアクセス可能である。セマフォは保護とタスク間の通信とのために用いられる。
【０１９１】
ＢＩＴＣＩまたはＢＩＴＣコマンドが同じ値を現在のビット値としてこのビットに書込もうと試みる場合、それはアボートされ、そのタスクがサスペンドされる。その後、セマフォレジスタが変更される（レジスタにおける何らかのビットが変更される）と、セマフォを待っている全タスクがレディとなり、Ｂｉｔ＿ｃｈａｎｇｅ＿Ｉｍｍｅｄｉａｔｅ（即値ビット変更）コマンドを再び実行しようとする。
【０１９２】
セマフォレジスタのビット３１−２４はＰＩＦ１１０のそれぞれの予め定められた外部ピン（図示せず）を０から１に変更することによってセットされ得る。
【０１９３】
追補３
タスクウェイト条件
ウエイト信号をアサートできる条件は２つある。
（１）  レジスタスコアボード
マイクロコントローラにおけるレジスタごとに、そのステータスを表示する１スコアボードビットがある。このビットがセットされていれば、レジスタはダーティであり、すなわち、データがＬＳＵ３３０によってロードされるのを待っている。起こり得るシナリオは以下のとおりである。
【０１９４】
（ａ）  タスクがＬＳＵによるレジスタのロードをリクエストする。
【０１９５】
（ｂ）  タスクがソースとしてのこのレジスタの使用をリクエストする。しかしながら、スコアボードはダーティである。したがって、ウエイト信号がアサートされる。
【０１９６】
（ｃ）  次に、ＬＳＵがレジスタをロードする。
【０１９７】
（ｄ）  タスクがソースとしてのこのレジスタの使用を再びリクエストする。今回は使用が許可される。
（２）  ＬＳＵ  ＦＩＦＯフル
これはウエイト信号を発生するための別の条件である。ロード・ストアリクエストを待ち行列に格納しているＬＳＵ  ＦＩＦＯが一旦レディとなると、この条件はクリアされる。
【０１９８】
追補４
以下の表はチャネル／マイクロコントローラインターフェイスにおいて用いられるいくつかの信号をリストにして挙げる。「Ｉ」は信号がチャネルのための入力であることを意味する。「Ｏ」は信号がチャネル出力であることを意味する。
【０１９９】
【表６】
2004342132.tif 000008
【０２００】
追補５
メモリ
内部メモリ１７０のマップ
内部メモリマップを図１６に示す。
【０２０１】
データエリア１５１０（アドレス００００−１ＦＦＦ  １６進法）
このエリアはスクラッチパッド１６１０、データＦＩＦＯおよびコマンドＦＩＦＯのために用いられる。このエリアは相対アドレスを用いてアクセスされる。データエリアメモリマップを図１７に示す。
【０２０２】
図１７において、「ＤＢＡＳＥ＿Ｉ」はイングレス側のための（後述する）ＣＦＧＲレジスタの「ＤＢＡＳＥ」フィールドである。同様に、ＤＬＥＮ、ＣＢＡＳＥ、ＣＬＥＮは対応のＣＦＧＲレジスタのフィールドである。サフィックス「＿Ｉ」はイングレスを表わし、「＿Ｅ」はイーグレスを表わす。
【０２０３】
各チャネルのための制御エリア１５２０
このエリアにおけるレジスタタイプの１つは以下のとおりである。
【０２０４】
ＣＦＧＲ−チャネルコンフィギュレーションレジスタ（イングレスおよびイーグレス）
各チャネルの方向ごとに１個、８個のＣＦＧＲレジスタがある。それらのフィールドは以下のとおりである。
【０２０５】
ＤＢＡＳＥ  （９ビット）  データバッファベースポインタ（６４バイト整列）
ＤＬＥＮ  （７ビット）  データバッファ長（６４バイト粒度）
ＣＢＡＳＥ  （９ビット）  コマンドバッファベースポインタ（６４バイト整列）
ＣＬＥＮ  （３ビット）  コマンドバッファ長（６４バイト粒度）
ＧＡＰ  （４ビット）  フレーム制御ワードが無効であるときのデータ読出ポインタとデータ書込ポインタとの間の最小ギャップ（８バイト粒度）。
【０２０６】
データエリア１５３０（アドレス４０００−５ＦＦＦ  １６進法）
このエリアは上述の米国特許出願第０９／０５５，０４４号の出願人書類番号Ｍ−４８５５  ＵＳに説明される。
【０２０７】
追補６
マイクロコントローラレジスタ
レジスタファイルマップ
レジスタファイル３１２は８個のバンクへと分割される（図１８）。各バンクは同じチャネル１５０．ｘからの１対のイングレスタスクとイーグレスタスクとの専用のものである。いくつかの実施例では、イングレス処理の方がより複雑なのでイングレスタスクがイーグレスタスクよりも多くのレジスタを用いる。また、いくつかの実施例では、タスクソフトウェアは、２つのタスク間に共通のレジスタがないようなものである。
【０２０８】
各レジスタｒ０．０−ｒ７．７は１バイトの幅である。連続する８バイトがレジスタファイルから並列に読出され得る。８バイトレジスタワードの７ビットアドレスを形成するために、レジスタ番号（０から６３）が、それ自体チャネルＩＤ「ＣＨＩＤ」とタスク対番号（０または１）とを連結したものであるバンクＩＤと連結され、アドレスＭＳＢが（特殊レジスタ３１４に対して）レジスタファイル３１２を表示するために０となる。
【０２０９】
マイクロコントローラレジスタマップ
マイクロコントローラにおける全レジスタがマイクロコントローラコマンドによって直接的にアクセス可能である。レジスタマップはレジスタファイル３１２および特殊レジスタ３１５という２領域に分割される。レジスタアドレスは７ビットからなる。特殊レジスタ３１５ではアドレスＭＳＢが１であり、レジスタファイル３１２ではＭＳＢが０である。
【０２１０】
データメモリ３１６
データメモリ３１６（図１９）は変数の一時記憶と後述するいくつかのパラメータとのために用いられる。
【０２１１】
したがって、データメモリ３１６は以下の３領域に分割される。
【０２１２】
ａ．タスクごとのタスクレジスタｔｒ０−ｔｒ５（タスクごとに６個）。これらのレジスタはそれぞれのタスク専用である。
【０２１３】
ｂ．チャネルレジスタｃｒ０−ｃｒ３（チャネル１５０．ｘごとに４個）。これらのレジスタはハードウェアタスク専用である。同じチャネルの全タスク（２個のイングレスタスクおよび２個のイーグレスタスク）がこれらのレジスタにアクセスする。
【０２１４】
ｃ．グローバルレジスタｇｒ（１６個のレジスタ）。これらのレジスタは全タスクに対してグローバルである。
【０２１５】
データメモリ３１６は３２ビットの１２８ワードである。
【０２１６】
データメモリ３１６のための７ビットアドレス発生方式を図２０に示す。
【０２１７】
ｔｒはタスクレジスタ番号（０−５）である。
【０２１８】
ｔｎはタスク番号（０−１５）である（ｔｒおよびｔｎがタスクレジスタアドレスを形成する）。
【０２１９】
ｃｒはチャネルレジスタ番号である（０−３；「１１０」、ｃｒおよびｃｎがチャネルレジスタアドレスを形成する）。
【０２２０】
ｃｎはチャネル番号（０−３）である。
【０２２１】
ｇｒはグローバルレジスタ番号（０−１５）である。
【０２２２】
特殊レジスタ（ＳＲ）３１５（以下の表Ａ６−１参照）は（レジスタファイルと同様に）マイクロコントローラコマンドによって直接的にアクセス可能である。特殊レジスタ３１５は以下の３タイプに分割できる。
【０２２３】
ａ．タスクに属するレジスタ、たとえば、プログラムカウンタ（ＰＣ）、タスク番号（ＴＩＮ）等。
【０２２４】
ｂ．リソースレジスタ、たとえば、リクエストＦＩＦＯ（ｒｅｑｆ）、ステータスＦＩＦＯ（ｓｔｔｆ）、サーチマシンコマンド（ｓｃｍｄ）等（追補２参照）。
【０２２５】
ｃ．データメモリ３１６レジスタ、たとえば、タスクレジスタ（ｔｒ）、チャネルレジスタ（ｃｒ）およびグローバルレジスタ（ｇｒ）。
【０２２６】
リソースおよびデータメモリ３１６（タイプｂおよびｃ）はそのアクセスを簡単にするために特殊レジスタにマッピングされる。
【０２２７】
適切な特殊レジスタを以下の表に手短に述べる。
【０２２８】
【表７】
2004342132.tif 000009
【０２２９】
いくつかの特殊レジスタのレジスタフィールは以下のとおりである。
【０２３０】
ＰＣ−プログラムカウンタおよびフラグ
ＰＣ  （１０ビット）  プログラムカウンタ
Ｇ  （１ビット）  フラグ−より大きい
Ｌ  （１ビット）  フラグ−より小さい
Ｅ  （１ビット）  フラグ−等しい
Ｃ  （１ビット）  フラグ−桁上げ
Ｇ、Ｌ、ＥおよびＣは読出専用である。
【０２３１】
ＴＮ−タスク番号
ＣＨＩＤ  （２ビット）  チャネルＩｄ
ＳＮ  （１ビット）  シーケンス番号
Ｉ／Ｅ  （１ビット）  イングレス（０）／イーグレス（１）。
【０２３２】
ＳＣＭＤ、ＳＣＭＤＥ−コマンドおよびコマンド拡張
書込動作の間、これらの３２ビットレジスタはサーチマシンのためのコマンドを形成する。読出動作の間、これらのレジスタは結果を与える。ＳＣＭＤＥはＳＣＭＤの前に書込まれるべきである。
【０２３３】
ＸＦＲＥＥＬ−外部フリーリスト
このレジスタへの書込によって、１ブロックが外部メモリ２００におけるフリーリストスタックに付加される。このレジスタからの読出によって、１ブロックがスタックから取除かれ得る。
【０２３４】
１チャネルごとに１個のフリーリストスタックがある。各レジスタはスタックの先頭を指す１６ビットポインタを含む。
【０２３５】
ＴＩＭＥＲ−汎用タイマ
Ｔｉｍｅｒ  （３２ビット）  タイマ値。タイマはシステムクロックが８計時するごとに進む自走カウンタである。
【０２３６】
ＮＸＴＥ  （１６ビット）  エイジングがあるか調べるための次エントリを指すポインタ。このフィールドは書込専用である。リセット後に初期化されるべきである。
【０２３７】
ＥＴ  （１ビット）  タイマ更新イネーブル。このフィールドは書込動作の間に用いられる。ＥＴ＝１であれば、タイマは書込まれた値をとる。ＥＴ＝０であれば、タイマカウンタは書込によって影響を与えられない。
【０２３８】
ＥＮ  （１ビット）  次エントリ更新イネーブル。このフィールドは書込動作の間に用いられる。ＥＮ＝１であれば、次ポインタが新しい値を得る。ＥＮ＝０であれば、ＮＸＴＥフィールドが無効である。
【０２３９】
ＳＭＣＮＴＬ−サーチマシン制御レジスタ
Ｐｏｉｎｔｅｒ  （１６ビット）  ノードエリア開始ポインタ。このポインタはサーチノードエリアを定義する（このエリアの後部が０ｘＦＦＦＦである）。自動エイジング機構はこのエリア内でのみ実行される。
【０２４０】
ＡＧＥ  （１ビット）  エイジングイネーブル（０−ディセーブル；１−イネーブル）。
【０２４１】
ＦＬＣＮＴ−フリーリストカウンタ
この読出専用レジスタはメモリ１７０のスクラッチパッドエリアにおけるフリーリスト内のエントリ数を含む。
【０２４２】
Ｃｏｕｎｔ  （１７ビット）カウンタ（最大値は０ｘ１００００である）。
【０２４３】
ＡＧＥＬ０、ＡＧＥＬ１−エイジリスト０、１の先頭
これらは読出専用レジスタである（チャネルごとに２個）。各々がエイジリストの先頭を含む（チャネルごとに２個のエイジリストがある）。これらのレジスタのどの１つからの読出もレジスタをクリアさせる。ここで、ノード（追補８）におけるＴＳＴＭＰ（タイ
ムスタンプ）がこのリストにおけるノードを互いにリンクするために用いられる。レジスタが０なら、リストは空である。
【０２４４】
Ｐｏｉｎｔｅｒ  （１６ビット）  リストポインタの先頭。
【０２４５】
しきい値０、しきい値１−しきい値レジスタ
これらのレジスタの各々は対応のエイジリストと関連したしきい値を含む。
【０２４６】
｜current ＿time-timestamp｜＞しきい値であり、かつエントリがＬＲＮＤ（学習されたエントリ）のタイプであると、エントリはエイジリストに付加される。
【０２４７】
ｔｈｒｅｓｈｏｌｄ  （１６ビット）しきい値。
【０２４８】
ＭＳＧＲ−メッセージレジスタはマイクロコントローラとスイッチ１２０ＣＰＵ（図示せず）との間でメッセージを転送するために用いられる。メッセージはヘッダラインによって転送される。
【０２４９】
ＭＳＧＡ  （１６ビット）  ＭＳＧＲに書込むときはＣＰＵへの、レジスタを読出すときはＣＰＵからのメッセージ。このフィールドは読出の後にクリアされる。
【０２５０】
ＭＳＧＢ  （１６ビット）  レジスタを（テストのために）読出すときのＣＰＵへのメッセージ。
【０２５１】
ＤＭＡＡ−ＤＭＡアドレス
ＯＰ  （３ビット）  動作
０００−ｎｏｐ
００１−ＥＰＲＯＭ２０４からのロード
０１０−スイッチ１２０からのロード
１１１−リリース
ＥＰＡ  （１３ビット）  ＥＰＲＯＭ開始アドレス
ＬＥＲ  （１ビット）  ロードエラー
ＰＭＡ  （１０ビット）  プログラムメモリアドレス。
【０２５２】
ＳＥＭＲ−セマフォレジスタ
Ｓ［ｉ］  （１ビット）  セマフォビット「ｉ」。
【０２５３】
ＩＦＲＥＥＲ−内部フリーレジスタ（１６ビット）
Ｆ［ｉ］  （１ビット）  メモリ１７０のスクラッチパッドエリアにおけるブロック「ｉ」がフリーであるかどうかを示す。
【０２５４】
ＩＦＲＥＥＬ−内部フリーリスト
ＢＬＫＮ  （５ビット）  フリーブロック番号（すなわち、スクラッチバッファ番号：図１７参照）。このレジスタの読出によってスクラッチバッファＢＬＫＮがフリーリストから取除かれる。このレジスタへの書込によって、書込まれるＢＬＫＮ値によって特定されるバッファがフリーリストに戻される。
【０２５５】
ＭＩＲ−ＭＩＩ制御レジスタ
このレジスタはＭＩＩ制御インターフェイスによってイーサネット（登録商標）ＰＨＹ装置と通信するために用いられる。
【０２５６】
ＢＳＹ  （１ビット）  ビジー。新しいコマンドでセットされ、コマンド完了時にリセットされる。
【０２５７】
ＣＭＤ  （４ビット）  コマンド
１０００−スキャンオン
００００−スキャンオフ
０１００−制御情報を送る
００１０−ステータス読出
ＮＶ  （１ビット）  有効でない。ＰＨＹからのデータが有効でないときにセットされる。
【０２５８】
ＦＩＡＤ  （５ビット）  ＰＨＹアドレス
ＲＧＡＤ  （５ビット）  レジスタアドレス
Ｄａｔａ  （１６ビット）  データ。
【０２５９】
追補７
マイクロコントローラ命令
３オペランド命令
これらの命令はオペランド＿A とオペランド＿B との間で算術論理演算を行なう。結果はオペランド＿C に書込まれる。命令は以下のとおりである。
【０２６０】
ＡＤＤ−加算
ＳＵＢ−減算
ＯＲ−論理ＯＲ
ＡＮＤ−論理ＡＮＤ
ＸＯＲ−論理ＸＯＲ
ＳＨＬ−左シフト
ＳＨＲ−右シフト
ＢＩＴＣ−ビット変更
命令サイズフィールドがオペランドサイズを特定する。
【０２６１】
命令における２ビット「ｄｔ」フィールド（行先タイプ）が以下のようにオペランド＿C のタイプを特定する。
【０２６２】
ｄｔ＝００−オペランド＿C はレジスタファイル３１２または特殊レジスタ３１５におけるレジスタである。
【０２６３】
ｄｔ＝１０−オペランド＿C はメモリ１７０内にある。オペランド＿C フィールドはアドレス発生のためにロード／ストアユニットにおいて７ビット即値として用いられる。
【０２６４】
ｄｔ＝ｘ１−オペランド＿C は外部メモリ２００内にある。オペランド＿C フィールドはｄｔ［１］ビットとともにアドレス発生のためにロード／ストアユニットにおいて８ビット即値として用いられる。
【０２６５】
ここで、非ゼロｄｔを有する命令はそのオペランドとしてリソースを用いることができない。
【０２６６】
即値バイトでの２オペランド命令
これらの命令はオペランド＿A と即値バイトとの間で算術論理演算を行なう。結果はオペランド＿C に書込まれる。命令は以下のとおりである。
【０２６７】
ＡＤＩ−即値加算
ＳＢＩ−即値減算
ＯＲＩ−即値論理ＯＲ
ＡＮＤＩ−即値論理ＡＮＤ
ＸＯＲＩ−即値論理ＸＯＲ
ＳＨＬＩ−即値左シフト
ＳＨＲＩ−即値右シフト
ＢＩＴＣＩ−即値ビット変更
サイズフィールドがオペランドのサイズを特定する。
【０２６８】
命令の２ビット「ｄｔ」フィールド（行先タイプ）が３オペランド命令におけるようにオペランド＿C フィールドのタイプを特定する。
【０２６９】
２オペランド命令
これらの命令は２つのオペランドの間で移動演算および比較演算を行なう。命令は以下のとおりである。
【０２７０】
ＭＯＶＥ−オペランドＡをオペランドＣに移動させる
ＣＭＰ−オペランドＣとオペランドＡとを比較する
命令のサイズフィールドがオペランドのサイズを特定する。
【０２７１】
即値での１オペランド命令
これらの命令はオペランドと即値フィールドとの間で移動演算および比較演算を行なう。命令は以下のとおりである。
【０２７２】
ＭＶＩＷ−即値ワードを移動させる
ＭＶＩＢ−即値バイトを移動させる
ＣＰＩＢ−即値バイトを比較する
ＣＰＩＷ−即値ワードを比較する
命令のサイズフィールドがオペランド＿C のサイズを特定する。
【０２７３】
即値フィールドでの特殊１オペランド命令
これらの命令は以下のようにオペランドＣに対して演算を行なう。
【０２７４】
ＳＭＷＲ−サーチマシン書込
ＣＭＤ−チャネルコマンド書込
ＣＡＳＥ−ケースステートメント
ＢＴＪ−ビットテストおよびジャンプ。
【０２７５】
ロードおよびストア命令
これらの命令はオペランドＡとメモリ１７０または２００との間でロードおよびストア演算を行なう。命令は以下のとおりである。
【０２７６】
ＬＯＡＤ
ＳＴＯＲＥ
「ｄｔ」フィールド（行先タイプ）が以下のように行先のタイプを特定する。
【０２７７】
ｄｔ＝１０−行先がメモリ１７０である。即値フィールドはアドレス発生のためのロード／ストアユニットにおいて７ビット即値として用いられる。
【０２７８】
ｄｔ＝ｘ１−行先がメモリ２００である。即値フィールドはｄｔ「１」ビットとともにアドレス発生のためのロード／ストアユニットにおいて８ビット即値として用いられる。
【０２７９】
特殊即値命令
この命令はＣＭＤＩ（即値コマンド）である。これはコマンドＦＩＦＯに書込むために用いられる。
【０２８０】
選択された命令
ＡＤＤ、ＳＵＢ、ＡＤＩ、ＳＢＩ
フラグ：
Ｅは結果が０に等しいときにセットされる
Ｃは（ＡＤＤ、ＡＤＩのための）キャリーまたは（ＳＵＢ、ＳＢＩのための）ボローが（オペランドｏｐＣのサイズに基づいて）発生されたときにセットされる。
【０２８１】
ＯＲ、ＡＮＤ、ＸＯＲ、ＳＨＬ、ＳＨＲ、ＯＲＩ、ＡＮＤＩ、ＸＯＲＩ、ＳＨＬＩ、ＳＨＲＩ
フラグ：
Ｅは結果が０に等しいときにセットされる。
【０２８２】
ＢＩＴＣ−ビット変更
オペランド：ビット［３１：２５］＝ｏｐＣ、［２４：１８］＝ｏｐＡ、［１７：１６］＝ｄｔ、［１４：８］＝ｏｐＢ、［７］＝ｖ
演算：opC<-opA[opB]<-v（すなわち、ｏｐＣにおけるビット番号ｏｐＢがｖにセットされること以外では、ｏｐＣがｏｐＡの値を受取る）
フラグ：Ｅは（ｏｐＡ［ｏｐＢ］＝＝ｖ）であるときにセットされる。
【０２８３】
ＢＩＴＣＩ−即値ビット変更
オペランド：ビット［３１：２５］＝ｏｐＣ、［２４：１８］＝ｏｐＡ、［１７：１６］＝ｄｔ、［１２：８］＝ｉｍｍ、［７］＝ｖ
演算：opC<-opA[imm]<-v
フラグ：Ｅは（ｏｐＡ［ｉｍｍ］＝＝ｖ）であるときにセットされる。
【０２８４】
ＣＭＰ−比較
オペランド；ビット［３１：２５］＝ｏｐＣ、［２４：１８］＝ｏｐＡ、［７：５］＝オペランドサイズ
演算：ｏｐＣ？ｏｐＡ
フラグ：
Ｅは（ｏｐＣ＝＝ｏｐＡ）であるときにセットされる
Ｇは（ｏｐＣ＞ｏｐＡ）であるときにセットされる
Ｌは（ｏｐＣ＜ｏｐＡ）であるときにセットされる。
【０２８５】
ＣＰＩＷ−即値ワード比較
オペランド：ビット［３１：２５］＝ｏｐＣ、［２３：８］＝ｉｍｍ
演算：ｏｐＣ？ｉｍｍ
フラグ：
Ｅは（ｏｐＣ＝＝ｉｍｍ）であるときにセットされる
Ｇは（ｏｐＣ＞ｉｍｍ）であるときにセットされる
Ｌは（ｏｐＣ＜ｉｍｍ）であるときにセットされる。
【０２８６】
ＣＰＩＢ−即値バイト比較
オペランド：バイト［３１：２５］＝ｏｐＣ、［２３：１６］＝bit ＿mask、［１５：８］＝ｉｍｍ
演算：（bit ＿mask & opC）？ｉｍｍ
フラグ：
Ｅは（（bit ＿mask & opC）＝＝ｉｍｍ）であるときにセットされる
Ｇは（（bit ＿mask & opC）＞ｉｍｍ）であるときにセットされる
Ｌは（（bit ＿mask & opC）＜ｉｍｍ）であるときにセットされる。
【０２８７】
ＬＯＡＤ−内部メモリまたは外部メモリからのロード
オペランド：ビット［３１：２５］＝ａｏｐ、［２４：１８］＝ｏｐＡ、［１７：１６］＝ｄｔ、［７］＝ｉ、［６］＝ｆ
演算：
if [dt==10] opA<-IM[｛aop,imp ｝] ; imp=imp+i ; 
if [dt==x1] opA<-XM[｛aop,xmp ｝] ; xmp=xmp+i ; 
ＩＭは内部メモリ１７０であり、ｉｍｐは内部メモリポインタレジスタ（表Ａ６−１）であり、ＸＭは外部メモリ２００であり、ｘｐｍは外部メモリポインタレジスタ（表Ａ６−１）である。
【０２８８】
ｆビットがセットされると、ロード命令の実行は同じチャネルからの先のストア演算が完了していなければ遅延される。
【０２８９】
ａｏｐはｉｍｐまたはｘｍｐと連結されるアドレスビットである（「｛｝」は連結を示す）。
【０２９０】
ＳＴＯＲＥ−内部メモリまたは外部メモリへのストア
オペランド：ビット[31:25] = aop, [24:18] = opA, [17:16] = dt, [7]= i
演算：
if [dt==10] opA->IM[｛aop,imp ｝] ; imp=imp+i ; 
if [dt==x1] opA->XM[｛aop,xmp ｝] ; xmp=xmp+i ; 
ＩＭ、ＸＭ、ｉｍｐ、ｘｍｐおよびａｏｐがＬＯＡＤ命令と同じ意味を有する。
【０２９１】
ＳＭＷＲ−サーチマシンコマンド書込
オペランド：ビット[31:25] = opC, [23:8] = imm 
演算：scmd<-｛opC[63:16], imm ｝。
【０２９２】
ＣＭＤＩ−チャネルへの即値コマンド
オペランド：ビット[31:8] = imm, [7] = L, [6] = P
演算：
Command ＿port <- ｛40'b0, imm｝
ここで４０′ｂ０は４０個の２進零を示す。
【０２９３】
ifＰ＝０, Command ＿port = cmd＿i ; （イングレスコマンド）
ifＰ＝１, Command ＿port = cmd＿e ; （イーグレスコマンド）
命令Ｌフラグ（１ビット）はロック／アンロック制御である（セットされると、命令のロック状態が変更される）。
【０２９４】
ＣＭＤ−チャネルへのコマンド
オペランド：ビット[31:25] = opC, [23:8] = imm, [7] = L, [6] = P 
演算：
Command ＿port <- ｛opC[63:16],imm｝
ifＰ＝０, Command ＿port = cmd＿i ; （イングレスコマンド）
ifＰ＝１, Command ＿port = cmd＿e ; （イーグレスコマンド）
命令における１ビットＬフラグがロック／アンロック制御である（セットされると、ロック状態が変更される）。
【０２９５】
ＣＡＳＥ
オペランド：ビット[31:25] = opC, [23:16] = bit＿mask, [12:8] =シフト
演算：PC<-PC+ （（opC&bit ＿mask）>>シフト）+1。
【０２９６】
ＢＴＪ−ビットテストおよびジャンプ
オペランド：ビット[31:25] = opC, [24:13] = addr, [12:8] = ビット, [7] = v 
演算：if（opC[bit]==v ）then PC<-addr 。
【０２９７】
追補８
サーチマシン
サーチマシンは周知のパトリシアツリー構造を用いる（１９９６年８月１３日にG. C. Stone に発行され、引用によりここに援用される米国特許第５，５４６，３９０号「基数判定パケット処理のための方法および装置」（“Method and Apparatus for Radix Decision Packet Processing ”）を参照されたい。
【０２９８】
図２１はツリーノード２４００を示す。各ノードは６４ビットの４ワードの長さである。ノードフォーマットは以下のとおりである。
【０２９９】
【表８】
2004342132.tif 000010
【０３００】
【表９】
2004342132.tif 000011
【０３０１】
【表１０】
2004342132.tif 000012
【０３０２】
【表１１】
2004342132.tif 000013
【０３０３】
【表１２】
2004342132.tif 000014
【０３０４】
【表１３】
2004342132.tif 000015
【０３０５】
【表１４】
2004342132.tif 000016
【０３０６】
【表１５】
2004342132.tif 000017
【０３０７】
【表１６】
2004342132.tif 000018
【図面の簡単な説明】
【０３０８】
【図１】この発明によるプロセッサを含むシステムのブロック図である。
【図２】図１のシステムにおけるリソースを示すブロック図である。
【図３】図１のシステムにおけるデータフレーム処理を示すタイミング図である。
【図４】図１のシステムにおけるデータフレーム処理を示すタイミング図である。
【図５】図１のシステムにおいて異なるタスクがどのように共用されるリソースにアクセスするのかを示す論理図である。
【図６】図１のシステムにおいて用いられるプロセッサのブロック図である。
【図７】図６のプロセッサの命令実行パイプラインを示す図である。
【図８】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図９】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図１０】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図１１】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図１２】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図１３】図１のシステムにおけるタスクおよびリソース状態遷移を示す図である。
【図１４】図６のプロセッサのタスク制御ブロック回路のブロック図である。
【図１５】図６のプロセッサのタスク制御ブロック回路のブロック図である。
【図１６】図１のシステムのためのメモリマップの図である。
【図１７】図１のシステムのためのデータエリアメモリマップの図である。
【図１８】図１のプロセッサのためのレジスタファイルマップの図である。
【図１９】図１のプロセッサのためのデータメモリマップの図である。
【図２０】図１９のデータメモリのためのアドレス発生を示す図である。
【図２１】図１のシステムにより用いられるアドレス導出データベースにおけるツリーノードを示す図である。
【符号の説明】
【０３０９】
１１０  ポートインターフェイス（ＰＩＦ）回路、１２０  ＡＴＭスイッチ、１３０  ＭＡＣ、１４０  スライサ、１５０  チャネル、１６０  マイクロコントローラ、１７０
内部メモリ、１９０  サーチマシン（ＳＭ）、２００  外部メモリ、２１０  入力制御ブロック、２２０  データＦＩＦＯ、２３０  リクエストＦＩＦＯ、２４０  ステータスＦＩＦＯ、２５０  出力制御、２６０  コマンドＦＩＦＯ、３１０  マイクロコントローラ命令実行ユニット、３１２  レジスタファイル、３１４  マイクロコントローラプログラムメモリ、３１５  特殊レジスタブロック、３１６  データメモリ、３１８  ＡＬＵ、３２０  タスク制御ブロック、３３０  ロード／ストアユニット（ＬＳＵ）、３４０  ＤＭＡブロック、４１０  配線、７０４、７２０、７４０、８０４、８２０、８４０、９２０、９３０  ダイヤグラム、７３０  サスペンド条件、７３４  リリース条件、１３０４、１３２０、１３２２、１３３０、１３５０、１３６０、１３６２  ラッチ、１３５４  次の状態および条件発生器、１３５８  バス、１３８０  リソース次ステージ発生器、１３９０  回路、１３９４、１４０６  マルチプレクサ、１３９８  タスク次状態発生器、１４０１  サスペンド論理およびリリース条件発生器、１４０３  アービタ、１４０４  配線、１６１０  スクラッチバッファ。
【図１】
2004342132.tif 000019
【図２】
2004342132.tif 000020
【図３】
2004342132.tif 000021
【図４】
2004342132.tif 000022
【図５】
2004342132.tif 000023
【図６】
2004342132.tif 000024
【図７】
2004342132.tif 000025
【図８】
2004342132.tif 000026
【図９】
2004342132.tif 000027
【図１０】
2004342132.tif 000028
【図１１】
2004342132.tif 000029
【図１２】
2004342132.tif 000030
【図１３】
2004342132.tif 000031
【図１４】
2004342132.tif 000032
【図１５】
2004342132.tif 000033
【図１６】
2004342132.tif 000034
【図１７】
2004342132.tif 000035
【図１８】
2004342132.tif 000036
【図１９】
2004342132.tif 000037
【図２０】
2004342132.tif 000038
【図２１】
2004342132.tif 000039