(57)【要約】プロセッサは、インタフェース部分と内部環境を有する。インタフェース部分は、現在時間値を受け取るように構成された少なくとも１つのポートと、ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、現在時間値がトリガ時間値と一致するかどうか検出し、前記一致が検出された場合には、ポートと外部環境との間でデータを転送し、転送を示すためにレディ信号を変化させるように構成された比較ロジックとを含む。内部環境は、少なくとも１つのポートと内部環境との間でデータを転送するための実行ユニットと、実行ユニットによって実行するために、一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラとを含む。スケジューリングするステップは、レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含む。
2010525436.tif 000002
【特許請求の範囲】
【請求項１】
インタフェース部分と内部環境とを有するプロセッサであって、前記インタフェース部分は、
現在時間値を受け取るように構成された少なくとも１つのポートと、
前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、
前記現在時間値が前記トリガ時間値と一致するかどうかを検出し、前記一致が検出された場合に、前記ポートと外部環境との間でデータを転送し、前記転送を示すためにレディ信号を変化させるように構成された比較ロジックとを含み、
前記内部環境は、
前記少なくとも１つのポートと前記内部環境との間でデータを転送するための実行ユニットと、
前記実行ユニットによって実行するための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、前記レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含むプロセッサ。
【請求項２】
前記現在時間値を出力するように構成されたカウンタを含み、前記少なくとも１つのポートは、前記カウンタから前記現在時間値を受け取るように構成された、請求項１に記載のプロセッサ。
【請求項３】
複数のポートと複数の第１のレジスタとを含み、前記第１のレジスタはそれぞれ、それぞれのポートと関連付けられ、それぞれのトリガ時間値を記憶するように構成されており、前記スレッドスケジューラによる前記スケジューリングするステップは、前記レディ信号に応じて実行するための前記スレッドの１つまたは複数をスケジューリングするステップを含む、請求項２に記載のプロセッサ。
【請求項４】
前記転送は、入力操作を含み、それにより、前記外部環境から前記少なくとも１つのポートにデータが取り込まれ、前記変化させるステップは、前記レディ信号を、前記データを前記内部環境に入力できることを示す第１の状態に設定するステップを含む、請求項１に記載のプロセッサ。
【請求項５】
前記転送は、出力操作を含み、それにより、前記少なくとも１つのポートのそれぞれから前記外部環境にデータが提示され、前記変化させるステップは、前記レディ信号を、前記少なくとも１つのポートが前記内部環境との間でデータをさらに転送できることを示す第２の状態に設定するステップを含む、請求項１に記載のプロセッサ。
【請求項６】
前記実行ユニットは、前記レディ信号のそれぞれが前記第１の状態にある場合にポートから前記内部環境にデータを入力する入力命令を実行するように構成され、前記入力命令は、前記１つまたは複数のスレッドのシーケンスの構成命令である、請求項４に記載のプロセッサ。
【請求項７】
前記実行ユニットは、前記レディ信号のそれぞれが前記第２の状態にある場合に前記内部環境からポートにデータを出力する出力命令を実行するように構成され、前記出力命令は、前記１つまたは複数のスレッドのシーケンスの構成命令である、請求項５に記載のプロセッサ。
【請求項８】
前記実行ユニットは、前記入力命令が完了したときに前記それぞれのレディ信号を前記第２の状態に設定するように構成された、請求項６に記載のプロセッサ。
【請求項９】
前記実行ユニットは、前記出力命令の完了時に前記それぞれのレディ信号を前記第１の状態に設定するように構成された、請求項７に記載のプロセッサ。
【請求項１０】
前記スレッドスケジューラによる前記スケジューリングするステップは、前記それぞれのレディ信号が前記第１の状態に設定されるまで前記入力命令のスレッドの実行を保留するステップを含む、請求項６のいずれか１項に記載のプロセッサ。
【請求項１１】
前記スレッドスケジューラによる前記スケジューリングするステップは、前記それぞれのレディ信号が前記第２の状態に設定されるまで前記出力命令のスレッドの実行を保留するステップを含む、請求項７に記載のプロセッサ。
【請求項１２】
前記転送は、入力操作と出力操作の両方を含み、前記実行ユニットは、入力命令と出力命令を実行するように構成された、請求項８と請求項９に記載のプロセッサ。
【請求項１３】
前記実行ユニットは、前記トリガ時間値を前記第１のレジスタのうちの１つに記憶するセットトリガ時間命令を実行するように構成された、請求項１に記載のＡプロセッサ。
【請求項１４】
前記外部環境は、前記プロセッサが収容された集積回路の少なくとも１つのピンを含む、請求項１に記載のプロセッサ。
【請求項１５】
前記外部環境は、前記プロセッサが収容された集積回路上の別のプロセッサを含む、請求項１に記載のプロセッサ。
【請求項１６】
ポートと前記内部環境との間のデータの転送は、前記ポートと前記実行ユニットとの間の転送を含む、請求項１に記載のプロセッサ。
【請求項１７】
前記内部環境はバスを含み、ポートと前記内部環境との間のデータの転送は、前記ポートと前記バスとの間の転送を含む、請求項１に記載のプロセッサ。
【請求項１８】
前記内部環境は、複数組の第２のレジスタを含み、各組の第２のレジスタは、前記複数のスレッドのそれぞれに関する情報を記憶し、ポートと前記内部環境との間の転送は、前記ポートと前記第２のレジスタのうちの１つとの間の転送を含む、請求項１に記載のプロセッサ。
【請求項１９】
前記スレッドスケジューラは、１組の実行可能スレッドを維持するように構成され、前記スレッドスケジューラによる前記スケジューリングするステップは、前記セットからスレッドを取り出すことによって前記スレッドを保留するステップを含む、請求項１に記載のプロセッサ。
【請求項２０】
前記少なくとも１つのポートは、タイムスタンプモードで動作可能であり、それにより、前記ポートは、タイムスタンプを前記ポートと前記外部環境との間のデータの転送と関連付ける、請求項１に記載のプロセッサ。
【請求項２１】
前記インタフェース部分は、前記少なくとも１つのポートと関連付けられた第３のレジスタを含み、タイムスタンプの前記関連付けは、前記タイムスタンプされた転送を実行する際に前記第３のレジスタに前記現在時間値を記憶するステップを含む、請求項２０に記載のプロセッサ。
【請求項２２】
前記実行ユニットは、前記タイムスタンプを、前記第３のレジスタから、前記タイムスタンプされた転送と関連付けられたスレッドの前記第２のレジスタのうちの１つに転送するように構成された、請求項１８、２０および２１に記載のプロセッサ。
【請求項２３】
前記実行ユニットは、前記ポートからのデータの入力と関連付けられたタイムスタンプを読み出し、前記トリガ時間値を前記タイムスタンプと指定された時間間隔を加えたものに設定して、前記時間間隔が経過した後で前記ポートから前記外部環境へのデータの出力をトリガする、請求項２０に記載のプロセッサ。
【請求項２４】
前記現在時間を前記実行ユニットに転送するように構成された少なくとも１つのタイマを含む、請求項１に記載のプロセッサ。
【請求項２５】
前記タイマは、ウェイクアップ時間値を記憶するように構成された第４のレジスタと、前記現在時間値が前記ウェイクアップ時間値と一致した場合に指示を生成するように構成された比較ロジックとを含み、
前記スレッドスケジューラによる前記スケジューリングは、前記指示を受け取るまで時限スレッドの実行を保留するようにスケジューリングするステップを含む、請求項２４に記載のプロセッサ。
【請求項２６】
前記実行ユニットは、前記指示に応じて前記タイマから前記現在時間を読み出すように構成された、請求項２５に記載のプロセッサ。
【請求項２７】
前記指示は、前記スレッドスケジューラに送られるスレッド識別子を含み、前記スレッド識別子は、前記時限スレッドを識別する、請求項２５に記載のプロセッサ。
【請求項２８】
前記指示は、前記実行ユニットに送られる継続点ベクトルを含み、前記継続点ベクトルは、前記時限スレッド内の前記実行が再開されるポイントを指定する、請求項２５に記載のプロセッサ。
【請求項２９】
前記実行ユニットは、前記継続点ベクトルを設定するセットベクトル命令を実行するように構成された、請求項２８に記載のプロセッサ。
【請求項３０】
インタフェース部分と内部環境とを有し、前記インタフェース部分が、少なくとも１つのポートと、前記ポートと関連付けられた第１のレジスタとを含み、前記内部環境が、実行ユニットとスレッドスケジューラを含むプロセッサにおいてスレッドをスケジューリングする方法であって、
前記ポートに現在時間値を受け取るステップと、
トリガ時間値を前記第１のレジスタに記憶するステップと、
前記現在時間値を前記トリガ時間値と比較して、前記現在時間値が前記トリガ時間値と一致するかどうかを検出するステップと、
前記一致が検出された場合に、前記ポートと外部環境との間でデータを転送し、前記転送を示すためにレディ信号を変化させるステップと、
前記スレッドスケジューラを操作して、前記実行ユニットにより実行するための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのステップであって、前記レディ信号に応じて実行するために１つまたは複数の前記スレッドをスケジューリングするステップを含むステップと、
前記実行ユニットを操作して前記少なくとも１つのポートと前記内部環境との間でデータを転送するステップとを含む方法。
【請求項３１】
前記プロセッサは、前記現在時間値を出力するように構成されたカウンタを含み、前記現在時間値を前記カウンタから前記少なくとも１つのポートに提供するステップを含む、請求項３０に記載の方法。
【請求項３２】
前記プロセッサは、複数のポートと、それぞれのポートとそれぞれ関連付けられた複数の第１のレジスタとを含み、それぞれのトリガ時間値をそれぞれの第１のレジスタに記憶するステップを含み、前記スレッドスケジューラによってスケジューリングする前記ステップは、前記レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含む、請求項３１に記載の方法。
【請求項３３】
前記転送は、入力操作を含み、それにより、前記前記外部環境から前記少なくとも１つのポートにデータが取り込まれ、前記変化させるステップは、前記レディ信号を、前記データを前記内部環境に入力できることを示す第１の状態に設定する、請求項３０に記載の方法。
【請求項３４】
前記転送は、出力操作を含み、それにより、前記少なくとも１つのポートのそれぞれから前記外部環境にデータが提示され、前記変化させるステップは、前記レディ信号を、少なくとも１つのポートが前記内部環境との間でデータをさらに転送することができることを示す第２の状態に設定するステップを含む、請求項３０に記載の方法。
【請求項３５】
前記レディ信号のそれぞれが第１の状態にある場合に、前記実行ユニットを操作してデータをポートから前記内部環境に入力する入力命令を実行するステップを含み、前記入力命令は、前記１つまたは複数のスレッドのシーケンスの構成命令である、請求項３３に記載の方法。
【請求項３６】
前記レディ信号のそれぞれが第２の状態にある場合に、前記実行ユニットを操作してデータを前記内部環境からポートに出力する出力命令を実行するステップを含み、前記出力命令は、前記１つまたは複数のスレッドのシーケンスの構成命令である、請求項３４に記載の方法。
【請求項３７】
前記入力命令の完了時に、前記実行ユニットを操作して前記それぞれのレディ信号を前記第２の状態に設定するステップを含む、請求項３５に記載の方法。
【請求項３８】
前記出力命令の完了時に、前記実行ユニットを操作して前記それぞれのレディ信号を前記第１の状態に設定するステップを含む、請求項３６に記載の方法。
【請求項３９】
前記スレッドスケジューラによる前記スケジューリングをするステップが、前記それぞれのレディ信号が前記第１の状態に設定されるまで前記入力命令のスレッドの実行を保留するステップを含む、請求項３５に記載の方法。
【請求項４０】
前記スレッドスケジューラによる前記スケジューリングするステップが、前記それぞれのレディ信号が前記第２の状態に設定されるまで前記出力命令のスレッドの実行を保留するステップを含む、請求項３６に記載の方法。
【請求項４１】
前記転送は、入力操作と出力操作の両方を含み、前記実行ユニットを操作して入力命令と出力命令を実行するステップを含む請求項３７および３８に記載の方法。
【請求項４２】
前記実行ユニットは、前記第１のレジスタのうちの１つにトリガ時間値を記憶するセットトリガ時間命令を実行するように構成された、請求項３０に記載の方法。
【請求項４３】
前記外部環境は、前記プロセッサが収容された集積回路の少なくとも１つのピンを含む、請求項３０に記載の方法。
【請求項４４】
前記外部環境は、前記プロセッサが収容された集積回路上の別のプロセッサを含む、請求項３０に記載の方法。
【請求項４５】
ポートと前記内部環境との間のデータの前記転送は、前記ポートと前記実行ユニットとの間の転送を含む、請求項３０に記載の方法。
【請求項４６】
前記内部環境は、バスを含み、ポートと前記内部環境との間のデータの前記転送は、前記ポートと前記バスとの間の転送を含む、請求項３０に記載の方法。
【請求項４７】
前記内部環境は、複数組の第２のレジスタを含み、各組の第２のレジスタは、前記複数のスレッドのそれぞれに関する情報を記憶し、ポートと前記内部環境との間の転送は、前記ポートと前記第２のレジスタのうちの１つとの間の転送を含む、請求項３０に記載の方法。
【請求項４８】
前記スレッドスケジューラを操作して１組の実行可能スレッドを維持するステップを含み、前記スレッドスケジューラによる前記スケジューリングするステップは、前記組の実行可能スレッドからスレッドを除外することによって前記スレッドを保留するステップを含む、請求項３０に記載の方法。
【請求項４９】
前記ポートと前記外部環境との間のデータの転送をタイムスタンプと関連付けるステップを含む、請求項３０に記載の方法。
【請求項５０】
前記インタフェース部分は、前記少なくとも１つのポートと関連付けられた第３のレジスタを含み、タイムスタンプの前記関連付けは、前記タイムスタンプされた転送を実行する際に前記現在時間値を前記第３のレジスタに記憶するステップを含む、請求項４９に記載の方法。
【請求項５１】
前記実行ユニットを操作して、前記タイムスタンプを、前記第３のレジスタから、前記タイムスタンプと関連付けられたスレッドの前記第２のレジスタのうちの１つに転送するステップを含む、請求項４７、４９および５０に記載の方法。
【請求項５２】
前記実行ユニットを操作して、前記ポートからデータの入力と関連付けられたタイムスタンプを読み出し、前記トリガ時間値を前記タイムスタンプと指定された時間間隔を加えたものに設定して、前記時間間隔が経過した後で前記ポートから前記外部環境へのデータの出力をトリガする、請求項４９に記載の方法。
【請求項５３】
前記プロセッサは、少なくとも１つのタイマを含み、前記カウンタから前記実行ユニットに前記現在時間を転送するステップを含む、請求項３０に記載の方法。
【請求項５４】
前記タイマは、第４のレジスタを含み、
前記第４のレジスタにウェイクアップ時間値を記憶するステップと、
前記現在時間値を前記ウェイクアップ時間値と比較して、前記現在時間値が前記ウェイクアップ時間値と一致しているかどうかを検出するステップと、
前記一致が検出された場合に指示を生成するステップとを含み、
前記スレッドスケジューラによる前記スケジューリングするステップが、前記指示を受け取るまで時限スレッドの実行を保留するステップを含む、請求項５３に記載の方法。
【請求項５５】
前記実行ユニットを操作して、前記指示に応じて前記タイマから前記現在時間を読み出すステップを含む、請求項５４に記載の方法。
【請求項５６】
前記指示を生成する前記段階は、前記スレッドスケジューラに、前記時限スレッドを識別するスレッド識別子を送るステップを含む、請求項５４に記載の方法。
【請求項５７】
前記指示を生成するステップは、前記実行ユニットに、前記時限スレッド内の実行が再開されるポイントを指定する継続点ベクトルを送るステップを含む、請求項５４に記載の方法。
【請求項５８】
前記実行ユニットを操作して、前記継続点ベクトルを設定するセットベクトル命令を実行するステップを含む、請求項５７に記載のプロセッサ。
【請求項５９】
モバイルアプリケーションプロセッサ、少なくとも１つの周辺装置、および前記モバイルアプリケーションプロセッサと周辺装置との間に接続されたインタフェースプロセッサを有し、前記インタフェースプロセッサが、インタフェース部分と内部環境を有する移動端末であって、前記インタフェース部分は、
現在時間値を受け取るように構成された少なくとも１つのポートと、
前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、
前記現在時間値が前記トリガ時間値と一致するどうかを検出して、前記一致が検出された場合に、前記ポートとモバイルアプリケーションプロセッサまたは周辺装置との間でデータを転送し、転送を示すためにレディ信号を変化させるように構成された比較ロジックを含み、
前記内部環境は、
前記少なくとも１つのポートと前記内部環境との間でデータを転送するための実行ユニットと、
前記実行ユニットによって実行するために一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、前記レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含むスレッドスケジューラとを含む移動端末。
【請求項６０】
相互接続されたプロセッサの配列であって、前記プロセッサの少なくとも１つが、インタフェース部分と内部環境とを有し、前記インタフェース部分は、
現在時間値を受け取るように構成された少なくとも１つのポートと、
前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、
前記現在時間値が前記トリガ時間値と一致するかどうか検出し、前記一致が検出された場合に、前記ポートと前記配列内の別のプロセッサとの間でデータを転送し、前記転送を示すためにレディ信号を変化させるように構成された比較ロジックとを含み、
前記内部環境は、
前記少なくとも１つのポートと前記内部環境との間でデータを転送するための実行ユニットと、
前記実行ユニットによって実行するために一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、前記レディ信号に応じて実行するための前記スレッドの１つまたは複数をスケジューリングするステップを含むスレッドスケジューラとを含む相互接続されたプロセッサの配列。
【請求項６１】
インタフェース部分と内部環境を有するプロセッサであって、前記インタフェース部分は、
現在時間値を受け取るように構成されたポート手段と、
前記ポート手段と関連付けられトリガ時間値を記憶するためのレジスタ手段と、
前記現在時間値が前記トリガ時間値と一致するかどうかを検出し、前記一致が検出された場合に、前記ポート手段と外部環境手段との間でデータを転送し、前記転送を示すためにレディ信号を変化させるための比較手段とを含み、
前記内部環境は、
前記少なくとも１つのポートと前記内部環境との間でデータを転送するための実行手段と、
前記実行ユニットによって実行するために一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューリング手段であって、前記レディ信号に応じて実行するために１つまたは複数の前記スレッドをスケジューリングするステップを含むスレッドスケジューリング手段とを含むプロセッサ。
【請求項６２】
インタフェース部分と内部環境を有し、前記インタフェース部分が、少なくとも１つのポートと、前記ポートと関連付けられた第１のレジスタとを含み、前記内部環境が、実行ユニットとスレッドスケジューラを含むプロセッサにおいてスレッドをスケジューリングするためのコンピュータプログラム製品であって、コンピュータ上で実行されたときに、
前記ポートで現在時間値を受け取るステップと、
前記第１のレジスタにトリガ時間値を記憶するステップと、
前記現在時間値を前記トリガ時間値と比較して、前記現在時間値が前記トリガ時間値と一致するかどうかを検出するステップと、
前記一致が検出された場合には、前記ポートと前記外部環境との間でデータを転送し、前記転送を示すためにレディ信号を変化させるステップと、
前記スレッドスケジューラを操作して、前記実行ユニットにより実行するために一連の命令をそろぞれ含む複数のスレッドをスケジューリングするステップであって、前記レディ信号に応じて実行するために１つまたは複数の前記スレッドをスケジューリングするステップを含むスケジューリングするステップと、
前記少なくとも１つのポートと前記内部環境との間でデータを転送するステップとを含むコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少なくとも１つの時限ポートを有するプロセッサ、および特に他のプロセッサまたは外部装置と接続するためのインタフェースプロセッサに関する。
【背景技術】
【０００２】
プロセッサ設計者が直面している問題の１つは、プロセッサとの通信を必要とする外部装置が増え続けており、そのような外部装置を処理することである。一般に、この処理は、外部装置に接続されたポートで生じるアクティビティを処理するための割り込み処理機能をプロセッサに提供することにより行われる。例えば１つのポートで複数の外部装置に対応するために、より高性能なインタフェースロジックが使用されるようになってきている。
【０００３】
様々な異なる状況でインタフェーシングが必要とされている。本明細書で背景例として述べる１つの状況は、モバイルアプリケーションの処理にある。
【０００４】
図１は、モバイルアプリケーションプロセッサ２の例示的な応用例を示す。アプリケーションプロセッサ２は、ＣＰＵ４と、複数の周辺装置８と接続する複数のインタフェースコントローラ６とを含む。インタフェースコントローラには、ハードドライブ（ＨＤＤ）８ａおよびＳＤＲＡＭメモリ８ｂと接続するためのメモリコントローラ６ａと、カメラ８ｃと接続するためのビデオコントローラ６ｂと、液晶ディスプレイ（ＬＣＤ）８ｄと接続するためのディスプレイコントローラ６ｃと、マイクロフォン８ｅ、スピーカ８ｆおよびヘッドセット８ｇと接続するための音声コントローラ６ｄと、キーボード８ｈ、汎用シリアルバス（ＵＳＢ）デバイス８ｉ、セキュアデジタル（ＳＤ）カード８ｊ、マルチメディアカード（ＭＭＣ）８ｋ、および万能非同期レシーバ／トランスミッタ（ＵＡＲＴ）装置８１と接続するための接続コントローラ６ｅが挙げられる。インタフェースコントローラ６は、一般に、バス３を介してＣＰＵ４に接続される。システムは、また、電源コントローラ１０と無線プロセッサ１２を含む。
【０００５】
インタフェースコントローラ６は、多少概略的に示されているが、何らかの専用入出力ロジックまたは特別に構成されたポートを概略的に表わしていることに注意されたい。
【０００６】
従来、外部インタフェーシングは、割り込みまたはポーリングを使用して達成されている。割り込みが使用されるとき、外部周辺装置は、プロセッサに入力する準備ができているデータがあること、またはプロセッサからのデータを必要とすることをプロセッサに知らせる信号を送る。ポーリングを使用するとき、プロセッサは、常にデバイスの状態を確認して、データを提供するか受け入れる準備ができているかどうかを判定する。
【０００７】
図１のようなアプリケーションプロセッサ２を実現する１つの可能性は、特定用途向け集積回路マイクロコントローラ（ＡＳｉＣ）を使用することである。ＡＳＩＣは、特定用途に専用化されその用途に適するように最適化されたマイクロプロセッサを含む場合があるハードワイヤードデバイスである。ＡＳＩＣは、所定の機能では、一般に、他の選択肢よりの安価で消費電力が少ない。しかしながら、ＡＳＩＣは、設計が複雑で、予め設計されなければならず、構成の変更が容易ではない。
【０００８】
別の可能性は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスを使用することである。ＦＰＧＡは、製造後に「現地で」構成することができる半導体デバイスである。ＦＰＧＡを構成するには、最初に、コンピュータを使用して、例えば、回路図を描くかまたは機能を示すテキストファイルを作成することにより、所望の論理機能をモデル化する。ＦＰＧＡは、静的に構成された相互接続を介して通信するルックアップテーブルの配列を含む。コンピュータモデルは、ＦＰＧＡベンダから提供されたソフトウェアを使用してコンパイルされ、このソフトウェアは、ＦＰＧＡルックアップテーブルにダウンロードすることができるバイナリファイルを作成する。これにより、機器の製造業者は、ＦＰＧＡを調整して自分自身の個別のニーズを満たすことができる。
【０００９】
この例では、インタフェースコントローラ６は、ＦＰＧＡとして実現される。これには、携帯電話の製造業者が、汎用ＦＰＧＡデバイス２を購入し、次にそれを自分の望む用途に固有になるように現場で（すなわち現地で）構成できるという利点がある。しかしながら、ＦＰＧＡの欠点は、ＡＳＩＣより高価で、速度が遅く、電力を消費することである。
【００１０】
代替例では、チップ全体２がＦＰＧＡで実現されてもよく、あるいはチップ２が、チップ２とそれぞれの周辺装置８との間に個別のＦＰＧＡチップが接続された汎用プロセッサでもよい。しかしながら、これらの選択肢は、ほとんどの携帯電話や他の消費者機器では、より高価で大量の電力を消費する。
【００１１】
価格、速度、限界およびエネルギー消費レベルがＡＳＩＣより優れたＦＰＧＡの設定可能性を達成すると好都合である。この目的を達成する際の１つの特定の課題は、プロセッサとその環境間の対話のタイミングを適切にすることである。
【発明の概要】
【課題を解決するための手段】
【００１２】
本発明の１つの態様によれば、インタフェース部分と内部環境とを有するプロセッサが提供され、インタフェース部分は、現在時間値を受け取るように構成された少なくとも１つのポートと、前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、現在時間値がトリガ時間値と一致するかどうかを検出し、前記一致が検出された場合には、ポートと外部環境との間でデータを転送しかつレディ信号を変化させて転送を示すように構成された比較ロジックとを含み、内部環境は、少なくとも１つのポートと内部環境との間でデータを転送するための実行ユニットと、実行ユニットによって実行するための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含むスレッドスケジューラとを含む。
【００１３】
これにより、スレッドのスケジューリングをデータの転送のタイミングと密接に関連づけることができ、それにより、それらのスレッドによって処理される入出力操作に対する応答時間の正確な制御が実現される。
【００１４】
実施形態では、スレッドスケジューラは、１組の実行可能スレッドを維持するように構成されてもよく、スレッドスケジューラによる前記スケジューリングするステップは、前記１組の実行可能スレッドからスレッドを除外することによってそのスレッドをサスペンドするステップを含んでもよい。スレッドをサスペンドするこの手法は、高速反応時間が必要とされるときに割り込みを使用するのに好ましい。スレッドのサスペンドを使用することによって、スレッドスケジューラは、関連アクティビティを予想してスレッドを実行するために準備をすることができ、即ち、プロセッサは、反応する「準備のできた（primed）」レディ状態である。これと対照的に、割り込みを使用すると、実行ユニットは、関連ない可能性のあるコードを実行している間に外部装置からの信号によって割り込まれる。割り込まれた場合、現在のプログラム状態を保存した後でなければ割り込みを実行できない。したがって、割り込みを使用する反応時間はかなり遅い。ポーリングは、連続的な照会と応答が必要になるためエネルギー効率はあまり高くない。
【００１５】
プロセッサは、現在時間値を出力するように構成されたカウンタを含んでもよく、前記少なくとも１つのポートは、カウンタから現在時間値を受け取るように構成される。
【００１６】
プロセッサは、複数のポートと複数の第１のレジスタを含んでもよく、各第１のレジスタは、それぞれのポートと関連付けられかつそれぞれのトリガ時間値を記憶するように構成され、スレッドスケジューラによる前記スケジューリングするステップは、レディ信号に応じて実行するための前記スレッドの１つまたは複数をスケジューリングするステップを含むことができる。
【００１７】
転送は、入力操作を含んでもよく、それにより、データが、前記外部環境からの少なくとも１つのポートに取り込まれ、前記変化させるステップは、前記レディ信号を、データを内部環境に入力できることを示す第１の状態に設定するステップを含んでもよい。転送は、出力操作を含んでもよく、それにより、データが、前記少なくとも１つのポートのそれぞれから外部環境に提供され、前記変化させるステップは、前記レディ信号を、少なくとも１つのポートが内部環境との間でデータをさらに転送できることを示す第２の状態に設定するステップを含んでもよい。
【００１８】
実行ユニットは、前記レディ信号のそれぞれが第１の状態にある場合に、ポートから内部環境にデータを入力する入力命令を実行するように構成されてもよく、入力命令は、前記１つまたは複数の関連スレッドのシーケンスの構成命令である。実行ユニットは、前記レディ信号のそれぞれが第２の状態にある場合に、内部環境からポートにデータを出力する出力命令を実行するように構成されてもよく、出力命令は、前記１つまたは複数の関連スレッドのシーケンスの構成命令である。
【００１９】
実行ユニットは、入力命令の完了時に前記それぞれのレディ信号を第２の状態にセットするように構成されてもよい。実行ユニットは、出力命令の完了時に前記それぞれのレディ信号を第１の状態にセットするように構成されてもよい。
【００２０】
スレッドスケジューラによる前記スケジューリングするステップは、それぞれのレディ信号が前記第１の状態にセットされるまで入力命令のスレッドの実行をサスペンドするステップを含んでもよい。スレッドスケジューラによる前記スケジューリングするステップは、それぞれのレディ信号が前記第２の状態にセットされるまで出力命令のスレッドの実行をサスペンドするステップを含んでもよい。
【００２１】
転送は、入力操作と出力操作の両方を含んでもよく、実行ユニットは、入力命令と出力命令を実行するように構成されてもよい。
【００２２】
実行ユニットは、前記第１のレジスタのうちの１つにトリガ時間値を記憶するセットトリガ時間命令を実行するように構成されてもよい。
【００２３】
前記外部環境は、前記プロセッサが収容された集積回路の少なくとも１つのピンを含んでもよい。前記外部環境は、前記プロセッサが収容された集積回路上の別のプロセッサを含んでもよい。ポートと内部環境との間のデータの転送は、そのポートと実行ユニットとの間の転送を含んでもよい。内部環境は、バスを含み、ポートと内部環境との間のデータの転送は、そのポートとバスとの間の転送を含んでもよい。内部環境は、複数組の第２のレジスタを含み、各組の第２のレジスタは、前記複数のスレッドのそれぞれに関する情報を記憶し、ポートと内部環境との間の転送は、そのポートと前記第２のレジスタのうちの１つとの間の転送を含んでもよい。
【００２４】
前記少なくとも１つのポートは、タイムスタンプモードで動作可能でよく、それによりポートは、タイムスタンプをポートと外部環境との間のデータの転送と関連付ける。インタフェース部分は、前記少なくとも１つのポートと関連付けられた第３のレジスタを含んでもよく、タイムスタンプの前記関連付けは、タイムスタンプされた転送を実行する際に現在時間値を第３のレジスタに記憶するステップを含む。実行ユニットは、タイムスタンプを、第３のレジスタから、タイムスタンプされた転送と関連付けられたスレッドの前記第２のレジスタのうちの１つに転送するように構成されてもよい。
【００２５】
実行ユニットは、ポートからデータの入力と関連付けられたタイムスタンプを読み出し、トリガ時間値をタイムスタンプと指定時間間隔を加えたものに設定して、時間間隔が経過した後でポートから外部環境へのデータの出力をトリガするように構成されてもよい。
【００２６】
プロセッサは、現在時間を実行ユニットに転送するように構成された少なくとも１つのタイマを含んでもよい。タイマは、ウェイクアップ時間値を記憶するように構成された第４のレジスタと、現在時間値がウェイクアップ時間値と一致した場合に指示を生成するように構成された比較ロジックとを含んでもよく、スレッドスケジューラによる前記スケジューリングするステップは、時限スレッドの実行を、指示を受け取るまでサスペンドするようにスケジューリングするステップを含んでもよい。実行ユニットは、指示に応じてタイマから現在時間を読み出すように構成されてもよい。
【００２７】
指示は、スレッドスケジューラに送られたスレッド識別子を含んでもよく、このスレッド識別子は時限スレッドを識別する。指示は、実行ユニットに送られた継続点ベクトルを含んでもよく、継続点ベクトルは、時限スレッド内の実行が再開されるポイントを指定する。実行ユニットは、前記継続点ベクトルをセットするセットベクトル命令を実行するように構成されてもよい。
【００２８】
本発明の別の態様によれば、インタフェース部分と内部環境とを有し、インタフェース部分が、少なくとも１つのポートと、前記ポートと関連付けられた第１のレジスタとを含み、内部環境が、実行ユニットとスレッドスケジューラとを含むプロセッサにおいてスレッドをスケジューリングする方法が提供され、この方法は、現在時間値をポートに受け取るステップと、トリガ時間値を第１のレジスタに記憶するステップと、現在時間値をトリガ時間値と比較して、現在時間値がトリガ時間値と一致するかどうか検出するステップと、前記一致が検出された場合に、ポートと外部環境との間でデータを転送し、転送を示すためにレディ信号を変化させるステップと、スレッドスケジューラを操作して、実行ユニットにより実行するための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするステップであって、レディ信号に応じて実行するために１つまたは複数の前記スレッドをスケジューリングするステップを含むスケジューリングするステップと、実行ユニットを操作して少なくとも１つのポートと内部環境との間でデータを転送するステップとを含む。
【００２９】
本発明の別の態様によれば、モバイルアプリケーションプロセッサと、少なくとも１つの周辺装置と、モバイルアプリケーションプロセッサと周辺装置との間に接続されたインタフェースプロセッサとを有し、インタフェースプロセッサが、インタフェース部分と内部環境を有する移動端末であって、インタフェース部分は、現在時間値を受け取るように構成された少なくとも１つのポートと、前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、現在時間値がトリガ時間値と一致するかどうかを検出し、前記一致が検出された場合には、ポートとモバイルアプリケーションプロセッサまたは周辺装置との間でデータを転送し、転送を示すためにレディ信号を変化させるように構成された比較ロジックとを含み、内部環境は、少なくとも１つのポートと内部環境との間でデータを転送するための実行ユニットと、実行ユニットによる実行のために一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、レディ信号に応じて実行するための１つまたは複数の前記スレッドをスケジューリングするステップとを含むスレッドスケジューラとを含む。
本発明の別の態様によれば、相互接続されたプロセッサの配列が提供され、前記プロセッサのうちの少なくとも１つが、インタフェース部分と内部環境とを有し、前記インタフェース部分は、現在時間値を受け取るように構成された少なくとも１つのポートと、前記ポートと関連付けられて、トリガ時間値を記憶するように構成された第１のレジスタと、現在時間値がトリガ時間値と一致するかどうかを検出し、前記一致が検出された場合には、ポートと配列内の別のプロセッサとの間でデータを転送し、転送を示すためにレディ信号を変化させるように構成された比較ロジックとを含み、内部環境は、少なくとも１つのポートと内部環境との間でデータを転送するための実行ユニットと、実行ユニットによる実行のために一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューラであって、レディ信号に応じて実行するための１つまたは複数の前記スレッドをスケジューリングするステップを含むスレッドスケジューラとを含む。
【００３０】
本発明の別の態様によれば、インタフェース部分と内部環境とを有するプロセッサが提供され、インタフェース部分は、現在時間値を受け取るように構成されたポート手段と、前記ポート手段と関連付けられて、トリガ時間値を記憶するためのレジスタ手段と、現在時間値がトリガ時間値と一致するかどうかを検出し、前記一致が検出された場合には、ポート手段と外部環境との間でデータを転送し、転送を示すためにレディ信号を変化させるように構成された比較手段とを含み、内部環境は、少なくとも１つのポートと内部環境との間でデータを転送するための実行手段と、実行ユニットによって実行するための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするためのスレッドスケジューリング手段であって、レディ信号に応じて実行するために１つまたは複数の前記スレッドをスケジューリングするステップを含むスレッドスケジューリング手段とを含む。
【００３１】
本発明の別の態様によれば、インタフェース部分と内部環境とを有し、インタフェース部分が、少なくとも１つのポートと、前記ポートと関連付けられた第１のレジスタとを含み、内部環境が、実行ユニットとスレッドスケジューラを含むプロセッサにおいてスレッドをスケジューリングするためのコンピュータプログラム製品が提供され、プログラムは、コンピュータ上で実行されたときに、現在時間値をポートに受け取るステップと、トリガ時間値を第１のレジスタに記憶するステップと、現在時間値をトリガ時間値と比較して現在時間値がトリガ時間値と一致するかどうかを検出するステップと、前記一致が検出された場合には、ポートと外部環境との間でデータを転送し、転送を示すためにレディ信号を変化させるステップと、スレッドスケジューラを操作して、実行ユニットに実行させるための一連の命令をそれぞれ含む複数のスレッドをスケジューリングするステップであって、レディ信号に応じて実行するために前記スレッドの１つまたは複数をスケジューリングするステップを含むステップと、少なくとも１つのポートと内部環境との間でデータを転送するステップとを実行するコードを含む。
【００３２】
本発明をよりよく理解し本発明をどのように実施できるかを示すために、次に、例として、対応する図面について言及する。
【図面の簡単な説明】
【００３３】
【図１】当該技術分野で既知のＦＰＧＡデバイスの例示的な応用例を示す図である。
【図２】インタフェースプロセッサの例示的な応用例を示す図である。
【図２ａ】インタフェースプロセッサの別の応用例を示す図である。
【図３】インタフェースプロセッサの構造の概略図である。
【図４】時限ポートの概略図である。
【図５】スレッドレジスタセットの概略図である。
【図６】タイマの概略図である。
【図７】時限ポートの動作を示す流れ図である。
【図８】タイマの動作を示す流れ図である。
【発明を実施するための形態】
【００３４】
図２は、携帯電話におけるインタフェースプロセッサの応用例を示す。モバイルアプリケーションプロセッサ２は、複数の周辺装置８との通信を必要とする。図１と同じように、アプリケーションプロセッサ２は、バス３、ＣＰＵ４、およびハードドライブ（ＨＤＤ）８ａとＳＤＲＡＭメモリ８ｂを接続するためのメモリコントローラ６ａ、ならびに電源コントローラ１０と無線プロセッサ１２を含む。
【００３５】
しかしながら、図２の構成では、専用コントローラ６の代わりに、ＣＰＵ４が、汎用ポート７を介して外部と通信することができる。この例では、カメラ８ｃおよび液晶ディスプレイ８ｄと接続するための汎用ポート７ａおよび７ｂが提供され、マイクロフォン８ｅ、スピーカ８ｆおよびヘッドセット８ｇと接続するための汎用ポート７ｃが提供され、キーボード８ｈ、汎用シリアルバス（ＵＳＢ）デバイス８ｉ、セキュアデジタル（ＳＤ）カード８ｊ、マルチメディアカード（ＭＭＣ）８ｋおよび汎用非同期レシーバ／トランスミッタ（ＵＡＲＴ）デバイス８１と接続するための汎用ポート７ｄが提供される。
【００３６】
図２では、インタフェースプロセッサ１４ａ、１４ｂおよび１４ｃが、関連ポート７の出力側に配置されており、第１のインタフェースプロセッサ１４ａは、画像装置８ｃ〜８ｄと汎用ポート７ａ〜７ｂとの間に接続され、第２のインタフェースプロセッサ１４ｂは、音声装置８ｅ〜８ｇとの間に接続されており、第３のインタフェースプロセッサ１４ｂが、汎用ポート７ｄと様々な接続装置８ｈ〜８ｍとの間に接続されている。後述するように、インタフェースプロセッサ１４ａ〜１４ｃによって、応用例に固有の表示機能、音声機能および接続機能が実現されるので、ポート７は汎用ポートでよい。インタフェースプロセッサ１４は、他の場合にはＦＰＧＡによって提供される適応性と設定可能性を提供するので、ポート７は、ＦＰＧＡロジックを使用しなくてもよい。インタフェースプロセッサ１４ａは、ポート７ａおよび７ｂに接続されたポート２２ａおよび２２ｂと、外部装置８ｃおよび８ｇに接続されたポート２２ｃ、２２ｄ、２２ｅおよび２２ｆとを有する。図２に示していないが、インタフェースプロセッサ１４ｂおよび１４ｃは、同様のポートを有する。
【００３７】
インタフェースプロセッサは、通常、インタフェースを介してデータを転送するために使用される固有プロトコルの実施、パラレル形式とシリアル形式間の変換を含むデータの再フォーマット、および場合によってはデータの符号化、圧縮、暗号化などのより高度な機能に関与する。
【００３８】
インタフェースプロセッサの別の応用例は、図２ａに示した多重プロセッサチップ２０２内のタイルとしてのものである。このチップ２０２は、チップ２０２上のプロセッサ間の通信を支援する高性能相互接続２０４と、複数のチップからシステムを容易に構成できるようにするチップ間リンク２０６とを使用する。各プロセッサ１４は、ポート２２を介して、そのチップ間リンク２０６と高性能相互接続２０４に接続される。
【００３９】
以下でより詳しく述べるインタフェースプロセッサの重要な特徴は、ポート２２におけるアクティビティを管理する機能である。各インタフェースプロセッサは、ＣＰＵ、メモリおよび通信を含む。ＣＰＵとポート間の直接接続と応答接続を可能にするために、各プロセッサは、いくつかの並行プログラムスレッドを実行するためのハードウェア支援を有し、各プログラムスレッドは、一連の命令を含み、それらの命令の少なくとも幾つかは、具体的には、ポートにおけるアクティビティを処理する役割を持つ。以下でより詳しく述べるように、ハードウェア支援には次のようなものがある。
−各スレッドごとに１組のレジスタ
−実行するスレッドを動的に選択するスレッドスケジューラ
−入出力に使用される１組のポート（ポート２２）
−入出力を外部時間領域と同期させるための１組のドックジェネレータ
−実時間の実行を制御する１組のタイマ
各プロセッサ上で小さな１組のスレッドを使用して、通信または入出力が、プロセッサによって処理される他の保留タスクと一緒に進行することを可能にし、また幾つかのスレッドを継続させながら同時に他のスレッドをサスペンドしてリモートインタフェースプロセッサとの間の通信を保留することによって相互接続における待ち時間を隠すことができる。
【００４０】
図３は、本発明の一実施形態によるインタフェースプロセッサ１４の例示的アーキテクチャを概略的に示す。プロセッサ１４は、スレッドスケジューラ１８の制御下で命令のスレッドを実行する実行ユニット１６を含む。プロセッサ１４は、更に、バス１３、プログラムコードと他のデータを保持するためのランダムアクセスメモリ（ＲＡＭ）２４、およびブートコードなどの永久情報を記憶するための読み出し専用メモリ（ＲＯＭ）（図示せず）を含む。
【００４１】
スレッドスケジューラ１８は、実行ユニット１６が実行しなければならないスレッドを動的に選択する。従来、スレッドスケジューラの機能は、単に、プロセッサが完全に占有されたままになるようにプログラムメモリからのスレッドをスケジューリングすることである。しかしながら、本発明によれば、スレッドスケジューラ１８によるスケジューリングは、ポート２２におけるアクティビティとも関連付けられる。この点に関して、スレッドスケジューラは、ポートにおける入力または出力アクティビティの結果としてスレッドが実行可能になるときの遅延を最小限に抑えるために、ポート２２に直接結合されてもよいことに注意されたい。
【００４２】
スレッドスケジューラ１８が検討中のｍ個のスレッドはそれぞれ、スレッドスケジューラ１８がアクセスするレジスタ２０のバンク内のそれぞれの組のスレッドレジスタ２０1．．．２０mによって表わされる。また、メモリ２４からフェッチされた命令を実行ユニット１６に発行する前に、その命令を一時的に保持するための命令バッファ（ＩＮＳＴＲ）１９も提供される。これらのレジスタの詳細は後述する。
【００４３】
スレッドスケジューラ１８は、ｍ個のスレッドのうち、「実行（run）」と呼ばれる１組ｎ個の実行可能スレッドを維持し、その実行可能スレッドから、好ましくはラウンドロビン方式で次々に命令を取得する。スレッドが継続できないとき、そのスレッドは、実行セットから除外されることによりサスペンドされる。この理由は、例えば、スレッドが以下のタイプのアクティビティのうちの１つ又は複数を待っているからである。
−レジスタが、実行できる前に初期化されている。
−レジスタが、準備ができていないポート又はデータが利用可能でないポートから入力を試みた。
−レジスタが、準備ができていないポート又はデータの余地のないポートへの出力を試みた。
−ポートが入力の準備ができたときに生成される可能性のある１つまたは複数のイベントを待機させる命令を実行した。
【００４４】
本明細書で使用される用語「イベント」が、基本的な入出力操作と少し異なる特定のタイプの操作を指すことに注意されたい。その違いは、図４と図５に関連して後述する。
【００４５】
また、プロセッサは、第１のタイミング信号を第１のクロック信号ｃｋ１の形で出力する第１のクロックジェネレータ１７1と、第２のタイミング信号を第２のクロック信号ｃｋ２、ｃｋ２’およびｃｋ２”の形でそれぞれの出力する複数の第２のクロックジェネレータ１７2と、第３のタイミング信号を第３のクロック信号ｃｋ３の形で出力する第３のクロックジェネレータ１７3とを含む。用語の都合上、ポート２２および第２のクロックｃｋ２、ｃｋ２’およびｃｋ２”を、概略的にプロセッサのインタフェース部分と見なす場合があり、また、実行ユニット１６、スレッドスケジューラ１８、第１のクロック１７1、第３のクロック１７3、およびバス１３やメモリ２４などの他の構成要素を、概略的にプロセッサの内部環境と見なす場合がある。プロセッサが対話する任意の外部装置、エンティティ、または刺激は、外部環境の一部と見なされることがある。
【００４６】
第１および第３のクロックジェネレータ１７1〜１７3は、好ましくはクロックソースである。第２のクロックジェネレータ１７2はそれぞれ、１ビットポートを介して受け取った第１のドック信号ｃｋ１、第３のクロック信号ｃｋ３、および外部クロック信号のうちのいずれかから、それぞれのクロック信号ｃｋ２、ｃｋ２’およびｃｋ２”を取得するように構成される。また、第２のクロックジェネレータ１７2はそれぞれ、受け取ったクロック信号を必要に応じて特定の除数で割るための８ビット分周器を有する。各クロックジェネレータ１７2は、受け取ったクロック信号を選択するために、そのジェネレータによって使用されるそれぞれのクロックソースの識別子を記憶するソースレジスタＳＩＤを含む。スイッチボックス５６が、第１のクロック信号ｃｋ１または外部クロック信号のいずれかをそれぞれの第２のクロックジェネレータ１７2に接続するように構成される。従って、第２のクロックジェネレータ１７2は、異なるクロックソースおよび／または分周要素（division factor）を有することができる。
【００４７】
実行ユニット１６とスレッドスケジューラ１８は、第１のクロック信号ｃｋ１によってクロックされる。即ち、スレッドは、第１のクロック信号ｃｋ１と合わせて実行セットから次々にスケジューリングされ、それらのスレッドの命令は、メモリ２４からフェッチされ、実行ユニット１６に発行され、第１のクロック信号ｃｋ１に合わせて実行される。これらの命令のいくつかは、入力命令と出力命令を含み、その結果、内部とポートの間のデータの転送は、第１のクロック信号ｃｋ１に合わせて実行される。すなわち、これらのタスクは、第１のクロック信号ｃｋ１のエッジでトリガされる。
【００４８】
クロックモードの場合、各ポート２２は、特定の第２のクロック信号によってクロックされる。スイッチボックス５２によって第２の信号ｃｋ２、ｃｋ２’およびｃｋ２”のどれをポート２２のどれに出力するように選択してもよい。選択を容易にするために、各ポート２２は、対応するレジスタＣＫＩＤ５４と関連付けられ、レジスタＣＫＩＤ５４は、第２のクロックジェネレータ１７2のうちの１つの識別子を記憶する。スイッチボックス５２は、第２のクロック信号を、識別されたクロックジェネレータから対応するポートに供給するように構成される。以下の考察では、ポート２２をクロックするために第２のクロック信号ｃｋ２が選択されると仮定する。即ち、データは、ポート２２と外部環境の間で第２のクロック信号ｃｋ２と合わせて転送され、またデータの入力可用性とポートの出力可用性が、第２のクロック信号ｃｋ２と合わせて信号伝達される。すなわち、これらのタスクは、第２のクロック信号ｃｋ２のエッジでトリガされる。ポート２２の動作は、図４と関連してより詳細に後述する。
【００４９】
クロック領域間でデータを転送するとき、準安定性を回避するために何らかの同期が必要とされ、この準安定性は、データ信号が変化状態のときにデータが何らかの事情で読み出された場合に生じる問題であることに注意されたい。準安定性を回避するための同期技術は、当該技術分野で周知であり、本明細書ではこれ以上言及しない。
【００５０】
プロセッサ１４は、クロックジェネレータ１７2に加えて、第１のクロック信号ｃｋ１によってクロックされるカウンタ５７を含む。カウンタから出力される値は、単純にオン・オフに変化するクロック信号と異なり、第１のクロック信号ｃｋ１の複数サイクルにわたって累積的に増分する。従って、このカウンタ５７から出力された値は、カウンタが最後にリセットされてから経過した時間の長さである現在システム時間（ｔｍ）を表わす。
【００５１】
これと関連して、システム時間カウンタ５７にはいくつかのタイマ５８が提供される。タイマ５８自体は、時間値をカウントせずに、その代わりに各タイマ５８は、カウンタ５７から実行ユニット１６（図示しない接続により）に時間値ｔｍを転送する働きをする。タイマが無条件モードの場合、実行ユニットは、単純にタイマ５８によって現在時間値ｔｍを読み出すことができる。タイマ５８が条件付きモードの場合、実行ユニットは、タイマと関連付けられたレジスタＴＩＭＥ５９に記憶されたトリガ時間値より時間値が後になった後でのみタイマ５８から時間値ｔｍを読み出す。対応するスレッドは、トリガ時間値が現在時間値と一致するまで休止されてもよい。図６と関連して後述するように、タイマを使用してイベントを生成する場合もある。
【００５２】
さらに、時間カウンタ５７を使用して、ポート２２を介したデータの入出力のタイミングを制御することができる。時限モードの場合、ポート２２は、第２のクロック信号ｃｋ２のエッジによってではなく指定した時間の検出によってトリガされる。これにより、外部装置と対話するときに応答時間の正確な制御が可能になり有利である。トリガ時間値を記憶するために、独立したそれぞれのＴＩＭＥレジスタ５５が各ポート２２と関連付けられる。各ポート２２は、カウンタ５７から現在システム時間値ｔｍを受け取り、ポートが時限モードのときに、現在時間値ｔｍが、それぞれのＴＩＭＥレジスタ５５に記憶されたトリガ時間値と一致するときだけデータがポートと外部環境間で転送されるように構成された比較ロジックを含む。すなわち、一致が検出されたとき、入力データが、外部環境からポート内にサンプリングされるか、出力データが、ポートから外部環境に提示される。また、このポートと外部環境間の転送は、一致が検出されたときだけ信号伝達される。これは、転送の代わりであり、信号伝達は、第２のクロック信号ｃｋ２のエッジによってトリガされる。
【００５３】
さらに、時間カウンタ５７との接続により、各ポートは、入って来たデータに入力時間をタイムスタンプし、そのタイムスタンプをスレッドに利用可能にすることができる。
【００５４】
反応時間を迅速にするために、スレッドスケジューラ１８と実行ユニット１６の間に、実行ユニット１６がどのスレッドをフェッチし実行すべきかをスレッドスケジューラ１８が制御できるようにする直接ハードワイヤード接続２８が提供されると好都合である。また、スレッドスケジューラ１８と各ポート２２の間に直接ハードワイヤードパス３０ａ、３０ｂ、３０ｃが提供され、スレッドスケジューラ１８と各レジスタ２０の間に直接ハードワイヤードパス２９1．．．２９mが提供される。これらの直接パスは、スレッドスケジューラが、それぞれのスレッドをポート２２の１つまたは複数と関連付け、特に、特定のアクティビティが生じたときにポートからレディ指示を戻し、プロセッサが、ポート２２において生じたアクティビティまたは刺激に対して迅速に応答することを可能にする制御パスを提供することが好ましい。ポートに対するスレッドスケジューラの動作は、図４と図６と関連して後述する。
【００５５】
実行ユニット１６は、また、直接接続２７および３１を介して各ポート２２ａ〜２２ｃと各レジスタ２０1〜２０mにアクセスし、これにより、コアプロセッサとレジスタと外部環境との間に直接リンクが提供される。これらの直接パスは、更に、実行ユニットが状態をポートに渡すことを可能にする制御パスを提供することが好ましい。これは、図４に関して後で更に詳しく検討される。また、直接パス２７および３１は、スレッドレジスタ２０とポート２２の間で直接データを入出力することを可能にし、それによりスレッドが外部環境と直接通信することを可能にする。例えば、データは、メモリ２４に書き込まれてからフェッチされるのではなく、外部装置からスレッドのオペランドレジスタのうちの１つに直接書き込まれてもよい。これと反対に、操作後に、オペランドレジスタからのデータが、実行ユニット１６によってピックアップされ、ポート２２から直接送出されてもよい。これにより、応答時間が大幅に改善される。
【００５６】
「直接接続」または「直接パス」は、実行ユニットとプログラムメモリ２４の間の接続とは別の接続を意味することに注意されたい。したがって、例えば、スレッドスケジューラ１８と実行ユニット１６は、ポート２２から入力されたデータを記憶し後でメモリ２４からフェッチすることなく、そのデータにアクセスする。詳細には、実行ユニット１６とメモリ２４間の接続がバス１３を介している場合、「直接」接続またはパスは、バスと別のものを意味する。したがって、ポート２２とレジスタ２０とスレッドスケジューラ１８と実行ユニット１６との間の様々な通信はすべて、バスアービトレーションを必要とせずに行うことができ、反応時間が改善される。また、ポート２２は、バス１３との更に他の接続（図示せず）を備えてもよい。
【００５７】
この用途で使用される用語「ポート」は、「ピンポート」または「データポート」のどちらを指すこともある。ピンポートは、単一ピンに対する直接インタフェースである。これは、プロセッサチップの物理的境界にあるピンに生じる信号の個別の論理的遷移（すなわち、立ち上がりと立ち下がり）を検出する役割をするロジックである。データポートは、一般に入出力バッファに蓄積されかつ一般にワードなどのデータの一部分を構成する１つまたは複数のビットを処理することができるという点で「より高レベル」である。立ち上がりと立ち下がりを検出する代わりに、データポートは、特定の瞬間におけるビットの状態または論理レベルを処理する。データポートは、オンチップでもオフチップでもよく、あるいは同一チップ上に埋め込まれた別のプロセッサへのポートでもよい。
【００５８】
図４は、本発明の好ましい実施形態によるポートに２２を概略的に示す。ポート２２は、プロセッサ１４との間で入出力データをやりとりするための入出力バッファ３２を含む。さらに、各ポート２２は、ポートで生じるアクティビティを監視し、特定のアクティビティの発生を、少なくとも１つのレディビットまたはフラグ３７によって信号伝達するためのアクティビティ処理ロジック３６を含む。レディフラグ３７は、直接パス３０によってスレッドスケジューラに信号伝達されることが好ましく、また、直接接続３１によって実行ユニットにより制御されてもよい。図４に示したように、直接接続３１が、いくつかの接続を含むことが好ましいことに注意されたい。ポートが検出する可能性のある潜在的アクティビティは、次のものがある。
−データがポートに入力されたこと
−特定のデータがポートに入力されたこと
−ポートが出力に利用可能になったこと、および／または
−特定の時間に達したこと
そのようなアクティビティの検出を容易にするために、ポート２２は、１組のレジスタ３８を備える。これらのレジスタは、関連スレッドの識別を記憶するためのスレッド識別子（ＴＩＤ）レジスタ、１つまたは複数の状態を記憶するための制御（ＣＴＲＬ）レジスタ、実行がサスペンドされたプログラム内の位置を記憶するための継続点ベクトル（ＶＥＣＴＯＲ）レジスタ、および状態と関連付けられた任意のデータを記憶するためのデータ（ＤＡＴＡ）レジスタを含む。値ＴＩＤは、直接パス３０（図３では３０ａ、３０ｂ、３０ｃになる）によってスレッドスケジューラ１８によりレジスタ３８に書き込まれ、値ＶＥＣＴＯＲ、ＣＴＲＬおよびＤＡＴＡは、直接パス３１によって実行ユニット１６により書き込まれる。ＴＩＤは、関連スレッドを識別するために、所望のアクティビティを検出したときにスレッドスケジューラ１８に戻される。レジスタ３８は、また、ポートのクロックジェネレータ１７２を識別するクロックジェネレータ識別子レジスタＣＫＩＤ５４、指定された時間値を記憶するトリガ時間レジスタＴＩＭＥ５５、およびタイムスタンプレジスタＴＳＴＡＭＰを含む。アクティビティロジックは、また、さらに詳しく後述するイネーブルフラグ３９を含む。
【００５９】
レジスタ３８は、図４では、ポート２２内に含まれるように示されているが、レジスタ３８は、実際には、プロセッサ１４内のどこか他の場所にあってもよく、単純にポート２２と関連付けられてもよいことに注意されたい。
【００６０】
入出力バッファの内容は、外部環境から見える。すなわち、ポートがオフチップポートの場合は、入出力バッファ３２内のデータがピンに現われ、ポートが別のプロセッサへのオンチップポートの場合は、入出力バッファ内のデータは、プロセッサ間の相互接続２０４上に現われる。また、入出力バッファ内のデータは、バス１３用のバスドライバの入力に現われ、更に、３１などの直接接続を介して実行ユニット１６によってアクセス可能である。
【００６１】
実行ユニット１６、スレッドスケジューラ１８、およびバス１３は、第１のクロック信号ｃｋ１によってクロックされる。ポート２２がクロックモードの場合は、入出力バッファ３２とアクティビティロジック３６が、以下のように特定の第２のクロック信号ｃｋ２によってクロックされる。
【００６２】
入力を実行するとき、データは、第２のクロック信号ｃｋ２のエッジで外部環境から（例えば、ピンから）の入出力バッファに取り込まれる。また、アクティビティロジック３６は、第２のクロック信号のエッジでレディビット３７をアサートする。レディビット３７は、直接接続３０を介して、第１のクロック信号ｃｋ１のエッジでスレッドスケジューラによって検出される。スレッドスケジューラは、アサートされたレディビットを検出することによって、関連スレッドが実行セット内にあることを保証する。次に、入力データは、データを１つまたは複数の実行ユニットのレジスタ（スレッドレジスタ２０を含む可能性もある）に入れるかバス１３に入れることによってそのスレッドの入力命令の実行を完了することにより、第１のクロック信号ｃｋ１に合わせて実行ユニットによって処理される。入力が完了した後で、実行ユニット１６は、直接パス３１によって第１のクロックｃｋ１信号のエッジでレディビット３７をデアサートする。
【００６３】
また、ＣＴＲＬおよびＤＡＴＡレジスタ３８に条件が設定された場合は、条件が満たされることをアクティビティロジック３６が見出したときだけ、第１のクロックｃｋ１のエッジで取り込まれたデータは、設定された条件とレディビット３７と比較されることに注意されたい。
【００６４】
出力を実行するために、入出力バッファ３２が、入力に現在関与しておらずかつ前の出力にも関与していないことを示すために、レディビット３７はデアサートされなければならない。レディビット３７がデアサートされたと仮定すると、このことは、直接パス３０を介して、第１のクロック信号ｃｋ１のエッジでスレッドスケジューラによって検出される。スレッドスケジューラは、デアサートされたレディビットを検出することによって、関連スレッドが実行セット内にあることを保証する。次に、実行ユニット１６は、１つ又は複数の実行ユニットのレジスタ（スレッドレジスタ２０を含む可能性がある）からのデータを提示するか、そのそのデータをバス１３から入手可能にすることによって、そのスレッドの出力命令の実行を第１のクロック信号ｃｋ１に合わせて完了することによって、入出力バッファ３２が出力データを利用可能にする。出力命令を実行する際に、実行ユニット１６は、また、直接パス３１によってレディビット３７をアサートし、これは、入出力バッファ３２が、現在出力で占有されており他の後の出力に利用可能できなくなっていることを示す。次に、出力データは、第２のクロック信号ｃｋ２のエッジに合わせて入出力バッファ３２内にクロック入力され、外部環境に見えるようになる。また、アクティビティロジック３６は、第２のクロック信号ｃｋ２のエッジで再びレディビット３７をデアサートして、出力が外部環境に提示されたことを示す。
【００６５】
一方、ポート２２が時限モードの場合は、入出力バッファ３２とアクティビティロジック３６が、以下のように指定された時間でトリガされる。
【００６６】
入力を実行するときは、システムタイマカウンタ５７から受け取った現在システム時間値ｔｍが、ＴＩＭＥレジスタ５５に記憶されたトリガ時間値と一致することをアクティビティ３６が検出したときに、データが、外部環境から（例えば、ピンから）入出力バッファに取り込まれる。また、アクティビティロジック３６は、この一致を検出するとレディビット３７をアサートする。レディビット３７は、直接接続３０によって、第１のクロック信号ｃｋ１のエッジでスレッドスケジューラによって検出される。スレッドスケジューラは、アサートされたレディビットを検出することにより、関連スレッドが実行セット内にあることを保証する。次に、入力データは、データを１つまたは複数の実行ユニットのレジスタ（潜在的にスレッドレジスタ２０を含む）に入れるかバス１３に入れることにより、そのスレッドの入力命令の実行を完了することによって、実行ユニットによって第１のクロック信号ｃｋ１に合わせて処理される。入力が完了した後で、実行ユニット１６は、直接パス３１によって第１のクロックｃｋ１信号のエッジでレディビット３７をデアサートする。
【００６７】
前述のように出力を実行するために、入出力バッファ３２が、現在入力に関与しておらずかつ前の出力にも関与していないことを示すためにレディビット３７はデアサートされなければならない。レディビット３７がデアサートされたと仮定すると、これは、直接パス３０を介して、スレッドスケジューラによって第１のクロック信号ｃｋ１のエッジで検出される。デアサートされたレディビットを検出することによって、スレッドスケジューラは、関連スレッドが実行セット内にあることを保証する。この場合も、実行ユニット１６は、次に、１つまたは複数の実行ユニットのレジスタ（スレッドレジスタ２０を含む可能性がある）からデータを提示するかそのデータをバス１３から入手可能にすることによって、そのスレッドの出力命令の実行を第１のクロック信号ｃｋ１に合わせて完了することにより、出力データを入出力バッファ３２に利用可能にする。出力命令を実行する際に、実行ユニット１６は、また、直接パス３１を介してレディビット３７をアサートし、これは、入出力バッファ３２が現在出力に関与しておりかつ他の後の出力にも利用可能でないことを示す。アクティビティロジック３６は、システム時間カウンタ５７から受け取った現在システム時間ｔｍが、ＴＩＭＥレジスタ５５に記憶されたトリガ時間と一致することを検出したとき、入出力バッファ３２をトリガして内部環境から出力データを取得し、これによりデータは外部環境から見えるようになる。アクティビティロジック３６は、また、この一致を検出するとレディビット３７をデアサートして、出力が外部環境に提示されたことを示す。
【００６８】
ポートが時限モードにあるときは、ＣＴＲＬおよびＤＡＴＡレジスタ内のどの状態も無視される。
【００６９】
ポート２２は、さらに、タイムスタンプモードを有し、それにより、アクティビティロジック３６は、外部環境から入出力バッファ３２にデータが入力され取り込まれたときにシステム時間値ｔｍを記録する。このタイムスタンプは、ポートと関連付けられたタイムスタンプレジスタＴＳＴＡＭＰに記憶される。実行ユニット１６は、ＴＳＴＡＭＰレジスタからタイムスタンプを読み出し、そのタイムスタンプを、入力を処理しているスレッドのオペランドレジスタＯＰ（以下を参照）のうちの１つに記憶する働きをする。ポートがタイムスタンプモードの場合は、ＴＳＴＡＭＰレジスタが読み出されるまでレディビット３７はクリアされない。
【００７０】
したがって、このタイムスタンプ機能は、それぞれのスレッド用の１組のレジスタと連動して、ポートにおいて入力にタイムスタンプし、次にそのタイムスタンプをその入力に関与するスレッドのレジスタに転送することを可能にすると好都合である。
【００７１】
本発明の特に好都合な実施形態では、タイムスタンプされた入力は、特定のスレッドによって処理される出力と入力の間の相対的なタイミングを正確に制御するために、時間が決められた出力と共に使用されてもよい。すなわち、本発明は、入力後の特定サイクル数だけスレッドが出力を実行することを可能にしてもよい。この場合、スレッドは、ポート２２のＴＳＴＡＭＰレジスタからタイムスタンプを読み出し、次に（同一ポートか別のポートの）ＴＩＭＥレジスタ５５内のトリガ時間値を、タイムスタンプとその特定サイクル数を加えた値に設定する。
【００７２】
図５は、スレッドを表現するために使用されるスレッドレジスタ２０の例示的なバンクを示す。バンク２０は、スレッドスケジューラ１６が現在検討中のそれぞれのスレッドＴ1〜Ｔmに対応する複数組のレジスタを含む。この好ましい例では、各スレッドの状態は、２個の制御レジスタ、４個のアクセスおよび１２個のオペランドレジスタの合計１８個のレジスタによって表わされる。これらのレジスタは以下の通りである。
制御レジスタ：
−ＰＣはプログラムカウンタである。
−ＳＲは状態レジスタである
アクセスレジスタ：
−ＧＰはグローバルプールポインタである。
−ＤＰはデータポインタである。
−ＳＰはスタックポインタである。
−ＬＲはリンクレジスタである。
オペランドレジスタ：ＯＰ１．．．ＯＰ１２
制御レジスタは、スレッドの実行を制御する際に使用される、スレッドの状態に関する情報を記憶する。特に、スレッドがイベントまたは割り込みを受け入れる能力は、スレッド状態レジスタＳＲに保持された情報によって制御される。アクセスレジスタは、プロシージャのローカル変数に使用されたスタックポインタ、プロシージャ間で共用されるデータに通常使用されるデータポインタ、および大きな定数とプロシージャエントリポイントにアクセスするために使用される特定のプールポインタを含む。オペランドレジスタＯＰ１．．．ＯＰ１２は、算術および論理演算を実行し、データ構造にアクセスし、サブルーチンを呼び出す命令によって使用される。また、タイムスタンプされた入力を使用するとき、スレッドは、スレッドのオペランドレジスタＯＰのうちの１つにタイムスタンプを読み込む。
【００７３】
また、スレッドの実際の命令を一時的に記憶するために、いくつかの命令バッファ（ＩＮＳＴＲ）１９が提供される。各命令バッファは、好ましくは各命令が１６ビット長で１バッファ当たり４つの命令を可能にする６４ビット長であることが好ましい。命令は、スレッドスケジューラ１８の制御下でプログラムメモリ２４からフェッチされ、一時的に命令バッファ１９に入れられる。
【００７４】
実行ユニットは、レジスタ２０とバッファ１９のそれぞれにアクセスする。さらに、スレッドスケジューラ１８は、各スレッドごとに少なくとも状態レジスタＳＲにアクセスする。
【００７５】
前述のように、用語「イベント」は、本明細書で使用されるとき、特定のタイプの操作、またはその特定タイプの操作に対応するアクティビティを指す。イベントベースの操作は、基本的な入出力操作と少し異なり、以下のように働く。最初に、実行ユニット１６からの継続点ベクトルと、スレッドスケジューラ１８からのスレッド識別子を、好ましくは直接パス３１および３０を介してポート２２と関連付けられたＶＥＣＴＯＲおよびＴＩＤレジスタ３８に転送するによって、スレッド用のイベントが設定される。また、関連した条件および条件データが、ポート２２のＣＴＲＬおよびＤＡＴＡレジスタ３８に書き込まれてもよい。このように、イベントは、ポートで設定されるが、必ずしもイネーブルされるとは限らない。ポートがイベントの指示を生成できるようにするために、好ましくは直接パス３０を介したスレッドスケジューラ１８によって、ポートのイネーブルフラグ３９がアサートされなければならない。さらに、スレッド自体がイベントを受け入れることができるようにするために、それぞれの状態レジスタＳＲ内のスレッドのイベントイネーブル（ＥＥ）フラグが、イベントイネーブルに設定されなければならない。このようにイベントが設定されイネーブルされた後で、スレッドはサスペンドされて、スレッドスケジューラ１８に作用するイベントベースの待機命令を使用してイベントを待つことができる。この時点で、関連命令バッファ１９から現在の保留命令が廃棄されてもよい。イベントが生じたとき、例えば何らかのデータがポートに入力されたとき、その発生は、スレッド識別子と継続点ベクトルをポート２２からスレッドスケジューラ１８と実行ユニット１６に戻すことによって信号伝達され、継続点ベクトルにおける命令を、プログラムメモリ２４から命令バッファ１９にフェッチすることが可能になり、実行がコード内の適切な点で再開される。イベントが生じたとき、発生後すぐにスレッドがイベントに反応するのを防ぐために、それぞれの状態レジスタＳＲ内のスレッドのＥＥフラグがイベントディスエーブルに設定されてもよい。イネーブルフラグ３９は、イベントが生じたときにスレッドが命令を実行する結果としてデアサートされてもよい。
【００７６】
１つ又は複数のポートからのイベントを待つためにいくつかのポートをセットアップしている間にイネーブルフラグ３９をアサートすることができる。また、スレッドのＥＥフラグは、１組のポートイネーブルフラグをイネーブルする前にイベントイネーブルに設定されてもよく、この場合、イネーブルされ準備ができている第１のポートは、現在の命令を廃棄し、継続点ベクトルにおける命令をすぐにフェッチし実行することによって実行を進行させるイベントを生成する。
【００７７】
ポートのイネーブルフラグ３９と状態レジスタＥＥフラグの利点は、イベントのイネーブル化とディスエーブル化が、待機命令によってイベントのセットアップとスレッドの停止の両方から分離され、特定のスレッドおよび／または様々な異なるスレッドの異なる入出力状態を容易に切り換えることができることである。例えば、イベントがディスエーブルされた場合でも、ポート２２においてイベントがセットアップされたままでもよい。したがって、イベントが既に１回生じたことがあるが、スレッド識別子、継続点ベクトルおよび条件が、ポート２２のＴＩＤ、ＶＥＣＴＯＲ、ＣＴＲＬおよびＤＡＴＡレジスタ３８に記憶されたままなので、イベントは、スレッドによって再使用されることがある。従って、スレッドが、イベントを再使用しなければならない場合、ポートのレジスタ３８を再書き込みする必要はないが、代わりに、ポートのイネーブルフラグ３９を単純にリアサートしかつ／またはスレッドの状態レジスタＳＲ内のＥＥフラグをイベントイネーブルに再設定することができる。次に、さらに別の待機命令が、スレッドをサスペンドして同じイベントの再発生を保留にする。
【００７８】
さらに、継続点ベクトルを使用することにより、１スレッド当たり複数のイベントをイネーブルすることができる。すなわち、所定のスレッドは、継続点ベクトルをポート２２ａに送ることによって１つのポート２２ａに１つのイベントをセットアップすることができ、異なる継続点ベクトルを他のポート２２に転送することによって別のポート２２ｂに別のイベントをセットアップすることができる。スレッドは、また、それぞれのポートごとに異なるイネーブルフラグ３９を別々にアサートまたはデアサートすることによって、異なるイベントを個別にイネーブルしディスエーブルすることができる。次に、待機命令により、スレッドがサスペンドされて、イネーブルされた任意のイベントが待機させられる。
【００７９】
スレッドスケジューラ１８は、基本的入出力操作を使用するイベントと対照的に、継続点ベクトルをＶＥＣＴＯＲレジスタに送らず、状態レジスタＳＲ内のポートのイネーブルフラグ３９またはＥＥフラグを使用しない。その代わりに、保留命令が単純に命令バッファ１９内に残されたままであり、必要に応じて、実行が単純に休止されて、レディフラグ３７によって示されたように、ポートの入力または出力可用性が保留される。実施形態では、基本的入出力に従ったスケジューリングのためにＴＩＤレジスタだけを必要とする場合がある。基本的入出力は、ＣＴＲＬレジスタとＤＡＴＡレジスタ内の状態を使用する場合も使用しない場合もあり、そのような状態が使用されない場合、入出力は、単純に、ポートが準備ができしだいすぐに完了する。
【００８０】
また、イベントに続いてスレッドの実行が再開された後で、当然ながらスレッドが次に基本的入出力操作を実行する場合があることに注意されたい。これと反対に、基本的入出力に続いてスレッドが再開された後、次にそのスレッドがイベント操作を含む場合がある。スレッドには、そのようなイベントと入出力の任意のチェーンが含まれてもよい。例えば、イベントがディスエーブルされており（すなわち、ポートのイネーブルフラグ３９および／または状態レジスタのＥＥフラグがデアサートされている）、かつイベントベクトルと状態がレジスタ３８内に設定されたままである間に、２つのイベントベース待機操作の間に基本的入出力操作が挟まれてもよい。すなわち、イベントは、第１のイベントベース待機操作が完了した後でディスエーブルされ、次に同じポートを使用して基本的入出力が実行され、次に第２のイベントベース待機操作で使用するために同じイベントが再びイネーブル（re-enable）される。前述のように、基本的入出力操作は、スレッドを休止し休止解除（un-pause）するが、状態レジスタ内のポートのイネーブルフラグ３９にもＥＥフラグにも作用せず、制御をイベントベクトルに移しもしない。
【００８１】
また、タイマ５８を使用してイベントを生成することができる。図６に、例示的なタイマ５８を示す。前述のように、タイマ５８自体は、タイマ値ｔｍを生成しないが、その代りにシステム時間カウンタ５７からタイマ値ｔｍを受け取る。タイマ５８は、現在システム時間値ｔｍがＴＩＭＥレジスタ５９に記憶されたトリガ時間値と一致したときに指示を生成する目覚まし時計と考えることができる。
【００８２】
各タイマ５８は、ポート２２と同様に、レディフラグ３７’とタイマイベントイネーブルフラグ３９’を有するアクティビティロジック３６’を含む。各タイマ５８は、また、ポート２２と同じようにＣＴＲＬレジスタ、ＴＩＤレジスタおよびＶＥＣＴＯＲレジスタを含むレジスタ３８を含む。レジスタ３８は、また、条件データがトリガ時間であるという点でポート２２のＤＡＴＡレジスタに対応するＴＩＭＥレジスタ５９を含む。
【００８３】
スレッド用のタイマイベントをセットアップするために、タイマ用のタイマイベントイネーブルフラグ３９’をセットする。実行ユニットは、また、タイマ出力がトリガ時間を条件とすることを指定するように制御レジスタＣＴＲＬを構成し、トリガ時間をＴＩＭＥレジスタ５９に記憶し、そのスレッドの継続点ベクトルをＶＥＣＴＯＲレジスタに記憶する。スレッドスケジューラ１８は、スレッドの識別子をＴＩＤレジスタに記憶する。最後に、実行ユニット１６は、待機命令を実行する結果として、スレッドの状態レジスタＳＲ内のスレッドイベントイネーブルフラグＥＥをセットする。アクティビティロジック３６’は、時間カウンタ５７から受け取った現在システム時間ｔｍが、ＴＩＭＥレジスタ５９に記憶されたトリガ時間と一致することを検出したとき、レディフラグ３７’をアサートし、ＴＩＤレジスタからのスレッド識別子をスレッドスケジューラ１８に戻し、継続点ベクトルをＶＥＣＴＯＲレジスタから実行ユニット１６に戻す。次に、実行ユニットは、スレッドスケジューラ１８の指示に従って、スレッドの継続点ベクトルによって指定されたコード内のポイントにおけるスレッドの実行を継続する。
【００８４】
したがって、ポート２２と同じようにタイマ５８を使用してどのようにイベントを生成できるかが分かる。そのようなタイマイベントを使用して、例えば、指定された時間期間（例えば、１ミリ秒）ごとに１回スレッドをウェイクアップすることができる。
【００８５】
タイマ５９のタイマイベントイネーブルフラグ３９’がセットされない場合は、図３に関して前述したように、単純にＴＩＭＥレジスタ５９を使用して、実行ユニットがタイマ５８からシステム時間ｔｍを読み出すことができるようになる時間を決定することができる。これにより、タイマを読み出そうとするスレッドは、現在時間がその時間になっていない場合に休止する。
【００８６】
次に、図７の流れ図に関して、時限ポート２２を使用するデータの例示的な転送を説明する。ステップ１００で、実行ユニット１６は、スレッドスケジューラ１８の指示下でスレッドの実行を始める。ステップ１０２で、実行ユニット１６は、トリガ時間値をポート２２のＴＩＭＥレジスタ５５に送る。ステップ１０４で、実行ユニットは、ポート２２を時限モードに設定する。ステップ１０６で、実行ユニットは、スレッド内の入力命令または出力命令に遭遇し、出力命令の場合には、実行ユニットは、入出力バッファ３２が出力データを利用できるようにすることによって出力命令を部分的に完了する。トリガ時間にまだ達していないと仮定すると、ポート２２のレディビット３７はまだセットされない。スレッドスケジューラ１８は、これを検出し、実行セットから除外することによってスレッドを休止する。次に、ポート２２は、スレッドスケジューラ１８ではなく、そのスレッドに関与する。ステップ１０８で、ポート２２のアクティビティロジック３６は、システムタイマカウンタ５７から現在システム時間値ｔｍを受け取る。ステップ１１０で、アクティビティロジック３６は、現在システム時間値ｔｍが、ＴＩＭＥレジスタ５５に記憶されたトリガ時間値と一致するかどうかを判定する。一致しない場合、方法は、ステップ１０８に戻り、ポートは、カウンタ５７を読み出し続け、同時に現在時間値ｔｍが増分する。
【００８７】
しかしながら、現在時間がトリガ時間と一致する場合、方法はステップ１１４に分岐し、入力の場合には、データが、外部環境から入出力バッファ３２に取り込まれて内部環境が利用できるようになり、出力の場合には、データは、内部環境から入出力バッファ３２に取り込まれて外部環境に見えるようになる。ステップ１１６で、アクティビティロジック３６は、レディビット３７をアサートして転送を示す。ステップ１１８で、スレッドスケジューラは、レディビット３７を検出し、スレッドを実行セットに戻し、実行ユニット１６にスレッドの実行を再開させる。入力の場合、再開された実行は、入出力バッファ３２からのデータを内部環境（例えば、スレッドのオペランドレジスタＯＰのうちの１つ）に入力する入力命令を完了することを含む。
【００８８】
次に図８と関連して、イベントを生成するタイマ５８の例示的な使用を説明する。ステップ１２０で、実行ユニット１６は、スレッドスケジューラ１８の指示下でスレッドの実行を始める。ステップ１２２で、実行ユニット１６とスレッドスケジューラ１８は、継続点ベクトル、条件およびトリガ時間を実行ユニット１６からＶＥＣＴＯＲ、ＣＴＲＬおよびＴＩＭＥレジスタ３８’に送り、入力に対する関連スレッドのスレッド識別子をスレッドスケジューラ１８からＴＩＤレジスタ３８’に送ることこによって、タイマ５８用のイベントをセットアップする。ステップ１２２は、また、スレッドの状態レジスタＳＲ内のスレッドイベントイネーブルフラグをセットし、タイマイベントイネーブルフラグ３９’をセットすることを含む（まだセットされていない場合）。ステップ１２４で、実行ユニット１６は、実行セットからスレッドを除外することによってスレッドスケジューラにそのスレッドの実行をサスペンドさせる待機命令を実行する。タイマ５８は、次に、スレッドスケジューラ１８ではなくスレッドに関与する。ステップ１２６で、タイマ５８のアクティビティロジック３６は、システムタイマカウンタ５７から現在システム時間値ｔｍを受け取る。ステップ１２８で、アクティビティロジック３６’は、現在システム時間値ｔｍが、ＴＩＭＥレジスタ５９に記憶されたトリガ時間値と一致するかどうかを判定する。一致しない場合、方法はステップ１２６に戻り、タイマ５８は、カウンタ５７を読み出し続け、同時に現在時間値ｔｍが増分する。
【００８９】
しかしながら、現在時間がトリガ時間と一致する場合、方法はステップ１３２に分岐し、そこで、アクティビティロジック３６’は、レディビット３７’をアサートして転送を示す。ステップ１３４で、アクティビティロジック３６’は、継続ベクトルをＶＥＣＴＯＲレジスタから実行ユニット１６に戻し、スレッド識別子をＴＩＤレジスタからスレッドスケジューラに戻す。ステップ１３６および１３４が、実質的に同時に実行されてもよいことに注意されたい。ステップ１３６で、スレッドスケジューラ１８は、スレッドを実行セットに戻し、実行ユニットにスレッドの実行を継続させる。
【００９０】
インタフェースプロセッサは、そのスレッドベースの構造により、いくつかのプログラムミング手法に対応することができる。このインタフェースプロセッサは、標準的な入出力を実行する従来の単一プロセッサとして扱われてもよく、あるいは数百の通信構成要素の平行配列の一部としてプログラムされてもよい。これらの選択肢を支援する命令セットが提供される。命令セットは、スレッドの初期化、終了、開始および停止を支援し入出力通信を提供する特別な命令を含む。入出力命令は、外部装置とのきわめて高速な通信を可能にする。そのような入出力命令は、高速で低遅延の入出力と、高レベルの並列プログラミング技術とを支援する。ポートアクティビティの処理に対するこれらの応用は、以下でより詳しく考察し、本発明を実施するために使用することができる例示的な命令について述べる。
【００９１】
ポートは入力モードでも出力モードでも使用することができる。入力モードでは、状態を使用して、スレッドに渡されたデータをフィルタリングすることができる。後述するようにデータが利用可能になったときに、ポートを使用してイベントまたは割り込みを生成することができる。これにより、スレッドがいくつかのポートを監視し、準備ができているポートだけに要求に応じた処理をさせることができる。次に、準備ができた後で、入力命令と出力命令（ＩＮとＯＵＴ）を使用してポートとの間でデータを転送することができる。この場合、ＩＮ命令は、ｎビットポートからｎ個の最小桁ビットを入力しゼロ拡張し、ＯＵＴ命令は、ｎ個の最小桁ビットを出力する。
【００９２】
さらに２つの命令（ＳＮＳＨＲとＯＵＴＳＨＲ）が、データ転送を最適化する。ＩＮＳＨＲ命令は、オペランドレジスタなどのレジスタの内容をｎビット右にシフトし、最も左側のｎビットをｎビットポートからの入力されたデータで満たす。ＯＵＴＳＨＲ命令は、データのｎ個の最小桁ビットをｎビットポートに出力し、レジスタの内容をｎビット右にシフトする。
【数１】
2010525436.tif 000003
【００９３】
ＩＮＳＨＲ命令を使用して、データをポートの幅だけシフトさせることができる。これにより、１つのポートから入力されたデータをシフトさせ、次に別のポートから入力されたデータを同一レジスタ内に連結することができる。
【００９４】
ポートは、構成された後でなければ使用できない。ポートは、ポートのいくつかの個別の設定を定義するために使用されるＳＥＴＣ命令を使用して構成される。これらの設定はそれぞれ、デフォルトモードを有し、異なるモードが必要な場合だけ構成されればよい。
SETC port, mode      port[ctri]←mode ポート制御を設定する
以下に、ＳＥＴＣモード設定の効果について述べる。各設定の第１のエントリは、デフォルトモードである。
モード 効果
ＯＦＦ               ポートがアクティブでない。ピンが高インピーダンス
ＯＮ                 アクティブ
ＩＮ                 ポートは入力である
ＯＵＴ               ポートは出力である（但し、入力は現在のピン値を戻す）
ＲＡＷ               データがピンとの間で直接転送される
ＣＬＯＣＫＥＤ       データ転送がクロックと同期される
ＴＩＭＥＤ           データ転送の時間が決められる
ＥＶＥＮＴ           ポートはイベントを発生させる
ＩＮＴＥＲＲＵＰＴ   ポートは割り込みを生じさせる
ＤＲＩＶＥ           ピンがハイとローの両方に駆動される
ＰＵＬＬＤＯＷＮ     ピンが０ビットではプルダウンされ、他の場合は高インピーダンスである
ＰＵＬＬＵＰ         ピンが１ビットではプルアップされ、他の場合は高インピーダンスである
ＲＩＳＩＮＧ         主要（取り込み）エッジはポートのクロックの立ち上がりである
ＦＡＬＬＩＮＧ       主要（取り込み）エッジはポートのクロックの立ち下がりである
ＤＡＴＡＰＯＲＴ     ポートは通常通り働く
ＣＬＯＣＫＰＯＲＴ   ポートのクロックはその出力に直接結合される
ＮＯＳＴＡＭＰ       タイムスタンプは実行されない
ＳＴＡＭＰＥＤ       タイムスタンプがイネーブルされる
ＵＮＣＯＮＤ         ポートは常にレディ状態であり、入力が直ちに完了する
ＥＱＵＡＬ           ポートは値がそのＤＡＴＡ値と等しいときに準備ができている
ＮＥ                 ポートは値がそのＤＡＴＡ値と異なるときに準備ができている
ＴＲＡＮＳＩＴＩＯＮ ポートは値がＤＡＴＡ値の方に変化するときに準備ができている
ＧＲ                 ポートは値がそのＤＡＴＡ値より大きいときに準備ができている
ＬＳ                 ポートは値がそのＤＡＴＡ値より小さいときに準備ができている
ＤＲＩＶＥ、ＰＵＬＬＤＯＷＮ、およびＰＵＬＬＵＰモードは、ポート方向がＯＵＴのときだけ適切である。ＴＲＡＮＳＩＴＩＯＮ状態は、１ビットのポートだけに適切であり、ＧＲおよびＬＳ状態は、複数のビットを有するポートだけに適切である。
【００９５】
各ポートは、ポートを通るデータのフローを制御するために使用されるレディビット３７を有し、ポートが入力命令を完了できるか出力命令を完了できるかを定義する。レディビットは、ポート構成によって違うふうにセットされる。レディビットは、ＳＥＴＣ、ＳＥＴＤまたはＳＥＴＶ命令のいずれかが実行されたときにクリアされる。
【００９６】
入力モードのポートは、条件付き入力を実行するように構成することができる。条件は、条件を満たすデータだけがプログラムに戻されるように入力データをフィルタリングする。条件が設定されたとき、ＩＮおよびＩＮＳＨＲ命令は、ポートが準備ができているときだけ完了する。前述のように、準備ができていないポートで入力命令を実行すると、スレッドが休止される。準備ができているとき、ポートは、そのレディビットをセットし、そのレディビットは、スレッドスケジューラに信号伝達される。スレッドは、入力命令を再開し再実行する。ポートが準備ができているこのとき、データが戻され、レディビット３７がクリアされる。
【００９７】
ポートレディビットがセットされると、条件を満たしたデータ値が取り込まれ、その結果、ソフトウェアは、ポート上の値が後で変化した場合でも条件を満たす値を取得する。ＩＮまたはＩＮＳＨＲ命令が実行され、レディビットが設定されたときは、データが戻され、レディビットがクリアされる。レディビットが設定されない場合、スレッドは、レディビットが設定されるまで休止する。条件が設定された場合は、データが条件と比較され、レディビットは、条件が満たされた場合だけ設定される。
【００９８】
レディビットがクリアされた場合にＯＵＴまたはＯＬＪＴＳＨＲ命令が実行されたときは、データはポートによって取得され、レディビットが設定される。レディビットが設定された場合、スレッドは、ポートによってクリアされるまで休止される。
【００９９】
イベントと割り込みにより、ポートは、事前定義されたイベントハンドラに制御を自動的に移すことができる。スレッドがイベントまたは割り込みを受け入れる能力は、スレッド状態レジスタＳＲ（図４を参照）内に保持された情報によって制御され、ＴＳＥ命令とＴＳＤ命令を使用して明示的に制御されてもよい。この情報は、イベントイネーブルフラグ（ＥＥ）と割り込みイネーブルフラグ（ＩＥ）を含む。
TSE s  SR←SR∨s     スレッド状態イネーブル
TSD s  SR←SR∧┐s   スレッド状態ディスエーブル
これらの命令のオペランドは、次のいずれかでなければならない。
EE      イベントをイネーブルまたはディスエーブルする
IE      割り込みをイネーブルまたはディスエーブルする
イベントは、セットアップされたのと同じ範囲で処理される。従って、イベント時にすべてのスレッドの状態が有効であり、スレッドがイベントに対して素早く応答することができる。スレッドは、イベント情報の一部またはすべてを変化させないまま、イベントが生じたポートを使用して入出力操作を実行することができる。これにより、スレッドは、イベントの処理を完了し、すぐに別の類似のイベントを待つことができる。
【０１００】
イベントハンドラのプログラム位置は、ＳＥＴＶ命令を使用してイベントをイネーブルする前に設定されなければならない。ポートは、イベントをいつ生成するかを決定する条件を有し、これらの条件は、ＳＥＴＣ命令とＳＥＴＤ命令を使用して設定される。
【０１０１】
特定のポートまたはチャネルによるイベント生成は、イベントイネーブル無条件（ＥＥＵ）命令を使用してイネーブルすることができ、またイベントディスエーブル無条件（ＥＤＵ）命令を使用してディスエーブルすることができる。イベントイネーブル真（ＥＥＴ）命令は、その条件オペランドが真の場合にイベントをイネーブルし、そうでない場合にディスエーブルし、これと反対に、イベントイネーブル偽（ＥＥＦ）命令は、その条件オペランドが偽の場合にイベントをイネーブルし、そうでない場合にディスエーブルする。これらの命令は、ガード付き入力の実施を最適化するために使用される。以下は、ポート上のイベントを構成するためのいくつかの例示的な命令形式である。
SETV port, v  portfvector]←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  イベントイネーブル
１つまたは複数のポート上のイベントをイネーブルした後、スレッドは、ＷＡＩＴＥＵ命令を使用して少なくとも１つのイベントを待つことができる。この結果、対応するイベントベクトルによって指定されたイベントハンドラに制御が移され、ＥＥ（イベントイネーブル）フラグをクリアすることによってイベントがディスエーブルされた状態で、イベントがすぐに生じることができる。あるいは、スレッドは、イベントが生じるまでサスペンドされてもよく、その場合、ＥＥフラグは、イベントが生じたときにクリアされ、スレッドは実行を再開する。
WAITET b      if b then SR[EE]←true      真の場合にイベント待機
WAITEF b      if┐b then SR[EE]←true     偽の場合にイベント待機
WAITEU SR[EE]←true  イベント待機
CLRE   SR[EE]←false; forall port  if port[tid] = thread then port[enable]←false  スレッドのすべてのイベントをディスエーブルする
条件が満たされるまで１つまたは複数のイベントを繰り返し待つ一般的なケースを最適化するために、条件付きの形のイベント待機命令が提供される。ＷＡＩＴＥＴ命令は、その状態オペランドが真の場合だけ待ち、ＷＡＩＴＥＦは、その状態オペランドが偽の場合だけ待つ。
【０１０２】
スレッドによってイネーブルされたすべてのイベントは、単一のＣＬＲＥ命令を使用してディスエーブルすることができる。これにより、スレッドによってイベントがイネーブルされたすべてのポートにおけるイベント発生がディスエーブルされる。また、ＣＬＲＥ命令は、スレッドの状態レジスタ内のイベントイネーブル状態をクリアする。
【０１０３】
高い優先順位のポートに対するスレッドの応答を最適化するために、ＴＳＥＥＥ命令を使用して、あるスレッド上のイベントをまずイネーブルし、その後でポートおよび／またはチャネルをイネーブルし始め、イベント待機命令のうちの１つを使用することができる。このように、プロセッサは、ポートを優先順位に従って走査することができる。これにより、イベントがイネーブルされるとすぐにそのイベントを処理することができる。
【０１０４】
イベントとは対照的に、割り込みは、現在の範囲内で処理されず、したがって、現在のＰＣおよびＳＲ（および、潜在的に他のレジスタのうちのいくつかまたはすべても）は、割り込みハンドラの実行前に保存されなければならない。ポートｒによって割り込みが生成されたとき、以下のことが自動的に行われる。SAVEPC←PC;
SAVESR←SR;
SR[EE]←false;
SR[IE]←false;
PC←r[vector];
ハンドラが完了したとき、割り込まれたスレッドの実行は、ＲＦＩＮＴ命令によって実行することができる。
RFlNT  PC←SAVEPC;   割り込みから戻る
SR←SAVESR
各プロセッサは、１００ＭＨｚで時間を刻むクロック（第３のクロック１７３）を有することが好ましい。入力操作と出力操作を、この内部で生成されたクロックまたは外部から供給されたクロックと同期させることができる。これを行うために１組のクロックジェネレータ１７2が提供され、これらのクロックジェネレータ１７2がそれぞれ、そのクロックソースとして、ドック１７3、クロックまたは外部１ビットクロックを使用することができる。
【０１０５】
各クロックジェネレータは、また、８ビット分周器を有する。８ビット分周器がゼロに設定されたとき、ソース信号が出力に直接通る。分周を実行するためにソースドックの立ち上がりが使用される。従って、１に設定すると、クロックジェネレータからの出力は、入力の各立ち上がりを変化させて入力周波数ｆを半分にし、ｉに設定すると、周波数ｆ／２ｉの出力が生成される。
【０１０６】
プロセッサは、クロックジェネレータ、タイマ、ポートなど、スレッド用の１組の利用可能資源を維持する。資源は、ＧＥＴＲ命令でスレッドによって使用するために割り当てられる。これを行うために１組のクロックジェネレータ１７２が提供され、そのクロックジェネレータ１７２がそれぞれ、クロックソースとして、プロセッサクロック１７1、別の内部クロック１７3、または外部１ビットクロックを使用する。
【０１０７】
クロックジェネレータ１７２のソースは、ＳＥＴＣＬＫ命令で設定される。オペランドが１ビットポートを指定した場合、そのポートは、クロック入力として使用される。オペランドがタイマＩＤを指定した場合、クロック入力は、タイマから入力を受け取るように設定される。序数は、ＳＥＴＤ命令を使用して設定される。オペランドの下位８ビットが使用され、残りは無視される。
SETCLK generator, sgenerator[sid]←s    クロックジェネレータのソースを設定する
クロックジェネレータを構成した後、そのクロックジェネレータからクロックされる入力ポートをクロックジェネレータに取り付ける必要がある。これは、また、ポートでＳＥＴＣＬＫ命令を使用して他のオペランドとしてクロックジェネレータＩＤを指定することによって行われる。
SETCLK port, s port[ckid]←s     ポートのクロックジェネレータを設定する
出力ポート２２がクロックジェネレータ１７2から駆動されるとき、ピン上のデータは、対応するクロック信号（例えば、ｃｋ２）のエッジと同期して状態を変化させる。いくつかの出力ポートが同一クロック信号によってクロックされる場合は、プロセッサが異なる時間にデータを送出することがある場合でも、それらの出力ポートは、単一出力ポートとして動作するように見える。同様に、入力ポート２２がクロックジェネレータ１７2によって駆動される場合は、データは、対応するクロック信号のエッジと同期してサンプリングされ、いくつかの入力ポートが同一クロック信号によってクロックされる場合は、プロセッサが異なる時間にそれらのポートからデータを取得する場合でも、単一入力ポートとして動作するように見える。あるいは、各ポートは、異なる第２のクロック信号ｃｋ２、ｃｋ２’およびｃｋ２”などによってクロックされてもよい。例えば、各ポートは、異なる外部クロックソースから生成されたクロック信号によってクロックされてもよい。
【０１０８】
したがって、クロックしたポートを使用することにより、入出力プログラム実行の内部タイミングが入出力インタフェースの同期動作から切り離される。
【０１０９】
ポートは、ＣＬＯＣＫＥＤモードに設定されたときにクロックされる。クロック入力は、クロックジェネレータから来て、オペランドとしてクロックジェネレータＩＤと共にＳＥＴＣＬＫ命令を使用して設定される。
【０１１０】
データが取り込まれ出力に提示されるクロックエッジは、ＥＤＧＥ設定によって決定されるＲＩＳＩＮＧおよびＦＡＬＬＩＮＧモードを設定することにより設定される。モードがＲＩＳＩＮＧとして設定されたときは、立ち上がりが第一エッジであり、立ち下がりが第二エッジである。モードがＦＡＬＬＩＮＧとして構成されたときは、立ち下がりが第一エッジであり、立ち上がりが第二エッジである。
【０１１１】
入力データは、第一エッジでピンから取り込まれる。このエッジでは、レディビットもセットされる。ＩＮ命令またはＩＮＳＨＲ命令が実行され、レディビットがセットされたとき、データが戻され、レディビットがクリアされる。レディビットがセットされない場合、スレッドは、レディビットがセットされるまで休止される。
【０１１２】
条件が設定された場合は、クロックエッジで取り込まれたデータが条件と比較され、条件を満たしたときだけレディビットがセットされる。
【０１１３】
出力データは、第二エッジで送られる。このエッジは、レディビットもクリアする。ＯＵＴまたはＯＵＴＳＨＲ命令が実行されるとき、レディビットがクリアされた場合は、データが登録され、レディビットがセットされ、レディビットがセットされた場合は、スレッドは、レディビットがクリアされるまで休止される。
【０１１４】
クロックジェネレータが、外部クロックソースから第２のクロック信号を生成するように設定されている場合は、休止されていた入力および出力を、その外部クロック基準に従って解放することができる。これにより、外部刺激に対する反応時間が早くなる。
【０１１５】
ポートがＣＬＯＣＫＰＯＲＴモードの場合は、データではなく特定の第２のクロック信号ｃｋ２が、対応するポートから出力される。このモードを使用して、プロセッサとプロセッサが接続された外部装置との間のインタフェースを同期させることができる。例えば、この機能を使用して、図２Ａに示したような配列の２つのインタフェースプロセッサ１４の第２のクロック信号を同期させることができ、その結果、それらのプロセッサ間のインタフェースは、共通の第２のクロック信号によってクロックされるが、各プロセッサ１４は、内部的には、そのプロセッサ自体のそれぞれの第１のクロックに従って動作する。ＤＡＴＡＰＯＲＴモードでは、ポートは、単にデータを入力または出力する。
【０１１６】
プロセッサは、また、現在時間を読み出すかまたは指定時間まで待つためにスレッドが使用することができる１組のタイマ５８を有する。
【０１１７】
タイマは、ＧＥＴＲ  ＴＩＭＥＲ命令を使用して割り当てられる。これは、ＳＥＴＣ命令を使用して設定することができ、設定できるモードは次の２つだけである。
ＵＮＣＯＮＤ  タイマが常にレディ状態−時間がタイマから直ちに読み出される
ＡＦＴＥＲ    時間がそのＴＩＭＥ値の後のときにタイマがレディ状態。
【０１１８】
ＵＮＣＯＮＤ（無条件）モードでは、ＩＮ命令が、タイマの現在値を読み出す。ＡＦＴＥＲモードでは、ＩＮ命令は、システム時間カウンタ５７の値がタイマのＴＩＭＥレジスタの値の後（その値より遅い時間）になるまで待つ。タイマのＴＩＭＥレジスタの値は、ＳＥＴＤ命令を使用して設定することができる。
【０１１９】
時限ポートは、クロック入力が使用される代わりにシステム時間カウンタ５７からの入力が使用されること以外は、クロックトポートと類似している。時間値は、ＳＥＴＰＴＩＭＥ（セットポート時間）命令を使用して設定される。応答時間の正確な制御が可能になるので、時限ポートは、タイムスタンプされたポートと共に使用されることが多い。タイムスタンプは、ＧＥＴＴＳＴＭＰ命令で読み出される。
SETPTIME port, s     port[time]←s ポート時間を設定する
GETTSTMP port, d     d←port[tstamp]      タイムスタンプを取得する
入力モードでは、データは、外部環境（例えば、ピン）から取り込まれ、記憶された時間値が現在時間と一致したときにレディビットがセットされ、条件が無視される。ＩＮ命令またはＩＮＳＨＲ命令が実行されかつレディビットがセットされたとき、取得データが戻され、レディビットがクリアされる。レディビットがセットされない場合、スレッドは、レディビットがセットされるまで休止される。入力モードでは、ＳＥＴＰＴＩＭＥ命令は休止することはない。
【０１２０】
出力モードでは、記録されたデータが、外部環境（例えば、ピン）から見え、レディビットは、記憶された時間値が現在時間と一致したときにセットされる。ＯＵＴ命令またはＯＵＴＳＨＲ命令が実行されたとき、レディビットがクリアされた場合は、データが記録され、レディビットがセットされる。レディビットがセットされた場合、スレッドは、クリアされるまで休止される。
【０１２１】
出力モードで、レディビットがセットされた場合、ＳＥＴＴＳＴＭＰ命令は、レディビットがクリアされるまで休止される。これにより、ポートの記憶された時間が、保留しているの出力が完了するまで変更されないことが保証される。
【０１２２】
ポートがタイムスタンプモードのときは、外部環境からデータが取り込まれた時間が、タイムスタンプレジスタに記録される。タイムスタンプレジスタは、ＧＥＴＴＳＴＭＰ命令を使用して読み出される。タイムスタンプモードのとき、ＩＮ命令とＩＮＳＨＲ命令は、レディビットをクリアせず、ＧＥＴＴＳＴＭＰ命令だけがレディビットをクリアする。
【０１２３】
時限ポートとタイムスタンピングの以下の例では、出力ポート（ｏｕｔｐｏｒｔ）は、入力ポート（ｉｎｐｏｒｔ）が状態を変化させた後に特定のタイマサイクル間隔で状態を変化させる。
IN inport, v
SETC inport, STAMPED
SETC inport, NE
SETD inport, v
SETC outport, TIMED
loop:
IN inport, v
GETTSTMP inport, t
ADD t, t, interval
SETTIME outport, t
OUT outport, v
BBU loop //分岐
以下は、時限ポートとタイムスタンピングの使用を示す別の例である。データが、ルックアップテーブル内の対応する出力値にアクセスするために使用されるｉｎｐｏｒｔから取得され、次にその値がｏｕｔｐｏｒｔを介して出力される。データは、外部ポート（ｃｋｐｏｒｔ）がハイになったときに取得される。ｉｎｐｏｒｔポートは、ｃｋｐｏｒｔポートからクロックされ、ｃｋｐｏｒｔの状態の変化がタイムスタンプされ、したがってｉｎｐｏｒｔから取得されたデータは、このタイムスタンプに対応する。最後に、データは、時限ポートｏｕｔｐｏｒｔを介して、指定されたタイマサイクル数の後に出力される。
GETR ck, CLOCK 
SETC ckport, STAMPED
SETC ckport, TRANSITION
SETD ckport, 1
SETCLK ck, ckport
SETC inport, CLOCKED
SETCLK inport, ck
SETC outport, TIMED
loop:
IN ckport, d
GETTSTMP ckport, t
IN inport, d
LDW q, lookup, d //ルックアップテーブルからレジスタにロードする
ADD t, t, interval
SETTIME outport, t
OUT outport, d BBU loop
以上の説明と例から、本発明が、スレッドの実行、管理およびスケジューリングのタイミングをどのように正確に決定し、またそのようなスレッドによって処理される入力操作と出力操作に対する応答時間をどのように正確に制御するかを理解することができる。
【０１２４】
以上の実施形態が単なる例として説明されることを理解されよう。クロック信号の代わりに、ｃｋ１、ｃｋ２、ｃｋ２’、ｃｋ２”などの１つまたは複数を不規則なタイミング信号またはストローブ信号と置き換えることもできる。また、プロセッサの内部または外部にある様々な現在時間源を使用して、ポートおよび／またはタイマの時間を決定することができる。タイムスタンプを入力だけに関連して説明したが、原理をタイムスタンピングの出力操作にも拡張することができ、他の実施形態では、チップの所望の仕様により様々なレジスタおよび命令セットに拡張することができ、実施形態によっては、スレッド識別子が、ポートに送られずにスレッドスケジューラの責任を維持してもよく、他の場所に記憶されてもよい。あるいは、各スレッドにが、ポートで個々のレディフラグが提供されてもよく、その結果、適正なレディ信号を選択するためにスレッド識別子がポートに渡されるが、アクティビティの検出時にスレッド識別子をスレッドスケジューラに戻さなくてもよくなる。さらに、条件および／または条件データがポートに送られなくてもよい。その代わりに、条件は、あらかじめポートで設定されてもよくかつ／または条件が、スレッドスケジューラまたは他の場所で評価されてもよい。スレッドは、ポートやタイマ以外の他のソースからのアクティビティに基づいてスケジューリングされてもよい。プロセッサの様々な構成要素の間に異なる相互接続が提供されてもよい。また、本発明は、モバイルアプリケーションプロセッサを有する移動端末での使用に限定されない。当業者には他の用途および構成が明らかであろう。本発明の範囲は、説明した実施形態ではなく添付した特許請求の範囲によってのみ限定される。
【符号の説明】
【０１２５】
２  プロセッサ
７ａ、７ｂ、７ｃ、７ｄ  ポート
１３  バス
１４ａ、１４ｂ、１４ｃ  インタフェースプロセッサ
１６  実行ユニット
１８  スレッドスケジューラ
２０１、２０２、２０ｍ  レジスタ
２４  メモリ
【図１】
2010525436.tif 000004
【図２】
2010525436.tif 000005
【図２Ａ】
2010525436.tif 000006
【図３】
2010525436.tif 000007
【図４】
2010525436.tif 000008
【図５】
2010525436.tif 000009
【図６】
2010525436.tif 000010
【図７】
2010525436.tif 000011
【図８】
2010525436.tif 000012
【国際調査報告】
2010525436.tif 000013
2010525436.tif 000014
2010525436.tif 000015