図面 (/)

技術 コンピュータプロセッサを含む装置、複数の所定のグループのタスクを実行するステップを含む方法、ネットワークデータを処理するステップを含む方法、複数のソフトウェアタスクを実行するための方法およびコンピュータプロセッサを含むネットワーク装置

出願人 アプライドマイクロサーキッツコーポレイション
発明者 アレクサンダー・ヨッフェドゥミトゥリー・ビシェツキー
出願日 2004年8月2日 (16年3ヶ月経過) 出願番号 2004-225517
公開日 2004年12月2日 (15年11ヶ月経過) 公開番号 2004-342132
状態 特許登録済
技術分野 先行制御 マルチプログラミング
主要キーワード レスフロー 出力制御ブロック 処理レイテンシ ソフトウェアタスク タスク特有 サスペンド信号 導出データ 最小ギャップ
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2004年12月2日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

解決手段

マルチタスクパイプラインプロセッサにおいて、連続する命令が種々のタスクによって実行され、前の命令を完了できないときに後の命令の命令実行パイプラインを取除く必要をなくす。タスクはタスク特定値ストアするレジスタ共用せず、それによって新しいタスクが実行のためにスケジュールされるときにレジスタをセーブまたはロードする必要をなくす。命令が利用不可リソースアクセスすれば、その命令はサスペンドされ、リソースが利用可となるまで他のタスクの命令が代わりに実行される。ハードウェアによってタスクスケジュールが行なわれ、オペレーティングシステムは必要ではない。

概要

背景

この発明はデータ処理に関し、より特定的にはパイプライン化された命令実行マルチタスキングおよびリソースアクセス技術に関する。

パイプライン化およびマルチタスキングによりプロセッサ帯域幅が増加する。これらの技術に伴う時間および複雑さを低減することが望ましい。

特に、命令実行がパイプライン化されると、プロセッサは、命令を実行すべきであるかどうかがわかる前に命令を実行し始めることもあり得る。たとえば、プロセッサが命令I1を実行し始め、次に、I1の実行が完了する前に命令I2を実行し始めたとする。I1の実行が完了できないのであれば、命令I2を実行すべきではなく、命令I2をパイプラインから除去しなければならない。実際に、どの時点においてもプロセッサはパイプラインから除去すべきである2つ以上の命令を実行しているかもしれない。パイプライン除去に関連する回路の複雑さを低減することが望ましい。

また、マルチタスキング環境においてさまざまなタスク間での切替えに伴うオーバヘッドを低減することも望ましい。タスクを切替えるには、プロセッサにより実行されるオペレーティングシステムが、どのタスクが次に実行されるべきであるかを定めなければならない。また、オペレーティングシステムは、あるタスクにより用いられたレジスタ値セーブし、別のタスクにより用いられる値をレジスタにロードしなければならない。これらの機能は相当な数のオペレーティングシステム命令を伴うことがある。こうした動作に関連のある命令の数を減少することが望ましい。

また、利用可能でないかもしれないリソースへのアクセスを改善することが望ましい。そのようなリソースの一例としては、プロセッサが読もうとする際には空であり、またはプロセッサが書こうとする際には一杯であるかもしれないFIFOが挙げられる。FIFOにアクセスする前に、プロセッサはFIFOが利用可能であるかどうかを示すフラグを調べる。利用可能でないかもしれないリソースにアクセスする速度を改善することが望ましい。

また、複数のタスクによるコンピュータリソースの利用を同期化するための単純な同期化方法を提供し、リソースが別のタスクによりアクセスされるよう設定されている際に、あるタスクがそのリソースにアクセスすることによって生じ得るエラーを回避することが望ましい。

概要

効率的なパイプラインプロセッサマルチタスクプロセッサおよびリソースアクセス技術を提供する。マルチタスクパイプラインプロセッサにおいて、連続する命令が種々のタスクによって実行され、前の命令を完了できないときに後の命令の命令実行パイプラインを取除く必要をなくす。タスクはタスク特定値ストアするレジスタを共用せず、それによって新しいタスクが実行のためにスケジュールされるときにレジスタをセーブまたはロードする必要をなくす。命令が利用不可なリソースにアクセスすれば、その命令はサスペンドされ、リソースが利用可となるまで他のタスクの命令が代わりに実行される。ハードウェアによってタスクスケジュールが行なわれ、オペレーティングシステムは必要ではない。

目的

この発明はいくつかの実施例において、効率のよいパイプラインプロセッサ、マルチ
スキングプロセッサおよびリソースアクセス技術を提供する。

効果

実績

技術文献被引用数
2件
牽制数
1件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

長さの等しい連続したタイムスロットにおいてネットワークデータを処理する複数の所定のグループ{G1}のタスクを実行するためのコンピュータプロセッサを含む装置であって、各タスクグループG1は複数のタスクを含み、前記コンピュータプロセッサは各タイムスロットをタスクグループG1と関連づけ、かつ各タイムスロットに対し、関連づけられたタスクグループG1からのタスクのうちの1つを選択するタスク選択回路を含み、どの2個の連続したタイムスロットもそれぞれの異なるタスクグループG1と関連づけられており、前記コンピュータプロセッサはさらに各タイムスロットにおいて、前記タイムスロットに対して選択された前記タスクに対する最大1個の命令の実行を開始する命令実行ユニットを含む、装置。

請求項2

前記タスク選択回路はグループG1における各タスクに対し、前記タスクが実行のために利用可能であるかどうかを判定するタスク情報に基づいて単一のタスクグループG1の前記タスクからあるタスクを選択するための選択回路と、各々が1個のタスクグループG1に対する前記タスク情報を保持する複数のラッチ回路とを含み、各タイムスロットにおいて、各ラッチ回路の内容は次のラッチ回路に転送され、最後のラッチ回路の内容が前記選択回路に与えられる、請求項1に記載の装置。

請求項3

各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能でないかもしれない複数のリソースをさらに含み、各リソースはただ1個のタスクグループG1のタスクによって共用される、請求項1に記載の装置。

請求項4

前記装置は、1個以上のネットワークセグメントからデータのフレームを受信し、および/または1個以上のネットワークセグメントへデータのフレームを送信し、データの各フレームは前記タスクの単一のものによって処理されるものである、請求項1に記載の装置。

請求項5

前記命令実行ユニットは、各タスクに対し、タスク特有の値をストアする1個以上のレジスタを含み、タスクが実行のためにスケジュールされているときは前記1個以上のレジスタのいずれのものもセーブリストアもされる必要がないようにする、請求項1に記載の装置。

請求項6

複数のネットワークポート上でネットワークデータを受信し、および/または前記ネットワークポート上でネットワークデータを送信するための複数の第1の回路をさらに含み、異なる第1の回路はそれぞれの異なるネットワークポート上でデータを受信および/または送信し、各タスクグループG1は前記第1の回路のうちの1つと関連づけられ、各タスクグループG1は関連づけられた第1の回路によって受信および/または送信されたネットワークデータを処理する、請求項1に記載の装置。

請求項7

各第1の回路はただ1個のポート上でネットワークデータを受信および/または送信する、請求項6に記載の装置。

請求項8

前記第1の回路は前記ネットワークポートとネットワークスイッチとの間のインターフェイスをもたらす、請求項6に記載の装置。

請求項9

各々が1個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および/または送信する複数の第1の回路をさらに含み、異なる第1の回路はそれぞれの異なるフロー上でデータを受信および/または送信し、各タスクグループG1は前記第1の回路のうちの1つと関連づけられており、各タスクグループG1は関連づけられた第1の回路によって受信および/または送信されたネットワークデータを処理する、請求項1に記載の装置。

請求項10

各タスクグループG1はネットワークポートに対応し、各タスクグループG1の前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項9に記載の装置。

請求項11

各タスクグループG1は各データフローのデータを処理するため少なくとも2個のタスクを含む、請求項9に記載の装置。

請求項12

各タスクに対してプログラムカウンタレジスタをさらに含み、各タイムスロットにおいて、(a)前記タイムスロットに対してあるタスクが選択された場合、前記命令実行ユニットは、選択されたタスクのプログラムカウンタレジスタによって識別される命令に対する実行を開始し、(b)前記タイムスロットに対して選択されたタスクがない場合、前記実行ユニットNOP命令の実行を開始する、請求項1に記載の装置。

請求項13

ネットワークデータを処理する複数の所定のグループ{G1}のタスクを実行するためのコンピュータプロセッサを含む装置であって、各タスクグループG1は複数のタスクを含み、前記コンピュータプロセッサは連続したタスク選択動作を行なうためのタスク選択回路を含み、各タスク選択動作はグループG1と関連づけられ、関連づけられたグループG1からの前記タスクのうちの1つを選択し、どの2個の連続したタスク選択動作もそれぞれ異なるタスクグループG1と関連づけられており、前記コンピュータプロセッサはさらに前記連続したタスク選択動作によって選択された前記タスクに対する命令を実行するための命令実行ユニットを含み、各タスク選択動作に対し、前記命令実行ユニットは対応する選択されたタスクに対して最大1個の命令の実行を開始する、装置。

請求項14

前記タスク選択回路はグループG1における各タスクに対し、前記タスクが実行のために利用可能であるかどうかを判定するタスク情報に基づいて単一のタスクグループG1の前記タスクからあるタスクを選択するための選択回路と、各々が1個のタスクグループG1に対する前記タスク情報を保持する複数のラッチ回路とを含み、各タスク選択動作の後、各ラッチ回路の内容は次のラッチ回路へ転送され、最後のラッチ回路の内容は前記選択回路に与えられる、請求項13に記載の装置。

請求項15

各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれない複数のリソースをさらに含み、各リソースはただ1個のタスクグループG1のタスクによって共用される、請求項13に記載の装置。

請求項16

前記リソースは、前記コンピュータプロセッサへのリクエストをストアしてネットワークデータを処理するためのリクエストFIFOと、ネットワークデータに適用すべき前記プロセッサからのコマンドをストアするためのコマンドFIFOとを含む、請求項15に記載の装置。

請求項17

複数のネットワークポート上でネットワークデータを受信し、および/または前記ネットワークポート上でネットワークデータを送信する複数の第1の回路をさらに含み、異なる第1の回路はそれぞれの異なるネットワークポート上でデータを受信および/または送信し、各タスクグループG1は前記第1の回路のうちの1つと関連づけられ、各タスクグループG1は関連づけられた第1の回路によって受信および/または送信されたネットワークデータを処理する、請求項13に記載の装置。

請求項18

各第1の回路はただ1個のポート上でネットワークデータを受信および/または送信する、請求項17に記載の装置。

請求項19

各々が1個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および/または送信する複数の第1の回路をさらに含み、異なる第1の回路はそれぞれの異なるフロー上でデータを受信および/または送信し、各タスクグループG1は前記第1の回路のうちの1つと関連づけられており、各タスクグループG1は関連づけられた第1の回路によって受信および/または送信されたネットワークデータを処理する、請求項13に記載の装置。

請求項20

各タスクグループG1はネットワークポートに対応し、各グループの前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項19に記載の装置。

請求項21

命令実行回路を含む回路によって複数の所定のグループ{G1}のタスク{TSK1}を実行するステップを含む方法であって、前記タスクTSK1はネットワーク上で受信および/または送信されたネットワークデータを処理し、前記命令実行回路は長さの等しい複数の連続したタイムスロットにおける各タイムスロットT1において命令を実行することを始めるように動作可能であり、前記複数のタスクを実行するステップはどの2個の連続したタイムスロットもそれぞれの異なるグループG1と関連づけられるように、前記所定のタスクグループのうちの1つであるタスクグループG1(T1)に各タイムスロットT1を関連づけるステップを含み、前記実行するステップはさらに各タイムスロットT1に対し、タスク選択動作TSOP1(T1)を行なって前記タイムスロットT1と関連づけられた前記グループG1(T1)からあるタスクを選択するステップと、各タイムスロットT1において、前記タスク選択動作TSOP1(T1)によってタスクがうまく選択された場合、前記命令実行回路が前記タイムスロットに対して選択された前記タスクに対する命令の実行を開始するステップとを含む、方法。

請求項22

前記タスクTSK1は、各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用しており、各リソースはただ1個のタスクグループG1の前記タスクによって共用される、請求項21に記載の方法。

請求項23

前記タスクTSK1は前記ネットワークデータからアドレス情報を抽出し、アドレス変換を行なう、請求項21に記載の方法。

請求項24

前記タスクTSK1は、複数のネットワークデータフローのネットワークデータを処理し、ネットワークデータは複数の回路C1によって受信および/または送信され、各回路C1は、異なる回路C1がそれぞれの異なるフロー上でネットワークデータを受信および/または送信する態様で1個以上のそれぞれのデータフロー上でデータを受信および/または送信し、各回路C1は、そのタスクが前記回路C1によって受信および/または送信されたデータに対して動作するグループG1に対応する、請求項21に記載の方法。

請求項25

各グループG1はネットワークポートに対応し、各グループG1の前記タスクは対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項24に記載の方法。

請求項26

命令実行回路を含む回路によって複数の所定のグループ{G1}のタスク{TSK1}を実行するステップを含む方法であって、前記タスクTSK1はネットワーク上で受信および/または送信されたネットワークデータを処理し、前記複数のタスクを実行するステップは前記命令実行回路によって実行すべき各命令に対し、その命令が実行されるべきタスクTSK1を選択する選択動作を実行するステップを含み、各選択動作はグループG1に関連づけられ、前記グループG1が実行に利用可能であるタスクを有している場合に、前記グループG1からあるタスクを選択し、どの2個の連続した選択動作もそれぞれの異なるグループG1と関連づけられており、前記実行するステップはさらにタスクの選択につながる各選択動作に対し、前記命令実行回路が、選択されたタスクに対する命令を実行するステップを含む、方法。

請求項27

1個以上のネットワークセグメントからデータのフレームを受信するステップおよび/または1個以上のネットワークセグメントへデータのフレームを送信するステップをさらに含み、データの各フレームは単一のタスクTSK1によって処理される、請求項26に記載の方法。

請求項28

