JP4741735B2 - ディスク・コントローラ・メモリ・アーキテクチャ用システムおよび方法 - Google Patents
ディスク・コントローラ・メモリ・アーキテクチャ用システムおよび方法 Download PDFInfo
- Publication number
- JP4741735B2 JP4741735B2 JP2000615882A JP2000615882A JP4741735B2 JP 4741735 B2 JP4741735 B2 JP 4741735B2 JP 2000615882 A JP2000615882 A JP 2000615882A JP 2000615882 A JP2000615882 A JP 2000615882A JP 4741735 B2 JP4741735 B2 JP 4741735B2
- Authority
- JP
- Japan
- Prior art keywords
- fifo
- data
- memory
- transfer
- memory circuit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
- Information Transfer Systems (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
- Communication Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
(技術分野)
本発明は概してディスク・コントローラ、より詳しくはマルチポート・メモリ・アーキテクチャを有するディスク・コントローラに関する。
【0002】
【従来の技術】
(背景技術)
従来のコンピュータ・システムは一般的にいくつもの機能ユニットを含んでいる。これらの機能ユニットは中央処理ユニット(CPU)、メイン・メモリ、I/Oデバイスおよび磁気ディスク・ドライブを含んでいる。従来のシステムにおいて、メイン・メモリは、システム・バスまたはローカル・メモリ・バスを介してCPUに強力に結合(接続)されている。このメイン・メモリは、CPUに対して、実行時間でメイン・メモリに記憶されたデータまたはプログラム情報への迅速なアクセスを提供する。一般的に、メイン・メモリはランダム・アクセス・メモリ(RAM)回路で構成される。CPUとメイン・メモリの組み合わせを含むコンピュータ・システムは、しばしばホスト・システムと呼ばれる。
【0003】
メイン・メモリは一般的に磁気ディスク・ドライブよりも小さい。メイン・メモリは普通揮発性であり、一方磁気ディスク・ドライブは不揮発性である。従って、プログラミング・データ情報はしばしば磁気ディスク・ドライブに記憶され、必要に応じてメイン・メモリに読み取られる。CPUと接近して結合されたメイン・メモリとは逆に、磁気ディスク・ドライブは普通CPUにより遠くに結合されている。磁気ディスク・ドライブがCPUにより遠くに結合されているので、磁気ディスク・ドライブへのアクセスは一般的に遅く、またメイン・メモリへのアクセスよりもより複雑である。ディスク・コントローラは一般的にホスト・システムを磁気ディスク・ドライブに結合させるとともに、磁気ディスク・ドライブのホスト・システムとのインターフェースの複雑な詳細(detail)を処理する。ホスト・システムとディスク・コントローラ間の通信は普通、多様な標準I/Oバス・インターフェースの一つを使用して提供される。
【0004】
磁気ハードディスク・ドライブ・アセンブリは普通、一つまたはそれ以上の磁気ディスクで構成されている。各ディスクは一般的に多数の同心円リングないしトラックを有しており、これにデータが記憶される。トラック自体は、最も小さいアクセス可能なデータ・ユニットであるセクターにさらに分割される。セクターは適切なトラックの上方に磁気ヘッドが配置されることによってアクセスされる。トラックの第1セクターは一般的にインデックス・パルスによって識別される。各々の別のトラックのセクターのスタートは、セクター・パルスで識別される。所望のセクターがヘッドの下方に回転されるまでドライブが待機し、データが読取りまたは書込みを実行する。データが一度に1ビットで、連続してアクセスされる。普通、ディスク・ドライブ中の各ディスクは、それ自身の読取/書込ヘッドを有している。
【0005】
ディスク・ドライブは、ディスク・コントローラに接続される。ディスク・コントローラは数々の機能を実行し、例えば、デジタルデータのアナログヘッド信号への変換、アナログヘッド信号のデジタルデータへの変換、ディスク・フォーマッティング、エラーチェック、論理−物理アドレスのマッピング、データ・バッファリングである。例えば、ディスク・ドライブは、一般的にドライブからのデータをフォーマットする。ドライブからのデータは、シリアルに配列されており、ディスク・コントローラは、シリアルデータをパラレル配列に変換する。
【0006】
データ・バッファ機能が、ホストと大容量記憶メモリ間のデータ伝送に使用される。ディスク・ドライブがホストからデータを供給ないし受け入れることのできる速度が、ホストがデータを同様に読取りないし供給する速度と異なるので、データ・バッファリングが必要とされる。従って、ディスク・コントローラは従来通りハード・ドライブに読取り、書込みされるデータを一時的に記憶し、接続されたI/Oバスの速度にデータを同期させるバッファ・メモリを含んでいる。従って、バッファは、データがドライブとホスト間で交換されるレートと、データがドライブに書込み、読取りされるレートとをデカップル(decouple)する。バッファ機能は、各セクターが全体として読取り、または書込みされるので特に必要である。
【0007】
I/Oバスとディスク・ドライブ両方にアクセスを提供することに加えて、バッファ・メモリはディスク・コントローラのローカル・プロセッサによってしばしばアクセスされる。従って、ディスク・コントローラ・バッファ・メモリはディスク・コントローラの多数の機能部によって、またホストによってアクセスされる。従来のシステムにおいて、バッファ・メモリへのアクセスの競争は、ディスク・ドライブとホスト間だけでなく、しばしばバッファ・メモリと機能ユニット間のデータ伝送レートを大きく制限するボトルネックとなる。
【0008】
従来のディスク・コントローラに見られる別の機能的なボトルネックは、ローカル・プロセッサである。ローカル・プロセッサは一般的に、全体としてディスク・コントローラの管理だけでなく、I/Oバス・インターフェース回路、バッファ・メモリ、ディスク・フォーマッタを管理する。さらに、従来のシステムはローカル・プロセッサを必要とし、データ伝送を低レベルでバッファ・メモリを介して管理する。一般的な汎用プロセッサは、効率的な方法でこのようなアプリケーション特定機能を処理するのに不適である。
【0009】
加うるに、従来のディスク・コントローラはそのプロセッサを十分に利用していない。例えば、ディスクからI/Oバスへの伝送データが一つまたはそれ以上のディスク・コントローラ・プロセッサを使用している間、伝送がデータを供給するディスク能力に勝っておれば、ディスクが追い付くまでプロセッサは無駄に休止させられていることになる。
【0010】
【課題を解決するための手段】
(発明の開示)
本発明は概して大容量記憶デバイスへの書込み、またはこれから読取られるデータをバッファし、アクセスする効果的、かつ、融通性のある方法およびシステムに関する。
【0011】
一実施例において、ディスク・コントローラは大容量記憶デバイスとI/Oバス間で伝送されるデータをバッファするのに使用されるデータ・バッファを含んでいる。別の実施例において、データ・バッファはマルチポート・メモリを含んでいる。このマルチポート・メモリは、一つまたはそれ以上のプロセッサだけでなく、例として、ディスク・チャネルおよびI/Oチャネルのような複数のチャネルに結合(接続)されている。
【0012】
一実施例において、マルチポート・メモリはランダム・アクセス・メモリと先入れ先出し(FIFO)メモリ両方として使用されている。従って、先入れ先出しメモリとして使用されるときは、マルチポート・メモリはディスク・チャネルとI/Oチャネル間のデータをバッファするのに使用される。マルチポート・メモリはコンテキスト切り替えのために使用され、ここで一つまたはそれ以上のプロセッサからのレジスタ・データがメモリの内外でスワップされる。本発明の一実施例によって提供される効果的なレジスタ・スワッピングが、プロセッサが好都合にタスク間の迅速な切り替えをすることを許容する。これは第1タスクが待機状態にあれば非常に有利である。なぜなら、プロセッサ時間を浪費するよりはむしろ、待機状態のための待機の間の休止を終了させ、プロセッサが別のタスクに迅速に切り替え、待機状態が第1タスクの終了後、第1タスクにスイッチバックするからである。
【0013】
さらに、一実施例において、ランダム・アクセス機構がマルチポート・メモリに記憶された選択データを迅速に検索する。例えば、メモリがファイバー・チャネル・フレームおよび関連するCRCデータを記憶するように使用されれば、CRCデータが、全フレームを読み取る必要なしに、直ちに検索することができる。
【0014】
一実施例において、マルチポート・メモリはDMA(ダイレクト・メモリ・アクセス)メモリである。一つの例としての実施例において、マルチポート・メモリのポートはランダム・アクセス・ポート、FIFOアクセス・ポート、レジスタ・アクセス・ポート、および(または)バッファ・コントローラDMAポートを含んでいる。ランダム・アクセス・ポートはマイクロプロセッサ・インターフェース・バスに結合され、次にこれが、FIFOアクセス・ポートだけでなく、マイクロプロセッサとマイクロコントローラのような一つまたはそれ以上のプロセッサに結合されている。レジスタ・アクセス・ポートもマイクロコントローラのような一つまたはそれ以上のプロセッサに結合されている。バッファ・コントローラDMAポートがCRC(巡回冗長コード)チェッカーと、バッファ・メモリに結合されている。
【0015】
一実施例において、マルチポート・メモリは64バイトからなり、またファイバー・チャネル・プロトコル命令全体を保有することができる。さらに、マルチポート・メモリに関連するステート・マシンがいくつもの命令を実行することができる。別の実施例において、一つまたはそれ以上の命令がI/Oパケットないしフレームを効果的に管理するように構成されている。なおも別の実施例において、ステート・マシン命令が、次に示す命令の一つまたはそれ以上を含んでいる。すなわち、フェッチ・カレントFCP(ファイバー・チャネル・プロトコル)命令、アップデート・カレントFCPポインタ命令、ロードFIFO命令、アンロードFIFO命令、CRCを伴うロードFIFO、CRCを伴うアンロードFIFO、バッファ・メモリへの書込命令、およびバッファ・メモリからの読取命令である。一実施例において、命令はマイクロプロセッサまたはマイクロコントローラからのさらなる介入なしに全ファイバー・チャネル命令をFIFOに伝送せしめることで提供される。一実施例はダイレクト・フレーム・アクセスをファイバー・チャネル・フレームに提供する。別の実施例において、命令は停止および(または)休止されることもある。
【0016】
【発明の実施の形態】
(好ましい実施例の詳細な説明)
本発明は概して大容量記憶デバイスへの書込み、またはこれから読取られるデータをバッファリングする効果的、かつ、融通性のある方法およびシステムに関する。
【0017】
図1に示したように、電子システム100の一実施例において、ディスク・コントローラ102がホスト・システム104を、ディスク・ポート136を介して例えば磁気ディスク・ドライブまたは光ディスク・ドライブのような大容量記憶デバイス106にインターフェースするのに使用される。図示ディスク・コントローラ102はマイクロプロセッサ108、埋込コントローラ110、バッファ・メモリ112および外部DMA(ダイレクト・メモリ・アクセス)デバイス114を含んでいる。ディスク・コントローラが、デュアル・ループを有しているファイバ・チャネル・バスのようなI/Oバス116を介してホスト・システム104に結合(接続)されている。埋込コントローラ110は、マイクロプロセッサ108に結合されたマイクロプロセッサ・インターフェース118を含んでいる。マイクロプロセッサ・バス130がマイクロプロセッサ・インターフェース・ロジック118を外部DMAインターフェース134、マイクロコントローラ120、バッファ・コントローラ122および埋込コントローラ110内に配備されたファイバー・チャネル・インターフェース124に結合させている。次に、外部DMAインターフェース134が外部DMAデバイス134に、またバッファ・コントローラ122に結合されている。バッファ・コントローラ122は、バッファ・メモリ112とファイバー・チャネル・インターフェース124にも結合されている。ファイバー・チャネル・インターフェース124は、インターフェース124内のファイバー・チャネル送受信回路を介してファイバー・チャネル・ループ116に結合されている。ファイバー・チャネル・ループ116は一つまたはそれ以上のホスト104にも結合されている。ファイバー・チャネル・インターフェース124はファイバー・チャネル・プロトコルとSCSIプロトコル両方と通信するように使用することができる。
【0018】
データ・フロー・コントローラ126が、外部DMAインターフェース134、バッファ・コントローラ122およびファイバー・チャネル・インターフェース124に結合されている。ECCエンジン・モジュール132が、データ・バス126を介してディスク・フォーマッタ128、バッファ・コントローラ122およびファイバー・チャネル・インターフェース124に結合されている。
【0019】
ファイバー・チャネル・インターフェース124がファイバー・チャネル・プロトコルを実行する。一実施例において、ファイバー・チャネル・インターフェース124は、ファイバー・チャネル信号送信インターフェースのFC−1およびFC−2層を含むFC−AL(ファイバー・チャネル調停ループ)プロトコルを実行する。ファイバー・チャネル・インターフェース124は、エンコーダとデコーダとクロック・スキュー・マネジメントのためのフレーム・バッファとファイバー・チャネル・プロトコル・ハンドラー・マシンを含む。ファイバー・チャネル・インターフェース124は、ファイバー・チャネル・ループから受信されたデータ列を承認し、フレーム・バッファ内の適切なエリアにルートする。ファイバー・チャネル・インターフェース124の伝送経路が、フレーム・バッファからファイバー・チャネルにフレームを伝送する。ファイバー・チャネル・インターフェース124はフレーム・デリミタとフレーム・コントロールを自動的に処理する。
【0020】
一実施例において、ディスク・フォーマッタ128がインターフェースをディスク106に提供する。ディスク・フォーマッタ128は、ローカル・プロセッサ108から制御情報とパラメータを受信する。次に、ディスク・フォーマッタ108が要請アクションを実行する。マイクロプロセッサも、ディスク・ヘッドのサーボ・コントロールのための信号処理と、ファイバー・チャネルによってデータを通信するのに使用されるSCSIプロトコル管理のような他のタスクを処理する。マイクロコントローラ120は、ファイバー・チャネル伝送管理タスクのような低レベル・タスクを含む他のタスクを実行するのに使用され、これによってプロセッサ108がオフロード(アンロード)される。従って、一実施例において、コントローラ・ワークロードが、より効果的なタスク実行を許容するマルチプル・プロセッサ内で好都合に分割される。
【0021】
一実施例において、マイクロプロセッサ120は、8ビット・マシンであり、8ビットかまたは16ビットDMA伝送のいずれかを支持することができる。さらに、マイクロコントローラ120はレジスタと、数学的演算のために使用されるアキュムレータを含む内部ALUを有している。
【0022】
一実施例において、バッファ・コントローラ122は同期DRAM(SDRAM)コントローラと一体化されたマルチプル・チャネルDMAコントローラである。別の実施例において、バッファ・コントローラ122は4メガバイトまでのバッファ・サイズを支持する。しかし、なおさらに別の実施例において、4メガバイトより大きいかまたは小さいサイズも同様に支持される。バッファ・コントローラ122が高速バッファ・メモリ112の初期化と検証(ベリファイ)も提供し、また、初期化時に電力を低減させる。バッファ・コントローラ122はバッファ・メモリ112の制御も提供し、一実施例において、同期DRAM(SDRAM)を使用して実行される。しかし、非同期RAMまたはスタティックRAMのような他のメモリ・アーキテクチャも同様に使用できる。
【0023】
バッファ管理は4チャネル、高速、バースティングDMAコントローラによって提供される。バッファ・コントローラ122は、多様なモジュールとインターフェース間のインターフェースを提供する。例を挙げると、バッファないしホールディング・メモリ112、ディスク・チャネル、ECCチャネル、ファイバー・チャネル、マイクロプロセッサ108およびマイクロコントローラ120を含む。バッファ・コントローラ122は、SDRAMバッファ・メモリ112に出入りするデータの移動を調整し、バッファする。各DMAチャネルがデータのマルチプル・ブロックのDMAバーストを支持し、高帯域伝送を許容する。各DMAチャネルが、関連するコントロール、コンフィギュレーションおよびバッファ・メモリ・アドレス・レジスタを有している。一実施例において、バッファ・メモリ112はアクセス・ターンないしアクセス期間を備えた他のユニットによって分担されている。期間内で、伝送が完了するか、または関連する期間が経過するまで、所与のデータ・ソースがデータをバーストする。しかし、多数のDMAチャネルが、異なるクロックで稼働するか、またはバッファ・コントローラ122の速度とは異なる速度で稼働するモジュールに結合される。これによって、以下に説明するように、FIFO(先入れ先出し)メモリとして構成されたメモリ・ユニットが同期およびバッファ・チャネル・データに使用される。
【0024】
バッファ・コントローラ122がマイクロプロセッサ・アドレス・デコーディング、バッファ・リソースのための優先権アービトレーション、ブロックCRC(BCRC)チェッキング、および自動DRAMリフレッシュ・コントロールも提供する。一実施例において、CRCカルキュレータ/チェッカがフィードバックを伴うアキュムレータを含んでいる。
【0025】
データ・フロー・コントローラ126が、データ伝送時間を、一実施例においては、ディスク106とファイバー・チャネル・ポート間のデータのフローを自動的にモニターし、制御することによって短縮する。これらのチャネル間のデータ・フローの自動制御は、一般的なディスク対ファイバー・チャネル・データ伝送中に発生する多数の割り込みを減じる。さらに、データ・フロー・コントローラ126がバッファのオーバーフローとアンダーフロー状態を自動的に阻止する作用をし、一方でバッファがいっぱいになるかまたは空になる前に、ディスク・フォーマッタまたはファイバー・チャネルDMAチャネルを一時的にサスペンドするか、または休止する。
【0026】
ホスト104とディスク106間の代表的なデータ・フロー操作について次に説明する。一般的な書込操作は次のように進行する。ホスト104がファイバー・チャネル・バス116により書込コマンド(命令)をディスク・コントローラ102に送る。命令がファイバー・チャネル・インターフェース124を通過し、次にバス・コントローラ124を介してバッファ・メモリ112にロードさされる。ディスク・コントローラへのホスト・パスをチャネル1と呼ぶ。一度、書込命令がバッファ・メモリ112に書き込まれると、マイクロプロセッサ108がバッファ・メモリ112からの命令を読取るとともに、命令書込操作のための準備中にディスク・コントローラ・レジスタを適切に設定する。ディスク・コントローラ・レジスタは、バッファ・コントローラ122と関連するレジスタ、ディスク・フォーマッタ128およびデータ・フロー・コントローラ126を含んでいる。一度、セットアップが完了し、ディスク・コントローラ102が既に書込データを受信したことをマイクロプロセッサ108がホスト104に通知する。次に、ホスト104がバッファ・メモリ112へのDMA(ダイレクト・メモリ・アクセス)伝送を初期化する。バッファ・ロード操作中、CH1モジュール310が、書込データに基づいてCRCを連続して計算する。計算されたCRCが関連する書込データによりバッファ・メモリ112に記憶される。データ・フロー・コントローラ126が、所与の多数のセクターがバッファ・メモリ112に記憶されたときをモニターし、バッファ・メモリ112からバッファ・コントローラ122を介してディスク・フォーマッタ128への転送およびここからの転送が初期化され、ディスク・フォーマッタ128がデータを書込チャネルを介してディスク106に書き込む。データがバッファ・メモリ112から読み取られ、ディスク106に書き込まれると、関連するECCコードが計算され、セクター・データの最後に付け加えられる。書込操作が完了すると、マイクロプロセッサ108が割り込みを発生し、これがファイバー・チャネル・インターフェースによってホスト104に転送され、これによってホスト104が書込操作の完了を通知する。
【0027】
読取操作が書込操作と同様の形態で、しかしこれとは逆に実行される。ホスト104が読取命令をディスク・コントローラ102に送り、次に読取命令をバッファ・メモリ112に記憶させる。こうしてマイクロプロセッサ108がバッファ・メモリ112からの命令を読取り、ディスク・コントローラ102の種々の機能ブロックを初期化して読取りを実行する。データがディスク106から読み取られ、ディスク・フォーマッタ128を介してバッファ・コントローラ122に通され、またバッファ・コントローラ122からバッファ・メモリ112に通される。データ及び関連するCRCの両方が一緒にバッファ・メモリ112に記憶される。ECCモジュール132がデータ転送をモニタし、このデータ記憶操作を通してECCコードを計算する。ECC計算の完了時に、ECCモジュール132が、読取データ中に発生したエラーとバッファ・メモリ内のこれらのエラーを適切に修正することを決定する。CH1モジュール310がバッファ・メモリ112からデータを読取り、次にバッファ・メモリ112からの結果として記憶されたセクターのCRCをチェックし、エラーが全くないことを保証する。一度、データ中に、エラーが全く残っていないことが決定されると、データはバッファ・メモリ112からバッファ・コントローラ122を介してまたホスト・バスから転送される。CRCコードが、このプロセスにおいて排除され、これによってデータのみがホスト104に送られる。
【0028】
図2はバッファ・コントローラへのインターフェースの一実施例を示す。バッファ・コントローラは、マイクロプロセッサ・インターフェース202、マイクロコントローラ・インターフェース204、ECCインターフェース206、ディスク・フォーマッタ・インターフェース208、ホスト・インターフェース212、およびSDRAMバッファ・メモリ・インターフェース210に結合されている。バッファ・コントローラは対応するFIFOを利用して種々のインターフェース間で転送されるデータをバッファする。
【0029】
図3はバッファ・コントローラ122の一実施例をより詳細に示した図である。バッファ・コントローラ122は、4個のポートを備えたFIFOとして構成可能なメモリ・ユニット302を含んでいる。例えば、MP FIFO302はランダムまたはダイレクト・アクセス・インターフェース、FIFOまたはインダイレクト・アクセス・インターフェース、レジスタ・アクセス・インターフェース、およびバッファ・コントローラDMAインターフェースを有している。FIFO302は多数のクライアントと他のデバイスによってアクセスされ、また交換局 (スイッチング・ステーション)として作用し、データが一つの場所から他の場所にルートされている間、一時的に記憶する。図示実施例において、DMAインターフェースはバッファ・メモリ112へのアクセスを提供するように使用される。レジスタ・アクセス・インターフェースは、その内のFIFOの全てまたは一部がマイクロプロセッサによって内部レジスタ・ファイルとしてローカル的にアドレス可能であり、いくつかのアクセス経路の一つをマイクロコントローラ120へ提供する。インダイレクト・アクセス・インターフェースは、その内のFIFOの全てまたは一部がFIFOポインタを使用してアドレス可能であり、ここでも別のアクセス経路を提供する。ダイレクト・アクセス・インターフェースは、その内のFIFOの全てまたは一部がランダム・アクセス・メモリとしてアドレス可能であり、またメモリマップされ、なおも別のアクセス経路を提供する。
【0030】
一実施例において、FIFO302の全てまたは一部が、マイクロプロセッサ108および(または)マイクロコントローラ120のような一つまたはそれ以上のプロセッサのアドレス・スペース内にある。別の実施例において、FIFO302は多少のポートを有している。多数のタイプのFIFOアクセス・ポートを設けることにより、柔軟性、有効性およびFIFO302を通るデータ転送量が大きく高められる。FIFO302はさらにディスク・フォーマット・テーブル、データ、プログラム・コード、およびFIFO302内に、またはバッファ・メモリ112内に記憶されたファイバー・チャネル命令ブロックにアクセスするマイクロプロセッサ108を提供する。例えば、FIFO302はバッファ・メモリ112内に記憶されたプログラムをオーバーレイするのに使用できる。従って、FIFO302はMP(マイクロプロセッサ)FIFOまたはMP DMA FIFOとも呼ばれる。
【0031】
一実施例において、MP FIFO302は64バイトの記憶容量を含んでいる。以下に説明するように、これが好都合に十分な記憶容量のメモリを提供し、完全なファイバー・チャネル命令と、関連するCRCとバッファ長さフィールドを保持する。ファイバー・チャネル命令のフォーマットを図7に示す。FIFO302はバッファ・メモリ112へのデータ、またこれからのデータをバーストするのに使用できる。従って、データ転送待機時間が大きく短縮される。ランダム・アクセス・ポートが、マイクロプロセッサ・バスおよびマイクロコントローラ・バス130を介してアクセスできる。これらはマイクロプロセッサ108とマイクロコントローラ120にそれぞれ接続されている。さらに、マイクロコントローラ120がレジスタ・アクセス・ポートを介してMP FIFO302にアクセスできる。バッファ・コントローラDMAポートがCRCチェッカとジェネレータにだけでなく、SDRAMバッファ・メモリ112にもインターフェースを提供する。種々のバッファ・コントローラ機能ブロックないしモジュールが内部バッファ・コントローラ・データ・バスによって相互結合されている。従って、一実施例において、FIFO302はランダム・アクセス・メモリとしてダイレクト・アドレスすることによりアクセスできる。さらに、MP FIFO302は、FIFOアクセス・レジスタないしポートを介してFIFO302にロードおよびアンロードし、またこれからロードし、アンロードして先入れ先出しメモリとしてアクセスすることができる。
【0032】
図4はマルチ・アクセス・チャネルを伴うMP FIFO302のより詳細な一実施例を示す。一実施例において、MP FIFO302は16x32アレイ402内で組織化された64バイトまで記憶する。従って、FIFOアレイ402は16個の32ビットワードをホールドできる。一実施例において、FIFOアレイ402はデュアル・ポート非同期スタティックRAM素子を使用して実行される。二つのRAMポートの一つが読取ポートであり、他のRAMポートが書込ポートである。読取ポートおよび書込ポートは各々別々に、かつ、独立して制御される。読取ポートおよび書込ポートは一つまたはそれ以上のインターフェースまたはアクセス・ポートを介してアクセスすることができる。一実施例において、FIFOアレイ402は、内部レジスタ・ファイルとして、マイクロコントローラ120のような一つまたはそれ以上のプロセッサにアクセス可能である。従って、FIFOアレイ402は少ない時間で、ないし管理オーバーヘッドでマイクロコントローラ120によって迅速にアクセスすることができる。これは外部メモリからのもっと遅くアクセスする従来のディスク・コントローラとを対比したものである。
【0033】
図4に示したように、一実施例において、MP FIFO302はバッファ・メモリ転送アドレス・レジスタ404、バッファ・メモリ転送カウンタ406、MP FIFO命令レジスタ408、FIFO書込ポインタ410、FIFO読取ポインタ412、FIFO利用カウンタ414、FIFOアクセス・レジスタ416、FCP命令フェッチ・アドレス・レジスタ420、422、およびステート・マシン418を含んでいる。上述したレジスタおよびカウンタはデータのMP FIFO302への転送およびこれからのデータの転送を制御するのに使用される。FIFOアレイ402は内部マイクロコントローラ・レジスタ・ファイルに直接メモリマップされる。一実施例において、レジスタ、カウンタ、およびFIFOアレイ402は、マイクロプロセッサ108および(または)マイクロコントローラ120によってランダム・アクセス・メモリとしてアクセス可能である。次に説明するように、ファイバー・フレームへのアクセスが非常に融通性があり、またランダムFIFOロケーションに配置された関連するCRCデータをロケーティングすることが提供される。
【0034】
一実施例において、セマフォが、FIFOリソースにアクセスを試みて、マイクロプロセッサ108およびマイクロコントローラ120のようなマルチ・デバイス間の矛盾(不一致)を回避するのに使用される。従って、一実施例において、レジスタがセマフォ・グラント・ビットを記憶するのに使用される。ポインタ、カウンタ、アクセス・レジスタ等々のようなFIFO302を使用すること、またはFIFO情報を修正することに使用する試みをする前に、リクエスト・デバイスが最初にセマフォを獲得することを試みる。
【0035】
MP FIFO命令レジスタ408が、バッファ・メモリ112からMP FIFO302への転送、またはMP FIFO302からバッファ・メモリ112への転送を初期化するのに使用される。多様なFIFO命令がFIFO302とバッファ・メモリ112間のデータ転送を制御するのに使用される。転送命令は、普通、四つのグループに分類することができる。これらの命令グループにはロード/アンロード命令、読取/書込命令、制御命令、および自動化命令が含まれる。命令のいくつかはファイバー・チャネル・フレームにダイレクト・フレーム・アクセスができる。ロード/アンロード・データ転送命令は、先入れ先出しメモリとしてFIFO302を処理する。ロード/アンロード・データ転送命令は、MP FIFO書込ポインタ410、MP FIFO読取ポインタ412、およびMP FIFO利用カウンタ414を使用してFIFO302のロードおよび(または)アンロードを実行する。一実施例において、一つまたはそれ以上の転送命令がFIFOサイズより大きい転送を処理するように構成される。
【0036】
読取/書込データ転送命令が、ランダム・アクセス・メモリのようにFIFOを処理する。一実施例において、読取/書込命令がFIFO302内のロケーション・ゼロでスタートするデータを読取り、書込みする。別の実施例において、データ転送が他のFIFOメモリ・アドレスで開始する。
【0037】
クリアFIFO命令のような制御命令が、関連するカウンタとレジスタをクリアすることによってFIFOをクリアするのに使用される。さらに、一つのまたはそれ以上の制御命令が目下進行中の任意の命令を休止または停止するのに使用される。フェッチFCP命令およびアップデート・カレントFCPコマンドポインタ命令のような自動化命令が、バッファ・メモリ112等からのファイバー・チャネル命令フレームのような命令をFIFO302へのフェッチまたは転送を効率的に自動化する。上述したように、一実施例において、FIFO命令はステート・マシンによって実行される。
【0038】
FIFO302が先入れ先出し方式でアクセスされるときに、FIFO読取/書込ポインタ412、410が、現在の読取/書込ロケーションのトラックを維持するのにそれぞれ使用される。書込ポインタ410が現在のFIFO書込操作のロケーションないしアドレスを制御する。書込ポインタ410はFIFOアレイ402の開始アドレスに関連するバイト・オフセットを含んでいる。一実施例において、書込ポインタ410が、パワオン・リセットのときにまたはMP DMA FIFOリセット命令の受信時にゼロに初期化される。同様にして、読取ポインタ412が現在のFIFO読取操作のロケーションないしアドレスを制御する。読取ポインタ412はFIFOアレイ402の開始アドレスに関連するバイト・オフセットを含んでいる。一実施例において、読取ポインタ412がパワオン・リセットのときにまたはMP DMA FIFOリセット命令の受信時にゼロに初期化される。
【0039】
FIFO利用カウンタ414がFIFO利用カウントのトラックを維持するのに使用される。例えば、FIFO利用カウンタ414は利用されたFIFOメモリ・ロケーションの量をトラックし、従って、利用されていないFIFOロケーションの数をトラックする。一実施例において、利用カウンタ414がローカル・マイクロプロセッサ108および(または)マイクロコントローラ120によってレジスタとして読取りまたは書込みされる。読取り可能カウントが、FIFOアレイ402内に記憶されたバイト数を提供する。一実施例において、バイト数が最も近いワードの境界に丸められる。FIFOカウントは、データがFIFOアレイ402から読み取られるにつれて、減少する。従って、一実施例において、アクセス・レジスタ416を介する4バイト読取操作が、4バイトの最後が読み取られたときに、4だけカウントを減らす。同様にして、FIFOアレイ402からの二つの16ビット・ハーフワードの読取りが、最後の16ビットのハーフワードが読み取られたときに、FIFOアレイ402がFIFOカウントを4だけ減らす。さらに、FIFOカウントが、FIFOアレイ402からの32ビット・ワードが読み取られたときに、4だけ減らす。アレイ402からのデータ読取りはバッファ・メモリ112のような別のメモリに記憶される。
【0040】
MP FIFOアクセス・レジスタ416がマイクロプロセッサ108によって使用され、FIFOアレイ402に対してデータの読取りと書込みがされる。従って、アクセス・レジスタ416に書込みされたデータは、次に書込ポインタ410によって指示されたFIFOロケーションに書込みされる。書込ポインタ410は一般的に次に述べるような書込みアクセスをインクリメントする。同様にして、データがアクセス・レジスタ416を介して読み取られるときに、FIFO読取カウンタがインクリメントされる。一実施例において、バイトの変化する数がアクセス・レジスタ416を介して読取り、または書込みされる。従って、例として、1バイトか、または2バイトのいずれかがアクセス・レジスタ416を使用する一つの操作で読取り、または書込みされる。FIFOアレイ402へのSDRAMアクセスが次に説明するようにステート・マシン418によって提供される。
【0041】
バッファ・メモリ112へのデータの転送、またはこのメモリからの転送のときに、MP FIFOバッファ・メモリ転送アドレス・レジスタ404が使用される。バッファ・メモリ転送アドレス・レジスタ404は、転送が実行される前に適切なバッファ・メモリ・アドレスでロードされる。バッファ・メモリ転送カウンタ406は、バッファ・メモリ112に転送されるバイトの数のトラックを維持するように使用される。転送カウンタ406が、バイト数のような転送されるべきデータの数に対応する数にセットする。一実施例において、バイト・カウントは4の倍数である。好都合なことに、バイト・カウントはFIFOアレイ402のサイズを超えることができる。一実施例において、転送カウントは64Kバイトまで転送するようにセットされる。別の実施例において、転送カウント406は64Kよりも大きいカウントにセットできる。従って、本発明の一実施例において、ブロック転送はFIFOサイズに限定されない。FIFOアレイ402が、データのFIFO302への転送中、いっぱいになれば、データがFIFOアレイ402から読み取られるまで、転送はサスペンド(待機)される。同様にして、FIFOアレイ402が転送中、いっぱいになれば、データがFIFOアレイ402にロードされるまで、転送がサスペンドされる。
【0042】
一実施例において、マイクロプロセッサ108またはマイクロコントローラ120のようなデバイスは、FIFO命令が実行されている間、MP FIFOアクセス・レジスタ416を介してFIFO302にアクセスすることができる。従って、例えば、マイクロプロセッサまたはマイクロコントローラが、FIFO302がいっぱいになるにつれて、FIFO302から読み取ることができる。同様にして、マイクロプロセッサ108またはマイクロコントローラ120が、FIFが読取られ、または空になるにつれて、FIFO302に書き込むことができる。
【0043】
先入れ先出しメモリとしてのMP FIFO302の操作につき、ここに説明する。一実施例において、FIFOアクセス・レジスタ416への書込みはデータをして、書込ポインタにロードされるオフセットに記憶せしめる。書込ポインタが、データがFIFOアクセス・レジスタ416に書き込まれる時間ごとにサーキュラ・ファッション(循環形態)でインクリメントされる。アクセス・レジスタ416への書込操作が試行されたときに、ポーズ(休止)信号が発生され、そのときに利用カウンタがFIFOサイズに等しくカウントする。これが、FIFOデータが上書きされないことを保証する。メモリ・ロケーションが利用可能になるまで、ポーズ信号がデバイスをして、マイクロプロセッサ108またはマイクロコントローラ120のようなFIFO302に書込みを停止せしめる。メモリ・ロケーションは、アクセス・レジスタからの読取操作の実行によって利用可能になり、これによって利用化カウントをデクリメントする。休止機能がFIFOサイズよりも大きくなるFIFO302への、またこれを介してのデータ転送を許容する。FIFO302が、書込工程または読取工程中に、いっぱいになるかまたは空になれば、工程は終了するのではなく単に休止される。従って、休止機能は、オーバーフロー状態がデータ転送中に発生しないことを保証する。
【0044】
さらに、FIFOメモリ・ロケーションが、利用化カウンタをクリアないしゼロにするFIFOクリア命令の実行時に利用可能となる。
【0045】
FIFOアクセス・レジスタ416の読取りにより、読取ポインタのオフセットに配置されたデータが読み取られ、読取ポインタを循環態様(circular fashion)にインクリメントせしめる。利用化ワード・カウントが、読取操作が実行される毎に、デクリメントされる。FIFO利用化カウントがゼロのとき、FIFOアクセス・レジスタからの読取操作が試行されれば、休止信号が発生される。一つまたはそれ以上のFIFOメモリ・ロケーションがいっぱいになるか、またはロードされるまで、休止信号がデバイスをして、マイクロプロセッサ108、マイクロコントローラ120またはDMAチャネルのようなFIFO302を読み取らせしめる。メモリ・ロケーションがアクセス・レジスタからの書込操作の実行によってロードされ、これによって利用化カウントがインクリメントされる。従って、データ転送中のアンダーフロー状態が発生しないことを、休止機能が保証する。
【0046】
これまでに説明したように、一実施例において、MP FIFOアレイ402がマイクロプロセッサ108またはマイクロコントローラ120によって直接的、かつ、ランダムにアクセスされる。MP FIFOアレイ402を形成するのに使用されるスタティックRAM素子が、64バイトのランダム・アクセス・メモリとしてMP FIFO302を読取りできるようにする。アレイ402がマイクロプロセッサ・アドレス・スペースおよびマイクロコントローラ・アドレス・スペース両方にマップされる。一実施例において、直接アドレス可能ランダム・アクセス・アレイとしてMP FIFO302の読取り、または書込みは、操作の先入れ先出しタイプに関連したMP FIFOレジスタまたはカウンタに影響しない。
【0047】
MP FIFO302は、コンテキスト切り替え操作中、マイクロプロセッサまたはマイクロコントローラの内部レジスタ情報を記憶するために使用される。従って、マイクロプロセッサ108またはマイクロコントローラ120は、FIFOアレイ402からの、およびこれへのレジスタ・ファイル・データを迅速にスワップすることができる。本発明の一実施例によって提供される有効なレジスタ・スワッピングは、好都合にプロセッサをして迅速な切り替え(スイッチ)タスクを許容する。
【0048】
コンテキスト・スイチッングがディスク・コントローラ・タスクをより効果的な方式で実行されるようにする。例えば、ディスク106からファイバー・チャネル・インターフェース124へのデータの転送中に、マイクロコントローラ120のような一つまたはそれ以上のディスク・コントローラ・プロセッサが使用されれば、転送がデータを供給するディスク能力を勝ることになり、この期間中ディスク106がこれに追いつくまでの無駄な休止よりむしろマイクロコントローラのいくつかの他のタスクの実行する方がより効果的である。例によれば、付加的なディスク・データが発生するのを待機している間、キャッシュ・データを異なるホストに送ることが有利である。従って、本発明の一実施例は、別のタスクを実行中、一つの操作のコンテキストをFIFO302内で蓄えることを許容する。FIFOアレイ402がマイクロコントローラ120の内部レジスタ・ファイルとしてアクセス可能であるように、コンテキスト・スイッチングが本発明の一実施例で特に迅速に実行される。従って、マイクロコントローラ120は、FIFOアレイ402へ、またはこれからコンテキスト情報を迅速にスワップすることができる。このようにコンテキストは、バッファ・メモリ112のような、より遅い二次的メモリ内に記憶されるべきではない。FIFOアレイ402のサイズとコンテキスト・データ量に依存して、FIFOアレイ402は同時に多数のコンテキストを記憶するのに使用できる。
【0049】
コンテキスト情報が、フレーム・カウント、シーケンス・カウント、転送カウント等々のようなタスクのトラックを維持するのに使用される適切な情報を含んでいる。従って、一実施例において、転送が利用可能データを使い果たせば、転送操作はサスペンドされ、操作のコンテキストがFIFOアレイ402に記憶されることになる。キャッシュ・データのサイズに依存して、コンテキストが数回変更される。
【0050】
記憶されたコンテキストは、多様な技術を使用してリストアされる。例えば、記憶されたコンテキストは、一度付加的なデータが、サスペンドされた転送のために利用可能であれば、リストアされる。リストアされたコンテキストは、もはや必要でなければ、既存のコンテキストに上書きできる。別の方法を使用して、コンテキストはFIFOアレイ402にスワップバックすることができ、また置換されたコンテキストが同時にFIFOアレイ402からスワップされる。
【0051】
図3を参照して、SDRAMコントローラ304とアービタ・モジュール306がバッファ・メモリ112にアクセスするのに使用される。マルチ・リクエストがアクティブであるとき、アービタ306がリクエスターを選択し、アクセス期間を確立する。次に、アービタ306が、リクエスターにアクセス・ターンを認める。SDRAMコントローラ304が、バッファ・メモリ112とバッファ・コントローラ・データ・バス間のデータの移動を処理する。
【0052】
上述したように、特定命令がMP FIFO302内に記憶されたデータへのアクセスを容易にすることを提供する。一実施例において、FIFOステート・マシン418が以下の表1にリストした命令を受容し、実行する。
【0053】
一実施例において、命令が命令レジスタ400に書き込まれたときに、転送が開始される。MP DMA FIFOコマンド・アクティブ・ビットがステータス・レジスタ内にセットされ、FIFO命令が実行される工程内にあることを指示する。次の表1は、命令レジスタ408のために割り当てられたビットの一実施例を示す。
【0054】
【表1】
表1を参照して、コマンド・レジスタ408のビット15−8がリザーブされる。LBA(ロジカル・ブロック・アドレス)フォーマット・ビット(8)がセットされたとき、CRCハードウエア・アキュムレータがシードとして反転LBAで初期化される。そうでなければ、CRCアキュムレータが、一実施例において、全て1であるシード(seed)をちょうど使用する。一実施例において、それ専門のハードウエアCRCアキュムレータの使用が、このタスクでプロセッサをロード・ダウンせずにCRCをして迅速に計算せしめる。
【0055】
命令レジスタ408にロードされた命令が割り込み信号を発生せしめる。一実施例において、命令が完了し、また「インタラプト・ウエン・コンプリート・ビット(7)」がコマンド・レジスタ408にセットされたときに、割り込みが発生する。「コマンド・アクティブ・ビット」がステータス・レジスタにセットされ、一方コマンドはなおもアクティブのままである。さらに、命令の完了時に、「コマンド・コンプリート・ビット」が、ステータス・レジスタにセットされる。一実施例において、割り込みがマイクロコントローラ120またはマイクロプロセッサ108のようなプロセッサに発せられる。受信プロセッサが割り込みをマスクし、別のプロセッサかまたはホスト104に割り込みをパスする。
【0056】
ビット6−4の説明は後述する。下記の表2は、コマンド・レジスタ408のビット3−0によって規定された操作を示す。
【0057】
【表2】
「クリアFIFO」命令(コマンド)がセット、または、FIFO読取りおよび書込みポインタ412、410をゼロにクリアする。一実施例において、FIFOアレイ402のコンテンツは、クリアFIFO命令により不変にされる。一実施例において、クリアFIFO命令が発せられ、一方他の命令がアクティブになる。
【0058】
「ストップFIFO」命令が、任意のアクティブFIFO命令を停止し、FIFOステート・マシン418をリセットする。一実施例において、「ストップFIFO」命令が発せられ、一方他の命令がアクティブになる。一実施例において、ポインタ410、412およびFIFOアレイ402のコンテンツが「ストップFIFO」命令によって不変にされる。
【0059】
「ロードFIFO」命令がデータをバッファ・メモリ112からMP FIFO302に転送する。データが、MP FIFO書込ポインタ410によって規定されたロケーションで開始してFIFOアレイ402にロードされる。転送されるべきバイト数がバッファ・メモリ転送カウンタ406にセットされる。転送のためのバッファ・メモリ開始アドレスが、バッファ転送アドレス・レジスタ404にセットされる。好都合なことに、転送されるべきバイト数がFIFOアレイ402のサイズを超えることが認められる。従って、転送はいずれの所望のサイズとすることができる。一実施例において、転送カウンタは64バイトFIFOアレイのサイズと比較して、4Kバイトまでのサイズの転送を管理するように大きさが決められる。しかし、転送カウンタは所望により、より大きいかまたはより小さい転送を処理するように大きさを決めることができる。
【0060】
一実施例において、4Kバイトが一つのロード命令の結果として転送することができる。FIFO302がいっぱいで、転送が未完了であれば、「ロードFIFO」操作がサスペンドされる。ステータス・レジスタ内にセットされたMP DMA FIFOフル・ビットがセットされ、FIFOアレイ402がいっぱい (フル) であることを指示する。FIFO302が空になり始め、またMP DMA FIFOフル・ビットがクリアされたときに、転送が自動的に再開する。
【0061】
図8はロードFIFO命令操作の一例を示す。FIFOアレイ402が、「xx」で示された「ドント・ケア」情報を含んでいると想定される。書込ポインタ(WP)410および読取ポインタ(RP)412が「0」にセットされ、これによってFIFOアレイ402の物理的開始アドレスが指示される。読取ポインタ412が書込ポインタ410と同じアドレスを指示したときに、FIFOアレイ402は、利用カウントに依存して、空であるか、いっぱいであるかのいずれかである。どれだけのFIFOワード・ロケーションが使用されたかを指示するFIFOワード・カウントが「0」であれば、FIFOアレイ402が空であることを指示している。バッファ・メモリ転送カウンタ406が「32」でロードされると、32バイトの指示がバッファ・メモリ112からFIFOアレイ402に転送される。明瞭にするために、本例においては、バッファ・メモリ112は連続番号でロードされているが、一実施例において、実際のバッファ・メモリ・コンテンツは「ロードFIFO」命令の操作に作用しない。
【0062】
一度「ロードFIFO」命令がコマンド・レジスタ408によって受信されると、バッファ・メモリ112からFIFOアレイ402への32バイトの転送が生じる。バッファ・メモリ・データが、書込ポインタ410によって指示されたロケーション、本例では「0」の開始でFIFO302に書き込まれる。書込ポインタ410は、各バイトが転送され、またFIFOアレイ402にロードされるようにインクリメントされる。この工程は、転送カウントによって特定されたバイト数、本例では32が転送されまで反復される。図8に示したように、一度「ロードFIFO」命令が完了すると、FIFOアレイ402は転送データを含み、書込ポインタ410が32にインクリメントされ、読取ポインタ412が0を維持し、またFIFOワードが8になる。一実施例において、転送データもバッファ・メモリ112内に維持される。
【0063】
「アンロードFIFO」命令がデータをMP FIFO302からバッファ・メモリ112に転送する。データが、MP FIFO読取ポインタ412によって規定されたロケーションの開始でFIFOアレイ402からアンロードされる。転送されるべきバイト数が、バッファ・メモリ転送カウンタ406内にセットされる。転送のためのバッファ・メモリ開始方向アドレスが、バッファ転送アドレス・レジスタ404内にセットされる。「ロード命令」によるように、転送されるべきバイト数がFIFOアレイ402のサイズを超えるように許可される。FIFO302が空であり、転送が未完了であれば、「アンロードFIFO」操作がサスペンドされる。ステータス・レジスタ内でクリアされた「MP DMA FIFOノット・エンンプティ」ビットが、FIFOアレイ402が空であることを指示するようにセットされる。FIFO302がいっぱいになり始め、またMP DMA FIFOノット・エンプティ・ビットがセットされたときに、転送が再開される。
【0064】
図9は「アンロードFIFO」コマンド操作の一例を示す。書込ポインタ(WP)410が目下「32」にセットされ、また読取ポインタ(RP)412が「0」にセットされている。どれだけ多くのFIFOワード・ロケーションが使用されるかを示すFIFOワード・カウントが「8」であれば、FIFOアレイ402内に8ワードがあることを示している。バッファ・メモリ転送カウンタ406が「32」でロードされると、32バイトの指示がFIFOアレイ402からバッファ・メモリ112に転送される。明瞭にするために、本例において、FIFOアレイ402は連続番号でロードされているが、実際のバッファ・メモリ・カウンタは「アンロードFIFO」命令の操作に作用しない。
【0065】
一度、「アンロードFIFO」命令がコマンド・レジスタ408によって受信されると、FIFOアレイ402からバッファ・メモリ112への32バイトの転送が生じる。データが読取ポインタ412によって指示されたロケーションの開始で、本例では「0」でFIFO302から読み取られる。読取ポインタ412が、各ワードが転送され、またバッファ・メモリ112にロードされるにつれて、4だけインクリメントされる。この工程が、転送カウンタによって特定されたバイト数、本例では32が転送されるまで、反復される。図8に示したように、一度「アンロードFIFO」命令が完了すると、バッファ・メモリ112が転送データを含み、書込ポインタ410が32を維持し、読取ポインタ412が32にインクリメントされ、またFIFOワード・カウントが0になり、FIFOが空であることを示す。一実施例において、たとえFIFOアレイ402が空であっても、データがFIFOアレイ402から消去されない。
【0066】
「BCRC(ブロックCRC)チェックによるFIFOロード」命令が、データをバッファ・メモリ112からMP FIFO302に転送し、一方CRCチェックが実行される。このコマンドは関連するセクターCRCを伴うディスク・セクターを転送するために特に有利である。データが、MP FIFO書込ポインタ410によって規定されたロケーションでの開始でFIFOアレイ402にロードされる。転送されるべきバイト数はバッファ・メモリ転送カウンタ406内にセットされる。転送のためのバッファ・メモリ開始ソース・ドアレスがバッファ転送アドレス・レジスタ404内にセットされる。転送されるべきバイト数はFIFOアレイ402のサイズを超えることが認められる。一実施例において、転送されるべき最終ワードであるブロックCRCが、チェックされる。CRCチェックが、ブロックCRCが有効であることを指示すれば、MP DMA FIF CRCグッド・ビットがステータス・レジスタにセットされる。「BCRCチェックによるFIFOロード」操作が、FIFO302がいっぱいで、転送が未完了であれば、サスペンドされるか、または休止される。転送は、FIFO302が空になり始めると、自動的に再開される。
【0067】
休止特性はバッファ・メモリ112から、関連するエラー検出および(または)修正コードで、FIFO302よりもサイズが多量の大きいデータ・ブロックを転送するために特に有利である。エラー検出コードは、例によれば、CRCである。従来の技術を使用することで、FIFOアレイ402よりも大きいデータ・ブロックの転送は、FIFOアレイ402とサイズにおいて同じであるいくつかの小さいブロックとして大きいブロックを処理することによって不都合に実行される。従って、この大きいブロックは一連の小さい、分離した転送として転送される。しかし、この従来技術は、全ブロックのためのであるCRCの計算を困難にし、あるいは各FIFOサイズの転送の開始時にCRCアキュムレータのリシードを必要とすることによって実行が遅くなる。これとは逆に、本発明の一実施例は、転送の工程に渡って蓄積されたCRCで、リシード(reseed)なしに、全ブロックを一つのブロックとして処理することが許容される。
【0068】
図10は「BCRCチェックによるFIFOロード」命令操作の一例を示す。FIFOアレイ402が、「xx」で示された「ドント・ケア」情報を含むと想定されている。書込ポインタ(WP)410と読取ポインタ(RP)412が「0」にセットされ、これによってFIFOアレイ402の物理的開始アドレスに指示される。FIFO利用ワード・カウントが「0」で、FIFOアレイ402が空であることを指示している。バッファ・メモリ転送カウンタ406が、36バイトを指示する「32+4」、または、36でロードされ、32のデータ・バイトと4BCRCバイトの指示がバッファ・メモリ12からFIFOアレイ402に転送される。明瞭にするために、本例においては、バッファ・メモリ112が連続番号でロードされるが、一実施例において、実際のバッファ・メモリ・コンテンツは「BCRCチェック命令によるFIFOロード」命令の操作に作用しない。
【0069】
一度、「BCRCチェックによるFIFOロード」命令がコマンド・レジスタ408によって受信されると、32データ・バイトと、バッファ・メモリ112からFIFOアレイ402への4BCRCバイトの転送が生じる。バッファ・メモリ・データとBCRCが、書込ポインタ410によって指示されたロケーションにおける開始で、本例では「0」でFIFO302に書込される。各バイトが転送され、またFIFOアレイ402にロードされると、書込ポインタ410がインクリメントされる。この工程は、転送カウントによって特定されたバイト数、本例では36が転送されるまで、反復される。BCRCが転送中チェックされ、CRCが有効であることが指示されれば、MP DMA FIFO CRCグッド・ビットがステータス・レジスタにセットされる。図10に示したように、一度「BCRCチェックによるFIFOロード」命令が完了すると、FIFOアレイ402が転送データを含み、書込ポインタ410が36にインクリメントされ、読取ポインタ412が0に維持され、またFIFOワード・カウントが9になる。一実施例において、転送データもバッファ・メモリ112内に保持される。
【0070】
「BCRC発生によるFIFOアンロード」命令が、ブロックCRCの生成中、データをMP FIFO302からバッファ・メモリ112に転送する。転送がMP FIFO読取ポインタ412によって規定されたロケーションで開始(スタート)がはじまる。転送されるべきバイト数が、バッファ・メモリ転送カウンタ406内にセットされる。転送のためのバッファ・メモリ・スタート方向アドレスがバッファ転送アドレス・レジスタ404内にセットされる。転送されるべき最終ワードはダミー・ワードであり、CRCエンジン132によって計算されたブロックCRCと置換される。転送されるべきバイト数が、FIFOアレイ402のサイズを超えて許容される。「BCRC発生によるFIFOアンロード」操作が、FIFO302が空であり、また転送が未完了であれば、サスペンドされるか、または休止される。転送は、FIFO302がいっぱいになり始めたときに、自動的に再開する。
【0071】
図11は「BCRC発生によるFIFOアンロード」命令操作の一例を示す。バッファ・メモリ112が、「xx」で示された「ドント・ケア」情報を含むと想定されている。明瞭にするために、本例において、FIFOアレイ402は連続番号の32バイトでロードされる。さらに、データに続く4バイトがダミーBCRCを「含んでいる」。すなわち、FIFOアドレス0−31での32データ・バイトのためのBCRCは、未だ計算されていないが、FIFO管理目的のために、まるでアドレス・ロケーション32−35が実際のBCRCを含んでいるかのように書込ポインタ410が36にセットされる。読取ポインタ(RP)412が「0」にセットされる。どれだけのFIFOワード・ロケーションが使用されたかを指示するFIFO利用ワード・カウントが「9」であれば、9ワードがFIFOアレイ402にあることを指示している。バッファ・メモリ転送カウンタ406が「32+4」、すなわち、36でロードされる。36バイトの指示がFIFOアレイ402からバッファ・メモリ112に転送される。
【0072】
一度、「BCRC発生によるFIFOアンロード」命令がコマンド・レジスタ408によって受信されると、FIFOアレイ402からバッファ・メモリ112への32バイトの転送が生じる。データが、読取ポインタ412によって指示されたロケーションで、本例では「0」で、FIFO302から読み取られる。読取ポインタ412が、各ワードが転送されるとともにバッファ・メモリ112にロードされると、インクリメントされる。BCRCはこの転送中、連続して計算される。この工程は、転送カウントからBCRCデータのための4バイトを減算したカウントによって特定されたバイト数が転送されるまで、反復される。本例において、32バイトがFIFOアレイ402から転送される。バッファ・メモリ112に転送される最終の4バイトは、FIFOアレイ402よりもむしろCRCアキュムレータによって供給されたBCRCデータを含んでいる。図11に示したように、一度「BCRC発生によるFIFOアンロード」命令が完了すると、バッファ・メモリ112は、関連するBCRCを伴う転送データを含んでいる。書込ポインタ410が36を維持し、読取ポインタ412が36にインクリメントされ、またFIFOワード・カウントが0になり、FIFOが空であることを指示する。一実施例において、たとえFIFOアレイ402が空であっても、データはFIFOアレイ402から消去されない。
【0073】
「バッファ・メモリからの読取」命令が、バッファ・メモリ112からのデータのデータ64バイトをMP FIFO302へ転送する。データが、FIFOアレイ402の開始時ないしゼロ・アドレスでFIFOアレイ402にロードされる。転送のためのバッファ・メモリ開始ソース・アドレスがバッファ転送アドレス・レジスタ404にセットされる。一実施例において、読取ポインタ412と転送カウンタ408がデフォルト値を使用して自動的に初期化される。従って、冗長なセットアップ工程によって実行するのではなく、一つの命令がカウンタを迅速に初期化する。さらに、一実施例において、CRCチェックがまったく実行されない。従って、FIFOアレイ302[402?]のスタート時で自動的に64バイトをロードする「バッファ・メモリからの読取」命令が、シーケンスをなすページをして、FIFOポインタの管理に関連するオーバーヘッド時間を取らずに、迅速にロードせしめる。このコマンドが、マイクロプロセッサ108またはマイクロコントローラ120のようなプロセッサを許容して、FIFOロードを迅速に実行せしめて、64バイト・インターバルでバッファ・メモリに記憶されたデータを検査する。一実施例において、CRCはこの転送中まったく実行されない。
【0074】
図13は「バッファ・メモリからの読取」命令操作の一例を示す。FIFOアレイ402が、「xx」で示された「ドント・ケア」情報を含むように想定される。書込ポインタ(WP)410、読取ポインタ(RP)412、転送カウンタ406および利用カウンタ414に基づいたワード・カウントが、デフォルト値で自動的に初期化される。明瞭にするために、本例において、バッファ・メモリ112は連続番号でロードされるが、一実施例において、実際のバッファ・メモリ・コンテンツは、「バッファ・メモリからの読取」命令の操作に影響しない。
【0075】
一度、「バッファ・メモリからの読取」命令がコマンド・レジスタ408によって受信されると、バッファ・メモリ112からFIFOアレイ402への64バイトの自動転送が生じる。バッファ・メモリ・データが、第1FIFOメモリ・ロケーションの開始でFIFOアレイ402に書き込まれる。全ての64バイトが転送される。図13に示したように、一度、「バッファ・メモリからの読取」命令が完了すると、FIFOアレイ402が転送データを含むことになる。一実施例において、転送データもバッファ・メモリ112に保持される。
【0076】
「バッファ・メモリへの書込」命令がFIFOアレイ402の全64バイト・コンテンツをバッファ・メモリ112に転送する。データが、FIFOアレイ402の開始時ないしゼロ・アドレスでの開始でFIFOアレイ402にロードされる。転送のためのバッファ・メモリ・スタート方向アドレスが、バッファ転送ドレス・レジスタ404にセットされる。一実施例において、「バッファ・メモリへの書込」命令は、書込ポインタ410、読取ポインタ412、または転送カウンタ406を使用しない。従って、FIFOアレイ402のスタート時で自動的に64バイトをアンロードする「バッファ・メモリからの書込」命令が、FIFOポインタの管理に関連するオーバーヘッド時間を取らずに、連続ページをしてバッファ・メモリ112に迅速に転送せしめる。一実施例において、CRCがこれらの転送中に実行される。
【0077】
図14は「バッファ・メモリへの書込」命令操作の一例を示す。バッファ・メモリ112が、「xx」で示された「ドント・ケア」情報を含むように想定される。書込ポインタ(WP)410、読取ポインタ(RP)412、転送カウンタ406および利用カウンタ414が、デフォルト値で自動的に初期化される。明瞭にするために、本例において、FIFOアレイ402は連続番号でロードされるが、一実施例において、実際のコンテンツは、「バッファ・メモリへの書込」命令の操作に影響しない。
【0078】
一度、「バッファ・メモリからの書込」命令がコマンド・レジスタ408によって受信されると、FIFOアレイ402からバッファ・メモリ112への64バイトの自動転送が生じる。64バイトのFIFOデータがバッファ転送アドレス・レジスタ404に記憶されたアドレスでの開始でバッファ・メモリ112に自動的に書き込まれる。図14に示したように、一度、「バッファ・メモリへの書込」命令が完了すると、バッファ・メモリ112が転送データを含むことになり、書込ポインタ410と読取ポインタ412が不変にされる。一実施例において、転送データもFIFOアレイ402に保持される。
【0079】
「セレクトFCP(ファイバー・チャネル・プロトコル)CMD2ビット(6)が、「フェッチ・カレントFCP」命令と「アップデート・カレントFCPコマンド・ポインタ」命令に関連して使用される。「フェッチ・カレントFCP」命令が実行されると、現FCP命令が、バッファ・メモリ112内のコマンド・バッファからMP FIFOアレイ402に転送される。一実施例において、この転送は、一度FIFO命令がコマンド・レジスタ408に書き込まれると、プロセッサの介在なしに自動的に実行される。
【0080】
以下に詳細に説明するように、ステート・マシン418が、「フェッチ・カレントFCP」命令を、「クリアFIFO」シーケンスの実行、ポインタと利用カウンタのクリア、および「FCPコマンド・フェッチ・アドレス」を「MP FIFOバッファ・メモリ転送アドレス・レジスタ404へコピーすることによって実行する。「セレクトFCP CMD2ビット(6)が、二つのフェッチ・アドレス、FCPコマンド1フェッチ・アドレスまたはFCPコマンド2フェッチ・アドレスのいずれが、カレントFCP命令をフェッチするのに使用されるかを決定する。二つのフェッチ・アドレス、FCPコマンド1フェッチ・アドレスまたはFCPコマンド2フェッチ・アドレスを用意することが、二つの命令バッファをしてバッファ・メモリ112内に存在することを好都合に許容する。FCPコマンド1フェッチ・アドレスと、FCPコマンド2フェッチ・アドレスがFCPコマンド1フェッチ・アドレス・レジスタ420と、FCPコマンド2フェッチ・アドレス・レジスタ422内にそれぞれ記憶される。レジスタ420、422は対応するFCPコマンド・フレーム・テーブル・ベース、FCPコマンド・フェッチ・アドレス・フレーム・ポインタ、および64バイトコマンド・フレーム・スタートを含んでいる。
【0081】
次に、ステート・マシン418が、MP FIFOバッファ・メモリ転送カウンタ406を60にセットする。これは関連するCRCおよびバッファ長さフィールドを除いたFCPコマンドのバイトによるサイズである。バッファ長さフィールドが、FIFOアレイ402のトップで、またはゼロ・アドレス・ロケーションでの開始でMP FIFO302にロードされる。従って、バッファ長さフィールドがマイクロコントローラ120のような処理素子による使用のために迅速、かつ、自動的に配置される。一実施例において、バッファ長さフィールドは固定位置に、またはFCPコマンド・ヘッダに関係するスペーシングにある。バッファ長さフィールドはCRCを位置付けするのに使用され、これがチェックされフレームが不正であるかどうかが決定される。一実施例において、FCPコマンド・フレームが、図7に示したようにCRCがバッファ長さフィールド上方に配置された状態でバッファ・メモリ112に記憶される。次に「BCRCチェックによるFIFOロード」命令が、自動的に実行される。一実施例において、「インタラプト・アポン・コンプリート」ビットが同様にセットされる。
【0082】
従って、さらなるマイクロプロセッサまたはマイクロコントローラの介在を必要とせずに、ステート・マシンに対してFCPコマンドをロードし、チェックする複雑なタスクを自動的に実行させることによって、マイクロプロセッサ108およびマイクロコントローラ120の処理負荷を大々的に低減している。さらに、FCPコマンドの読取りがより迅速、かつ、効果的に達成される。
【0083】
「アップデート・カレントFCPコマンド・ポインタ」命令が、「カレント・コマンド・フェッチ」アドレス・カウンタまたはレジスタを進行させるのに必要とされる工程を実行する。最初に、「フェッチ・アドレス」ポインタが、コマンド・サイズ、64だけインクリメントされる。「セレクトFCP CMD2ビット(6)」が、いずれのFCPコマンド1フェッチ・アドレスとFCPコマンド2フェッチ・アドレスが使用されるかを決定する。次に、MP FIFOコマンド・コンプリート・インタラプトが生成される。次に、コマンド・カウントがデクリメントされる。
【0084】
図12は「フェッチ・カレントFCP」命令操作の一例を示す。FIFOアレイ402が、「xx」で示された「ドント・ケア」情報を含むように想定される。書込ポインタ(WP)410、読取ポインタ(RP)412、およびワード・カウントも「ドント・ケア」である。バッファ・メモリ112がFCPコマンド・フレームでロードされる。フレーム・ヘッダに対して8ワード、フレーム・ペイロードに対して8ワード、FCPコマンドCRCに対して1ワード、およびワード・バッファ長さフィールドに対して1ワードを含み、合計64バイトである。
【0085】
一度、「フェッチ・カレントFCP」命令が、コマンド・レジスタ408によって受信されると、バッファ・メモリ112からFIFOアレイ402への64バイトの自動転送が生じる。転送は対応するFCPコマンド・フェッチ・アドレスによって指示されたバッファ・メモリ・ロケーションからである。最初に、バッファ長さフィールドがFIFOアレイ402の始め(beginning)、ないしトップ・アドレスに自動的にロードされる。従って、バッファ長さフィールドはFIFOアレイ402からアンロードされた第1ワード後である。次に、FCPコマンド・フレーム・ヘッダが、チェックされたフレーム・ペイロードとCRCに続いて転送される。図12に示したように、一度、「フェッチ・カレント」命令が完了すると、FIFOアレイ402が、バッファ長さフィールドをトップにした転送データを含むことになる。書込ポインタ410と読取ポインタ412が0を保持し、またFIFOワード・カウントが64であり、これはFIFOアレイ402がいっぱいであることを指示している。
【0086】
図15はコンテキスト・スイッチング操作の一例を示す。本例は前もってFIFOアレイ402に記憶されたコンテキストを代表的なレジスタ・ファイルにスワップないし転送する態様を、一方レジスタ・ファイルからのコンテキストをFIFOアレイ402に転送する態様を示す。レジスタ・ファイルは多数のレジスタ・ファイルの一つであり、またFCPヘッダ、転送カウント・ステータス等々のような種々のデータないしコンテキストを含むように使用される。本例において、FIFOアレイ402はアレイの第1の28バイトに記憶された第1コンテキストを含む。FIFOアレイ402の残部は、「xx」によって指定された「ドント・ケア」情報を含んでいる。書込ポインタ(WP)410は28に、すなわち、書込ポインタ410はFIFOアレイ402によって受信された次のデータをして、第1コンテキストに続くメモリ・ロケーションに書き込ませる。読取ポインタ(RP)412が「0」にセットされ、これによってFIFOアレイ402の物理的開始アドレスを指示する。どれだけのFIFOワード・ロケーションが使用されたかを指示するFIFO利用ワード・カウントは、「7」である。マイクロコントローラ(MC)アキュムレータが「14」にセットされている。バッファ・メモリ転送カウンタ406は、「ドント・ケア」であり、データはこの操作ではバッファ・メモリ112に転送もされず、またこれからの転送もない。レジスタ・ファイル1502が第2コンテキストを含み、28バイトを含んでいる。一方、本例において、第1および第2コンテキストが同じサイズであるが、両者は異なるサイズでもよい。明瞭にするために、本例においては、FIFOアレイ402は連続番号00−1Bでロードされており、一方、レジスタ・ファイル1502は連続番号20−3Bでロードされている。
【0087】
「MCイクスチェンジ・ロードFIFO」命令がコンテキスト・スイッチングないしスワッピングを実行するのに使用される。一度、MC EXCHANGEロードFIFO命令が発せられると、FIFOアレイ402に記憶されたコンテキストが、レジスタ・ファイル1502に記憶されたコンテキストでスワップされる。図示例において、第1コンテキストはスワップ・アウトされているが、FIFOアレイ402から消去されない。しかし、所望ならば、第1コンテキストは、スワップ操作中、FIFOアレイ402に上書きでき、一方第1コンキストのスワップアウト・コピーはレジスタ・ファイル1502に記憶される。例えば、スワップされたコンテキストが未使用FIFOロケーションよりも大きければ、FIFOアレイ402内に記憶された第1コンテキストの全てのまたは一部が、上書きできる。従って、一実施例において、レジスタ・ファイルからスワップされたコンテキストが64バイトであれば、FIFOアレイ402内の第1コンテキストは完全に上書きされる。
【0088】
図15に示したように、本例において、レジスタ・ファイル1502からFIFOアレイ402に転送されたコンテキストは、第1コンテキストのすぐ後に記憶される。レジスタ・ファイル1502はここで第1コンテキストを含むことになる。書込ポインタ(WP)410が56に進行し、FIFOアレイ402に書き込まれた付加的なデータが表わされている。読取ポインタ(RP)412が28に進行し、28バイトがFIFOアレイ402から読み取られた事実が表れている。FIFOワード・カウントは7のままであり、FIFOアレイ402の読取ワードの数は、スワップ中にFIFOアレイ402に書き込まれたワード数と同じである。
【0089】
本発明の一実施例は、データがMP FIFO302とバッファ・メモリ112間で転送されたときに、データ変換が任意に実行される。図6に示したように、32ビット・ワード内の二つの16ビット・ハーフワードがスワップされ、また各ハーフワード内の二つのバイトがスワップされる。コマンド・レジスタ408のビット5が、ワード内のハーフワードをスワップすべく使用する。ビット4が、ハーフワード内のバイトをスワップすべく使用する。これらのスワッピング機能は、ビッグ−エンディアン・フォーマット(big-endian format) 内でフォーマットされたデータからリトル−エンディアン・フォーマット(little-endian format)へのデータ変換を好都合に許容する。同様にして、これらのスワッピング機能はリトル・エンディアン・フォーマット内でフォーマットされたデータからビッグ−エンディアン・フォーマットへのデータ変換を好都合に許容する。例えば、ファイバー・チャネルは従来リトル−エンディアン・フォーマットを使用し、一方プロセッサ106、120はビッグ−エンディアン・フォーマットを使用する。加うるに、スワッピング機能は、異なる境界線上で再編成されるべきFIFO302の内外でワードの転送を許容する。
【0090】
バッファ・メモリ・アクセス方向、転送カウント値、バッファ・メモリ・アドレスのソース、およびコメントを含む付加的な命令情報を次の表3に提示する。
【0091】
【表3】
一実施例において、上にリストした一つまたはそれ以上のコマンド(命令)が発せられ、一方他のコマンドが実行される。例えば、一実施例において、操作なし(NOP)、クリアFIFO、およびストップFIFOコマンドが発せられ、一方他のコマンドが実行される。
【0092】
ステート・マシン418が、MP FIFOポインタ、MP FIFOバッファ・メモリ転送カウンタ406、ファイバー・チャネル・プロトコル(FCP)フェッチ・アドレス・カウンタ、CRCアキュムレータ、およびフレーム長さカウンタを含むコントローラ・メモリ・アクセス・リソースを制御する。ステート・マシン418がこれらのリソースを初期化し、モードをセットし、またSDRAMリクエスタとして作用する。
【0093】
図5A−DはMP FIFOステート・マシン418の一実施例を示す。アイドル・ステート514から開始され、アンロードFIFOコマンドの受信時に、ステート・マシン418がステート502に進行し、アンロードの工程時に、FIFO302が開始される。FIFO302が空でなければ、ステート・マシン418がステート504に進行する。次に、ただ一つのワードがFIFOアレイ402に残り、また転送カウントが1に等しくなるまで、FIFO302が連続してアンロードされる。次に、ステート・マシン418がステート508に進行し、ここで最終FIFOワードがアンロードされる。従って、MP FIFOアービタからの確認(ACK)信号とSDRAMコントローラからのデータ確認(DACK)信号両方がアクティブであるとき、FIFOアレイ402内のデータの最後の一つが転送される。転送カウントが0にセットされ、またステート・マシン418がアイドル・ステート514に復帰する。
【0094】
アイドル・ステート514にあってCRCコマンドによるアンロードFIFOが受信されれば、ステート・マシン418がステート508に進行する。CRCコマンドによるアンロードFIFOが、FIFOアレイ402からバッファ・メモリ112へのデータの書込に使用され、この間に関連CRCが生成される。一実施例において、CRCはバッファ・メモリ112に最終ワードを書き込むことになる。FIFOアレイ402が空であれば、ステート・マシン418がアンロードFIFOステート508に留まる。しかし、FIFOアレイ402が空でなければ、ステート・マシン418がアンロードFIFOステート510に進行する。CRC計算は、FIFOアレイ402がアンロードされ、SDRAMバッファ・メモリに書込みされるにつれて、実行される。転送カウントが1に等しいとき、ステート・マシン418がアンロードFIFOステート512に進行する。CRC計算が完了したとき、CRCデータがSDRAMバッファ・メモリ112に転送され、また転送カウンタが0にセットされる。次に、ステート・マシン418がアイドル・ステート514に復帰する。
【0095】
ステート・マシン418がロードFIFOコマンドを受信すれば、ステート・マシン418がアイドル・ステート514からロードFIFOステート516に進行する。ロードFIFOコマンドはバッファ・メモリからFIFOアレイ402へのデータの読取りに使用される。ステート・マシン418がいっぱいでなければ、次にステート・マシン418は、アービタからのMP FIFO確認信号の受信時に、ステート518に進行する。次に、転送カウントが1に等しくなり、またMP FIFO302が「ほとんど完全(いっぱい)信号」を発生するまで、ステート・マシン418がデータをしてバッファ・メモリ112からFIFOアレイ402に転送せしめる。転送カウントが1に等しく、またFIFOアレイ402がほとんどいっぱい (フル) であれば、ただ一つのデータ・ワードのために余裕があることを意味し、ステート・マシン418がロードFIFOステートを520に進行する。転送カウンタが1に等しく、MP FIFO302がフル信号を発生すれば、次に、アービタからのMP FIFO確認信号とSDRAMコントローラからのDACK信号の受信時に、最終ワードがFIFOアレイ402にロードされ、ステート・マシン418がアイドル・ステート514に復帰する。
【0096】
CRCを伴ったロードFIFOコマンドが受信されると、ステート・マシン418がCRCコマンドを伴ったロードFIFOステート522に進行する。CRCを伴ったロードFIFOコマンドがバッファ・メモリ112からのデータを読取るのに使用され、一方CRCをチェックする。一実施例において、CRCが転送されるべき最終ワードとなる。ステート522において、MP FIFO302がいっぱいでなければ、MP FIFO読取信号が作動され、MP FIFO CRCが有効信号となる。MP FIFO確認信号が受信されると、ステート・マシン418がCRCを伴うロードFIFOステート524に進行する。ほぼフル信号が行使され、また転送カウントが1より大きくなるまで、ステート・マシン418がデータをSDRAMバッファ・メモリからFIFOアレイ402にロードするように進行する。この期間中、CRCが計算される。次に、ステート・マシン418がCRCを伴ってロードFIFOステート526に進行する。ステート・マシン418がCRCをしてFIFOアレイ402にロードせしめる。転送カウントが1にセットされ、またステート・マシン418はアイドル・ステート514に復帰する。
【0097】
「ライト・トウ・バッファ・メモリ(バッファ・メモリへの書込)」コマンドが受信されたときに、ステート・マシン418がアイドル・ステート514から書込ステート528に進行する。上述したように、「ライト・トウ・バッファ・メモリ」コマンドがFIFOアレイ402からバッファ・メモリ112へのデータの書込みに使用される。もし、FIFOアレイ402が空でなければ、MP FIFOアービタからの確認信号の受信時に、ステート・マシン418がステート530に進行する。次に、FIFOアレイ402がアンロードされ、またアンロードされたデータがバッファ・メモリ112に書き込まれる。ただ一つのワードがFIFOメモリに残り、また転送カウントが1に等しくなるまで、FIFOアンロード工程が継続される。次に、ステート・マシン418が、ステート532に進行し、ここで最終FIFOワードがアンロードされる。こうして、MP FIFOアービタからの確認(ACK)信号とSDRAMコントローラからのデータ確認(DACK)信号の両方がアクティブなとき、FIFO内のデータの最終のものが転送される。転送カウントは0にセットされ、ステート・マシンはアイドルステージ514に復帰する。
【0098】
アップデートFCPポインタ・コマンドが受信されたときに、ステート・マシン418がアイドル・ステート514からFCMD PTRステート528に進行する。コマンド・ポインタ・インクリメント信号が1クロックの間、作動され、これがFCPアドレスとカウントを更新する。ステート・マシン418がステート536に進行し、コマンド・コンプリート・インタラプトをクリアする。こうして、ステート・マシン418がアイドル・ステート514に復帰する。
【0099】
リード(読取り)バッファ・メモリ・コマンドが受信されると、ステート・マシン418がアイドル・ステート514からリード・ステート538に進行し、SDRAM読取信号を行使する。FIFOがいっぱいでなければ、MP FIFOアービタからの確認信号の受信時に、ステート・マシン418がステート540に進行する。次に、データがバッファ・メモリ112からFIFOアレイ402に読み取られる。読取工程は、FIFOメモリがほぼいっぱいになり、また転送カウントが1に等しくなるまで、続行される。次に、ステート・マシン418がステート542に進行し、ここでもう一つのワードがバッファ・メモリ112からFIFOに読み取られる。こうして、MP FIFOアービタからの確認(ACK)信号とSDRAMコントローラからのデータ確認(DACK)信号両者がアクティブであるとき、転送カウントが0にセットされ、またステート・マシン418がアイドル・ステート514に復帰する。
【0100】
フェッチFCPコマンドが受信されると、ステート・マシン418がアイドル・ステート514からFCPコマンド・ステート544に進行する。ステート・マシンがFCP_CMD、RD_SIG、LD_CMD_LEN_ADR、CLR_FIFO、LD_XFER_CNT_64およびREQ_SIG信号を適切にセットし、パケットの終端に配置されたパケット長さデータを得るように用意する。従って、転送アドレスがフレーム長さアドレスとともにロードされる。一実施例において、フレーム長さアドレスには、セグメント・サイズに付加したベース・アドレスが含まれている。ステート546に進行して、フレーム長さデータが検索される。MP FIFOアービタからの確認(ACK)信号とSDRAMコントローラからのデータ確認(DACK)信号両者がアクティブであるとき、フレーム長さがFIFOアレイ402に配置される。ステート548に進行して、CRCシードがリセットされ、また転送アドレスがFCPコマンド・フレームのスタート・アドレスまたはベース・アドレスにセットされる。確認信号がドロップしたとき、ステート・マシンがステート550に進行する。バッファ・メモリ112からのパケットの転送が開始し、またCRCアキュムレーションが開始する。転送カウントが1に等しくなるまで、転送は続行される。次に、ステート・マシン418はステート552に進行し、最終ワードが転送される。転送カウンタがここでゼロに等しくなり、またステート・マシン418がアイドル・ステート514に進行する。
【0101】
本発明のある好ましい実施例を説明してきたが、これらの実施例は例としてのみ提示したものであって、本発明の範囲を限定することを意図していない。従って、本発明の概念と範囲は請求の範囲とその等価なものによってのみ規定される。
【図面の簡単な説明】
【図1】 本発明の一実施例を使用する一環境を示す図
【図2】 バッファ・コントローラの一実施例のポートを示す図
【図3】 図2のバッファ・コントローラをより詳細に示す図
【図4】 メモリ・ユニットの一実施例を示す図
【図5】 A−Dは、バッファ・コントローラと併用したステート・マシンの一実施例を示す図
【図6】 データ変換の一実施例を示す図
【図7】 ファイバー・チャネル・コントロール・ブロックを示す図
【図8】 第1の代表的なデータ転送を示す図
【図9】 第2の代表的なデータ転送を示す図
【図10】 第3の代表的なデータ転送を示す図
【図11】 第4の代表的なデータ転送を示す図
【図12】 第5の代表的なデータ転送を示す図
【図13】 第6の代表的なデータ転送を示す図
【図14】 第7の代表的なデータ転送を示す図
【図15】 第8の代表的なデータ転送を示す図
Claims (12)
- コンピュータを大容量記憶デバイスにインターフェースする大容量記憶デバイス・コントローラであって、
大容量記憶バッファ・メモリ・インターフェースと;
プロセッサと;
第1ポートを使用して先入れ先出し法で前記大容量記憶バッファ・メモリ・インターフェースからデータを受信するように結合されるべく形成されたダイレクト・メモリ・アクセス転送を使用してロード可能な第1メモリ回路と;
を具備し、
前記第1メモリ回路のデータ記憶領域は、先入れ先出し法で前記データを受信し、かつ、第2ポートを使用してランダム・アクセス・メモリとして前記プロセッサによってデータの読出しアクセスおよび書込みアクセスが可能な大容量記憶デバイス・コントローラ。 - 前記第1メモリ回路に結合された第2メモリ回路であって、ランダム・アクセス・メモリとして形成されている第2メモリ回路と;
前記第2メモリ回路に結合されたファイバー・チャネル・インターフェースであって、前記第2メモリ回路が前記ファイバー・チャネル・インターフェースからファイバー・チャネル制御ブロックを受信するように形成されているファイバー・チャネル・インターフェースと;
前記プロセッサ、前記第1メモリ回路、および前記第2メモリ回路に結合されたステート・マシンであって、前記プロセッサから命令を受信し、これに応答して、前記第2メモリ回路と前記第1メモリ回路間に前記ファイバー・チャネル制御ブロックを転送するように形成されているステート・マシンと;
をさらに含む請求項1に記載の大容量記憶デバイス・コントローラ。 - 前記第2メモリ回路は、ファイバー・チャネルが伝送したフレームを記憶する
請求項2に記載の大容量記憶デバイス・コントローラ。 - 大容量記憶デバイスをI/Oバスを介してコンピュータにインターフェースするための大容量記憶デバイス・コントローラであって、
前記大容量記憶デバイスからデータを受信し、また前記I/Oバスからデータを受信するように形成されたバッファ・メモリと;
プロセッサと;
前記バッファ・メモリと前記プロセッサに結合されたメモリ回路であって、前記メモリ回路と前記バッファ・メモリ間のデータの少なくとも第1転送中、先入れ先出しメモリとして動作するように形成され、前記メモリ回路の記憶領域は、先入れ先出し法で前記データを受信し、かつ、前記メモリ回路と前記プロセッサ間のデータの少なくとも第1転送中、前記プロセッサによるデータの読出しアクセスおよび書込みアクセスが可能なランダム・アクセス・メモリとして動作するように形成されたメモリ回路と;
を具備する大容量記憶デバイス・コントローラ。 - メモリ回路がフルのときに、前記転送の少なくとも一つが休止する請求項4に記載の大容量記憶デバイス・コントローラ。
- 前記メモリ回路がデータを前記バッファ・メモリにバースト転送するように形成されている請求項4または5に記載の大容量記憶デバイス・コントローラ。
- 前記メモリ回路がオーバーフロー状態になるまで、前記メモリ回路にはデータが転送され、一方でデータが前記メモリ回路から前記バッファ・メモリにデータがバースト転送される請求項4から6のいずれかに記載の大容量記憶デバイス・コントローラ。
- 前記メモリ回路が複数のディスク・ドライブ・コントローラ・レジスタ・ファイルに結合されている請求項4から7のいずれかに記載の大容量記憶デバイス・コントローラ。
- 前記メモリ回路が、転送サイズを前記メモリ回路のサイズよりも大きく指定する転送命令を受容するように形成されている請求項4から8のいずれかに記載の大容量記憶デバイス・コントローラ。
- ファイバー・チャネル・インターフェースにより、前記コンピュータにインターフェースする請求項4から9のいずれかに記載の大容量記憶デバイス・コントローラ。
- 前記プロセッサ、前記バッファ・メモリおよび前記メモリ回路に結合されたステート・マシンをさらに含み、前記ステート・マシンがファイバー・チャネル制御ブロックを前記バッファ・メモリから前記メモリ回路に転送するとともに、エラー検出コードをチェックする請求項4から10のいずれかに記載の大容量記憶デバイス・コントローラ。
- 前記大容量記憶デバイスが磁気ディスク・ドライブである請求項4から11のいずれかに記載の大容量記憶デバイス・コントローラ。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13271299P | 1999-05-05 | 1999-05-05 | |
US60/132,712 | 1999-05-05 | ||
US09/548,330 US6401149B1 (en) | 1999-05-05 | 2000-04-12 | Methods for context switching within a disk controller |
US09/548,330 | 2000-04-12 | ||
US09/547,567 | 2000-04-12 | ||
US09/547,567 US6330626B1 (en) | 1999-05-05 | 2000-04-12 | Systems and methods for a disk controller memory architecture |
PCT/US2000/012433 WO2000067107A1 (en) | 1999-05-05 | 2000-05-05 | Systems and methods for a disk controller memory architecture |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002543514A JP2002543514A (ja) | 2002-12-17 |
JP2002543514A5 JP2002543514A5 (ja) | 2008-12-04 |
JP4741735B2 true JP4741735B2 (ja) | 2011-08-10 |
Family
ID=27384336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000615882A Expired - Lifetime JP4741735B2 (ja) | 1999-05-05 | 2000-05-05 | ディスク・コントローラ・メモリ・アーキテクチャ用システムおよび方法 |
Country Status (8)
Country | Link |
---|---|
EP (1) | EP1188106B1 (ja) |
JP (1) | JP4741735B2 (ja) |
KR (1) | KR100638378B1 (ja) |
AT (1) | ATE321298T1 (ja) |
AU (1) | AU4825600A (ja) |
CA (1) | CA2370596C (ja) |
DE (1) | DE60026836T2 (ja) |
WO (1) | WO2000067107A1 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093751A1 (en) * | 2001-11-09 | 2003-05-15 | David Hohl | System and method for fast cyclic redundancy calculation |
CN100403727C (zh) * | 2004-04-21 | 2008-07-16 | 华为技术有限公司 | 一种传递数据包编辑命令的装置及方法 |
US20060015659A1 (en) * | 2004-07-19 | 2006-01-19 | Krantz Leon A | System and method for transferring data using storage controllers |
US9201599B2 (en) | 2004-07-19 | 2015-12-01 | Marvell International Ltd. | System and method for transmitting data in storage controllers |
KR100621631B1 (ko) * | 2005-01-11 | 2006-09-13 | 삼성전자주식회사 | 반도체 디스크 제어 장치 |
US8127089B1 (en) | 2007-02-14 | 2012-02-28 | Marvell International Ltd. | Hard disk controller which coordinates transmission of buffered data with a host |
JP4922442B2 (ja) * | 2010-07-29 | 2012-04-25 | 株式会社東芝 | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 |
US10430210B2 (en) * | 2014-12-30 | 2019-10-01 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5315708A (en) * | 1990-02-28 | 1994-05-24 | Micro Technology, Inc. | Method and apparatus for transferring data through a staging memory |
US6081849A (en) * | 1996-10-01 | 2000-06-27 | Lsi Logic Corporation | Method and structure for switching multiple contexts in storage subsystem target device |
US5890207A (en) * | 1996-11-27 | 1999-03-30 | Emc Corporation | High performance integrated cached storage device |
-
2000
- 2000-05-05 AT AT00930436T patent/ATE321298T1/de not_active IP Right Cessation
- 2000-05-05 DE DE60026836T patent/DE60026836T2/de not_active Expired - Lifetime
- 2000-05-05 EP EP00930436A patent/EP1188106B1/en not_active Expired - Lifetime
- 2000-05-05 AU AU48256/00A patent/AU4825600A/en not_active Abandoned
- 2000-05-05 KR KR1020017014078A patent/KR100638378B1/ko active IP Right Grant
- 2000-05-05 WO PCT/US2000/012433 patent/WO2000067107A1/en active IP Right Grant
- 2000-05-05 CA CA002370596A patent/CA2370596C/en not_active Expired - Fee Related
- 2000-05-05 JP JP2000615882A patent/JP4741735B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
KR100638378B1 (ko) | 2006-10-25 |
CA2370596C (en) | 2010-01-12 |
JP2002543514A (ja) | 2002-12-17 |
ATE321298T1 (de) | 2006-04-15 |
DE60026836T2 (de) | 2006-09-21 |
KR20020019437A (ko) | 2002-03-12 |
DE60026836D1 (de) | 2006-05-11 |
AU4825600A (en) | 2000-11-17 |
CA2370596A1 (en) | 2000-11-09 |
EP1188106B1 (en) | 2006-03-22 |
EP1188106A1 (en) | 2002-03-20 |
WO2000067107A1 (en) | 2000-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6330626B1 (en) | Systems and methods for a disk controller memory architecture | |
US6401149B1 (en) | Methods for context switching within a disk controller | |
US5524268A (en) | Flexible processor-driven control of SCSI buses utilizing tags appended to data bytes to determine SCSI-protocol phases | |
EP0489504B1 (en) | Bidirectional FIFO buffer for interfacing between two buses | |
EP0241129B1 (en) | Addressing arrangement for a RAM buffer controller | |
US5805927A (en) | Direct memory access channel architecture and method for reception of network information | |
US5655151A (en) | DMA controller having a plurality of DMA channels each having multiple register sets storing different information controlling respective data transfer | |
US5664145A (en) | Apparatus and method for transferring data in a data storage subsystems wherein a multi-sector data transfer order is executed while a subsequent order is issued | |
JP3433386B2 (ja) | 入出力記憶装置への直接メモリアクセスを行う装置及び方法 | |
US6636927B1 (en) | Bridge device for transferring data using master-specific prefetch sizes | |
JPH02114350A (ja) | 周辺コントローラのためのバッファメモリサブシステムおよび方法 | |
US5555390A (en) | Data storage method and subsystem including a device controller for respecifying an amended start address | |
US7130932B1 (en) | Method and apparatus for increasing the performance of communications between a host processor and a SATA or ATA device | |
JP4741735B2 (ja) | ディスク・コントローラ・メモリ・アーキテクチャ用システムおよび方法 | |
EP0618537B1 (en) | System and method for interleaving status information with data transfers in a communications adapter | |
US5613141A (en) | Data storage subsystem having dedicated links connecting a host adapter, controller and direct access storage devices | |
US11010318B2 (en) | Method and apparatus for efficient and flexible direct memory access | |
EP0478337B1 (en) | Process of storing data on, or retrieving data from a plurality of disks | |
JPH0743687B2 (ja) | データ記憶サブシステム | |
JP2003087338A (ja) | データ伝送装置 | |
JP4363431B2 (ja) | データ転送方式 | |
JP3241072B2 (ja) | コンピュータシステム | |
WO1992015054A1 (en) | Data transfer between a data storage subsystem and host system | |
JPH06105425B2 (ja) | データ記憶サブシステムとホスト・データ処理システム間のデータ転送方法 | |
JPS59158427A (ja) | チヤネル装置のコマンド先取り制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20060801 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20060823 |
|
RD05 | Notification of revocation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7425 Effective date: 20060823 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070308 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080715 |
|
A524 | Written submission of copy of amendment under article 19 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20081015 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20081216 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090316 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090420 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20090731 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110509 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4741735 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140513 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term | ||
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |