【誤訳訂正書】
【提出日】平成24年12月27日(2012.12.27)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】インタフェース・プロセッサ
【技術分野】
【０００１】
本発明は、インタフェース・プロセッサに関し、特に、他のプロセッサまたは外部装置との接続を行うインタフェース・プロセッサに関するが、これに限定されるものではない。
【背景技術】
【０００２】
プロセッサ設計者の挑戦の1つとして、プロセッサとの通信を要求する外部装置の数が増加の一途をたどることをどのように扱うかである。一般に、これは、外部装置に接続されたポートに発生するアクティビティを処理するために、プロセッサにある種類の割込み処理能力を持たせることにより対処される。例えば、１ポートにつき複数の外部装置に対処するために、より高度なインタフェース・ロジックが、これらのポートにおいて用いられることになる。
【０００３】
インターフェイシングは多種多様の異なる状況において必要とされる。背景的な例としてここで述べる1つの状況は、モバイル・アプリケーション処理である。
【０００４】
図1は、モバイル・アプリケーション・プロセッサ２のアプリケーション例を示す。アプリケーション・プロセッサ２は、ＣＰＵ４と、複数の周辺装置８との接続を行う複数のインタフェース・コントローラ６を含む。インタフェース・コントローラは、ハード・ディスク・ドライブ(ＨＤＤ)８ａ及びＳＤＲＡＭメモリ８ｂとの接続を行うためのメモリ・コントローラー６ａ;カメラ８ｃとの接続を行うためのビデオ・コントローラ６ｂ；ＬＣＤディスプレイ８ｄとの接続を行うためのディスプレイ・コントローラ６ｃ;マイクロホン８ｅ、スピーカー８ｆ、ヘッドセット８ｇとの接続を行うためのオーディオ・コントローラ６ｄ;キーボード８ｈ、ユニバーサル・シリアル・バス(USB)デバイス８ｉ、セキュア・ディジタル(ＳＤ)カード８ｊ、マルチメディア・カード(ＭＭＣ)８ｋ、ユニバーサル非同期送受信装置(ＵＡＲＴ)デバイス８ｌとの接続を行うための接続コントローラ６ｅとを含む。インタフェース・コントローラ６は、一般的にはバス３を介してＣＰＵ４に接続される。システムはまた電力コントローラ１０と無線プロセッサ１２を含む。
【０００５】
尚、インタフェース・コントローラ６は、多少模式的に示されているが、概してある種の専用のＩ／Ｏロジックまたは特別に構成されたポートを表している。
【０００６】
従来は、外部インターフェイシングは、割り込みを用いて、またはポーリングにより達成されている。割り込みが用いられる場合、外部の周辺装置は、プロセッサに入力するデータの用意ができた、またはプロセッサに対してデータを要求している、のいずれかをプロセッサに通知するための信号を送る。ポーリングが用いられる場合、プロセッサは、絶えずデバイスの状態をチェックして、データを供給するかまたは受け取る用意ができているかどうかを判定する。
【０００７】
図1のようなアプリケーション・プロセッサ２を実現する1つの可能性は、アプリケーション・スペシフィック・インテグレーテド・サーキット（Application Specific Integrated Circuit）マイクロコントローラ（ＡＳＩＣ）を用いることである。ＡＳＩＣは、特定用途に専用化され、そのアプリケーションに適応するように最適化されたマイクロプロセッサーを含むであろうハードワイヤードのデバイスである。これらは、機能の割には、概して割安であり、他の構成を選択する場合よりも電力消費が少ない。しかしながら、これらは設計が複雑であり、事前設計が必要であり、容易には再構成ができない。
【０００８】
他の可能性はフィールド・プログラマブル・ゲート・アレイ（Field Programmable Gate Array）（ＦＰＧＡ）デバイスを用いることである。ＦＰＧＡは、製造後に「現場において」構成できる半導体デバイスである。ＦＰＧＡを構成するには、先ずコンピューターを用いて、例えば、回路図を描くまたは機能を記述したテキスト・ファイルを作成することによって、所望の論理機能をモデル化する。ＦＰＧＡは、静的に構成された相互接続を介して通信するルックアップ・テーブルのアレイを含む。そのコンピュータ・モデルはＦＰＧＡベンダによって提供されるソフトウェアを用いてコンパイルされ、ＦＰＧＡルックアップ・テーブルにダウンロードされ得るバイナリ・ファイルを作成する。これにより、装置メーカーは自分の個々のニーズを満たすＦＰＧＡを仕立てることができる。
【０００９】
この例では、インタフェース・コントローラ６はＦＰＧＡとして実現される。これには、携帯電話のメーカーが汎用のＦＰＧＡデバイス２を購入することができ、これらを所望のアプリケーションに固有になるようにオンサイトで(つまり「現場で」)構成するという利便性がある。しかしながら、ＦＰＧＡの短所はＡＳＩＣより高価で、スピードがより遅く、電力消費がより多いということである。
【００１０】
代替例として、チップ２全体をＦＰＧＡで実現することもでき、または、チップ２を、チップ２とそれぞれの周辺装置８の間に接続される個別のＦＰＧＡチップを備えた汎用プロセッサとすることもできる。しかしながら、これらの選択肢は、大抵の携帯電話や他のコンシューマ・デバイスにとって、さらにより高価で、また電力消費が法外に大きくなるだろう。
【００１１】
ＡＳＩＣなみの価格、スピード、適用範囲、エネルギー消費量レベルを備えており、かつＦＰＧＡの構成容易性を達成することが有益であると考えられる。
【発明の概要】
【００１２】
本発明の1つの態様によれば、次を含むプロセッサが提供される:第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるように動作可能な第1のポートと；第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるように動作可能な第２のポートと；マルチプルスレッドを実行するように構成された実行ユニットと；前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行用の前記マルチプルスレッドをスケジューリングするように構成されたスレッド・スケジューラであって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューラを含み、第1のアクティビティと第２のアクティビティは、それぞれ対応するそれぞれのスレッドに関係付けられている。
【００１３】
スレッドのそれぞれがそれぞれのポートのアクティビティに関係付けられ、そしてスレッド・スケジューラはそのアクティビティのインディケーションを待つ間、スレッドを一時中断するために接続されるので、その結果、プロセッサは、ポートにおいて発生するアクティビティにすばやく対応するために、都合よく「準備ができている」。本発明は、こうして、外部からの刺激に対して高速な応答が望まれるアプリケーションにおいて多大な進歩をもたらす。さらに、スレッドが一時中断されている間他のスレッドがまだスケジュールされるべき場合、その時、スレッド・スケジューラはそれらのスレッドをスケジュールし始めることが可能である。
【００１４】
この一時中断スレッド・アプローチは、高速な反応速度が必要な場合、割り込みの使用より好ましい。一時中断スレッドを用いると、スレッド・スケジューラは、関係付けられたアクティビティを見込んでスレッドを実行する用意をすることが可能である。このことは、上記のように、プロセッサは反応する用意ができているということを意味する。これとは対照的に、割り込みを用いると、実行ユニットは外部装置からの信号によって割り込まれ、さらに場合によっては何か無関係なコードを実行することになる。割り込みケースでは、割り込みが作動する前に、現時点のプログラム状態は保存されなければならない。したがって、割り込みを用いる場合の反応速度は非常に遅い。ポーリングは、連続的なクエリーとレスポンスが必要なため、エネルギー効率が劣る。
【００１５】
スレッド・スケジューラは、第1のポートに関係付けられた識別子レジスタに、第1のアクティビティを待つ間一時中断された第1のスレッドに関係する第1のスレッド識別子を、送信するように構成してもよい。スレッド・スケジューラは、第２のポートに関係付けられた識別子レジスタに、第２のアクティビティを待つ間一時中断された第２のスレッドに関係する第２のスレッド識別子を、送信するように構成してもよい。そのような実施形態では、スレッド・スケジューラはスレッドの実行を管理するよう適応している、しかし、それが、所定のアクティビティの条件であるスレッド内の命令に遭遇した時、その時は、スレッド・スケジューラは、それに対する責任をそれが関係付けられているそれぞれのポートに渡すことにより、スレッドを都合よく「脇に置く」ことができる。これはまた反応速度を促進する。
【００１６】
スレッド・スケジューラは、前記第1のスレッドを一時中断すると、第1のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するように構成してもよく；また、継続点ベクトルは第1のアクティビティに依存して実行ユニットに返されるようにしてもよい。継続点ベクトルは、それぞれのアクティビティが発生した時に、実行が継続されるべきコードにおけるポイントを識別する。これは、スレッドに対する追加的責任がポートに移されることが好ましく、保留の命令で満たされたままになっている、必要のないインストラクション・バッファを解放してもよい。
【００１７】
さらに、継続点ベクトルを使用すると、マルチプルアクティビティ（またはイベント）が１スレッド毎に処理されることが可能になる。こうして、第1のスレッドは、そのアクティビティに依存してそれぞれのインディケーションを発生させるのにそれぞれ動作可能な複数のポートからのアクティビティに関係付けられてもよく；実行ユニットは、複数の継続点ベクトルをそれぞれ前記複数のポートのそれぞれの1つに送信するよう適応しており、その場合それぞれの継続点ベクトルはそれぞれのアクティビティに依存して返されてもよい；また、スレッド・スケジューラは、第1のスレッドの実行をそれぞれのインディケーションの少なくとも1つを受信するまで、一時中断するよう適応していてもよい。
【００１８】
プロセッサは、一時中断スレッドのすべてのスレッド識別子がポートに送られてしまうと、実行ユニット、スレッド・スケジューラ、クロックの内の少なくとも1つの電源を切るよう適応していてもよい。プロセッサは、それぞれのポートからスレッド識別子の少なくとも1つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも1つの電源を入れるよう適応していてもよい。こうして、すべてのスレッドが、スケジュールから外され、それらのそれぞれのアクティビティに従って、それぞれのポートに渡されると、そのとき、プロセッサは、アクティビティの1つが発生するまで、いくつかまたは全部のコンポーネントの電源を切るよう適応することが可能である。これは、システムの電力消費を大きく改善する。
【００１９】
第1のおよび第２のポートの少なくとも1つは、アクティビティ処理ロジックを含んでもよく、且つ条件を格納するための少なくとも1つの条件レジスタに関係付けられていてもよく、その場合そのアクティビティ処理ロジックはポートにおけるアクティビティをモニターし、そして前記条件を満たす前記アクティビティに依存して前記インディケーションを発生させるように構成されている。実行ユニットは各条件レジスタにそれぞれの条件を送信するように構成されてもよい。好ましくは、ポートがより特別で多様なタイプの条件を処理できるように、スレッド・スケジューラがポートに条件を提供できるようにすることにより、システムの普遍性を改善する。
【００２０】
ポートイベント有効フラグは、第1のポートに関係付けられていてもよく；また、スレッド・スケジューラは、ポートイベント有効フラグを有効にすることにより、前記第1のアクティビティが前記スケジューリングを始動させることができるようにし、またポートイベント有効フラグを無効にすることにより前記第1のアクティビティが前記スケジューリングを始動できないように構成してもよい。スレッドイベント有効フラグは、第1のスレッドに関係付けられていてもよく；また、スレッド・スケジューラは、スレッドイベント有効フラグを有効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができるようにし、またスレッドイベント有効フラグを無効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができないようにするよう適応していてもよい。スレッド・スケジューラは、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つが無効にされている時、ポートからの第3のアクティビティの第3のインディケーションを待つ間、第1のスレッドの実行を一時中断するように構成していてもよい。
【００２１】
ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つは第1のアクティビティの発生によって自動的に無効にされてもよい。
【００２２】
複数のポートイベント有効フラグのそれぞれは、第1のスレッドに関係付けられた複数のポートのそれぞれに関係付けられていてもよく；スレッド・スケジューラは、スレッドイベント有効フラグを有効にするように、且つ、続けて、前記複数のポートイベント有効フラグを有効にするように構成されてもよい。
【００２３】
プロセッサは、バスにより実行ユニットに接続されたプログラム・メモリを含んでもよいし、そこでは、スレッド・スケジューラは、第1のおよび第２のポートのそれぞれから前記インディケーションを受信するために、前記バスとは別の少なくとも1つの接続手段により接続されている。これが、ポートとスレッド・スケジューラ間の通信におけるバス調停の必要性をなくし、それによりプロセッサの反応速度をさらに改善する。
【００２４】
プロセッサは複数セットのスレッド・レジスタを含んでもよいし、各セットのスレッド・レジスタは前記マルチプルスレッドのそれぞれ1つに関係する情報を格納するように割り付けられている。プロセッサは、前記セットの少なくとも2つの間の少なくとも1つのチャネルを含んでもよく、またスレッド・スケジューラは、前記チャネル上に発生するアクティビティに基づいて、スレッドをスケジュールするよう適応していてもよい。
【００２５】
プロセッサはチップ上に実装されてもよい。前記第1と第２のポートの少なくとも1つは前記チップ上の他のプロセッサと通信するための内部ポートであってもよい。前記第1と第２のポートの少なくとも1つは前記チップの外のデバイスと通信するための外部ポートであってもよい。少なくとも1つの外部ポートは、チップの物理的な境界におけるピンに発生する立ち上がり信号エッジまたは立ち下がり信号エッジを検出するためのピンポートであってもよい。少なくとも1つの外部ポートは、ポートにおける1個以上のビットの瞬間の論理レベルを処理するためのデータポートであってもよい。
【００２６】
実行ユニットは、スレッドを一時中断しそして実行するための専用の命令を認識し実行させるように構成してもよい。
【００２７】
スレッド・スケジューラは、割り込みに基づいてスレッドをスケジュールするのにさらに適応していてもよい。割り込みに基づいてスケジュールされたスレッドは第1のスレッドであり、その割り込みは一時中断中第1のスレッドに割り込む。
【００２８】
スレッド・スケジューラは、もし関係付けられたアクティビティがそのアクティビティに依存したスレッド内のインストラクションの実行時または前に発生した場合、一時中断なしでそのスレッドをスケジュールするように構成していてもよい。
【００２９】
本発明のさらなる態様によれば、第1のポートと第２のポートを有するプロセッサ内において、実行用のマルチプルスレッドをスケジューリングする方法が提供され、その方法は次を含む:第1のポートにおける第1のアクティビティと第２のポートにおける第２のアクティビティに対応するそれぞれのスレッドを関係付けるステップと；第1のアクティビティに依存して第1のポートの第1のインディケーションを発生させるステップと；第２のアクティビティに依存して第２のポートの第２のインディケーションを発生させるステップと；前記インディケーションに基づいて実行用のスレッドをスケジューリングするステップであって、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含むステップと；前記スケジューリングに依存してそれらを実行することによりスレッドをランさせるステップ。
【００３０】
本発明の他の態様によれば、実行用のマルチプルスレッドのスケジューリングにおいて使用されるポートが提供され、そのポートは次を含む：ポートにおけるアクティビティに依存するインディケーションを発生させるように構成されたアクティビティ処理ロジックと、前記アクティビティに関係付けられたスレッドを識別する情報を格納するためのレジスタと、条件を格納するためのレジスタと；を含み、前記アクティビティが前記条件を満たす時、アクティビティ処理ロジックはオンチップで第1のインディケーションを送信するよう適応している。
【００３１】
本発明の他の態様によれば、第1のポートと第２のポートを有するプロセッサ内において、実行用のマルチプルスレッドをスケジュールするためのスレッド・スケジューラが提供され、そこにおいて：スレッド・スケジューラは、第1のポートにおける第1のアクティビティに依存するその第1のポートが発生させた第1のインディケーションを受信するよう適応しており;スレッド・スケジューラは、第２のポートにおける第２のアクティビティに依存するその第２のポートが発生させた第２のインディケーションを受信するよう適応しており;そしてスレッド・スケジューラは、前記インディケーションに基づいて、実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするよう構成しており、前記スケジューリングは、スレッドの実行をそれぞれのインディケーションの受信まで一時中断することを含んでおり;その場合、第1のアクティビティと第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられている。
【００３２】
本発明の他の態様によれば、モバイル・アプリケーション・プロセッサと、少なくとも1つの周辺装置と、そして該モバイル・アプリケーション・プロセッサと該周辺装置の間に接続されたインタフェース・プロセッサを有するモバイル端末が提供され、そのインタフェース・プロセッサは次を含む：第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な該第1のポートと;第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるよう動作可能な該第２のポートと;マルチプルスレッドを実行するように構成された実行ユニットと;前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするように構成され、前記スケジューリングは、それぞれのレディ信号の受信まで、スレッドの実行を一時中断することを含む、スレッド・スケジューラと；を含み、第1のアクティビティと第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられている。
【００３３】
本発明の他の態様によれば、相互に接続されたプロセッサのアレイが提供され、 前記プロセッサの少なくとも1つは次を含んでいる：第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な該第1のポートと;第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるよう動作可能な該第２のポートと;マルチプルスレッドを実行するように構成された実行ユニットと;前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするように構成され、前記スケジューリングはそれぞれのレディ信号の受信までスレッドの実行を一時中断することを含む、スレッド・スケジューラと；を含み、第1のアクティビティと第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられ、且つ、前記第1と第２のポートの少なくとも1つは、前記少なくとも1つのプロセッサを、アレイ内の他のプロセッサに接続している。
【００３４】
本発明のよりよい理解のために、また、同発明がどのように実施されてもよいかを示すために、対応する図面がここで、例として引用される。
【図面の簡単な説明】
【００３５】
【図１】図１は、当該技術で公知のＦＰＧＡデバイスの適用例を示す。
【図２】図２は、インタフェース・プロセッサの適用応用例を示す。
【図２Ａ】図２ａはインタフェース・プロセッサの他の適用例を示す。
【図３】図３は、インタフェース・プロセッサのアーキテクチャの模式図である。
【図４】図４は、ポートの模式図である。
【図５】図５は、スレッド・レジスタ・セットの模式図である。
【図６】図６は、スレッド・スケジューラのオペレーションを示す流れ図である。
【図７】図７は、スレッド・レジスタ・セット間のチャネルの模式図である。
【図７Ａ】図７Ａは、チャネル・エンドの模式図である。
【発明を実施するための形態】
【００３６】
図２は、インタフェース・プロセッサの携帯電話への適用例を示している。モバイル・アプリケーション・プロセッサ２は複数の周辺装置８と通信する必要がある。アプリケーション・プロセッサ２は、図１に示されているようにパワー・コントローラ１０と無線プロセッサ１２に加えて、バス３、ＣＰＵ４、ハード・ディスク・ドライブ（ＨＤＤ）８ａとＳＤＲＡＭメモリ８ｂとの接続を行うためのメモリ・コントローラー６ａを備える。
【００３７】
しかしながら、図２の構成は、専用コントローラ６の代わりに、ＣＰＵ４が汎用ポート７を介して外部と通信することを可能にしている。この例では、カメラ８ｃとＬＣＤディスプレイ８ｄとの接続を行うために汎用ポート７ａと７ｂを備えており、マイクロホン８ｅ、スピーカー８ｆ、ヘッドセット８ｇとの接続を行うために汎用ポート７ｃを備えており、キーボード８ｈ、ユニバーサル・シリアル・バス(ＵＳＢ)デバイス８ｉ、セキュア・ディジタル(ＳＤ)カード８ｊ、及びマルチメディア・カード(ＭＭＣ)８ｋ、ユニバーサル非同期送受信装置(ＵＡＲＴ)デバイス８ｌとの接続を行うために汎用ポート７ｄを備えている。
【００３８】
図２において、インタフェース・プロセッサ１４ａ、１４ｂ、１４ｃは、関連するポート7の出力側に置かれている。すなわち、第1のインタフェース・プロセッサ１４ａを画像デバイス８ｃ〜８ｄと汎用ポート７ａ〜７ｂの間に接続し、第２のインタフェース・プロセッサ１４ｂをオーディオデバイス８ｅ〜８ｇとの間に接続し、第３のインタフェース・プロセッサ１４ｂを汎用ポート7dと様々な接続デバイス８ｈ〜８ｍの間に接続している。アプリケーション固有のディスプレイ、オーディオ、接続機能は、インタフェース・プロセッサ１４ａ〜１４ｃによって後述する方法で実現されるので、ポート７は単に汎用ポートであればよい。ＦＰＧＡが提供する柔軟性と構成性は、インタフェース・プロセッサ１４が提供するので、ポート７はＦＰＧＡロジックを用いる必要はない。インタフェース・プロセッサ１４ａは、ポート７ａと７ｂに接続されたポート２２ａと２２ｂを、また、外部装置８ｃ〜８ｇに接続されたポート２２ｃ、２２ｄ、２２ｅと２２ｆを有している。インタフェース・プロセッサ１４ｂと１４ｃは、図２には示されていないが、同様のポートを有している。
【００３９】
インタフェース・プロセッサは、一般的には、インタフェース部を介してデータを転送するために用いる特定のプロトコル、パラレル・フォーマットとシリアル・フォーマット間変換を含んだデータのリフォーマッティング、そして場合によってはそれを符号化し、圧縮し、暗号化するといったより高い水準の機能の実現に関係している。
【００４０】
インタフェース・プロセッサの他の適用例は、図２ａに示されたマルチ・プロセッサ・チップ２０２におけるタイル状に並べられた形である。このようなチップ２０２は、チップ２０２上のプロセッサ１４相互間の通信をサポートする高性能相互接続２０４と、システムがマルチチップで容易に構成できるようにするチップ間リンク２０６を使用している。各プロセッサ１４はそれぞれ、そのチップ間リンク２０６に接続され、ポート２２を介して高性能接続２０４に接続されている。
【００４１】
下記にさらに詳しく述べるインタフェース・プロセッサの重要な特徴は、ポート２２におけるアクティビティを処理する能力である。各インタフェース・プロセッサはそれぞれＣＰＵとメモリと通信部を備える。ＣＰＵとポートの間の直接的で応答的な接続を可能にするために、各プロセッサはそれぞれ多くの並行プログラム・スレッドの実行に対してハードウェア・サポートを有しており、それぞれは一連の命令を含み、少なくともそれらのうちのいくつかはポートにおけるアクティビティの処理を特に担っている。下記にさらに詳しく述べるように、ハードウェア・サポートは次のものを含んでいる：
- 各スレッド向けの１セットのレジスタ、
- どのスレッドを実行するかを動的に選択するスレッド・スケジューラ、
- 入出力に用いられる1セットのポート(ポート22)。
【００４２】
各プロセッサ上で小セットのスレッドを使用すると、プロセッサにより処理される他の保留タスクと一緒に通信または入出力が進行することが可能になり、リモート・インタフェース・プロセッサとの通信中に他のスレッドが一時中断されている間いくつかのスレッドを継続させていることにより相互接続内に遅延を隠すことが可能になる。
【００４３】
図３は本発明の一実施形態係わるインタフェース・プロセッサ１４のアーキテクチャ例を概略的に示している。プロセッサ１４はスレッド・スケジューラ１８の制御の下でインストラクションのスレッドを実行するための実行ユニット１６を備える。プロセッサ１４は、プログラムコードと他のデータを保持するためのランダムアクセスメモリ(ＲＡＭ）２４と、ブートコードのような永続情報を格納するためのリードオンリーメモリ(ＲＯＭ)(図示せず)とをさらに備える。
【００４４】
スレッド・スケジューラ１８は実行ユニット１６がどのスレッドを実行すべきか動的に選択する。従来、スレッド・スケジューラの機能は、プロセッサを全面的に占有させておくためにプログラム・メモリからのスレッドを単にスケジュールすることであった。しかしながら、本発明によれば、スレッド・スケジューラ１８によるスケジューリングもポート２２におけるアクティビティと関連している。尚、この点において、スレッドがポートにおける入力または出力アクティビティの結果として実行可能になる場合に、遅延を最小にするようにスレッド・スケジューラがポート２２に直接結合されてもよい。
【００４５】
スレッド・スケジューラ１８によって考慮中のｍ個のスレッドのそれぞれは、スレッド・スケジューラ１８がアクセスを持つ、一揃いのレジスタ２０におけるスレッド・レジスタ２０１〜２０ｍのそれぞれのセットによって表される。メモリ２４から取り出された命令を実行ユニット１６へ次に送出する前に一時的に保持するために、インストラクション・バッファ(ＩＮＳＴＲ)１９も備えられている。これらのレジスタとバッファの詳細は後で述べる。
【００４６】
ｍ個のスレッドの中から、スレッド・スケジューラ１８はｎ個の実行可能なスレッドのセットを維持する。そのセットは「ラン」と命名され、そこから命令が、順に、好ましくはラウンドロビン方式で取り込まれる。スレッドが継続できない時は、それを実行セットから取り外すことにより一時中断される。その理由は、例えば、そのスレッドが下記のタイプのアクティビティの1つ以上を待っているためであってもよい:
- そのレジスタは実行することが可能になる前に初期化されている、
- それは、準備ができたポートまたは利用可能なデータが全く無いポートからの入力を試みた、
- それは、準備ができたポートまたはデータ用の余地が全く無いないポートに出力を試みた、
- それは、ポートが入力に対して準備ができた状態になる時に生成され得る1つ以上のイベントを待たせる命令を実行した。
【００４７】
尚、ここに用いられている用語「イベント」は、基本的な入出力操作とはわずかに異なる特定タイプの操作を指す。その区別は、図４と図５に関連して以下で述べる。
【００４８】
好ましくは、高速反応速度を促進するために、直結ハードワイヤード接続２８がスレッド・スケジューラ１８と実行ユニット１６の間に設けられ、スレッド・スケジューラ１８が、実行ユニット１６がどのスレッドを取り出して実行するべきかを、制御できるようにしている。直結ハードワイヤード・パス３０ａ、３０ｂ、３０ｃが同様にスレッド・スケジューラ１８とポート２２のそれぞれの間に設けられており;また、直結ハードワイヤード・パス２９１〜２９ｍがスレッド・スケジューラ１８とレジスタ２０のそれぞれの間に設けられている。これらの直結パスは、スレッド・スケジューラが、1つ以上のポート２２にそれぞれのスレッドを関係付け、あるアクティビティが生じた時、そのポートからレディ・インディケーションを特定的に返すことを可能にする制御パスを好適に提供し、そしてそのプロセッサがポート２２に生じるアクティビティまたは刺激に速く対応することを可能にする。ポートに関してのスレッド・スケジューラの動作は、図４と図６に関して以下で述べる。
【００４９】
実行ユニット１６はまた、直結接続２７と３１を介してポート２２ａ〜２２ｃのそれぞれとレジスタ２０１〜２０ｍのそれぞれに対してアクセスを行い、それによりコア・プロセッサ、レジスタ、外部環境の間の直接リンクを提供する。好ましくは、これらの直結パスは、実行ユニットが条件をポートへ渡すことができるようにする制御パスをさらに提供する。これは、図４に関してさらに詳細に以下で述べる。直結パス２７と３１は、同様にデータがスレッド・レジスタ２０とポート２２の間で直接入出力されるようにしてもよく、それによりスレッドが外部環境に直接通信することが可能になる。例えば、データはメモリ２４に書き込まれた後に取り出されるのではなく、外部装置からスレッドのオペランド・レジスタのうちの1つに直接書き込まれるように構成できる。逆に、あるオペレーションの後に、オペランド・レジスタからのデータは実行ユニット１６によってピックアップされ、ポート２２から外へ直接送り出されてもよい。これは反応速度を著しく改善する。
【００５０】
なお、「直結接続」または「直結パス」というのは実行ユニットとプログラム・メモリ２４の間の接続とは別の接続を意味している。こうして、例えば、スレッド・スケジューラ１８と実行ユニット１６は、データが格納され、然る後にメモリ２４から取り出するということではなく、ポート２２からのデータ入力にアクセスを持つ。特定的には、実行ユニット１６とメモリ２４の間の接続がバス３を介したものであると、その場合、「直結の」接続またはパスは、そのバスとは別のものを意味する。こうして、ポート２２、レジスタ２０、スレッド・スケジューラ１８、実行ユニット１６の間の様々な通信は全てバス調停を必要とせずに起こり得るものであって、これが反応速度改善する。ポート２２は、また、バス１３との追加の接続(図示せず)を備え留こうし得とすることもできる。
【００５１】
本アプリケーションに用いられている用語「ポート」は、「ピンポート」または「データポート」のいずれを指す場合も可能である。ピンポートは、プロセッサチップの物理的な境界のピンに生じる信号の個々の論理的な変遷、つまり立ち上り・立ち下りエッジの検出を担っている。データポートはこれらが、典型的にはI/Ｏバッファに蓄積されてワードのようなデータの一部を構成する１個以上のビットを処理することが可能であるという点において「より高いレベル」である。立ち上り・立ち下りエッジを検出する代わりに、データポートは、特定の瞬間のビット(複数可)の状態かロジック・レベルを処理する。データポートはオン/オフ・チップであってもよく、または、同じチップ上に埋め込まれた他のプロセッサへのポートであってもよい。尚、「ピンポート」と「データポート」は、実は、同じ実在のポートの異なるモードを指してもよい。
【００５２】
図４は本発明の好ましい実施形態によるポート２２を模式的に示している。ポート２２は、プロセッサ１４との間の入出力データをパスするI/Ｏバッファ３２を含む。さらに、各ポート２２は、ポートに生じるアクティビティをモニターし、少なくとも１レディ・ビットまたはフラグ３７によってあるアクティビティの発生を伝えるアクティビティ処理ロジック３６を含む。レディ・フラグ３７は直結パス３０を介してスレッド・スケジューラに好適に伝えられる。ポートが検出し得る可能なアクティビティは次のものを含んでいる:
- データがポートに入力された、
- ある特定データがポートに入力された、かつ/または、
- ポートは出力に使用可能になった。
【００５３】
このようなアクティビティの検出を容易にするために、ポート２２は１セットのレジスタ３８を備えている。これらは、関連するスレッドの識別子を格納するためのスレッド識別子（ＴＩＤ）レジスタ、1つ以上の条件を格納するためのコントロール(ＣＴＲＬ)レジスタ、実行が一時中断されたプログラム上の位置を格納するための継続点ベクトル(ＶＥＣＴＯＲ)レジスタ、また条件に関連したデータを格納するためのデータ(ＤＡＴＡ)レジスタを含む。ＴＩＤ値は、直結パス３０(図３では、３０ａ、３０ｂ、３０ｃ)を介してスレッド・スケジューラ１８によってレジスタ３８に書き込まれ、ＶＥＣＴＯＲ、ＣＴＲＬ、ＤＡＴＡ値は、直結パス３１を介して実行ユニット１６によって書き込まれる。ＴＩＤは、関連するスレッドを識別するために、所望のアクティビティを検出すると、スレッド・スケジューラ１８に返される。アクティビティ・ロジックはまたイネーブルフラグ３９を含む。これについては、以下でさらに詳細に述べる。
【００５４】
なお、レジスタ３８は、ポート２２内に含まれている形で、図４に示されているが、これらは実際、プロセッサ１４内のどこか他のところに位置して、単にポート２２に関係付けられていてもよい。
【００５５】
図５はスレッドを表すために用いられているスレッド・レジスタ２０のバンク例を示す。バンク２０はスレッド・スケジューラ１８によって現在想定されているスレッドＴ１〜Ｔｍのそれぞれに対応する複数セットのレジスタを含む。この好適な例で、各スレッドの状態は、２個のコントロール・レジスタ、４個のアクセス・レジスタと１２個のオペランド・レジスタという１８個のレジスタによって表されている。これらは以下のとおりである。
【００５６】
コントロール・レジスタ:
-ＰＣはプログラム・カウンタである
-ＳＲはステータス・レジスタである
アクセス・レジスタ:
-ＧＰはグローバル・プール・ポインタである
-ＤＰはデータ・ポインタである
-ＳＰはスタック・ポインタである
-ＬＲはリンク・レジスタである
オペランド・レジスタ:ＯＰ１〜ＯＰ１２
コントロール・レジスタは、スレッドのステータスについての情報と、スレッドの実行を制御する際に使用される情報を格納する。特に、スレッドがイベントまたは割り込みを受理する能力は、スレッド・ステータス・レジスタＳＲの中に保持された情報によって制御される。アクセス・レジスタは、プロシージャのローカル変数に用いられるスタック・ポインタと、プロシージャ間で共有されるデータに通常用いられるデータ・ポインタと、大きな定数やプロシージャ・エントリ・ポイントにアクセスするために用いられる定数プールポインタとを含む。オペランド・レジスタＯＰ１〜ＯＰ１２は、算術・論理演算を実行し、データ構造にアクセスし、サブルーチンを呼び出す命令によって用いられている。
【００５７】
多くのインストラクション・バッファ（ＩＮＳＴＲ）１９もまた、スレッドの実際の命令を一時的に格納するために提供されている。各インストラクション・バッファは、６４ビット長が好適であるが、各命令を１６ビット長とすれば、１バッファ当たり４命令が可能になる。命令は、スレッド・スケジューラ１８の制御の下でプログラム・メモリ２４から取り出され、インストラクション・バッファ１９に一時的に置かれる。
【００５８】
実行ユニットは、レジスタ２０とバッファ１９のそれぞれにアクセスを行う。さらに、スレッド・スケジューラ１８は少なくとも各スレッドそれぞれに対するステータス・レジスタＳＲにアクセスを行う。
【００５９】
上述のように、ここに用いられているような用語「イベント」は、特定タイプのオペレーション、または、その特定タイプのオペレーションに対応するアクティビティを指す。イベントベースのオペレーションは、基本的な入出力オペレーションやワークとはわずかに以下のように異なる。イベントは、実行ユニット１６からの継続点ベクトルと、スレッド・スケジューラ１８からのスレッド識別子を、ポート２２に関係付けられたＶＥＣＴＯＲとＴＩＤのレジスタ３８に、好適には直結パス３１と３０を介して、転送することでスレッド用に最初にセットされる。関係付けられた条件とコンディション・データもポート２２のＣＴＲＬとＤＡＴＡのレジスタ３８に書き込むように構成することもできる。イベントは、ポートにこのようにセットされるが、必ずしもイネーブルにする必要はない。ポートをイネーブルにしてイベントのインディケーションを発生させるためには、ポートのイネーブルフラグ３９も好適には直結パス３０経由スレッド・スケジューラ１８により有効にされなければならない。さらに、スレッドそのものをイベント受理可能にするために、スレッド向けのそれぞれ対応するステータス・レジスタＳＲのイベントイネーブル（ＥＥ）フラグは、イベントイネーブルドにセットされなければならない。一旦イベントがこのようにセットされイネーブルになれば、スレッドは、スレッド・スケジューラ１８に作用するイベントベースの待ち命令を用いて、イベント待ちで一時中断させることができる。この点では、現時点での保留命令は、関連するインストラクション・バッファ１９から廃棄してもよい。イベントが発生した時、例えば、あるデータがポートに入力された時、その発生は、ポート２２からのスレッド識別子と継続点ベクトルが返されることによって、スレッド・スケジューラ１８と実行ユニット１６へ伝えられる。これが、継続点ベクトルにおける命令が、プログラム・メモリ24からインストラクション・バッファ１９へ取り出され、コードの然るべきポイントにおける実行の再開を可能にする。
【００６０】
イベントが発生した時、スレッドが発生直後のイベントに直ちに応答するのを防ぐために、それぞれ対応のステータス・レジスタＳＲにおけるそのスレッドのＥＥフラグをイベントディスエーブルドにセットすることもできる。イネーブルフラグ３９は、イベントが発生した時に、そのスレッドが命令を実行する結果として、無効にすることもできる。
【００６１】
イネーブルフラグ３９は、1つ以上のポートからのイベントを待つことに備えて、多くのポートをセットアップする間に、有効にすることもできる。そのスレッドのＥＥフラグは、1セットのポート・イネーブル・フラグをイネーブルにする前に、同様に、イベントイネーブルドにセットすることもできる。この場合、イネーブルにする最初に準備ができたポートは、継続点ベクトルにおける命令を直ちに取り出し実行することにより、現時点での命令を捨てて実行を進行させるイベントを発生する。
【００６２】
ポートのイネーブフラグ３９とステータス・レジスタＥＥフラグの利点は、イベントのイネーブリングとディスエーブリングが、イベントのセットアップと待ち命令によるスレッドの一時中断の両方から分離されるということである。こうして異なる入出力条件が、特定のスレッドンに対して、および/または様々な異なるスレッドに対して、オンとオフが容易に切り替えることができるようになる。例えば、イベントは、例えそのイベントがディスエーブルになっていても、ポート２２でセットアップ状態が残されていてもよい。こうして、イベントは、スレッドによって再度用いることができる。その理由は、そのイベントは既に一旦発生したものであるものの、そのスレッド識別子、継続点ベクトル、条件はポート２２のＴＩＤ、ＶＥＣＴＯＲ、ＣＴＲ、ＤＡＴＡの各レジスタ３８にまだ格納されているからである。したがって、スレッドがイベントを再使用する必要がある場合、ポートのレジスタ３８は書きかえる必要はないが、その代わりに、ポートのイネーブルフラグ３９を単に再度有効にするか、および/または、スレッド用のステータス・レジスタＳＲのＥＥフラグをイベントイネーブルドに再セットすればよい。その場合、さらなる待ち命令は、同じイベントが再び発生するまでの間、スレッドを一時中断することになる。
【００６３】
さらに、継続点ベクトルを使用するとマルチイベントを１スレッド毎に処理することが可能になる。すなわち、一つのスレッドは、ポート２２ａに継続点ベクトルを転送することにより、そのポート２２ａに１つのイベントをセットアップし、他のポート２２ｂに別の継続点ベクトルを転送することにより、そのポート２２ｂに他のイベントをセットアップする、などである。スレッドは、個々のそれぞれのポートに対して異なるイネーブルフラグ３９を別々に有効にするか、無効にすることにより、同様に個々に様々なイベントをイネーブルにし、またはディスエーブルにすることが可能である。待ち命令は、その場合、イネーブルにされたイベントを待って、スレッドを一時中断にすることになる。
【００６４】
イベントとは対照的に、基本的なＩ／Ｏオペレーションを用いると、スレッド・スケジューラ１８は、ＶＥＣＴＯＲレジスタに継続点ベクトルを送らず、且つ、ステータス・レジスタＳＲのポートのイネーブルフラグ３９またはＥＥフラグを用いない。代わりに、保留になっている命令は、インストラクション・バッファ１９の中に単に残され、また、必要ならば、実行は、入力または出力のためにポートが利用可能になることを待っている間、レディ・フラグ３７によって示されるように単に休止される。実施形態では、ＴＩＤレジスタだけが基本的なＩ／Ｏによるスケジューリングに必要かもしれない。基本的なＩ／ＯはＣＴＲＬとＤＡＴＡのレジスタの条件を用いてもよいし、用いなくてもよい。もしそのような条件が用いられなければ、ポートがレディになれば、直ちにＩ／Ｏは完了することになる。
【００６５】
なお、イベントに従って、一旦スレッドの実行が再開されれば、それは勿論続いて基本的なＩ／Ｏオペレーションを実行してもよい。逆に、スレッドは、基本的なＩ／Ｏに続いて一旦再開されれば、続いてイベント・オペレーションを含んでもよい。そのようなイベントとＩ／Ｏのいかなる連携もスレッドに含めるように構成することができる。例えば、イベントがディスエーブルになっており(つまりポートのイネーブルフラグ３９、および/または、ステータス・レジスタのＥＥフラグが無効にされている)、イベント・ベクトルと条件とがレジスタ３８にセット状態で未だ残っている間は、基本的なＩ／Ｏオペレーションは2つのイベントベースの待ち命令の間に差し込むこともできる。すなわち、イベントは、第1のイベントベース待ちオペレーション、同じポートを用いて続いて実行された基本的なＩ／Ｏ、そして第２のイベントベース待ちオペレーションにおいて使用するために再度イネーブルにされた同イベントの完了を以ってディスエーブルにされてもよい。上記に述べたように、基本的なＩ／Ｏオペレーションはスレッドを休止および休止解除を行うが、ステータス・レジスタにおけるポートのイネーブルフラグ３９またはＥＥフラグは発効させないし、コントロールをイベント・ベクトルに移動させることもしない。
【００６６】
スレッド・スケジューラと２つの例示的なポートのオペレーションが、図６の流れ図を参照しながら、ここに説明される。ステップ１００において、実行ユニット１６は、スレッド・スケジューラ１８の管理のもとに、第１と第２のスレッドの実行を始める。ステップ１０２では、スレッド・スケジューラは、例えばポート２２ａのある特定の信号を受信するなどの、あるイベントに依存した第１のスレッド内のコードの一部に遭遇する。ステップ１０４では、スレッド・スケジューラは、一旦イベントが検出されるとプログラムのどのポイントにおいてスレッドの実行が継続されるべきであるかを指定する継続点ベクトル(ＶＥＣＴＯＲ)と、そしてまた他の全ての必要とされるコンディション・コントロール情報(ＣＴＲＬ)と関係データ(ＤＡＴＡ)と一緒に、第１のスレッドのスレッド識別子(ＴＩＤ)をポート２２ａに送る。例えば、データは、命令がポートにおいて受信することを予期している信号の値であってもよい。ステップ104では、スレッド・スケジューラは、同様に第１のポートのイネーブルフラグ３９をセットしてもよいし、第１のスレッドのステータス・レジスタＳＲをイベントイネーブルドにセットしてもよい。
【００６７】
ステップ１０６では、ポート２２ａはスレッド・スケジューラ１８からのこの情報を受信する。ステップ１０８では、スレッド・スケジューラ１８は、第１のスレッドの実行を一時中断する。ステップ１１０では、ポート２２ａはそのポートのアクティビティをモニターし始める。
【００６８】
ステップ１１２では、スレッド・スケジューラ１８は、第２のスレッドが未解決であると判定し、実行ユニット１６が、スレッド・スケジューラ１８の管理のもとに、第２のスレッドの実行を継続する。ステップ１１４において、スレッド・スケジューラ１８は、イベントに依存するコードの一部に遭遇する。ステップ１１６では、スレッド・スケジューラ１８は、継続点ベクトルと他の全ての必要とされる条件情報と共に、スレッド識別子をポート２２ｂに送る。ステップ１１６では、スレッド・スケジューラは、同様に第２のポートのイネーブルフラグ３９をセットしてもよいし、第２のスレッドのステータス・レジスタをイベントイネーブルドにセットしてもよい。ステップ１１８では、ポート２２ｂはこの情報を受信する。ステップ１２０では、スレッド・スケジューラは、第２のスレッドの実行を一時中断する。ステップ１２２では、ポート２２ｂは、そのポートで発生するアクティビティをモニターし始める。
【００６９】
ステップ１２４では、スレッド・スケジューラは、スケジュールすべき未解決のスレッドは現在もう存在しないと判定し、そしてシステムがポート２２ａと２２ｂを除くすべてのコンポーネントの電源を切る。ステップ１２８では、ポート２２ａは関連するイベント、例えばＤＡＴＡレジスタにおいて格納されている信号の受信を検出し、その結果、スレッド識別子(ＴＩＤ)と継続点ベクトル(ＶＥＣＴＯＲ)を返す(第１のスレッドのステータス・レジスタをイベントディスエーブルドにセットするのに加えて)。ステップ１２６では、スレッド・スケジューラ１８は返された識別子を受信する。ここで実行は継続できるので、ステップ１３０では、システムが再び電源を入れる。ステップ１３４では、実行ユニット１６は、スレッド・スケジューラ１８の管理のもとに第１のスレッドの実行を完了する。ステップ１３８では、ポート２２ｂは、第２のスレッド用の関連するイベントを検出し、そのスレッド識別子と継続点ベクトル(第２のスレッドのステータス・レジスタをイベントディスエーブルドにセットするのに加えて)を返す。ステップ１３６では、スレッド・スケジューラ１８は返された情報を受信し、そしてステップ１３８では、実行ユニット１６は、スレッド・スケジューラ１８の制御の下で第２のスレッドの実行を完了する。尚、電源を遮断するステップをステップ１３４と１３６の間に追加することも可能である。
【００７０】
図７に示されているように、発明の原理は、スレッド間の、またはより正確にはスレッドを表す情報を格納したスレッド・レジスタ・セット２０の間の通信へ同様に拡張できる。説明の目的のために、４つのスレッド・レジスタ・セット２０１〜２０４だけが図７において示されており、それぞれ対応するスレッドＴ１〜Ｔ４のための情報を格納している。各スレッド・レジスタ・セットはそれぞれ、少なくともスレッド・レジスタ・セット２０の２つの間でデータを直接転送するために、少なくとも1つのチャネルを確立するように動作可能な相互接続システム４０によって、他のセットのそれぞれに接続される。チャンネルはオペランド・レジスタＯＰ間でデータを転送するために好適に用いられているが、原理的には、ステータス・レジスタＳＲのような他のタイプのレジスタとの間で情報を転送するために使用することもできる。スレッド・スケジューラ１８は、上記のポートに関連して述べたのと同様のやり方でチャネル上に発生するアクティビティに基づいて、スレッドをスケジュールできる。
【００７１】
図７Ａに示されるように、チャネル・エンド４２のそれぞれは、入力バッファ４４と出力バッファ４６を備えた、1対のポートに似ている。ポート２２と同様に、各チャンネル入力バッファ４４と出力バッファ４６は、チャネル上に発生するアクティビティをモニターし、少なくとも1つのレディ・フラグ３７'によって所与のアクティビティの発生を伝えるアクティビティ処理ロジック３６‘を有していてもよい。チャネル・エンドが検出し得る可能なアクティビティは、データがチャネルに入力されたこと、またはそのチャネルが出力のために使用可能になったことを含む。チャネルがいっぱい過ぎてデータを取り入れることができない時に、出力命令が実行されれば、その場合、その命令を実行したスレッドは休止し、命令がうまく完了するための十分な余裕がチャネルにある場合には再開される。同様に、命令が実行され、扱える十分なデータがない時、その場合、スレッドは休止し、その後、十分なデータがアベイラブルになった時、再開される。
【００７２】
再び、ポート２２と同じように、そのようなアクティビティの検出を容易にするために各チャネル・エンドはそれぞれレジスタ３８'と関係付けられる。これらは、関連するスレッドの識別子を格納するためのスレッド識別子(ＴＩＤ)レジスタと、イベントが発生した時に実行を再開すべきプログラム中の位置を格納するための継続点ベクトル(ＶＥＣＴＯＲ)レジスタとを含む。これらのＴＩＤとＶＥＣＴＯＲのレジスタは、その場合、スレッド・スケジューラ１８と実行ユニット１６が、ポート２２の場合と同じ方法でスレッドをスケジュールするために使用することができる。ＶＥＣＴＯＲレジスタは、チャネルがイベントと割り込みを発生させることを可能にする。チャネル・エンドは、同様に、チャネルがイベントを発生させることを可能にするイネーブルフラグ３９'を持っている。実施形態では、チャネル・エンド４２はＣＴＲＬとＤＡＴＡのレジスタを備える必要はない。
【００７３】
同じチャネル・エンド４２はスレッド・レジスタからのデータをポート２２を介して外部環境へ伝えるために用いられてもよい。すなわち、実行ユニット１６は、チャネル・エンド４２を介してレジスタ２０のコンテンツをピックアップし、そしてポート２２を介してそれを直接パスしてもよいし、逆に、実行ユニット１６は、同様にポート２２からの入力を受信し、チャネル・エンド４２を介してレジスタ２０にそれを直接転送してもよい。こうして、もし本発明による２つ以上のインタフェース・プロセッサがともに接続された場合、図２Ａに例えば示されたように、チャネルもそれらのプロセッサ間に確立できる。インタープロセッサ・システム内で、各プロセッサはそれぞれ、他のプロセッサとの同時接続を可能にする多くの双方向物理リンク２０４を介してシステム相互接続にインタフェースしてもよい。
【００７４】
ポート、チャネル、及びアクティビティの他のソース、を包含するのにここに用いられている一般的用語は、「リソース」である。
【００７５】
インタフェース・プロセッサは、そのスレッドベースの構造によるいくつかのプログラミング・アプローチをサポートできる。それは、標準の入力と出力を実行する単一の従来型プロセッサとして扱われることが可能であり、または、何百もの通信コンポーネントの並列アレイの部分としてプログラムされることも可能である。これらのオプションをサポートするインストラクション・セットが提供される。そのインストラクション・セットは、初期化、終了、スタートと停止スレッドをサポートし、且つ入力/出力通信を提供する、特別の命令を含んでいる。その入出力命令は外部装置との非常に速い通信を可能にする。それらは高速であり、遅延時間の小さい入出力と、ハイレベルの並列処理プログラミング技術をサポートする。これにおいて、ポート・アクティビティを処理するそれらのアプリケーションは、下記でより詳細に述べ、また、本発明を実現するために用いることができる命令の例を説明している。リソースは、必要なリソースのタイプを規定するＧＥＴＲ命令を用いて、まずスレッドに対して予約され、ＦＲＥＥＲ命令を用いて予約解除される。
【００７６】
ポートは入力または出力モードに用いることができる。入力モードでは、条件は、スレッドにパスされたデータをフィルターするために、用いることができる。ポートは、データが以下に述べられるようにアベイラブルになった場合、イベントまたは割り込みを発生させるために用いることができる。これにより、スレッドがいくつかのポートをモニターし、レディになっているものだけにサービスすることが可能になる。入出力命令ＩＮとＯＵＴは、一旦レディとなったポートとの間でデータを転送するために使用できる。この場合、ＩＮ命令は、ｎ−ビット・ポートから、ｎ個の最下位ビットを入力してゼロ・エクステンドし、ＯＵＴ命令は、ｎ個の最下位ビットを出力する。
【００７７】
さらに２つの命令、ＩＮＳＨＲとＯＵＴＳＨＲ、はデータ転送を最適化する。ＩＮＳＨＲ命令は、レジスタの内容をｎビットだけ右へシフトさせて、左端のｎビットをｎ−ビット・ポートからのデータ入力で満たす。ＯＵＴＳＨＲ命令はデータのｎ個の最下位ビットをｎビット・ポートに出力し、レジスタの内容をｎビットだけ右へシフトさせる。
OUTSHR port, sport ＜−s[bits 0 for width(port)];            output from                s ← s >> width(port)                    port and shift INSHR port, s           s ← s >> width(d );              shift and input                port −＞ s[bits (bitsperword- width(d)) for width(d)]  from port
ここで、"−＞"は入力を表し、"＜−"は出力を表す。
【００７８】
ポートは、使用可能にする前に、設定されなければならない。それは、ポートのいくつかの独立の設定を定義するために用いられるＳＥＴＣ命令を用いて設定される。これらのそれぞれはそれぞれデフォルト・モードを持っており、異なるモードが必要な場合、単に設定しさえすればよい。
SETC   port, mode    port[ctrl] ← mode        set port control
SETCモード設定の効果が以下に述べられる。各設定それぞれにおける第１のエントリはデフォルト・モードである。
モード        効果
OFF           アクティブでないポート;ピン  ハイインピーダンス
ON            アクティブ
IN            ポートは入力
OUT           ポートは出力(しかし、入力は現時のピン値を返す）
EVENT         ポートはイベントをおこす
INTERRUPT     ポートは割り込みを立てる
DRIVE         ピンは高くそして低く動かされる
PULLDOWN      ピンがビット0をプルダウン、そうでなければハイインピーダンス
PULLUP        ピンがビット1をプルアップ、そうでなければハイインピーダンス
UNCOND        ポートは常にレディ;入力は直ちに完了
EQUAL         ポートの値がそのDATA値と等しい場合、ポートはレディ
NE            ポートの値がそのDATA値と異なる場合、ポートはレディ
TRANSITION    ポートの値がそのDATA値に向けて変化する場合、ポートはレディ
GR            ポートの値がそのDATA値より大きい場合、ポートはレディ
LS            ポートの値がそのDATA値より小さい場合、ポートはレディ
ＤＲＩＶＥ、ＰＵＬＬＤＯＷＮ、ＰＵＬＬＵＰモードは、ポートの方向がOUTである場合のみ正当である。ＴＲＡＮＳＩＴＩＯＮ条件は１ビットのポートに対してのみ正当であり、また、ＧＲ、ＬＳ条件は、１ビット以上のポートに対してのみ正当である。
【００７９】
各ポートは、ポートを通るデータのフローを制御するために用いられているレディ・ビット３７を持っており、ポートが入力または出力命令を完了することができるかを定義する。レディ・ビットはポート・コンフィギュレーションに依存して異なる方法でセットされる。レディ・ビットは、ＳＥＴＣ、ＳＥＴＤ、ＳＥＴＶ命令のうちのいずれか実行されたらクリアされる。
【００８０】
入力モードのポートは条件付き入力を実行するように設定できる。条件は、その条件を満たすデータだけがプログラムに返されるように、入力データをフィルターする。条件がセットされた時、ＩＮ、ＩＮＳＨＲ命令はポートがレディである場合のみ完了する。上に説明されたように、レディでないポート上の入力命令を実行するとスレッドは中断される。ポートは、レディである時は、スレッド・スケジューラに伝えられるレディ・ビットをセットする。スレッドは入力命令を回復し再実行する。ポートがレディであるこの場合は、そのデータは返され、レディ・ビット３７がクリアされる。
【００８１】
一旦ポート・レディ・ビットがセットされると、条件を満足したデータ値は、そのポート上の値が続いて変化していたとしても、ソフトウェアが条件を満足した値を得るように捕捉される。ＩＮまたはＩＮＳＨＲ命令が実行され、レディ・ビットがセットされる時は、その場合、データが返されてレディ・ビットがクリアされる。レディ・ビットがセットされないと、その場合、レディ・ビットがセットされるまで、スレッドが中断される。もし条件がセットされると、その場合、データは条件と比較され、そして条件が満足される場合のみ、レディ・ビットはセットされる。
【００８２】
ＯＵＴかＯＵＴＳＨＲ命令が実行される時は、もしレディ・ビットがクリアされているなら、その場合、データはポートによって取り込まれ、レディ・ビットがセットされる。もしレディ・ビットがセットされていると、その場合、それがポートによってクリアされるまで、そのスレッドは中断される。
【００８３】
２つのスレッド間で通信するために、２つのチャネル・エンドが割り付けられる必要があり、それは各スレッドそれぞれに対して１つとなる。これはＧＥＴＲ  ＣＨＡＮ命令を用いることによって行われる。２つのスレッドは、その場合、出力、入力命令を用いてデータ・ワードを転送するために、リソース識別子を用いることができる:
OUT    d ＜− s
IN     d −＞ s
チャネルが満杯でデータを取り込むことができない時に出力命令が実行される場合は、命令を実行したスレッドは中断される。チャネルにその命令がうまく完了するための十分な余裕がある時に、再開される。同様に、入力命令が実行され、そして十分なデータがアベイラブルである時は、その場合、スレッドは中断され、そして十分なデータがアベイラブルになった時に、再開される。そのチャネルは、もはや必要とされない時は、ＦＲＥＥＲ  ＣＨＡＮ命令を用いて解放できる。そうでない場合は、他のメッセージに用いられる。
【００８４】
イベントと割り込みは、リソース(ポートとチャネル)がコントロールを、定義済みのイベント・ハンドラーに、自動的に転送できるようにする。スレッドがイベントまたは割り込みを受理する能力は、スレッド・ステータス・レジスタＳＲ(図４を参照)の中に保持されている情報によって制御され、ＴＳＥとＴＳＤ命令を用いて明示的に制御されてもよい。この情報は、イベントイネーブルフラグ(ＥＥ)と割り込みイネーブルフラグを含む(ＩＥ)。
TSE    s      SR ← SR ∨ s             スレッド  ステート  イネーブル
TSD    s      SR ← SR ∧ ¬ sスレッド  ステート  ディスエーブル
これらのインストラクションのオペランドは次のもののうちの1つであるはずである:
ＥＥ          イベントをイネーブルにするかディスエーブルにする
ＩＥ          割り込みをイネーブルにするかディスエーブルにする
イベントはそれらがセットアップされたのと同じ適用範囲において処理される。従って、イベントの上では、すべてのスレッドの状態はイネーブルであり、これによりスレッドがイベントに素早く対応できるようになっている。スレッドは、いくつかまたはすべてのイベント情報を不変のまま残しながら、イベントを生じさせたポートを用いて入出力オペレーションを実行できる。これは、スレッドがイベントの処理を完了し、直ちに他の同様のイベントを待つことを、可能にする。
【００８５】
イベント・ハンドラーのプログラム位置は、ＳＥＴＶ命令を用いてイベントをイネーブルにする前にセットされなければならない。ポートは、これらがいつイベントを発生させるか判定する条件を有しており、これらはＳＥＴＣとＳＥＴＤ命令を用いてセットされる。チャンネルは、これらが十分なデータを含んでいるか、出力用データを受理するための余地があるとすぐに、レディであると考えられる。
【００８６】
特定のポートまたはチャネルによるイベントの発生は、イベントイネーブル・アンコンディショナル（ＥＥＵ）命令を用いてイネーブルにされることが可能であり、またイベント・ディスエーブル・アンコンディショナル（ＥＤＵ）命令を用いてディスエーブルにされることが可能である。イベントイネーブルツルー（ＥＥＴ）命令は、もしそのコンディション・オペランドが真であれば、そのイベントをイネーブルにし、もしそうでないならば、ディスエーブルにする;逆に、イベントイネーブルフォルス（ＥＥＦ）命令は、もしそのコンディション・オペランドが偽であれば、そのイベントをイネーブルにし、もしそうでないならば、ディスエーブルにする。これらの命令はガード付入力の実行を最適化するために用いられる。下記は、ポート上のイベントを設定するためのいくつかのインストラクション・フォーマットの例であるが、同じ命令がチャネルに対して適用可能であることは理解されよう。
SETV port, v  port[vector] ← v    セットイベントベクトル
SETD port, d  port[data] ← d             セットイベントデータ
SETC port, c  port[ctrl] ← c             セットイベントコントロール
EET port, b   port[enable]← b; port[tid] ← thread
イベントイネーブルツルー
EEF port, b   port[enable]← ¬b; port[tid] ← thread
イベントイネーブルフォルス
EDU port      port[enable]← false; port[ tid] ← thread
イベント・ディスエーブル
EEU port      port[enable]← true; port[tid] ← thread
イベントイネーブル
スレッドは、1つ以上のリソース上のイベントをイネーブルにしておくことによって、少なくとも1つのイベントを待つためのＷＡＩＴＥＵ命令を用いることができる。これは、ＥＥ(イベントイネーブル)フラグのクリアによりイベントをディスエーブルにされた対応するイベント・ベクトルによって特定されるイベント・ハンドラーに、コントロールが転送されて、イベントが直ちに起きるという結果になってもよい。または、スレッドはイベントが起こるまで一時中断されてもよく、この場合、イベントが起こればＥＥフラグはクリアされ、そしてスレッドは実行を再開する。
WAITET b      if b then SR[EE] ← true          ツルーならイベント待ち
WAITEF b      if ¬ b then SR[EE] ← true           フォルスならイベント待ち
WAITEU SR[EE] ← true                         イベント待ち
CLRE          SR[EE] ← false;                全イベント・ディスエーブル
for all port                    for thread
if port[tid] = thread then port[enable] ← false
条件が発生するまで、１つ以上のイベントを繰り返し待つ共通ケースを最適化するために、イベント待ち命令の条件形式が提供される。ＷＡＩＴＥＴ命令はそのコンディション・オペランドが真の場合のみ待ち、また、ＷＡＩＴＥＦは、そのコンディション・オペランドが偽の場合のみ待つ。
【００８７】
スレッドによってイネーブルになったイベントはすべて単一のＣＬＲＥ命令を用いてディスエーブルにすることができる。これは、スレッドによってイネーブルにされたイベントを持っていた全てのポートにおけるイベント発生をディスエーブルにする。ＣＬＲＥ命令は、同様にスレッドのステータス・レジスタにおけるイベントイネーブルド・ステータスをクリアする。
【００８８】
高優先順位のリソースに対するスレッドの応答性を最適化するためには、ポートおよび／またはチャネルをイネーブルにすることを開始し、イベント待ち命令のうちの１つを使用する前に、スレッド上のイベントを先ずイネーブルにするためにＴＳＥ ＥＥ命令を用いることができる。このように、プロセッサは、リソースを通して優先度順に走査することができる。これにより、イベントがイネーブルになるとすぐに処理できるようする。
【００８９】
イベントとは対照的に、割り込みは現時点の適用範囲内では処理されない、したがって、現時点のＰＣとＳＲ(可能性として同様に他のレジスタのうちのいくつかまたは全部)は、割込みハンドラの実行に先立って保存されなければならない。割り込みがリソースｒによって発生された場合、下記のものが自動的に起きる:
SAVEPC ← PC;
SAVESR ← SR;
SR[EE] ← false;
SR[IE] ← false;
PC ← r[vector]
ハンドラが完了した時、中断されたスレッドの実行はＲＦＩＮＴ命令によって実行できる。
RFINT         PC ← SAVEPC; 割込みから戻る
SR ←SAVESR
割り込みはスレッドを中断することがあり得るが、一方イベントを待って一時中断さることもある。
【００９０】
次の例は、入力、出力、論理演算を実行するために、命令がスレッドによってどのように用いられているか示す。その例に、下記の命令が用いられている:
LDFI:  レジスタに命令アドレスをロードする
LDI:  レジスタに定数値をロードする
EQI:  レジスタ値が定数と等しい場合、ブール(真理値)値を生成する
OR:  ２つのレジスタ値の論理和を生成する
ADD:  ２つのレジスタ値を加算する
ADDI:  レジスタ値に定数を加算する
SHL:  レジスタの内容を左へシフトする
BBF:  ブール値がフォルスの場合、プログラム中の他のポイントに分岐する
OUT:  データを出力する
次は、ピンから８ビットバイトを直列に入力するためのコード例を示している。第２のポートで外部クロックから受信された信号が、データが取り込まれるべきであることを示すために０から１に変化した時、データの各ビットはそれぞれ第１のポートから入力される。高水準の言語では、そのオペレーションは下記のようである:
PROC inbyte(clock, data)
VAR byte;
{FOR n = 0 FOR 8
WHEN clock ? TO 1 DO {data? bit; byte = (byte << 1) + b};  
RETURN byte
}
このためのインストラクションレベルのプログラムを以下に示す。
SETC          clock, TRANSITION
SETD          clock, 1
LDI           byte, 0
LDI           count, 0
loop:
IN            clock, c
IN            data, bit
SHL           byte, byte, data
ADD           byte, byte, bit
ADDI          count, count, 1
EQI           go, count, 8
BBF           go, Loop
２つ以上のそのようなコード・シーケンスを、それらの内のおのおのをそれ自身のスレッドに割り付けることにより、同時に実行することが可能であろう。
【００９１】
次は、上記の命令のうちのいくつかを用いて、２つの入力ｘとｙのうちの１つが状態を変えた場合に常に起き上がるＮＡＮＤ型プロセスを実現するためのコード例を示す。その高レベルのコードは次のとおりである:
PROC nand(x, y, z) IS
WHILE TRUE
{WHEN x? TO notx DO {notx:= NOT notx; z! (notx OR noty)}
| WHEN y? TO noty DO {noty:= NOT noty; z! (notx OR noty)}
}
低レベルのコードでは、プロセスは、ベクトル「xv」と「yv」をそれぞれ備えた二つのポートxとyを初期化し、これらのポートがイベントを発生することを可能にする単一のスレッドを含む。その対応するインストラクションレベルのプログラムは以下のとおりである:
nand:
LDI           notx, 1
LDI           noty, 1
SETC          x, TRANSITION
SETD          x, notx
SETC          y, TRANSITION
SETD          y, noty
LDFI          temp, xv
SETV          temp, x
LDFI          temp, yv
SETV          temp, y
EEU           x
EEU           y
WAIT
xv:
EQI           notx, notx, 0
SETD          x, notx
OR            temp, notx, noty
OUT           z, temp
WAIT
yv:
EQI           noty, noty, 0
SETD          y, noty
OR            temp, notx, noty
OUT           z, temp
WAIT
オペレーションにおいては、ｘ入力が変化するかまたはy入力が変化すとコントロールはxvかyvのいずれかに移る。いずれの場合においても、応答コードは５つの命令を実行し、次の入力の状態変化を待つ。入力変化から出力変化までの遅延は約１０サイクル未満であってもよい。１ＧＨｚのプロセッサは１００ＭＨｚのロジックをエミュレートすることができる。
【００９２】
他の例として、次に、入力が状態を変えた場合に常に起動するが外部クロックによってクロック制御された時は単に出力を変化させるのみのD型フリップフロップ・ロジックを実現するためのプロセスを示す。そのハイレベルのプログラムは次のとおりである:
PROC dtype(d, ck, q) IS
WHILE TRUE
{WHEN d? TO notdDO notd:= NOT notd
| WHEN ck? TO TRUE DO q! NOT notd
}
その対応するインストラクションレベルのプログラムは次のとおりである:
dtype:
IN            d, temp
EQI           temp, temp, 0
SETC          d, TRANSITION
SETD          d, temp
SETC          ck TRANSITION
LDI           temp, 1
SETD          ck, temp
LDFI          temp, dv
SETV          d, temp
LDFI          temp, ckv
SETV          ck, ckv
EEU           d
EEU           ck
WAIT
dv:
IN            d, temp
SETD          d, temp
WAIT
ckv:
EQI           temp, notd, 0
OUT           q, temp
WAIT
オペレーションにおいては、ｄ入力が変化するか、またはｃｋ入力が変化する。いずれの場合も、応答コードは３つの命令を実行し、次の入力状態変化を待つ。入力変化から出力変化までの遅延は約１０サイクル未満であってもよい。また、１ＧＨｚのプロセッサは、１００ＭＨｚのロジックをエミュレートすることができる。
【００９３】
下記に、もう少し複雑なロジックの例を挙げる。Dタイプのように、それは入力データ(数ビット幅であり得る)を、外部クロックが到着する時にセットアップされるように、追跡する（他の方法はクロックのデータを単に読込むことであろう。その場合には、そのデータには０でないホールド時間が存在することになるであろう）。その出力が計算され（ルックアップ・テーブルによる以下の例の中では）、クロックをもとに出力される。入力のより複雑な関数が計算され得るかもしれないし、また、これが、可能性として以下で示されたポイントにおいてより多くの命令をつけ加えることになるかも知れない。しかしながら、プロセッサは、ほんの少数の命令で非常に複雑な関数(小さなLUTに関する)を計算することができる。その高レベルのコードは次のとおりである:
PROC lookup(d, ck, q) IS
WHILE TRUE
{WHEN d? x: x!= lastx DO lastx:= x
| WHEN ck? TO TRUE DO q! lookup[lastx]
}
その対応するインストラクションレベルのプログラムは次のとおりである:
logic:
IN            d, data
SETC          d, NE
SETD          d, data
SETC          ck, TRANSITION
LDI           temp, 1
SETD          ck, temp
LDFI          temp, dv
SETV          d, temp
LDFI          temp, ckv
SETV          ck, temp
EEU           d
EEU           ck
WAIT
dv:
IN            d, data
SETD          d, data
WAIT
ckv:
LDW           temp, lookup, data  // replace this to change function
OUT           temp, q
WAIT
オペレーションにおいては、ｄ入力が変化するかまたはｃｋ入力が変化する。いずれの場合も、応答コードは３つの命令を実行し、次の入力状態変化を待つ。入力変化から出力変化までの遅延は約１０サイクル未満であってもよい。
また、１ＧＨｚのプロセッサは、１００ＭＨｚのロジックをエミュレートすることができる。
【００９４】
尚、上記の例が、所定のスレッドがマルチイベントのようなマルチアクティビティをどのように処理することができるかを実証する。
【００９５】
イベントとは対照的に、割り込みは、その状態がエントリ時に割込みハンドラに保存され、そしてハンドラ内での使用が可能となるようにレジスタをアベイラブルにするため、終了時にこれを戻すことが必要となる。さらに、ハンドラは通常、直近の入力された時の状態を回復し、また次に入力される場合に備えて状態を保存するする必要がある。割込みハンドラの簡単な例を以下に示す。これは、いくつかの追加の命令を用いている:
LDWSP      スタック・ポインタを用いて、メモリから値をロードする
STWSP      スタック・ポインタを用いて、メモリに値を格納する
LDWDP      データ・ポインタを用いて、メモリから値をロードする
STWDP      データ・ポインタを用いて、メモリに値を格納する
EXTSP      新規の値用のスペースを作るためにスタックを拡張するべく用いられる
LDAWSP    スタックから値を捨てるために用いられる
この例は、１バイトのデータを一度に１ビットづつ入力する;イベントを用いる上述の例とは対照的に、これは割込みハンドラを用いている。高レベルのプログラムは次のとおりである:
PORT clock: INT, TRANSITION, 1;
VAR byte;
VAR count;
byte:= 0;
count:= 0;
ENABLE clock;
// program to be interrupted follows here
HANDLER inbyte()
{data? bit; byte := (byte << 1) + bit;
count:= count + 1;
IF count = 8 THEN DISABLE clock  
}
ポートが割り込みを生成するべくイネーブルになっている場合、外部クロックがトランジションをロジック１にする毎に、割込みハンドラが開始される。ハンドラはデータ・ビットを取り込み、１バイトを構成する。そのバイトは、ビット入力のカウントと一緒にメモリのロケーションに格納され、データ・ポインタを介してアクセスされる。８ビットが入力された場合、そのハンドラは、そのバイトをプログラムが使用するためレディにしておいて、さらなる割り込みをディスエーブルにする。その対応するインストラクションレベルのプログラムは次のとおりである:
SETD          clock, 1
SETC          clock, TRANSITION
SETC          clock, INT
LDI           r0, 0
STWDP  r0, byte
STWDP  r0, n
EEU           clock
… // program which will be interrupted
int:  // interrupt handler
EXTSP  2
STWSP  R0, 0
STWSP  R1, 1
IN            clock, r0
IN            data, r0
LDWDP  r1, byte
SHL           byte, byte, 1
ADD           byte, byte, r0
STWDP  r1, byte
LDWDP  r0, n
ADDI          r0, r0, 1
STWDP  r0, n
EQI           r0, r0, 8
EEF           clock, r0
LDWSP  R1, 1
LDWSP  R0, 0
LDAWSP 2
RFINT
上記の説明と例から、それぞれのポートにおけるアクティビティを対応するそれぞれのスレッドに関連付けること、及びそのアクティビティから発生するイベントに基づいたこれらのスレッドをスケジューリングすることが、外部刺激にすばやく対応できるプロセッサを、いかに好適に提供するかが分かる。
【００９６】
上記の実施形態が例としてのみ述べられていることが理解されよう。他の実施形態においては、異なるセットのレジスタと命令がチップの所望の仕様に応じて提供され得る。ある実施形態においては、スレッド識別子はポートに送られる必要はなく、スレッド・スケジューラが担ったままであるか、または、他のどこかに格納され得る。あるいは、スレッド識別子が正しいレディ信号を選択するためポートに渡されるが、アクティビティを検出した時にスレッド・スケジューラに返す必要がないように、各スレッドはそれぞれポートにおける個々のレディ・フラグを与えられることがある。さらに、条件および/またはコンディション・データはポートに送られる必要はない。代わりに、条件はポートに事前設定され、および/または、スレッド・スケジューラまたは他のどこかで評価され得る。スレッドは、ポートとチャネル以外の他のソースからのアクティビティに基づいてスケジューリングされてもよい。異なる相互接続がプロセッサの様々なコンポーネント間に提供されてもよい。同様に、本発明はモバイル・アプリケーション・プロセッサを備えたモバイル端末への使用に特定されない。他への適用および構成は当業者には明白であろう。本発明の範囲は説明された実施形態によって限定されるものではなく、下記の特許請求の範囲によってのみ限定される。
【誤訳訂正２】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
第１のポートであって、該第１のポートで第１のアクティビティに依存する第１のインディケーションを発生させるよう動作可能な第１のポートと、
第２のポートであって、該第２のポートで第２のアクティビティに依存する第２のインディケーションを発生させるよう動作可能な第２のポートと、
マルチプルスレッドを実行するように構成された実行ユニットと、
前記インディケーションを受信するために接続され、前記インディケーションに基づいて、前記実行ユニットによる実行用の前記マルチプルスレッドをスケジューリングするように構成されるスレッド・スケジューラであって、前記スケジューリングは、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューラとを含み、
前記第１のアクティビティと前記第２のアクティビティは、それぞれ対応するそれぞれのスレッドに関係付けられているプロセッサ。
【請求項２】
前記スレッド・スケジューラは、前記第１のポートに関係付けられた識別子レジスタに、第１のアクティビティを待つ間一時中断された第１のスレッドに関係する第１のスレッド識別子を送信するように構成されている請求項１に記載のプロセッサ。
【請求項３】
前記スレッド・スケジューラは、前記第２のポートに関係付けられた識別子レジスタに、第２のアクティビティを待つ間一時中断された第２のスレッドに関係する第２のスレッド識別子を送信するように構成されている請求項２に記載のプロセッサ。
【請求項４】
一時中断スレッドのすべてのスレッド識別子がポートに送られてしまうと、実行ユニット、スレッド・スケジューラ、クロックの内の少なくとも１つの電源を切るよう適応している請求項１に記載のプロセッサ。
【請求項５】
それぞれのポートからスレッド識別子の少なくとも１つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも１つの電源を入れるよう適応している請求項４に記載のプロセッサ。
【請求項６】
前記第１のおよび第２のポートの少なくとも１つは、アクティビティ処理ロジックを含み、且つ条件を格納するための少なくとも１つのコンディション・レジスタに関係付けられており、該アクティビティ処理ロジックは、ポートにおけるアクティビティをモニターし、前記条件を満たす前記アクティビティに依存して前記インディケーションを発生させるように構成されている請求項１に記載のプロセッサ。
【請求項７】
前記実行ユニットは、各コンディション・レジスタにそれぞれの条件を送るように構成されている請求項６に記載のプロセッサ。
【請求項８】
バスにより前記実行ユニットに接続されたプログラム・メモリをさらに含み、前記スレッド・スケジューラは、前記第１のおよび第２のポートのそれぞれから前記インディケーションを受信するために前記バスとは別の少なくとも１つの接続により接続されている請求項１に記載のプロセッサ。
【請求項９】
スレッド・スケジューラは前記第１のスレッドを一時中断すると、第１のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するように構成され、また、継続点ベクトルは第１のアクティビティに依存して実行ユニットに返される請求項2に記載のプロセッサ。
【請求項１０】
前記第１のスレッドは、複数のポートからのアクティビティに関係付けられており、各ポートは、該アクティビティに依存してそれぞれのインディケーションを発生させるよう動作可能であり、前記実行ユニットは、複数の継続点ベクトルをそれぞれ前記複数のポートのうち対応する１つに送信するよう適応しており、それぞれの継続点ベクトルはそれぞれのアクティビティに依存して返され、前記スレッド・スケジューラは、第１のスレッドの実行を、それぞれのインディケーションの少なくとも１つを受信するまで、一時中断するよう適応している請求項９に記載のプロセッサ。
【請求項１１】
ポートイベント有効フラグが第１のポートに関係付けられており、前記スレッド・スケジューラは、ポートイベント有効フラグを有効にすることにより前記第１のアクティビティが前記スケジューリングを始動させることができるようにし、ポートイベント有効フラグを無効にすることにより前記第１のアクティビティが前記スケジューリングを始動させることができないようにするよう適応している請求項１０に記載のプロセッサ。
【請求項１２】
スレッドイベント有効フラグが第１のスレッドに関係付けられており、前記スレッド・スケジューラは、スレッドイベント有効フラグを有効にすることにより第１のスレッドが、第１のアクティビティに依存してスケジュールされることができるようにし、スレッドイベント有効フラグを無効にすることにより第１のスレッドが、第１のアクティビティに依存してスケジュールされることができないようにするよう適応している請求項１１に記載のプロセッサ。
【請求項１３】
前記ポートイベント有効フラグと前記スレッドイベント有効フラグの少なくとも１つは、第１のアクティビティの発生によって自動的に無効にされる請求項１１に記載のプロセッサ。
【請求項１４】
前記スレッド・スケジューラは、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも１つが無効にされている時、ポートからの第３のアクティビティの第３のインディケーションを待つ間、第１のスレッドの実行を一時中断するよう適応している請求項１１に記載のプロセッサ。
【請求項１５】
複数のポートイベント有効フラグのそれぞれは、第１のスレッドに関係付けられた複数のポートのそれぞれに関係付けられており、前記スレッド・スケジューラは、スレッドイベント有効フラグを有効にし、続けて、前記複数のポートイベント有効フラグを有効にするように構成されている請求項１２またはその従属請求項に記載のプロセッサ。
【請求項１６】
複数セットのスレッド・レジスタをさらに含み、各セットは、前記マルチプルスレッドのそれぞれ１つに関係する情報を格納するように割り付けられている請求項１に記載のプロセッサ。
【請求項１７】
前記プロセッサはチップ上に実現され、前記第１と第２のポートの少なくとも１つは前記チップ上の他のプロセッサと通信するための内部ポートである請求項１に記載のプロセッサ。
【請求項１８】
前記プロセッサはチップ上に実現され、前記第１と第２のポートの少なくとも１つは前記チップの外のデバイスと通信するための外部ポートである請求項１に記載のプロセッサ。
【請求項１９】
少なくとも１つの外部ポートは、チップの物理的な境界におけるピンに発生する立ち上がり信号エッジまたは立ち下がり信号エッジを検出するためのピンポートである請求項１８に記載のプロセッサ。
【請求項２０】
少なくとも１つの外部ポートは、ポートにおける１個以上のビットの瞬間の論理レベルを処理するためのデータポートである請求項１８または１９に記載のプロセッサ。
【請求項２１】
前記実行ユニットは、スレッドを一時中断しそして実行させるための専用の命令を認識し実行するよう適応している請求項１に記載のプロセッサ。
【請求項２２】
前記セットの少なくとも２つの間の少なくとも１つのチャネルをさらに含み、前記スレッド・スケジューラは、前記チャネル上に発生するアクティビティに基づいて、スレッドをスケジュールするよう適応している請求項１６に記載のプロセッサ。
【請求項２３】
前記スレッド・スケジューラは、割り込みに基づいてスレッドをスケジュールするようさらに適応している請求項１に記載のプロセッサ。
【請求項２４】
割り込みに基づいてスケジュールされたスレッドが、第１のスレッドであり、該割り込みが一時中断中の第１のスレッド中断する請求項２３に記載のプロセッサ。
【請求項２５】
前記スレッド・スケジューラは、関係付けられたアクティビティが、そのアクティビティに依存したスレッド内の命令の実行時または実行前に発生した場合、一時中断なしでそのスレッドをスケジュールするよう適応している請求項１に記載のプロセッサ。
【請求項２６】
第１のポートと第２のポートを有するプロセッサ内において、実行用のマルチプルスレッドをスケジューリングする方法であって:
第１のポートにおける第１のアクティビティと第２のポートにおける第２のアクティビティに対応するそれぞれのスレッドを関連付けるステップと、
第１のアクティビティに依存して第１のポートの第１のインディケーションを発生させるステップと、
第２のアクティビティに依存して第２のポートの第２のインディケーションを発生させるステップと、
前記インディケーションに基づいて実行用のスレッドをスケジューリングするステップであって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断するステップと、
前記スケジューリングに依存してそれらを実行することによりスレッドを実行させるステップとを含む方法。
【請求項２７】
第１のアクティビティを待つ間一時中断されている第１のスレッドに関係する第１のスレッド識別子を、第１のポートに関係付けられた識別子レジスタに送信するステップをさらに含む請求項２６に記載の方法。
【請求項２８】
第２のアクティビティを待つ間一時中断されている第２のスレッドに関係する第２のスレッド識別子を、第２のポートに関係付けられた識別子レジスタに送信するステップをさらに含む請求項２７に記載の方法。
【請求項２９】
中断されたスレッドの全てのスレッド識別子がポートに送られてしまうと、前記スレッドを実行するのに使用される実行ユニット、前記スレッドをスケジュールするのに使用されるスレッド・スケジューラ、クロックのうちの少なくとも１つの電源を切るステップをさらに含む請求項２８に記載の方法。
【請求項３０】
それぞれのポートからスレッド識別子の少なくとも１つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも１つの電源を入れるステップをさらに含む請求項２９に記載の方法。
【請求項３１】
前記第１と第２のポートの少なくとも１つは、アクティビティ処理ロジックを含み、条件を格納するための少なくとも１つのコンディション・レジスタに関係付けられており、該方法は、アクティビティ処理ロジックを用いて、ポートにおけるアクティビティをモニターし、前記条件を満たす前記アクティビティに依存して前記インディケーションを発生させるステップをさらに含む、請求項２６に記載の方法。
【請求項３２】
各コンディション・レジスタにそれぞれの条件を送るステップをさらに含む請求項３１に記載の方法。
【請求項３３】
前記プロセッサが、バスによって実行ユニットに接続されたメモリを含み、該方法は、前記バスとは別の少なくとも１つの接続により、第１と第２のポートのそれぞれから前記インディケーションを送るステップをさらに含む請求項２６に記載の方法。
【請求項３４】
前記第１のスレッドを一時中断すると、第１のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するステップと、第１のアクティビティに依存して継続点ベクトルを返すステップとをさらに含む請求項２６に記載の方法。
【請求項３５】
第１のスレッドを複数のポートからのアクティビティに関係付けるステップと、複数の継続点ベクトルをそれぞれ前記複数のポートのうち対応する１つに送信するステップとを含み、前記スケジューリングは第１のスレッドの実行を、継続点ベクトルの少なくとも１つが返されるまで、一時中断する請求項３４に記載の方法。
【請求項３６】
ポートイベント有効フラグを有効にすることにより、前記第１のアクティビティが前記スケジューリングを始動させることができ、ポートイベント有効フラグを無効にすることにより、前記第１のアクティビティが前記スケジュールを始動させられないようにするステップを含む請求項３４に記載の方法。
【請求項３７】
スレッドイベント有効フラグを有効にすることにより、第１のアクティビティに依存して、第１のスレッドをスケジュールすることができ、スレッドイベント有効フラグを無効にすることにより、第１のアクティビティに依存して、第１のスレッドをスケジュールすることができないようにするステップを含む請求項３４に記載の方法。
【請求項３８】
第１のアクティビティの発生により、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも１つを自動的に無効にするステップを含む請求項３６または３７に記載の方法。
【請求項３９】
ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも１つを無効にした後、第１のスレッドの実行を再開し、続いて、ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも１つが無効にされている時、ポートからの第３のアクティビティの第３のインディケーションを待つ間、第１のスレッドの実行を一時中断するステップと、
ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも１つを再度有効にするステップと、
ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも１つを再度有効にした後、第１のアクティビティの再発生を待つ間、スレッドの実行を一時中断するステップとをさらに含む請求項３６に記載の方法。
【請求項４０】
複数のポートイベント有効フラグはそれぞれ、第１のスレッドに関係付けられた複数のポートのそれぞれと関係付けられ、該方法は、スレッド有効フラグを有効にし、続いて前記複数のポートイベント有効フラグを有効にするステップを含む請求項３４に記載の方法。
【請求項４１】
スレッド・レジスタのそれぞれのセットにおける前記スレッドのそれぞれを表す情報を格納するステップをさらに含む請求項２６に記載の方法。
【請求項４２】
前記プロセッサはチップ上に実現され、また、前記第１と第２のポートの少なくとも１つは前記チップ上の他のプロセッサと通信するための内部ポートである請求項２６に記載の方法。
【請求項４３】
前記プロセッサはチップ上に実現され、また、前記第１と第２のポートの少なくとも１つは前記チップの外のデバイスと通信するための外部ポートである請求項２６に記載の方法。
【請求項４４】
少なくとも１つの外部ポートは、チップの物理的な境界のピンにおいて発生する立ち上がり信号エッジまたは立ち下がり信号エッジの検出のためのピンポートである請求項４３に記載の方法。
【請求項４５】
少なくとも１つの外部ポートは、ポートにおける１ビット以上の瞬間の論理レベルを処理するためのデータポートである請求項４３または４４に記載の方法。
【請求項４６】
スレッドを一時中断しそして実行させるための専用の命令を実行するステップをさらに含む請求項２６に記載の方法。
【請求項４７】
前記プロセッサが、前記セットの少なくとも２つの間の少なくとも１つのチャネルをさらに含み、該方法は、前記チャネル上に発生するアクティビティに基づいてスレッドをスケジュールするステップを含む請求項４１に記載の方法。
【請求項４８】
前記割り込みに基づいてスレッドをスケジュールするステップをさらに含む請求項２６に記載の方法。
【請求項４９】
前記割り込みに基づいてスケジュールされたスレッドが第１のスレッドであり、その割り込みが、一時中断中の第１のスレッドを中断する請求項４８に記載の方法。
【請求項５０】
関係付けられたアクティビティが、そのアクティビティに依存するスレッド内の命令の実行時または実行前に発生する場合、一時中断なくそのスレッドをスケジュールするステップをさらに含む請求項２６に記載の方法。
【請求項５１】
第１のポートと第２のポートを有するプロセッサ内において、実行用のマルチプルスレッドをスケジュールするためのスレッド・スケジューラにおいて、
スレッド・スケジューラは、第１のポートにおける第１のアクティビティに依存する該第１のポートが発生させた第１のインディケーションを受信するよう適応しており、
スレッド・スケジューラは、第２のポートにおける第２のアクティビティに依存する該第２のポートが発生させた第２のインディケーションを受信するよう適応しており、
スレッド・スケジューラは、前記インディケーションに基づいて、前記実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするよう適応しており、前記スケジューリングは、スレッドの実行をそれぞれのインディケーションの受信まで一時中断し、
前記第１のアクティビティと前記第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているスレッド・スケジューラ。
【請求項５２】
実行用のマルチプルスレッドのスケジューリングにおいて使用されるポートであって、ポートにおけるアクティビティに依存するインディケーションを発生させるように構成されたアクティビティ処理ロジックと、前記アクティビティに関係付けられたスレッドを識別する情報を格納するためのレジスタと、条件を格納するためのレジスタとを含み、前記アクティビティが前記条件を満たす時、アクティビティ処理ロジックはオンチップで第１のインディケーションを送信するよう適応している、ポート。
【請求項５３】
モバイル・アプリケーション・プロセッサと、少なくとも１つの周辺装置と、該モバイル・アプリケーション・プロセッサと該周辺装置の間に接続されたインタフェース・プロセッサを有するモバイル端末であって、該インタフェース・プロセッサは、
第１のポートであって、該第１のポートにおける第１のアクティビティに依存する第１のインディケーションを発生させるよう動作可能な第１のポートと、
第２のポートであって、該第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるよう動作可能な第２のポートと、
マルチプルスレッドを実行するように構成された実行ユニットと、
前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするように構成されたスレッド・スケジューラであって、前記スケジューリングが、それぞれのレディ信号の受信まで、スレッドの実行を一時中断することを含むスレッド・スケジューラと、を含み、前記第１のアクティビティと前記第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているモバイル端末。
【請求項５４】
相互に接続されたプロセッサのアレイであって、前記プロセッサの少なくとも１つは、
第１のポートであって、該第１のポートにおける第１のアクティビティに依存する第１のインディケーションを発生させるよう動作可能な第１のポートと、
第２のポートであって、該第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるよう動作可能な第２のポートと、
マルチプルスレッドを実行するように構成された実行ユニットと、
前記インディケーションを受信するために接続され、前記インディケーションに基づいて、前記実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするように構成されたスレッド・スケジューラであって、前記スケジューリングはそれぞれのレディ信号の受信までスレッドの実行を一時中断することを含むスレッド・スケジューラと、
を含み、前記第１のアクティビティと前記第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられ、
前記第１と第２のポートの少なくとも１つは、前記少なくとも１つのプロセッサを、アレイ内の他のプロセッサに接続するアレイ。
【請求項５５】
第１のポートにおける第１のアクティビティに依存する第１のインディケーションを発生させるための第１のポート手段と、
第２のポートにおける第２のアクティビティに依存する第２のインディケーションを発生させるための第２のポート手段と、
マルチプルスレッドを実行するための実行手段と、
前記インディケーションを受信し、前記インディケーションに基づいて、前記実行ユニットによる実行用の前記マルチプルスレッドをスケジュールするよう構成されたスレッド・スケジュール手段であって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューリング手段と、
を含み、
前記第１のアクティビティと前記第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているプロセッサ。
【請求項５６】
第１のポートと第２のポートを有するプロセッサ内において、実行用のマルチプルスレッドをスケジュールするスレッド・スケジューラであって、
第１のポートにおける第１のアクティビティに依存する第１のポートが発生させた第１のインディケーションを受信するための手段と、
第２のポートにおける第２のアクティビティに依存する第２のポートが発生させた第２のインディケーションを受信するための手段と、
前記インディケーションに基づいて、前記実行ユニットによる実行用の前記マルチプルスレッドをスケジュールする手段であって、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含む手段と、
を含み、
前記第１のアクティビティと前記第２のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているスレッド・スケジューラ。