前記タスクTSK1は、各々がどの所与の時点においてもあるタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用しており、各リソースはただ1個のタスクグループG1の前記タスクによって共用される、請求項26に記載の方法。

請求項29

前記タスクTSK1は前記ネットワークデータからアドレス情報を抽出し、アドレス変換を行なう、請求項26に記載の方法。

請求項30

前記タスクTSK1は複数のネットワークポートに対するネットワークデータを処理し、ネットワークデータは、異なる回路C1がそれぞれの異なるネットワークポート上でネットワークデータを受信および/または送信する態様で複数の回路C1によって受信および/または送信され、各回路C1は、そのタスクが前記回路C1によって受信および/または送信されたデータに対して動作するグループG1に対応し、前記回路C1は前記ネットワークポートとネットワークスイッチとの間のインターフェイスをもたらす、請求項26に記載の方法。

請求項31

前記タスクTSK1は、複数のネットワークデータフローのネットワークデータを処理し、ネットワークデータは複数の回路C1によって受信および/または送信され、各回路C1は、異なる回路C1がそれぞれの異なるフロー上でネットワークデータを受信および/または送信する態様で1個以上のそれぞれのデータフロー上でネットワークデータを受信および/または送信し、各回路C1は、そのタスクが前記回路C1によって受信および/または送信されたデータに対して動作するグループG1に対応する、請求項26に記載の方法。

請求項32

各グループG1はネットワークポートに対応し、各グループG1の前記タスクTSK1は対応するネットワークポートへの、および対応するネットワークポートからのデータフローを処理する、請求項31に記載の方法。

請求項33

各グループG1は、各データフローのデータを処理するため少なくとも2個のタスクTSK1を含む、請求項31に記載の方法。

請求項34

複数のタスクに対するコンピュータ命令を実行して複数のネットワークポートに対するネットワークデータを処理するステップを含む方法であって、ネットワークデータは、異なるポート回路がそれぞれの異なるネットワークポート上でネットワークデータを受信および/または送信する態様で複数のポート回路によって受信および/または送信され、各ポート回路は、前記ポート回路によって受信および/または送信されたデータに対して動作する複数の対応するタスクに対応し、前記タスクに対して実行されるべき各コンピュータ命令に対し、前記方法はどの2個の連続した命令もそれぞれ異なるポート回路に対して実行される態様で、前記命令が実行されるべきポート回路P1を定めるステップを含み、前記方法はさらにタスク選択動作を行ない、前記ポート回路P1に対応する前記タスクのうちの1つを選択するステップと、前記タスク選択動作によってタスクが選択された場合、選択されたタスクに対して命令を実行するステップと、実行されるのに利用可能である前記ポート回路P1にいずれの前記タスクも対応していないことにより前記タスク選択動作によってタスクが選択されなかった場合、NOR命令を実行するステップとを含む、方法。

請求項35

複数のネットワークポート上で受信されるネットワークデータおよび/または前記ネットワークポート上で送信されるネットワークデータを処理するポートインターフイス回路を制御するパイプライン化されたネットワークプロセッサによって複数のソフトウェアタスクを実行するための方法であって、前記ポートインターフェイス回路は、異なるハードウェアタスクがそれぞれの異なるネットワークポートに対するネットワークデータを処理する態様で複数のハードウェアタスクを含み、各ソフトウェアタスクは前記ハードウェアタスクのうちの対応する1つによって処理されるデータに対して動作し、各ハードウェアタスクは複数の前記ソフトウェアタスクに対応し、長さの等しい連続したタイムスロットの各々において、前記パイプライン化されたプロセッサは前の命令を実行し続けるとともに命令の実行を始めるように動作可能であり、前記方法は各タイムスロットをハードウェアタスクと関連づけるステップを含み、このため、各タイムスロットにおいて、前記プロセッサは、関連づけられたハードウェアタスクに対応するソフトウェアタスクが実行のために利用可能である場合に前記関連づけられたハードウェアタスクに対応するソフトウェアタスクの命令の実行を始め、どの2個の連続したタイムスロットもそれぞれの異なるハードウェアタスクと関連づけられており、前記方法はさらに各タイムスロットに対し、前記タイムスロットに関連づけられた前記ハードウェアタスクに対応するソフトウェアタスクが実行のため利用可能である場合に前記タイムスロットに関連づけられた前記ハードウェアタスクに対応するソフトウェアタスクを選択するステップと、各タイムスロットにおいて、前記タイムスロットに関連づけられた前記ハードウェアタスクに対応する前記ソフトウェアタスクが実行のため利用可能である場合に、前記タイムスロットに対して選択された前記ソフトウェアタスクからの命令の実行を開始するステップとを含む、方法。

請求項36

長さの等しい連続したタイムスロットにおいてネットワークデータを処理する複数の所定のグループのタスクを実行するためのコンピュータプロセッサを含む装置であって、各所定のグループのタスクは複数のタスクを含み、前記コンピュータプロセッサは各タイムスロットにおいて、所定のグループのタスクからあるタスクを選択するためのタスク選択回路を含み、どの2個の連続したタイムスロットにおいても、前記タスク選択回路はそれぞれの異なる所定のグループのタスクからタスクを選択し、前記コンピュータプロセッサはさらに前記タスクが選択されるたびにタスクに対する最大1個の命令の実行を開始する命令実行ユニットを含む、装置。

請求項37

前記タスクは、各々がどの所与の時点においてもタスクに対して利用可能であるかもしれずまたは利用可能ではないかもしれないリソースを共用し、各リソースは前記所定のグループのタスクのうちのただ1個のグループのタスクによって共用される、請求項36に記載の装置。

請求項38

各々が、1個以上のそれぞれのネットワークデータフロー上でネットワークデータを受信および/または送信する複数の第1の回路をさらに含み、異なる第1の回路はそれぞれの異なるフロー上でデータを受信および/または送信し、各所定のグループのタスクは、前記第1の回路のうちの1つと関連づけられており、各所定のグループのタスクは関連づけられた第1の回路によって受信および/または送信されたネットワークデータを処理する、請求項36に記載の装置。

請求項39

長さの等しい連続したタイムスロットにおいて複数のタスクを実行するためのコンピュータプロセッサを含むネットワーク装置であって、各タスクは前記タスクに対応する1個以上のネットワークデータフロー上で受信された、および/または前記タスクに対応する1個以上のネットワークデータフロー上で送信されたネットワークデータを処理するものであり、前記コンピュータプロセッサは各タイムスロットにおいてタスクを選択するためのタスク選択回路を含み、2個の連続したタイムスロットにおいて選択されたどの2個のタスクTSK1およびTSK2に対しても、前記タスクTSK1によって処理された前記1個以上のネットワークデータフローは前記タスクTSK2によって処理された前記1個以上のデータフローとは異なり、このため、前記タスクTSK1およびTSK2の双方によって処理されるデータフローがなく、前記コンピュータプロセッサはさらに前記タスクが選択されるたびにタスクに対して最大1個の命令の実行を開始する命令実行ユニットを含む、ネットワーク装置。

請求項40

複数のタスクを実行するためのコンピュータプロセッサを含むネットワーク装置であって、各タスクは対応するネットワークポート上で受信された、または対応するネットワークポート上で送信されたデータを処理するものであり、前記コンピュータプロセッサは長さの等しい2個の連続したタイムスロットにおいて選択されたどの2個のタスクもそれぞれ異なるポートに対するデータを処理する態様で、各タイムスロットにおいてタスクを選択するためのタスク選択回路を含み、前記コンピュータプロセッサはさらにタスクが選択されるたびに前記タスクに対する最大1個の命令の実行を開始する命令実行ユニットを含む、ネットワーク装置。

技術分野

0001

(関連出願への相互参照
該当なし
連邦政府資金による研究または開発に関する陳述)
該当せず

背景技術

0002

この発明はデータ処理に関し、より特定的にはパイプライン化された命令実行マルチタスキングおよびリソースアクセス技術に関する。

0003

パイプライン化およびマルチタスキングによりプロセッサ帯域幅が増加する。これらの技術に伴う時間および複雑さを低減することが望ましい。

0004

特に、命令実行がパイプライン化されると、プロセッサは、命令を実行すべきであるかどうかがわかる前に命令を実行し始めることもあり得る。たとえば、プロセッサが命令I1を実行し始め、次に、I1の実行が完了する前に命令I2を実行し始めたとする。I1の実行が完了できないのであれば、命令I2を実行すべきではなく、命令I2をパイプラインから除去しなければならない。実際に、どの時点においてもプロセッサはパイプラインから除去すべきである2つ以上の命令を実行しているかもしれない。パイプライン除去に関連する回路の複雑さを低減することが望ましい。

0005

また、マルチタスキング環境においてさまざまなタスク間での切替えに伴うオーバヘッドを低減することも望ましい。タスクを切替えるには、プロセッサにより実行されるオペレーティングシステムが、どのタスクが次に実行されるべきであるかを定めなければならない。また、オペレーティングシステムは、あるタスクにより用いられたレジスタ値セーブし、別のタスクにより用いられる値をレジスタにロードしなければならない。これらの機能は相当な数のオペレーティングシステム命令を伴うことがある。こうした動作に関連のある命令の数を減少することが望ましい。

0006

また、利用可能でないかもしれないリソースへのアクセスを改善することが望ましい。そのようなリソースの一例としては、プロセッサが読もうとする際には空であり、またはプロセッサが書こうとする際には一杯であるかもしれないFIFOが挙げられる。FIFOにアクセスする前に、プロセッサはFIFOが利用可能であるかどうかを示すフラグを調べる。利用可能でないかもしれないリソースにアクセスする速度を改善することが望ましい。

0007

また、複数のタスクによるコンピュータリソースの利用を同期化するための単純な同期化方法を提供し、リソースが別のタスクによりアクセスされるよう設定されている際に、あるタスクがそのリソースにアクセスすることによって生じ得るエラーを回避することが望ましい。

発明が解決しようとする課題

0008

この発明はいくつかの実施例において、効率のよいパイプラインプロセッサマルチ
スキングプロセッサおよびリソースアクセス技術を提供する。

課題を解決するための手段

0009

いくつかの命令実行パイプライン実施例において、パイプライン除去オーバヘッドはプロセッサがどのタスクに対しても続けて実行できる命令の数を制限することによって低減または消去される。このため、いくつかの実施例では、連続した命令は別々のタスクにより実行される。そのため、命令を実行できない場合でも、次の命令は異なるタスクに属するため当該次の命令は依然として実行されなければならない。このため、次の命令はパイプラインから除去されない。

0010

いくつかの実施例では、同じタスクのどの2つの命令の間でも、プロセッサは別のタスクからの十分な数の命令を実行してパイプライン除去の必要をなくしている。

0011

タスク切替えに関連するオーバヘッドを低減するため、いくつかの実施例では各々のタスクに対する別個のレジスタが含まれており、レジスタ値がタスク切替え動作においてセーブされたり、またはリストアされたりする必要がないようにする。特に、いくつかの実施例では、各タスクは別個のプログラムカウンタ(PC)レジスタおよび別個のフラグを有する。いくつかの実施例において、タスク切替えはハードウェアによって1クロックサイクルで行なわれる。

0012

いくつかの実施例において、プロセッサは、リソースが利用可能であるかどうかを予めチェックすることなくリソースにアクセスすることができる。プロセッサがリソースにアクセスする命令を実行する際にリソースが利用可能でない場合、プロセッサはその命令をサスペンドする。その命令を実行するはずであったプロセッサ回路は、たとえば別のタスクの命令など、別の命令を実行するのに利用可能となる。

0013

そのため、いくつかの実施例では、プロセッサはすべてのリソース(たとえばFIFOなど)の状態を追跡する。(特に断っていない限り、ここで用いている術語「リソース」はある時点において利用可能であるかもしれない、または利用可能でないかもしれない何かを意味する。)生成される信号は各リソースの状態を示しており、特にどのリソースがどのタスクに利用可能であるのかを示す。あるタスクが利用可能でないリソースにアクセスを試みた場合、そのタスクはサスペンドされ、プロセッサは本来そのサスペンドされたタスクが利用できたはずのタイムスロット内で他のタスクを実行できる。リソースが利用可能となると、そのサスペンドされたタスクは再開され、そのリソースにアクセスする命令が再実行される。

0014

複数のタスクが1つ以上のリソースを共用する際の同期エラーを避けるため、いくつかの実施例では、あるタスクがリソースのいずれか1つにアクセスし終わると、そのタスクは、そのリソースを共用する他のすべてのタスクがそのリソースにアクセスし終わるまでそのリソースにアクセスすることができない。このため、いくつかのネットワーク実施例では、さまざまなタスクがFIFOリソースを共用してデータフレームを処理する。各タスクは別個のデータフレームを処理する。フレームを処理するには、タスクは「リクエスト」FIFOからフレームアドレス読む。次に、タスクはコマンドFIFOに、チャネルプロセッサがフレームを処理するようにというチャネルプロセッサへのコマンドを書込む。2つ目のタスクは異なるフレームに対して同様の動作を行なう。始めのタスクは再び、さらに別のフレームに対して同じ動作を行なう。あるフレームに対して書かれたコマンドが別のフレームに誤って適用された場合、フレームは誤って処理される可能性がある。

0015

この可能性をなくし、リクエストFIFOにおけるフレームアドレスとコマンドFIFOにおけるコマンドとを正確に一致させるため、以下の技術が用いられる。まず、あるタ
スク(たとえばT1)がリクエストFIFOおよびコマンドFIFOの双方にアクセスを許されるが、他のどのタスクもこれらのリソースにアクセスすることを許されない。一旦タスクT1がいずれかのリソースにアクセスし終わると、そのリソースに別のタスクがアクセスすることが許可され、さらにタスクT1は、そのリソースを共用する他のすべてのタスクがそのリソースにアクセスし終わるまでは再びそのリソースにアクセスすることを許されない。このため、リクエストFIFOにおけるフレームアドレスの順序はコマンドFIFOにおけるコマンドの順序と対応しており、チャネルがフレームアドレスとコマンドとを正確に一致させることができるようにする。この一致を確立するのに特殊なタグは何ら必要ではなく、この一致は単純なデータ構造であるFIFOを用いて確立される。

