(57)【特許請求の範囲】
【請求項１】
アプリケーション（１１）とバス（５８）間にデータパスを形成し、該アプリケーション（１１）からの及びへの該バス（５８）を介した非同期データ転送動作を自動的に制御する非同期データパイプにおいて、
ａ．データ転送動作に関するパラメータを受信する受信手段と、
ｂ．上記アプリケーション（１１）と、上記バスに接続されたノードとの間のデータ転送の遂行に必要なトランザクションを、上記アプリケーションを実行するプロセッサの直接的な制御又は該アプリケーションによる介在なしで、自動的に生成する生成手段とを備える非同期データパイプ（２０）。
【請求項２】
上記アプリケーション（１１）が上記データ転送動作に関するパラメータを保存するレジスタファイル（２６）を更に備える請求の範囲第１項記載の非同期データパイプ（２０）。
【請求項３】
上記レジスタファイル（２６）は、上記データデータ転送動作の遂行に必要なトランザクション及びヘッダを生成するためのテンプレートとして用いられることを特徴とする請求の範囲第２項記載の非同期データパイプ（２０）。
【請求項４】
上記レジスタファイル（２６）に保存されるパラメータは、上記バス（５８）のアドレス空間内の転送先アドレスと、転送するデータの長さと、転送する各データパケットの長さと、転送の方向とが含むことを特徴とする請求の範囲第３項記載の非同期データパイプ（２０）。
【請求項５】
上記アプリケーションに対してデータを送受信するデータバッファ（３２）を更に備える請求の範囲第２項記載の非同期データパイプ（２０）。
【請求項６】
上記バス（５６）は、ＩＥＥＥ１３９４規格に準拠したバスであることを特徴とする請求の範囲第５項記載の非同期データパイプ（２０）。
【請求項７】
上記データ転送動作に必要なトランザクションは、各トランザクションが生成される毎に、上記転送先アドレスに各データパケットの長さを加えることにより範囲が増加するアドレスに対して生成されることを特徴とする請求の範囲第４項記載の非同期データパイプ（２０）。
【請求項８】
上記データ転送動作に必要なトランザクションは、固定のアドレスに対して生成されることを特徴とする請求の範囲第４項記載の非同期データパイプ（２０）。
【請求項９】
上記レジスタファイル（２６）は、転送する残りのパケットの数を表すパケットカウンタの値を更に含むことを特徴とする請求の範囲第４項記載の非同期データパイプ（２０）。
【請求項１０】
上記アプリケーション（１１）は、上記レジスタファイル（２６）の所定のフィールドの書込を行うことにより、上記パケットカウンタの値をインクリメントすることを特徴とする請求の範囲第９項記載の非同期データパイプ（２０）。
【請求項１１】
上記アプリケーション（１１）と、バス（５８）に接続されたノードとの間の書込データ転送動作を管理する管理方法において、
ａ．上記アプリケーション（１１）から上記書込データ転送動作に関するパラメータを受信するステップと、
ｂ．上記アプリケーションからパケットデータを入手するステップと、
ｃ．上記アプリケーションを実行するプロセッサを、該アプリケーションで直接的に制御又は監視することなく、上記書込データ転送動作の遂行に必要なヘッダを生成するステップと、
ｄ．上記パケットデータの転送先アドレスを含む上記ヘッダを該パケットデータに付加するステップと、
ｅ．上記ヘッダを含むデータパケットをバス（５８）に送信するステップとを有する管理方法。
【請求項１２】
上記アプリケーション（１１）から受信するパラメータは、レジスタファイル（２６）に保存されることを特徴とする請求の範囲第１１項記載の管理方法。
【請求項１３】
上記パラメータは、転送先アドレスと、転送するデータの長さと、転送する各データパケットの長と、転送するパケットの数を示すパケットカウンタの値とが含むことを特徴とする請求の範囲第１２項記載の管理方法。
【請求項１４】
上記レジスタファイル（２６）は、上記アプリケーション（１１）を実行するプロセッサを、該アプリケーションで直接的に制御又は監視することなく、上記バス（５８）を介してデータパケットの書込動作を行うために必要なヘッダ及びトランザクションを生成するためのテンプレートとして用いられることを特徴とする請求の範囲第１３項記載の管理方法。
【請求項１５】
ｆ．上記転送先アドレスを上記データパケットの長さの分増加するステップと、
ｇ．上記パケットカウンタの値をデクリメントするステップと、
ｈ．上記パケットカウンタの値が０になるまで各データパケットに対して上記ｂからｇのステップを繰り返すステップとを更に有する請求の範囲第１４項記載の管理方法。
【請求項１６】
上記データパケットは、上記アプリケーション（１１）によってロードされたデータメモリバッファ（３２）から入手されることを特徴とする請求の範囲第１５項記載の管理方法。
【請求項１７】
アプリケーション（１１）と、バス（５８）に接続されたノードとの間の読出データ転送動作を管理する管理方法において、
ａ．上記アプリケーション（１１）から上記読出データ転送動作に関するパラメータを受信するステップと、
ｂ．上記アプリケーション（１１）を実行するプロセッサの直接的な制御又は該アプリケーションによる介在に関係なく、上記バス（５８）に位置するノードからデータパケットを要求するために必要なトランザクションを生成するステップと、
ｃ．上記バス（５８）からデータパケットを受信するステップと、
ｄ．上記データパケットからヘッダ情報を分離するステップと、
ｅ．上記ヘッダ情報を分離したデータパケットを上記アプリケーション（１１）に供給するステップとを有する管理方法。
【請求項１８】
上記アプリケーション（１１）から供給されるパラメータは、レジスタファイル（２６）に保存されることを特徴とする請求の範囲第１７項記載の管理方法。
【請求項１９】
上記パラメータは、データを送信するノード内の開始アドレスを示す転送先アドレスと、転送するデータの長さと、転送する各データパケットの長さと、転送するパケットの数を示すパケットカウンタの値とを含むことを特徴とする請求の範囲第１８項記載の管理方法。
【請求項２０】
上記レジスタファイル（２６）は、上記アプリケーションを実行するプロセッサを、該アプリケーションによって直接的に制御又は監視することなく、上記ノードからデータパケットを読み出すために必要なトランザクション及びヘッダを生成するためのテンプレートとして用いられることを特徴とする請求の範囲第１９項記載の管理方法。
【請求項２１】
ｆ．上記転送先アドレスを上記データパケットの長さの分増加させるステップと、
ｇ．上記パケットカウンタの値をデクリメントするステップと、
ｈ．上記パケットカウンタの値が０になるまで各データパケットに対して上記ｂからｇのステップを繰り返すステップとを更に有する請求の範囲第２０項記載の管理方法。
【請求項２２】
上記データパケットは、データメモリバッファ（３２）を介して上記アプリケーション（１１）に供給されることを特徴とする請求の範囲第２１項記載の管理方法。
【請求項２３】
１つ以上のアプリケーション（１１、１３）とバス（５８）との間で行われる非同期データ転送を管理する管理装置において、
ａ．複数のアプリケーションとバス間にデータパスを形成し、
ｉ．上記アプリケーションに対してデータパスを形成しするためのデータ転送動作に関するパラメータを受信する受信手段と、
ii．上記データ転送動作の遂行に必要なトランザクションを、上記アプリケーションを実行するプロセッサを直接的に制御することなく、自動的に生成する生成手段とを有する複数の非同期データパイプ（２０、２２、２４）と、
ｂ．上記バス（５８）に接続され、該バス（５８）にデータを送信し、及び該バスからデータを受信する物理的バスインタフェース（４４）と、
ｃ．上記複数の非同期データパイプ（２０、２２、２４）と上記物理的バスインタフェース（４４）との間に接続され、該複数の非同期データパイプ（２０、２２、２４）から該バス（５８）にデータパケットを送信するマルチプレクサ（４０）と、
ｄ．上記複数の非同期データパイプ（２０、２２、２４）と上記物理的バスインタフェース（４４）との間に接続され、該バス（５８）から受信したデータパケットが該複数の非同期データパイプ（２０、２２、２４）のうちの適切な１つに供給されるようにルーチングするデマルチプレクサ（４２）とを備える管理装置。
【請求項２４】
上記各非同期データパイプ（２０、２２、２４）は、データ転送に関するデータ及びパラメータが保存されるレジスタファイル（２６、２８、３０）を有することを特徴とする請求の範囲第２３項記載の管理装置。
【請求項２５】
上記データ及びパラメータは、上記アプリケーション（１１、１３）によって上記レジスタファイル（２６）保存されることを特徴とする請求の範囲第２４項記載の管理装置。
【請求項２６】
上記レジスタファイル（２６）は、データ転送が行われるノードを特定する上記バス（５８）のアドレス空間内の転送先のアドレスと、転送するデータの長さと、各データパケットの長と、データ転送の方向とに関する情報を含むことを特徴とする請求の範囲第２４項記載の管理装置。
【請求項２７】
上記レジスタファイルは、データ転送動作がルーチングされる非同期データパイプ（２０）を特定するトランザクションラベルの値を含み、上記各非同期データパイプ（２０、２２、２４）は、固有のトランザクションラベルの値を有することを特徴とする請求の範囲第２６項記載の管理装置。
【請求項２８】
上記レジスタファイルは、データ転送動作が行われる非同期データパイプ（２０）を特定するトランザクションラベルの値の範囲を含み、上記各非同期データパイプ（２０、２２、２４）は、固有のトランザクションラベルの値又は値の範囲を有することを特徴とする請求の範囲第２６項記載の管理装置。
【請求項２９】
上記レジスタファイル（２６）は、上記アプリケーションを実行するプロセッサを、該アプリケーションによって直接的に制御又は監視することなく、上記データ転送動作の遂行に必要なトランザクション及びヘッダを生成するためのテンプレートとして用いられることを特徴とする請求の範囲第２７項記載の管理装置。
【請求項３０】
上記デマルチプレクサ（４２）は、上記データパケット内のトランザクションラベルの値に基づいて、該データパケットをどの非同期データパイプ（２０）にルーチングするかを判定することを特徴とする請求の範囲第２９項記載の管理装置。
【請求項３１】
上記デマルチプレクサ（４２）は、書込応答パケット内のトランザクションラベルの値に基づいて、該書込応答パケットをどの非同期データパイプ（２０）にルーチングするかを判定することを特徴とする請求の範囲第３０項記載の管理装置。
【請求項３２】
上記データ転送に必要なトランザクションは、各トランザクションが生成される毎に、上記転送先アドレスに各データパケットの長さを加えることにより増加する範囲のアドレスに対して生成されることを特徴とする請求の範囲第３０項記載の管理装置。
【請求項３３】
上記データ転送に必要なトランザクションは、固定のアドレスに対して生成されることを特徴とする請求の範囲第３０項記載の管理装置。
【請求項３４】
上記バス（５８）は、ＩＥＥＥ１３９４規格に準拠したバスであることを特徴とする請求の範囲第３０項記載の管理装置。
【請求項３５】
アプリケーション（１１）とＩＥＥＥ１３９４規格に準拠したバス（５８）間にデータパスを形成し、該アプリケーションからの及びへの該バス（５８）を介した非同期データ転送を管理する非同期データパイプ（２０）において、
ａ．レジスタファイル（２６）と、
ｂ．上記レジスタファイル（２６）に接続され、上記アプリケーション（１１）からのデータ転送に関するパラメータを受信し、該パラメータを上記レジスタファイル（２６）に保存するプログラミング回路と、
ｃ．上記レジスタファイル（２６）に接続され、上記レジスタファイル内の情報をテンプレートとして用いて、上記アプリケーションを実行するプロセッサを、該アプリケーションによって直接的に制御又は監視することなく、データ転送動作の遂行に必要なトランザクション及びヘッダを自動的に生成する自動トランザクション生成回路とを備える非同期データパイプ。
【請求項３６】
上記レジスタファイル（２６）は、転送先のアドレスと、転送するデータの長さと、転送する各データパケットの長さと、転送の方向とに関する情報を含むことを特徴とする請求の範囲第３５項記載の非同期データパイプ（２０）。
【請求項３７】
上記データ転送動作に必要なトランザクションは、増加する範囲のアドレスに対して生成されることを特徴とする請求の範囲第３６項記載の非同期データパイプ（２０）。
【請求項３８】
上記データ転送動作に必要なトランザクションは、固定のアドレスに対して生成されることを特徴とする請求の範囲第３６項記載の非同期データパイプ（２０）。
【請求項３９】
上記レジスタファイル（２６）は、転送する残りのデータパケットの数を表すパケットカウンタの値を含み、該パケットカウンタの値は、各データパケットが転送された後に、デクリメントされることを特徴とする請求の範囲第３６項記載の非同期データパイプ（２０）。
【請求項４０】
上記アプリケーション（１１）は、上記レジスタファイル（２６）内の所定のフィールドの書込を行うことにより、上記パケットカウンタの値を自動的にインクリメントすることを特徴とする請求の範囲第３９項記載の非同期データパイプ（２０）。
【発明の詳細な説明】
技術分野
本発明は、アプリケーションとバスとの間で行われるデータ転送の自動的な管理に関する。詳しくは、本発明は、アプリケーションとバス間の非同期データ転送動作の遂行に必要なトランザクションを自動的に生成する方法に関する。
背景技術
１９９５年６月１６日に発表されたＩＥＥＥ１３９４仕様書「Ｐ１３９４高性能シリアルバスのための仕様書」ドラフト８．０１ｖｌ（The IEEE 1394 standard,”P1394 Standard For A High Performance Serial Bus,”Draft8.01vl,June 16,1995）は、非同期データ転送及びアイソクロナスデータ転送に対応し、比較的安価に高速シリアルバスアーキテクチャを実現する国際標準規格である。アイソクロナスデータ転送は、リアルタイム転送の一種であり、このアイソクロナスデータ転送では、送信側アプリケーションと受信側アプリケーションにおいて、特定のデータの転送間隔が等しい。アイソクロナスデータ転送においては、各パケットは、それぞれ固有の周期で転送される。アイソクロナスデータ転送の理想的なアプリケーションとしては、例えばビデオ記録装置とテレビジョン受像機がある。ビデオ記録装置は、映像と音声を記録し、記録したデータを個々の塊、すなわちパケットに分割する。さらに、ビデオ記録装置は、映像と音声の各パケットを一定の周期で送信し、テレビジョン受像機において映像と音声が再生される。ＩＥＥＥ１３９４規格に準拠したバス技術により、多チャンネルによるアプリケーション間のアイソクロナスデータ転送が実現される。これによれば、データと共に６ビットのチャンネル番号が送信され、このチャンネル番号に基づいて適切なアプリケーションがパケットを受信する。また、多チャンネルにより、バスを介して複数のアプリケーションが同時にアイソクロナスデータを送受信することができる。非同期データ転送は、比較的古くから用いられているデータ転送方式であり、非同期データ転送では、できるだけ速く、可能な限り多くのデータが送信側から受信側へ転送される。
ＩＥＥＥ１３９４規格は、デジタル装置を汎用の入出力接続により相互接続する高速シリアルバスを提供するものである。ＩＥＥＥ１３９４規格は、デジタルインタフェースを規定しており、これによりアプリケーションは、デジタルデータをアナログデータに変換する必要がなく、バスを介してデータをデジタルフォーマットのまま送信することができる。したがって、受信側のアプリケーションが受信するデータはアナログデータではなくデジタルデータであり、受信側のアプリケーションでは、アナログデータをデジタルデータに変換する手間が省かれる。ＩＥＥＥ１３９４規格に必要なケーブルは、デジタル装置間の接続に用いて大量にデータを転送する他のケーブルに比べてかなり細くすることができる。また、ＩＥＥＥ１３９４バスがアクティブな状態であっても、新たな装置をバスに接続したり、切り離したりすることができる。バスに新たな装置が接続され、あるいは切り離された場合には、ＩＥＥＥ１３９４バスは、現ノード間でデータの送受信ができるように自動的にバス環境の再設定を行う。ノードは、バスにおいて固有のアドレスを有する論理的なエンティティとみなされる。各ノードは、識別ＲＯＭと、制御レジスタの標準セットと、ノード自身のアドレス空間とを有している。
ＩＥＥＥ１３９４規格で規定されているプロトコルを図１に示す。このプロトコルは、シリアルバス管理ブロック１０と、このシリアルバス管理ブロック１０にそれぞれ接続されたトランザクションレイヤ１２と、リンクレイヤ１４と、物理レイヤ１６とを有する。物理レイヤ１６は、装置、すなわちアプリケーションと、ＩＥＥＥ１３９４ケーブルとを電気的且つ機械的に接続する。さらに、物理レイヤ１６は、アービトレーション機能を有し、ＩＥＥＥ１３９４バスに接続されている全ての装置が実際にデータを送信及び受信するアクセスパスを有しているかを確認する。リンクレイヤ１４は、非同期データ転送とアイソクロナスデータ転送の両方に対応したパケット配信を行う。リンクレイヤ１４は、肯定応答プロトコル（acknowledgement protocol）を用いて、非同期データ転送をサポートし、さらに、ジャストインタイムのデータ配信（just-in-time data delivery）を行うリアルタイム帯域保証プロトコル（real-time guaranteed band width protocol）を用いて、アイソクロナスデータ転送をサポートしている。トランザクションレイヤ１２は、読出、書込及びロックを含む非同期データ転送を行うために必要なコマンドをサポートしている。シリアルバス管理ブロック１０は、アイソクロナスデータ転送を管理するアイソクロナスリソースマネージャを備えている。さらに、シリアルバス管理ブロック１０は、アービトレーションのタイミングを最適化し、バス上の全ての装置に供給される電力が適切な値となるように調整し、サイクルマスタを割り当て、アイソクロナスチャンネル及び帯域リソースを割り当て、及びエラーの基本的な通知を行うことにより、シリアルバス全体の環境を制御する。
アイソクロナスデータ転送を初期化するためには、幾つかの非同期データ転送を行って、アプリケーションの環境設定を行い、及びアイソクロナスデータ転送に用いる特定のチャンネルを決定する必要がある。チャンネルが決定されると、送信側のアプリケーションでは、バッファを用いてデータをバッファリングした後、データを送信し、受信側のアプリケーションでは、バッファを用いてデータをバッファリングした後、データを処理する。幾つかの周辺機器においては、その機器をシステムに導入するに当たり、多数の非同期トランザクションを用いて大量のデータを転送する必要がある。これらのトランザクションを高速且つ効率良く生成するためには、汎用のＣＰＵ又はマイクロコントローラに各要求パケットの生成処理を任せることは望ましくない。
そこで、ＡＰＩ及びアプリケーションを実行するプロセッサに監視させることなく、非同期データ転送の遂行に必要なトランザクションを自動的に生成する非同期データパイプが必要である。
発明の開示
非同期データパイプ（ＡＤＰ）は、アプリケーションのためのバスを介した非同期データ転送動作の遂行に必要なトランザクションを自動的に生成する。ＡＤＰは、アプリケーションによってプログラミングされるレジスタファイルを備える。レジスタファイルにより、アプリケーションは、データ転送動作の要求及び特性をプログラミングすることができる。レジスタファイルは、バス速度と、トランザクションラベルと、トランザクションコードと、転送先ノード識別子と、転送先オフセットアドレスと、各データパケットのパケット長と、パケットカウンタと、パケットカウンタバンプフィールドと、制御フィールドと、ステータスフィールドとを含んでいる。アプリケーションによって、レジスタファイルがプログラミングされ、起動された後、ＡＤＰは、トランザクション及びヘッダを生成するテンプレートとして、レジスタファイルの情報を用い、適切な範囲のアドレス間で行われるデータ転送動作の遂行に必要な読出又は書込トランザクションを自動的に生成する。ＡＤＰは、インクリメント機能がディセーブルにされていない、すなわちトランザクションを生成するアドレスが単一であることが示されていない限り、各トランザクション毎に、転送先オフセットアドレスの値を、各データパケットのパケット長に応じて自動的にインクリメントする。パケットカウンタの値は、生成する残りのトランザクションの数を表している。パケットカウンタの値は、各データパケットが転送された後に、デクリメントされる。アプリケーションは、パケットカウンタバンプフィールドの書込を行うことにより、パケットカウンタの値をインクリメントすることができる。
複数の非同期データ転送動作を管理するために、装置内に複数のＡＤＰを設けるようにしてもよい。このような装置では、各ＡＤＰは、固有のトランザクションラベルの値又値の範囲を有している。各ＡＤＰには、マルチプレクサが接続されており、マルチプレクサは、複数のＡＤＰから供給されるトランザクション及びデータパケットを多重化してバスに送信する。また、各ＡＤＰには、デマルチプレクサが接続されており、デマルチプレクサは、バスから受理信号及びデータパケットを受信し、トランザクションコード及びトランザクションラベルの値を用いて、受理信号及びデータパケットを適切なＡＤＰにルーチングする。
【図面の簡単な説明】
図１は、ＩＥＥＥ１３９４規格に定義されているプロトコルを示す図である。
図２は、本発明を適用した３つの非同期データパイプを備えるリンクコアの構成を示すブロック図である。
図３は、各非同期データパイプ内のレジスタファイルを示す図である。
発明を実施するための最良の形態
本発明を適用した非同期データパイプは、バスを介してアプリケーションからの又はへの非同期データ転送を実行するために必要な非同期トランザクションを自動的に生成する。本明細書で用いるアプリケーションという用語は、アプリケーション又はデバイスドライバの両方を指す。データ転送動作が行われるバスは、好ましくは、ＩＥＥＥ１３９４規格に準拠したバスである。なお、当業者には明らかであるが、本発明の非同期データパイプは、他の種類のバスを介して行われるデータ転送の管理にも用いることができる。非同期データパイプは、アプリケーションの指示により、アプリケーションによってテータが供給されるローカルデータバッファ、すなわちＦＩＦＯと、１つ以上の非同期トランザクションを用いるバス上の一定範囲内の複数のアドレスとの間で、あらゆる量のデータを転送する能力を有する。
非同期データパイプは、データ転送動作を行うときに、アプリケーションによってプログラミングされるレジスタファイルを備える。このレジスタファイルにより、アプリケーションは、トランザクションを生成するバス速度と、トランザクションの種類を表すトランザクションラベル及びトランザクションコードと、それによって転送を行う転送先ノード識別子と、転送を開始する開始アドレスを表す転送先オフセットアドレスと、各データパケットのパケット長とを含むデータ転送の要求をプログラミングすることができる。また、レジスタファイルは、生成する残りのパケット数を監視するパケットカウンタと、アプリケーションがパケットカウンタの値をインクリメントすることができるようにするパケットカウンタバンプフィールドと、制御フィールドと、ステータスフィールドとを含んでいる。なお、トランザクションがバス上の単一のアドレスに対して生成される場合には、アプリケーションは、非同期データパイプのインクリメント機能をオフにすることができる。
アプリケーションによって、レジスタファイルがプログラミングされ、起動された後、非同期データパイプは、適切な範囲のアドレス間で行われるデータ転送動作の遂行に必要な読出又は書込トランザクションを自動的に生成する。非同期データパイプは、レジスタファイル内の情報をテンプレートとして用いて、データ転送動作の遂行に必要なトランザクション及び適切なヘッダを生成する。インクリメント機能がディセーブルされない限り、非同期データパイプは、各トランザクションの転送先オフセットアドレスのフィールドの値を、転送するパケットのサイズに応じて自動的にインクリメントする。このように、非同期データパイプが必要なトランザクションを自動的に生成するので、起動中のアプリケーションによってプロセッサを直接的に制御又は監視することは不要となる。したがって、本発明の非同期データパイプがデータ転送動作を遂行している間に、アプリケーションは、他の機能を実行し、他のタスクを遂行することができる。また、レジスタファイルは、パケットカウンタバンプフィールドを含み、このパケットカウンタバンプフィールドにより、アプリケーションは、非同期データパイプが完了する残りのトランザクションの数をインクリメントすることができる。このように、非同期データパイプは、必要に応じて、データ転送動作の遂行に必要なトランザクションの生成を制御する能力を有する。
装置は、複数のデータ転送動作を管理するために、複数の非同期データパイプを備えることができる。このような装置では、バスと各非同期データパイプとの間にマルチプレクサを挿入し、これにより、複数の非同期データパイプからバスに送信するトランザクション及びデータパケットを多重化する。各非同期データパイプには、デマルチプレクサも接続されており、これにより、バスから受信する信号及びデータパケットを適切な非同期データパイプにルーチングする。デマルチプレクサは、トランザクションコード及びトランザクションラベルの値を用いて、情報を受信する非同期データパイプを決定する。
装置内において、各非同期データパイプは、固有のトランザクションラベルの値又値の範囲を有している。
本発明を適用した３つの非同期データパイプ（ＡＤＰ）を備えるリンク回路を図２に示す。好ましい実施の形態において、リンク回路１００は、単一の集積回路又はチップ上に形成されている。リンク回路１００は、アプリケーション１１、１３とバス５８とをリンクさせるものである。アプリケーション１１、１３を実行しているプロセッサは、システムバス１５に接続されている（以下、単に、アプリケーション１１、１３は、システムバス１５に接続されているという）。システムバス１５には、ファーストインファーストアウトバッファ（ＦＩＦＯ）３２、３４、３６が接続されている。また、アプリケーション１１、１３は、アプリケーションインタフェース回路１８に接続されている。アプリケーションインタフェース回路１８は、制御レジスタ３８と、１組の非同期データパイプ２０、２２、２４と、リンクコア４４とに接続されている。各非同期データパイプ２０、２２、２４は、それぞれレジスタ２６、２８、３０を備えている。各ＦＩＦＯ３２、３４、３６は、それぞれ適切な非同期データパイプ２０、２２、２４に対応している。すなわち、ＦＩＦＯ３２は、非同期データパイプ２０に接続されており、ＦＩＦＯ３４は、非同期データパイプ２２に接続されており、ＦＩＦＯ３６は、非同期データパイプ２４に接続されている。制御レジスタ３８は、各非同期データパイプ２０、２２、２４に接続されている。各非同期データパイプ２０、２２、２４は、送信データ転送動作に用いるマルチプレクサ４０と、受信データ転送動作に用いるデマルチプレクサ４２とに接続されている。ここで、送信データ転送動作とは、アプリケーション１１、１３からバス５８の方向に行われるデータ転送動作であり、受信データ転送動作とは、バス５８からアプリケーション１１、１３の方向に行われるデータ転送動作である。リンクコア４４は、送信機４６と、受信機４８と、周期タイマ５０と、周期モニタ５２と、ＣＲＣエラーチェック回路５４と、バス５８への物理的インタフェースを司る物理的インタフェース回路５６とを備える。送信機４６は、マルチプレクサ４０と、周期タイマ５０と、ＣＲＣエラーチェック回路５４と、物理的インタフェース回路５６とに接続されている。受信機４８は、デマルチプレクサ４２と、周期モニタ５２と、ＣＲＣエラーチェック回路５４と、物理的インタフェース回路５６とに接続されている。周期タイマ５０は、周期モニタ５２に接続されている。物理的インタフェース回路５６は、バス５８に接続されている。
図２に示す装置は、３つの非同期データパイプ２０、２２、２４を備えている。この非同期データパイプの数は、装置の用途に応じて、いかなる数であってもよいことは、当業者には明らかである。各非同期データパイプ２０、２２、２４は、アプリケーション１１、１３のデータ転送を自動的に制御することができる。したがって、以下の説明により明らかなように、装置に非同期データパイプを追加することにより、同時に実行できるデータ転送動作の量が増え、すなわち装置の処理能力を高めることができる。
各非同期データパイプ２０、２２、２４は、バス５８を介しアプリケーション１１、１３に対して送受信されるデータの双方向データパスである。非同期データパイプ２０、２２、２４の動作に先立って、非同期データパイプ２０、２２、２４内のレジスタファイルを外部エンティティによってプログラミングする必要がある。この外部エンティティは、アプリケーション１１、１３自体であってもよく、装置内の他の情報又は状態機械であってもよい。本発明の実施の形態においては、非同期データパイプ２０、２２、２４内のレジスタファイルは、アプリケーション１１、１３によってプログラミングされる。各非同期データパイプ２０、２２、２４は、レジスタファイルをテンプレートとして用いて、送信データに必要なヘッダを生成し、又は受信データのヘッダを調べ、分離する。
非同期データパイプ２０、２２、２４のレジスタファイルは、後に詳細に説明するように、バス５８の開始アドレスと、トランザクションの種類及びサイズとに関するデータを含んでいる。実施の形態においては、トランザクションの種類とは、クワドレット読出、クワドレット書込、ブロック読出、ブロック書込のうちのいずれかである。トランザクションのサイズは、クワドレットトランザクションの場合は４バイトであり、又はブロックトランザクションの場合は、ブロック要求サイズである。
非同期データパイプ２０、２２、２４は、イネーブルにされると、レジスタファイルにプログラミングされたパラメータに基づく非同期トランザクションを用いて、アプリケーション１１、１３のデータを転送する。アプリケーション１１、１３からバス５８に接続された他のノードへの書込トランザクションの場合、非同期データパイプ２０、２２、２４は、そのＦＩＦＯインタフェースから入手可能なアプリケーションデータが供給され、このデータに、リンクコア４４によって要求される形式の適切なヘッダ情報を付加して、マルチプレクサ４０を介してリンクコア４４に供給する。バス５８に接続された他のノードからアプリケーション１１、１３への読出トランザクションの場合、非同期データパイプ２０、２２、２４は、適切な読出要求パケットを出し、データを受信すると、このデータを、読出応答パケットに応じて、ＦＩＦＯインタフェースを介してアプリケーション１１、１３にルーチングする。読出トランザクション及び書込トランザクションの両方の場合、非同期データパイプ２０、２２、２４は、リンクコア４４によって要求されたきに、データをバス５８の特定のパケットフォーマットに変換する。また、非同期データパイプ２０、２２、２４は、アプリケーション１１、１３の要求を遂行するために必要な、アドレスの範囲が増加するトランザクションのためのアドレス計算を行う。
換言すると、バス５８のアドレス空間におけるアドレスの範囲を増加させて、次のトランザクションのアドレスを指定する。
各非同期データパイプ２０、２２、２４のＦＩＦＯインタフェースは、直接ＦＩＦＯ３２、３４、３６に接続されており、ＦＩＦＯ３２、３４、３６は、それぞれ非同期データパイプ２０、２２、２４が制御するデータパスに専用である。各ＦＩＦＯ３２、３４、３６は、それぞれ単一の非同期データパイプ２０、２２、２４に専用である。各非同期データパイプ２０、２２、２４のリンクインタフェースは、マルチプレクサ４０及びデマルチプレクサ４２を介してリンクコア４４に接続されている。各非同期データパイプ２０、２２、２４からリンクコア４４に供給されるデータは、リンクコア４４によって要求されるフォーマットを有している。各非同期データパイプ２０、２２、２４は、リンクコア４４から、リンクコア４４の仕様によって定義されるフォーマットで供給されるデータを受信するように設計されている。装置内に複数の非同期データパイプが備えられている場合、各非同期データパイプは、マルチプレクサ４０及びデマルチプレクサ４２を介してリンクコア４４に接続される。
リンクコア４４からの非同期データパイプ２０、２２、２４に供給されるデータは、デマルチプレクサ４２によってルーチングされる。デマルチプレクサ４２は、トランザクションコード及びトランザクションラベルを用いて、データを適切な非同期データパイプ２０、２２、２４にルーチングする。デマルチプレクサ４２は、パケットヘッダのトランザクションコードフィールド及びパケットヘッダのトランザクションラベルフィールドの値を用いて、バス５８からの応答パケットを適切な非同期データパイプ２０、２２、２４にルーチングする。そして、この適切な非同期データパイプ２０、２２、２４は、この応答パケットを対応する要求パケットを見つける。
デマルチプレクサ４２は、パケットをリンクコア４４から非同期データパイプ２０、２２、２４にルーチングするときに、パケットの情報を変化させない。したがって、リンクコア４４により生成された全ての情報は、供給先の非同期データパイプ２０、２２、２４に供給される。非同期データパイプ２０、２２、２４は、リンクコア４４から供給されたデータをアプリケーション１１、１３に転送する前に、バス５８のプロトコルによって要求されたヘッダ情報の分離を含む、リンクコア４４からのデータに必要な全ての処理を施す。送信データに対しては、非同期データパイプ２０、２２、２４は、アプリケーション１１、１３からのデータを、リンクコア４４によって要求される適正なフォーマットに変換する。このとき、各非同期データパイプ２０、２２、２４は、適切なヘッダ情報を生成して、アプリケーションからのデータに挿入付加した後、このデータをマルチプレクサ４０を介してリンクコア４４に供給する。
全ての非同期データパイプ２０、２２、２４に対して、リンクインタフェースは、リンクコア４４の機能に必要な互換性があるフォーマットでデータを生成及び使用する。非同期データパイプ２０、２２、２４は、書込動作の間、リンクコア４４の要求に対応すべく、要求されたバス５８の特定のヘッダ情報を生成し、アプリケーション１１、１３からのデータにこのヘッダ情報を挿入する。また、非同期データパイプ２０、２２、２４には、読出動作の間、リンクコア４４から非同期データパイプ２０、２２、２４の１つにデータを移動するリンクコア４４によって準備されたフォーマットのデータが供給される。換言すると、リンクコア４４から適切な非同期データパイプ２０、２２、２４のいずれかにデータを移動するにあたり、データを処理する必要はない。
装置内に非同期データパイプが１つのみである場合、この非同期データパイプは直接リンクコア４４に接続することができる。一方、装置内に非同期データパイプを複数設ける場合、複数の非同期データパイプとリンクコア４４との間に適切なマルチプレクサ４０及びデマルチプレクサ４２を設ける必要がある。マルチプレクサ４０は、非同期データパイプ２０、２２、２４のリンクインタフェースからデータが供給され、これらのデータを多重化してリンクコア４４に供給し、これらのデータはパケット単位でバス５８に送信される。これらのデータは、送信元のアプリケーション１１、１３によって設定された優先権に基づいてバス５８にルーチングされる。デマルチプレクサ４２は、バス５８から供給される各パケットのトランザクションコードフィールド及びトランザクションラベルフィールドの値と、非同期応答パケットのヘッダのトランザクションラベルの値とを用いて、そのパケットを適切な非同期データパイプ２０、２２、２４にルーチングする。
本発明を適用した非同期データパイプ２０、２２、２４は、対応するＦＩＦＯ３２、３４、３６とリンクコア４４との間の双方向データパスである。非同期データパイプ２０、２２、２４は、対応するＦＩＦＯ３２、３４、３６からリンクコア４４にデータを転送する場合、適切なヘッダ情報を生成し、データの先頭にヘッダ情報を付加した後、ヘッダ情報が付加されたデータをリンクコア４４に供給する。リンクコア４４は、非同期データパイプ２０、２２、２４により生成された情報を用いて、バス５８を介した書込動作を行う。リンクコア４４からＦＩＦＯ３２、３４、３６にデータを供給する場合、非同期データパイプ２０、２２、２４は、読出トランザクションのための適切なヘッダ情報を生成する。非同期データパイプ２０、２２、２４は、リンクコア４４にこのヘッダ情報を供給し、リンクコア４４は、読出要求パケットをバス５８に送信する。その後、応答側のノードは、読出応答パケットを返す。リンクコア４４は、この読出応答パケットを検出して、デマルチプレクサ４２に供給し、そして、デマルチプレクサ４２は、トランザクションコード及びトランザクションラベルフィールドの値に基づいて適切な非同期データパイプ２０、２２、２４を判別して、この読出応答パケットを読出要求を発した非同期データパイプ２０、２２、２４に供給する。そして、非同期データパイプ２０、２２、２４は、この読出応答パケットからヘッダ情報を分離し、対応するＦＩＦＯ３２、３４、３６にデータを供給する。データはさらにＦＩＦＯ３２、３４、３６からアプリケーション１１、１３に供給され、処理される。非同期データパイプ２０、２２、２４は、バス５８を介して送信する要求が読出要求であるか書込要求であるかにかかわらず、アプリケーション１１、１３からの、又はアプリケーション１１、１３への全てのデータ転送が完了するまで適切な要求を生成し続ける。
複数の非同期データパイプを備える装置では、データ転送の複数のスレッドを同時に維持することができる。これは、組込みアプリケーション、例えばアプリケーションを起動するために一連のコマンドを読み込み、又はステータス情報を報告しながら、記録媒体のデータを転送することができるディスクドライブにとって有用である。デマルチプレクサ４２は、データを各非同期データパイプ２０、２２、２４に適切に供給する機能を有する。本発明の好ましい実施の形態においては、各非同期データパイプ２０、２２、２４は、固有のトランザクションラベルの値又は値の範囲を有する。デマルチプレクサ４２は、トランザクションラベル及びトランザクションコードフィールドの値に基づいて適切な非同期データパイプ２０、２２、２４を判別する。各非同期データパイプ２０、２２、２４は、後に詳細に説明するように、専用のレジスタファイルを有する。レジスタファイルは、例えばデータ転送動作を開始する外部のアプリケーション等によりプログラミングされる。レジスタファイルが一旦プログラミングされると、非同期データパイプ２０、２２、２４は、バス５８を介して、範囲が増加するアドレスに対して、又は固定のアドレスに対して書込及び読出動作を行うことができるようになる。これらのトランザクションのサイズは、ブロックサイズであってもクワドレットサイズであってもよい。アプリケーション１１、１３は、データ転送動作をプログラミングするとき、転送するブロックの総数を供給するとしてもよく、一度に１つの数のブロックカウンタを「バンプ」するとしてもよく、また、この両方を組み合わせて用いるようにしてもよい。非同期データパイプ２０、２２、２４は、転送するデータブロックの総数がプログラミングされた場合、アプリケーション１１、１３が他の動作又は他のタスクを実行している間に、転送動作の実行に必要なトランザクションを生成する。各非同期データパイプ２０、２２、２４は、ブロックカウンタの値が０になるまで、バス５８に関する特定のアドレスポインタコンテキストを維持し、読出及び書込トランザクションを実行する。
各非同期データパイプ２０、２２、２４は、専用のレジスタファイルを備え、レジスタファイルは、データ転送を開始するアプリケーション１１、１３によりプログラミングされ、バス５８を介して行われるデータ転送の実行に必要なトランザクションの生成に用いられる。本実施の形態における各非同期データパイプ２０、２２、２４が有するレジスタファイルの構成を図３に示す。レジスタファイル８０は、それぞれ１６進法で００〜１Ｆの番号が付された３２バイトのデータを有する。図３では、それぞれが４バイトを有する８つの水平方向の列を備える表の形式でレジスタファイル８０を示している。図３に示すオフセット欄８２は、各列の開始バイトの、レジスタファイル８０の開始アドレスからのオフセットを示すものである。読出（Ｒ）／書込（Ｗ）欄８４は、各列のフィールドが読出及び書込可能なものであるか（Ｒ／Ｗ）、読出専用のものであるか（Ｒ）、あるいは書込専用のものであるか（Ｗ）を示している。
速度フィールドspは、レジスタファイル８０のバイト１中の２ビットのフィールドである。速度フィールドspに対しては、読出及び書込を行うことができる。速度フィールドspは、全ての要求パケットが生成されるバス速度を定義するフィールドである。速度フィールドsp内の値は、書込動作により更新される。速度フィールドspに対して読出動作を行うことにより、このフィールドに書き込まれた最後の値が返される。速度フィールドspの値は、バス５８に対する全ての要求パケットが生成される速度を示す２ビットの値である。下記の表１は、バス速度と速度フィールドspの値との関係を示す表である。
0004155413.tif 000002
したがって、表１に示すように、速度フィールドspにおける値00は、全ての要求パケットが生成されるバス速度を１００Ｍｂｐｓと定めるものであり、値01は、要求パケットが生成されるバス速度を２００Ｍｂｐｓとするものであり、値10は、要求パケットを生成するバス速度を４００Ｍｂｐｓとするものである。
トランザクションラベルフィールドt1は、レジスタファイル８０のバイト２における６ビットのフィールドである。トランザクションラベルフィールドt1に対しては、読出及び書込を行うことができる。トランザクションラベルフィールドt1には、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットに用いるトランザクションラベルの値が格納される。代替の実施の形態として、単一の非同期データパイプのトランザクションラベルの範囲を管理するようにしてもよい。トランザクションラベルフィールドt1の値は、書込動作により更新される。トランザクションラベルフィールドt1に対して読出動作を行うことにより、このフィールドに書き込まれた最後の値が返される。装置内に複数の非同期データパイプが存在する場合、デマルチプレクサ４２が要求のあった非同期データパイプに応答パケットを適切にルーチングできるようにするために、トランザクションラベルフィールドt1には、各非同期データパイプに固有の値が格納される。
好ましい実施の形態においては、レジスタファイル８０のバイト２における下位２ビットは、常に論理値Ｌとなるようにプログラミングされている。
トランザクションコードフィールドtCodeは、レジスタファイル８０内のバイト３における４ビットのフィールドである。トランザクションコードフィールドtCodeに対しても、読出及び書込が行える。トランザクションコードフィールドtCodeには、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットに用いるトランザクションコードが格納される。トランザクションコードフィールドtCodeの値は、書込動作により更新される。トランザクションコードフィールドtCodeに対して読出動作を行うことにより、ここに書き込まれた最後の値が返される。トランザクションコードフィールドtCodeの値は、実行する動作を表す４ビットの値である。トランザクションコードフィールドtCodeに格納される値と実行する動作の種類との関係を次の表２に示す。
0004155413.tif 000003
トランザクションコードフィールドtCodeに格納されている値が0000である場合、実行するデータ転送動作は、クワドレツト書込動作である。トランザクションコードフィールドtCodeに格納されている値が0001である場合、実行するデータ転送動作は、ブロック書込動作である。トランザクションコードフィールドtCodeに格納されている値が0100である場合、実行するデータ転送動作は、クワドレット読出動作である。トランザクションコードフィールドtCodeに格納されている値が0101である場合、実行するデータ転送動作は、ブロック読出動作である。トランザクションコードフィールドtCodeに格納されている値が1001である場合、実行する動作は、ロック動作である。
好ましい実施の形態においては、レジスタファイル８０のバイト３における下位４ビットは、バス５８を介したデータ転送に用いるパケットヘッダ用の予備的フィールドとして用いることができるようにするために、常に論理値Ｌを示すようにプログラミングされている。
転送先識別子フィールドdestination_IDは、レジスタファイル８０のバイト４及びバイト５にあたる１６ビットのフィールドである。この転送先識別子フィールドdestination IDに対しては、読出及び書込を行うことができる。この転送先識別子フィールドdestination_IDには、データ転送動作のために、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットの転送先ノードの識別子（ＩＤ）を示す１６ビットの値が格納される。転送先識別子フィールドdestination_IDの値は、書込動作により更新される。このフィールドに対して読出動作を行うことにより、転送先識別子フィールドdestination_IDに書き込まれた最後の値が返される。転送先識別子フィールドdestination_IDの値は、転送動作を行うバス５８上のノードを示す。したがって、バス５８上の各ノードは、それぞれ固有の識別子を有している。
上位転送先オフセットフィールドdestination_offset Hiは、レジスタファイル８０のバイト６及びバイト７にあたる１６ビットのフィールドである。この上位転送先オフセットフィールドdestination_offset Hiに対しては、読出及び書込を行うことができる。上位転送先オフセットフィールドdestination_offset Hiには、生成された次の要求パケットの転送先オフセットアドレスの上位１６ビットが格納される。この上位転送先オフセットフィールドdestination_offset Hiの値は、書込動作により更新される。上位転送先オフセットフィールドdestination offset Hiに対して読出動作を行うことにより、このフィールドに現在格納されている転送先オフセットアドレスの上位１６ビットの値が返される。
下位転送先オフセットフィールドdestination_offset Loは、レジスタファイル８０のバイト８〜Ｂにあたる３２ビットのフィールドである。下位転送先オフセットフィールドdestination_offset Loに対しては、読出及び書込を行うことができる。この下位転送先オフセットフィールドdestination_offset Loには、生成された次の要求パケットに用いる転送先オフセットアドレスの下位３２ビットが格納される。下位転送先オフセットフィールドdestination_offset Loの値は、書込動作により更新される。この下位転送先オフセットフィールドdestination_offset Loに対して読出動作を行うことにより、転送先オフセットアドレスの下位３２ビットの現在の値が返される。上位転送先オフセットフィールドdestination_offset Hiと下位転送先オフセットアドレスdestination_offset Loとを組み合わせることにより、現トランザクションを生成する４８ビットの転送先オフセットアドレスが形成される。制御フィールド内の後に説明する非インクリメントフラグが論理値Ｌを示している場合、非同期データパイプ２０、２２、２４は、読出又は書込トランザクションが生成された後に、上位転送先オフセットフィールドdestination_offset Hi及び下位転送先オフセットフィールドdestination_offset Loからなる全４８ビットの転送先オフセットフィールドにデータ長フィールドに格納されている値を加える。
データ長フィールドdata_lengthは、レジスタファイル８０のバイトＣ及びＤにあたる１６ビットのフィールドである。データ長フィールドdata_lengthに対しては、読出及び書込を行うことができる。データ長フィールドdata_lengthには、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットのサイズをバイト数で示す値が格納される。データ長フィールドdata_lengthの値は、書込動作により更新される。また、データ長フィールドdata_lengthに対して読出動作を行うことにより、このフィールドに書き込まれている最後の値が返される。データ長フィールドdata_lengthの値は、下記の表３に示すように、レジスタファイル８０内の他のフィールドの値によって制限される。
0004155413.tif 000004
拡張トランザクションコードフィールドextended_tCodeは、レジスタファイル８０のバイトＥ及びＦにあたる１６ビットのフィールドである。拡張トランザクションコードフィールドextended_tCodeに対しては読出及び書込動作を行うことができる。拡張トランザクションコードフィールドextended_tCodeは、書込動作によって更新される。拡張トランザクションコードフィールドextended_tCodeに対して読出動作を行うことにより、このフィールドに書き込まれた最後の値が返される。拡張トランザクションコードフィールドextended_tCodeは、ロックトランザクション以外の全てのトランザクションに対して0000の値をとる。トランザクションコードフィールドtCodeの値が1001に設定された場合、これはロック要求であることを示し、このとき、拡張トランザクションコードフィールドextended_tCodeは、ロックトランザクションについての拡張トランザクションコードの値を格納する。
パケットカウンタフィールドは、レジスタファイル８０のバイト１０〜１３にあたるフィールドであり、システム設定に応じて８〜３２ビットの値を格納する。パケットカウンタフィールドに対しては、読出及び書込を行うことができる。パケットカウンタフィールドは、データ転送動作を完了するために生成する残りの要求パケットの数を格納する。パケットカウンタフィールドの値は、書込動作により更新される。パケットカウンタフィールドに対して読出動作を行うことにより、現時点において生成する残りの要求パケットの数が返される。パケットカウンタフィールドの値は、各トランザクションが生成される毎にデクリメントされる。生成する要求パケットの数を完全に制御するために、パケットカウンタフィールドの値が０になると、パケットカウンタフィールドは書込専用となる。
パケットカウンタバンプフィールドは、レジスタファイル８０のバイト１４〜１７にあたる書込専用のフィールドである。このパケットカウンタバンプフィールドに書込が行われると、対応する非同期データパイプ２０、２２、２４は、パケットカウンタフィールドの値をインクリメントする。パケットカウンタバンプフィールドに対して読出動作を行っても、返される値は予測不能である。パケットカウンタバンプフィールドを設けることにより、要求を出したアプリケーション１１、１３は、現在の転送動作のために更なるトランザクションを生成することができる。好ましい実施の形態においては、パケットカウンタフィールドの値が０ではない場合に、パケットカウンタフィールドの値をインクリメントさせるものは、非同期データパイプ２０、２２、２４によるこのパケットカウンタバンプフィールドへの書込動作のみである。
制御フィールドは、レジスタファイル８０のバイト１８〜１Ｂにあたる３２ビットのフィールドである。制御フィールドに対しては読出及び書込動作を行うことができる。制御フィールドにおいて、ビット０〜２９は、予備のビットであり、ビット３０は、非インクリメント制御ビットnon_incrであり、ビット３１は、動作制御ビットgoである。非同期データパイプ２０、２２、２４をイネーブルにするためには、動作制御ビットgoを論理値Ｈに設定する。この動作制御ビットgoを論理値Ｌに変更すると、即座に、あるいは非同期データパイプ２０、２２、２４がトランザクション処理中であるときは、そのトランザクションの終了時に、非同期データパイプ２０、２２、２４はディセーブルされる。このように、非同期データパイプ２０、２２、２４は、この動作制御ビットgoが論理値Ｈに設定されている間にのみ動作する。非同期データパイプ２０、２２、２４により生成される要求パケットが固定のアドレス、すなわち増加しないアドレスに対するものである場合、非インクリメント制御ビットnon_incrは、論理値Ｈに設定される。非インクリメント制御ビットnon_incrが論理値Ｌに設定された場合は、対応する非同期データパイプ２０、２２、２４は、各トランザクションを完了する毎に、転送先オフセット値にデータ長フィールドdata_lengthの値を加える。
ステータスフィールドは、レジスタファイル８０のバイト１Ｃ〜１Ｆにあたる３２ビットのフィールドである。このステータスフィールドに対しては、読出動作及び書込動作を行うことができる。ステータスフィールドには、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットの受理応答コード及び応答コートが格納される。ステータスフィールドは、エラーフィールドと、応答コードフィールドと、受理信号受信フィールドと、受理信号送信フィールドとを有している。
エラーフィールドは、対応する非同期データパイプ２０、２２、２４の動作を中断させるエラーが発生した場合、そのエラーを示す４ビットの値を格納する。動作制御ビットgoが論理値Ｈに設定されると、エラーフィールドは、クリアされる。一方、エラーフィールドが有効になると、動作制御ビットgoは、非同期データパイプ２０、２２、２４によって論理値Ｌにクリアされる。表４は、エラーフィールドに格納される値と、その意味との関係を示す表である。
0004155413.tif 000005
エラーフィールド内の値0000は、エラーが発生していないことを示す。エラーフィールド内の値0001は、以前に送信した要求パケットに対して受信された受理信号が正しくなかったためにエラーが発生したことを示す。エラーフィールド内の値0010は、応答パケットに対して送信された受理信号が正しくなかったためにエラーが発生したことを示す。エラーフィールド内の値0100は、分割トランザクションの時間切れによりエラーが発生したことを示す。エラーフィールド内の値1000は、バスリセットが発生したことを示す。
応答コードフィールドは、直前の応答コードを格納する４ビットのフィールドである。直前に行われたトランザクションが書込トランザクションであり、この書込トランザクションが統合されたトランザクションとして遂行された場合、応答コードフィールドには、値1111が格納される。
受理信号受信フィールドは、４ビットのフィールドからなり、非同期データパイプ２０、２２、２４により生成された直前の要求パケットに対してリモートのノードから送られてきた最新の受理信号を格納する。
受理信号送信フィールドは、対応する非同期データパイプ２０、２２、２４により生成された全ての要求パケットに対する応答パケットに応じて非同期データパイプ２０、２２、２４が生成した最新の受理信号を格納する４ビットのフィールドである。
ステータスフィールドの値は、書込動作により更新される。このステータスフィールドに対して読出動作を行うことにより、非同期データパイプ２０、２２、２４及びデータ転送動作の現在の状態が返される。要求パケットのうちの１つ又は対応する応答パケットにエラーが生じた場合、非同期データパイプ２０、２２、２４は、即座に更なる要求パケットの生成を停止する。続いて、非同期データパイプ２０、２２、２４は、応答コードフィールドrCodeと、受理信号受信フィールドack_inと、受理信号送信フィールドack_outとに格納されている値をステータスフィールドにラッチする。これらの値をステータスフィールドにラッチした後、非同期データパイプ２０、２２、２４は、アプリケーションインタフェースを介してアプリケーション１１、１３に中断信号を供給し、現データ転送動作中にエラーが発生したことをアプリケーション１１、１３に知らせる。
読出動作
読出動作を実行して、バス５８を介して接続された他のノードからデータを入手するにあたり、非同期データパイプ２０、２２、２４は、レジスタファイル８０に登録された情報をテンプレートとして用いて適切な読出要求パケットを生成する。転送先のノードからデータを受信する場合、デマルチプレクサ４２は、トランザクションコードフィールドtCode及びトランザクションラベルフィールドt1の値に基づいて、このデータを適切な非同期データパイプ２０、２２、２４にルーチングする。非同期データパイプ２０、２２、２４は、データパケットからヘッダ情報を分離して、このデータパケットをＦＩＦＯ３２、３４、３６に供給する。
アプリケーション１１、１３は、このＦＩＦＯ３２、３４、３６からデータを受信する。
非同期データパイプ２０、２２、２４は、起動されてバス５８からデータをＦＩＦＯ３２、３４、３６に供給するとき、下記の表５に示すように、データ受信状態機械として機能する。
0004155413.tif 000006
ＦＩＦＯインタフェースは、バスインタフェースに同期したクロック信号を用いて、非同期データパイプ２０、２２、２４から対応するＦＩＦＯ３２、３４、３６へのデータの供給のタイミングを制御する。ＦＩＦＯ３２、３４、３６は、常に、非同期データパイプ２０、２２、２４から入手可能な１ワード分のデータを受信する状態にある。ＦＩＦＯ３２、３４、３６にデータを受け入れる余地がないときに、要求信号が供給された場合、ＦＩＦＯ３２、３４、３６にオーバーランが発生する。これにより、ＦＩＦＯ３２、３４、３６は、エラー状態となり、このエラー状態は、対応する非同期データパイプ２０、２２、２４により検出される。このＦＩＦＯオーバーランが発生すると、ＦＩＦＯ３２、３４、３６内のデータがクリアされて更なるデータを受信できる状態となるまで、残りのトランザクションは中断される。この場合、ステータスフィールド内の受理信号送信フィールドack outは、このエラーを反映した値を示す。
バス５８からデータを読み出すために、処理元のアプリケーション１１、１３は、適切な非同期データパイプ２０、２２、２４のレジスタファイル８０に適切な情報をプログラミングする。処理に用いるバス速度として、例えば１００Ｍｂｐｓ、２００Ｍｂｐｓ、４００Ｍｂｐｓ等のうちのいずれかの値が速度フィールドspに格納される。この使用されるバス速度は、物理的インタフェース回路５６の性能及びバス５８にサポートされている範囲内で設定される。トランザクションコードフィールドtCodeには、遂行する特定のトランザクションを示す適切な値が格納される。転送先識別子フィールドdestination_IDには、全ての要求パケットに対して、バス５８上の転送先ノード識別子に対応する適切な値がプログラミングされる。
上位転送先オフセットフィールドdestination_offset Hi及び下位転送先オフセットフィールドdestination_offset Loは、４８ビットの開始転送先オフセット値を格納する。制御フィールドの非インクリメントビットが論理値Ｌである場合、転送先オフセットフィールドの値は、各要求トランザクションが生成された後に増加される。生成される各要求パケットのバイト数は、データ長フィールドdata_lengthにプログラミングされる。トランザクションコードフィールドtCodeの値が0100、すなわちこのトランザクションがクワドレット読出トランザクションであることを示している場合、データ長フィールドdata_lengthに格納される値は、４である。トランザクションコードフィールドtCodeの値が0101、すなわちこのトランザクションがブロック読出トランザクションであることを示している場合、データ長フィールドdata_lengthには、上述の表３で示す、プログラミングされたバス速度において許容される範囲内で、適切な値がプログラミングされる。ここでは、実行されるトランザクションは、読出動作であり、ロックトランザクションではないため、拡張トランザクションコードフィールドextended_tCodeの値は０である。
パケットカウンタフィールドには、現在のデータ転送動作を遂行するために生成及び送信するトランザクションの数が格納される。アプリケーション１１、１３が適切なトランザクションを生成するためにパケットカウンタバンプフィールドに書込を行い、その都度、パケットカウンタフィールドの値を１ずつインクリメントするような場合であれば、パケットカウンタフィールドの値の初期値を０とすることもできる。全ての要求パケットを同一の転送先オフセットアドレスに送信する場合、制御フィールドの非インクリメントビットは、論理値Ｈに設定される。一方、要求パケットを送信するアドレスの範囲が増加する場合、制御フィールドの非インクリメントビットは、論理値Ｌに設定される。非同期データパイプ２０、２２、２４を起動してデータ転送動作に必要な適切なトランザクションの生成を開始させるために、制御フィールド内の動作制御ビットgoは、論理値Ｈに設定される。
制御フィールド内の動作制御ビットgoが論理値Ｈに設定されると、非同期データパイプ２０、２２、２４がイネーブルにされる。非同期データパイプ２０、２２、２４は、イネーブルにされると、表６に示すような読出状態機械として機能し、読出要求パケットを生成する。
0004155413.tif 000007
処理元のアプリケーション１１、１３は、パケットカウンタバンプフィールドに対していつでも書込動作を行うことができ、これによりパケットカウンタフィールドの値に１を加える。表６に示すような、非同期データパイプ読出状態機械は、動作中の非同期データパイプ２０、２２、２４に接続されたＦＩＦＯ３２、３４、３６内に１パケット分以上のデータを受信する余地がある場合、読出要求パケットを生成する。また、非同期データパイプ２０、２２、２４によって実現された読出状態機械は、非同期データパイプ２０、２２、２４に対応するＦＩＦＯ３２、３４、３６が完全に空である場合も読出要求パケットを生成する。実際のアプリケーションにおいて、非同期データパイプ２０、２２、２４に対応するＦＩＦＯ３２、３４、３６からデータが十分速く、十分短い待ち間隔で確実に送信されるような場合では、ＦＩＦＯ３２、３４、３６の容量は、レジスタファイル８０のデータ長フィールドdata_lengthの値により特定されるバイト数より小さくすることができる。
非同期データパイプ２０、２２、２４は、読出要求パケットを生成及び送信することにより、これに対応する応答パケットを転送先ノードに生成させる。装置内に複数の非同期データパイプが存在する場合、デマルチプレクサ４２は、読出応答パケットのトランザクションコードフィールドtCode及びトランザクションラベルフィールドt1の値を用いて、そのパケットを適切な非同期データパイプにルーチングする。データが供給された非同期データパイプは、パケットのヘッダを分離し、対応するＦＩＦＯインタフェースが使用できるデータフィールドを作成する。
制御フィールドの非インクリメントビットが論理値Ｈである場合、非同期データパイプ２０、２２、２４は、各読出要求パケットを生成した後に、次のデータ要求パケットの生成を準備するために、転送先オフセットアドレスの値にデータ長フィールドdata_lengthの値を加える。表６の読出状態機械には示していないが、非同期データパイプ２０、２２、２４は、自らが生成する各書込要求パケットについて、受理信号受信フィールドack_in及び対応する読出応答パケットの応答コードフィールドrCodeを調査する。受理信号受信フィールドack_in又は応答コードフィールドrCodeがエラーを示している場合、又は非同期データパイプ２０、２２、２４が何らかのエラーのために読出応答パケットに対して不正な受理コードを返さざるを得ないような場合、非同期データパイプ２０、２２、２４は、直ちに動作を停止し、受理コード及び応答コードフィールドrCodeの両方をレジスタファイル８０の非同期データパイプステータスフィールドに保存する。スプリットトランザクションのために、非同期データパイプ２０、２２、２４は応答時間を計測する。要求パケットの送信から応答パケットの受信までの時間間隔が１００ｍｓ以上である場合、非同期データパイプ２０、２２、２４は、動作を停止し、レジスタファイル８０のステータスフィールドに所定のステータス情報を格納する。
書込動作
非同期データパイプ２０、２２、２４は、書込動作の実行時、処理元のアプリケーション１１、１３からバス５８に接続された他のノードにデータを送信するにあたり、レジスタファイル８０に格納された情報をテンプレートとして用いて、適切なヘッダ情報を生成する。
生成されたヘッダは、適切なデータパケットに付加され、リンクコア４４を介してバス５８に送信される。インクリメント機能がディセーブルでなければ、非同期データパイプ２０、２２、２４は、転送先オフセットフィールドの値を増加させた後、次のデータパケットのヘッダを生成する。各トランザクションが生成される毎に、パケットカウンタの値はデクリメントされる。この処理は、パケットカウンタの値が０になるまで繰り返される。
起動された各非同期データパイプ２０、２２、２４は、ＦＩＦＯ３２、３４、３６からバス５８へのデータ転送を行うとき、下記の表７に定義するようなデータ送信状態機械として機能する。
0004155413.tif 000008
ＦＩＦＯインタフェースは、バスインタフェースに同期したクロックを用いてＦＩＦＯ３２、３４、３６から対応する非同期データパイプ２０、２２、２４にデータを送信するタイミングを制御する。ＦＩＦＯ３２、３４、３６は、非同期データパイプ２０、２２、２４から要求があったときにいつでも送信することのできる１ワード分のデータを保持している。要求信号Reqが送信されたが、ＦＩＦＯ３２、３４、３６にデータが存在しない場合、ＦＩＦＯ３２、３４、３６にアンダーランが発生する。
対応する非同期データパイプ２０、２２、２４は、これによって発生するエラーを検知し、適切な処理を施す。アプリケーション１１、１３は、バス５８を介して送信する適切なデータがＦＩＦＯ３２、３４、３６に確実に保存されるよう動作する。ＦＩＦＯアンダーランが発生すると、ＦＩＦＯ３２、３４、３６にデータが追加されるまで、残りのトランザクションが停止される。
バス５８を介した書込動作を行うために、アプリケーション１１、１３は、適切な非同期データパイプ２０、２２、２４内のレジスタファイル８０に適切な情報をプログラミングする。速度フィールドspには、使用される適切なバス速度、例えば１００Ｍｂｐｓ、２００Ｍｐｂｓ、４００Ｍｂｐｓ等を示す値が格納される。バス速度は、物理的インタフェースの性能及びバス５８が対応できる範囲を考慮して選択される。トランザクションコードフィールドtCodeには、実行される特定のトランザクションを示す値が格納される。例えば、要求がクワドレット書込要求である場合、トランザクションコードフィールドtCodeには、値0000が格納される。要求がブロック書込要求である場合、トランザクションコードフィールドtCodeには、値0001が格納される。転送先識別子フィールドdestination_IDには、それぞれの要求パケットに対する、バス５８上の転送先ノード識別子に対応する適切な値が格納される。
上位転送先オフセットフィールドdestination_offset Hiと、下位転送先オフセットフィールドdestination_offset Loとには、４８ビットの開始転送先オフセット値が格納される。制御フィールド内の非インクリメントビットが論理値を示している場合、レジスタファイル８０の転送先オフセットフィールドの値は、各要求トランザクションが完了する度に増加される。データ長フィールドdata_lengthには、生成される各要求パケットのバイト数が格納される。トランザクションコードフィールドtCodeの値が0000、すなわちこのトランザクションがクワドレット書込トランザクションであることを示している場合、データ長フィールドdata_lengthに格納される値は、４である。トランザクションコードフィールドtCodeの値が0001、すなわちことトランザクションがブロック書込トランザクションであることを示している場合、データ長フィールドdata_lengthには、上述した表３に示すような、指定されたバス速度において使用できる範囲内で、適切な値を格納する。ここで遂行される処理は、書込動作であるため、拡張トランザクションコードフィールドextended_tCodeの値は０である。
パケットカウンタフィールドには、このトランザクションを遂行するために生成及び送信するパケットの数を示す値が格納される。アプリケーション１１、１３がパケットカウンタバンプフィールドに書込を行って適切なトランザクションを生成し、その都度パケットカウンタフィールドに１を加えるような場合は、パケットカウンタフィールドの初期値を０に設定することができる。全ての要求パケットを同一の転送先オフセットアドレスに送信する場合、制御フィールド内の非インクリメントビットは、論理値Ｈに設定される。要求パケットを転送するアドレスの範囲が増加する場合、制御フィールドの非インクリメントビットは、論理値Ｌに設定される。データ転送動作の遂行に必要な適切なトランザクションを非同期データパイプ２０、２２、２４に生成させるために、制御フィールドの動作制御ビットgoは、論理値Ｈに設定される。
レジスタファイル８０の制御フィールド内の動作制御ビットgoが論理値Ｈに設定されると、非同期データパイプ２０、２２、２４がイネーブルにされる。非同期データパイプ２０、２２、２４は、起動中、表８に示すような書込状態機械として機能し、要求パケットを生成する。
0004155413.tif 000009
転送元のアプリケーション１１、１３は、パケットカウンタバンプフィールドに常時書込動作を行うことができ、これによりパケットカウンタフィールドの値に１を加える。上述した表８に定義したような非同期データパイプ書込状態機械は、起動中の非同期データパイプ２０、２２、２４に接続されたＦＩＦＯ３２、３４、３６内に１パケット分以上のデータが存在する場合、常に書込要求パケットを生成する。非同期データパイプ書込状態機械は、また、この非同期データパイプ２０、２２、２４に対応するＦＩＦＯ３２、３４、３６が完全に一杯の状態である場合も、常に書込要求パケットを生成する。
実際のアプリケーションにおいて、非同期データパイプ２０、２２、２４に対応するＦＩＦＯ３２、３４、３６からデータが十分速く、十分短い待ち間隔で確実に送信されるような場合では、ＦＩＦＯ３２、３４、３６の容量は、レジスタファイル８０のデータ長フィールドdata_lengthの値により特定されるバイト数より小さくすることができる。
制御フィールドの非インクリメントビットが論理値Ｌに設定されている場合、非同期データパイプ２０、２２、２４は、各書込要求パケットを生成する毎に、次の書込要求パケットの生成の準備のために転送先オフセット値にデータ長フィールドdata_lengthの値を加える。表８には示していないが、非同期データパイプ２０、２２、２４は、自らが生成する各書込要求パケットについて、受理信号受信フィールドack_in及び、転送先ノードが書込応答パケットを生成する場合は、対応する応答コードフィールドrCodeを調査する。受理信号受信フィールドack_in又は応答コードフィールドrCodeがエラーを示している場合、又は非同期データパイプ２０、２２、２４が何らかのエラーにより、読出応答パケットに対して不正な受理コードを返さざるを得ないような場合、非同期データパイプ２０、２２、２４は、直ちに動作を停止し、受理コード及び応答コードフィールドrCodeの両方をレジスタファイル８０の非同期データパイプステータスフィールドに保存する。スプリットトランザクションのために、非同期データパイプ２０、２２、２４は応答時間を計測する。
要求パケットの送信から応答パケットの受信までの時間間隔が１００ｍｓ以上である場合、非同期データパイプ２０、２２、２４は、動作を中断し、レジスタファイル８０のステータスフィールドに所定のステータス情報を格納する。
本発明の好ましい実施の形態においては、バス５８は、ＩＥＥＥ１３９４規格に準拠したバスである。したがって、各非同期データパイプ２０、２２、２４は、ＩＥＥＥ１３９４規格に対応する形式でトランザクション、ヘッダ、要求パケット、応答パケットを生成する。しかしながら、当業者には明らかであるが、本発明に係る非同期データパイプを他の種類のバスとともに用いてもよい。この場合、非同期データパイプは、採用された特定のバスに適応するようなトランザクション、ヘッダ、要求パケット、応答パケットを生成する。
本発明の構成や動作の理解を容易にするために、細部を詳細に特定した実施の形態を説明したが、ここで述べた特定の形態や細部は、添付の特許請求の範囲を制限するものではない。当業者は、ここで説明した実施の形態を変形して用いることができるが、そのような変形は、本発明の技術的範囲内にある。
【図１】
0004155413.tif 000010
【図２】
0004155413.tif 000011
【図３】
0004155413.tif 000012