(57)【要約】【課題】メッセージネットワークインターフェースユニットを提供すること。【解決手段】メッセージネットワークインターフェースユニットは、プロセッサに連結されており、プロセッサがプロセッサによって生成された複数のメッセージをハードウェアユニットに送信することを可能にし、メッセージネットワークインターフェースユニットは、プロセッサによって生成された複数のメッセージのうちの少なくもと１つのメッセージの引数を格納するように動作可能な伝送レジスタであって、少なくとも１つのメッセージが推測的に生成される、伝送レジスタと、伝送レジスタに連結されており、複数のメッセージをキューに入れるように動作可能なキューであって、動作は、メッセージネットワークインターフェースユニットがトリガーメッセージを受信することに応じてキューにおいて実行される、キューとを含む。【選択図】なし【特許請求の範囲】
【請求項１】
メッセージネットワークインターフェースユニットであって、該メッセージネットワークインターフェースユニットは、プロセッサに連結されており、該プロセッサが該プロセッサによって生成された複数のメッセージをハードウェアユニットに送信することを可能にし、該メッセージネットワークインターフェースユニットは、
該プロセッサによって生成された該複数のメッセージのうちの少なくもと１つのメッセージの引数を格納するように動作可能な伝送レジスタであって、該少なくとも１つのメッセージが推測的に生成される、伝送レジスタと、
該伝送レジスタに連結されており、該複数のメッセージをキューに入れるように動作可能なキューであって、動作は、該メッセージネットワークインターフェースユニットがトリガーメッセージを受信することに応じて該キューにおいて実行される、キューと
を含む、メッセージネットワークインターフェースユニット。
【請求項２】
前記動作は、前記キューの内容を放棄しており、前記トリガーメッセージは、例外が発生したことを示す、請求項１に記載のメッセージネットワークインターフェースユニット。
【請求項３】
前記動作は、前記キュー内の前記複数のメッセージを送信している、請求項１に記載のメッセージネットワークインターフェースユニット。
【請求項４】
前記伝送レジスタは、前記複数のメッセージのうちの任意のメッセージが送信されるか否かの決定の前に、該複数のメッセージのうちの各メッセージを生成するために使用される、請求項１に記載のメッセージネットワークインターフェースユニット。
【請求項５】
前記伝送レジスタは、前記少なくとも１つのメッセージの引数を格納するためのスクラッチパッドメモリを含む、請求項１に記載のメッセージネットワークインターフェースユニット。
【請求項６】
前記メッセージネットワークインターフェースユニットおよび前記プロセッサは、同じデバイス上に設置されている、請求項１に記載のメッセージネットワークインターフェースユニット。
【請求項７】
前記デバイスは、プログラマブル論理デバイスである、請求項６に記載のメッセージネットワークインターフェースユニット。
【請求項８】
ビデオスカラーであって、該ビデオスカラーは、請求項１に記載のメッセージネットワークインターフェースユニットを用いて１つのフォーマットから別のフォーマットにビデオをスケールする、ビデオスカラー。
【請求項９】
メッセージネットワークインターフェースユニットに連結されたプロセッサが複数のメッセージをハードウェアユニットに送信することを可能にするための方法であって、該方法は、
該プロセッサを用いて、該複数のメッセージを推測的に生成することであって、該生成することは、該複数のメッセージのうちの少なくとも１つのメッセージの引数を伝送レジスタ内に格納することを含む、ことと、
該伝送レジスタに連結されたキュー内の該複数のメッセージをキューに入れることと、
該メッセージネットワークインターフェースユニットにおいて、動作が実行されるべきであることを示すメッセージを受信することと、
該動作が実行されるべきであることを示す該メッセージを受信することに応じて該キューにおいて動作することと
を含む、方法。
【請求項１０】
前記動作は、前記キューの内容を放棄することを含み、該動作が実行されるべきであることを示す前記メッセージは、期待が発生したことを示す、請求項９に記載の方法。
【請求項１１】
前記動作は、前記キュー内の前記複数のメッセージを送信することを含む、請求項９に記載の方法。
【請求項１２】
前記推測的に生成することは、前記複数のメッセージのうちの１つのメッセージが送信されるか否かの決定の前に、前記伝送レジスタを使用する、請求項９に記載の方法。
【請求項１３】
前記複数のメッセージのうちの前記少なくとも１つのメッセージの引数を格納することは、該複数のメッセージのうちの該少なくとも１つのメッセージの該引数をスクラッチパッドメモリ内に格納することを含む、請求項９に記載の方法。
【請求項１４】
前記メッセージネットワークインターフェースユニットおよび前記プロセッサは、同じデバイス上に設置されている、請求項９に記載の方法。
【請求項１５】
前記デバイスは、プログラマブル論理デバイスである、請求項１４に記載の方法。
【請求項１６】
メッセージネットワークインターフェースユニットであって、該メッセージネットワークインターフェースユニットは、プロセッサに連結されており、該プロセッサがハードウェアユニットから複数のメッセージを受信することを可能にし、該メッセージネットワークインターフェースユニットは、
該複数のメッセージをキューに入れるように動作可能な複数のキューであって、該複数のキューのうちの少なくとも１つのキューは、関連付けられた優先度レベルを示すアドレスに割り当てられる、複数のキューと、
該複数のキューに連結されており、該複数のメッセージのうちの少なくとも１つのメッセージの引数を格納するように動作可能である受信レジスタと
を含む、メッセージネットワークインターフェースユニット。
【請求項１７】
前記受信レジスタは、現在の最高優先度レベルを示すアドレスに関連付けられた前記複数のキューのうちの１つのキューから前記複数のメッセージのうちの前記少なくとも１つのメッセージの前記引数を格納するように動作可能である、請求項１６に記載のメッセージネットワークインターフェースユニット。
【請求項１８】
前記プロセッサは、前記複数のキューの別のキュー内の他のメッセージを処理する前に、前記現在の最高優先度レベルを示す前記アドレスに関連付けられた該複数のキューのうちの前記キュー内のメッセージを処理する、請求項１７に記載のメッセージネットワークインターフェースユニット。
【請求項１９】
前記アドレスは、特有であり、該アドレスは、前記ハードウェアユニットから受信された前記複数のメッセージのための目的地アドレスとして使用される、請求項１６に記載のメッセージネットワークインターフェースユニット。
【請求項２０】
前記メッセージネットワークインターフェースユニットおよび前記プロセッサは、プログラマブル論理デバイス上に設置されている、請求項１６に記載のメッセージネットワークインターフェースユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願への相互参照）
本出願は、２０１１年９月７日に出願された、同時係属中の、同一人に譲渡された米国仮特許出願第６１／５３１，９５０号の利益および優先権を主張する。上記出願は、全体として本明細書において参照することによって援用される。
【０００２】
（本発明の分野）
本発明は、集積回路デバイスに関し、具体的には、高速メッセージパッシングのためのメッセージネットワークインターフェースユニットを有するデバイスに関する。
【背景技術】
【０００３】
（開示内容の背景）
データ集約型電子デバイスおよびアプリケーションが広がるにつれて、データレートは、増加し続けている。あるデータ集約型リアルタイムアプリケーションにおいてデバイス（例えば、プログラマブル論理デバイス）の使用を容易にするために、低レベル専門処理ブロックとメッセージパッシング通信構造とを含む階層的専門処理ブロックがますます多く使用されている。専門処理ブロック（例えば、知的財産（ＩＰ）ブロック）は、ブロックサーキットリーであり、デバイス上に実装される、デバイスの汎用のプログラマブル論理から分離され得、特定の機能を実行するために少なくとも部分的にハードワイヤされる。デバイス通信構造に基づいて、他の専門処理ブロックまたはサーキットリーより低階層レベルにある専門処理ブロック（例えば、ＩＰブロック）は、低レベル専門処理ブロック（例えば、低レベルＩＰブロック）と呼ばれ得る。低レベル専門処理ブロックは、メッセージネットワークを用いてこれらの専門処理ブロックに通信するプロセッサにおいて動作するソフトウェアを用いて最もよく調整される。例えば、プロセッサは、メモリマップ化されたプロトコールを用いてメッセージを読み取り、そして書き込み、メッセージは、ストリーミングパケットベースのプロトコールを用いて低レベル専門処理ブロックに伝送され、またはそこから伝送され得る。高効率的なインターフェースは、データ集約型リアルタイムアプリケーションにおいて用いられるために、プロセッサとメッセージネットワークとの間で使用され得る。
【０００４】
メッセージパッシングネットワークは、共通使用になり得る。多くの既存メッセージパッシングネットワークは、プロセッサまたは処理ブロック（例えば、ＩＰコア）が互いと通信するためにメッセージを送受信することを可能にする。例えば、チップ上のネットワーク（ＮｏＣ）設計は、チップ上のシステム（ＳｏＣ）内のＩＰコアの間の通信のために生成され、そして使用され得る。プロセッサとメッセージとの間の使用のための複数の既存インターフェース設計もあり、複数の既存インターフェース設計は、専門処理ブロックと通信するために、プロセッサによって使用される。このようなインターフェース設計の一例として、ＰｉｃａＲｉＳＣ，ＤＰＸは、ＦＩＦＯベースのメッセージパッシング機構を活用する。インターフェース設計の別の例として、プログラマブルデバイス内に埋め込まれたプロセッサは、バス書き込みサイクルの間に、メッセージを直接にネットワーク内に書き込むことによってメッセージを送信することができる。しかしながら、これらのインターフェースは、欠点を有している。特に、ＰｉｃａＲＩＳＣ，ＤＰＸは、ＦＩＦＯ要求のため、柔軟性のない傾向があり、メッセージを直接にネットワーク内に書き込むことを必要とする設計は、メッセージが隣接してグループ化される必要があるため、柔軟性のない傾向がある。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
現存のメッセージパッシングネットワークの柔軟性がないために、プロセッサとメッセージパッシングネットワークとの間の迅速かつ効率的インターフェースに対するニーズがある。
【課題を解決するための手段】
【０００６】
技術分野における上記および他の短所を解決するために、本開示は、プロセッサとメッセージパッシングネットワークとの間に迅速かつ効率的インターフェースを提供するための方法およびシステムを示す。このインターフェースは、プロセッサからメッセージを送信する待ち時間を低減させ（すなわち、メッセージの処理量を増大させ）、ハードウェアユニットから受信されたメッセージにおける動作の待ち時間を低減させる（すなわち、メッセージ応答待ち時間を低減させる）。
【０００７】
メッセージインターフェースは、伝送レジスタ内のスクラッチパッドメモリ内にメッセージを推測的に生成し、１つ以上のキュー内に生成されたメッセージを推測的にキューに入れ、そして後に任意のメッセージおよび／またはメッセージのキューを送信するか否かのような決定をすることによって上記の待ち時間を低減させる。
【０００８】
特に、メッセージは、プロセッサが別で働いていない期間の間に、もしくはメッセージが送信されるずっと前に生成され得るので、インターフェースは、メッセージを送信するために要求されるプロセッサクロックサイクルの数を低減させる。伝送レジスタおよびスクラッチパッドメモリは、プロセッサがボイラープレートメッセージを生成し、そしてそれらをカスタマイズすることを可能にするテンプレートとして使用され得る。アプリケーションプログラミングインターフェース（ＡＰＩ）は、メッセージ生成のためのプロセッサクロックサイクルの最適消費への接近（すなわち、プロセッササイクル毎に１メッセージワードに近いレートでのメッセージの生成）を可能にするために提供される。１つ以上のキューは、生成されたメッセージを推測的にキューに入れるために使用される。
【０００９】
加えて、本明細書に記載されるインターフェースは、メッセージを受信し、および引込メッセージをキューに入れるための１つ以上の別々のアドレス指定されたキューを有することによって受信されたメッセージ上に動作する待ち時間を低減させる。キューは、優先度レベルに関連付けられ得る。優先度レベルは、異なるキューのメッセージの中のメッセージをどの順番で処理するかを決定するために使用され得る。例えば、最高優先度レベルを有するキューからのメッセージは、より低い優先度レベルを有するキューからのメッセージの前に処理され得る。本明細書に記載されるメッセージネットワークインターフェースは、実質的に短いメッセージ応答待ち時間と実質的に大きいメッセージ処理量を要求するデータ集約型リアルタイムアプリケーションの実装を可能にし得る。
【００１０】
方法およびシステムは、プロセッサに連結されており、プロセッサがメッセージをハードウェアユニットに送信することを可能にするために使用されるメッセージネットワークインターフェースユニット（メッセージインターフェースユニット）に対して提供される。実施形態において、メッセージネットワークインターフェースユニットは、伝送レジスタを含む。伝送レジスタは、スクラッチパッドメモリを含み、プロセッサによって推測的に生成されるメッセージのうちの少なくとも１つの引数を格納する。１つ以上のキューは、伝送レジスタに連結されている。１つ以上のキューが、メッセージをキューに入れるために使用され得る。動作は、メッセージインターフェースユニットにおいて、動作が実行されるべきであること示すメッセージを受信することに応じて１つ以上のキューにおいて実行され得る。１つ以上のキューにおいて実行され得る動作は、例外が発生したことを示すメッセージを受信することに応じて、キューのうちの１つの内容のすべてを放棄することを含む。１つ以上のキューにおいて実行され得る動作は、キューのうちの１つの中に格納されたメッセージの各々を送信することを含む。いくつかの実施形態において、メッセージインターフェースユニットおよびプロセッサは、同じデバイス上に設置されている。デバイスの例は、プログラマブル論理デバイス、集積回路デバイス、または他のデバイスを含む。いくつかの実施形態において、メッセージインターフェースユニットは、ビデオスカラーによって使用される。
【００１１】
方法およびシステムはまた、プロセッサに連結されており、プロセッサがハードウェアユニットからメッセージを受信することを可能にするために使用されるメッセージインターフェースユニットに対して提供される。実施形態において、メッセージインターフェースユニットは、メッセージをキューに入れるために使用され得る１つ以上のキューを含む。１つ以上のキューの各々は、そのキューに対する優先度レベルを示す特有なアドレスに割り当てられ得る。特有なアドレスは、ハードウェアユニットによって、プロセッサかまたはメッセージインターフェースユニットによって送信されたメッセージの目的地アドレスとして使用される。受信レジスタは、１つ以上のキューに連結されている。受信レジスタは、メッセージのうちの１つ以上の引数を格納するために使用される。いくつかの実施形態において、受信レジスタは、現在において最高の優先度レベルを有するキューのメッセージの引数を格納するために使用され、このメッセージは、他のキュー（例えば、より低い優先度レベル）のメッセージの前にプロセッサによって処理される。いくつかの実施形態において、メッセージインターフェースユニットおよびプロセッサは、同じデバイス（例えば、プログラマブル論理デバイス）上に設置されている。
【００１２】
本発明は、例えば、以下の項目を提供する。
（項目１）
メッセージネットワークインターフェースユニットであって、該メッセージネットワークインターフェースユニットは、プロセッサに連結されており、該プロセッサが該プロセッサによって生成された複数のメッセージをハードウェアユニットに送信することを可能にし、該メッセージネットワークインターフェースユニットは、
該プロセッサによって生成された該複数のメッセージのうちの少なくもと１つのメッセージの引数を格納するように動作可能な伝送レジスタであって、該少なくとも１つのメッセージが推測的に生成される、伝送レジスタと、
該伝送レジスタに連結されており、該複数のメッセージをキューに入れるように動作可能なキューであって、動作は、該メッセージネットワークインターフェースユニットがトリガーメッセージを受信することに応じて該キューにおいて実行される、キューと
を含む、メッセージネットワークインターフェースユニット。
（項目２）
上記動作は、上記キューの内容を放棄しており、上記トリガーメッセージは、例外が発生したことを示す、上記項目に記載のメッセージネットワークインターフェースユニット。
（項目３）
上記動作は、上記キュー内の上記複数のメッセージを送信している、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目４）
上記伝送レジスタは、上記複数のメッセージのうちの任意のメッセージが送信されるか否かの決定の前に、該複数のメッセージのうちの各メッセージを生成するために使用される、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目５）
上記伝送レジスタは、上記少なくとも１つのメッセージの引数を格納するためのスクラッチパッドメモリを含む、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目６）
上記メッセージネットワークインターフェースユニットおよび上記プロセッサは、同じデバイス上に設置されている、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目７）
上記デバイスは、プログラマブル論理デバイスである、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目８）
ビデオスカラーであって、該ビデオスカラーは、上記項目のいずれかに記載のメッセージネットワークインターフェースユニットを用いて１つのフォーマットから別のフォーマットにビデオをスケールする、ビデオスカラー。
（項目９）
メッセージネットワークインターフェースユニットに連結されたプロセッサが複数のメッセージをハードウェアユニットに送信することを可能にするための方法であって、該方法は、
該プロセッサを用いて、該複数のメッセージを推測的に生成することであって、該生成することは、該複数のメッセージのうちの少なくとも１つのメッセージの引数を伝送レジスタ内に格納することを含む、ことと、
該伝送レジスタに連結されたキュー内の該複数のメッセージをキューに入れることと、
該メッセージネットワークインターフェースユニットにおいて、動作が実行されるべきであることを示すメッセージを受信することと、
該動作が実行されるべきであることを示す該メッセージを受信することに応じて該キューにおいて動作することと
を含む、方法。
（項目１０）
上記動作は、上記キューの内容を放棄することを含み、該動作が実行されるべきであることを示す上記メッセージは、期待が発生したことを示す、上記項目のいずれかに記載の方法。
（項目１１）
上記動作は、上記キュー内の上記複数のメッセージを送信することを含む、上記項目のいずれかに記載の方法。
（項目１２）
上記推測的に生成することは、上記複数のメッセージのうちの１つのメッセージが送信されるか否かの決定の前に、上記伝送レジスタを使用する、上記項目のいずれかに記載の方法。
（項目１３）
上記複数のメッセージのうちの上記少なくとも１つのメッセージの引数を格納することは、該複数のメッセージのうちの該少なくとも１つのメッセージの該引数をスクラッチパッドメモリ内に格納することを含む、上記項目のいずれかに記載の方法。
（項目１４）
上記メッセージネットワークインターフェースユニットおよび上記プロセッサは、同じデバイス上に設置されている、上記項目のいずれかに記載の方法。
（項目１５）
上記デバイスは、プログラマブル論理デバイスである、上記項目のいずれかに記載の方法。
（項目１６）
メッセージネットワークインターフェースユニットであって、該メッセージネットワークインターフェースユニットは、プロセッサに連結されており、該プロセッサがハードウェアユニットから複数のメッセージを受信することを可能にし、該メッセージネットワークインターフェースユニットは、
該複数のメッセージをキューに入れるように動作可能な複数のキューであって、該複数のキューのうちの少なくとも１つのキューは、関連付けられた優先度レベルを示すアドレスに割り当てられる、複数のキューと、
該複数のキューに連結されており、該複数のメッセージのうちの少なくとも１つのメッセージの引数を格納するように動作可能である受信レジスタと
を含む、メッセージネットワークインターフェースユニット。
（項目１７）
上記受信レジスタは、現在の最高優先度レベルを示すアドレスに関連付けられた上記複数のキューのうちの１つのキューから上記複数のメッセージのうちの上記少なくとも１つのメッセージの上記引数を格納するように動作可能である、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目１８）
上記プロセッサは、上記複数のキューの別のキュー内の他のメッセージを処理する前に、上記現在の最高優先度レベルを示す上記アドレスに関連付けられた該複数のキューのうちの上記キュー内のメッセージを処理する、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目１９）
上記アドレスは、特有であり、該アドレスは、上記ハードウェアユニットから受信された上記複数のメッセージのための目的地アドレスとして使用される、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
（項目２０）
上記メッセージネットワークインターフェースユニットおよび上記プロセッサは、プログラマブル論理デバイス上に設置されている、上記項目のいずれかに記載のメッセージネットワークインターフェースユニット。
【００１３】
（摘要）
方法およびシステムは、プロセッサに連結されており、プロセッサがメッセージをハードウェアユニットに送信することを可能にするために使用されるメッセージネットワークインターフェースユニット（メッセージインターフェースユニット）に対して提供される。方法およびシステムはまた、プロセッサに連結されており、プロセッサがハードウェアユニットからメッセージを受信することを可能にするために使用されるメッセージインターフェースユニットに対して提供される。本明細書に説明されるメッセージネットワークインターフェースユニットは、実質的に短いメッセージ応答待ち時間と実質的に大きいメッセージ処理量を要求するデータ集約型リアルタイムアプリケーションの実装を可能にし得る。
【００１４】
本開示のさらなる特徴、その本質およびさまざまな利点は、添付の図面を関連して、以下の詳細な説明を考慮する際に明白になる。同様な参照文字は、全体通して同様なバーツを指す。
【図面の簡単な説明】
【００１５】
【図１】図１は、例示的な実施形態に従う、メッセージに対応する信号とメッセージのフォーマットとの簡単化されたダイヤグラムである。
【図２Ａ】図２Ａは、例示的な実施形態に従う、メッセージインターフェースユニットを活用するビデオスカラーのための簡単化されたブロックダイヤグラムである。
【図２Ｂ】図２Ｂは、例示的な実施形態に従う、メッセージインターフェースユニットを活用するビデオスカラーのための簡単化されたブロックダイヤグラムである。
【図３】図３は、例示的な実施形態に従う、メッセージインターフェースユニットを提供するための直接メモリアクセス解決法である。
【図４】図４は、例示的な実施形態に従う、メッセージインターフェースユニットを提供するための解決法の簡単化されたブロックダイヤグラムである。
【図５】図５は、データ処理システム内にあるように、本明細書において説明されたメッセージインターフェースユニットの実施形態を含む集積回路（ＩＣ）または他のデバイス（例えば、ＰＬＤ、ＡＳＳＰ、ＡＳＩＣ、フルカスタムチップ、専用チップ、プログラマブル論理デバイス、またはＦＰＧＡ）を例示する。
【発明を実施するための形態】
【００１６】
（発明の詳細な説明）
本発明の全体の理解を提供するために、ある例示的な実施形態がここで説明される。しかしながら、本明細書において説明されたシステムおよび方法が対象とする用途に対して適切であるように適合かつ改変され得ることと、本明細書において説明されるシステムおよび方法が他の適切な用途において使用され得ることと、そのような他の付加および改変が本明細書の範囲から逸脱されないこととが当業者によって理解される。
【００１７】
図１は、例示的な実施形態に従う、メッセージに対応する信号とメッセージのフォーマットとの簡単化されたダイヤグラムである。本明細書に使用されるように、メッセージは、ソフトプログラミングにおける機能コールに類似し得る。特に、メッセージは、機能コールをカプセル化するパケットであり得る。例えば、メッセージは、機能コールボイドｆ００（整数引数１，．．．，整数引数Ｎ）を実行するために必要な情報をカプセル化し、および運搬し得る。この機能コールにおいて、実行するためのタスクは、ｆ００であり、入力をタスクに提供する引数は、引数１から引数Ｎである。パケット化されたメッセージフォーマットにおいて、機能ｆ００は、タスクＩＤによって識別されたタスクに対応し、引数１から引数Ｎまでの引数は各々、パケット内の引数データワードに対応する。ハードウェアユニット（例えば、プロセッサまたは専用処理ブロック）がこのメッセージを受信する場合に、メッセージは、関連付けられた入力、引数１から引数Ｎを用いて（すなわち、パケット内の受信された引数データワードを用いて）タスクｆ００（すなわち、タスクＩＤに関連付けられたタスク）を実行するように、ハードウェアユニットに命令する。
【００１８】
図１は、メッセージが送受信されることができる期間を決定するために使用されるクロック信号１０２を示す。図１はまた、パケットの開始（ｓｏｐ）信号１０４と、パケットの終了（ｅｏｐ）信号１０６とを示す。ｓｏｐは、パケット、およびメッセージの開始を指示し、ｅｏｐは、パケットおよびメッセージの終了を指示する。さらに、図１は、メッセージの一般的フォーマット１１０を示す。１１０において例示されるように、コンテキストＩＤ（ＣＩＤ）１１２、タスクＩＤ（ＴＩＤ）１１４、ソースＩＤ（ＳＩＤ）１１６、および目的地ＩＤ（ＤＩＤ）１１８を含む制御ヘッダは、メッセージの最重要ビット（ＭＳＢ）の中に見つけられ得る。引数データワード１２０の各々は、１１０内のメッセージの最も重要でないビット（ＬＳＢ）の中に見つけられ得る。コンテキストＩＤ１１２は、メッセージ１１０に関連するタスクが実行されるべきである状態を示す。タスクＩＤ１１４は、実行されるべきであるタスクを示す。ソースＩＤ１１６は、メッセージの送信元を識別する。目的地ＩＤ１１８は、メッセージの受信側を識別し、そしてメッセージが、例えば、メッセージの正しい受信側または正しいキューへルーティングされることを可能にし得る。
【００１９】
図２Ａおよび２Ｂは、例示的な実施形態に従う、メッセージインターフェースユニット２２０を活用するビデオスカラー２００のための簡単化されたブロックダイヤグラムである。ビデオスカラー２００は、計数されたビデオ入力（ＣＶＩ）ユニット２０２、ＶＩＢユニット２０４、パケットスイッチ２０６、ハードウェアパイプライン２０８、パケットライター２１０、ＤＤＲ３メモリブロック２１２、フレームリーダー２１４、計数されたビデオ出力（ＣＶＯ）ユニット２１６、パケットスイッチ２１８、メッセージインターフェースユニット２２０、カーネルクリエイタ２２２、およびプロセッサ２２４（スケジューラ２２４とも呼ばれる）を含む。ビデオスカラー２００は、ビデオ処理、例えば、１０８０ｐ６０ビデオ（フレーム当たり１０８０のビデオのアクティブラインと毎秒６０のフレームとを含む）を４Ｋビデオ（すなわち、１０８０ｐ６０ビデオの４倍の解像度）にアップスケールするために使用され得る。いくつかの実施形態において、プロセッサ２２４は、スカラー２００の外部に設置され得る。いくつかの実施形態において、プロセッサ２２４は、Ｓａｎ  Ｊｏｓｅ，ＣａｌｉｆｏｒｎｉａのＡｌｔｅｒａ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＦＰＧＡに組み込まれたＮＩＯＳ（登録商標）ＣＰＵであり得る。いくつかの実施形態において、プロセッサは、任意タイプの一般的なプロセッサまたはプロセッサコアであり得る。１つの例示的な実施形態において、ビデオアップスケーリングは、本明細書に説明されるメッセージインターフェースユニットを活用するが、例えば、ビデオ処理、データストレージ、または通信における他の機能は、これらのメッセージインターフェースユニットを用いて同様に実装され得る。
【００２０】
ビデオアップスケーリングは、システム２００のハードウェアパイプライン２０８のうちの４つを用いて実装され得る。ハードウェアパイプラインの各々は、４つのハードウェアユニット（順番に、クリッパー、ラインバッファー、スカラー、および別のクリッパー）を含み得、パイプラインの各々は、引込ビデオの四分の一で動作し得る。プロセッサ２２４において動作するソフトウェアは、メッセージインターフェースユニット２２０を用いてメッセージを送信することによって引込ビデオを処理するように、ハードウェアパイプライン２０８の各々を制御し得る。特に、プロセッサ２２４は、ハードウェアパイプライン２０８のハードウェアユニットのうちの１つ以上にメッセージを送信するように、メッセージインターフェースユニット２００を命令し得る。プロセッサ２２４において動作するソフトウェアは、メッセージインターフェースユニット２２０を介してハードウェアパイプライン２０８内のハードウェアユニットに送信されたメッセージのタイプを変えることによって、任意のハードウェアパイプラインを任意の特定タイプの引込ビデオストリームに動的に適応することが可能であり得る。ハードウェアパイプライン２０８に動的に適応するこの方法は、複雑なハードウェア制御なしに、パイプラインが入出力ビデオフォーマットの複数の構成およびタイプをサポートすることを可能にし得る。例えば、ハードウェアパイプライン２０８は、１つの４Ｋビデオストリーム、４つの１０８０ｐ６０ストリーム、または４つの７２０ｐ６０ビデオストリームの出力をサポートすることが可能であり得る。
【００２１】
動作中、１０８０ｐ６０ビデオは、ある時間においてフレームの１つのラインをＣＶＩユニット２０２に入力し得、ＣＶＩユニット２０２は、この情報を処理し、そしてＶＩＢユニット２０４に送信し得る。ＶＩＢユニット２０４は、この情報をパケット化し、そしてパケットスイッチ２１８に出力し得、パケットスイッチ２１８は、この情報をメッセージインターフェースユニット２２０およびカーネルクリエイタ２２２に出力し得る。メッセージインターフェースユニット２２０は、１つ以上のメッセージをプロセッサ２２４に送信することによってビデオのフレームの引込ラインをプロセッサ２２４に通知し得る。プロセッサ２２４はまた、ビデオのフレームの引込ラインを通知され得る。
【００２２】
プロセッサ２２４は、ビデオの引込ラインおよびフレームに対応するメッセージを受信し得、これらのメッセージの各々を処理し得る。特に、１０８０ｐ６０ビデオに対して、実際には、毎秒６０の引込フレームの各々は、プロセッサ２２４に、フレームの幅および高さを示す１つのメッセージを受信させ得る。実際には、引込１０８０アクティブラインのビデオの各入力アクティブラインは、プロセッサ２２４に、２つのメッセージ：ラインの開始を示す１つのメッセージと、ラインの終了を示す別のメッセージとを受信させ得る。実際には、ビデオの各入力アクティブラインはまた、カーネルクリエイタ２２２からパケットスイッチ２１８を介して２つの追加のメッセージを受信させ得、２つの追加のメッセージは、出力ビデオの２つのラインを生成するために、ビデオの入力アクティブラインをアップスケールするためのカーネルクリエイタによって形成された要求された係数を含む。先行するメッセージの各々は、プロセッサに通信するメッセージインターフェースユニット２２０を介してプロセッサ２２４によって受信され得る。
【００２３】
メッセージインターフェースユニット２２０を用いて、プロセッサ２２４はまた、アップスケールされるべきである引込ビデオのフレームおよびラインに基づいてメッセージを送信し得る。各入力フレームは、プロセッサ２２４に、６つのメッセージを（２つのメッセージをカーネルクリエイタ２２２に、４つのメッセージをハードウェアパイプライン２０８のラインバッファーの各々に）送信させ得る。加えて、ビデオの各入力アクティブラインは、プロセッサ２２４に、５２のメッセージを、例えば、パケットスイッチ２１８を介して４つのハードウェアパイプライン２０８の各々におけるさまざまな部品に送信させ得る。メッセージインターフェースユニット２２０は、プロセッサ２２４に代わってこれらのメッセージの各々を送信し得る。
【００２４】
ＶＩＢユニット２０４は、パケットスイッチ２１８を介して、メッセージインターフェースユニット２２０および／またはカーネルクリエイタ２２２によって送信されたメッセージを受信し得る。ＶＩＢユニット２０４は、これらのメッセージ内にビデオデータを複製し得、そしてメッセージをパケットスイッチ２０６に転送し得、パケットスイッチ２０６は、ハードウェアパイプライン２０８のさまざまな部品にメッセージを転送し得る。引込ビデオのアクティブラインおよびフレームで動作するハードウェアパイプライン２０８の各々は、それが受信するビデオの各アクティブラインの一部分、ビデオの複数の引込クリップされたアクティブラインをバッファーするためのラインバッファー、バッファーからバッファーされ、かつクリップされたビデオのアクティブラインをスケールするスカラー、およびスケールされ、バッファーされ、そしてクリップされたビデオをクリップするためのクリッパーを含む。前述のように、ハードウェアパイプライン２０８内のこれらのハードウェアユニットの各々は、プロセッサ２２４および／またはメッセージインターフェースユニット２２０によって送信／転送される制御メッセージを用いて制御され得る。ハードウェアパイプライン２０８によって処理された後に、結果として生じるビデオは、ＤＤＲ３メモリブロック２１２に書き込まれるように、パケットライター２１０に送信され得る。ＤＤＲ３メモリブロック２１２の使用は、例示的であり、本発明の範囲を限定する意図がない。他のタイプのメモリ（例えば、任意のタイプのランダムアクセスメモリ、読取専用メモリ、またはフラッシュメモリ）が、代わりに、またはＤＤＲ３メモリブロック２１２と組み合わせて使用され得る。結果として生じるビデオは、フレームリーダー２１４によって、ある後の時間にＤＤＲ３メモリブロック２１２から読み出され得、フレームリーダー２１４は各々、それが読み取るビデオを、スカラー２００から出力されるように、ＣＶＯユニット２１６のうちの１つに転送し得る。フレームリーダー２１４は各々、プロセッサ２２４および／またはメッセージインターフェースユニット２２０によって送信／転送される制御メッセージを用いて別々に制御され得る。
【００２５】
１０８０ｐ６０ビデオを４Ｋビデオにアップスケールするために、（６０×１）＋（１０８０×６０×４）＝２５９２６０のメッセージの全部は、毎秒、プロセッサによって受信され得、（６０×６）＋（１０８０×６０×５２）＝３３６９９６０のメッセージの全部は、毎秒、送信され得る。それ故に、この代表的な実施形態において、２５９２６０＋３３６９９６０＝３．６百万のメッセージは、毎秒、受信も送信もされ得る。それ故に、この例において、アップスケーリングは、毎秒３．６百万のメッセージ処理量を要求し得る。
【００２６】
メッセージ応答待ち時間は、プロセッサがメッセージを受信し、プロセッサが適切な動作を取り終わるまでの経過時間として規定され得、適切な動作は、例えば、応答において適切なメッセージを送信することを含む。１０８０ｐ６０ビデオを４Ｋビデオにアップスケールすることは、短いメッセージ応答待ち時間を要求し得る。リアルタイルアプリケーション（例えば、１０８０ｐ６０ビデオを４Ｋビデオにアップスケールすること）に対して、メッセージ応答待ち時間は、タスクの完成における全体的待ち時間の実質的な要因であり得る。従って、ビデオをアップスケールすることは、毎秒、送信または受信されるべきである３．６百万のメッセージの組み合わせされた処理量を要求し得るだけではなく、実質的に短いメッセージ応答待ち時間も要求し得る。
【００２７】
図３は、代表的な実施形態に従う、メッセージインターフェースユニットを提供するためのＤｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓベースの解決法である。図３において、共用メモリ３１０、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）コントローラ３１２、およびメッセージフォーマットブリッジにマップ化されたメモリ３１４（合わせてメッセージインターフェースユニット３５０）は各々、プロセッサ３００に、およびデータバス３２０を介して互いに連結されている。ＤＭＡコントローラ３１２は、メッセージを送受信するために、プロセッサ３００によって使用され得る。
【００２８】
プロセッサ３００は、メッセージを生成、およびこれらのメッセージを共用メモリ３１０内に格納し得る。例えば、図３は、生成され、およびプロセッサ３００によって共用メモリ３１０内に格納された７つのメッセージを示す。プロセッサ３００は、プロセッサ３００が伝送することを望む共有メモリ３１０内のメッセージを指すＤＭＡ転送記述を生成し得る。次に、プロセッサ３００は、メッセージフォーマットブリッジにマップ化されたメモリ３１４を用いて、１つ以上のハードウェアユニットにメッセージを転送することによってこれらのメッセージを送信するようにＤＭＡコントローラ３１２に命令し得る。メッセージフォーマットブリッジにマップ化されたメモリ３１４は、メッセージをパケット化し、メッセージを適切なハードウェアユニットに転送し得る。図３に示されるメッセージインターフェースユニット３５０の解決法は、完全な機能的メッセージインターフェースユニットの解決法であるが、あるデータ集約型リアルタイムアプリケーションの実質的に高処理量の要求を満たすことができない場合がある。特に、図３に示された解決法において、プロセッサ３００は、送信／転送されるメッセージを上書きし、プロセッサの非効率的使用を引き起こすことを防止するために、共用メモリ３１０へのアクセスを管理する必要があり得る。加えて、この解決法は、各メッセージ転送のために、ＤＭＡコントローラ３１２に対するＤＭＡ転送記述を生成するようにプロセッサ３００に要求し得、プロセッサの非効率的使用を引き起こす。さらに、図３に示された解決法を用いて、複数回、同じメッセージを、またはメッセージに対する僅かな変更を伴って送信することは、解決法がプロセッサのＤＭＡコントローラ３１２との同期を要求するため、プロセッサ３００にとって非効率的であり得る。プロセッサに対するこれらの非効率化は、図３に示された解決法を用いる場合に、メッセージの処理量を低減させ得る。
【００２９】
図３に示されたメッセージインターフェースユニット３５０の解決法はまた、メッセージがプロセッサによって受信されるときに、いくつかのデータ集約型リアルタイムアプリケーションの正しい動作に対して長すぎるメッセージ応答待ち時間を有し得る。特に、この解決法において、プロセッサ３００は、任意の引込メッセージを共有メモリ３１０に複製するようにＤＭＡコントローラ３１２に命令することを要求され、プロセッサ３００に対するクロックサイクルの非効率的使用を引き起こす。加えて、この解決法において、ＤＭＡコントローラ３１２は、コントローラが任意の引込メッセージを共有メモリ３１０に複製したときに、プロセッサ３００を中断させる。次に、プロセッサ３００は、メッセージを読み取り、適切な動作を実行するように要求される。引込メッセージに対して適切な動作を実行するようにプロセッサに対して要求された追加のステップは、プロセッサ３００に対する浪費されたクロックサイクルに起因する追加の非効率化を引き起こす。従って、図３に示された解決法のメッセージインターフェースユニット３５０を用いてメッセージを受信することは、あるデータ集約型リアルタイムアプリケーションに対する要求を超えるメッセージ応答待ち時間を増加し得るプロセッサ非効率化を引き起こす。
【００３０】
図４は、例示的な実施形態に従う、メッセージインターフェースユニット４５０を提供するための解決法の簡単化されたブロックダイヤグラムである。図４は、データバス４０２を介してメッセージインターフェースユニット４５０に連結されているプロセッサ４００を示す。いくつかの実施形態において、プロセッサ４００は、任意タイプの一般的プロセッサであり得る。いくつかの実施形態において、プロセッサ４００は、プログラマブル集積回路デバイス（例えば、プログラマブル論理デバイス（例えば、ＦＰＧＡ））の組み込まれたプロセッサである。例えば、プロセッサ４００は、Ｓａｎ  Ｊｏｓｅ，ＣａｌｉｆｏｒｎｉａのＡｌｔｅｒａ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＦＰＧＡに組み込まれたＮＩＯＳ（登録商標）ＣＰＵであり得る。いくつかの実施形態は、プロセッサは、任意タイプの一般的プロセッサまたは処理コアであり得る。プロセッサは、メッセージインターフェースユニット４５０と同じデバイス上または、メッセージインターフェースユニット４５０とは別のデバイス、またはその周辺のデバイス上に設置され得る。
【００３１】
メッセージインターフェースユニット４５０は、プロセッサ４００がメッセージを送受信することを可能にし得る。メッセージインターフェースユニット４５０は、プロセッサ４００が、データ集約型リアルタイムアプリケーション（例えば、前述の１０８０ｐ６０ビデオを４Ｋビデオにアップスケールすること）をサポートするために、十分に大きい処理量かつ十分に短いメッセージ応答待ち時間でメッセージを送受信することを可能にし得る。いくつかの実施形態において、メッセージインターフェースユニット４５０は、プロセッサ４００と同じデバイス上に含まれ得る。いくつかの実施形態において、メッセージインターフェースユニット４５０は、プロセッサ４００とは別個のデバイス（すなわち、周辺デバイス）である。いくつかの実施形態において、メッセージインターフェースユニット４５０は、任意のプロセッサに取り付けられ得るメモリマップ化された周辺デバイスである。メッセージインターフェースユニット４５０は、図２Ｂのメッセージインターフェースユニット２２０に類似し得、図２Ａおよび２Ｂのビデオスカラー２２０を用いて使用され得る。
【００３２】
メッセージインターフェースユニット４５０は、いくつかの予備のレジスタ（示されていない）、ｓｐａｃｅ＿ａｖａｉｌａｂｌｅレジスタ４０４、ｓｅｎｄ＿ｑｕｅｕｅレジスタ４０６、ｆｒｅｅ＿ｑｕｅｕｅレジスタ４０８、ヘッダレジスタ４１０、引数レジスタ４１２を含む伝送レジスタ４６０を含み得る。引数レジスタ４１２は、スクラッチパッドメモリとも呼ばれ得る。プロセッサ４００は、メッセージインターフェースユニット４５０と通信することによって伝送レジスタ４６０から読み取り、または伝送レジスタ４６０に書き込み得る。いくつかの実施形態において、伝送レジスタ４６０は、１つ以上のキュー４８０に連結され得、１つ以上のキュー４８０は各々、メッセージ（例えば、プロセッサによって生成されたメッセージ）をキューに入れ、送信するために使用され得る。いくつかの実施形態において、伝送レジスタ４６０のアドレスと、プロセッサ４００がこれらのレジスタの各々に書き込むかまたは読み取るときに発生するものに対する記述とが、表１に示される。
【００３３】
【表１】
2013058200.tif 000002
プロセッサ４００は、メッセージインターフェースユニット４５０用いて、データ集約型リアルタイムアプリケーションのためのメッセージを送信することに対して十分に大きい処理量を達成し得る。特に、引数レジスタ４１２（すなわち、スクラッチパッドメモリ）は、後に送信され得るメッセージを推測的に生成するために、プロセッサ４００によってアクセスされ得る。プロセッサ４００は、スクラッチパッドメモリを活用することによって、高レートでメッセージを生成し、および送信することが可能であり得る。メッセージインターフェースユニット４５０は、スクラッチパッドメモリへの任意のアクセスを制御し得、プロセッサ４００が現在（例えば、前のメッセージの一部分として）送信されている引数レジスタに書き込もうとする場合に、プロセッサを遅延させ得る。そうでなければ、メッセージインターフェースユニット４５０は、プロセッサ４００が、各クロックサイクルがメッセージを送信するための準備中である間に、引数レジスタに書き込むことを可能し得る。メッセージが送信される前に、変更がある引数値に対応する引数レジスタのみが書き込まれる必要があるので、プロセッサは、効率的に同一または類似のメッセージを送信し得る。一旦プロセッサ４００が、ヘッダレジスタ４１０に書き込むと、スクラッチパッドメモリ内の引数を含むメッセージは、キュー４８０のうちの１つに送信され、またはキューに入れられ得る。このように、メッセージインターフェースユニット４５０と共に、プロセッサ４００は、メッセージインターフェースユニット４５０および／またはプロセッサ４００が特定のメッセージを受信する場合において送信されるべきであるメッセージを推測的に生成し、キューに入れ得る。推測的メッセージの生成およびキューに入れることが以下により詳細に説明される。
【００３４】
メッセージを送信し、または任意のキューの内容を放棄するために、プロセッサ（例えば、プロセッサ４００）によって使用され得るソフトウェアコードの例が、以下に示される。この例のコードにおいて、使用されたマクロは、本明細書に組み込まれた付録Ａに記載されている。
【００３５】
【化１】
2013058200.tif 000003
プロセッサ４００は、推測的にメッセージを生成するために、メッセージインターフェースユニット４５０において、引数レジスタ４１２（すなわち、スクラッチパッドメモリ）を使用し得る。プロセッサ４００は、プロセッサが生成したメッセージを（デバイスかまたはキュー４８０のうちの１つ）に送信するために、ヘッダレジスタ４１０に書き込み得る。プロセッサ４００は、メッセージを送信するために、最小数のクロックサイクルを使用し得る。特に、メッセージを送信するためのクロックサイクルの数は、Ｎ回の書き込み（Ｎ個の引数レジスタ４１２に書き込み、ここで、Ｎは、引数の数である）＋１回の書き込み（ヘッダレジスタ４１０に書き込む）と等しくあり得る。加えて、メッセージは、プロセッサ４００を中断することなしに送信され得る（すなわち、プロセッサ４００からの関与なしに、メッセージインターフェースユニット４５０によって自動的に送信され得る）。いくつかの実施形態において、引数レジスタ４１２は、それらの値を保持することにより、後の同一のメッセージは、ヘッダメッセージへの１回の書き込みのみによって送信され得る。プロセッサ４００は、繰り返し同じメッセージを送信するために、ヘッダレジスタ４１０への繰り返しの書き込みを実行し得る。
【００３６】
メッセージを送信する場合に、引数レジスタ４１２内に格納された引数は、プロセッサ４００が既に送信／転送されている引数に対して引数レジスタ４１２を更新する（に書き込む）ことを可能にするために、連続して読み取られ、送信／転送され得る。迅速に新しいメッセージを生成するために、プロセッサ４００は、引数レジスタ４１２のうちの任意の１つの引数が送信／転送されている間のクロックサイクルの直後のクロックサイクルの間に、そのレジスタに書き込み得る。従って、ヘッダレジスタ４１０への書き込みの後のクロックサイクルの開始において、メッセージインターフェースユニット４５０は、プロセッサ４００が、（事前に格納された引数ａｒｇ０が送信／転送された後に）ａｒｇ０引数レジスタに書き込むことを可能にし得る。後のクロックサイクルの間に、メッセージインターフェースユニット４５０は、プロセッサ４００が、ａｒｇ１引数レジスタに書き込み、後のクロックサイクルにおいて、ａｒｇ２引数レジスタに書き込む等を可能にし得る。
【００３７】
伝送レジスタ４６０からのメッセージをキュー４８０または他のデバイスに送信／伝送するために使用される伝送データバスは、１つの引数の幅の数倍であり得る。これは、複数の引数が、データバス上で一回で送信されることを可能にし得、また、メッセージが、生成され、プロセッサ４００を遅延させることなしにシステムまたはキューに送信／転送されることを可能にし得る。これは、プロセッサ４００に対して向上された効率化を引き起こし得る。
【００３８】
上に議論されたように、メッセージは、システム内に、またはハードウェアユニットに直接に送信される代わりに、キュー４８０のうちの１つに置かれ得る。キュー４８０のうちの任意の１つにおける全てのメッセージは、プロセッサ４００によって、ｆｒｅｅ＿ｑｕｅｕｅレジスタ４０８へ、一回書き込みで放棄され得る。キュー４８０のうちの任意の１つにおける全てのメッセージは、プロセッサ４００によって、ｓｅｎｄ＿ｑｕｅｕｅレジスタ４０６へ、一回書き込みで送信され得る。特に、プロセッサ４００は、キュー４０８のうちの１つの中へのメッセージを推測的に生成し、キューに入れ得る。このような推測的メッセージの生成およびキューに入れることは、発生し得る期待された事象の予想（例えば、アップスケールされるべきであるビデオの新ラインを有する引込メッセージが後に到達するという予想）においてプロセッサによって実行され得る。メッセージは、（前述のように）生成され得、プロセッサが働いていない間のクロックサイクルの間に推測的にキューに入れられ得る（例えば、ビデオの新ラインを受信することに応じてプロセッサによって送信されるべきであるメッセージは、伝送レジスタ４６０を用いて推測的に生成され、キュー４８０を用いてキューに入れられ得る）。このタイプの推測的メッセージの生成およびキューに入れることは、いくつかのメッセージが推測的に生成され、期待されたメッセージの到達に応じて迅速に送信されるので、メッセージインターフェースユニット４５０が大きいメッセージ処理量を達成することを可能にし得る。加えて、このタイプの推測的メッセージの生成およびキューに入れることは、メッセージインターフェースユニット４５０が、期待されたメッセージの到達に応じてメッセージを生成するための追加のサイクルの使用を防ぐことによって短いメッセージ応答待ち時間を達成することを可能にし得る。さらなる待ち時間を低減させるために、メッセージインターフェースユニット４５０は、特定のメッセージ（トリガーメッセージとも呼ばれる）によってトリガーされる場合に、キュー４８０のうちの１つの中のメッセージの一部または全部を自動的に送信し、または放棄するように構成され得、それによって、プロセッサ４００から追加のクロックサイクルを解放し、場合によっては他のタスクを実行する。
【００３９】
前述のように、１つ以上のキュー４８０は、推測的にメッセージをキューに入れるために使用され得る。プロセッサ４００の代わりに動作し、または独立して動作するメッセージインターフェースユニット４５０は、メッセージインターフェースユニット４５０またはプロセッサ４００によって受信される特定のメッセージに応じて動作を実行し得る。メッセージインターフェースユニット４５０によって実行された動作は、メッセージインターフェースユニット４５０が、メッセージインターフェースユニット４５０またはプロセッサ４００によって受信された特定のメッセージに応じてキューのうちの１つのメッセージまたはキュー４８０のうちの１つ以上の中に含まれたメッセージの全てを送信または放棄することを可能にする。例えば、プロセッサ４００および／またはメッセージインターフェースユニット４５０は、それが例外の発生を示すメッセージを受信したときに、キュー４８０のうちの１つの中のメッセージの全部を放棄し得る。メッセージインターフェースユニット４５０は、構成可能なトリガー（示されていない）を含み得、構成可能なトリガーは、任意のキュー４８０内に含まれるメッセージの一部または全てがメッセージ（すなわち、トリガーメッセージ）を受信したときに、自動的に送信または放棄されることを可能にする。これらのトリガーは、メッセージインターフェースユニット４５０が、プロセッサ４００の関与なしに、メッセージ（トリガーメッセージ）の受信のときに動作することを可能にし得、それによって、プロセッサ４００上の負担を低減させる。いくつかの実施形態において、構成可能なトリガーは、メッセージインターフェースユニット４５０内のハードウェアユニットにおいてハードワイヤ化またはプログラム化され得る。いくつかの実施形態において、構成可能なトリガーは、メッセージインターフェースユニット上で動作するソフトウェアに基づき得る。
【００４０】
メッセージインターフェースユニット４５０は、いくつかの予備のレジスタ（示されていない）、ｓｅｎｄ＿ｑｕｅｕｅレジスタ４２０、ｆｉｌｌ＿ｌｅｖｅｌレジスタ４２２、ｇｅｔ＿ｍｅｓｓａｇｅレジスタ４２４、ヘッダレジスタ４２６、引数レジスタ４２８を含む受信レジスタ４７０を含み得る。プロセッサ４００は、メッセージインターフェースユニット４５０を介して伝送レジスタ４７０から読み取り、または伝送レジスタ４７０に書き込み得る。１つの実施形態において、受信レジスタ４７０のアドレスと、プロセッサ４００がこれらのレジスタの各々に書き込むかまたは読み取るときに発生するものに対する記述とが、表２に示される。
【００４１】
【表２】
2013058200.tif 000004
メッセージを受信するために、プロセッサ（例えば、プロセッサ４００）によって使用され得るソフトウェアコードの例が、以下に示される。この例のコードにおいて、使用されるマクロは、本明細書に組み込まれた付録Ｂに記載されている。
【００４２】
【化２】
2013058200.tif 000005
プロセッサ４００が、書き込み動作をｇｅｔ＿ｍｅｓｓａｇｅレジスタ４２４に対して実行するときに、メッセージがキュー４９０のうちの１つ以上から引数レジスタ４２８内にロードされ得る。プロセッサ４００は、メッセージをロード／受信するために、最小数のクロックサイクルを使用し得る。特に、メッセージをロード／受信するためのクロックサイクルの数は、１回の書き込み（ｇｅｔ＿ｍｅｓｓａｇｅレジスタ４２４に書き込む）＋１回の読み取り（ヘッダレジスタ４２６から読み取る）＋Ｎ回の読み取り（Ｎ個の引数レジスタ４２８から読み取り、ここで、Ｎは、引数の数である）と等しくあり得る。加えて、いくつかの実施形態において、メッセージは、プロセッサ４００を中断することなしにロード／受信され得る（すなわち、メッセージインターフェースユニット４５０によって自動的にロード／受信され得る）。
【００４３】
メッセージをロード／受信する場合に、引数レジスタ４２８が連続して書き込まれ、読み取られることにより、プロセッサ４００が（例えば、キュー４９０のうちの１つを介して）既に書き込まれ、および最近に利用可能になった引数レジスタ４２８から引数を読み取ることを可能し得る。迅速に新しいメッセージをロードするために、プロセッサ４００は、引数レジスタ４２８のうちの任意の１つの引数が、例えば、キュー４９０のうちの１つを介して書き込まれている間のクロックサイクルの直後のクロックサイクルの間に、そのレジスタから読み取られ得る。従って、ｇｅｔ＿ｍｅｓｓａｇｅレジスタ４２４への書き込みの後のクロックサイクルの開始において、メッセージインターフェースユニット４５０は、プロセッサ４００が、（引数ａｒｇ０が、例えば、キュー４９０のうちの１つを介して書き込まれた後の１つのクロックサイクル）ａｒｇ０引数レジスタを読み取ることを可能にし得る。後のクロックサイクルの間に、メッセージインターフェースユニット４５０は、プロセッサ４００が、ａｒｇ１引数レジスタから読み取り、後のクロックサイクルにおいて、ａｒｇ２引数レジスタから読み取る等を可能にし得る。
【００４４】
キュー４９０から受信レジスタ４７０にメッセージをロード／受信するために使用される伝送データバスは、１つの引数の幅の数倍であり得る。これは、複数の引数が、データバス上で一回でロード／受信されることを可能にし得、また、メッセージが、プロセッサ４００を遅延させることなしにロード／受信され、読み取ることを可能にし得る。これは、プロセッサ４００に対して向上された効率化を引き起こし得る。
【００４５】
プロセッサ４００またはメッセージインターフェースユニット４５０に送信されたメッセージは、キュー４９０のうちの１つに置かれ得る。１つ以上のキュー４９０の各々は、ハードウェアユニットの各々がそれのメッセージを適切なキューに送信することが可能であるようにするために、異なる特有な目的地アドレスを有し得る。プロセッサ４００がキュー４９０のうちの任意の１つからメッセージを受信することが可能であり得るので、専用キューに入れることのこの使用は、特定のメッセージが「ヘッダへジャンプし」、他のメッセージより早く処理されることを可能にする。さらに、専用キューに入れることのこのような使用は、システムが異なる優先度に従ってメッセージをキューに入れることを可能にする。これは、異なる優先度レベルをキュー４９０の各々に割り当てることによって達成され得る。このような方式において、各キューに割り当てられたアドレスは、特定の優先度レベルを示し、そして／または関連付けられ得る。
【００４６】
図５は、集積回路（ＩＣ）５６０または別のデバイス（例えば、ＡＳＳＰ、ＡＳＩＣ、フルカスタムチップ、専用チップ、プログラマブル論理デバイス、またはＦＰＧＡ）を活用するデータ処理システム５００を例示する。システム５００は、本明細書に説明されるメッセージインターフェースユニットの実施形態を含む。実施形態において、ＩＣ５６０は、実質的に図２Ａおよび２Ｂのシステム２００に類似し得る。データ処理システム５００は、以下の部品：プロセッサ５７０、メモリ５８０、Ｉ／Ｏサーキットリー５５０、および周辺デバイス５４０のうちの１つ以上を含み得る。これらの部品は、システムバスまたは他の相互接続５３０によって一緒に連結され、エンドユーザーシステム５１０内に含まれる回路基板上に置かれる。
【００４７】
システム５００は、幅広いさまざまな用途（例えば、コンピュータネットワーク、データネットワーキング、計測、ビデオ処理、デジタル信号処理、またはプログラマブルまたは再プログラマブル論理の使用の利点が望ましい任意の別の用途）において使用され得る。ＩＣ５６０は、さまざまな異なる論理機能を実行するために使用され得る。例えば、ＩＣ５６０は、プロセッサ５７０と協働して働くプロセッサまたはコントローラとして構成され得る。ＩＣ５６０はまた、システム５００内の共用リソースへのアクセスを仲裁するためのアービターとして使用され得る。なお別の例において、ＩＣ５６０は、プロセッサ５７０と、システム５００の別の部品またはシステム５００の外部の別のデバイスまたはハードウェアユニットとの間のインターフェースとして構成され得る。システム５００は、単に代表的であることと、本発明の真の範囲および精神が以下の請求項によって示されるべきであることとが留意されるべきである。
【００４８】
以上の説明は、本発明の原理の例示に過ぎず、さまざまな変更は、本発明の範囲および精神から逸脱することなしに当業者によって加えられ得ることが理解される。例えば、図２Ｂのメッセージインターフェースユニット２２０は、図４のメッセージインターフェースユニット４５０に類似し得る。加えて、メッセージインターフェースユニット２２０は、メッセージインターフェースユニット４５０と相互交換に使用され得る。当業者は、本発明が、限定ではなく、例示の目的のために示される説明された実施形態以外によって実践され得ることと、本発明が、以下の請求項のみによって限定されることとを認識する。
【００４９】
付録Ａ−ＡＰＩを伝送する
ＴＸ＿ＳＥＬＥＣＴ＿ＱＵＥＵＥ（ｑｕｅｕｅ＿ｉｄ）
ＴＸ＿ＳＥＬＥＣＴ＿ＱＵＥＵＥコマンドが利用可能なスペースを返すキューを選択する
１つのキューのみが使用される場合に、これは、スタートアップにおいて１回行われる必要だけがある
ＭＩＵへの一回書き込み
ｗｏｒｄｓ＿ａｖａｉｌａｂｌｅ  ＝  ＴＸ＿ＱＵＥＵＥ＿ＳＰＡＣＥ（）；
（ワードで）ＴＸ＿ＱＵＥＵＥ＿ＳＰＡＣＥによって選択されたキュー内の利用可能なスペースを得る
ＭＩＵからの一回読み取り
ＴＸ＿ＡＲＧ（ｎ，  ｖａｌｕｅ）；
現在のメッセージのｎ番目引数を設定する
ＭＩＵへの一回書き込み
ＴＸ＿ＳＥＮＤ＿ＭＳＧ（ｑｕｅｕｅ＿ｉｄ，  ｄｓｔ＿ａｄｄｒ，  ｅｉｄ，  ｎｏ＿ｏｆ＿ａｒｇｕｍｅｎｔｓ）；
現在のメッセージのｅｉｄおよびｄｓｔ＿ａｄｄｒフィールドを設定する
ＭＩＵに現在のメッセージを特定のキューに書き込ませる
ＭＩＵへの一回書き込み
キュー０が、直接送信として構成され得る
これは、後にＴＸ＿ＳＥＮＤ＿ＭＳＧメッセージを送信する必要なしに、メッセージを直接にシステム内に送信する
ＴＸ＿ＳＥＮＤ＿ＭＳＧ１（ｑｕｅｕｅ＿ｉｄ，  ｄｓｔ＿ａｄｄｒ，  ｅｉｄ，  ａｒｇ０）
単一引数メッセージを送信する簡潔な方法
ＭＩＵに２回書き込み、１回がａｒｇ０に対し、１回がヘッダに対する
ＴＸ＿ＳＥＮＤ＿ＭＳＧ２〜ＴＸ＿ＳＥＮＤ＿ＭＳＧ８は、複数の引数メッセージを送信するために使用され得る
ＭＩＵにそれぞれに３〜９回書き込む
ＴＸ＿ＳＥＮＤ＿ＱＵＥＵＥ（ｑｕｅｕｅ＿ｉｄ）；
キュー内のメッセージのすべてを、それらがキー内にある順番でシステム内に送信する
ＭＩＵへの一回書き込み
ＴＸ＿ＱＵＥＵＥ＿ＦＲＥＥ（ｑｕｅｕｅ＿ｉｄ）；
キュー内のメッセージのすべてを削除する
ＭＩＵへの一回書き込み
付録Ｂ−ＡＰＩを受信する
ＲＸ＿ＳＥＬＥＣＴ＿ＱＵＥＵＥ（ｑｕｅｕｅ＿ｉｄ）
ＲＸ＿ＱＵＥＵＥ＿ＦＩＬＬ＿ＬＥＶＥＬコマンドがフィルレベルを返すキューを選択する
１つのキューのみが使用される場合に、これは、スタートアップにおいて１回行われる必要だけがある
ＭＩＵへの一回書き込み
ｎｏ＿ｏｆ＿ｍｅｓｓａｇｅｓ  ＝  ＲＸ＿ＱＵＥＵＥ＿ＦＩＬＬ＿ＬＥＶＥＬ（）；
ＲＸ＿ＳＥＬＥＣＴ＿ＱＵＥＵＥによって選択されたキュー内のメッセージの数を得る
ＭＩＵへの一回読み取り
ｈｅａｄｅｒ  ＝  ＲＸ＿ＨＥＡＤＥＲ
現在のメッセージのメッセージヘッダを得る
メッセージが有効であるか否かを知るために、ビット２４をチェックする（０は、利用可能なメッセージが未だないことを示す）
ａｒｇ０  ＝  ＲＸ＿ＡＲＧ０；
現在のメッセージの１番目の引数を得る
ＭＩＵからの一回読み取り
ＲＸ＿ＡＲＧ（０〜Ｎ）は、１番目〜Ｎ＋１番目の引数を得るために使用され得る
ＲＸ＿ＲＥＣＶ＿ＭＳＧ（ｑｕｅｕｅ＿ｉｄ）；
ＭＩＵにキューからの次のメッセージを用いて現在のメッセージを更新させる
ＭＩＵへの一回読み取り
【図１】
2013058200.tif 000006
【図２Ａ】
2013058200.tif 000007
【図２Ｂ】
2013058200.tif 000008
【図３】
2013058200.tif 000009
【図４】
2013058200.tif 000010
【図５】
2013058200.tif 000011