0016

いくつかの実施例では、プロセッサはネットワークのデータフローを処理するいくつかのタスクを実行する。プロセッサは高い帯域幅をもたらすのに、上述のパイプラインおよびタスク切替え技術を用いる。

0017

他の実施例および変更例を以下に説明する。この発明は添付の特許請求の範囲により規定される。

発明を実施するための最良の形態

0018

図1には、パイプライン化されたマルチタスキングプロセッサ(マイクロコントローラ)160を含むポートインターフイス(PIF)回路110が示される。ポートインターフェイス110は、4つの全二重ポートを含み、これらはATMスイッチ120とそれぞれ対応の4つのイーサネット登録商標セグメント(図示せず)との間でインターフェイスをもたらし、4つのイーサネット(登録商標)セグメントの各々は対応するMAC130.0−130.3に接続される。各ポート「x」(x=0,1,2,3)において、イーサネット(登録商標)セグメントとATMスイッチ120との間のデータは、対応するMAC130.xおよび対応するスライサ140.xを通って流れる。スライサは周知のATMSAR機能を実行し、イーサネット(登録商標)フレームをATMセルに分割し、ATMスイッチへ向かう途中でセルにATMヘッダを付加し、イーサネット(登録商標)セグメントへ向かう途中でセルからフレームをアセンブルする。いくつかの実施例では、PIF110へのATMスイッチインターフェイスはフレームモードで動作し、このモードにおいてはATMスイッチは、間に介在するセルのない状態でセルのフレームをスライサ140に送る。スライサ140はAAL−5プロトコルを用いる。フレームモードはたとえば、A.ヨッフェ(Joffe )他による1996年8月30日出願の「ATMスイッチにおけるセルキューイング」(“Cell Queuing in ATM Switches”)と題された米国特許出願第08/706,104号に記述される。また、1997年8月28日出願の、ここに引用により援用されるPCT出願PCT/US97/14821を参照されたい。

0019

PIF110の他の実施例では、必ずしもATMまたはイーサネット(登録商標)ではない他のネットワーク間でインターフェイスがもたらされる。いくつかの実施例では、スライサ140は適当なMACで置換えられる。

0020

プロトコル変換(たとえば、ATM/イーサネット(登録商標)変換)を実行するのに加えて、PIF110はIPルーティングレイヤースイッチングまたは、PIFマイクロコントローラ160により実行されるソフトウェアにより定められる他の処理を行なうことができる。図3図4に関連して以下の説明を参照されたい。また、本出願と同日出願のA.ヨッフェ他による「ネットワークでデータを転送するためのネットワークプロセッサステムおよび方法」(“SYSTEMS AND METHODS FORDATA TRANSFORMATION AND TRANSFERIN NETWORKS”)と題された米国特許出願第09/055,044号(代理人事件番号M−4855 US)も参照されたい。これもここに引用により援用される。

0021

PIF110はさほど速くないクロック速度においてであってもスループットが高い。そのため、いくつかの実施例では、PIF110はわずか50MHzのクロック速度において4つの100MB/秒イーサネット(登録商標)ポートおよびそれぞれ対応の4つの155MB/秒ATMポートに対してIPルーティングを行なうことができる。

0022

図1では、各スライサ140.xとその対応するMAC130.xとの間のデータフローは対応するチャネル150.x(以下、チャネル「x」、すなわちチャネル0,1,2または3、とも称される)により制御される。チャネル150はマイクロコントローラ160からのコマンドを実行する。いくつかの実施例では、4つのチャネル150.xは、時分割多重方式を用いて4つのチャネル150の機能を果たす1つのチャネル回路により実現される。ここに引用により援用される前述の米国特許出願第09/055,044号の代理人事件番号M−4855 US「ネットワークでデータを転送するためのネットワークプロセッサシステムおよび方法」を参照されたい。

0023

チャネル、マイクロコントローラ、スライサ140およびMAC130はメモリ164を介して通信し、メモリ164は以下に説明する内部メモリ(「フレームおよびコマンドメモリ」)170およびFIFO230、240を含む。

0024

いくつかのイーサネット(登録商標)の実施例では、マイクロコントローラはMII(メディア独立インターフェイス管理回路180に接続され、MII管理回路180は当該技術分野において公知であるイーサネット(登録商標)物理層装置に接続される。

0025

サーチマシンSM)190はメモリ200内にアドレス導出データベースを保持し、IPルーティングまたはソフトウェアにより定められる他の処理を行なう。SM190はまた、メモリ200内に(たとえばVLANまたはアクセス制御リストを規定することによって)ネットワーク接続性を制限するデータベースを保持する。サーチマシンはマイクロコントローラ160により提示されるキー(たとえばイーサネット(登録商標)またはIPアドレス)を探索することができ、学習アルゴリズムを実行してそのアドレスがデータベースにない場合にレイヤー2またはレイヤー3アドレスを学習する。サーチマシン190はいくつかの実施例ではソフトウェアプログラマブルではないが、サーチマシンはフレキシブルデータベースノード構造をサポートしており、このため、サーチマシンは異なる機能(たとえばIPルーティング、レイヤー2スイッチングなど)にたやすく適合できる。サーチマシン190は、サーチインサートデリートなどのマイクロコントローラからのコマンドを実行する。サーチマシンはまた、マイクロコントローラにメモリ200への直接のアクセスを与える。サーチマシンについては、追補8に記載する。

0026

いくつかの実施例では、メモリ200はフロースルー動作モードにおいてシンクロナススタティックRAMを用いて実現される。いくつかの実施例では複数のメモリバンクが用いられている。

0027

いくつかの実施例では、PIF110は集積回路である。メモリ200は集積回路の一部ではないため「外部」と称される。しかしながら、他の実施例では、メモリ200は同じ集積回路の一部である。この発明はいかなる特定の集積方式によっても限定されるものではない。

0028

PIF110はまた、シリアル読出専用メモリ(ROM)204(いくつかの実施例ではシリアルEPROM)に接続され、ブート時にROM204からマイクロコントローラへソフトウェア(「ファームウェア」)がロードされるようにする。

0029

図2には、メモリ164内の1つのチャネル150.xおよびその関連のFIFOリソースが示される。チャネルは以下の2つの類似した部分に分割される。すなわち、対応するMAC130から対応するスライサ140へのデータフローを制御する入ってくる(イングレスサブチャネル150Iと、スライサ140からMIC130へのデータフローを制御する出ていく(イーグレス)サブチャネル150Eとである。特に断っていない限り、参照番号においてサフィックス「I」はイングレスサブチャネルに属する回路を示し、サフィックス「E」はイーグレスサブチャネルに属する回路を示す。

0030

各サブチャネル150I、150Eにおいてデータ処理は以下のステップを含む。

0031

(1) 対応する入力制御ブロック210(すなわち210Iまたは210E)は対応するデータFIFO220に入来データストアする。マイクロコントローラがアドレス変換または他の処理を開始できるようにするのに十分なデータフレームの部分が受取られると(たとえばIPルーティング実施例ではIPアドレスおよびホップカウントが受取られると)、入力制御210はそれぞれ対応のリクエストFIFO230にリクエストを書く。リクエストがFIFO230に書かれる前に受取られるフレームバイトの数は、前述の米国特許出願第09/055,044号の代理人事件番号M−4855 USに説明されるようにマイクロコントローラにより書込可能なレジスタにより規定される。

0032

(2)マイクロコントローラ160はリクエストを読み、対応するデータFIFO220から適当なパラメータ(たとえばイングレス側での発信元および行先アドレスまたはイーグレス側でのVPIVCI)を読み、適当な処理を行なう。マイクロコントローラはたとえばアドレス導出探索を行なうため、必要に応じてサーチマシン190を用いる。

0033

(3)サーチマシン190がマイクロコントローラ160に探索結果を返すと、マイクロコントローラはそれぞれ対応のコマンドFIFO260に1つ以上のチャネルコマンドを書き、これはフレームをどのように出力装置(MAC130またはスライサ140)に転送するべきであるかを特定する。

0034

(4)フレーム全体が受取られた後、入力制御210はそれぞれ対応のステータスFIFO240にステータス情報を書く。ステータスFIFOはマイクロコントローラ160により読まれる。ステータスによりフレームが不良であることが示されると(たとえばチェックサムが不良である場合)、マイクロコントローラはコマンドFIFO260に「破棄」コマンドを書いて出力制御250がそのフレームを破棄するようにさせる。

0035

ステップ(2)、ステップ(3)およびステップ(4)は図3図4に関連して以下に説明する他の処理を含んでいてもよい。

0036

(5)出力制御250はそれぞれ対応のコマンドFIFO260からのコマンドを実行する。

0037

いくつかの実施例では、データFIFO220およびコマンドFIFO260は内部メモリ170内にストアされる。リクエストFIFO230およびステータスFIFO240はメモリ230、240(図1)内にストアされる。

0038

イーグレス出力制御ブロック250Eの出力はマイクロコントローラに接続され、ATMスイッチ120がプログラム(「アプレット」)をマイクロコントローラにロードして実行できるようにする。アプレットはまず、他のフレームと類似した態様でイーグレス側に転送されるが、これらのアプレットのVPI/VCIパラメータはマイクロコントローラを示している。そこで、アプレットはMAC130には転送されない。代わりに、アプ
レットは回路250Eの出力からマイクロコントローラプログラムメモリ314(図6)にDMA転送によりロードされる。

0039

マイクロコントローラ160はまた、それ自身のフレームを発生し、これをいずれかのデータFIFO220へ書き、対応するコマンドFIFO260へコマンドを書くことができる。対応する出力制御250はそのコマンドにより特定されるとおりにフレームを転送する。

0040

マイクロコントローラはまた、コマンドFIFO260に、各サブチャネル150I、150Eのための別個のメモリ(図示せず)にストアされる統計情報を転送するコマンドを書くことができる。

0041

いくつかの実施例では、マイクロコントローラ160は費用のかかるリソースである。注目すべきことは、いくつかの実施例においてマイクロコントローラ命令実行ユニット図6において310として示され以下に説明される)がPIF110のゲートカウントの約70%を占めることである。このため、マイクロコントローラを常に稼動させることが望ましい。以下のように適当なマルチタスキングによって完全稼動させることができる。

0042

マイクロコントローラは、各ポート0、1、2、3につき1つずつの、4つの「ハードウェアタスクHT0、HT1、HT2、HT3を実行する。ハードウェアタスクは以下の表に示すように時分割多重方式で実行される。

0043

0044

ハードウェアタスクが利用可能でない場合(たとえば、ハードウェアタスクがサーチマシンを待っているためなど)、それぞれのクロックサイクルにおいてどのマイクロコントローラ命令も開始されない。

0045

各ハードウェアタスクは1つ以上のソフトウェアタスクを含む。各ソフトウェアタスクはフレーム全体を処理するコードを含む。イングレス側のフレームとイーグレス側のフレームとが並列到着し得るため、いくつかの実施例では各ハードウェアタスクは少なくとも2つのソフトウェアタスクを含んでおり少なくとも2つのフレームを並列処理できるようにする。いくつかの実施例では、異なるソフトウェアタスクがイングレス側とイーグレス側とに提供される。イングレスソフトウェアタスクが、たとえばマイクロコントローラがサーチマシンを待っているため実行できない場合、マイクロコントローラはイーグレスソフトウェアタスクを実行できる。また、その逆も可能である。

0046

以下、術語「タスク」は、特に「ハードウェアタスク」と記載しない限り、ソフトウェアタスクを意味するものとする。

0047

図3には、イングレスタスクによる1つのフレームのレイヤー3処理が示される。ステージ290DAでは、サブステージ290DA.1においてマイクロコントローラはフレームから、イーサネット(登録商標)(MAC)行先アドレスDAを読む。マイクロコントローラはこのアドレスをサーチマシン190に供給し、サーチマシン190はサブス
ージ290DA.2において探索を行なう。

0048

サブステージ290DA.3において、マイクロコントローラは探索結果を調べる。DAが見つからなかった場合、フレームは捨てられるか、またはブロードキャストされる。DAが見つかり、サーチマシンがそのDAを最終行ステーションのアドレスであると認識した場合、探索結果は、フレームが最終行先に送られることとなる仮装接続(VC)のVPI/VCIを含むことになる。この場合、IPステージ290IPはスキップされる。探索結果からDAがIPルーティングエンティティ割当てられたアドレスであることが示されると、IP処理がステージ290IPにおいて行なわれる。

0049

そのステージでは、サブステージ290IP.1においてマイクロコントローラはフレームからIP行先アドレスを読む。サーチマシンはステージ290IP.2においてそのアドレスに対して探索を行なう。マイクロコントローラはサブステージ290IP.3において探索結果を調べる。結果にはVPI/VCIが含まれ、またアクセス制御制約が含まれることもある。サブステージ290IP.3において、マイクロコントローラはアクセス制御制約をIP発信元アドレスと突き合わせ、フレームが許可されるかどうかを判定する。許可されない場合、フレームは捨てられる。

0050

ステージ290SAにおいて、イーサネット(登録商標)発信元アドレスSAは処理され、アドレス学習アルゴリズムを実現し、またVLANを実現する。より特定的には、サブステージ290SA.1において、サーチマシンはSAに対して探索を行なう。サーチマシンは学習アルゴリズムがリクエストするのであればSAデータを挿入または修正する。サブステージ290SA.2において、サーチマシンは、SAが属するVLANを戻す。サブステージ290SA.3において、マイクロコントローラはそのVLANをステージ290DA.2においてサーチマシンが返したDA VLANと比較する。イーサネット(登録商標)発信元および行先アドレスが異なるVLANに属する場合、フレームは捨てられる。

0051

サブステージ290DA.3、290IP.3、290SA.3のうちの1つまたは2つ以上において、マイクロコントローラはそれぞれ対応のデータフロー(すなわちそれぞれ対応のサブチャネル)に対してコマンドFIFO260Iへコマンドを書く。コマンドはチャネル150がフレームを捨てるように指示しても、またはフレームをそれぞれ対応のスライサ140に転送するように指示してもよい。フレームが転送される場合、チャネルは、コマンドの指示に従い、スライサにVPI/VCIを供給したり、また、IPホップカウントをインクリメントしたり、および/または発信元アドレスをそれぞれ対応のMAC130のアドレスで置換えたりする。

0052

図4には、1つのフレームに対してイーグレスタスクにより行なわれる処理が示される。ステージ294VCにおいて、タスクはVPI/VCIを調べてフレームがアプレットであるかどうかを判定する。もしそうであれば、タスクはそのフレームをマイクロコントローラプログラムメモリ(以下に説明する図6において314として示される)にロードし、アプレットを実行する。ステージ294IPはスキップされる。

0053

代わりに、VPI/VCIはフレームがATMスイッチ120からの情報リクエストであることを示していてもよい。そのようなリクエストの例としては、PIF110内のレジスタを読むリクエスト、または統計情報を読むリクエストが含まれる。イーグレスタスクがそのリクエストを行なう。それが情報のリクエストであれば、イーグレスタスクは、イーグレスタスクを実行するのと同じハードウェアタスクのイングレスコマンドFIFO260Iに1つ以上のコマンドを書く。これらのコマンドにより、チャネルがその情報をスイッチに送ることになる。ステージ294IPはスキップされる。

0054

VIP/VCIがスイッチ120からのどの管理リクエスト(情報のリクエストなど)をも示さない場合、ステージ294IPが行なわれる。サブステージ294IP.1において、タスク(すなわちマイクロコントローラ)はフレームからIP行先アドレスを読み、そのアドレスをサーチマシンに供給する。ステージ294IP.2において、サーチマシンは探索を行ない、イーサネット(登録商標)行先アドレスを返し、場合によってはアクセス制御情報をも返す。ステージ294IP.3において、タスクはそのイーグレスコマンドFIFO260Eへコマンドを書き、フレームのイーサネット(登録商標)行先アドレスをサーチマシンがもたらすアドレスで置換えさせ、イーサネット(登録商標)発信元アドレスをそれぞれ対応のMAC130.xのアドレスで置換えさせ、フレームをMACへ転送させる。また、タスクソフトウェアに応じて他の種類の処理が行なわれてもよい。

0055

マイクロコントローラがステージ290DA.2、290IP.2、290ISA.2、294IP.2においてサーチマシンを待っている間、マイクロコントローラは同じまたは別のハードウェアタスクにおける別のソフトウェアタスクを実行するのに利用可能である。

0056

いくつかの実施例では、各イングレスフローおよび各イーグレスフローに対して1つのタスクを有しているだけではマイクロコントローラを完全に稼動させることにならず、そのため、各半二重データフローに対して2つ以上のタスクが提供され、マイクロコントローラが各データフローにおいて2つ以上のフレームを並列に処理できるようにする。このことは以下を考慮することによって説明される。イーサネット(登録商標)フレームが短いときにマイクロコントローラの速度が最も要求される。なぜなら、図3図4に示される同じ処理を短いフレームと長いフレームとの双方に対して行なわなければならないからである。最も短いイーサネット(登録商標)フレームは64バイトを有する。たとえば、4つのイーサネット(登録商標)ポートが100MB/秒ポートであり、ATMポートが155MB/秒であるとする。100MB/秒では、最も短いフレームはイーサネット(登録商標)ポートを5.12マイクロ秒で通過する。このため、マイクロコントローラおよびサーチマシンはフレームを5.12+1.6=6.72マイクロ秒で処理しなければならない(1.6マイクロ秒はフレーム間ギャップである)。

0057

50MHzのマイクロコントローラクロック速度を仮定しよう。これは信頼性のある動作を確実にするためのかなり遅いクロック速度である。他の実施例ではより速い速度(たとえば100MHz)が用いられる。50MHzにおいて、6.72マイクロ秒は336クロックサイクルである。このため、1つのハードウェアタスクのイングレスおよびイーグレスタスクのためのクロックサイクル割当は336/4=84クロックサイクルである。

0058

フレームの処理はマイクロコントローラとサーチマシンとで分けられているが、これらは必ずしも同じフレームに対して並列に作業する訳ではないため、同じハードウェアタスク内の1つのイングレスフレームと1つのイーグレスフレームとに対する処理レイテンシ結線速度での処理においてさえ、84サイクルより長くてよい。処理するのに84サイクルよりも長くかかり、64バイトのフレームがイングレス側およびイーグレス側において連続して到着する場合、同じデータフローにおける前のフレームが処理される前に次のフレームが到着し始めることがあり得る。このため、マイクロコントローラが、同じデータフローにおける前のフレームの処理が完了する前に次のフレームを処理し始めることができるようにすることが望ましい。同じデータフローにおける複数のフレームのこのような並列処理を実現するために、各データフローに対して2つ以上のソフトウェアタスクが提供される。

0059

このように、いくつかの実施例では、各ハードウェアタスクHTxは2つのイングレスタスクIGx.0、IGx.1および2つのイーグレスタスクEGx.0、EGx.1を含む。たとえば、ハードウェアタスクHT1はイングレスタスクIG1.0、IG1.1およびイーグレスタスクEG1.0、EG1.1を含む。各タスクは以下のものを含む4ビットタスク番号により識別される。

0060

CHID−−それぞれ対応のポート0、1、2、3に対してのチャネルID(2ビット)=0、1、2、または3
SN−−シーケンス番号(IGx.0、EGx.0では0、IGx.1、EGx.1では1)
I/E−−イングレスには0、イーグレスには1
タスクの総数はすなわち16である。

0061

1つのフレームは1つのタスクにより処理される。フレームがアプレットである場合、そのアプレットは同じタスクにより実行される。

0062

マイクロコントローラ命令実行はパイプライン化される。このため、上記の表1では、それぞれ対応のハードウェアタスクに対して新しい命令が開始されるクロックサイクルが示される。たとえば、サイクル1では、ハードウェアタスクHT0に対して命令実行が開始される。命令実行は後続のサイクルにおいても続く。

0063

各サブチャネルにおけるFIFO230、240、260へのタスクのアクセスは図5論理図に示される態様で制御される。図5では、「タスク0」および「タスク1」は同じサブチャネルに対する2つのタスクであり、たとえばチャネル150.1のサブチャネル150Iに対するイングレスタスクIG1.0、IG1.1である。始めはタスク0のみがサブチャネルFIFO230、240、260へのアクセスを有する。タスク0がリクエストFIFO230にアクセスすると、スイッチ「a」が切替えられ、リクエストFIFOをタスク1に接続する。タスク0はタスク1がリクエストFIFOを読むまでリクエストFIFOを読むことが許されない。

0064

スイッチ「b」はコマンドFIFO260へのタスクのアクセスを制御する。スイッチ「b」は、タスク0によってあるフレームに対するすべてのコマンドが書かれた際に切替えられる。

0065

ステータスFIFO240へのタスクのアクセスを制御するスイッチ「c」はステータスFIFOがタスク0により読まれた際に切替えられる。

0066

サーチマシンへのタスクのアクセスを同期化するため、サーチマシン190は次々にコマンドを実行し、結果を同じ順序でもたらす。

0067

各命令において、実行のためのタスクを選択するのには1クロックサイクルしか要さない(以下に説明する図7におけるパイプラインステージTS)。さらに、タスクの選択はパイプライン化されており、そのためスループットに影響を及ぼさない。タスクの選択はハードウェアにより行なわれる。マイクロコントローラにおいてオペレーティングシステムは用いられない。このため、低いレイテンシが達成される。

0068

どの時点においても、各タスクは3つの状態、すなわち、アクティブレディまたはサスペンド、のうちの1つにある。アクティブ状態では、タスクは実行されている状態である。最も多くて4つのタスク(各ハードウェアタスクにつき1つ)が同時にアクティブで
あり得る。各アクティブタスクは4クロックサイクルごとに実行がスケジュールされる(上の表1を参照のこと)。

0069

アクティブタスクは、タスクが利用可能でないリソースにアクセスを試みるサスペンド状態移行する。リソースは追補2に記載される。リソースが利用可能となるとタスクはレディ状態に入る。

0070

アクティブタスクがサスペンドされると、同じチャネルにおけるレディ状態にあるタスクのうちの1つがタスク制御320(図6)により実行のため選択され、アクティブ状態に移行する。

0071

図6はマイクロコントローラ160のブロック図である。実行ユニット310はプログラムメモリ314にストアされるプログラムを実行する。プログラムはブートの間に、ROM204(図1)からダウンロードされる。さらに、上述のようにアプレットをロードして動的に実行することもできる。アプレットは実行された後に破棄されてもよく、またはアプレットはメモリ314に残されてもよい。

0072

実行ユニット310は、汎用レジスタを有するレジスタファイル312、特殊レジスタブロック315およびデータメモリ316を含む。レジスタファイル312は、それぞれ対応のバスsa_bus 、sb_bus に接続される2つの32ビット出力を含み、バスsa_bus 、sb_bus はALU318の入力に接続される。データメモリ316および特殊レジスタブロック315の32ビット出力はsa_bus に接続される。バスsa_bus に別個に接続されているのは特殊レジスタ「ヌル」および「ワン」の出力であり(追補6、表A6−1)、特殊レジスタは定数値をストアする(これらのレジスタは図6において「定数レジスタ」と記される)。

0073

バスsa_bus はまた、プログラムメモリ314から読まれる命令の即値フィールド「imm」を受取る。

0074

ALU318の64ビット出力は64ビットバスres _bus に接続され、64ビットバスres _bus はレジスタファイル312、データメモリ316および特殊レジスタブロック315の入力に接続される。

0075

レジスタファイル312、データメモリ316および特殊レジスタ315は追補6に記載される。そこに記載されるように、レジスタおよびデータメモリはタスク間で分けられているため、タスクが再スケジュールされる際にセーブ/リストア動作は必要ではない。特に、特殊レジスタ315は各タスクにつき1つずつの16個のPC(プログラムカウンタ)レジスタを含む。

0076

ロード/ストアユニット(LSU)330は実行ユニット310、サーチマシン190および内部メモリ170の間でインターフェイスをもたらす。LSU330は、メモリからレジスタをロードするか、またはレジスタ内容をメモリにストアするためのロードおよびストアリクエスト待ち行列を維持する。LSU330の入力はres _bus に接続され、またLSU330の64ビットの出力rfiはレジスタファイル312の入力に接続される。

0077

DMAブロック340の入力はバスres _bus に接続され、実行ユニット310がDMA340をプログラムできるようにする。DMA340はアプレットをプログラムメモリにロードすることができる。

0078

図7には命令実行パイプラインが示される。パイプラインには7つのステージがある。

0079

(1)タスクセレクト(TS)ステージt0。このステージでは、アクティブタスクがタスク制御320によってそれぞれ対応のチャネル150.xに対して選択される。いくつかの実施例では、タスク制御ブロック固定優先順位機構を実現しており、タスクIGx.0が最高優先順位を有し、次にIGx.1、その次にEGx.0、そしてその次にEGx.1となる。

0080

いくつかの実施例では、タスクは一度アクティブにされると、より高い優先順位のタスクがランする用意ができたというだけではサスペンドされない。その優先順位のより低いタスクは利用可能でないリソースにアクセスを試みるまでアクティブのままである。

0081

(2)フェッチ(F)ステージt1において、タスク制御ブロック320は実行ユニット310に対してアクティブタスク番号信号task# _t1(追補1の表A1−1におけるtsk _taskNumt1 と同じ)を駆動する。信号task# _t1は特殊レジスタ315内の16個のPC値のうちの1つを選択する。

0082

どのタスクもアクティブではない場合、タスク制御ブロック320は実行ユニット310に「アイドル」信号をアサートする。この信号は表A1−1において「tsk _idle」と表わされている。「アイドル」がアサートされると、task# _t1は「ドントケア」であり、命令実行ユニット310は残りのパイプラインステージにおいてNOP(ノーオペレーション)命令を実行する。

0083

「アイドル」がデアサートされると、特殊レジスタブロック315においてtask# _t1により選択されたPCレジスタ値はプログラムメモリ314に与えられる。選択されたPCにより示される命令がメモリから実行ユニット310へ読出される。

0084

(3)デコード(D)ステージt2において、命令は実行ユニットによりデコードされる。

0085

(4)読出(R)ステージt3において、レジスタファイル312および/または特殊レジスタ315および/またはデータメモリ316から命令オペランドが読まれ、ALU318に提示される。

0086

また、このステージにおいて、以下に図8から図15に関連してより詳しく説明するように、タスク制御320は配線410(図6)上にサスペンド信号(表A1−1におけるtsk _susp)を発生する。サスペンド信号がアサートされると、タスクはサスペンドされ、命令実行はアボートされ、タスクのPCレジスタは凍結される。後にタスクがアクティブにされると、同じ命令が再実行されることになる。

0087

また、このステージにおいて、実行ユニット310はウェイト信号を発生する。ウェイト信号がアサートされると、命令実行は完了させられずPCレジスタは凍結するが、タスクはアクティブのままであり、次のクロックサイクルから命令は再び実行される。たとえば、図7の命令1が、サイクル3においてアサートされるウェイト信号によって遅延された場合、同じ命令はサイクル4において開始される命令番号5として再実行されることになる。

0088

ウェイト信号は、命令を妨害している条件が、同じハードウェアタスクが再スケジュールされるころまでにはなくなりそうである場合にアサートされる。ウェイト条件は追補3に記載される。

0089

サスペンド信号およびウェイト信号がデアサートされると、PCレジスタは次の命令を指すように変えられる。

0090

(5) 実行(E)ステージt4において、命令は実行される。

0091

(6)ライトバック(WB)ステージt5において、実行ステージの結果は行先がレジスタファイル312内にある場合を除いて、その行先に書かれる。

0092

(7)レジスタ書込(WR)ステージにおいて、実行ステージの結果は必要であればレジスタファイル312に書込まれる。

0093

注目すべきなのは、各命令のWRステージ(たとえばサイクル6の命令1)が同じハードウェアタスクの次の命令のRステージの前に起こることである(サイクル7の命令5を参照のこと)。そのため、たとえば命令5が命令1の結果を用いるとすると、その結果は命令5がそれをサイクル7において読む前にレジスタファイルまたは特殊レジスタに書かれることになる。

