(57)【特許請求の範囲】
【請求項１】
オンチップメモリにおけるデータ健全性のためにファイバチャンネル巡回冗長コード（ＣＲＣ）を用いる通信チャンネルシステムであって、
第１のポートと第２のポートを有し、各ポートは、ファイバチャンネル調整ループ通信チャンネルをサポートし、各通信チャンネルは通信チャンネル上のデータ送信の中に巡回冗長コードを含む、第１のチャンネルノードと、
第１のチャンネルノード中のオンチップに位置し、フレームと受信したフレームに対応したＣＲＣとを通信チャンネルから受信する、オンチップフレームメモリと、
オンチップフレームメモリ内に存在する受信したフレームのデータ健全性検査のために、受信した対応ＣＲＣを用いる健全性装置であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣをオフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記健全性装置と、
前記オンチップフレームメモリと結合されたＣＲＣ生成回路であって、前記受信したフレームが前記オフチップメモリから前記オンチップフレームメモリへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する、前記ＣＲＣ生成回路と、
を備えた、前記システム。
【請求項２】
請求項１記載のシステムにおいて、
動作中にオンチップフレームメモリと健全性装置と結合するオフチップメモリと、
受信したフレームをオンチップメモリからオフチップメモリに移動させる間に巡回冗長コードを検証する健全性装置内部の検証回路と、
をさらに備えているシステム。
【請求項３】
請求項２記載のシステムにおいて、
前記健全性装置は、受信したフレームをオフチップメモリに移動させる間に巡回冗長コードを検査し取り除くものであり、
該システムは、データがオフチップメモリからオンチップメモリに移動されるときにパリティを生成しデータに付与するパリティ生成回路をさらに含むシステム。
【請求項４】
請求項２記載のシステムにおいて、
巡回冗長コードを含まないデータフレームは、オフチップメモリ内に保持され、
当該システムは、
データフレームがデータフレームバッファに移動されたときにオフチップメモリからのデータフレームに基づいて巡回冗長コードを生成し、ＣＲＣをデータフレームとともにオンチップフレームメモリ中に収容するＣＲＣ発生器と、
生成された巡回冗長コードを含むデータフレームを通信チャンネルに送信する送信機と、
をさらに含むシステム。
【請求項５】
請求項２記載のシステムにおいて、
送信すべきデータフレームが、オフチップメモリからオンチップフレームメモリに転送され、パリティを付与するもののＣＲＣ情報は含めずにオンチップフレームメモリに格納されるシステム。
【請求項６】
請求項５記載のシステムにおいて、
通信チャンネルからオンチップフレームメモリに転送された受信データフレームは、ＣＲＣを付与するもののパリティ情報は含めずにオンチップフレームメモリに格納されるシステム。
【請求項７】
請求項２記載のシステムにおいて、
通信チャンネルからオンチップフレームメモリに転送された受信フレームは、ＣＲＣを付与するもののパリティ情報は含めずにオンチップフレームメモリに格納されるシステム。
【請求項８】
請求項１記載のシステムにおいて、
動作中に第１のチャンネルノードと結合する磁気ディスク記憶装置と、
第２のチャンネルノードを有するコンピュータシステムとをさらに備え、
第２のチャンネルノードは、ファイバチャンネル調整ループ通信チャンネルを介して第１のチャンネルノードと第２のチャンネルノードの間でデータを送信するために、動作中にファイバチャンネルループ中の第１のチャンネルノードに結合するシステム。
【請求項９】
回転ディスクと、
回転中のディスクと交渉をもつトランスデューサと、
第１のポートと第２のポートとを有するチャンネルノードであって、各ポートはファイバチャンネル調整ループ通信チャンネルをサポートし、各通信チャンネルは、通信チャンネル上のデータ送信に巡回冗長コードを含み、当該チャンネルノードは、データを通信するためのトランスデューサと動作中に結合する、チャンネルノードと、
該チャンネルノードにオンチップで位置し、フレームと、受信したフレームに対応したＣＲＣを通信チャンネルから受信するオンチップフレームメモリと、
オンチップメモリ中に存在する受信フレームのデータ健全性を検査するために、受信した関連ＣＲＣを用いる健全性装置であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣをオフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記健全性装置と、
前記オンチップフレームメモリと結合されたＣＲＣ生成回路であって、前記受信したフレームが前記オフチップメモリから前記オンチップフレームメモリへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する、前記ＣＲＣ生成回路と、
を有する、ディスクドライブ。
【請求項１０】
請求項９記載のディスクドライブにおいて、
動作中にオンチップフレームメモリと健全性装置と結合するオフチップメモリと、
受信したフレームをオンチップメモリからオフチップメモリに移動させる間に巡回冗長コードを検証する検証装置中の検証回路とをさらに備えているディスクドライブ。
【請求項１１】
（ａ）第１のチャンネルノードの第１ポートと第２ポートのそれぞれの上で、ファイバチャンネル調整ループ通信チャンネルをサポートするステップと、
（ｂ）通信チャンネルからフレームを受信するステップであって、当該受信したフレームは、受信したフレーム中の他のデータに基づく巡回冗長コードを含むステップと、
（ｃ）巡回冗長コードを含む受信フレームをフレームバッファに格納するステップと、
（ｄ）フレームバッファとは独立したメモリに受信フレームを移動するステップと、
（ｅ）受信フレームを独立したメモリに転送する間に巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するステップと、
を備え、
前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣを前記メモリに格納することなく、前記受信したフレームを前記メモリに格納され、
前記受信したフレームが前記メモリから前記フレームバッファへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加される、ことを特徴とする通信方法。
【請求項１２】
請求項１１記載の方法であって、
（ｆ）送信すべきフレームをオンチップフレームバッファに載せるステップと、
（ｇ）送信すべきフレーム中のデータに基づき巡回冗長コードを生成するステップと、
（ｈ）巡回冗長コードを含む送信すべきフレームを通信チャンネルに送信するステップと、
をさらに含む方法。
【請求項１３】
請求項１２記載の方法であって、
前記載せるステップ（ｆ）は、
（ｆ）（ｉ）送信すべきフレームのデータのパリティを生成するステップと、
（ｆ）（ｉｉ）送信すべきフレームのデータにパリティを付与するステップとをさらに含み、
前記移動するステップ（ｄ）は、
（ｄ）（ｉ）受信フレームを独立したメモリに移動させる間に巡回冗長コードを取り去るステップをさらに含む方法。
【請求項１４】
請求項１１記載の方法において、
前記受信するステップ（ｂ）が、（ｂ）（ｉ）受信フレームを通信チャンネルから受信している間に巡回冗長コードを検証することにより、受信フレームの正しさを検査するステップをさらに含む方法。
【請求項１５】
請求項１１記載の方法において、
（ｉ）ファイバチャンネル調整ループ通信チャンネルを介して、動作中に第１のチャンネルノードと結合する磁気ディスク記憶装置と、第２のチャンネルノードを有するコンピュータシステムとの間で、データを転送するステップをさらに含み、
該第２のチャンネルノードは、通信チャンネルによって動作中に第１のチャンネルノードと結合される方法。
【請求項１６】
第１ポートと第２ポートを有し、各ポートがファイバチャンネル調整ループ通信チャンネルをサポートし、各通信チャンネルが通信チャンネル上のデータ送信中に巡回冗長コードを含む、チャンネルノードと、
巡回冗長コードを含むフレームをチャンネルノードから受信するバッファと、
バッファとは独立したオフチップメモリと、
受信フレームをバッファからオフチップメモリに移動させ、受信フレームをオフチップメモリに移動する間に巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するための手段であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣを前記オフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記手段と、
前記受信したフレームが前記オフチップメモリから前記バッファへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する手段と、
を備えた、通信チャンネルシステム。
【請求項１７】
請求項１６記載のシステムにおいて、
移動させる手段は、フレームが検査されオフチップメモリに移動されるときに、ＣＲＣを取り除くための手段をさらに含むことを特徴とするシステム。
【請求項１８】
ｎ個のポートを有する第１のシリアルの装置であって、各ポートはシリアル通信パス上のデータ送信内のデータ保護コードを搬送するシリアル通信パスをサポートする、前記第１のシリアルの装置と、
前記第１のシリアルの装置内に配置されたオンチップメモリであって、パケットを受信し、該受信したパケットに関連するデータ保護コードを前記シリアル通信パスから受信する、前記オンチップメモリと、
前記オンチップメモリ内の受信されたパケットのデータ健全性をチェックする、受信された関連するデータ保護コードを利用する健全性装置であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣをオフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記健全性装置と、
前記オンチップメモリと結合されたＣＲＣ生成回路であって、前記受信したフレームが前記オフチップメモリから前記オンチップメモリへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する、前記ＣＲＣ生成回路と、
を備えたシステム。
【請求項１９】
記憶媒体と、
ｎ個のポートを有するシリアルの装置であって、各ポートがシリアル通信パスをサポートし、各シリアル通信パスは該シリアル通信パス上のデータ送信内のデータ保護コードを搬送し、前記シリアルの装置はデータを通信するための前記記憶媒体に動作可能なように結合されている、前記シリアルの装置と、
前記シリアルの装置内のオンチップに配置されたオンチップメモリであって、パケットを受信し、該受信したパケットに関連するデータ保護コードを前記シリアル通信パスから受信する、前記オンチップメモリと、
前記オンチップメモリ内の受信されたパケットのデータ健全性をチェックする、受信された関連するデータ保護コードを利用する健全性装置であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣをオフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記健全性装置と、
前記オンチップメモリと結合されたＣＲＣ生成回路であって、前記受信したフレームが前記オフチップメモリから前記オンチップメモリへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する、前記ＣＲＣ生成回路と、
を備えたデータ記憶装置。
【請求項２０】
第１のシリアルの装置の各々のｎ個のポート上のシリアル通信パスをサポートすることと、
前記シリアル通信パスからのパケットを受信し、前記受信されたパケットは、該受信されたパケット内の他のデータに基づくデータ保護コードを含むことと、
前記データ保護コードを含む前記受信されたパケットをバッファに格納することと、
前記受信されたパケットを前記バッファとは独立したメモリへ移動することと、
前記受信されたパケットを前記独立したメモリへと移動させる間、前記データ保護コードを変化させることによって前記受信されたパケットの正確性をチェックすることと
を含み、
前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣを前記メモリに格納することなく、前記受信したフレームを前記メモリに格納され、
前記受信したフレームが前記メモリから前記バッファへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加される、方法。
【請求項２１】
ｎ個のポートを有するシリアルの装置であって、各ポートがシリアル通信パスをサポートし、該シリアル通信パスは、該シリアル通信パス上のデータ送信内のデータ保護コードを結合する、前記シリアルの装置と、
データ保護コードを含むパケットを前記シリアル通信パスから受信するバッファと、
前記バッファとは独立したオフチップメモリと、
前記受信されたパケットを前記オフチップメモリへ移動させる間、前記受信されたパケットを前記バッファから前記オフチップメモリへ移動し、前記データ保護コードを変化させることによって前記受信されたパケットの正確性をチェックする手段であって、前記受信したフレームに関連するＣＲＣに基づいて前記受信したフレームのデータ健全性をチェックし、前記受信したフレームに関連するＣＲＣを前記受信したフレームから取り除き、前記受信したフレームに関連するＣＲＣをオフチップメモリに格納することなく、前記受信したフレームを前記オフチップメモリに格納する、前記手段と、
前記受信したフレームが前記オフチップメモリから前記バッファへ移動するときに、第２のＣＲＣを生成して前記受信したフレームに追加する手段と、
を備えたシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大容量記憶装置の分野に関するものである。特に、本発明は、改良されたファイバチャンネル調整ループ（「ＦＣ−ＡＬ」）装置と、オンチップメモリにおけるデータ健全性を維持し、もしくは検査するためにファイバチャンネル巡回冗長検査情報を用いる方法に関する。
【背景技術】
【０００２】
あらゆるコンピュータシステムの主要な要素として、データを格納する装置がある。コンピュータシステムは、データを格納するための多くの様々な装置を含んでいる。コンピュータシステムで、多量のデータを格納するための１つの共通な場所が、ディスクドライブ上に設けられている。ディスクドライブの最も基本的な部分は、回転するディスク、ディスク上を様々な位置にトランスデューサを移動させるアクチュエータ、そしてディスクにデータを書き込んだりディスクからデータを読み出すために用いられる回路である。ディスクは、また、確実にディスク表面からデータを取り出したり、ディスク表面にデータを書き込めるようにデータをコード化するための回路を有している。マイクロプロセッサは、データ要求元のコンピュータに対してデータを送り戻し、要求元のコンピュータからデータを取得しディスクに格納することに加え、ディスクドライブの動作のほとんどの部分を制御する。
【０００３】
ディスクドライブとコンピュータシステムの他の部分との間でデータを転送するためのインターフェースは、通常、小型計算機システムインターフェース（「ＳＣＳＩ」）あるいはファイバチャンネルのようなバスあるいはファイバチャンネルである。この種のインターフェースのある側面は、異なる製造者から供給される様々な装置が相互接続でき、すべての装置が共通のインターフェースに接続できるように、しばしば標準化されている。このような標準は、通常、米国規格協会（「ＡＮＳＩ」）のような組織の標準化委員会によって取り決められるものとなっている。
【０００４】
様々な記憶装置と様々なコンピュータとの間でデータを交換するための１つの標準化されたインターフェースが、ファイバチャンネルである。いくつかの実施例では、ファイバチャンネル規格には、（後述の）調整ループが含まれている。実施例では、ファイバチャンネル規格は、データ転送を制御するためのＳＣＳＩに類似したプロトコルをサポートしている。
【０００５】
ファイバチャンネルは、小型計算機システムインターフェース（「ＳＣＳＩ」）ベースの設計に比べ、顕著な利点をもたらすものである。ファイバチャンネルは、従来のＳＣＳＩベース設計での毎秒２〜２０メガバイトのものに比べ、現状は、毎秒約１０６メガバイトに到達するようなより高い帯域幅を提供する。また、通常のＳＣＳＩベース環境では、最大７〜１５個の装置への対応だったものに対し、ファイバチャンネルは、１２６個の装置まで（ホストを含めて）接続することができるような、より高い接続性を提供する。ファイバチャンネルは、単一のコネクタで接続でき、スイッチを必要としないものである。ＳＣＳＩベース環境では、最長２５ｍまでの距離が限界であるのに比べ、同軸の電導体を用いたファイバチャンネルでは、最大３０ｍの距離を隔てた装置間で動作し、さらに、チャンネル全体に光ファイバを用いると、１０ｋｍにまで距離を延長することができる。ＳＣＳＩ環境では、データ転送でのエラーは、パリティを用いて検出されるが、一方、ファイバチャンネルでは、現状の不均衡と巡回冗長検査（「ＣＲＣ検査」）情報とによって特定される。より詳しい情報は、米国特許番号５，８０２，０８０、名称「マルチポート設計におけるＣＲＣ発生器を用いたＣＲＣ検査」および、米国特許番号、５，６６３，７２４、名称「１６Ｂ／２０Ｂエンコーダ」に記載されており、両者ともに本発明者ウエストバイ（Ｗｅｓｔｂｙ）による発明であり、ともに、本発明出願人シーゲート・テクノロジー社からの出願である。
【０００６】
ファイバチャンネル（「ＦＣ−ＡＬ」）は、バイト指向のＤＣ平衡（０，４）ランレングス限定８Ｂ／１０Ｂパーティションのブロック転送コード手順を採用した工業規格システムである。ＰＣ−ＡＬは、１０６．２５ＭＨｚのクロック周波数で動作する。８Ｂ／１０Ｂエンコーダ／デコーダの一形態が、１９８４年１２月４日に特許された米国特許第４，４８６，７３９号、発明者フランゼック（Ｆｒａｎａｓｚｅｋ）他による「バイト指向ＤＣ平衡（０，４）８Ｂ／１０Ｂパーティションブロック転送コード」に記載されている。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ファイバチャンネル（ＦＣ−ＡＬ）は、それぞれがノードと呼ばれる複数装置を、互いに接続させることができる。ノードは、コンピュータシステムの装置（コンピュータ、ワークステーション、プリンタ、ディスクドライブ、スキャナ等）のいずれかであってよく、それ自身がファイバチャンネル「トポロジー」（詳細は後述）に接続できるようなインターフェースを有している。各ノードは、他のノードへのアクセスを提供するＮＬポート（「ノード・ループポート」）と呼ばれる少なくとも１つのポートを持っている。２つ以上のポートを接続しあう要素は、一括して「トポロジー」あるいは「ループ」と呼ばれる。各ノードは、与えられたトポロジーあるいはループ内の他の全てのノードと通信し合う。
【０００８】
ポートは、それらを通してデータがファイバチャンネル上を通り、他のノード（外部世界）のポートに到達することができる、ファイバチャンネルノードでのコネクションである。典型的なファイバチャンネルドライブは、ドライブのノード内に組み込まれた２つのポートを持っている。各ポートは、一方がポートに情報を取り込み、他方がポートから情報を出すための、一組のファイバを持っている。各ファイバは、シリアルデータ接続であり、本実施例では、各ファイバは、実際には、同軸ケーブル（例えば、ノードが互いに近接しあっている場合に用いられる同軸の銅線）である。また、他の実施例では、ファイバは、その経路の少なくともいくつかの部分のために用いられる光ファイバとして実装される（例えば、異なる筐体や、特に、異なる建物にあるノードのように、かなりの距離をおいてノードが分けられている場合）。各ポートに接続される一組のファイバ（一方はデータをポートに取り込み、他方はデータをポートから出す）は、「リンク」と呼ばれ、各トポロジーの一部である。リンクは、「フレーム」内に詰め込まれた情報や信号を、ノード間で送信する。各リンクは、複数のフレーム種類（例えば、初期化、データ、制御のフレーム）を扱うことができる。
【０００９】
各ファイバは、一方向にのみデータを送信するため、ノードは、ループに沿って、互いに接続されていて、ここでは、各ノードが送信すべきデータを持っている際には、各ノードは、ループを制御するために互いに調整して動作しなければならない。「調整して動作する」とは、ノードに対して、どのノードがループを制御する権利を持つのかを調整し決定するプロセスのことである。ファイバチャンネル調整ループは、ハブやスイッチを使わずに、複数のノードをループに接続する。ノードのポートは、調整動作を用いて、一対一のデータ送信回路を確立する。ＦＣ−ＡＬは、分散トポロジーであり、ここでは、各ポートには、少なくとも、回路を確立するのに必要な最小限の機能が含まれている。調整ループトポロジーは、ノードポート数が２から１２６までのノードを接続するのに用いられる。
【００１０】
いくつかの実施例では、各ノードは、冗長性を与える二重ポート（それぞれが、分離したループに接続されている）を持っており、これにより、もし一方のループが故障しても、他方がループの役目を果たすことができる。二重ポートによって、２つのホスト（例えば、２つのホストコンピュータ）が、１つのドライブを共有することも可能となる。
【００１１】
典型的な、第１および第２世代のＦＣ−ＡＬドライブでは、２つのポートが、フレーム検証とフレーム生成論理を共有していた。これは、もし一方のポートがフレームを送受信しているならば、代替するポートが実質的に閉じている状態となり、（なぜならば、このポートは、同時には、フレーム検証とフレーム生成論理を使えないからである）従って、代替するポートはフレームを送出するためのホスト−バスアダプター許可を強制的に拒否することを意味している。いくつかのホスト−バスアダプターは、継続して調整動作を行い、基本ポートが閉じるまで幾度もフレームを送出することを試みなければならないものであった。また、ドライブは、一度にひとつのポートのみを使って送信できるのみであった。いくつかの場合には、所定のポートでの送出データ送信は、他方の（代替の）ポートを使っての応答送出とループ初期化のために中断せざるを得ないものであった。
【００１２】
（ＣＲＣの背景）
多くのデータ送信動作は、誤り検査を用い、これにより、送出するヘッダとペイロードのデータにもとづくエラーコードを検査し、受信するヘッダとペイロードのデータの健全性を検証する。このような誤り検査手順のある種のものは、巡回冗長コード（「ＣＲＣ」）情報を用いる。ＣＲＣ誤り検査を用いる典型的な回路には、受信するデータワードの健全性を検証するＣＲＣチェッカと、送信されているディジタルワードのためのＣＲＣ情報を生成するＣＲＣ発生器を含んでいる。多重ポート設計では、ＣＲＣチェッカとＣＲＣ発生器は、受信ディジタルワードの検証処理と、送信中の各ディジタルワードのためのＣＲＣ情報の生成処理が各ポートで可能となるように、有効でなければならない。多くのアプリケーションでは、回路あるいはループインターフェースモジュールは、一度に、一方のみのポートを経由して送信する。例えば、マルチポートインターフェースモジュールを介してコンピュータネットワークと通信するディスクドライブサブシステムは、いかなる時にも、単一のポートのみを介してデータの準備と送信を行う。しかし、ループインターフェースモジュールは、所定の時には、複数のポートを介してデータを受信しようとしてもよい。
【００１３】
複数のポートを通してデータを受信するためのひとつの方法は、ひとつのポートがデータを受信中には、単純に、他のポートからのデータの受け入れを禁止することである。この方法は、ＣＲＣチェッカやフレーム検証論理のような共通資源が複数のポート間で共有できるようにするものである。データを受信する第１のポートは、他のポートを排除するために、共通資源の使用状況を把握し、他のポートでのデータの受信が禁止される。従って、到着するデータは、他のポートでは受信されず、他のポートは、データ送信機能に制限を受ける。この方法では、他のポートが、データ送信要求に応じて、「ビジー」状態を受信し、第１のポートが実行中の動作を完了して共通資源を解放するまでは、幾度もデータ送信要求の手順を繰り返すことが要請されるものであった。
【００１４】
（ループ初期化の背景）
複数のループネットワークでは、エラー状態が検出された後や、ループインターフェースモジュールがチャンネルに接続されたり、あるいは、ファイバチャンネルに電源が投入されたときには、ループを初期化する必要がある。初期化は、通常、ループ初期化データをループ上に送出することによって行われる。しかし、もしループに接続されたループインターフェースモジュールが、他のループに接続されたポートを介して、すでにデータを受信中であるならば、当該のループインターフェースモジュールは、ループ初期化データを受信することはできない。通常は、このような状況では、データ転送は中断され、ループ初期化が先ず行われる。他の例としては、ループ初期化が中断し、他のループ（二重ループノードのループ）がデータ受信を完了するまで、連続して初期化をリトライするモードに移行する。さらに、もし、ループインターフェースモジュールが、一度にひとつのループ上でのみデータを受信できるとすれば、ループ初期化がひとつのチャンネルで行われている間は、モジュールは他のポートを介してはデータを受信できなくなる。
【００１５】
ファイバリンクは、コンピュータネットワークの様々な装置間のデータ送信に関連して、注目を集めている。特に、ファイバチャンネルは、より広い帯域幅をもち、優れた接続性、モジュールの接続の容易性、長い送信距離等の点で、小型計算機システムインターフェース（「ＳＣＳＩ」）バスに対して、顕著な優位性を持っている。例えば、典型的なＳＣＳＩバスは、２５ｍまでの延長距離の中で、１５モジュールまでを扱うことができるが、これに対し、ファイバチャンネルは、電気的な送信路を用いた場合にはモジュール間の距離を約３０ｍまでとし、あるいは、光送信路を用いた場合にはモジュール間の距離を１０ｋｍまでとして、１２６モジュールまで扱うことができる。従って、例えば、毎秒テラバイトのピークデータ送信レートを達成するためには、７０本のＳＣＳＩバスが必要になるところであるが、ファイバチャンネルでは約１０本を必要とするのみである。
【００１６】
他のチャンネルに影響を与えるデータ送信負荷を抑えるために、できるだけ速やかにチャンネルを使用状態に立ち上げる（即ち、「初期化する」）ことが重要である。
【００１７】
従って、マルチポートループインターフェースモジュールがデータと非データフレームを複数のチャンネル上で同時に受信できるよう、あるいは、他のチャンネルでデータ受信しながら１つのチャンネル上でフレームを送信できるように、あるいは、複数のチャンネル上で初期化および応答フレームを同時に送信できるように配慮する必要がある。また、ワンチップバッファ内に格納されたデータについては、より良い改善されたデータ検査能力が必要とされている。
【課題を解決するための手段】
【００１８】
オンチップメモリ中のデータ健全性のためのＣＲＣを用いるための方法と装置を提供する。ファイバチャンネルからフレームとともに受信された巡回冗長コード情報が、オンチップバッファに格納され、後に、フレームバッファに存在する間にデータの健全性を保証するために検査される。様々な実施例では、ＣＲＣ情報とともにデータフレームは、データフレームバッファに格納され、かつ／または、非データフレームはＣＲＣ情報とともに、受信非データフレームバッファに格納される。ループ初期化と応答のための専用の送信フレームバッファを含む改良された通信チャンネルシステムについては、後に詳述する。このような専用の送信フレームバッファを有することにより、他方のポートがデータフレームを送信あるいは受信中に、デュアルポートノードの一方のポートが初期化、あるいは応答フレームを送信できるものとなる。専用の受信バッファもまた、２ポートノードの各ポートに対して設けられる。フレームとともにファイバチャンネルから受信した巡回冗長コード情報は、３つのフレームバッファの１つに格納される。これらのデータとＣＲＣは、後で、フレームバッファに存在する間にデータの健全性を保証するために検査される。ループの制御のための調整に要する時間を減らすために、プログラミングにより選択的に決定された最小量のデータ（プログラム可能なデータと称す）が送信のために利用可能である限り、ループの制御は維持（即ち、ループ接続は開状態を保持）される。
【００１９】
本発明は、オンチップメモリ中でのデータ健全性のためのファイバチャンネル巡回冗長コード（ＣＲＣ）を用いるための通信チャンネルシステムを提供するものである。本システムは、第１のポートと第２のポートを有し、各ポートはファイバチャンネル調整ループ通信チャンネルをサポートし、各通信チャンネルは通信チャンネル上のデータ送信中に巡回冗長コードを含む、第１のチャンネルノードを含んでいる。本システムは、第１のチャンネルノードにオンチップで位置し、フレームと、受信されたフレームに対応したＣＲＣとを通信チャンネルから受信するオンチップフレームメモリと、オンチップフレームメモリ中に存在する受信されたフレームのデータ健全性検査のための受信された対応したＣＲＣを用いる健全性装置を含んでいる。
【００２０】
本システムの１つの変形は、さらに、動作中にオンチップフレームメモリと健全性装置とを結合するオフチップメモリと、受信したフレームをオンチップメモリからオフチップメモリに移動させる間に巡回冗長コードを検証する検証装置中の検証回路とを含んでいる。
【００２１】
このような実施例は、さらに、データがオフチップメモリからオンチップメモリに移動する際に、パリティを生成しデータに付与するパリティ生成回路を含み、ここで健全性回路は、さらに、データのフレームをオフチップメモリに移動させる間に、巡回冗長コードを検査し取り除く。この実施例の他の様態では、オンチップフレームメモリは、さらに、巡回冗長コードを含まないデータフレームをオフチップメモリから受信し、また、システムは、さらに、オフチップメモリから受信したデータフレームに基づき巡回冗長コードを生成するＣＲＣ発生器と、生成された巡回冗長コードを含むデータフレームをオフチップメモリから通信チャンネル上に送信する送信機を含んでいる。さらに他の実施例では、送信すべきデータフレームを、オフチップメモリからオンチップメモリに転送し、パリティを付与するもののＣＲＣ情報は含めずに、オンチップメモリに格納する。そのような一実施例では、通信チャンネルからオンチップメモリに転送された受信データフレームを、ＣＲＣは付与するもののパリティ情報は含めずに、オンチップメモリに格納する。
【００２２】
１つの変形として、本発明によりシステムを構築し、ここでは、該システムは、さらに、動作中に第１のチャンネルノードと結合する磁気ディスク記憶装置と、動作中に第２のチャンネルノードと結合するコンピュータシステムとを含むものとする（即ち、コンピュータシステムは第２のチャンネルノードを有するものとする）。第２のチャンネルノードは、動作中に第１のチャンネルノードと結合し、通信チャンネルを介して、第１のチャンネルノードと第２のチャンネルノードとの間でデータを転送する。
【００２３】
本発明の他の観点は、ディスクドライブを提供する。ディスクドライブは、回転ディスクと、回転中のディスクと交渉をもつトランスデューサと、第１のポートと第２のポートを有する第１のチャンネルノードを含み、各ポートはファイバチャンネル調整ループ通信チャンネルをサポートする。各通信チャンネルは、通信チャンネル上のデータ送信に巡回冗長コードを含んでいる。第１のチャンネルノードは、データと通信するためのトランスデューサと動作中に結合する。ディスクドライブは、第１のチャンネルノードにオンチップで位置し、フレームと、受信したフレームに対応したＣＲＣを通信チャンネルから受信するオンチップフレームメモリと、オンチップメモリ中に存在する受信フレームのデータ健全性を検査するために、受信した関連ＣＲＣを用いる健全性装置を含んでいる。一実施例では、ディスクドライブは、さらに、動作中にオンチップフレームメモリと健全性装置と結合するオフチップメモリと、受信したフレームをオンチップメモリからオフチップメモリに移動させる間に巡回冗長コードを検証する検証装置中の検証回路とを含んでいる。
【００２４】
本発明のさらに他の観点は、通信方法を提供する。本方法は、（ａ）第１のチャンネルノードの第１ポートと第２ポートのそれぞれの上で、ファイバチャンネル調整ループ通信チャンネルをサポートし、（ｂ）通信チャンネルからフレームを受信し、ここで、受信したフレームは、受信したフレーム中の他のデータに基づく巡回冗長コードを含み、（ｃ）巡回冗長コードを含む受信フレームをフレームバッファに格納し、（ｄ）フレームバッファとは独立したメモリに、受信フレームを格納し、（ｅ）受信フレームを独立したメモリに転送する間に、巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するステップを含んでいる。
【００２５】
一実施例では、本方法は、（ｆ）送信すべきフレームをオンチップフレームバッファに載せ、（ｇ）送信すべきフレーム中のデータに基づき巡回冗長コードを生成し、（ｈ）巡回冗長コードを含み、送信すべきフレームを通信チャンネルに送信するステップを含んでいる。本方法の一実施例では、搭載ステップ（ｆ）は、さらに、（ｆ）（ｉ）送信すべきフレームのデータのパリティを生成し、（ｆ）（ｉｉ）送信すべきフレームのデータにパリティを付与し、移動ステップ（ｄ）は、さらに、（ｄ）（ｉ）受信フレームを独立したメモリに移動させる間に巡回冗長コードを取り去るステップを含むものである。本方法の他の実施例では、受信ステップ（ｂ）は、さらに、（ｂ）（ｉ）受信フレームを通信チャンネルから受信している間に、巡回冗長コードを検証することにより、受信フレームの正しさを検査するステップを含むものである。
【００２６】
一実施例では、本方法は、さらに、（ｉ）ファイバチャンネル調整ループ通信チャンネルを介して、動作中に第１のチャンネルノードと結合する磁気ディスク記憶装置と第２のチャンネルノードを有するコンピュータシステムとの間で、データを転送するステップを含み、ここで、第２のチャンネルノードは、通信チャンネルによって、動作中に第１のチャンネルノードと結合する。
【００２７】
本発明の、さらに他の観点は、第１ポートと第２ポートを有するチャンネルノードを含み、各ポートは、ファイバチャンネル調整ループ通信チャンネルをサポートし、各通信チャンネルは、通信チャンネル上のデータ送信中に巡回冗長コードを含む、通信チャンネルシステムを提供する。本システムは、また、巡回冗長コードを含むフレームを、チャンネルノードから受信するバッファと、バッファとは独立したオフチップメモリとを含む。本システムは、また、受信フレームをバッファからオフチップメモリに移動させ、受信フレームをオフチップメモリに移動する間に巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するための手段（本明細書全体で記述されるものとして）を含んでいる。一実施例では、本移動手段は、さらに、フレームが検査されオフチップメモリに移動される際に、ＣＲＣを取り除くための手段を含んでいる。
【００２８】
このように、本発明は、フレームが１つ以上の専用の非データバッファならびに専用のデータバッファに格納される際に、フレームと、フレームの受信ＣＲＣとの間の調和をとることにより、データ検査能力の顕著な向上を図るものである。他の実施例では、２つの非データバッファが設けられ、デュアルポートファイバチャンネルインターフェースノードの両方の入力ファイバ上で同時に受信するように動作する。いくつかの実施例では、１つのデータバッファが設けられ、デュアルポートファイバチャンネルインターフェースノードのいずれか一方の入力ファイバ上で受信するように動作する。いくつかの実施例では、フレームをオンチップバッファからオフチップメモリに移動させている間に、フレームの巡回冗長コードを検証する、単一のＣＲＣチェッカーが（コスト削減のために）設けられる。いくつかの実施例では、それぞれの送信路上に（コスト削減のために）、フレームをオンチップバッファからファイバチャンネルに移動させている間に、適切な巡回冗長コードを生成する、単一のＣＲＣチェッカーが設けられる。
【実施例】
【００２９】
以下、好適な実施様態を詳細に説明する中では、添付の図を引用し、本発明を実施する特定の実施様態を例証によって示す。なお、本発明の主旨を逸脱することがなければ、他の実施様態も用いることができ、構造的な変更も可能である。本出願で説明する発明は、ハードディスクドライブ、ＺＩＰドライブ、フロッピーディスクドライブ、光ディスクドライブ、ＣＤＲＯＭ（「コンパクトディスク・リードオンリー・メモリ」）ドライブ、他の種類のドライブを含む全ての種類のディスクドライブ、およびＲＡＩＤ構成（廉価な独立したディスクドライブの冗長配列）のようなドライブシステムや他の装置に有用である。ここで、データは、ドライブと他の装置や情報処理システムとの間で通信される。いくつかの実施例では、本発明は、（複数のファイバチャンネルループを互いに接続するために用いられる）ハブやスイッチ、ワークステーション、プリンタ、他の装置、あるいはファイバチャンネル調整ループに接続される情報処理システムなどの、ノードインターフェースでの非ディスク装置として有用である。
【００３０】
以下は、本発明を記述する４つの相互に関係をもつセクションである。
Ｉ．ループ初期化と応答のための専用フレームバッファ、II．フレームを受信するための専用フレームバッファ、III．オンチップメモリ中のデータ健全性のためのファイバチャンネルＣＲＣの使用、IV．調整ループのオーバーヘッドを減少させる方法および装置。セクションIVは、基本的に本発明の詳細に関するセクションであるが、他のセクションも、発明の全体の環境に関わる適切な情報を提供するものである。図１は、ファイバチャンネル・ノードインターフェースをもつディスクドライブ１００のブロック図である。
【００３１】
図１と図２を参照すると、ファイバチャンネル・ループインターフェース回路１２２０は、ループ初期化と応答のための専用送信フレームバッファ７３を含んでいる。（「ループ初期化」は、ファイバチャンネルループを初期化する１つ以上の特定の非データフレームの系列を送信することにより（また、これらのフレームに対する応答を監視することにより）行われる。「応答」は、他のノードからのコマンドあるいは問い合わせに応答して送られる非データフレームである。）ファイバチャンネル・調整ループ通信チャンネル１２５０（ループ１２５０もしくはファイバチャンネルループ１２５０と称する）は、ディスクストレージ装置１００とコンピュータ１０２あるいは他の情報処理装置との間でデータ交換するのに用いることができる。一実施例では、ファイバチャンネルループ１２５０は、シリアル通信チャンネルであり、他の実施例では、ファイバチャンネルループ１２５０を実装するために２つ以上の平行線（あるいは、ファイバ）が用いられる。このような専用の送信フレームバッファ７３によって、他のポートがデータフレームを送受信している間にも、デュアルポートノード１２２０の１つのポート１１６が初期化および応答フレームを送信できるようになる。ポート１１６はシリアルラインで、一方の信号線１１７は入力するデータ用であり、他方の信号線１１８は出力するデータ用であり、両方の信号線１１７、１１８は通信チャンネルループ１２５０に接続され、その一部を形成している。受信専用バッファ（５３、５３′および５５）もまた、２ポートノードの各ポート１１６に設けられる。ダッシュを附した引用数字（例えば、５３′）をもつ各ブロックは、ダッシュのつかない対応したブロック（例えば、５３）と同一の機能を持つが、分離したループポートあるいは通信チャンネルに用いられることを表している。フレームとともにファイバチャンネル１２５０から受信された巡回冗長コード情報は、１つ以上のフレームバッファ（５３、５３′および５５）の１つに格納され、データの健全性を保証するために、フレームバッファ（５３、５３′または５５）に入っている間に後で検査される。ループ１２５０の制御は、ループ１２５０の制御のための調整に使われる全体時間を抑制するために、データのプログラム可能な量が送信に有効である限り、維持される（即ち、該ループ接続はオープンに保持される）。
【００３２】
いくつかの実施例では、ディスクドライブ１００は、１つ以上のディスクプラッタ１３４、一ディスクプラッタ当り１つ以上の磁気読み書きトランスデューサ１５０とアーム駆動アセンブリ１２６を有する磁気記憶ヘッドディスクアセンブリ（「ＨＤＡ」）１１４を含んでいる。トランスデューサ（あるいは、「ヘッド」）とＨＤＡインターフェース１１３の間の信号は、ディスクプラッタ１３４との間のデータを送信する。このように、いくつかの実施例の「ディスクドライブ」（例えば、図１のディスクドライブ１２５６）は、ＨＤＡ１１４とＨＤＡインターフェース１１３（例えば、従来のＳＣＳＩドライブ）とを含み、１つ以上のこのような従来のディスクドライブ１２５６は、図１に示すように、ループあるいはファイバチャンネルトポロジーへ接続するために、外部ノードインターフェース１２２０に接続される。他の実施例では、「ディスクドライブ」というものは、図２のディスクドライブ１００によって代表されるものであり、これは、ディスクドライブ１００全体の中に、ディスクドライブ１２５６とともに統合されたノードインターフェース１２２０を含んでいる。一実施例では、データは、次々に、オフチップバッファ１１１から、またオフチップバッファ１１１に対して送信される。本発明は、本実施例で示されて、それぞれのポート（すなわち、バッファ５３、５３′）について受信非データフレームバッファ５３（代わりに、到着非データバッファ５３と称する）を含む専用オンチップバッファ１１９と、一実施例では、両方のポートにより同時に用いられることが可能な（他の実施例では、一度には、単一のバッファが１つのポートのみによって使われる）送信フレームバッファ７３と、ＣＲＣチェッカー５９６（図１１参照）とともに共有データフレームバッファ５５を提供する。以下、詳説する一実施例では、送信フレームバッファ７３の４０ワードが、ポートＡのために予約され、４０ワードがポートＢのために予約される、これにより、両方のポートが同時に初期化可能となる。この実施例は、それぞれのバッファが各ポートに対応し、同時に使用することが可能な２つの独立した４０ワード送信フレームバッファを持つことに相当する。この実施例では、これらのワードのそれぞれは、３６ビットワード（３２データビットと４パリティビット）である。
【００３３】
ファイバチャンネルループ１２５０からデータフレームとともに受信されたＣＲＣ健全性検査情報は、データフレームバッファ５５の中にデータとともに格納され、次に、データがデータフレームバッファ５５の外に読み出される時に検査され、データフレームがデータフレームバッファ５５の中にある時、あるいはデータフレームの送信過程の初期段階のいずれかの場所で起こり得るデータ障害のための検査を提供する。同様に、ファイバチャンネルループ１２５０から非データフレームとともに受信されたＣＲＣ健全性検査情報は、非データフレームバッファ５３（または、５３′）の中にデータとともに格納され、次に、データが非データフレームバッファ５３（または、５３′）の外に読み出される時に検査され、非データフレームが非データフレームバッファ５３（または、５３′）の中にある時、あるいはデータフレームの送信過程の初期段階のいずれかの場所で起こり得るデータ障害のための検査を提供する。マイクロプロセッサ１１２は、なにがしかの適当な高速プロセッサであり、ディスクドライブ１００内のデータ送信、ルーティング、信号処理、誤り回復などの全体の制御を助けるために用いられる。本発明では、ファイバチャンネル・インターフェースチップ１１０は、以下に説明するように、改良されたフレームバッファ、エラー検査およびループ調整を提供する。
【００３４】
一実施例では、ループポートトランシーバブロック１１５（即ち、１１５および１１５′）は、そこに接続されたファイバチャンネルループ１２５０（図２参照）へのポートＡとポートＢを介したデータ送信を、直列化および並列化するポートトランシーバを含む。いくつかの実施例では、トランシーバ１１５は、外部トランシーバとして与えられ、他の実施例では、これらのトランシーバはブロック１１０内のチップ上に配される。いくつかの実施例では、右側のインターフェース（即ち、図１のトランシーバ１１５および１１５´の右側に位置するもの）は、１０ビット長のパラレル入出力信号である。他の実施例では、これらは２０ビット長のものもある。ブロック１１０、１１１、１１２、ポートＡトランシーバ１１５とポートＢトランシーバ１１５′とが一体となって、ファイバチャンネルノードインターフェース１２２０を構成する。いくつかの実施例では、ポートトランシーバ１１５、１１５′は、シングルチップ１１０の内部に統合されているものもある。他の実施例では、直列化および並列化する機能を含んでいるポートトランシーバ１１５、１１５′は、チップ１１０とは独立した回路の上に実装されているものもある。
【００３５】
他の実施例では、トランシーバ１１５は、シリアルループ１２５０とチップ１１０間の単なるインターフェースとしているものもあり、そこでは、１０ビット長あるいは２０ビット長さのデータへの直列化および並列化がチップ上で行われる。
【００３６】
図２は、コンピュータシステム１２００の概要図である。有利なことに、本発明はコンピュータシステム１２００に用いることに非常に適している。コンピュータシステム１２００は、電子システムあるいは情報処理システムとも呼ばれ、中央処理装置（ＣＰＵ）、メモリ、およびシステムバスを含んでいる。コンピュータシステムは、中央処理装置１２０４、ランダムアクセスメモリ（ＲＡＭ）１２３２、および、中央処理装置１２０４とランダムアクセスメモリ１２３２とを通信上で結合するためのシステムバス１２３０を有するＣＰＵ情報処理システム１２０２を含んでいる。ＣＰＵ情報処理システム１２０２は、ファイバチャンネルノードインターフェース１２２０を含んでいる。１つ以上のディスクストレージ情報処理システム１００から１００′のそれぞれは、１つ以上のディスクドライブ装置１２５６とファイバチャンネルノードインターフェース１２２０を含んでいる。
【００３７】
いくつかの実施例では、複数のディスクドライブ１２５６が、例えば、ＲＡＩＤ（廉価な独立したディスクドライブの冗長配列）構成での単一のノードインターフェース１２２０に接続されており、装置１００′は、ディスクドライブのＲＡＩＤ配列である。ＣＰＵ情報処理システム１２０２は、また、内部入出力バス１２１０と、入出力バス１２１０に付属する１２１２、１２１４、１２１６等のいくつかの周辺装置を駆動する入出力インターフェース回路１２０９を含んでいる。周辺装置は、ハードディスクドライブ、光磁気ドライブ、フロッピーディスクドライブ、モニター、キーボードやその他周辺装置を含んでいる。いかなる種類のディスクドライブや他の周辺装置であっても、ここで説明するファイバチャンネル方式と装置（特に、例えば、ファイバチャンネルノードインターフェース１２２０の改善）を適用することができる。各装置については、ＡポートあるいはＢポートのいずれかが、何らかの与えられたループ１２５０に接続して用いることができる。
【００３８】
システム１２００の一実施例は、オプションとして、中央処理ユニット１２０４′（中央処理ユニット１２０４と同一あるいは同等のもの）を有する第２のＣＰＵ情報処理システム１２０２′（システム１２０２と同一あるいは同等のもの）、ランダムアクセスメモリ（ＲＡＭ）１２３２′（ＲＡＭ１２３２と同一のもの）、および中央処理装置１２０４′とランダムアクセスメモリ１２３２′とを通信上で結合するためのシステムバス１２３０′（システムバス１２３０と同一のもの）を含むものである。ＣＰＵ情報処理システム１２０２′は、それ自身のファイバチャンネルノードインターフェース１２２０′（ノードインターフェース１２２０と同一のもの）を含むが、第２のファイバチャンネルループ１２５０′（ループ１２５０とは分離し独立しているループ）を介して１つ以上のディスクシステム１００に接続している（この図解した例では、ディスクシステム１００′に接続しているが、他の例では、全ての装置あるいはディスクシステム１００から１００′に接続している）。この構成により、２つのＣＰＵシステム１２０２、１２０２′は、各ＣＰＵシステム１２０２のための分離したファイバチャンネルループを用いて、１つ以上のディスクシステム１００を共有することができる。さらに他の実施例では、全ての装置１００から１００′および全てのＣＰＵシステム１２０２から１２０２′は、両方のループ１２５０、１２５０′に接続されている。
【００３９】
一実施例では、本発明は、データフレームの故障時配信をサポートしていない。本発明の他の実施例によれば、ファイバチャンネルコントローラは、送信・受信の目的のためにコードワードのデータフレームを編成するプロトコルも組み込んでいる。このプロトコルは、米国特許番号５，２６０，９３３、名称「故障時配信をもつシリアルデータネットワークのための受け取り通知プロトコル」、発明者Ｇ．Ｌ．Ｒｏｕｓｅに開示されている。本発明の一実施例を構築する際に用いられるファイバチャンネル仕様は、下記のＡＮＳＩ規格を含んでいる。
【００４０】
（表１）
ファイバチャンネルFC-PH    X3T11／プロジェクト755D／改版4.3
物理的および信号インターフェース
ファイバチャンネルFC-AL    X3T11／プロジェクト960D／改版4.5
調整ループ
ファイバチャンネルFC-AL2   X3T11／プロジェクト1133D／改版6.3
調整ループ
ファイバチャンネルFCP      X3T10／改版012
SCSIプロトコル             X3.2
69-199X
【００４１】
Ｉ．ループ初期化と応答のための専用フレームバッファ
本発明の一実施例のために、両方のポートが同時に使用できるような、フレームバッファが第三世代の特定用途向け集積回路（「ＡＳＩＣ」）チップ（ファイバチャンネルインターフェースチップ１１０）に追加されている。非データフレームを受信する２つのバッファ（「受信非データフレームバッファ」とも称される、図１の５３、５３′）が設けられ、コマンドとＦＣＰフレーム（ファイバチャンネルプロトコルフレーム）がノードの両方のポートに同時に受信されるようになる（また、全二重動作、即ち、ポートの一方のファイバで受信しながら、同じポートの他方のファイバで送信する動作も可能となる）。これにより、ディスクドライブ１００（図２参照）が、送信の中断や完了を待つことなく、同一のポートあるいは他のポート上でデータ送信を行っている間に、新しいコマンド（あるいは、他の非データフレーム）を一方のポートで受信することが可能となる。従来の方法に比べより早くコマンドを手に入れることにより、本発明は、データ送信が進行する最中に、コマンドを区別し最適化することを可能とし、以って、システム１２００の性能を向上させることができる。
【００４２】
送信フレームバッファ７３（図１３の記述参照）により、他方のポート上でデータ送信を可能としながら、応答フレームを一方のポートから送信することができる。また、この送信フレームバッファ７３により、他方のポート上での送信の中断や完了を待つことなく、一方のポートからループ初期化を実行することが可能となる。
【００４３】
デュアルポートファイバチャンネル調整ループ設計では、到着および送出バッファを管理するために、オンチップフレームバッファが用いられる。オンチップＲＡＭは、性能と半導体集積度の間のバランスを決める様々な方法によって構成することができる。本仕様は、ファイバチャンネルループ初期化フレームと単一フレームファイバチャンネル応答を格納し送信するのに用いられる専用フレームバッファ１１９と単一フレーム送信路７０の使用について詳説するものである。
【００４４】
デュアルポート設計では、ひとつのポートがデータを受信し送信し、その送信を処理するためにＡＳＩＣの資源のほとんどを利用する。この種類の多重フレーム系列を扱うために、多くのカウンタと状態機械が必要とされる。それぞれのポートの設計を重複させたり、データ送信を中断することなく、本発明では、主ポートがデータを送信しながら、代替ポートがフレームを送受信できるようにするため機能を提供するために、限られた量の論理が必要となる。本発明のいくつかの実施例では、他方のポートがデータ送信している間に、一方のポートでフレームを送信できる能力を提供する単一フレーム送信路回路７０とともに、専用の送信フレームバッファ７３が設けられる（図１３を参照）。この論理は、いずれかのポートが、データを送信できるように、あるいは送信フレームバッファ７３が利用できるように、動的に構成される。
【００４５】
データが本来のポート（主ポート）を介して送信され、ループ初期化が代替のポート上で実行される際には、データ送信は、割り込みなしに継続することが可能となる。受信される（非データフレームである）ループ初期化フレームは、フレームがフレームバッファ（例えば、送信フレームバッファ７３：図１３参照）に書きこまれる前に、検証される。マイクロプロセッサ１１２は、送信フレームバッファ７３に対して書き込み、読み込みアクセスを持ち、それが送出できるようになる前に、受信されたフレームを検定し修正できるようにする。フレームの「ヘッダ」と「ペイロード」は、フレームバッファに格納される。（フレームの「ヘッダ」には、フレームのソース識別子、系列計数、発信元識別子といった情報が含まれている。フレームの「ペイロード」は、送信されるデータの本体である。）マイクロプロセッサ１１２の管理下にある単一フレーム送信路７０（図３参照）は、フレームを編成し、フレーム開始およびフレーム終了区切り記号を含み、フレーム巡回冗長コード（「ＣＲＣ」）情報を生成する。
【００４６】
データフレームが第１のポートを通して送信され、ファイバチャンネルプロトコル（ＦＣＰ）応答フレームの送信が必要となった際には、データ送信は、割り込みなく継続することができる。図３によれば、マイクロプロセッサ１１２は、応答フレームのヘッダとペイロードを送信フレームバッファ７３に格納するものとなっている。単一フレーム送信回路７０は、フレームを組み立て、フレーム開始およびフレーム終了区切り記号を含み、フレームＣＲＣ情報を生成する。いくつかの付加的なループ制御論理もまた、フレーム送信のためにループ１２５０を開放するために設けられる。
【００４７】
図１４によれば、送信フレームバッファ７３は、書き込みおよび読み出しポインタ（それぞれ、７３３および７３４）を必要とする。（時により単一フレーム送信フレームバッファあるいは送信フレームバッファ７３として記しているものは、一般的には、「送信フレームバッファ」であり、他の実施例では、バッファ７３は、１つ以上のポートのそれぞれのために、１つ以上の送信フレームを含んでいるが、「送信フレームバッファ」という用語は、ここでは、これら全ての実施例を含むものとして使用する。）単一フレーム送信回路７０（詳細は、図１３にて後に示す）は、フレーム長カウンタ７１、送信フレーム化状態機械７２、ＣＲＣ発生器７６、および送信マルチプレクサ（「ｍｕｘ」）７４を必要とする。
【００４８】
（ファイバチャンネルインターフェース仕様）
図３は、ファイバチャンネル・ノードインターフェースチップ１１０のブロック図である。本発明のファイバチャンネル・ノードインターフェース論理１１０は、調整ループ論理とフレーム化論理を含むファイバチャンネルプロトコルを担っている。１つの実施例は、ファイバチャンネルプロトコル（「ＦＣＰ」）規格により定義されたＳＣＳＩ上位レベルプロトコルのみを用いて、クラス３ＳＣＳＩ実装（上述のＦＣ−ＡＬ仕様参照）のために最適化されている。ファイバチャンネル・ノードインターフェース論理１１０は、デュアルポートの全二重動作時の補助と、様々なバッファ帯域幅に対応するための４つのオンチップフレームバッファ（５３、５３′、５５、７３）を含んでいる。ファイバチャンネル・ノードインターフェース論理１１０は、マイクロプロセッサ１１２へも接続して、これにより、マイクロプロセッサ１１２が、ファイバチャンネル・ノードインターフェース論理１１０を構成でき、ファイバチャンネル・ノードインターフェース論理１１０の現在の条件についての状態情報を読み出すことができる。
【００４９】
ファイバチャンネル・ノードインターフェース論理１１０は、２つのループポート回路２０（一方は、ポートＡのために、他方はポートＢのためにあり、各ポートは、データ入力インターフェースとデータ出力インターフェースを持ち、ループ通信に対応している）、ループ制御回路（あるいは、フレーム送信回路４０と称す）、受信路論理５０、転送制御論理６０、単一フレーム送信回路７０、送信路マルチプレクサ（「ｍｕｘ」）７９、データフレーム送信路論理８０、およびマイクロプロセッサインターフェース９０を含んでいる。これらのブロックは、受信フレーム処理、送信データフレーム生成、単一フレーム送信生成、転送制御およびプロセッサ接続などの機能をサポートしている。
【００５０】
マイクロプロセッサインターフェース回路９０は、マイクロプロセッサ１１２に対し、ファイバチャンネル・ノードインターフェース論理１１０のレジスタとカウンタへのアクセスを提供する。（「マイクロプロセッサ」と記述するときには、この語句がなんらかの適切なプログラム可能な論理装置を含むものであることを前提とする。）インターフェースレジスタは、ファイバチャンネルインターフェースの応答に先立ち、外部マイクロプロセッサ１１２により初期化される。出力送信はこのインターフェースにより初期化され、受信した送信の状態はこのインターフェースを通して参照可能となる。
【００５１】
図３での入力信号は、ファイバチャンネル１６からポートＡのループポート回路２０へのデータ入力を伝えるＡ＿ＩＮ３０２１と、ファイバチャンネル１６からポートＢのループポート回路２０へのデータ入力を伝えるＢ＿ＩＮ３０２１とを含んでいる。オフチップバッファからのデータ（ＤＡＴＡ  ＦＲＯＭ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ）３０５１は、オフチップバッファ１１１から受信路５０へのデータを伝える。オフチップバッファへのデータ（ＴＯ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ）３０５２は、オフチップバッファ１１１へ受信路５０からデータを伝える。バッファ状態（ＢＵＦＦＥＲ  ＳＴＡＴＵＳ）３０６１は、転送制御６０に状態を提供する。ＭＰＵインターフェース９０へのＭＰＵアドレス（ＭＰＵ  ＡＤＤＲＥＳＳ）３０９１およびＭＰＵデータ（ＭＰＵ  ＤＡＴＡ）３０９５は、それぞれ、マイクロプロセッサ１１２からのアドレスとデータを提供する。ＭＰＵインターフェース９０への読み込みイネーブル（ＲＥＡＤ＿ＥＮＡＢＬＥ）３０９２および書き込みイネーブル（ＷＲＩＴＥ＿ＥＮＡＢＬＥ）３０９３は、マイクロプロセッサ１１２からのイネーブル信号を提供する。ＭＰＵ信号３０７６は、マイクロプロセッサ１１２が送信フレームバッファ７３にアクセスできるようにする。Ａ出力（Ａ＿ＯＵＴ）３０２３は、ポートＡのためのデータをループポート回路２０からファイバチャンネル１６に伝え、Ｂ出力（Ｂ＿ＯＵＴ）３０２４は、ポートＢのためのデータをループポート回路２０からファイバチャンネル１６に伝える。
【００５２】
（ループポート回路２０）
図４は、ファイバチャンネルループポート回路２０のブロック図である。本発明の一実施例のファイバチャンネル設計は、周辺装置の直接接続のためのデュアルポートのファイバチャンネルインターフェースをサポートする２つの同一のループポート回路２０を含んでいる。一実施例では、ファイバチャンネルループポート回路２０は、受信レジスタ２１、８Ｂ／１０Ｂデコーダ論理２２、ワード同期状態機械２３、受信クロック喪失検出器２４、同期喪失タイマー２５、調整ループ論理２６および８Ｂ／１０Ｂエンコーダ２７を含む。
【００５３】
一実施例では、各ループポート回路２０は、１０ビットデータインターフェースを用いる外部トランシーバ１１５（図１参照）に接続している。本実施例では、トランシーバ１１５は、パラレルインターフェース（例えば、１０ビット幅あるいは２０ビット幅インターフェース）との間で、シリアルデータを並列化したり、逆に、パラレルデータを直列化する。他の実施例では、これらのトランシーバ１１５は、チップ１１０に集積化されている。パラレルデータ（ファイバチャンネルからの入力）は、各トランシーバ１１５の受信部から受信クロックを用いて取り込まれ、パラレル８Ｂ／１０Ｂデコーダを用いたデコーディングの前に、２０ビット幅形式に変換される。次に、１６ビットデータと２つのｋ記号（特別の、順序付けられた集合を表すために用いられる）が、調整ループ論理２６に送られる前に、ワード健全性のために検査される。調整ループ論理２６の出力は、送信クロックに対して、再度同期化され、受信フレーム化論理に送られるか、あるいはエンコーダ２７を介してループ１２５０上に再送信される。一実施例では、上記の各操作の間に、エンコーダ２７は、１つの８ビット文字を１つの１０ビット文字に変換する。他の実施例では、上記の各操作の間に、２つ以上の８ビット文字が、対応する数の１０ビット文字に変換される。（米国特許番号５，６６３，７２４、名称「１６Ｂ／２０Ｂエンコーダ」参照）調整ループ論理２６は、ループ状態機械、順序付け集合デコーダと弾性挿入・削除機能を含んでいる。ループポート回路２０は、ファイバチャンネル調整ループＡＮＳＩ規格（即ち、上記のＦＣ−ＡＬもしくはＦＣ−ＡＬ２）に定義されている調整ループプロトコルを実装している。
【００５４】
一実施例では、ファイバチャンネルデータは、直列化され送信され、トランシーバ１１５によって１０ビット並列データに変換される。受信レジスタ２１は、トランシーバ１１５の受信部により発生されたクロックを用いて、１０ビットデータ（Ａ＿ＩＮ３０２１またはＢ＿ＩＮ３０２２）をトランシーバ１１５から取り込む。データは、８Ｂ／１０Ｂデコーダ２２に送られる前に、直ちに２０ビット幅（即ち、２つの１０ビット文字幅）に変換される。８Ｂ／１０Ｂデコーダと称され、一実施例でのデコーダ２２は、各操作中に、１つの１０ビット文字を１つの８ビット文字に変換するが、他の実施例では、各操作中に、２つ以上の１０ビット文字が対応する下図の８ビット文字に変換される。
【００５５】
８Ｂ／１０Ｂデコーダ論理２２は、受信レジスタ２１によって取り込まれた、エンコードされたデータを入力する。２つの１０ビット文字は、同時にデコードされ、２つの８ビット文字を出力する。入力文字の中で連続している不均衡を検査し、誤り状態がワード同期状態機械２３と調整ループ論理２６に送られる。連続している不均衡誤りに続き、次の順序付け集合に対し、負の連続不均衡を適用する。コード化規則の違反もまた検査され、コード化違反状態もワード同期状態機械２３に送られる。
【００５６】
受信クロック喪失検出器２４は、トランシーバ１１５からの受信クロックが停止した時を検出する。「受信クロックの喪失」条件が検出された時には、ワード同期状態機械２３はリセットされ、データが調整ループ論理２６のＦＩＦＯに入るのを阻止する（ＦＩＦＯは、先入れ先出しメモリであり、通常、異なる速度で駆動されるバスあるいはプロセス間を接続するために用いられる）。ワード同期が再び得られるまで、最新充填ワード（「ＣＦＷ」については、後に詳述する）が送信される。
【００５７】
ワード同期状態機械２３の論理は、ワード同期について、入力ストリームを監視する。３つの順序付け集合について、適当なバイト・制御文字配列を持っていることが検出され、不要な無効文字が検出されない時に、ワード同期が達成される。「ワード同期喪失」は、ＦＣ−ＰＨ（即ち、ＦＣ−ＰＨ物理的かつ信号インターフェースＸ３Ｔ１１／プロジェクト７５５Ｄ／改版４．３）規格によって定義されている。ワード同期が確立されると、データは調整ループ論理２６のＦＩＦＯに入力される。
【００５８】
同期喪失タイマー２５は、１つ以上の最大フレーム時間の間に、ワード同期喪失条件が存在した時を決定するのに用いられる（３つの有効な順序付け集合を検出するのには、フレーム時間まで要するためである）。このタイマーが時間終了すると、マイクロプロセッサ１１２には、同期喪失（ＬＯＳＳ−ＯＦ−ＳＹＮＣ）割込み信号４０５５によって割込みが入り、それが措置をとるようになる。
【００５９】
調整ループ論理２６は、ループ弾性ＦＩＦＯ、ループＦＩＦＯ制御論理、順序付け集合デコード論理、ループ状態機会論理、最新充填ワード選択論理、ループ出力マルチプレクサ論理ならびに種々の機能を含んでいる。ループ弾性ＦＩＦＯは、（受信クロックによりクロッキングされた）入力データを送信クロックと、再度、同期をとるために必要なバッファリングを提供する。ループＦＩＦＯ制御論理は、調整ループ論理２６の状態を監視し、挿入または削除操作が必要かどうかを判断する。順序付け集合は、順序付け集合認識論理により、デコードされる。これらの順序付け集合は、ＦＣ−ＰＨで定義された順序付け集合（即ち、ＰＣ−ＰＨ物理的かつ信号インターフェースＸ３Ｔ１１／プロジェクト７５５Ｄ／改版４．３）を含んでおり、これは、フレーム区切り記号と調整ループ順序付け集合を含んでいる。最新充填ワード選択論理は、ループの状態と、最新充填ワード（ＣＦＷ）を決定するデコードされた順序付け集合を監視する。調整されたループが有効になると、ハードウェア状態機械は、順序付け集合デコードを用いて、ＦＣ−ＡＬ規格（即ち、ファイバチャンネルＦＣ−ＡＬ１調整ループ規格Ｘ３Ｔ１１／プロジェクト９６０Ｄ／改版４．５、またはファイバチャンネルＦＣ−ＡＬ２調整ループ規格Ｘ３Ｔ１１／プロジェクト１１３３Ｄ／改版６．３）に記述されたループ関数を実行する。入力である、ループＡ送信制御出力（ＬＯＯＰ  Ａ  ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ）６４２５とループＢ送信制御出力（ＬＯＯＰ  Ｂ  ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ）６４２７は、図６の論理から調整ループ論理２６への入力を提供する。出力である、ループＡ状態および制御（ＬＯＯＰ  Ａ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ）６４２２およびループＢ状態および制御（ＬＯＯＰ  Ｂ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ）６４３２は、それぞれのループの出力を制御し、ループ制御論理に状態を提供し、次に、ループ制御論理は、ループ状態機械（図６参照）への要求を生成する。出力である、ループＡデータ（ＬＯＯＰ  Ａ  ＤＡＴＡ）４０２６およびループＢデータ（ＬＯＯＰ  Ｂ  ＤＡＴＡ）４０２７は、それぞれのローカルポート（図７のブロック５１、５１´）へのデータを提供する。
【００６０】
一実施例では、８Ｂ／１０Ｂエンコーダ論理２７は、調整ループ論理２６から、１６ビットデータと２ｋ文字（下位ｋ文字は常に０）を受け取る。一実施例では、入力は、２つの１０ビット文字にエンコードされる。この２つの１０ビット文字は、分離され、データをシリアルストリームに変換するトランシーバ１１５（図１参照）にひとつずつ出力される。他の実施例では、両方の１０ビット文字（即ち、全部で２０ビット）が、データをシリアルストリームに変換するトランシーバ１１５に平行して送られる。送信マルチプレクサ７９（図３参照）は、フレーム終了（「ＥＯＦ」）区切り記号がいつ送信されているかを表す状態も提供し、最新の連続している不均衡に基づき、エンコーダ２７がＥＯＦの正しい型（あるいは、「好み」）を選択できるようにする。また、ポートが（開状態にあって）送信中となっている時、あるいは、調整ループ論理２６がプリミティブを送信している時には、連続している不均衡は、各非ＥＯＦプリミティブの開始で、強制的にネガティブとされる。出力信号Ａ＿ＯＵＴ３０２３とＢ＿ＯＵＴ３０２４は、各トランシーバ１１５、１１５′にデータを送信する。
【００６１】
図５は、一実施例において、一旦、調整操作によってループの制御が確立されたならば、ループを開状態に保持するために用いられるコンパレータ論理３０を示す。オフチップ有効データ（ＯＦＦ−ＣＨＩＰ  ＡＶＡＩＬＡＢＬＥ  ＤＡＴＡ）５０１１は、予め定めた値Ｘ−ＦＲＡＭＥＳ５０１３（一実施例において、これは、プログラム可能な値であり、その最適な値は経験的に定められる。一実施例では、この値は、１フレームと定める）と、コンパレータ５０１０によって比較される。データフレーム有効データ（ＤＡＴＡ―ＦＲＡＭＥ  ＤＡＴＡ  ＡＶＡＩＬＡＢＬＥ）５０１５は、予め定めた値Ｙ−ＷＯＲＤＳ５０１７（一実施例において、これは、プログラム可能な値であり、その最適な値は経験的に定められる。一実施例では、この値は、フレームの２分の一に含まれるワードの数と定める。一実施例では、約２０００ワードが存在し、Ｙ−ＷＯＲＤＳは約１０００となる）と、コンパレータ５０１２によって比較される。ＡＮＤゲート５０１４は、両方の条件が満たされたことを判断し、ＨＯＬＤ  ＬＯＯＰ  ＯＰＥＮ信号５０１９を出力する。
【００６２】
図６は、ループ制御回路４０（または、フレーム送信（「ＸＭＩＴ」）回路４０と称す）のブロック図である。ループ制御回路４０（図３および図６参照）は、フレームあるいはＲ＿ＲＤＹの送信を開始するために、（ポートＡおよびポートＢの調整ループ論理２６中の）調整ループ状態機械への適切な要求と、送信フレーム化状態機械７２（図１３参照）および８１（図１５参照）への要求を生成するための制御論理を含んでいる。
【００６３】
送信データシーケンサ論理４１は、マイクロプロセッサ１１２により送信が要求された際に呼び出され実行される論理を含んでいる。送信データシーケンサ論理４１は、入力信号である送信状態入力（ＴＲＡＮＳＭＩＴ  ＳＴＡＴＵＳ  ＩＮＰＵＴＳ）６４１１を用いて送信を監視し、送信の各段階についての許可信号（即ち、許可信号である、送信制御出力（ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ６４１３））を生成する。これにより、マイクロプロセッサ１１２が介入することなく、送信準備およびＦＣＰ応答が生成できる。
ループポートＡ／Ｂ開制御状態機械４２（ポートＡ）および４２′（ポートＢ）は、他のループポートによりポートが開いている場合か、ループ１２５０がフレームを送信するために開いている場合を扱う。この論理は、ループ１２５０の調整と閉鎖の要求と、Ｒ＿ＲＤＹと様々な種類のフレームを送信する要求とを生成するものであり、半二重あるいは全二重動作のために構成することができる。
【００６４】
下記の条件は、調整の要求を始める際に満たしていなければならないものである。
・マイクロプロセッサ１１２からのＸＭＩＴポートを使ってのフレーム送信要求が許可されていること
・送信ポートが監視状態にあること
・送信長カウンタがゼロでないこと
・マイクロプロセッサ１１２から、送信を中断させる要求がないこと
・（非データ送信あるいはデータ書き込み送信で、送信準備が送信されていないものの、データ閾値は満足している状態にあるか、データ読み込み送信で、データ閾値とデータフレームバッファ閾値とが満足した状態にあること）
【００６５】
ポートが半二重モードで構成されている際には、Ｒ＿ＲＤＹは、Ｏｐｅｎｅｄ状態にある時にのみ、送信される。ポートが全二重モードで構成されている際には、Ｏｐｅｎｅｄ状態あるいはＯｐｅｎ状態のいずれの状態でも送信される。Ｒ＿ＲＤＹを送信する条件には、利用可能なバッファー間信用と最大バッファー間信用未満の最大のＲ＿ＲＤＹとを含んでいる。（以下で図１２にて説明するバッファ間信用制御論理６０３は、接続されたポートに対してバッファ信用を発行し、フレームが送られるようにする。この信用は、Ｒ＿ＲＤＹを送ることにより発行される。
【００６６】
ポートが、半二重モードで構成される際には、フレームはＯｐｅｎ状態にある時のみ送信される。ポートが全二重モードで構成される際には、もしポートがフレームの受け取り側で全二重モードでオープンされるならば、フレームはＯｐｅｎ状態もしくはＯｐｅｎｅｄ状態で送信される。
【００６７】
フレームの送信要求は、以下の条件が満たされたときに生成される。
・データフレームバッファ５５がデータを利用可能とすること
・バッファ間信用が利用可能であること（Ｒ＿ＲＤＹが受信されること）
・非データ送信あるいはデータ読み込み送信、および送信長カウンタ（図１２、ブロック６０９）はゼロでないこと
ループ１２５０を閉じさせる条件は以下を含んでいる。
・Ｏｐｅｎｅｄ状態に入る際には、利用可能なバッファ間信用はないこと
・Ｏｐｅｎｅｄ状態にある時には、際立ったＲ＿ＲＤＹはなく、いかなるバッファ間信用も利用可能でないこと
・ポートがＯｐｅｎｅｄ状態にある時に、プロセッサのビージー要求が有効になっていること
・送信が完了していること
・データ読み込み送信操作とデータは利用可能でないこと
・ＣＬＳプリミティブが受信され、いかなるバッファ間信用も利用可能でないこと
・マイクロプロセッサ一時中断要求は未発行であり、論理はフレームの間にあること。
【００６８】
再度、図６によれば、ループポートＡ／Ｂ開初期化制御状態機械４６（ポートＡ）および４６′（ポートＢ）は、ループ１２５０が開初期化状態の場合を扱う。この論理４６、４６′は、フレームを送信する要求を生成する。各ポート（４６、４６′）には１つの状態機械が存在する。これらの状態機械は、マイクロプロセッサ１１２がフレームを要求した際に、フレームを送信する要求を生成し、ＥＯＦの送信を監視する。送信が完了すると、送信完了信号がマイクロプロセッサ１１２に対して生成される。
【００６９】
ブロック４０への入力には、ＰＯＲＴ  ＢＢ＿ＣＲＥＤＩＴ  ＡＶＡＩＬＡＢＬＥ  ＴＯ  ＴＲＡＮＳＭＩＴ  Ｒ＿ＲＤＹ６０１７、ＰＯＲＴ  ＣＲＥＤＩＴ  ＡＶＡＩＬＡＢＬＥ  ＴＯ  ＴＲＡＮＳＭＩＴ  Ａ  ＦＲＡＭＥ６０２０（図１２参照）、ＬＯＯＰ  Ａ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４２２、ＬＯＯＰ  Ｂ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４３２（図４参照）とＤＡＴＡ  ＡＶＡＩＬＡＢＬＥ６０１９（図１２参照）が含まれている。ブロック４０からの出力には、ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ６４１３、ＬＯＯＰ  Ａ  ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ６４２５とＬＯＯＰ  Ｂ  ＴＲＡＮＳＭＩＴ  ＣＯＮＴＲＯＬ  ＯＵＴＰＵＴＳ６４２７が含まれている。
【００７０】
単一フレーム送信路に関する詳細な情報は、（単一フレーム送信路回路７０）と題したセクションにて説明する。
【００７１】
II．フレーム受信のための専用フレームバッファ
デュアルポートファイバチャンネル調整ループ設計１２００では、オンチップフレームバッファ１１９中のバッファは、到着および送出フレームを扱うために用いられる。受信され送信されるフレームは、たいてい、大きなオフチップ領域（即ち、オフチップバッファ１１１）に、低速の転送レートで格納される。オフチップバッファ１１１が、単一ポートに対しては高速の転送レートが利用可能となっている時でも、デュアルポート設計に対して必要とされる帯域幅は、より広いものであり、より高いコストが必要になる。ＦＣ−ＡＬ  ＡＳＩＣ１１０（図１参照）のオンチップフレームバッファ１１９は、性能、半導体集積度、コストについて最適なバランスを得るために、様々な方法で構成することができる。本仕様は、非データ型フレームを各ポート上で同時に受信する専用のフレームバッファ５３、５３′（オンチップフレームバッファ１１９全体の要素）の使用について詳細に定めるとともに、専用の大型データフレームバッファ５５（または、オンチップフレームバッファ１１９全体の要素）を提供するものである。
【００７２】
本発明によるデュアルポート設計では、フレームは、両方のポート１１６上で、同時に受信される。フレームは、通常、受信した後、大型のオフチップメモリ１１１に移されそこに格納される。各フレームは、検証されなければならず、また、フレームを外部に送信する前に、フレーム巡回冗長コード（ＣＲＣ）情報も検査する必要がある。受信フレーム検証とＣＲＣ検査論理の重複を避けるために、各受信非データフレームバッファ５３、５３′が、各ポート１１６に１つづ設けられ、高速のインターフェース転送レートで同時にフレームが受信できるように、また一度に読み出され、検証した後、外部に送信できるようになる。非データフレームが他のポートで同時に受信されている間にも、データが１つのポートで受信あるいは送信できるように、大型の共有データフレームバッファ５５もまた、ポート間で共有できるように設けられる。さらに、２つの独立した一方向性のファイバも各ポートに設けられるため、単一ポートが同時に送信と受信の両方を実行できる。
【００７３】
例えば、ポートＡ送信ファイバ１１８がデータフレームバッファ５５からデータフレームを送信している最中、あるいは送信フレームバッファ７３が非データフレームを送信している最中に、ポートＡ受信ファイバ１１７は、非データフレームを受信して、非データ受信バッファ５３に入力することができ、同時に、非データフレームを、送信フレームバッファ７３から送信している最中、あるいはデータフレームをデータフレームバッファ５５から送信している最中に（ポートＡが非データフレームを送信している場合）、ポートＢは非データフレームを受信して非データ受信バッファ５３′に入力することができる。受信フレーム検証論理およびＣＲＣチェッカーを使うために、データフレームバッファ５５または、受信フレームバッファ５３、５３′のいずれか一方を、選択できる。本発明の一実施例では、単一のデータフレームバッファ５５が設けられ、同時には１つのポート１１６のために利用できるのみであり、いかなる時にも送信あるいは受信のいずれか一方に利用される。他の実施例では、このような制限を排するために、複数のデータフレームバッファ５５が設けられるものもある。また、本発明の一実施例では、単一の送信フレームバッファ７３が設けられ、同時に１つのポート１１６のために利用できるのみとしている。他の実施例では、このような制限を排し、全く同時にループ初期化操作（あるいは他の非データ応答の送信）を両方のポートで動作可能とするために、複数の送信フレームバッファ７３が設けられるものもある。
【００７４】
到着データ送信が利用可能となっている時には、データあるいは非データフレームが、プライマリポート上で受信される。同時に、非データフレームが、代替のポート上で受信される。データフレーム（ヘッダ、ペイロード、ＣＲＣおよびフレーム区切り記号を含む）は、大型のデータフレームバッファ５５に格納され、一方、非データフレーム（こちらも、ヘッダ、ペイロード、ＣＲＣおよびフレーム区切り記号を含む）は、小さい受信フレームバッファ５３（又は、５３′）に格納される。各ポート１１６には、１つの受信フレームバッファ５３が設けられる。３つのフレームバッファ（５３、５３′、５５）の１つがデータを利用できる状態になると、受信検証論理５９５およびＣＲＣ検査論理５９６を用いるために、それが選択される（図１１参照）。
【００７５】
送出データ送信が利用可能となっている時には、データフレームがプライマリポート上で送信される。同時に、非データフレームはいずれかのポートで受信される。データのペイロードは、外部から読み込まれ、データフレームバッファ５５に書き込まれ、インターフェース送信が始まるまでそこに格納される。（ヘッダ、ＣＲＣ，フレーム区切り記号は、フレームバッファからフレームが読み出された後に、付加される。）同時に、非データフレームが、プライマリポートあるいは代替ポートのいずれかを通して、受信される。非データフレームは、受信フレームバッファ５３又は５３′に書き込まれ、そこで、フレームバッファが受信検証論理５９５およびＣＲＣ検査ロジック５９６にアクセスできるようになる迄、保持される。
【００７６】
データ送信に可能な限り最高の性能を提供するために、データフレームバッファ５５には優先権が与えられる。非データフレームは、データ送信が中断したり完了した時に扱われる。もし、ループバッファ間信用がもはや利用可能ではないような状態で、受信フレームバッファ５３の１つが満杯になった場合には、バッファ間信用が再び利用可能となるよう、受信フレームバッファ空間を開放するために、データフレームバッファ５５の書き込み・読み出し操作は中断される。読み出しが短時間中断している間に新しいフレームがデータフレームＲＡＭ５５５に書き込まれるため、到着したデータフレームは、この間、データフレームバッファ５５に格納される。書き込みが短時間中断している間にフレームがＲＡＭ５５５から読み出されるため、インターフェースに利用可能な送出データフレームは、この間暫定的に減少する。
【００７７】
図７は、ファーバーチャンネル受信路およびフレームバッファーブロック５０（図３参照）のブロック図である。受信路およびフレームバッファブロック５０は、受信したフレームを処理し、直接、外部に（オフチップバッファ１１１に向けて）、あるいは、単一フレーム送信回路７０にフレームを送るか、フレームを受信する３つのフレームバッファ（受信非データフレームバッファ５３、５３′又はデータフレームバッファ５５）のうちの１つに格納する。受信路５０は、事前バッファ受信フレーム処理（ブロック５１、５１′）、データフレームバッファマルチプレクサ５２、ポートＡおよびポートＢ用の受信非データフレームバッファ５３、５３′、データフレームバッファ５５、データフレームバッファ送信長カウンタ５４、フレームバッファコントローラ５６、共通受信路５９、およびバッファインターエース５８の各ブロックを含んでいる。
【００７８】
ブロック５１への入力は、図４からのＬＯＯＰ  Ａ  ＤＡＴＡ４０２６と、（図６への入力である）ＬＯＯＰ  Ａ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４２２である。ブロック５１′への入力は、図４からのＬＯＯＰ  Ｂ  ＤＡＴＡ４０２７と（図６への入力である）ＬＯＯＰ  Ｂ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４３２である。データフレームバッファ５５への入力は、ＯＦＦ-ＣＨＩＰ  ＢＵＦＦＥＲ  ＤＡＴＡ３０５１を含む。信号であるＤＡＴＡ  ＸＦＥＲ  ＣＯＮＴＲＯＬ７５２１は、データフレームバッファマルチプレクサ５２を制御する。信号ＢＵＦ＿ＰＡＵＳＥ７５６１は、フレームバッファコントローラ５６に対して、中断が求められていることを通知する（通常は、バッファが送信レートの帯域幅に対応できないことが理由である）。信号ＬＤ＿ＣＯＵＮＴＥＲＳ７５４１は、データフレームバッファ送信長カウンタ５４に対して、カウンタ値をロードするように通知する。
【００７９】
出力信号ＢＸＦＲ＿ＣＮＴ＿ＺＥＲＯ７５４２は、全ての送信データが、選択されたフレームバッファに存在することを示している。フレームバッファコントローラ５６は、読み込み許可信号ＲＤ＿ＥＮＡＢＬＥ７５３２をポートＡ受信非データフレームバッファ５３に送り、ＲＤ＿ＥＮＡＢＬＥ７５５２をデータフレームバッファ５５に送り、ＲＤ＿ＥＮＡＢＬＥ７５３３をポートＢ受信非データフレームバッファ５３′に送る。バッファコントロールインターフェース５８は、選択、ストローブ、および許可信号であるオフチップバッファのためのＣＯＮＴＲＯＬＳ  ＦＯＲ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ７５８９をオフチップバッファ１１１のために提供する。オフチップバッファへのデータ出力ＤＡＴＡ  ＴＯ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ３０５２は、受信データフレームと非データフレームをオフチップバッファ１１１に提供する。
【００８０】
データフレームバッファマルチプレクサ５２は、データと事前バッファ受信状態機械５１２の出力とを、ＤＡＴＡ  ＸＦＥＲ  ＣＴＬ７５２１ビットセットを持つポートから選択する。このマルチプレクサ５２の出力は、データフレームバッファ５５に対し、データと状態信号（図１０の、それぞれ８５１１と８５１２）を提供し、データがデータフレームバッファＲＡＭ５５５（図１０参照）に書き込められるようになる。
【００８１】
図８は、ファイバチャンネルから受信され、３つのフレームバッファ（５３、５３′、５５）の１つに入力されるフレームを準備する、ファイバチャンネル事前バッファ受信フレーム処理路回路５１のブロック図である。事前バッファ受信路ブロック５１は、従前バッファ受信フレーム化状態機械５１２、事前バッファ受信フレーム長カウンタ５１５（およびそのマルチプレクサ５１４）、およびＥＯＦ変更論理５１３を含んでいる。フレームは両方のポートに同時に受信されるので、このブロック５１は、ポートＡとポートＢの両方に複写して使える（即ち、各ポートに一回ずつ実装すればよい）。
【００８２】
事前バッファ受信フレーム化状態機械５１２は、いつフレームとＲ＿ＲＤＹが受信されるかを決定するために、入力ストリームを監視する。ＳＯＦが検出された時に、ヘッダ、ペイロードおよびフレーム区切り記号の各ワードのための信号が生成される。この状態機械５１２は、ヘッダあるいはペイロードの間に受信される無効なプリミティブについてと、最大のフレーム長を違反する送信（多くは、ＥＯＦの破壊が原因となる）について検査する。
【００８３】
事前バッファ受信フレーム長カウンタ５１５は、受信されたフレームのヘッダのＲ＿ＣＴＬフィールドに基づき、コマンドあるいは、受信フレームの行先となるフレームバッファのデータバッファ領域の最大フレーム長さ（マルチプレクサ４５１４により選択されたように）とともに、フレームの最初にロードされる。もし、ＥＯＦの検出前にカウンタがゼロに達するならば、長さエラーが検出される。この機能は、フレームバッファ内での割り当て空間の規定外設定を防止するため役立つ。
【００８４】
ＥＯＦ変更論理５１３は、到着フレームを検査し、それがデータフレームであるかどうかを確認し、フレームバッファへの許可を生成する。ＥＯＦ変更論理５１３は、事前バッファ受信フレーム長カウンタ５１５により利用される、到着フレームの経路制御フィールドを取り込む。ＥＯＦ変更論理５１３は、また、ＥＯＦフィールドを変更し、より詳細な状態情報が、フレームバッファを経由して共通受信路５９に到達するようにする。
【００８５】
図４からの入力信号であるＬＯＯＰ  Ａ  ＤＡＴＡ４０２６とＬＯＯＰ  Ｂ  ＤＡＴＡ４０２７は、ＥＯＦ変更論理５１３に結合される。ＬＯＯＰ  Ａ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４２２と、ＬＯＯＰ  Ｂ  ＳＴＡＴＥＳ  ＡＮＤ  ＣＯＮＴＲＯＬ６４３２（図６への入力でもある）は、ループ１２５０に関する状態情報を、状態機械５１２に提供する。ＭＡＸ  ＦＲＡＭＥ  ＳＩＺＥ８５１７は、データフレーム、制御フレームとその他のフレームの最大フレームサイズに関する情報を、マルチプレクサ５１４とカウンタ５１５に提供する。
【００８６】
出力信号であるＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＤＡＴＡ８５１１と、ＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＳＴＡＴＥＳ８５１２は、データと状態情報を、非データバッファ５３、５３（図９を参照）とデータフレームバッファ５５に提供する。
【００８７】
図９は、ファイバチャンネル受信非データフレームバッファ回路５３のブロック図である。受信非データフレームバッファ５３は、受信フレームバッファ書き込み制御５３３、受信フレームバッファ読み出し制御５３４、受信フレームバッファＲＡＭ５３５、受信フレームバッファ状態ブロック５３６、および受信フレームバッファフレームカウンタ５３１とを含んでいる。フレームは両方のポートに同時に受信されるため、この回路５３は、ポートＡおよびポートＢのそれぞれに１つずつ実装される。
【００８８】
受信フレームバッファ書き込み制御ブロック５３３は、アドレス（ＷＰＴＲ９５３７）、データ（ＷＤＡＴ９５３６）および受信フレームバッファＲＡＭ５３５中のランダムアクセスメモリ（ＲＡＭ）に対する書き込み許可（ＷＥ９５３９）を生成する。フレームのデータが受信される時に、事前バッファ受信状態機械５１２からの状態許可を用いて、書き込み許可（ＷＥ９５３９）を展開し、ＲＡＭ５３５に書き込む。アドレスが更新され、受信フレームバッファ状態ブロック５３６によって、受信フレームバッファＲＡＭ５３５の中にどれだけ利用可能な空間があるかを決定するために用いられるラップビット（ＷＲＡＰ９５３８）が設けられる。ループポート回路２０からのデータは、１６ビット幅から３２ビット幅に変換され、ＳＯＦあるいはＥＯＦ区切り記号を表すフラグビットが追加される。受信フレームからのＣＲＣは、データを保護するために、非データフレームバッファＲＡＭ５３５に達する。すなわち、ファイバチャンネルから受信されたＣＲＣ情報は、非データフレームバッファ５３にデータとともに格納され、次に、データが非データフレームバッファ５３から読み出される時（例えば、オフチップバッファ１１１に送信される時）に検査され、データが非データフレームバッファ５３に留まっていた際になんらかのエラーがデータに生じていないかを検出するようにする（当然のことながら、データがファイバチャンネルループ１２５０中を移動中にデータ中に生じるエラーについても検出される）。ブロック５３への入力信号には、ＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＤＡＴＡ８５１１と、ＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＳＴＡＴＥＳ８５１２（図８参照）と、レジスタに登録された（即ち、後の利用のためにレジスタに保管された信号としての）マイクロプロセッサ１１２からのＭＰＵ  ＤＡＴＡ９５３３と、ＭＰＵ  ＡＤＤＲＥＳＳ９５３４が含まれている。
【００８９】
受信フレームバッファ読み出し制御ブロック５３４は、受信フレームバッファＲＡＭ５３５の読み出しアドレス（ＲＰＴＲ９５４１）を発生し、ＲＡＭ５３５からデータ（ＲＤＡＴ９５４０）を取得する。フレームバッファ制御器５６（図７を参照）が、受信非データフレームバッファ５３を選択すると、受信フレームバッファＲＡＭ５３５への読み出しが可能になる。アドレスが増分され、受信フレームバッファＲＡＭ５３５において利用可能な空間の大きさを判定するための受信フレームバッファ状態ブロック５３６によって使用される、ラップビット（ＷＲＡＰ９５４２）が与えられる。受信フレームバッファＲＡＭ５３５からのデータはレジスタに取得され、フレ―ムの始まりと終わりを判定するためのフラグビットがモニターされる。いつデータが有効であるかを示すため、イネーブルが共通受信路５９（図７を参照）によって使用されるように与えられる。ブロック５３４への入力信号は、マイクロプロセッサ１１２からのＲＥＧＩＳＴＥＲＥＤ  ＲＥＡＤ＿ＥＮＡＢＬＥ９５３５を含む。ブロック５３４からの出力信号は、ＲＥＣＥＩＶＥ  ＮＯＮ−ＤＡＴＡ  ＢＵＦＦＥＲ  ＤＡＴＡ９５４３およびＮＯＮ−ＤＡＴＡ  ＶＡＬＩＤ  ＲＥＡＤ９５４６を含む。
【００９０】
受信フレームバッファＲＡＭ５３５は、同期ＲＡＭを含む。そのＲＡＭは、３３ビット幅（３２ビットデータワード＋ＳＯＦ／ＥＯＦフラグビット）および３０４ワード長である。受信非データフレームのＳＯＦ、ヘッダ、ペイロード、ＣＲＣおよびＥＯＦは、オフチップバッファ１１１および共通受信路５９へのアクセスが利用可能となるまで保持されるよう、ＲＡＭ５３５に書き込まれる。一実施例においては、組込み自己テスト制御器が、受信フレームバッファＲＡＭ５３５を、特にそのメモリの物理的なレイアウトに対して展開されるデータパターンに関してテストされるようにさせる。
【００９１】
受信バッファ状態ブロック５３６は、受信フレームバッファＲＡＭ５３５の書き込みおよび読み出しポインタを比較し、バッファが空であるかどうかを判定し、バッファが空でない場合には、受信フレームバッファＲＡＭ５３５においてどの程度の数の空間フレームが利用可能であるかを判定する。このブロック５３６（ＡＶＡＩＬＡＢＬＥ ＳＰＡＣＥ９５４５）の出力は、受信フレームバッファＲＡＭ５３５が共通受信路５９へのアクセスを要求するかどうかを判定するために、フレームバッファ制御器５６によって使用される。その出力は、信用が利用可能であるかどうかを判定するため、バッファ間信用制御論理６０３（図１２を参照）によっても使用される。
【００９２】
受信フレームバッファフレームカウンタブロック５３１は、現に受信フレームバッファＲＡＭ５３５にあるフレーム数を計数する。カウンタ５３１は、フレームが受信フレームバッファＲＡＭ５３５に書き込まれる時に増分され、フレームが受信フレームバッファＲＡＭ５３５から読み出される時に減分される。その計数（ＣＯＵＮＴ  ＯＦ  ＦＲＡＭＥＳ  ＩＮ  ＢＵＦＦＥＲ９５４４）は、信用が利用可能であるかどうかを判定するために、バッファ間信用制御論理６０３によって使用される。一実施例においては、適切な保持時間を与えるために、ＲＡＭに入り込む（クロックを除く）すべての入力が遅延される。
【００９３】
図１０は、ファイバチャンネルデータフレームバッファ回路５５のブロック図である。データフレームバッファ５５は、データフレームバッファ書き込み制御器５５３、データフレームバッファ読み出し制御器５５４、データフレームバッファＲＡＭ５５５、データフレームバッファ状態ブロック５５６、データフレームバッファフレームカウンタ５５１、およびデータフレーム取得ブロック５５２を含む。どのような時間においても１個のデータ転送のみが許可される。従って、データフレームバッファ５５はポートＡとポートＢによって共有される。
【００９４】
データフレームバッファ書き込み制御ブロック５５３は、アドレス（ＷＰＴＲ９５５５）、データ（ＷＤＡＴ９５５４）、およびデータフレームバッファＲＡＭ５５５に対する書き込みイネーブル（ＷＥ９５５７）を発生する。書き込み動作（ディスクに書き込まれるべきデータ）に対して、データフレームが受信されると、書き込みイネーブル（ＷＥ９５５７）をメモリ５５５に与えるために、事前バッファ受信状態機械５１２からの状態イネーブルが使用される。読み出し動作（ディスクから読み出されるべきデータ）に対して、書き込みイネーブル（ＷＥ９５５７）をメモリ５５５に与えるために、フレームバッファ制御器５６からのイネーブルが使用される。アドレスが増分され、データフレームバッファＲＡＭ５５５において利用可能なデータ／空間の大きさを判定するためデータフレームバッファ状態ブロック５５６によって使用される、ラップビット（ＷＲＡＰ９５５６）が与えられる。書き込み動作に対して、ループポート回路２０からのデータが、１６ビット幅から３２ビット幅に変換され、ＳＯＦまたはＥＯＦ区切り記号を示すために、フラグビットが与えられる。受信されたフレームからのＣＲＣは、データを保護するために、データフレームバッファＲＡＭ５５５を介して送られる。すなわち、ファイバチャンネルから受信されるＣＲＣ情報は、データと一緒にデータフレームバッファ５５に記憶される。その後、データがデータフレームバッファ５５内に存在する際にそれらのデータに生ずるいかなるエラーも検出されるように（もちろん、ファイバチャンネルループ１２５０を移動中にそれらのデータに生ずるエラーも検出され得るように）、そのＣＲＣ情報は、それらのデータがデータフレームバッファ５５から読み出される際に（例えば、それらがオフチップバッファ１１１に転送される際に、）検査される。一実施例においては、読み出し動作に対して、オフチップバッファ１１１からのデータが、１６ビット幅から３２ビット幅に変換され、データを保護するためにパリティが発生される。ブロック５５３への入力信号は、ＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＤＡＴＡ８５１１およびＰＲＥ−ＢＵＦＦＥＲ−ＲＥＣＥＩＶＥ  ＳＴＡＴＥＳ８５１２（図８を参照）、並びにＤＡＴＡ  ＦＲＯＭ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ３０５１（図３を参照）を含む。
【００９５】
従って、一実施例においては、データがファイバチャンネルループ１２５０（図２を参照）からデータフレームバッファＲＡＭ５５５を介して、その後オフチップバッファ１１１に送られる場合、データフレームバッファＲＡＭ５５５内のデータがＣＲＣ情報によって保護される。しかし、ファイバチャンネルループ１２５０に転送するために、それらがオフチップバッファ１１１からＲＡＭ５５５に流れた場合には、パリティによって保護される（後者の場合、データがデータフレームバッファＲＡＭ５５５を出た後、ＣＲＣ情報がファイバチャンネルに向かっているデータに付加される）。
【００９６】
データフレームバッファ読み出し制御ブロック５５４は、データフレームバッファＲＡＭ５５５の読み出しアドレス（ＲＰＴＲ９５５９）を発生し、ＲＡＭ５５５からデータ（ＲＤＡＴ９５５８）を取得する。書き込み動作（ディスクに書き込まれるべきデータ）に対して、フレームバッファ制御器５６は、データフレームバッファ５５を選択し、メモリへの読み出しが可能にさせられる。読み出し動作（ディスクから読み出されるべきデータ）に対して、転送フレーム状態機械８１（図１５を参照）は、メモリの読み出しを可能にさせる。アドレスが増分され、データフレームバッファＲＡＭ５５５においてどの程度のデータ／空間が利用可能であるかを判定するため、データフレームバッファ状態ブロック５５６によって使用される、ラップビット（ＷＲＡＰ９５６０）が与えられる。書き込み動作に対して、フレームバッファＲＡＭからのデータがレジスタに取得され、フレ―ムの開始と終了を判定するためのフラグビットがモニターされる。データが有効である時を示すため、イネーブルが共通受信路５９によって使用されるように与えられる。読み出し動作に対して、データフレームバッファＲＡＭ５５５からのデータがレジスタ中に取得され、パリティが検査される。ブロック５５４からの出力信号は、ＤＡＴＡ  ＦＲＡＭＥ  ＢＵＦＦＥＲ  ＤＡＴＡ９５６４、ＤＡＴＡ  ＶＡＬＩＤ  ＲＥＡＤ９５６３、およびＤＡＴＡ  ＰＡＲＩＴＹ  ＥＲＲＯＲ９５６２を含む。
【００９７】
データフレームバッファＲＡＭ５５５は、同期ＲＡＭを含み、一実施例においては、さらに組み込み自己テスト制御器を含む。一実施例では、ＲＡＭは、３６ビット幅（３２ビットデータワード＋４個のＳＯＦ／ＥＯＦフラグビットまたはパリティビット）および３，２３２ワード長である。書き込み動作（ディスクに書き込まれるべきデータ）に対して、受信データフレームのＳＯＦ、ヘッダ、ペイロード、ＣＲＣおよびＥＯＦは、オフチップバッファ１１１および共通受信路５９へのアクセスが利用可能となるまで保持されるよう、ＲＡＭ５５５に書き込まれる。読み出し動作（ディスクから読み出されるべきデータ）に対して、ループ１２５０が開かれ、データが転送されるまで保持されるように、ペイロードのみがＲＡＭ５５５に書き込まれる。一実施例においては、適切な保持時間を与えるために、ＲＡＭに入り込む（クロックを除く）すべての入力が遅延させられる。
【００９８】
データフレームバッファ状態ブロック５５６は、データフレームバッファＲＡＭ５５５の書き込みおよび読み出しポインタを比較し、バッファが空であるかどうかを判定し、バッファが空でない場合には、バッファ内においてどの程度の数のデータ／空間フレームが利用可能であるかを判定する。書き込み動作に対して、このブロック５５６（ＡＶＡＩＬＡＢＬＥ  ＳＰＡＣＥ９５６１）の出力は、データフレームバッファ５５が共通受信路５９へのアクセスを要求するかどうかを判定するために、フレームバッファ制御器５６によって使用される。その出力は、信用が利用可能であるかどうかを判定するため、バッファ間信用制御器６０３（図１２を参照）によっても使用される。
【００９９】
読み出し動作（ディスクから読み出されるべきデータ）に対して、ループ制御ブロック４０は、フレームが転送され得るかどうかを判定するために、フレームバッファ内のデータ量を監視する。データフレームバッファ閾値は、ループ１２５０を開くよう調整するために適合される必要がある。全フレームが利用可能ではないが、処理中である（データフレームバッファ５５および／またはオフチップバッファ１１１に格納されようとしている）場合には、ループ１２５０を開放状態に保持させるために、データフレームバッファ保持閾値も発生される。
【０１００】
データフレームバッファ・フレームカウンタブロック５５１は、入力信号ＦＲＡＭＥ＿ＯＵＴ９５５０を使用して、現にデータフレームバッファＲＡＭ５５５にあるフレーム数を計数する。カウンタ５５１は、フレームがＲＡＭ５５５に書き込まれる時に増分され、フレームがＲＡＭ５５５から読み出される時に減分される。その計数（信号ＣＯＵＮＴ  ＯＦ  ＦＲＡＭＥＳ  ＩＮ  ＢＵＦＦＥＲ９５６６）は、信用が利用可能であるかどうかを判定するために、バッファ間信用制御器６０３によって使用される。
【０１０１】
データフレーム取得ブロック５５２は、イネーブル取得モードが動作可能にされるとき、（入力信号ＥＮＡＢＬＥ  ＤＡＴＡ  ＷＲＩＴＥ  ＤＥＴＥＣＴ９５５１を用いて）受信データフレームを監視し、フレームヘッダの様々なフィールドを取得する。その後、これらの値（ＤＡＴＡ  ＣＡＰＴＵＲＥ  ＯＵＴＰＵＴ９５６５）は、マイクロプロセッサ１１２によって読み出される。
【０１０２】
再び図７を参照する。データフレームバッファ転送長カウンタ５４の制御器は、読み出しデータがいかにしてデータフレームバッファ５５内に取り込まれるかを制御する２個のカウンタを含む。（ブロック５４内の）データフレームバッファ転送長カウンタは、ファイバチャンネル転送に対してどの程度多くのデータがオフチップバッファ１１１から取り込まれるべきかを判定するために使用される。どのフレームバッファがオフチップバッファ１１１にアクセスすべきかを再評価するため、制御器５６を一時停止させる前に（以下の章で説明される処理）、（ブロック５４内の）データフレームバッファ転送長カウンタは、ファイバチャンネル転送に対してどの程度多くのデータがオフチップバッファ１１１から取り込まれるべきかを判定するために使用される。
【０１０３】
フレームバッファ制御器５６は、３個のフレームバッファ（すなわち、データフレームバッファ５５、ポートＡ受信非データフレームバッファ５３、またはポートＢ受信非データフレームバッファ５３′）のいずれが、オフチップバッファ１１１のリソースへのアクセスを許可されるべきかを判定する。ポートがループ初期化状態にあって、しかもそのポート受信非データフレームバッファ５３（すなわち、５３または５３′）が空でない場合には、ループ初期化フレームは最高優先度を与えられ、その結果ループ初期化が進行できる。データ転送は、次の最高優先度を与えられ、受信非データフレームバッファ５３が満たされない限り続行されることになる。
【０１０４】
受信非データフレームバッファ５３の１個が、もはやフレームの空きを持たない場合には、その特定の受信非データフレームバッファ５３は、幾つかのフレームを排出させるためオフチップバッファ１１１へのアクセスを許されることになり、その後データ転送が再開される。
【０１０５】
オフチップバッファ１１１リソースを要求する第１のフレームバッファ（５５、５３、または５３′）は、オフチップバッファ１１１へのアクセスを許されることになる。両方のポートが同時にフレームを受信する場合、ポートＡが最初にアクセスを許可される。一旦、フレームバッファ制御ブロック５６が、オフチップバッファ１１１へのフレームバッファアクセスを与えると、代替ポートの受信非データフレームバッファ５３が満たされ、または初期化が開始され、またはデータ転送が開始されない限り、そのフレームバッファのサービスが続行される。所定のポートについてのフレームは、そのポートへの配送順にオフチップバッファ１１１に転送されることになる。
【０１０６】
ファイバチャンネルからのデータ速度がオフチップバッファ１１１に支持され得ない場合には、フレームバッファ制御器５６とオフチップバッファ１１１間のデータ転送が、バッファ制御インタフェース論理５８によって一時停止させられる。
【０１０７】
図１１は、共通受信路回路５９のブロック図である。この回路は、フレームバッファ（５５、５３、または５３′）の１つから出力されてくるフレームを受け取り、オフチップバッファ１１１用のフレームを作成する。この論理５９はＳＯＦを認識し、妥当性チェックのため受信ヘッダから情報を取得する。ＣＲＣが検査され、フレームがオフチップバッファ１１１の適切なバッファ領域に経路付けされる。
【０１０８】
受信バッファ復号化ブロック５９１は、（入力データ信号ＦＲＭ  ＢＵＦＦＥＲ  ＤＡＴＡ９５７０およびイネーブル信号ＶＡＬ＿ＲＥＡＤ９５７１から導かれる）フレーム開始およびフレーム終了区切り記号を復号化し、フレーム有効性チェックのために共通受信路５９によって使用される信号を発生する。ＥＯＦ区切り記号は、受信路ブロックに対して変換される、組み込まれたエラー状態（フレーム長エラーまたは連続不均衡エラー）を持つかも知れない。
【０１０９】
受信フレーム化状態機械５９２は、フレーム境界を判定するため入力ストリームを監視する。ＳＯＦが検出されたとき、ヘッダの各ワードを取得させ、ＣＲＣチェッカー５９６、ヘッダ妥当性制御器５９５、および（５９９１、５９９２、および５９９３と一緒に）バッファ制御器５９８を動作可能にさせるための信号が発生される。状態機械５９２は、ヘッダ中に受信される無効プリミティブを検査すると共に、許容される最大フレーム長を侵害する転送を検査する。共通受信路５９は、一時的に停止され得るので、フレーム取得および有効性ブロックが適切に動作可能にされるように、状態機械５９２の状態出力はアクティブ後非アクティブになるパルスである。
【０１１０】
受信フレーム長カウンタ（マルチプレクサ５９３１およびカウンタ５９３２）は、受信フレームのヘッダからのＲ＿ＣＴＬフィールドに基づいて、命令、または（信号ＭＡＸ  ＳＩＺＥ  ＩＮＰＵＴＳ９５７２からの）データフレームのいずれかの最大フレーム長を持つフレームの始めにロードされる。ＥＯＦが検出される前にカウンタが零になる場合には、フレーム長エラーが検出され、そのフレームは無効とされる。この機能は、フレーム用のオフチップバッファ１１１内の割付空間を越えることを防止するのに役立つ。
【０１１１】
受信フレームヘッダ取得ブロック５９４は、受信ヘッダの様々なフィールドを取得するために、受信フレーム化状態機械５９２からの信号を使用する。取得された値は、フレーム有効性論理によって使用される。
【０１１２】
フレームが受信されると、ＣＲＣチェッカーブロック５９６が、そのフレームの終了時にＣＲＣを検査する。（ＣＲＣ  ＳＴＡＴＵＳ９５９６によって示された）ＣＲＣエラーが検出された場合には、そのフレームは無効とされる。ＣＲＣチェッカー５９６は、受信フレーム化状態機械５９２によって動作可能にされる。ヘッダフィールドの内容、ペイロードフィールド、およびＣＲＣワードが処理される。
【０１１３】
III. オンチップメモリ内のデータ健全性にファイバチャンネルＣＲＣを使用する方法
【０１１４】
本発明の１つの観点によれば、ファイバチャンネルフレームを一時的に記憶するフレームバッファは、フレームがファイバチャンネルインタフェースの最大データ転送速度で受信させられるようにする。フレームは、その後、より一層遅い、一層管理可能な速度で、オフチップ記憶装置に転送される。データがフレームバッファに記憶されようとする間にデータを保護するため、パリティ、ＣＲＣ、または別の冗長機能など、様々な機構が任意に使用される。
【０１１５】
一実施例においては、受信されたファイバチャンネル巡回冗長コード（「ＣＲＣ」）をデータと共にフレームバッファを通過させることによって、データ健全性検査が高められる（すなわち、ＣＲＣはフレームと共にフレームバッファに記憶され、その後、フレームと共に読み出される）。ＲＡＭを拡張させる特別なパリティビットが取除かれる。（様々な実施例において、フレームバッファは、データフレームバッファ５５および／または受信非データフレームバッファ５３または５３′である。）ＣＲＣは、データがＲＡＭから読みだされた後に、そしてデータがオフチップ（すなわちオフチップバッファ１１１に）転送される前に検査される。入りデータ路上の特別なパリティビットも、インタフェースからフレームバッファの入り側に、およびフレームバッファの出側からＣＲＣチェッカー５９６の入力に、除去される。
【０１１６】
オフチップＲＡＭへのインタフェースは、一度に１個の転送のみを取扱い、オンチップＲＡＭより遅くかつファイバチャンネル転送速度よりも遅いので、共通受信路論理５９は、非データフレームバッファ５３および５３′とデータフレームバッファ５５との間で共有される。ＣＲＣは、フレームがオフチップに行く直前に検査される（すなわち、フレームがオンチップバッファ５３、５３′または５５からオフチップバッファ１１１に転送される）ので、１個のＣＲＣチェッカー５９６のみが必要である。反対に、ＣＲＣがフレームと共にフレームバッファに記憶されず、その後オフチップバッファ１１１への途中で検査される場合には（「ＣＲＣのオンチップフレームバッファ通過」と呼ばれる）、２個のＣＲＣチェッカーが必要とされる（すなわち、前置バッファ路５１および５１′内に配置される）。
【０１１７】
一実施例においては、データが、より一層遅いオフチップバッファ１１１から転送され、フレームバッファ内に一時的に記憶され、ファイバチャンネルインタフェース上の最大データ転送速度で送信されるとき、この機構は逆方向に対しても使用される。
【０１１８】
フレームが受信されると、受信されるフレームの型を判定するため、経路付け制御復号ブロック５９３３によって、Ｒ＿ＣＴＬフィールドが復号化される。Ｒ＿ＣＴＬフィールドは、そのフレームをオフチップバッファ１１１の適切な領域に経路付けするために使用されると共に、どの有効性検査がそのフレームになされべきかを判定する。
【０１１９】
ヘッダ妥当性論理５９５は、受信フレームヘッダの内容を解析する。フレームのＲ＿ＣＴＬフィールドに基づいて、様々なフィールドが検査される。いずれかの有効性検査が非データフレームについて失敗した場合には、そのフレームは無効とされる。データ書き込み転送がアクティブのとき有効性検査がデータフレームについて失敗した場合には、マイクロプロセッサ１１２が通知を受ける。
【０１２０】
受信フレーム状態ブロック５９７は、受信したフレームについての情報を集め、無効データがオフチップに行くことを妨げ、そして信号ＦＲＡＭＥ  ＳＴＡＴＵＳ９５８０を発生する。フレームが有効でない場合には、（データ転送がアクティブでなければ）そのフレームは当然無視される。
【０１２１】
命令カウンタ５９９２は、幾つの命令フレームがオフチップバッファ１１１の命令領域に含まれているかを追跡するために使用される。有効な命令が受信されると、このカウンタ５９９２は増分される。マイクロプロセッサ１１２が命令で終了したとき、そのマイクロプロセッサは、（マイクロプロセッサ１１２からの信号ＭＰＵ  ＤＥＣＲＥＭＥＮＴＳ９５７４を用いて）命令カウンタ５９９２を減分する必要がある。ブロック５９９２は、割込み要求ＣＭＤ  ＲＣＶＤ  ＩＲＱ９５７８を出力する。
【０１２２】
バッファ間信用を与えるため、（マイクロプロセッサ１１２からの信号ＭＰＵ  ＩＮＣＲＥＭＥＮＴＳ９５７５を用いて）どのくらい多くの空間がオフチップバッファ１１１の“他の”領域内に残っているかを探知するために、“他の”空間カウンタ５９９１が使用される。このカウンタ５９９１は、命令でもデータフレームでもない有効なフレームが受信されたとき、またはオフチップバッファ１１１が一杯のときに命令フレームが受信されたときに減分される。マイクロプロセッサ１１２がフレームで終了したとき、別のフレームに対する空間が存在することを示すために、マイクロプロセッサは“他の”空間カウンタ５９９１を増分する必要がある。“他の”空間カウンタ５９９１は、オフチップバッファ１１１の“他の”領域に適合するであろうフレーム数を指示（信号ＯＴＨＥＲ  ＣＯＵＮＴ９５７６および割込み要求ＯＴＨＥＲ  ＲＣＶＤ  ＩＲＱ９５７７）する。
【０１２３】
フレームが受信されると、（他のカウンタ５９９１を減分し、命令カウンタ５９９２を増分するために、信号ＩＮＣＲ／ＤＥＣＲ９５７３を発生する）受信フレームバッファ制御器５９８および最終４発生論理５９９３は、フレームを適切な領域に差し向けるために、オフチップバッファ１１１の論理への信号（ＣＯＮＴＲＯＬＳ  ＦＯＲ  ＯＦＦ−ＣＨＩＰ  ＢＵＦＦＥＲ７５８９）を発生する。
【０１２４】
図１２は、論理の送受信部の制御論理を含む、ファイバチャンネル転送制御回路６０のブロック図である。転送制御回路６０は、転送制御およびバッファ間信用制御６０３を含む。
【０１２５】
データ利用可能／空間カウンタブロック６０４は、動作がデータ書き込みまたはデータ読み出しであるかどうかによって、どの程度多くのオフチップ空間またはデータが利用可能であるかの指示（ＤＡＴＡ  ＡＶＡＩＬＡＢＬＥ６０１９）を与える。データ書き込み転送に関して、データ利用可能／空間カウンタブロック６０４は、ＢＢ＿ＣＲＥＤＩＴが与えられるために、どの程度多くの空間がオフチップバッファ１１１のデータ部分において（フレームの観点において）利用可能であるかを指示するために使用される。データ読み出し転送に関して、データ利用可能／空間カウンタブロック６０４は、どの程度多くのデータフレームがオフチップバッファ１１１において利用可能であるかを指示するために使用される。バッファポインタの差違が、フレーム毎のワード数を示すマイクロプロセッサロード可能な（すなわち、プログラム可能な）値と比較される。
【０１２６】
バッファ間信用制御論理６０３は、フレームが送られるようにさせるため、バッファ信用（信号ＰＯＲＴ  ＢＢ＿ＣＲＥＤＩＴ  ＡＶＡＩＬＡＢＬＥ  ＴＯ  ＴＲＡＮＳＭＩＴ  Ｒ＿ＲＤＹ６０１７）を接続されたポートに与える。この信用は、Ｒ＿ＲＤＹに送ることによって与えられる。いかなるポートに与えられる信用量も、以下によって決定される。
１）ディスクドライブ１００に対して、どの程度多くの受信空間がオフチップバッファ１１１において利用可能であるか。
２）ディスクドライブ１００に対して、どの程度多くの受信空間が受信非データフレームバッファ５３およびデータフレームバッファ５５において利用可能であるか。
３）信用が与えられた場合、ドライブ１００が開かれているポートが利用可能な空間を占有できるフレームを潜在的に送ることができるかどうか。
【０１２７】
バッファ間信用は、ポート毎を基準として決定される。バッファ間信用制御ブロック６０３は、いつ信用が利用可能であるかを示すための信号をループポートＡ／Ｂ開制御ブロック４２および４２′（図６参照）に対して発生する。その後、ループ制御ブロック４０が、Ｒ＿ＲＤＹの送信を制御する。
【０１２８】
転送制御回路６０の残りは、転送中に使用されるカウンタを含む。受信Ｒ＿ＲＤＹカウンタ６０６は、入力ＰＯＲＴ  Ｒ＿ＲＤＹ  ＲＥＣＥＩＶＥＤ６０１０（ポートＡおよびポートＢに対してそれぞれ１個）およびＰＯＲＴ  ＦＲＡＭＥ  ＴＲＡＮＳＭＩＴＴＥＤ６０１１（ポートＡおよびポートＢに対してそれぞれ１個）から、各ポート上でどの程度多くの信用のＲ＿ＲＤＹが受信されたかを判定し、信号ＰＯＲＴ  ＣＲＥＤＩＴ  ＡＶＡＩＬＡＢＬＥ  ＴＯ  ＴＲＡＮＳＭＩＴ  Ａ  ＦＲＡＭＥ６０２０を出力する。送信Ｒ＿ＲＤＹカウンタ６０1は、入力ＰＯＲＴ  Ｒ＿ＲＤＹＴＲＡＮＳＭＩＴＴＥＤ６００１（ポートＡおよびポートＢに対してそれぞれ１個）およびＰＯＲＴ  ＦＲＡＭＥ  ＲＥＣＥＩＶＥＤ６００２（ポートＡおよびポートＢに対してそれぞれ１個）から、各ポート上でどの程度多くの信用のＲ＿ＲＤＹが送信されたかを判定する。シーケンスカウンタ６０７は、データ書き込み転送時に、受信されたフレームが順に到着することを検査するために使用され、かつデータ読み出し転送時に、データフレームのヘッダ内に送信されたＳＥＱＵＥＮＣＥ  ＣＯＵＮＴ６０２２を発生するために使用される。相対的オフセットカウンタ６０８は、データ読み出し転送時に、データフレームのヘッダ内に送信されたＲＥＬＡＴＩＶＥ  ＯＦＦＳＥＴ  ＣＯＵＮＴ６０２３を発生するために使用される。転送長カウンタ６０９は、どの程度多くの転送データがあるかを判定し、転送完了時に指示（ＴＲＡＮＳＦＥＲ  ＬＥＮＧＴＨ  ＣＯＵＮＴ６０２４）を与える。
【０１２９】
（単一フレーム送信路回路７０）
図１３は、ファイバチャンネル用の単一フレーム送信路回路７０のブロック図である。本発明の一実施例は、ループ初期化および応答用の専用転送フレームバッファ７３を含むファイバチャンネルループインタフェース回路を与える。そのような専用の転送フレームバッファ７３を持つことによって、他のポートがデータフレームを送信または受信（すなわち、通信）している間に、デュアルポートノードの１個のポートが初期化または応答フレームを送信することができる。ループが同期喪失や別の問題を経験した場合、ループ１２５０は再初期化される必要があり、専用転送フレームバッファ７３は、デュアルポートノードインタフェースの他のポートに接続された他のループ上で進行しているデータ転送または他の機能を中断させることなく、この機能を生じさせることができる。両方のポートは、同時に同様に初期化され得る。さらに、この専用の転送フレームバッファ７３は、他方のポートが使用されている間に一方のポートから、応答、承諾、または他の非データ転送が送信させられるようにさせる。従って、マイクロプロセッサ１１２と協力して、単一フレーム送信路回路７０は、ノードインタフェース１２２０に対してループ初期化および応答機能を与えるように動作する。転送フレームバッファ７３は、入力ＭＰＵ  ＬＯＡＤＡＢＬＥ７００２（マイクロプロセッサ１１２からのデータ）、ＲＥＣＥＩＶＥ  ＰＡＴＨ  ＤＡＴＡ７００３およびＲＥＣＥＩＶＥ  ＰＡＴＨ  ＣＯＮＴＲＯＬＳ７００４（受信路５０からのフレーム）を受け入れる。転送フレームバッファ７３は、ＭＰＵ  ＲＥＡＤ  ＤＡＴＡ３０９５を出力すると共に、ブロック７４および７６を介して、ＸＭＴ＿ＤＰＴＨ  ＤＡＴＡ７００７（送信されるようとしているＣＲＣを含む出力フレーム）を出力する。
【０１３０】
単一フレーム送信路回路７０は、ループ制御回路４０からの要求を受け入れ、単一フレーム送信フレームバッファ７３に存在するフレームを送信する。この回路７０は、適切なフレーム区切り記号を発生し、フレームバッファからのペイロードおよびヘッダを読み出し、ＣＲＣ発生器７６で適切なＣＲＣを発生する。この回路７０は、また、最新充填ワードを送信するためのループポート回路２０に信号を発生し、フレーム終端（ＥＯＦ）が転送されようとする時を指示し、最新の連続している不均衡に基づいてデコーダにＥＯＦの第２のキャラクタを発生させる。
【０１３１】
単一フレーム送信状態機械７２は、（信号ＳＥＮＤ＿ＦＲＡＭＥ７００１によって）ループ制御回路４０からの要求を受け入れ、フレームを送信する。フレームが送信されると、この状態機械７２は、フレーム区切り記号、ヘッダ、およびペイロードを適切な時に転送させるために、送信マルチプレクサ７４に送られるフレームの各部に対する選択（すなわち、選択信号）を与える。この状態機械７２は、また、ＣＲＣ発生器７６にイネーブルを発生する。また、いつＥＯＦ信号を送信するかを判定するため、８Ｂ／１０Ｂエンコーダ２７（図４を参照）に制御が与えられる。フレームが送信された時、信号が発生され、ループ制御回路４０に送ってその回路に動作を続行させる。
【０１３２】
適切な時間に最終ＣＲＣが出力されるようにするため、ハードウエアがどのくらい長いフレームがあるか判定できるように単一フレーム送信フレーム長カウンタ７１が使用される（ＣＲＣは、一度に一ワードを繰返し計算し、フレームのデータ部分が出力される際に累算される）。カウンタ７１は、フレームの始めに、送信フレーム長レジスタからロードされ、フレームが送信されている間に動作可能にされる。カウンタ７１は、単一フレーム送信状態機械７２によって動作可能にされ、いつＣＲＣ発生器７６を動作可能にするかを判定するため、状態（すなわち、状態情報）を状態機械７２に与える。
【０１３３】
単一フレーム送信出力マルチプレクサ７４の出力は、ＥＯＦの前に含まれるＣＲＣ残留ワードを判定するためのＣＲＣ発生器７６への入力であり、それはマルチプレクサ７９を介してループポート回路２０（図３）に供給される。単一フレーム送信状態機械７２は、このマルチプレクサ７４に対して選択を発生し、フレーム区切り記号、ヘッダ、およびペイロードが適切な時に転送させられるようにする。
【０１３４】
単一送信充填キャラクタ発生器ブロック７５は、Ｋキャラクタ、最新充填ワード、およびＥＯＦ区切り記号が単一フレーム送信路回路７０から送信されているときを判定する。出力信号ＸＭＩＴ  ＣＯＮＴＲＯＬＳ７０１０は、どのループが単一フレーム送信路回路７０へのアクセスを持つかを決定する、送信路マルチプレクサ７９に行く。
【０１３５】
図１４は、ファイバチャンネル送信フレームバッファ７３のブロック図である。この実施例において、単一フレーム送信フレームバッファ７３は、単一フレームバッファ書き込み制御７３３、単一フレームバッファ読み出し制御７３４、および単一フレーム送信フレームバッファＲＡＭ７３５を含む。単一フレーム送信フレームバッファ７３は、受信したループ初期化フレーム、出力ループ初期化フレーム、および出力単一フレームを記憶するために使用される。一実施例においては、送信バッファＲＡＭ７３５の４０ワードが、ポートＡに格納され、４０ワードがポートＢに格納される。
【０１３６】
単一フレームバッファ書き込み制御ブロック７３３は、単一フレームバッファＲＡＭ７３５に対して、アドレス（ＷＰＴＲ１４１１）、データ（ＷＤＡＴ１４１０）、および書き込みイネーブル（ＷＥ１４１２）を発生する。それらの入力は、ＤＡＴＡ  ＦＲＯＭ  ＲＥＣＥＩＶＥ  ＰＡＴＨ１４０１、ＰＯＲＴ  Ａ  ＦＲＡＭＥ１４０３、ＰＯＲＴ  Ｂ  ＦＲＡＭＥ１４０４、登録済ＭＰＵ  ＤＡＴＡ９５３３、および登録済ＭＰＵ  ＡＤＤＲＥＳＳ９５３４を含む。ループ初期化フレームが受信されたとき、妥当性に対する共通受信路５９を介して移動できるまで、そのフレームが受信非データフレームバッファ（５３または５３′）の１つに、最初に記憶される。そのフレームをオフチップバッファ１１１に転送するというよりは、そのフレームは、単一フレーム送信フレームバッファ７３に書き込まれる。これは、また、オフチップバッファ１１１が代替ポート上のデータ転送に一層専用化される。ループポートからのデータは、１６ビット幅から３２ビット幅に変換され、フレームの開始アドレスは、そのフレームが関係するポートに基づいて決定される。
【０１３７】
マイクロプロセッサ１１２は、また、ループ初期化フレームを修正し、または出力フレームを構築するため、単一フレーム送信フレームバッファ７３に書き込みできる。単一フレーム送信フレームバッファ７３内のデータを保護するため、パリティが発生される。
【０１３８】
単一フレーム送信バッファ読み出し制御ブロック７３４は、単一フレーム送信バッファＲＡＭ７３５の読み出しアドレス（ＲＰＴＲ１４１４）を発生し、ＲＡＭ７３５からデータ（ＲＤＡＴ１４１３）を取得する。入力は、ＳＥＮＤ  ＦＲＡＭＥ１４０７およびＸＭＩＴ  ＳＴＡＴＥＳ１４０８を含む。単一フレーム化状態機械７２が、フレームを送信できるようにすると、単一フレーム送信バッファＲＡＭ７３５の読み出しが可能とされる（ＳＩＮＧＬＥ＿ＦＲＡＭＥ  ＴＲＡＮＳＭＩＴ  ＢＵＦＦＥＲ  ＤＡＴＡ１４１５を出力）。マイクロプロセッサ１１２は、このフレームバッファを読み出し、受信したループ初期化フレームにアクセスする。送信フレームバッファＲＡＭ７３５からのデータは、レジスタに取得され、パリティが検査される（出力ＰＡＲＩＴＹ  ＥＲＲＯＲ１４１６を発生）。
【０１３９】
単一フレーム送信バッファＲＡＭ７３５は、同期ＲＡＭおよび、一実施例においては、組込み自己テスト制御器を含む。ＲＡＭは、３６ビット幅（３２ビットデータワード＋パリティの４ビット）と８０位置長を持つ。フレームのヘッダおよびペイロードは、審査のためにマイクロプロセッサ１１２に対して、またはループ１２５０上での送信に対して保持されるよう、送信フレームバッファＲＡＭ７３５中に配置される。一実施例においては、適切な保持時間を与えるために、ＲＡＭに入力される（クロックを除く）すべての入力が遅延される。
【０１４０】
図１５は、フレームを送信するため、ループ制御論理４０からの要求を受け入れるデータ送信路回路８０のブロック図である。回路８０は、適切なフレーム区切り記号を発生し、マイクロプロセッサにロード可能なレジスタからヘッダを構築し、ＣＲＣを発生する。また、回路８０は、最新充填ワードを送信するためのループポート回路２０に信号を発生し、ＥＯＦが転送されているときを示し、現在の連続している不均衡に基づいて、エンコーダにＥＯＦの第２のキャラクタを発生させる。
【０１４１】
データ送信フレーム化状態機械８１は、フレームを送信するためループ制御論理４０から要求（信号ＳＥＮＤ  ＦＲＡＭＥ８００１）を受け入れる。フレームが送信されると、状態機械８１はフレームの各部分に対する選択を与え、フレーム区切り記号、ヘッダ、およびペイロードが適切な時間に転送されるように、マルチプレクサ８６に送信する。また、機械８１は、ＣＲＣ発生器８７に対してイネーブルを発生する。フレームが送信されたとき、ループ制御論理４０に信号が発生され、それを続行させる。
【０１４２】
データ送信フレーム長カウンタ８２は、そのハードウエアにフレームがどの程度の長さかを判定させ、ＣＲＣが適切な時間に発生されるようにするために使用される。データ送信フレーム長カウンタ８２は、送信フレーム長レジスタからのフレームの始めにロードされ、フレームが送信されている間動作可能にされる。データ送信フレーム長カウンタ８２は送信フレーム化状態機械８１によって動作可能にされ、ＣＲＣ発生器８７をいつ動作可能にするかを判定するため、状態を状態機械に与える。
【０１４３】
データフレーム送信出力マルチプレクサ８６の出力は、データ送信路をマルチプレクサ７９に与えるＣＲＣ発生器８７の入力である。データ送信フレーム化状態機械８１は、このマルチプレクサ８６に対する選択を与え、フレーム区切り記号、ヘッダ、およびペイロードが適切な時間に転送されるようにさせる。この入力は、ＦＲＡＭＥ  ＢＵＦＦＥＲ  ＤＡＴＡ８００４、ＨＥＡＤＥＲ  ＲＥＧＩＳＴＥＲＳ８００５、ＴＲＡＮＳＦＥＲ  ＣＯＵＮＴＳ８００６、およびＴＲＡＮＳＦＥＲ−ＲＥＡＤＹ  ＰＡＹＬＯＡＤ８００７を含む。その出力は、ＳＴＡＴＥＳ  ＴＯ  ＦＲＡＭＥ  ＢＵＦＦＥＲ  ＲＥＡＤ  ＣＯＮＴＲＯＬ８００９を含む。マルチプレクサ８６内の区切り記号発生器は、フレーム送信時にどのフレーム開始（ＳＯＦ）およびフレーム終了（ＥＯＦ）プリミティブを使用するかを決定する。
【０１４４】
データフレーム送信出力マルチプレクサ８６の出力は、ＥＯＦ前に含まれるＣＲＣ残留ワードを決定するため、ＣＲＣ発生器８７を介して転送される。ＣＲＣ発生器８７に対するイネーブルは、データ送信フレーム化状態機械８１から来る。また、ＥＯＦ信号をいつ送信するかを決定するための制御が、８Ｂ／１０Ｂエンコーダ２７（図４を参照）に与えられる。ＣＲＣ発生器８７の出力は、ＸＭＴ＿ＤＰＴＨ  ＤＡＴＡ８００８（転送されるべきＣＲＣを含んでいる出力フレーム）である。
【０１４５】
データ転送充填キャラクタブロック８５は、Ｋキャラクタ、最新充填ワード、およびＥＯＦ区切り記号がデータ送信路回路８０から送信されているときを判定する。出力信号ＸＭＩＴ  ＯＵＴＰＵＴＳ８０１０は、どのループがデータ送信路回路８０にアクセスしたかを判定する送信路マルチプレクサ７９に行く。
【０１４６】
送信路マルチプレクサ７９（図３を参照）の出力は、ループポート回路２０内のポートＡおよびポートＢ調整ループ論理２６への入力である。単一フレーム路７０およびデータ路８０からのデータおよび制御信号は、送信路マルチプレクサ７９によって適切なポートに選択される。また、送信路マルチプレクサ７９は、Ｒ＿ＲＤＹプリミティブをポートに振り分ける。これによって、両方のポートに同時に送信させることができる。
【０１４７】
IV. 調整ループのオーバヘッドを低減させるための方法および装置
ファイバチャンネル調整ループ設計１２００において、ループポート１１６のノードインタフェース１２２０は、ループ１２５０へのアクセスに対して調整される必要がある。どのポートがループ１２５０の制御を得るかを判定するために、優先度システムが使用され、ポートがスターブ（starve）されないことを保証するために、“公平”構造が使用される。目標装置として、ディスクドライブ１００は、通常ＣＰＵ１２０２よりも低い優先度が与えられる。より高い優先度の装置がそれらのアクセスを完了するまで、ドライブ１００は調整を得るまで待たねばならないという結果となる。不必要な調整サイクルを避けるために、ループポート１１６のノードインタフェース１２２０がループ１２５０の制御を得ると、そのノードインタフェースは、ループを閉じる前にできるだけ多くのフレームを送る。しかし、データがもはや利用可能ではないとき、ループポート１１６のノードインタフェース１２２０は、ループ１２５０を閉じ、他のポートがループ１２５０にアクセスすることを可能にさせる。これは、ある別の制御器技術において使用される方法である。本発明は、ポートへのデータ利用可能性に基づいて、ループ１２５０を閉じるかどうかの決定ルールを変更することによって、ループ性能を高めるための機構を提供する。従って、ループ全体のオーバヘッドが低減される。
【０１４８】
ある別の制御器技術においては、フレーム終了区切り記号が送信されるとき、ポートは、他のフレームが利用可能であるかどうかを判定する。データがもはや利用可能ではない場合（例えば、全フレームが送信に対して利用可能ではない）には、ループ１２５０は閉じられる。その後すぐにデータは利用可能になる。従って、ポートは後で再び調整を行なう必要があり、転送を続行する前に調整を得る。これが転送の最終フレームが利用可能になる際に起こる場合、転送の完了が遅延され、次の命令が処理され得る前に遅れが生ずることになる。
【０１４９】
本発明は、データが即座にポートに対して利用可能となる場合、ループ１２５０がそのポートによって開に保持されるようにさせる、制御器技術設計の機構を提供する。これにより、ループポート１１６のノードインタフェース１２２０が出力データ転送中に調整しなくてはならない回数が低減され、従って、転送をより早く完了させることができる。以下の条件の両方が成立するとき、（そのループのポートの続いている制御を正当に評価するために）ポートに対して利用可能になる十分なさらなるデータに備えて、ループ１２５０は開に保持される。
・少なくともＸフレームが利用可能なオフチップであり、
・データの少なくともＹワードが、データフレームバッファ５５において利用可能である。
【０１５０】
そのような一実施例においては、Ｘの値（ここで、Ｘは、ループ１２５０を開状態に保持するためにオフチップバッファ１１１において利用可能であることを必要とするフレーム数を表わす）およびＹの値（ここで、Ｙは、ループ１２５０を開状態に保持するためにオンチップバッファにおいて利用可能であることを必要とするワード数を表わす）は、それぞれ別個に（例えば、マイクロプロセッサ１１２によるファームウエアコードによって）プログラム可能である。別の実施例においては、（必ずしもフレーム数として特定されない）所定のデータ量がオフチップバッファ１１１において利用可能であるとき、ループ１２５０は開状態に保持される（そのような一実施例においては、オフチップバッファ１１１において利用可能であることが必要な所定のデータ量は、プログラム可能である）。
【０１５１】
別の実施例においては、（必ずしもワード数として特定されない）所定のデータ量がオンチップバッファ１１９において利用可能であるとき、ループ１２５０は開状態に保持される（そのような一実施例においては、オンチップバッファ１１９において利用可能であることが必要な所定のデータ量は、プログラム可能である）。一実施例においては、所定量のデータが利用可能であるが（少なくとも１個の半フレームオンチップおよび少なくとも１個のフレーム利用可能オフチップ）、フレーム全体が利用可能なオンチップであるまでフレームの転送が開始しない場合、ループ１２５０は開状態に保持される。
【０１５２】
例えば、一実施例においては、オンチップデータフレームバッファ５５は、少なくとも６個のデータフレームを保持するに充分なほど大きい（すなわち、２１１２バイトの最大フレームサイズの６フレーム）。送信されているデータは、（例えば、ディスクプラッタ１３４から）最初にオフチップバッファ１１１に転送され、その後オンチップデータフレームバッファ５５に転送される。典型的には、ほぼ毎秒１０６メガバイトまでの速度で、データがデータフレームバッファ５５から転送され、一方、一実施例においては、オフチップバッファ１１１からオンチップデータフレームバッファ５５への転送は、より遅い速度で行われる。全フレームより少ないフレームが既にオンチップデータフレームバッファ５５に転送されている場合、それらのデータが外部への転送を要求される前に、フレームの最後の部分がオンチップデータフレームバッファ５５に転送される限り、ほぼ毎秒１０６メガバイトのファイバチャンネル全速度でフレーム転送を開始し、全フレームの転送を完了させることが可能である。
【０１５３】
従って、本発明の一実施例によれば、少なくとも２分の１のデータフレームがオンチップデータフレームバッファ５５に含まれ、かつ少なくとも１個のデータフレームがオフチップバッファ１１１に含まれている場合には、ループ１２５０は開状態に保持される。そのような一実施例においては、ループ１２５０の制御を保つために（“ループを開に保持する”ために）必要とされるこのデータ量は、オンチップバッファ５５においてほぼ１０００バイトのデータ（すなわち、２１１２バイトフレームの２分の１）であり、そしてオフチップバッファ１１１においてほぼ２０００バイトのデータ（すなわち、２１１２バイトフレーム分）である。両者の量は、マイクロプロセッサ１１２によって設定されるプログラム可能な値である。一実施例においては、丁度説明したように、所定量のデータが利用可能な場合には、ループ１２５０は開に保持される。しかし、フレームの転送は、全フレームが利用可能なオンチップである後でのみ開始する。そのような一実施例においては、ＣＦＷ（最新充填ワード）信号は、全フレームがオンチップであり、フレームの送信が開始できるまで、ループ１２５０上に送信される。
【０１５４】
外部転送に利用可能なフレーム数の計数は、本発明の一実施例のオフチップバッファ１１１における制御器によって生成される。データが、データフレームバッファ中に転送するために利用可能であるかどうかを判定するために、ファームウエアプログラム可能な計数Ｘフレーム（ループを開に保つためにオフチップバッファ１１１において必要とされるフレーム数）が、転送に利用可能なフレーム数の計数に対して比較される。データフレームバッファは、オフチップのより遅いメモリからデータを一時的に蓄えるために使用されるオンチップＲＡＭである。従って、データは、完全なファイバチャンネルインタフェース速度で送信され得る。ループ１２５０を開に保つために十分なデータがすでにデータフレームバッファにあるかどうかを判定するために、第２の比較器が、データフレームバッファ内で利用可能なデータ量を、ファームウエアプログラム可能な計数、Ｙワード（ループを開に保つためにオンチップバッファ５５において必要とされるワード数）と比較するために使用される。ＸおよびＹの値は、この論理が様々なオフチップランダムアクセスメモリ（“ＲＡＭ”）ソリューションおよび転送速度で使用されるようにさせるため、ファームウエアプログラム可能である。
【０１５５】
本発明の１つの目標は、ループ１２５０を開に保持し、データがすぐにポート１１６に対して利用可能であるときに余分な調整サイクルを避けることにある。これは、ループ１２５０上の他のポートが転送を実行することを防止するので、待ちが延長された時間（例えば、ヘッドスイッチを実行するために必要な時間）となる場合に、利用可能となるデータを待ちながらループ１２５０が開に保持されてはならない。
【０１５６】
（結論）
ループ初期化と応答のための専用の送信フレームバッファ（７３）を含むファイバチャンネルループ・インタフェース回路（１２２０）について述べた。このような専用の送信フレームバッファ（７３）を有することにより、他方のポート（１１６）がデータフレームを送信あるいは受信中に、デュアルポートノード（１２２０）の一方のポート（１１６）が初期化、あるいは応答フレームを送信できるものとなる。専用の受信バッファ（５３および５５）もまた、２ポートノード（１２２０）の各ポート（１１６）に対して設けられる。フレームとともにファイバチャンネルから受信した巡回冗長コード情報は、３つのフレームバッファ（５３、５３′および５５）の１つに格納される。これらのデータとＣＲＣは、後で、フレームバッファ（５３、５３′および５５）に存在する間にデータの健全性を保証するために検査される。ループの制御のための調整に要する時間を減らすために、プログラミングにより選択的に決定された最小量のデータ（プログラム可能なデータと称する）が送信のために利用可能である限り、ループ（１２５０）の制御は維持（即ち、ループ接続は開状態を保持）される。
【０１５７】
本発明は、オンチップメモリ中でのデータ健全性のためのファイバチャンネル巡回冗長コード（ＣＲＣ）を用いるための通信チャンネルシステム（１２２０）を提供するものである。本システム（１２００）は、第１のポート（１１６）と第２のポート（１１６）を有し、各ポート（１１６）はファイバチャンネル調整ループ通信チャンネル（１２５０）をサポートし、各通信チャンネル（１２５０）は通信チャンネル（１２５０）上のデータ送信中に巡回冗長コードを含む、第１のチャンネルノード（１２２０）を含んでいる。本システム（１２００）は、第１のチャンネルノード（１２２０）に位置し、フレームと、受信されたフレームに対応したＣＲＣとを通信チャンネル（１２５０）から受信するオンチップフレームメモリ（５３または５５）と、オンチップフレームメモリ（５３または５５）中に存在する受信されたフレームのデータ健全性検査のための受信された対応したＣＲＣを用いる健全性装置（５９６、５５３）を含んでいる。
【０１５８】
本システムの１つの変形は、さらに、動作中にオンチップフレームメモリ（５３または５５）と健全性装置（５９６、５５３）とを結合するオフチップメモリ（１１１）と、受信したフレームをオンチップメモリ（５３または５５）からオフチップメモリ（１１１）に移動させる間に巡回冗長コードを検証する健全性装置内の検証回路（５９６）とを含んでいる。
【０１５９】
このような実施例は、さらに、データがオフチップメモリ（１１１）からオンチップメモリ（５５）に移動する際に、パリティを生成しデータに付与するパリティ生成回路（５５３）を含み、ここで健全性回路は、さらに、データフレームをオフチップメモリ（１１１）に移動させる間に、巡回冗長コードを検査し取り除く。この実施例の他の様態では、オンチップフレームメモリ（５５）は、さらに、巡回冗長コードを含まないデータフレームをオフチップメモリ（１１１）から受信し、また、システムは、さらに、オフチップメモリ（１１１）から受信したデータフレームに基づき巡回冗長コードを生成するＣＲＣ発生器（８７）と、生成された巡回冗長コードを含むデータフレームをオフチップメモリ（１１１）から通信チャンネル（１２５０）上に送信する送信機（トランシーバ１１５の一部）を含んでいる。さらに、他の実施例では、送信されるべきデータフレームを、オフチップメモリ（１１１）からオンチップメモリ（５５）に転送し、パリティを付与するもののＣＲＣ情報は含めずに、オンチップメモリ（５５）に格納する。そのような一実施例では、通信チャンネル（１２５０）からオンチップメモリ（５５）に転送された受信データフレームを、ＣＲＣは付与するもののパリティ情報は含めずに、オンチップメモリ（５５）に格納する。
【０１６０】
１つの変形として、本発明によりシステム（１２００）を構築し、ここでは、該システム（１２００）は、さらに、動作中に第１のチャンネルノード（１２２０）と結合する磁気ディスク記憶装置（１２５６）と、動作中に第２のチャンネルノード（１２２０）と結合するコンピュータシステム（１２０２）とを含むものとする（即ち、コンピュータシステム（１２０２）は第２のチャンネルノード（１２２０）を有するものとする）。第２のチャンネルノード（１２２０）は、動作中に第１のチャンネルノード（１２２０）と結合し、ファイバチャンネル調整ループ通信チャンネル（１２５０）を介して、第１のチャンネルノード（１２２０）と第２のチャンネルノード（１２２０）との間でデータを転送する。
【０１６１】
本発明の他の観点は、ディスクドライブ（１００）を提供する。ディスクドライブ（１００）は、回転ディスク（１３４）と、回転中のディスク（１３４）と交渉をもつトランスデューサ（１５０）と、第１のポート（１１６）と第２のポート（１１６）を有する第１のチャンネルノード（１２２０）を含み、各ポート（１１６）はファイバチャンネル調整ループ通信チャンネル（１２５０）をサポートする。各通信チャンネル（１２５０）は、通信チャンネル（１２５０）上のデータ送信に巡回冗長コードを含んでいる。第１のチャンネルノード（１２２０）は、データと通信するためのトランスデューサ（１５０）と動作中に結合する。ディスクドライブ（１００）は、第１のチャンネルノード（１２２０）にオンチップで位置し、フレームと、受信したフレームに対応したＣＲＣを通信チャンネル（１２５０）から受信するオンチップフレームメモリ（５３または５５）と、オンチップメモリ（５３または５５）中に存在する受信フレームのデータ健全性を検査するために、受信した関連ＣＲＣを用いる健全性装置（５９６，５５３）を含んでいる。一実施例では、ディスクドライブ（１００）は、さらに、動作中にオンチップフレームメモリ（５３または５５）と健全性装置（５９６，５５３）と結合するオフチップメモリ（１１１）と、受信したフレームをオンチップメモリ（５３または５５）からオフチップメモリ（１１１）に移動させる間に巡回冗長コードを検証する健全性装置（５９６，５５３）中の検証回路（５９６）とを含んでいる。
【０１６２】
本発明のさらに他の観点は、通信方法を提供する。本方法は、
（ａ）第１のチャンネルノード（１２２０）の第１ポート（１１６）と第２ポート（１１６）のそれぞれの上で、ファイバチャンネル調整ループ通信チャンネル（１２５０）をサポートし、
（ｂ）通信チャンネル（１２５０）からフレームを受信し、ここで、受信したフレームは、受信したフレーム中の他のデータに基づく巡回冗長コードを含み、
（ｃ）巡回冗長コードを含む受信フレームをフレームバッファ（５３または５５）に格納し、
（ｄ）フレームバッファ（５３または５５）とは独立したメモリ（１１１）に、受信フレームを格納し、
（ｅ）受信フレームを独立したメモリ（１１１）に転送する間に、巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するステップを含んでいる。
一実施例では、本方法は、
（ｆ）送信すべきフレームをオンチップフレームバッファ（５５）に載せ、
（ｇ）送信すべきフレーム中のデータに基づき巡回冗長コードを生成し、
（ｈ）巡回冗長コードを含み、送信すべきフレームを通信チャンネル（１２５０）に送信するステップを含んでいる。
本方法の一実施例では、搭載ステップ（ｆ）は、さらに、
（ｆ）（ｉ）送信すべきフレームのデータのパリティを生成し、
（ｆ）（ｉｉ）送信すべきフレームのデータにパリティを付与し、移動ステップ（ｄ）は、さらに、
（ｄ）（ｉ）受信フレームを独立したメモリ（１１１）に移動させる間に巡回冗長コードを取り去るステップを含むものである。
本方法の他の実施例では、受信ステップ（ｂ）は、さらに、
（ｂ）（ｉ）受信フレームを通信チャンネル（１２５０）から受信している間に、巡回冗長コードを検証することにより、受信フレームの正しさを検査するステップを含むものである。
【０１６３】
一実施例では、本方法は、さらに、
（ｉ）ファイバチャンネル調整ループ通信チャンネル（１２５０）を介して、動作中に第１のチャンネルノード（１２２０）と結合する磁気ディスク記憶装置（１２５６）と第２のチャンネルノード（１２２０）を有するコンピュータシステムとの間で、データを転送するステップを含み、ここで、第２のチャンネルノード（１２２０）は、通信チャンネル（１２５０）によって、動作中に第１のチャンネルノード（１２２０）と結合する。
【０１６４】
本発明の、さらに他の観点は、第１ポート（１１６）と第２ポート（１１６）を有するチャンネルノード（１２２０）を含み、各ポート（１１６）は、ファイバチャンネル調整ループ通信チャンネル（１２５０）をサポートし、各通信チャンネル（１２５０）は、通信チャンネル（１２５０）上のデータ送信中に巡回冗長コードを含む、通信チャンネルシステム（１２００）を提供する。本システムは、また、巡回冗長コードを含むフレームを、チャンネルノード（１２２０）から受信するバッファ（５３または５５）と、バッファ（５３または５５）とは独立したオフチップメモリ（１１１）とを含む。本システム（１２００）は、また、受信フレームをバッファからオフチップメモリに移動させ、受信フレームをオフチップメモリに移動する間に巡回冗長コード（ＣＲＣ）を検証することにより、受信フレームの正しさを検査するための手段（本明細書全体で記述されるものとして）を含んでいる。一実施例では、本移動手段は、さらに、フレームが検査されオフチップメモリに移動される際に、ＣＲＣを取り除くための手段を含んでいる。
【０１６５】
このように、本発明は、フレームが１つ以上の専用の非データバッファ（５３）および専用のデータバッファ（５５）の双方または何れか一方に格納される際に、フレームと、フレームの受信ＣＲＣとの間の調和をとることにより、データ検査能力の顕著な向上を図るものである。他の実施例では、２つの非データバッファ（５３）が設けられ、デュアルポートファイバチャンネルインターフェースノード（１２２０）の両方の入力ファイバ（１１７）上で同時に受信するように動作する。いくつかの実施例では、１つのデータバッファ（５５）が設けられ、デュアルポートファイバチャンネルインターフェースノード（１２２０）のいずれか一方の入力ファイバ（１１７）上で受信するように動作する。いくつかの実施例では、フレームをオンチップバッファ（５３または５５）からオフチップメモリ（１１１）に移動させている間に、フレームの巡回冗長コードを検証する、単一のＣＲＣチェッカー（５９６）が（コスト削減のために）設けられる。いくつかの実施例では、それぞれの送信路上に（コスト削減のために）、フレームをオンチップバッファ（７３または５５）からファイバチャンネル（１２５０）に移動させている間に、適切な巡回冗長コードを生成する、単一のＣＲＣ発生器（非データフレームに対する７６およびデータフレームに対する８７）が設けられる。
【０１６６】
上述の説明は、例示であって、これに限定されるものではないことを理解されるべきである。前述の説明では、様々な実施例の構造および機能と一緒に、本発明の様々な実施例の数多くの特徴および利点が説明されたが、上述の説明を再検討することで、当業者にとって多くの他の実施例および細部にわたる変更が明らかになるであろう。従って、本発明の範囲は、特許請求の範囲と共に、そこに記載された権利範囲に等価なすべての範囲を考慮して定められるべきである。
【図面の簡単な説明】
【０１６７】
【図１】図１は、ファイバチャンネル・ノードインターフェースをもつディスクドライブ１００のブロック図である。
【図２】図２は、本発明を採用した情報処理システム１２００のブロック図である。
【図３】図３は、ファイバチャンネル・ノードインターフェースチップ１１０のブロック図である。
【図４】図４は、ファイバチャンネル・ループポート回路２０のブロック図である。
【図５】図５は、一実施例での、ループオープンを保持するために用いられるコンパレータ論理３０のブロック図である。
【図６】図６は、ファイバチャンネル・ループ制御回路４０のブロック図である。
【図７】図７は、ファイバチャンネル・受信路回路５０のブロック図である。
【図８】図８は、ファイバチャンネル・プリバッファ受信路回路５１のブロック図である。
【図９】図９は、ファイバチャンネル・受信フレーム非データバッファ回路５３のブロック図である。
【図１０】図１０は、ファイバチャンネル・データフレームバッファ回路５５のブロック図である。
【図１１】図１１は、ファイバチャンネル・共通受信路回路５９のブロック図である。
【図１２】図１２は、ファイバチャンネル・転送制御回路６０のブロック図である。
【図１３】図１３は、ファイバチャンネル・送信路回路７０のブロック図である。
【図１４】図１４は、ファイバチャンネル・送信フレームバッファ回路７３のブロック図である。
【図１５】図１５は、ファイバチャンネル・データ送信路回路８０のブロック図である。
【図１】
0004547452.tif 000002
【図２】
0004547452.tif 000003
【図３】
0004547452.tif 000004
【図４】
0004547452.tif 000005
【図５】
0004547452.tif 000006
【図６】
0004547452.tif 000007
【図７】
0004547452.tif 000008
【図８】
0004547452.tif 000009
【図９】
0004547452.tif 000010
【図１０】
0004547452.tif 000011
【図１１】
0004547452.tif 000012
【図１２】
0004547452.tif 000013
【図１３】
0004547452.tif 000014
【図１４】
0004547452.tif 000015
【図１５】
0004547452.tif 000016