0094

図7に示したように、(Rステージにおいて)命令がアボートされると、パイプラインはすでに開始された他の命令から除去されなくてもよい。なぜなら、これらの命令は他のタスク(さらには他のハードウェアタスク)に属するからである。たとえば、命令1をアボートしなければならない場合、命令1のRステージにおいて、またはその前に開始された他の命令とは命令2、3および4だけである。これらの命令は他のタスクによって実行されるため、除去されなくてもよい。

0095

所与のハードウェアタスクに関して、対応する4つのソフトウェアタスクの間で切替えをするのに、タスク切替えがオペレーティングシステムソフトウェアにより行なわれる場合とは異なり、別個の命令を実行することは必要ではない。このため、高いスループットが達成される。

0096

図8には、1つのリクエストFIFO230またはステータスFIFO240に関するタスク同期化バブル図が示される。下方のダイアグラム704では、「タスク0」および「タスク1」は図5と同じ意味を有する。より特定的には、これらはリクエストまたはステータスFIFOを共用する2つのソフトウェアタスクである。いくつかの実施例では、タスク0はイングレスサブチャネルに対するIGi.0またはイーグレスサブチャネルに対するEGi.0である。

0097

ダイアグラム704はFIFOの所有権を示す状態機械である。RESETにおいて、FIFOは状態710RS.0によって示されるようにタスク0により所有される。

0098

タスク0がFIFOを読むのに成功すると、FIFOは状態710RS.1により示されるように、タスク1により所有されることになる。FIFOを読むことは図5の「a」または「c」スイッチを切替えることに等しい。タスク1がFIFOを読むのに成功すると、状態機械は状態710RS.0に戻る。

0099

FIFO読出動作は条件mfsel[x] & ffrd により示される。信号mfsel は追補4に記載される。信号ffrdは、マイクロコントローラによりいずれかのリクエストまたはステータスFIFOが読まれると、ステージt3において実行ユニットによりアサートされる。別個のffrdバージョンが各リクエストおよびステータスFIFOに対して生成される(FIFO読出が成功すると、追補4の信号mfrdがステージt5においてアサートされる)。

0100

リクエストおよびステータスFIFOは16個ある。これらFIFOの各々は0から15までの一意の数「x」により識別される。FIFO「x」が読まれている際、図8のmfsel[x]により示されるように、その数「x」はラインmfsel 上に駆動される。

0101

ダイアグラム720および740はタスク0およびタスク1がFIFOに関連してどのように状態を変化させるかを示している。上に示したように、各タスクには3つの状態、すなわちレディ(「RDY」)、アクティブおよびサスペンドがある。RESETにおいて、すべてのタスクはレディとなる。タスクはパイプラインステージt0において選択されるとアクティブとなる。

0102

ここで説明する実施例では、タスクは直接アクティブ状態からレディ状態へ移行することができないが、これは他の実施例では可能である。

0103

ここで説明する実施例では、各タスクは「サスペンド」条件730が生ずるとアクティブ状態からサスペンド状態へ移行する。サスペンドされたタスクはリリース条件734が生ずるとレディとなる。可能なサスペンド条件を追補1の表A1−2に列挙する。リリース条件は表A1−3に列挙する。

0104

ダイアグラム720では、サスペンド条件730は、タスク0がFIFOが利用可能でないときにFIFOにアクセスを試みる際に生じる。より特定的には、条件730とは以下のとおりである。

0105

(1)タスクがパイプラインステージt3にあること(実行ユニット310により生成される信号「T3」により示される)。

0106

(2) ffrdがアサートされ、FIFO読出動作を示していること。

0107

(3) mfsel がFIFO「x」を識別していること。また、
(4) FIFOがタスク1により所有されている(状態機械704が状態710RS.1にある)か、または信号cfifordy[x] がローであり、FIFO「x」が空であることを示していること。(信号cfifordyは追補4に記載される。この信号は4つ目のサイクルごとにサンプリングされ、サンプリングされる際には有効である。)
FIFOがタスク0によって読まれておりそれ以外のどのタスクによっても読まれているのではないことは、タスク0がパイプラインステージt3にあることにより確証される。

0108

タスク1に対する条件730(ダイアグラム740)も同様である。

0109

ダイアグラム720、740における条件730は表A1−2(追補1)において、各種類のタスク(イングレスタスク0、イングレスタスク1、イーグレスタスク0、イーグレスタスク1)および各種類のFIFO(リクエストおよびステータス)について別々に示される。リクエストFIFO条件は4つのセクション「イングレスタスク0」、「イングレスタスク1」、「イーグレスタスク0」、「イーグレスタスク1」の各々において条件番号1として列挙されている。すなわち、イングレスタスク0についての条件は、
exe _RfifoRd & mfsel[x] &(Ireqf |〜cfifordy[x] )である。

0110

信号exe _RfifoRd はffrdと同じである。Ireqf はFIFOがイングレスタスク1により所有されていることを示す。表A1−2のすべての信号はステージt3においてサンプリングされるため、「t3」は表中の条件のいくつかでは省いてある。イーグレスタスク
0に関して、信号Ereqf はそれぞれ対応のリクエストFIFOがイーグレスタスク1により所有されていることを示す。すなわち、Ereqf がIreqf と入れ代わっている。タスク制御320は各リクエストFIFOに対して別個の信号Ireqf またはEreqf を発生する。

0111

追補1において、信号の否定は(〜cfifordyのように)信号名称の前の「〜」により示されるか、または(イーグレスタスク1に対する条件1のEreqf _のように)信号名称の後に続く下線によって示される。

0112

ステータスFIFOに関して、サスペンド条件730は表A1−2において2と番号のつけられた条件である。信号exe _SfifoRd はステータスFIFOに対するffrdバージョンである。ステータスFIFOを識別する番号は「x」ではなく「y」で示される。

0113

ダイアグラム720におけるリリース条件734は、タスク0がFIFOを所有している(状態機械704が状態710RS.0にある)ことと、cfifordy[x] がハイでありFIFOが空ではないことを示していることである。タスク1に対するリリース条件734(ダイアグラム740)は同様である。

0114

リリース条件は追補1の表A1−3に示されている。各リリース条件は表A1−2の同じスロット内のサスペンド条件に対応する。たとえば、表A1−3における「イングレスタスク0」セクションのリリース条件1は、タスクが表A1−2における「イングレスタスク0」セクションのサスペンド条件1によりサスペンドされた場合にそのタスクをレディ状態にリリースする。このように、表A1−3におけるリリース条件1および2は、リクエストおよびステータスFIFOに対するダイアグラム720および740でのリリース条件734に対応する。

0115

図9には、サブチャネルコマンドFIFO260(すなわち260I)に関するイングレスサブチャネルにおけるタスク同期化が示される。下部のダイアグラム804には、イングレスコマンドFIFOのための状態機械が示される。このFIFOはイングレスタスクおよびイーグレスタスクの双方により所有され得る。RESETにおいて、状態機械は状態S0にある。この状態において、FIFOはイングレスタスク0により所有されている。イングレスタスク0が、(図5のスイッチ「b」を切替えて)FIFOをロックすることなく1つのワードをFIFOに書くと、FIFOは状態S1に移行し、この状態ではFIFOはイングレスタスク1により所有される。書込動作は信号IcmdFifoWr[x] により示され、ここで「x」はイングレスコマンドFIFOに書くことができる4つのイングレスおよびイーグレスタスクのうちの1つを特定する。(IcmdFifoWr[x] がステージt3において実行ユニットによりアサートされると、対応するmfloadビット(追補4)がステージt5においてアサートされる。)信号IcmdFifoWr[x] は、それぞれ対応のタスクがFIFOに書くたびに適当な「x」に対してアサートされる。

0116

ロックされていないことは「アンロック」信号により示され、「アンロック」信号は、コマンドFIFOを書くのに用いられるマイクロコントローラ命令「CMD」(追補7)のLフラグから実行ユニット310によって生成される。

0117

イングレスタスク1が、コマンドFIFOをロックすることなく(「x」がイングレスタスク1を示しているIcmdFifoWr[x] により示されるように)そのコマンドFIFOに書くと、状態機械は状態S0に戻る。

0118

イングレスタスク0が状態S0にあるFIFOに書き、「ロック」信号がアサートされてそのFIFOをロックすべきであることを示すと、状態機械は状態S2に移行する。この状態においては、FIFOは依然としてイングレスタスク0により所有されている。ロ
ック信号は、マイクロコントローラ命令CMD(追補7)におけるLフラグから実行ユニット310により生成される。FIFOは、イングレスタスク0が「アンロック」信号がアサートされている状態でFIFOに書くまで状態S2に留まる。書かれた時点でFIFOは状態S1に移行する。

0119

同様に、イングレスタスク1が「ロック」がアサートされている状態で状態S1にあるFIFOに書くと、FIFOは状態S3に移行する。この状態においてFIFOは依然としてイングレスタスク1により所有されている。FIFOは、イングレスタスク1が「アンロック」がアサートされた状態でFIFOに書くまで状態S3に留まる。書かれた時点でFIFOは状態S0に移行する。

0120

状態機械が状態S0またはS1にあり、イーグレスタスクがコマンドFIFOをロックすることなくそのコマンドFIFOに書く場合、状態遷移は起こらない。イーグレスタスク0が状態S0にあるFIFOをロックしてFIFOに書くと、FIFOは状態S4に移行する。この状態において、コマンドFIFOはイーグレスタスク0により所有される。状態機械は、イーグレスタスク0が「アンロック」がアサートされている状態でコマンドFIFOに書くまで状態S4に留まる。書いた時点で、状態機械は状態S0に戻る。

0121

状態S5はS4に類似しているが、イーグレスタスク1がコマンドFIFOに書込をしこれを所有することを表わす。

0122

状態S6およびS7はそれぞれ対応の状態S4およびS5に類似しているが、状態S6およびS7には状態S0ではなくS1から入る。

0123

ダイアグラム820および840には、コマンドFIFOに関するそれぞれ対応のイングレスタスク0および1の状態遷移が示される。サスペンド条件730は表A1−2において番号が3の条件である。信号IcmdFifoWr[x] はイングレスタスク0および1に対する条件3におけるexe _IcmdFifoWr[x] と同じである。表A1−2における信号task# _t3はダイアグラム820および840における「T3」と同じである。信号ccmdfull[x] は、コマンドFIFO「x」が一杯であるという信号である(追補4を参照のこと)。この信号はステージt3において有効である。信号IcmdfOwnedByI0は、コマンドFIFOがイングレスタスク0により所有されていることを示す(すなわち、状態機械804は状態S0またはS2にある)。信号IcmdfOwnedByI1は、コマンドFIFOがイングレスタスク1により所有されていることを示す(ダイアグラム804における状態S1、S3)。

0124

イーグレスタスクに関して、イングレスコマンドFIFOに書込むことにより生じたサスペンド条件は表A1−2の条件8である。信号IcmdfOwnedByE0は、コマンドFIFOがイーグレスタスク0により所有されていることを示す(ダイアグラム804における状態S4、S6)。信号IcmdfOwnedByE1は、コマンドFIFOがイーグレスタスク1により所有されていることを示す(ダイアグラム804における状態S5、S3)。

0125

リリース条件734(図9)は表A1−3におけるイングレスタスクに対する条件3である。

0126

イーグレスコマンドFIFOに関するイーグレスタスク同期化も同様である。イーグレスFIFOについては、状態S4、S5、S6、S7は存在しない。表A1−2およびA1−3において、関係のある条件は番号が3である条件である。信号exe _EcmdFifoWrがexe _IcmdFifoWrと置換わり、イーグレスFIFOへの書込動作を示す。信号Ecmdf1は、FIFOがイーグレスタスク1により所有されていることを示す。

0127

図10には、DMAリソースに関するイーグレスタスク同期化が示される。下部のダイアグラム904には、DMA状態機械が示される。RESETにおいて、DMAはIDLEである。図10において「dmaa_wr」により示されるように、イーグレスタスクがDMAアドレス(プログラムメモリ314におけるDMA転送先アドレス)をDMA340(図6)のDMAアドレスレジスタDMAA(追補6)へ書くと、そのタスクはDMA所有者となり、DMA340がアクティブとなり内部メモリ170からDMA転送を開始する。図10の例において、DMA所有者はイーグレスタスク0である。

0128

図10の「last_word」により示されるように、転送が完了すると、DMAはレディ(「RDY」)となる。

0129

DMAがレディ状態にあり、DMA所有者タスクがDMAアドレスレジスタを読むと(図10において「dmaa_rd」として示される)、DMAは実行状態に移行する。DMA所有者はDMAレディ状態においてしかアドレスレジスタを読むことが許されない。非所有者タスクはどのDMA状態においてもDMAアドレスレジスタを読むことが許される。

0130

DMAが実行状態にあると、DMA所有者タスクはDMAによりロードされるアプレットを実行する。新たなDMAアクセスは許されない。

0131

DMA所有者タスクがリリースコード111をDMAAレジスタ(追補1)のOPフィールドに書込むと、DMAはアイドル状態に戻る。

0132

ダイアグラム920、930には、必ずしも同じハードウェアタスクにあるわけではない2つのイーグレスタスク、すなわちタスク0、タスクN、に対する状態遷移が示される。条件730は表A1−2におけるイーグレスタスクに対する条件7である。表において、exe _dmaaRdは図10のdmaa_rdと同じであり、exe _dmaaWrはdmaa_wrと同じである。図10の「dmaa_rd,wr 」は「dmaa_rdまたはdmaa_wr」という意味である。信号exe _dmaaRd、exe _dmaaWrは実行ユニット310により生成される。

0133

このように、DMA所有者タスクは、このDMA所有者タスクが、DMAがアクティブである間にステージt3においてDMAアドレスレジスタを読もうと試みるか、またはDMAアドレスレジスタに書こうと試みる際にサスペンドされる。所有者タスクはDMAがレディとなるとリリースされる。非所有者タスクはDMAがレディである間にステージt3においてDMAレジスタに書こうと試みる際にサスペンドされる。非所有者タスクはDMAがアイドルとなるとリリースされる。

0134

リリース条件734は表A1−2においてイーグレスタスク0および1に対する条件7において「clast _word」として示される。

0135

図11には、セマフォレジスタsemr(追補2、6)に関するタスク同期化が示される。サスペンド条件730は表A1−2において条件5として示される。各サスペンド条件は以下のとおりである。すなわち、(1)タスクがパイプラインステージt3にあることと、(2)BITCまたはBITCI命令がタスクにより実行され、そのターゲットオペランドがセマフォレジスタであり、その命令が、その命令の以前からセマフォレジスタビットが有していた値と同じ値をセマフォレジスタビットに書こうとしているためアボートされなければならないこと(これは表A1−2の信号exe _bitcSemRegにより示されており、「exe _」で始まる信号名称はすべて実行ユニット310により生成される信号を表わしている)とである。サスペンドが生じると、タスク制御ブロック320はフラグSPxを1に設定し、ここで「x」はタスク番号(0−15)である。

0136

リリース条件730はフラグSPxがクリアされる(すなわち0に設定される)ことである。タスク制御ブロック320は以下の2つの条件のうちのいずれか1つでも生じるとすべてのフラグSPxをクリアする。すなわち、
(1)パイプラインステージt3において、命令BITCまたはBITCIの実行がどれか他のタスクYによって成功したこと。この条件は表A1−3におけるリリース条件5の信号exe _bitcSemAccにより示される。

0137

(2)チャネル150がセマフォレジスタに書くこと。これはcstrobe がアサートされており(追補4における表A4−1)、csem[5]が1にあることによって示される。チャネルは、チャネルコマンドによりコマンドされると、セマフォレジスタにアクセスしてマイクロコントローラ160に表示を送る。ここに引用により援用される、上記の米国特許出願第09/055,044号の代理人事件番号M−4855 US「ネットワークでデータを転送するためのネットワークプロセッサシステムおよび方法」を参照されたい。

0138

図12には、サーチマシン190に関するタスク状態遷移が示される。サスペンド条件730(表A1−2における条件4)は以下の条件(1)および(2)の両方が真であることである。すなわち、
(1)タスクがパイプラインステージT3にあり、そのタスクがサーチマシンにコマンドを書くという命令を実行する(表A1−2においてexe _scmdWrとして示される、信号scmd_wr)か、またはサーチマシンから結果を読むという命令を実行すること(表A1−2においてexe _scmdRdとして示される、信号sres_rd)。追補7のマイクロコントローラ命令SMWR(サーチマシンコマンド書込)および追補6のレジスタscmd、scmde の記載を参照されたい。

0139

(2) 信号task_ownbit[x] が0であること(「x」はタスク番号)により示されるように、サーチマシンリソースがタスクによって利用可能でないこと。この信号は追補1の表A1−1およびA1−2ではsm_task_ownbitとして示される。名称が「sm_」で始まる信号はサーチマシン190により生成される。サーチマシンリソースおよびサスペンド条件は追補2に記載される。

0140

リリース条件734とはそれぞれ対応のtask_ownbit[x] が1であることである。

0141

図13には、メモリ170におけるフリーリストスクラッチバッファ1610(図18および追補5)に関するタスク同期化が示される。サスペンド条件730(表A1−2での条件6)は、以下のすべてが真であることである。すなわち、
(1)タスクがパイプラインステージt3にあること。

0142

(2)実行ユニットにより生成される信号ifreel_rdにより示されるように、タスクが内部フリーリストレジスタIFREEL(追補6)を読んでいること。この信号は表A1−2においてはexu _ifreelRdと表わされる。IFREELレジスタが読まれてフリーバッファ番号が得られる。

0143

(3) 「no_free_buffers 」(「no_free_buf 」)信号が特殊レジスタブロック315によりアサートされ、フリーバッファがないことを示していること。

0144

リリース条件734は、以下の3つの条件のうちのいずれかが真となることである。すなわち、
(1) cstrobe (追補4における表A4−1)がチャネル150によりアサートされ、csem[5]が0であり、チャネル150が、信号csem[4:0]により特定さ
れるスクラッチバッファ1610を内部フリーリストに戻そうとしていることを示していること。

0145

(2) 信号IfreelWr(表A1−3におけるexu _ifreelWr)は実行ユニットによりアサートされ、マイクロコントローラがIFREELレジスタ(追補6)へ書いていることを示していること。このレジスタには、フリーとなったスクラッチバッファの番号が書込まれる。

0146

(3) 信号IfreerWr(exu _ifreerWr)が実行ユニットによりアサートされ、マイクロコントローラがIFREERレジスタへ書いていることを示していること。

0147

図14はタスク制御ブロック320のブロック図である。タスク制御320は、4つの同じラッチのブロック1304.0、1304.1、1304.2、1304.3を含む。ラッチ1304.0はパイプラインステージt0(TS)におけるハードウェアタスクに関する情報をストアする。その情報はラッチ1304.1の入力に与えられる。ラッチ1304.1はパイプラインステージt1におけるハードウェアタスクに関する情報をストアする。同様にラッチ1304.2、1304.3はそれぞれ対応のステージt2、t3におけるハードウェアタスクに関する情報をストアする。ラッチ1304.1の出力はラッチ1304.2のそれぞれ対応の入力に接続される。ラッチ1304.2の出力はラッチ1304.3のそれぞれ対応の入力に接続される。ラッチ1304.3の出力は、パイプラインステージt3におけるソフトウェアタスクがサスペンドされるべきであるかどうかを判定するのに用いられ、また、以下に説明するようにそれぞれ対応のハードウェアタスクに対するソフトウェアタスクの状態を判定するのに用いられる。

0148

すべてのラッチは同じクロック(図示せず)によりクロックされる。

0149

各ブロック1304において、ラッチ1320はそれぞれ対応のハードウェアタスク番号HT#(上のCHIDと同じ)をストアする。ラッチ1322はハードウェアタスクに対するアクティブなソフトウェアタスク番号ST#=をストアする。そのハードウェアタスクに対していずれのタスクもアクティブではない場合、ラッチ1322の出力は「ドントケア」である。

0150

このように、ブロック1304.1のラッチ1320、1322の出力は信号task# _t1を形成し(図6)、ブロック1304.2のラッチ1320、1322の出力は信号task# _t2を形成する。ブロック1304.3のラッチ1320、1322の出力はラッチ回路1360の入力に接続され、ラッチ回路1360の出力はラッチ回路1362の入力に接続される。回路1362の出力は信号task# _t5をもたらす(図6)。

0151

ブロック1304.3のラッチ1320の出力はブロック1304.0のラッチ1320の入力に接続される。

0152

各ブロック1304は、4つのソフトウェアタスクIGx.0(図14において「I0」とも示される)、IGx.1(「I1」)、EGx.0(「E0」)およびEGx.1(「E1」)の各々につき1つずつの4つのラッチ回路1330を含み、ここで「x」はそれぞれ対応のラッチ1320にストアされるハードウェアタスク番号である。各ラッチ回路1330は2つのラッチ1330S、1330Cを含み、これらは簡単にするためタスクE1に対してのみ示される。回路1330Sはタスクの状態(すなわちレディ、アクティブまたはサスペンド)をストアする。回路1330Cはタスクをレディ状態に移行させるのに必要であるリリース条件734をストアする。リリース条件は(表A1−3にあるように)1から7まで、または0から6までのインデックスの形でストアされる。各種
のタスク(I0、I1、E0、E1)に対する可能なリリース条件のインデックスは追補1の表A1−3の左の欄に示される。

0153

ラッチ1330Cにある情報は、それぞれ対応のラッチ1330Sにストアされる状態が「サスペンド」である場合にしか意味をもたない。レディおよびアクティブ状態に対しては、ラッチ1330Cにある情報は「ドントケア」である。

0154

各ブロック1304は6つのラッチ1350を含み、6つのラッチ1350は対応するハードウェアタスクに対する6つのそれぞれ対応のリクエスト、ステータスおよびコマンドFIFOの状態をストアする。可能な状態はダイヤグラム704(図8)および804(図9)に示され、上に説明したとおりである。

0155

ブロック1304.3のラッチ回路1330、1350の出力は次の状態および条件発生器1354に接続される。回路1354はタスクとリクエスト、ステータスおよびコマンドFIFOとの次の状態を生成し、また次のリリース条件値を生成する。これらの状態および条件信号はバス1358を介してブロック1304.0の回路1330、1350の入力へ与えられる。

0156

図15には回路1354がより詳しく示される。回路1354において、リソース次ステージ発生器1380はブロック1304.3のラッチ回路1350からリクエスト、ステータスおよびコマンドFIFOの状態を受取る。発生器1380はまた、いずれかのリソース、ステータスおよびコマンドFIFOの状態遷移を引き起こし得る、ダイヤグラム704および804に関連して上に説明した信号のすべてを受取る。発生器1380はダイヤグラム704および804に従ってFIFOの次の状態を計算し、次の状態を同じクロックサイクルt3においてラッチブロック1304.0のラッチ回路1350へ与える。

0157

各ラッチ回路1330の出力はそれぞれ対応の回路1390の入力に接続される。簡単にするため、タスクE1のための回路1390のみが詳しく示される。タスクE1に関して、ラッチ1330Cのリリース条件出力はマルチプレクサ1394のセレクト入力に接続される。マルチプレクサ1394のデータ入力はタスクE1に対する7つの可能なリリース条件734を受取る(表A1−3「イーグレスタスク1」のセクション)。マルチプレクサ1394に入力される各データは、対応するリリース条件が真である場合にはアサートされ条件がである場合にはデアサートされる1ビット信号である。

0158

マルチプレクサ1394により選択されるリリース条件信号(すなわち、ブロック1304.3のラッチ1330Cにストアされるリリース条件に対応する信号)はタスク次状態発生器1398に与えられる。発生器1398はまた、タスクの現在の状態をラッチ1330Sから受取り、配線410上のサスペンド信号を以下に説明するサスペンド論理およびリリース条件発生器1401から受取る。タスク次状態発生器1398は、タスクがサスペンドされたままであるかどうか、または代わりにタスクが同じクロックサイクル内にアクティブになれるかどうかを示す信号Aを発生する。信号Aは以下の表2に従って生成される。

0159

0160

アービタ1403は4つの回路1390からA出力を受取り、これらからバス1358上に以下の信号を発生する。すなわち、(1)ブロック1304.0のそれぞれ対応のラッチ1330Sに対する各タスクの次のステージと、(2)配線1404上のアクティブソフトウェアタスク番号ST#とである。ソフトウェアタスク番号はブロック1304.0のラッチ1322へ送られる。

0161

アービタ1403はまた、信号「アイドル」を発生し、これはアサートされるとどのタスクもアクティブではないことを示す(図6も参照のこと)。

0162

タスクI0、I1、E0に対する各回路1390は、マルチプレクサへのリリース条件入力を、それぞれ対応のタスク(イングレスタスク0、イングレスタスク1またはイーグレスタスク0)に対応する表A1−3のセクションから取っていることを除いて、タスクE1のためのタスク次状態発生器1398およびマルチプレクサ1394と同じである信号A発生論理を含む。

0163

サスペンド論理およびリリース条件発生器1401はブロック1304.3のラッチ回路1350の出力を受取り、また、サスペンド条件730(図8から図13および追補1の表A1−2)を計算するのに必要である信号のすべて(たとえばcfifordy、mfsel など)を受取る。ブロック1401は、ブロック1304.3のラッチ1322の出力により識別されるアクティブタスクに対するサスペンド条件を計算する。サスペンド論理1401は配線410上に、タスク次状態発生器1398と他の3つの回路1390内の同様の発生器とへサスペンド信号をもたらす。

0164

さらに、サスペンド論理1401は各マルチプレクサ1394と他の3つのブロック1390内の同様のマルチプレクサ(図示せず)とに対するリリース条件データ入力734を生成する。リリース条件は表A1−3の式に従って生成される。

0165

さらに、サスペンド論理1401はブロック1304.3におけるすべての状態ラッチ1330Sの状態出力を受取る。各タスクについて、(1)状態出力がアクティブ状態を示し、かつ(2)タスクに対するサスペンド条件のうちの1つが真である場合、サスペンド論理1401は、そのタスクをレディにするのに必要なリリース条件のインデックス734_inを発生する。別個のインデックス734_inが表A1−3のそれぞれ対応のセクションに従って各タスクに対して生成される。図15にはタスクE1のためだけのインデックス734_inが示される。

0166

これ以外のすべての場合において(すなわち、タスクに対する状態出力が「アクティブ
」ではないか、または状態出力はアクティブであるがタスクに対するサスペンド条件のいずれも真ではない場合)、タスクに対するリリースインデックス734_inは「ドントケア」である。

0167

タスクE1に対するリリースインデックス734_inはマルチプレクサ1406の1つのデータ入力に与えられる。マルチプレクサの他方のデータ入力はタスクE1のためのブロック1304.3のラッチ1330Cからの条件出力を受取る。セレクト入力はタスクE1に対するブロック1304.3のラッチ1330Sの状態出力から「act」ビットを受取る。状態出力は2ビットを有する。ビット「act」は2ビットのうちの1ビットである。ビット「act」は状態が「アクティブ」であるかどうかを示す。「act」がアクティブ状態を示す場合、マルチプレクサ1406はリリースインデックス734_inを選択する。「act」が非アクティブ状態を示す場合、マルチプレクサ1406は条件ラッチ1330Cの出力を選択する。選択された信号はバス1358に与えられ、バス1358はその信号をブロック1304.0におけるタスクE1に対するラッチ1330Cへ供給する。

0168

同様に、各タスクのための各回路1390は以下のものを選択する同様なマルチプレクサ1406(図示せず)を含む。すなわち、同様なマルチプレクサ1406は(1)それぞれ対応のタスクに対するブロック1304.3のラッチ回路1330からの出力「act」がアクティブ状態を示す場合には、サスペンド論理1401からのそれぞれ対応のタスクに対するリリース条件インデックス734_inを選択し、また、(2)「act」が非アクティブ状態を示す場合には、それぞれ対応のタスクに対するブロック1304.3のラッチ1330の条件出力を選択する。選択された条件インデックスはブロック1304.0におけるそれぞれ対応のラッチ1330の入力に与えられる。

0169

いくつかの実施例では、1つのタスクがサスペンドされると、タスク特有の値を有するレジスタはセーブされない。特に、各タスクは、タスクPCおよびフラグを有するそれ自体のPCレジスタを有する(追補6を参照のこと)。さらに、レジスタファイル312は8つのバンクに分割される。各バンクは、同じチャネルからのイングレスタスクおよびイーグレスタスクの対の専用のものである。タスク対により実行されるソフトウェアは、その対の間に共通のレジスタがないような態様で書かれる。このため、レジスタファイルレジスタはタスク特有の値をストアするのだが、これらのレジスタをセーブしたりリストアしたりする必要はない。

0170

ここで説明する実施例はこの発明を限定するものではない。特に、この発明はポートの数によっても、ポートが全二重または半二重であるということによっても、いかなるタイミング、信号、コマンドまたは命令によっても限定されない。いくつかの実施例では、マイクロコントローラは、図7のパイプラインまたは何らかの別のパイプラインを有する複数の実行ユニットを含む。いくつかの実施例では、1つ以上のマイクロコントローラが、スーパースカラまたはVLIW(very large instruction word )プロセッサに存在するような複数の実行ユニットを含む。いくつかの実施例では、マイクロコントローラは複数の集積回路で実現されるプロセッサにより置換えられる。ここで用いた術語「タスク」にはプロセスおよびスレッドも含まれる。他の実施例および変更例も、添付の特許請求の範囲に記載されるこの発明の範囲内に含まれる。

0171

追補1
タスク制御ブロック

0172

0173

0174

0175

追補2
リソース
全リソースは特殊レジスタまたは専用マイクロコントローラコマンドによってアクセスされる。

0176

サーチマシン
サーチマシンは、マイクロコントローラによって書込まれるコマンドと結果との2個のリソースを有する。

0177

書込専用のコマンドリソースは16個ある(タスクごとに1個)。このリソースが利用可でない唯一の場合は、同じタスクからの先のコマンドが完了されていないときである。

0178

読出専用の結果リソースは16個ある(タスクごとに1個)。あるコマンドがサーチマシンに通知されると、そのコマンドが実行されるまで結果が利用不可となる。いくつかのコマンド(たとえば、インサートまたはデリート)は結果を持たない。

0179

チャネル制御
チャネル制御はコマンドFIFO260、リクエストFIFO230およびステータスFIFO240との3種のリソースを有する。

0180

コマンドリソースは以下の2つの場合利用不可である。

0181

a.リソースが別のタスクに属する。この場合、他のタスクがそのリソースをリリースすると、それはこのタスクに対して利用可となる。

0182

b.コマンドFIFOがフルである。この場合、コマンドFIFOがフルでなくなると、タスクはこのリソースを使用し続けることができる。

0183

コマンドリソースはセッション保護を有する(すなわち、いくつかのコマンドがあるタスクによって書込まれ得るのはリソースが別のタスクに渡される前である)。これは、最初のアクセスの間にリソースをロックし、最後のアクセスの際にそれをアンロックすることによって達成される。コマンドリソースがロックされると、他のどのタスクもこのリソースにアクセスできない。

0184

チャネル150.xのイーグレスタスクEGxは、メッセージをスイッチ120に送るために同じチャネル150.xのイングレスコマンドFIFO260Iにコマンドを書込むことができる。イングレスコマンドFIFOがアンロックされるたびにイーグレスタスクがイングレスコマンドFIFOに書込まれ得る。イーグレスタスクがその最初のコマンドをイングレスコマンドFIFO260Iに書込むと、イーグレスタスクからの最後のコマンドが書込まれるまでコマンドFIFOがロックされた状態となる。

0185

リクエストまたはステータスFIFOリソースは以下の2つの場合利用可でない。

0186

a.リソースが別のタスクに属する。この場合、他のタスクがFIFOを読出すと、リソースはこのタスクに対して利用可となる。

0187

b.FIFOが空である。この場合、FIFOがレディになると、タスクはこのリソースを使用し続けることができる。

0188

DMA
データFIFOからのアプレットをプログラムメモリ314にダウンロードするのはDMAブロックである。このリソースは、転送前にDMAアドレスをセットし、転送完了時に最後のワードアドレスを読出すイーグレスタスクによって用いられる。転送の間に最後のワードアドレスが読出されると、最後のワードが転送されるまでタスクがサスペンドされる。また、最初の転送が完了していないときに別のイーグレスタスクによって新しいDMAアドレスを書込む試みもタスクサスペンドを引き起こす。

0189

内部メモリ170管理
内部メモリにおけるスクラッチパッドエリア内のフリーバッファ1610(図17)を管理するのは内部メモリ管理である。メモリには32個のフリーバッファがある。タスクは、次の利用可能なフリーバッファを得ることを望むとき、フリーリスト(FreeL)リソース(追補6のレジスタIFREEL)にアクセスする。バッファが残されていなけ
れば、このタスクはサスペンドされる。このバッファを用いたチャネルコマンドによってバッファがリリースされるべきだと示されると、バッファはリリースされてフリーリストに戻る。

0190

セマフォ
セマフォレジスタsemrは32ビットを有する。その各々がマイクロコントローラの即値ビット変更(BITCI)およびBITCコマンドを用いて直接的にアクセス可能である。セマフォは保護とタスク間の通信とのために用いられる。

0191

BITCIまたはBITCコマンドが同じ値を現在のビット値としてこのビットに書込もうと試みる場合、それはアボートされ、そのタスクがサスペンドされる。その後、セマフォレジスタが変更される(レジスタにおける何らかのビットが変更される)と、セマフォを待っている全タスクがレディとなり、Bit_change_Immediate(即値ビット変更)コマンドを再び実行しようとする。

0192

セマフォレジスタのビット31−24はPIF110のそれぞれの予め定められた外部ピン(図示せず)を0から1に変更することによってセットされ得る。

0193

追補3
タスクウェイト条件
ウエイト信号をアサートできる条件は2つある。
(1)レジスタスコアボード
マイクロコントローラにおけるレジスタごとに、そのステータスを表示する1スコアボードビットがある。このビットがセットされていれば、レジスタはダーティであり、すなわち、データがLSU330によってロードされるのを待っている。起こり得るシナリオは以下のとおりである。

0194

(a)タスクがLSUによるレジスタのロードをリクエストする。

0195

(b)タスクがソースとしてのこのレジスタの使用をリクエストする。しかしながら、スコアボードはダーティである。したがって、ウエイト信号がアサートされる。

0196

(c) 次に、LSUがレジスタをロードする。

0197

(d)タスクがソースとしてのこのレジスタの使用を再びリクエストする。今回は使用が許可される。
(2) LSU FIFOフル
これはウエイト信号を発生するための別の条件である。ロード・ストアリクエストを待ち行列に格納しているLSU FIFOが一旦レディとなると、この条件はクリアされる。

0198

追補4
以下の表はチャネル/マイクロコントローラインターフェイスにおいて用いられるいくつかの信号をリストにして挙げる。「I」は信号がチャネルのための入力であることを意味する。「O」は信号がチャネル出力であることを意味する。

0199

0200

追補5
メモリ
内部メモリ170のマップ
内部メモリマップを図16に示す。

0201

データエリア1510(アドレス0000−1FF16進法
このエリアスクラッチパッド1610、データFIFOおよびコマンドFIFOのために用いられる。このエリアは相対アドレスを用いてアクセスされる。データエリアメモリマップ図17に示す。

0202

図17において、「DBASE_I」はイングレス側のための(後述する)CFGRレジスタの「DBASE」フィールドである。同様に、DLEN、CBASE、CLENは対応のCFGRレジスタのフィールドである。サフィックス「_I」はイングレスを表わし、「_E」はイーグレスを表わす。

0203

各チャネルのための制御エリア1520
このエリアにおけるレジスタタイプの1つは以下のとおりである。

0204

CFGR−チャネルコンフィギュレーションレジスタ(イングレスおよびイーグレス)
各チャネルの方向ごとに1個、8個のCFGRレジスタがある。それらのフィールドは以下のとおりである。

0205

DBASE(9ビット)データバッファベースポインタ(64バイト整列
DLEN (7ビット) データバッファ長(64バイト粒度)
CBASE (9ビット)コマンドバッファベースポインタ(64バイト整列)
CLEN (3ビット) コマンドバッファ長(64バイト粒度)
AP(4ビット)フレーム制御ワードが無効であるときのデータ読出ポインタデータ書込ポインタとの間の最小ギャップ(8バイト粒度)。

0206

データエリア1530(アドレス4000−5FFF16進法)
このエリアは上述の米国特許出願第09/055,044号の出願人書類番号M−4855 USに説明される。

0207

追補6
マイクロコントローラレジスタ
レジスタファイルマップ
レジスタファイル312は8個のバンクへと分割される(図18)。各バンクは同じチャネル150.xからの1対のイングレスタスクとイーグレスタスクとの専用のものである。いくつかの実施例では、イングレス処理の方がより複雑なのでイングレスタスクがイーグレスタスクよりも多くのレジスタを用いる。また、いくつかの実施例では、タスクソフトウェアは、2つのタスク間に共通のレジスタがないようなものである。

0208

各レジスタr0.0−r7.7は1バイトの幅である。連続する8バイトがレジスタファイルから並列に読出され得る。8バイトレジスタワードの7ビットアドレスを形成するために、レジスタ番号(0から63)が、それ自体チャネルID「CHID」とタスク対番号(0または1)とを連結したものであるバンクIDと連結され、アドレスMSBが(特殊レジスタ314に対して)レジスタファイル312を表示するために0となる。

0209

マイクロコントローラレジスタマップ
マイクロコントローラにおける全レジスタがマイクロコントローラコマンドによって直接的にアクセス可能である。レジスタマップはレジスタファイル312および特殊レジスタ315という2領域に分割される。レジスタアドレスは7ビットからなる。特殊レジスタ315ではアドレスMSBが1であり、レジスタファイル312ではMSBが0である。

0210

データメモリ316
データメモリ316(図19)は変数一時記憶と後述するいくつかのパラメータとのために用いられる。

0211

したがって、データメモリ316は以下の3領域に分割される。

0212

a.タスクごとのタスクレジスタtr0−tr5(タスクごとに6個)。これらのレジスタはそれぞれのタスク専用である。

0213

b.チャネルレジスタcr0−cr3(チャネル150.xごとに4個)。これらのレジスタはハードウェアタスク専用である。同じチャネルの全タスク(2個のイングレスタスクおよび2個のイーグレスタスク)がこれらのレジスタにアクセスする。

0214

c.グローバルレジスタgr(16個のレジスタ)。これらのレジスタは全タスクに対してグローバルである。

0215

データメモリ316は32ビットの128ワードである。

0216

データメモリ316のための7ビットアドレス発生方式を図20に示す。

0217

trはタスクレジスタ番号(0−5)である。

0218

tnはタスク番号(0−15)である(trおよびtnがタスクレジスタアドレスを形成する)。

0219

crはチャネルレジスタ番号である(0−3;「110」、crおよびcnがチャネルレジスタアドレスを形成する)。

0220

cnはチャネル番号(0−3)である。

0221

grはグローバルレジスタ番号(0−15)である。

0222

特殊レジスタ(SR)315(以下の表A6−1参照)は(レジスタファイルと同様に)マイクロコントローラコマンドによって直接的にアクセス可能である。特殊レジスタ315は以下の3タイプに分割できる。

0223

a.タスクに属するレジスタ、たとえば、プログラムカウンタ(PC)、タスク番号(TIN)等。

0224

b.リソースレジスタ、たとえば、リクエストFIFO(reqf)、ステータスFIFO(sttf)、サーチマシンコマンド(scmd)等(追補2参照)。

0225

c.データメモリ316レジスタ、たとえば、タスクレジスタ(tr)、チャネルレジスタ(cr)およびグローバルレジスタ(gr)。

0226

リソースおよびデータメモリ316(タイプbおよびc)はそのアクセスを簡単にするために特殊レジスタにマッピングされる。

0227

適切な特殊レジスタを以下の表に手短に述べる。

0228

0229

いくつかの特殊レジスタのレジスタフィールは以下のとおりである。

0230

PC−プログラムカウンタおよびフラグ
PC (10ビット) プログラムカウンタ
G (1ビット) フラグ−より大きい
L (1ビット) フラグ−より小さい
E (1ビット) フラグ−等しい
C (1ビット) フラグ−桁上げ
G、L、EおよびCは読出専用である。

0231

TN−タスク番号
CHID (2ビット)チャネルId
SN (1ビット)シーケンス番号
I/E (1ビット)イングレス(0)/イーグレス(1)。

0232

SCMD、SCMDE−コマンドおよびコマンド拡張
書込動作の間、これらの32ビットレジスタはサーチマシンのためのコマンドを形成する。読出動作の間、これらのレジスタは結果を与える。SCMDEはSCMDの前に書込まれるべきである。

0233

XFREEL−外部フリーリスト
このレジスタへの書込によって、1ブロックが外部メモリ200におけるフリーリストスタックに付加される。このレジスタからの読出によって、1ブロックがスタックから取除かれ得る。

0234

1チャネルごとに1個のフリーリストスタックがある。各レジスタはスタックの先頭を指す16ビットポインタを含む。

0235

TIMER−汎用タイマ
Timer (32ビット)タイマ値タイマシステムクロックが8計時するごとに進む自走カウンタである。

0236

NXTE (16ビット)エイジングがあるか調べるための次エントリを指すポインタ。このフィールドは書込専用である。リセット後に初期化されるべきである。

0237

ET (1ビット)タイマ更新イネーブル。このフィールドは書込動作の間に用いられる。ET=1であれば、タイマは書込まれた値をとる。ET=0であれば、タイマカウンタは書込によって影響を与えられない。

0238

EN (1ビット) 次エントリ更新イネーブル。このフィールドは書込動作の間に用いられる。EN=1であれば、次ポインタが新しい値を得る。EN=0であれば、NXTEフィールドが無効である。

0239

SMCNTL−サーチマシン制御レジスタ
Pointer (16ビット)ノードエリア開始ポインタ。このポインタはサーチノードエリアを定義する(このエリアの後部が0xFFFFである)。自動エイジング機構はこのエリア内でのみ実行される。

0240

AGE (1ビット)エイジングイネーブル(0−ディセーブル;1−イネーブル)。

0241

FLCNT−フリーリストカウンタ
この読出専用レジスタはメモリ170のスクラッチパッドエリアにおけるフリーリスト内のエントリ数を含む。

0242

Count (17ビット)カウンタ(最大値は0x10000である)。

0243

AGEL0、AGEL1−エイジリスト0、1の先頭
これらは読出専用レジスタである(チャネルごとに2個)。各々がエイジリストの先頭を含む(チャネルごとに2個のエイジリストがある)。これらのレジスタのどの1つからの読出もレジスタをクリアさせる。ここで、ノード(追補8)におけるTSTMP(タイ
スタンプ)がこのリストにおけるノードを互いにリンクするために用いられる。レジスタが0なら、リストは空である。

0244

Pointer (16ビット)リストポインタの先頭。

0245

しきい値0、しきい値1−しきい値レジスタ
これらのレジスタの各々は対応のエイジリストと関連したしきい値を含む。

0246

|current _time-timestamp|>しきい値であり、かつエントリがLRND(学習されたエントリ)のタイプであると、エントリはエイジリストに付加される。

0247

threshold (16ビット)しきい値。

0248

MSGR−メッセージレジスタはマイクロコントローラとスイッチ120CPU(図示せず)との間でメッセージを転送するために用いられる。メッセージはヘッダラインによって転送される。

0249

MSGA (16ビット) MSGRに書込むときはCPUへの、レジスタを読出すときはCPUからのメッセージ。このフィールドは読出の後にクリアされる。

0250

MSGB (16ビット)レジスタを(テストのために)読出すときのCPUへのメッセージ。

0251

DMAA−DMAアドレス
OP (3ビット) 動作
000−nop
001−EPROM204からのロード
010−スイッチ120からのロード
111−リリース
EPA (13ビット) EPROM開始アドレス
LER (1ビット)ロードエラー
PMA (10ビット)プログラムメモリアドレス

0252

EMR−セマフォレジスタ
S[i] (1ビット)セマフォビット「i」。

0253

IFREER−内部フリーレジスタ(16ビット)
F[i] (1ビット)メモリ170のスクラッチパッドエリアにおけるブロック「i」がフリーであるかどうかを示す。

0254

IFREEL−内部フリーリスト
BLKN (5ビット)フリーブロック番号(すなわち、スクラッチバッファ番号:図17参照)。このレジスタの読出によってスクラッチバッファBLKNがフリーリストから取除かれる。このレジスタへの書込によって、書込まれるBLKN値によって特定されるバッファがフリーリストに戻される。

0255

MIR−MII制御レジスタ
このレジスタはMII制御インターフェイスによってイーサネット(登録商標)PHY装置と通信するために用いられる。

0256

BSY (1ビット)ビジー。新しいコマンドでセットされ、コマンド完了時にリセットされる。

0257

CMD (4ビット)コマンド
1000−スキャンオン
0000−スキャンオフ
0100−制御情報を送る
0010−ステータス読出
NV (1ビット) 有効でない。PHYからのデータが有効でないときにセットされる。

0258

FIAD (5ビット) PHYアドレス
RGAD (5ビット)レジスタアドレス
Data (16ビット) データ。

0259

追補7
マイクロコントローラ命令
3オペランド命令
これらの命令はオペランド_A とオペランド_B との間で算術論理演算を行なう。結果はオペランド_C に書込まれる。命令は以下のとおりである。

0260

DD加算
SUB−減算
OR−論理OR
AND−論理AND
XOR−論理XOR
SHL左シフト
SHR−右シフト
BITC−ビット変更
命令サイズフィールドがオペランドサイズを特定する。

0261

命令における2ビット「dt」フィールド(行先タイプ)が以下のようにオペランド_C のタイプを特定する。

0262

dt=00−オペランド_C はレジスタファイル312または特殊レジスタ315におけるレジスタである。

0263

dt=10−オペランド_C はメモリ170内にある。オペランド_Cフィールドはアドレス発生のためにロード/ストアユニットにおいて7ビット即値として用いられる。

0264

dt=x1−オペランド_C は外部メモリ200内にある。オペランド_Cフィールドはdt[1]ビットとともにアドレス発生のためにロード/ストアユニットにおいて8ビット即値として用いられる。

0265

ここで、非ゼロdtを有する命令はそのオペランドとしてリソースを用いることができない。

0266

即値バイトでの2オペランド命令
これらの命令はオペランド_A と即値バイトとの間で算術論理演算を行なう。結果はオペランド_C に書込まれる。命令は以下のとおりである。

0267

ADI−即値加算
SBI−即値減算
RI−即値論理OR
ANDI−即値論理AND
XORI−即値論理XOR
SHLI−即値左シフト
SHRI−即値右シフト
BITCI−即値ビット変更
サイズフィールドがオペランドのサイズを特定する。

0268

命令の2ビット「dt」フィールド(行先タイプ)が3オペランド命令におけるようにオペランド_C フィールドのタイプを特定する。

0269

2オペランド命令
これらの命令は2つのオペランドの間で移動演算および比較演算を行なう。命令は以下のとおりである。

0270

MOVE−オペランドAをオペランドCに移動させる
CMP−オペランドCとオペランドAとを比較する
命令のサイズフィールドがオペランドのサイズを特定する。

0271

即値での1オペランド命令
これらの命令はオペランドと即値フィールドとの間で移動演算および比較演算を行なう。命令は以下のとおりである。

0272

MVIW−即値ワードを移動させる
MVIB−即値バイトを移動させる
CPIB−即値バイトを比較する
CPIW−即値ワードを比較する
命令のサイズフィールドがオペランド_C のサイズを特定する。

0273

即値フィールドでの特殊1オペランド命令
これらの命令は以下のようにオペランドCに対して演算を行なう。

0274

SMWR−サーチマシン書込
CMD−チャネルコマンド書込
CASE−ケースステートメント
BTJ−ビットテストおよびジャンプ

0275

ロードおよびストア命令
これらの命令はオペランドAとメモリ170または200との間でロードおよびストア演算を行なう。命令は以下のとおりである。

0276

OA
STORE
「dt」フィールド(行先タイプ)が以下のように行先のタイプを特定する。

0277

dt=10−行先がメモリ170である。即値フィールドはアドレス発生のためのロード/ストアユニットにおいて7ビット即値として用いられる。

0278

dt=x1−行先がメモリ200である。即値フィールドはdt「1」ビットとともにアドレス発生のためのロード/ストアユニットにおいて8ビット即値として用いられる。

0279

特殊即値命令
この命令はCMDI(即値コマンド)である。これはコマンドFIFOに書込むために用いられる。

0280

選択された命令
ADD、SUB、ADI、SBI
フラグ:
Eは結果が0に等しいときにセットされる
Cは(ADD、ADIのための)キャリーまたは(SUB、SBIのための)ボローが(オペランドopCのサイズに基づいて)発生されたときにセットされる。

0281

OR、AND、XOR、SHL、SHR、ORI、ANDI、XORI、SHLI、SHRI
フラグ:
Eは結果が0に等しいときにセットされる。

0282

BITC−ビット変更
オペランド:ビット[31:25]=opC、[24:18]=opA、[17:16]=dt、[14:8]=opB、[7]=v
演算:opC<-opA[opB]<-v(すなわち、opCにおけるビット番号opBがvにセットされること以外では、opCがopAの値を受取る)
フラグ:Eは(opA[opB]==v)であるときにセットされる。

0283

BITCI−即値ビット変更
オペランド:ビット[31:25]=opC、[24:18]=opA、[17:16]=dt、[12:8]=imm、[7]=v
演算:opC<-opA[imm]<-v
フラグ:Eは(opA[imm]==v)であるときにセットされる。

0284

CMP−比較
オペランド;ビット[31:25]=opC、[24:18]=opA、[7:5]=オペランドサイズ
演算:opC?opA
フラグ:
Eは(opC==opA)であるときにセットされる
Gは(opC>opA)であるときにセットされる
Lは(opC<opA)であるときにセットされる。

0285

CPIW−即値ワード比較
オペランド:ビット[31:25]=opC、[23:8]=imm
演算:opC?imm
フラグ:
Eは(opC==imm)であるときにセットされる
Gは(opC>imm)であるときにセットされる
Lは(opC<imm)であるときにセットされる。

0286

CPIB−即値バイト比較
オペランド:バイト[31:25]=opC、[23:16]=bit _mask、[15:8]=imm
演算:(bit _mask & opC)?imm
フラグ:
Eは((bit _mask & opC)==imm)であるときにセットされる
Gは((bit _mask & opC)>imm)であるときにセットされる
Lは((bit _mask & opC)<imm)であるときにセットされる。

0287

LOAD−内部メモリまたは外部メモリからのロード
オペランド:ビット[31:25]=aop、[24:18]=opA、[17:16]=dt、[7]=i、[6]=f
演算:
if [dt==10] opA<-IM[{aop,imp }] ; imp=imp+i ;
if [dt==x1] opA<-XM[{aop,xmp }] ; xmp=xmp+i ;
IMは内部メモリ170であり、impは内部メモリポインタレジスタ(表A6−1)であり、XMは外部メモリ200であり、xpmは外部メモリポインタレジスタ(表A6−1)である。

0288

fビットがセットされると、ロード命令の実行は同じチャネルからの先のストア演算が完了していなければ遅延される。

0289

aopはimpまたはxmpと連結されるアドレスビットである(「{}」は連結を示す)。

0290

STORE−内部メモリまたは外部メモリへのストア
オペランド:ビット[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 ;
IM、XM、imp、xmpおよびaopがLOAD命令と同じ意味を有する。

0291

SMWR−サーチマシンコマンド書込
オペランド:ビット[31:25] = opC, [23:8] = imm
演算:scmd<-{opC[63:16], imm }。

0292

CMDI−チャネルへの即値コマンド
オペランド:ビット[31:8] = imm, [7] = L, [6] = P
演算:
Command _port <- {40'b0, imm}
ここで40′b0は40個の2進を示す。

0293

ifP=0, Command _port = cmd_i ; (イングレスコマンド)
ifP=1, Command _port = cmd_e ; (イーグレスコマンド)
命令Lフラグ(1ビット)はロック/アンロック制御である(セットされると、命令のロック状態が変更される)。

0294

CMD−チャネルへのコマンド
オペランド:ビット[31:25] = opC, [23:8] = imm, [7] = L, [6] = P
演算:
Command _port <- {opC[63:16],imm}
ifP=0, Command _port = cmd_i ; (イングレスコマンド)
ifP=1, Command _port = cmd_e ; (イーグレスコマンド)
命令における1ビットLフラグがロック/アンロック制御である(セットされると、ロック状態が変更される)。

0295

CASE
オペランド:ビット[31:25] = opC, [23:16] = bit_mask, [12:8] =シフト
演算:PC<-PC+ ((opC&bit _mask)>>シフト)+1。

0296

BTJ−ビットテストおよびジャンプ
オペランド:ビット[31:25] = opC, [24:13] = addr, [12:8] = ビット, [7] = v
演算:if(opC[bit]==v )then PC<-addr 。

0297

追補8
サーチマシン
サーチマシンは周知のパトリシアツリー構造を用いる(1996年8月13日にG. C. Stone に発行され、引用によりここに援用される米国特許第5,546,390号「基数判定パケット処理のための方法および装置」(“Method and Apparatus for Radix Decision Packet Processing ”)を参照されたい。

0298

図21ツリーノード2400を示す。各ノードは64ビットの4ワードの長さである。ノードフォーマットは以下のとおりである。

0299

0300

0301

0302

0303

0304

0305

0306

0307

図面の簡単な説明

0308

この発明によるプロセッサを含むシステムのブロック図である。
図1のシステムにおけるリソースを示すブロック図である。
図1のシステムにおけるデータフレーム処理を示すタイミング図である。
図1のシステムにおけるデータフレーム処理を示すタイミング図である。
図1のシステムにおいて異なるタスクがどのように共用されるリソースにアクセスするのかを示す論理図である。
図1のシステムにおいて用いられるプロセッサのブロック図である。
図6のプロセッサの命令実行パイプラインを示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図1のシステムにおけるタスクおよびリソース状態遷移を示す図である。
図6のプロセッサのタスク制御ブロック回路のブロック図である。
図6のプロセッサのタスク制御ブロック回路のブロック図である。
図1のシステムのためのメモリマップの図である。
図1のシステムのためのデータエリアメモリマップの図である。
図1のプロセッサのためのレジスタファイルマップの図である。
図1のプロセッサのためのデータメモリマップの図である。
図19のデータメモリのためのアドレス発生を示す図である。
図1のシステムにより用いられるアドレス導出データベースにおけるツリーノードを示す図である。

符号の説明

0309

110ポートインターフェイス(PIF)回路、120ATMスイッチ、130 MAC、140スライサ、150チャネル、160マイクロコントローラ、170
内部メモリ、190サーチマシン(SM)、200外部メモリ、210入力制御ブロック、220 データFIFO、230リクエストFIFO、240ステータスFIFO、250出力制御、260コマンドFIFO、310 マイクロコントローラ命令実行ユニット、312レジスタファイル、314マイクロコントローラプログラムメモリ、315特殊レジスタブロック、316データメモリ、318ALU、320タスク制御ブロック、330 ロード/ストアユニット(LSU)、340DMAブロック、410配線、704、720、740、804、820、840、920、930ダイヤグラム、730サスペンド条件、734リリース条件、1304、1320、1322、1330、1350、1360、1362ラッチ、1354 次の状態および条件発生器、1358バス、1380リソース次ステージ発生器、1390 回路、1394、1406マルチプレクサ、1398タスク次状態発生器、1401サスペンド論理およびリリース条件発生器、1403アービタ、1404 配線、1610スクラッチバッファ。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