(57)【特許請求の範囲】
【請求項１】
フラッシュメディアシステムを制御する方法において、
プロセッサ制御モードを有するフラッシュレーンコントローラを提供するステップと、
ソフトコンテキストを作成して送るステップ
を含み、
前記ソフトコンテキストは、前記フラッシュレーンコントローラを前記プロセッサ制御モードに配置し、該プロセッサ制御モードにおいて、前記フラッシュレーンコントローラは、全ての前記ソフトコンテキストを格納し、全ての未解決のコンテキストの実行を終了し、通常のハードウェア自動化をサスペンドし、その後、前記ソフトコンテキストを実行することからなる、方法。
【請求項２】
前記ソフトコンテキストは、前記フラッシュレーンコントローラにソフトコマンドを送る、請求項１に記載の方法。
【請求項３】
前記ソフトコマンドは、１つ以上の非自動コマンド、または、１つ以上のベンダー特有の診断コマンド、または、１つ以上のエラー処理コマンドを含む、請求項２に記載の方法。
【請求項４】
ソフトコンテキストを受け取ると、前記フラッシュレーンコントローラは、通常動作モードから前記プロセッサ制御モードに切り替わり、１つ以上のソフトコマンドによって指定された１つ以上のソフトフラッシュ動作を実行し、前記通常動作モードに戻り、前記フラッシュレーンコントローラによってサポートされた１つ以上のコンテキストリストからコンテキストをフェッチし始めることからなる、請求項１に記載の方法。
【請求項５】
フラッシュレーンコントローラに接続された複数のフラッシュデバイスのそれぞれに対するコンテキストを実行するように構成されたフラッシュレーンコントローラであって、ソフトコンテキストを実行するように構成されたプロセッサ制御モードを有するフラッシュレーンコントローラと、
前記フラッシュレーンコントローラ内に配置されたナノシーケンサであって、前記フラッシュデバイスの少なくとも１つにアクセスすると共にデータパスに対してデータを移動させるために前記フラッシュレーンコントローラのハードウェアリソースを駆動するように適合されたプロセッサ制御モード動作をサポートするように構成されたナノシーケンサ
を備える装置。
【請求項６】
前記プロセッサ制御モード動作は、フラッシュバス動作のための一組のナノ命令に応じて実行され、
前記ナノ命令は、
所定数のクロックサイクルの間待機し、
レディ／ビジーラインが、関連付けられたフィールドにおいて定義されたある状態に進むまで待機し、
状態レジスタをポーリングする一方で所定の状態を待ち、
データフローマネージャバッファが特定の状態に到達するまで待機し、
状態ポーリングの連続的な試行間のクロックサイクルの数を設定し、
データ転送のためのバイトのデフォルト数を設定し、
フラッシュトランザクションのための４０ビットのフラッシュアドレスの３つの最上位ビットを設定し、
フラッシュトランザクションのための４０ビットのフラッシュアドレスの２つの最下位バイトを設定し、
状態ポーリングコマンドのフォーマットを設定し、
最後に取得した状態レジスタの内容を用いて、動作のパス／フェイル状態を取得し、
データフローマネージャの２つのローカルバッファのうちの１つを用いて、プログラムトランザクションのためのデータプリフェッチ動作を開始し、
次の読み取り転送の対象となるローカルデータバッファを設定し、及び、バッファ転送にＤＭＡコンテキストポインタを関連付け、
与えられた動作のために前記ＤＭＡコンテキストポインタを解放し、
プロセッサに対する割り込みをアサートし、及び、前記割り込みをファームウェアによって一意に識別することができるように割り込みレジスタに引数を配置し、
プロセッサ制御モードにおける次のソフトコンテキストポインタをフェッチし、
前記プロセッサ制御モードから出る
ようにするための命令を含む、請求項５に記載の装置。
【請求項７】
前記装置は、フラッシュメディアコントローラか、または集積回路である、請求項５または６に記載の装置。
【請求項８】
前記フラッシュメディアコントローラは、前記フラッシュレーンコントローラの複数のインスタンスを備える、請求項７に記載の装置。
【請求項９】
前記装置は、複数のフラッシュレーンに配置された複数のフラッシュデバイスを備えるソリッドステート記憶デバイスの一部であり、前記フラッシュレーンのそれぞれは、前記フラッシュレーンコントローラの前記複数のインスタンスのそれぞれの１つによって制御される、請求項８に記載の装置。
【請求項１０】
前記プロセッサ制御モードは、前記フラッシュレーンコントローラにソフトコマンドを送るソフトコンテキストを実行することを含む、請求項７〜９のいずれかに記載の装置。
【請求項１１】
前記ソフトコマンドは、前記フラッシュメディアコントローラのハードウェアによって本来サポートされない動作を実行するように構成される、請求項１０に記載の装置。
【請求項１２】
前記プロセッサ制御モードは、前記フラッシュレーンコントローラの外部のロジックに対してトランスペアレントである、請求項５〜１１のいずれかに記載の装置。
【請求項１３】
前記ソフトコマンドは、非自動コマンドと、ベンダーに特有の診断コマンドと、エラー処理コマンドとのうちの１つ以上を含む、請求項１１に記載の装置。
【請求項１４】
前記フラッシュレーンコントローラは、ソフトコンテキストを受け取ると、通常動作モードから前記プロセッサ制御モードに切り替わり、１つ以上のソフトコマンドによって指定された１つ以上のソフトフラッシュ動作を実行し、前記ソフトコンテキストが完了すると前記通常動作モードに戻り、前記フラッシュレーンコントローラによってサポートされた１つ以上のコンテキストリストからコンテキストをフェッチし始めるように構成されることからなる、請求項１１に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１１年７月１４日に出願された米国仮特許出願第６１／５０７，６６５号明細書の利益を主張し、その全体が参照によって援用される。
【０００２】
本発明は、一般に、フラッシュメディアシステムに係り、特に、フレキシブルフラッシュコマンドを実現するための方法及び／又は装置に関する。
【背景技術】
【０００３】
フラッシュメモリインタフェースコマンドは、フラッシュメモリデバイスに対する情報の読み取り及び書き込みを制御するために用いられる。フラッシュメモリをロックするか、アンロックするか、プログラムするか、又は消去するために用いられる特定コマンドは、各製造業者によって異なる。デバイス作製ごとに固有のドライバソフトウェアを必要することを回避するために、従来のフラッシュメディアコントローラは、デバイスがそれ自体およびそのクリティカルなオペレーティングパラメータを識別することを許可する共通フラッシュメモリインタフェース（ＣＦＩ）コマンドのセットをサポートすることができる。共通フラッシュメモリインタフェース（ＣＦＩ）コマンドは、ハードウェア自動化を単純化し、インターオペラビリティに既存のフラッシュデバイスを提供しつつファームウェア設計を単純化する。しかしながら、共通フラッシュメモリインタフェース（ＣＦＩ）コマンドは、特定のフラッシュデバイスからの特定の性能の達成のためにコマンドのセットをサポートする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
フレキシブルフラッシュコマンドを実現するための方法及び／又は装置を実現することは望ましいだろう。
【課題を解決するための手段】
【０００５】
本発明は、フラッシュメディアシステムを制御する方法に関する。方法は、プロセッサ制御モードを有しており、ソフトコンテキストを作成すると共に送信するフラッシュレーンコントローラを提供することを含む。ソフトコンテキストは、一般に、プロセッサ制御モードにフラッシュレーンコントローラを配置する。プロセッサ制御モードでは、フラッシュレーンコントローラは、ソフトコンテキスト全体を格納し、全ての未解決のコンテキストを実行し終え、通常のハードウェア自動化をサスペンドし、その後、ソフトコンテキストを実行する。
【０００６】
本発明の目的、特徴、及び利点は、（ｉ）本来、適用されるフラッシュユニットであるハードウェアによってサポートされないコマンドを許可し、（ｉｉ）フラッシュレーンコントローラにのみ可視のプロセッサ制御モードを提供し、（ｉｉｉ）フラッシュで実行することができるほぼ全ての原子動作を実行するためにファームウェアによって導かれるハードウェアを許可し、（ｉｖ）ファームウェアがフラッシュメディアの制御及びデータの移動を容易にするためにフラッシュメディアコントローラに組み込まれたハードウェアリソースの直接制御をすることを許可し、及び／又は（ｖ）フラッシュメディアコントローラを制御するためのソフトコンテキストを作成すると共に送信するフレキシブルフラッシュコマンドを実現するための方法及び／又は装置を提供することを含む。
【０００７】
本発明のこれら及び他の目的、特徴、及び利点は、以下の明細書、添付された特許請求の範囲、及び図面から明らかになる。
【図面の簡単な説明】
【０００８】
【図１】チップ（ＳＯＣ）コンテキストのシステムにおいて実現されたフラッシュメディアコントローラを図示するブロック図である。
【図２】本発明の実施の形態によるフラッシュメディアコントローラ（ＦＭＣ）アーキテクチャの一例を図示するブロック図である。
【図３】本発明の実施の形態によるフラッシュレーンコントローラアーキテクチャの一例を図示するブロック図である。
【図４】図３のコンテキストマネージャモジュールのサブモジュールの一例を図示する図である。
【図５】図３のダイ管理モジュールのサブモジュールの一例を図示する図である。
【図６】図３のフラッシュ動作マネージャモジュールのサブモジュールの一例を図示する図である。
【図７】図３のデータフローマネージャモジュールのサブモジュールの一例を図示する図である。
【図８】図３のコンテキストマネージャモジュールの実施の形態の一例を図示する図である。
【図９】図３のフラッシュ動作マネージャの実施の形態の一例を図示する図である。
【図１０】図９のナノシーケンサのためのナノ命令のセットの一例を図示する図である。
【図１１】本発明によるソフトコンテキストの一例を図示する図である。
【発明を実施するための形態】
【０００９】
１つの実施の形態では、本発明によるシステムは、小型コンピュータシステムインタフェース（「ＳＣＳＩ」）に基づいた、ＳＡＳ（「シリアルアタッチドＳＣＳＩ」）、ＦＣ（「ファイバチャンネル」）、及びＦＣ−ＡＬ（「ファイバチャネルアービトレーテッドループ）を含む様々なマスストレージプロトコル、並びにシリアルＡＴＡ（「ＳＡＴＡ」）プロトコルで動作するように設計される。当業者はマスストレージプロトコルに精通しているため、これらプロトコルはここで更に説明されない。特定のプロトコルがどこで呼び出されるかを除いて、ここに開示されたシステムと方法は、用いられる特定のプロトコルに依存せず、プロトコルの全てで正確に動作するように設計される。更に、本発明の実施の形態によるシステム及び方法は、エンドユーザ等の他のアプリケーションのためのプロトコルと同様にエンタープライズレベルのアプリケーションのためのプロトコルを含む現在利用しているか又は開発されているいずれかの他の同様のプロトコルの利用のために適しているだろう。ここに説明されたシステムは、フレキシブルフラッシュコマンドを提供する新規な方法を含む。
【００１０】
図１を参照すると、本発明の実施の形態によるフラッシュメディアコントローラを有して実現されたシステム１００のブロック図が示される。一例では、システム（又はアーキテクチャ）１００は、ブロック（又は回路）１０２、複数のブロック（又は回路）１０４ａ〜１０４ｎ、複数のブロック（又は回路）１０６ａ〜１０６ｎ、ブロック（又は回路）１０８、ブロック（又は回路）１１０、ブロック（又は回路）１１２、ブロック（又は回路）１１４、及びブロック（又は回路）１１６を備える。回路１０２〜１１６は、ハードウェア、ファームウェア、ソフトウェア、ハードウェアの組み合わせ、ファームウェア、及び／又はソフトウェア、又は他の実装として実現されたモジュール及び／又はブロックを表わす。
【００１１】
一例では、ブロック１０２は、本発明の実施の形態によるフラッシュメディアコントローラ（ＦＭＣ）を実現する。ブロック１０４ａ〜１０４ｎは、フラッシュストレージデバイス又はコンポーネントの第１の数として実現される。ブロック１０４ａ〜１０４ｎは、ブロック１０２の第１のフラッシュレーンに連結される。ブロック１０２の第１のフラッシュレーンは、ブロック１０４ａ〜１０４ｎのそれぞれに独立したチップイネーブル（ＣＥ）信号を提供するように構成される。ブロック１０６ａ〜１０６ｎは、フラッシュストレージデバイス又はコンポーネントの第２の数として実現される。ブロック１０６ａ〜１０６ｎは、ブロック１０２の第２のフラッシュレーンに連結される。ブロック１０２の第２のフラッシュレーンは、ブロック１０６ａ〜１０６ｎのそれぞれに独立したチップイネーブル（ＣＥ）信号を提供するように構成される。ＦＭＣ１０２は、２つのフラッシュレーンインスタンスで図示されるが、特定の実施の形態のその設計基準を満たすために、より多くのフラッシュレーンが実現されるであろうことは当業者に明らかである。フラッシュコンポーネント１０４ａ〜１０４ｎ及び１０６ａ〜１０６ｎは、１つ以上のダイを備える単一のフラッシュパッケージとして実現される。フラッシュコンポーネント１０４ａ〜１０４ｎ及び１０６ａ〜１０６ｎは、ＮＡＮＤ及び／又はＮＯＲフラッシュデバイスを用いて実現される。ブロック１０２は、ＮＡＮＤフラッシュ及び／又はＮＯＲフラッシュのための適切なフィジカルレイヤサポート（ＰＨＹ）を含む。
【００１２】
ブロック１０８は、ブロック１０２に連結される外部のＦＭＣプロセッサ（ＦＡＲＭ）を実現する。ブロック１１０は、ブロック１０２に静的ランダムアクセスメモリ（ＳＲＡＭ）及び／又は動的ランダムアクセスメモリ（ＤＲＡＭ）を連結するように構成されるメモリコントローラを実現する。ブロック１１２は、１つ以上のＳＲＡＭデバイスとして実現される。ブロック１１４は、１つ以上のＤＲＡＭデバイスとして実現される。ブロック１１６は、ブロック１１０及びブロック１１４を連結するダブルデータレートフィジカルレイヤ（ＰＨＹ）インタフェースを実現する。一例では、ブロック１０２、１０８、１１０、１１２、１１４及び１１６は、チップ（ＳＯＣ）アーキテクチャのシステムを実現する。
【００１３】
ブロック１０２は、様々なアプリケーションがフラッシュデバイス１０４ａ〜１０４ｎ及び１０６ａ〜１０６ｎを用いるのを支援するように構成されたソフトＩＰブロックとして実現される。ここに用いられたように、用語のソフトＩＰブロックは、一般に、ソフトウェア（例えば、ＨＤＬコード、ＲＴＬコード等）で提供される集積回路のビルディングブロックを表わす。ブロック１０２は、一般に、フラッシュデバイスを有する複数のフラッシュインタフェースをサポートする。ブロック１０２は、一般に、プロセッサ（例えば、ＡＲＭ）を含まない。しかしながら、ブロック１０２は、一例では、外部プロセッサ１０８にブロック１０２を連結するように構成されたインタフェース（例えば、３２ビットＡＨＢ等）を実現する。ブロック１０２は、一般に、ブロック１０４ａ〜１０４ｎ及び１０６ａ〜１０６ｎによって構成されたフラッシュメディアマスストレージアレイの管理をハンドリングするように構成される。一例では、ブロック１０２は、付属する複数の独立したフラッシュコンポーネントを有する単一のフラッシュデータレーンに関連する大部分の管理機能を実行する多数例示されたフラッシュレーンコントローラ（ＦＬＣ）を利用する。ブロック１０２の機能は、ブロック１０２がフラッシュアクセスに関してほとんど理解しないという意味ではいくぶん一般的である。ブロック１０２は、一般に、フラッシュアウェアレーンをまとめ上げて単一のハードウェアエンティティを作ることに関する。一例では、ブロック１０２を実現するソフトＩＰは、アプリケーションのために出来る限り最大のレーンをサポートするためにパラメータ化する。例えば、１つの実施の形態では、レーンの数は２である。別の実施の形態では、その数は８である。
【００１４】
一例では、ブロック１０２は、以下に含まれる特徴をサポートする：（ｉ）２つのフラッシュレーン；（ｉｉ）フラッシュレーンのそれぞれでの８つまでのチップイネーブル信号（ＣＥ）；（ｉｉｉ）非同期ノーマルモード、非同期拡張モード、トグル１．０、ＯＮＦＩ２．１、ＯＮＦＩ２．３、及びトグル２．０を含むフラッシュインタフェース；（ｉｖ）専門のＥＣＣ又は複数のレーンの間で共有されたＥＣＣは、設定可能なハードウェアである（例えば、ブロック１０２を実現するソフトＩＰブロックの特徴をパラメータ化する）；（ｖ）フラッシュインタフェースでの８ビットデータ；（ｖｉ）トグル２．０でのフラッシュインタフェース又はＯＮＦＩ２．３でのフラッシュインタフェースの仕様の２００ＭＨｚまでのＤＤＲレート；（ｖｉｉ）部分的な読み取りコマンド、（ｖｉｉｉ）ランダム読み取りコマンド；（ｉｘ）フラッシュ書き込み／読み取りのＣＲＣストリップ／インサートオプション；（ｘ）４Ｋバイトデータのための６４ビットまでの訂正；（ｘｉ）５１２、２Ｋ、４Ｋバイトデータでの設定可能なｎビット訂正（最大ｎ＝６４）；（ｘｉｉ）レジスタプログラミングのための３２ビットＡＨＢインタフェース；（ｘｉｉｉ）外部メモリ（例えば、ＤＲＡＭ又はＳＲＡＭ）でのコンテキストコマンドの記憶；（ｘｉｖ）フラッシュレーンコントローラのカットスルーバッファ；（ｘｖ）優れたパフォーマンスを提供するための独立したフラッシュ読み書きデータパス；（ｘｖｉ）フラッシュユニットナンバー（ＦＵＮ）ごとにインオーダ状態の伝達；（ｘｖｉｉ）フラッシュレーンごとにデータパスのための１つの読み取り及び１つの書き込みバッファコントローラ（ＢＣ）インタフェースのサポート；（ｘｖｉｉｉ）コンテキスト訂正のための読み取りＢＣインタフェースのサポート；（ｘｉｘ）コンテキストアップデートのための書き込みＢＣインタフェースのサポート；（ｘｘ）コンテキストフリーリソースポインタ（ＣＦＲＰ）のための読み取り／書き込みＢＣインタフェースのサポート。
【００１５】
図２を参照すると、本発明の実施の形態によるフラッシュメディアコントローラ（ＦＭＣ）アーキテクチャの一例を図示する図１のブロック１０２のより多くの個別ブロック線図が示される。一例では、ブロック１０２は、バッファコントローラ（ＢＣ）インタフェース、フラッシュデバイスインタフェース、及びプロセッサインタフェース（例えば、３２ビットＡＨＢ等）の三大機能インタフェースを実現する。バッファコントローラ（ＢＣ）インタフェースは、ブロック図の左側及び左上に図示される。一例では、７つのバッファコントローラインタフェース（例えば、３つの読み取りインタフェースＢＣ＿ＲＤ＿Ｉ／Ｆ、３つの書き込みインタフェースＢＣ＿ＷＲ＿Ｉ／Ｆ、及び１つの読み取り／書き込みインタフェースＢＣ＿ＲＤ／ＷＲ＿Ｉ／Ｆ）が実現される。フラッシュデバイスインタフェースは、ブロック図の右側に図示される。一例では、２つのフラッシュレーンインタフェース（例えば、ＦＬＡＳＨ＿Ｉ／Ｆ＿０及びＦＬＡＳＨ＿Ｉ／Ｆ＿１）が実現される。３２ビットＡＨＢインタフェースは、ブロック図の右上に図示される。３２ビットＡＨＢインタフェースは、一例では、レジスタのプログラム、状態の読み取り、及びブロック１０２の内部のレジスタの診断に用いられる。
【００１６】
ブロック１０２は、一般に、ブロック（又は回路）１５０、ブロック（又は回路）１５２、複数のブロック（又は回路）１５４ａ〜１５４ｎ、複数のブロック（又は回路）１５６ａ〜１５６ｎ、複数のブロック（又は回路）１５８ａ〜１５８ｎ、ブロック（又は回路）１６０、ブロック（又は回路）１６２、ブロック（又は回路）１６４、ブロック（又は回路）１６６、ブロック（又は回路）１６８、ブロック（又は回路）１７０、複数のブロック（又は回路）１７２ａ〜１７２ｎ、及び複数のブロック（又は回路）１７４ａ〜１７４ｎを備える。回路１５０から１７４ａ〜１７４ｎは、ハードウェア、ファームウェア、ソフトウェア、ハードウェアの組み合わせ、ファームウェア、及び／又はソフトウェア、又は他の実装として実現されるモジュール及び／又はブロックを表わす。ブロック１５０は、プロセッサインタフェースロジック（ＰＩＬ）を実現する。ブロック１５２は、データＤＭＡマネージャ（ＤＤＭ）を実現する。ブロック１５４ａ〜１５４ｎは、フラッシュバスコントローラ（ＦＢＣ）を実現する。ブロック１５６ａ〜１５６ｎは、フラッシュレーンコントローラ（ＦＬＣ）を実現する。ブロック１５８ａ〜１５８ｎは、データ転送パス（ＤＴＰ）を実現する。ブロック１６０は、コンテキストフェッチアービタ（ＣＡ）を実現する。ブロック１６２は、コンテキストフリーポインタリソース（ＣＦＰＭ）を実現する。ブロック１６４は、消費コンテキストマネージャ（ＣＣＭ）を実現する。ブロック１６６は、コンテキスト訂正ポート（ＣＲＰ）を実現する。ブロック１６８は、コンテキストアップデートポート（ＣＵＰ）を実現する。ブロック１７０は、コンテキストポインタリストポート（ＣＰＬＰ）を実現する。ブロック１７０は、一般に、オプションである。ブロック１７２ａ〜１７２ｎは、データＤＭＡ読み取りインタフェースポート（ＤＤＲＩＰ）を実現する。ブロック１７４ａ〜１７４ｎは、データＤＭＡ書き込みインタフェースポート（ＤＤＷＩＰ）を実現する。そして、ブロック１７２ａ〜１７２ｎ及び１７４ａ〜１７４ｎは、一般に、データＤＭＡインタフェースポート（ＤＤＩＰ）を構成する。
【００１７】
一例では、ブロック１５０は、ブロック１０８からブロック１０２の指定可能なリソースにインタフェースを提供する（例えば、ＡＭＢＡ  ＡＨＢライトインタフェースを介して）。ブロック１５０は、構成のために全ての指定可能なリソース、ダイレクトインタフェース、及びブロック１５６ａ〜１５６ｎの内部に存在しないブロック１０２のサブモジュールの状態レジスタにインタフェースを提供する。ブロック１５０は、同様にそれぞれのブロック１５６ａ〜１５６ｎの内部に存在する指定可能なリソースにインタフェースを提供する。更に、ブロック１５０は、プロセッサファームウェアはブロック１６８を介してシステムバッファの中への記憶のためのブロック１０２に実メディアコンテキストを書き込むコンテキスト構造バッファ（ＣＣＢ）を含む。一例では、ブロック１５０は以下の特徴を含む：ブロック１０８に対する３２ビットＡＭＢＡ  ＡＨＢライトスレーブインタフェース、入力クロック（例えば、ＨＣＬＫ）のいくらか分割値（又は同じ）システムクロック（例えば、ＳＹＳ＿ＣＬＫ）、ブロック１０２の全てのプロセッサ指定可能スペースと同様に全ての構成及び状態レジスタに対するアクセス、システムバッファに格納されるコンテキストを構築するためにプロセッサファームウェアによって用いられるコンテキスト構造バッファ（ＣＣＢ）、指定可能リソースのアクセスがプロセッサアクセスポート（ＰＡＰ）によってハンドリングされ、ブロック１０２で複数のサブモジュールによって用いられるレジスタを含んでいる場合、ブロック１５６ａ〜１５６ｎのそれぞれに分配されるプロセッサインタフェース。ブロック１５０は、全てのレジスタの復号化を実行し、ブロック１５６ａ〜１５６ｎにおいて論理的に格納されない全ての指定可能なリソースのために読み取りデータを多重化する。
【００１８】
ブロック１５２は、一般に、２つのデータ転送、フラッシュプログラム（例えば、バッファからフラッシュデバイスへのデータトランザクション）のための１つ、及びフラッシュ読み取り（例えば、フラッシュデバイスからバッファへのデータトランザクション）のための別のものを管理する。ＤＭＡデータパスは、一般に、ブロック１５６ａ〜１５６ｎからそれぞれのブロック１５８ａ〜１５８ｎ、データＤＭＡインタフェースポート（ＤＤＩＰ）ブロック１７２ａ〜１７２ｎ及び１７４ａ〜１７４ｎを通じて別々の３２ビットの読み書きデータバスを備える。ブロック１５８ａ〜１５８ｎは、ＥＣＣ機能を含む。ＤＭＡデータ転送は、一般に、ブロック１０２の他のサブブロック（又はポートブロック）によって対応するコンテキストに対するマルチプルアクセスを含むイベントのシーケンスを備える。一例では、ＤＭＡ転送は、ＦＬＣ要求、検索コンテキスト動作、データ転送、及びＦＬＣ完了フェーズを含む。
【００１９】
ＦＬＣ要求ステップにおいて、データ転送は、それぞれの要求ラインをレイズするブロック１５６ａ〜１５６ｎの１つから開始する。検索コンテキスト動作では、対応するコンテキストはコンテキスト訂正ポート（ＣＲＰ）インタフェース１６６を介してバッファコントローラから検索される。データ転送は、コンテキストがＤＤＩＰに送信されると共に返答をし又はしない間に、ＤＤＩＰ、ＤＴＰ、及びＦＬＣブロックの間で発生する。ＦＬＣ完了フェーズでは、選択されたブロック１５６ａ〜１５６ｎに対する完了ラインは転送の終わりを示すためにレイズされる。ＤＤＭ１５２は、コンテキストを検索し、データトランザクションを容易にするためにＤＴＰブロックに入力を提供するために作用する。
【００２０】
ブロック１５４ａ〜１５４ｎは、一般に、フラッシュレーンのそれぞれの１セットのＮＡＮＤフラッシュデバイスに対するローレベルのインタフェースシグナリングを実行する。一般に、フラッシュレーンコントローラ（ＦＬＣ）１５６ａ〜１５６ｎのそれぞれのために１つのフラッシュバスコントローラ（ＦＢＣ）１５４ａ〜１５４ｎがある。ブロック１５４ａ〜１５４ｎは、一般に、与えられたタイプ（例えば、非同期、ＯＮＦＩ２．０同期、ＯＮＦＩ２．３同期、三星トグル１．０、三星トグル２．０等）のための異なるタイミングモードと同様にいくつかのインタフェースタイプのために、フラッシュインタフェースプロトコルのサイクルのそれぞれのタイミングを管理する。サイクルのタイミングは、一例では、内部タイミングレジスタのグループに格納されたタイミングカウントを介して制御される。ブロック１５４ａ〜１５４ｎのコアロジックは、一般に、ブロック１０２の残りとは異なるクロックドメインで動作する。一般に、タイミングレジスタセットのみが、ブロック１５６ａ〜１５６ｎの残りと同一のクロックドメインに属する。同期ロジックは、一般に、ＦＢＣが静止しているときに限り（例えば、未解決の動作がない）、レジスタが書き込まれるため、レジスタが静的なものとして扱われるので、これらのレジスタとＦＢＣコアとの間に必要でない。
【００２１】
ブロック１５６ａ〜１５６ｎは、一般に、ダイのそれぞれに対するコマンドのスケジューリングを実行する。ブロック１５６ａ〜１５６ｎは、フラッシュレーンのそれぞれでのコマンドのシーケンシングを管理する。ブロック１５６ａ〜１５６ｎは、ダイをプログラムすると共に状態を監視するファームウェアを通じて制御と状態レジスタを提供する。ブロック１５６ａ〜１５６ｎのそれぞれは、コンテキスト管理及びダイ管理を含む。ブロック１５６ａ〜１５６ｎは、一般に、コンテキストの処理のための役割を担う。
【００２２】
ブロック１５８ａ〜１５８ｎのそれぞれは、データトラフィックを送り、ブロック１５４ａ〜１５４ｎ、オプションの内部ＥＣＣエンコーダ／デコーダ、及びデータＤＭＡインタフェースポート（ＤＤＩＰ）のそれぞれの１つの間においてデータフローのためのインタフェースのそれぞれのフロー制御を有効にする。一例では、内部ＥＣＣエンコーダ／デコーダは、ブロック１５８ａ〜１５８ｎの内部で実現される。また、ブロック１５８ａ〜１５８ｎのそれぞれは、単一のＥＣＣエンコーダ／デコーダモジュールを共有するように構成される。ブロック１５８ａ〜１５８ｎは、データＤＭＡマネージャ（ＤＤＭ）モジュール１５２のそれぞれとデータＤＭＡインタフェースポート（ＤＤＩＰ）ブロック１７２ａ〜１７２ｎ及び１７４ａ〜１７４ｎのそれぞれとの両方によって転送のそれぞれのためにプログラムされる。ブロック１５８ａ〜１５８ｎのそれぞれは、全二重動作モードで動作する独立したフラッシュ読み書きパスを含む。ブロック１５８ａ〜１５８ｎは、リージョンのそれぞれの内部の現在のｄｗｏｒｄカウントと同様にデータ転送の間に現在のリージョンカウントを保持する。ブロック１５８ａ〜１５８ｎは、一般に、ＤＤＩＰ、ＥＣＣエンコーダ＆デコーダ、及びＦＬＣブロックの間のフロー制御変換を実行する。ブロック１５８ａ〜１５８ｎは、転送のそれぞれのために訂正可能なＥＣＣエラー和の動作を保持し、転送の終わりでブロック１５２に対する終値を送信する。ブロック１５８ａ〜１５８ｎは、ＥＣＣエンコーダ＆デコーダのプログラムのために用いられるＦＭＣレジスタを含む。レジスタは、ブロック１５０からのレジスタインタフェースを介してアクセスされる。ＥＣＣモジュールは、一般に、４Ｋバイト以上のデータの６４ビット訂正ができる。しかしながら、他のレベルの訂正は、特定の実施の形態のその設計基準を満たすために実現される。一例では、デコーダゲートカウントは４１５Ｋゲートであり、エンコーダゲートカウントは７５Ｋゲートである。
【００２３】
ブロック１６０は、一般に、ブロック１５６ａ〜１５６ｎからコンテキストのための要求を受け取り、システムバッファ（例えば、バッファコントローラを介してアクセスされたＤＲＡＭ）から要求されたコンテキストを検索し、その後、ブロック１５６ａ〜１５６ｎにコンテキストを伝達するための役割を担う。訂正は、事実上、コンテキスト訂正アクセスポート（ＣＲＰ）１６６に対する要求を介して実行される。コンテキストは、ＦＭＣの制御の基本ユニットである。コンテキストは、一般に、コマンドを実行するためのＦＬＣによって、及びシステムバッファに又はそのシステムバッファから関連データ転送（ＤＭＡ）を実行するためのＦＭＣによって必要とされる全ての情報を含む。ＦＬＣは、完全に自主的に動く。従って、ＦＬＣは、ファームウェアによって構築されたコンテキストのリンクリストを含むシステムバッファへのバッファコントローラを介するアクセスのためのアービトレーションを必要とする。ブロック１６０は、一般に、ブロック１６６に対する要求の開始と同様にアービトレーションを提供する。その後、ブロック１６０は、ＦＬＣデスティネーションのそれぞれに検索されたコンテキストを率直に送る。ブロック１６２は、一般に、フリーポインタがファームウェアに使用可能な単一のポイントを提供するために、ブロック１０２のサブブロックとして実現される。
【００２４】
ブロック１６４は、一般に、完了したコンテキストが完了の後にファームウェアによって検査される単一のポイントを提供するために、ブロック１０２のサブブロックとして実現される。ブロック１６４は、一般に、複数のＦＬＣソースの間でアービトレーションを実行する。ＦＬＣは、コンテキストポインタに関連するパス／フェイルＥＣＣ状態を提供する。ブロック１６４は、コンテキストがフェッチされたならば、コンテキスト状態フィールドをアップデートし、その後、ファームウェアに対するコンテキストを送信する。ファームウェアが完了したコンテキストを読み取るためのより長い時間を要し、ブロック１６４の内部の内部メモリが満たされる場合には、ブロック１６４は、現在の報告されたコンテキストの後に待ち行列に入れられる完了したコンテキストを格納するためにバッファを用いる。
【００２５】
ブロック１６６〜１７４ｎは、一般に、ポートインタフェースを実現する。ポートインタフェースは、バッファコントローラによって通信するために用いられる。一例では、ＱＢＦＩＦＯブロックは、ポートインタフェースの内部で実現される。以下のポートインタフェースもポートインタフェースの一部として実現される：コンテキスト訂正ポート（ＣＲＰ）１６６、コンテキストアップデートポート（ＣＵＰ）１６８、コンテキストポインタリストインタフェースポート（ＣＰＬＩＰ）１７０（オプション）、データＤＭＡ読み取りインタフェースポート（ＤＤＲＩＰ）１７２ａ〜１７２ｎ、及びデータＤＭＡ書き込みインタフェースポート（ＤＤＷＩＰ）１７４ａ〜１７４ｎ。一例では、ブロック１０２のインタフェース信号は、４大インタフェースにグループ化される：ＡＨＢインタフェース、バッファコントローラインタフェース、ＮＡＮＤ及び／又はＮＯＲフラッシュフィジカルレイヤ（ＰＨＹ）インタフェース、及びミソレニアス（ＭＩＳＣ）インタフェース。バッファコントローラインタフェースは、（ｉ）レーン０＆レーン１のためのＤＤＩＰ  ＢＣ書き込みインタフェース、（ｉｉ）レーン０＆レーン１のためのＤＤＩＰ  ＢＣ読み取りインタフェース、（ｉｉｉ）ＣＲＰ  ＢＣ読み取りインタフェース、（ｉｖ）ＣＵＰ  ＢＣ書き込みインタフェース、及び（ｖ）ＣＰＬＩＰ  ＢＣ読み取り／書き込みインタフェース。
【００２６】
一例では、ブロック１０２は、３つのクロックで実現される。ブロック１０２の大多数のロジックは、システムクロック（例えば、ＳＹＳ＿ＣＬＫ）と呼ばれるクロックドメインで動作する。システムクロックは、ＡＨＢクロックである。システムクロックは、一般に、ＦＭＣプロセッサ（ＦＡＲＭ）１１２の動作周波数の２分の１の周波数を有する。第２のクロックは、フラッシュクロック（例えば、ＦＢＣ＿ＣＬＫ）と呼ばれる。フラッシュバスコントローラ（ＦＢＣ）１５４ａ〜１５４ｎは、完全にフラッシュクロックドメインで動作する。一例では、先入れ先出しバッファ（ＦＩＦＯ）は、クロックＦＢＣ＿ＣＬＫとＳＹＳ＿ＣＬＫとの間の周波数を管理するために、ブロック１５４ａ〜１５４ｎのデータフローマネージャ（ＤＭ）モジュールで実現される。第３のクロックは、バッファコントローラクロック（例えばＢＣ＿ＣＬＫ）である。ＢＣを有する全てのインタフェースポートは、バッファコントローラクロックドメインで動作する。バッファリングエレメント（例えば、ＱＢＦＩＦＯ）は、バッファコントローラクロックＢＣ＿ＣＬＫとシステムクロックＳＹＳ＿ＣＬＫとの間で実現される。
【００２７】
図３を参照すると、本発明の実施の形態によるフラッシュレーンコントローラアーキテクチャの一例を図示するブロック２００の図が示される。ブロック２００は、一例では、図２のブロック１５４ａ〜１５４ｎ及び１５６ａ〜１５６ｎを実現するために用いられる。一例では、ブロック（又は回路）２００は、ブロック（又は回路）２０２、ブロック（又は回路）２０４、ブロック（又は回路）２０６、ブロック（又は回路）２０８、ブロック（又は回路）２１０、ブロック（又は回路）２１２、及びブロック（又は回路）２１４を備える。回路２０２〜２１０は、ハードウェア、ファームウェア、ソフトウェア、ハードウェアの組み合わせ、ファームウェア、及び／又はソフトウェア、又は他の実装として実現されるモジュール及び／又はブロックを表わす。ブロック２０２は、一例では、コンテキスト処理コーディネータ（ＣＰＣ）を実現する。ブロック２０４は、一例では、コンテキストマネージャ（ＣＭ）を実現する。ブロック２０６は、一例では、ダイ管理モジュール（ＤＭＭ）を実現する。ブロック２０８は、一例では、フラッシュ動作マネージャ（ＦＯＭ）を実現する。ブロック２１０は、一例では、プロセッサアクセスポート（ＰＡＰ）を実現する。ブロック２１２は、一例では、フラッシュバスコントローラ（ＦＢＣ）を実現する。ブロック２１４は、一例では、データフローマネージャ（ＤＦＭ）を実現する。
【００２８】
ブロック２０２は、ブロック２００に及びそのブロックからのコンテキスト情報のフローをアシストする。コンテキストフローは、ブロック２０４によって開始される。ブロック２０２は、コンテキストを取得するか解放するための要求に応えることに主として関する。コンテキストを取得するために、ブロック２０２は、ブロック２０４による新規のコンテキストのための要求に応える。最初に、ブロック２０２は、ブロック２０６に対する要求を開始する。ブロック２００によって管理されたダイの間にアービトレートし、ブロック２０２に選択されたダイ又は論理装置番号（ＬＵＮ）のためのコンテキストを転送する。その後、ブロック２０２は、システムバッファからコンテキストを検索することを試みるコンテキストフェッチアービタ（ＣＦＡ）（例えば、図２のブロック１６０）に対するフェッチをもたらす。
【００２９】
フェッチされたならば、コンテキストは、ブロック２０２に伝達される。ブロック２０２は、コンテキストでいくらかの解釈を実行し、ブロック２０４にコンテキストを転送する。ブロック２０６がコンテキストの実行を開始するために使用可能なダイ（ＬＵＮ）を有さないならば、ブロック２０６は、使用可能なダイの不足をブロック２０２に通知し、ブロック２０２は、ブロック２０４に使用可能なダイの不足への返答を通信する。ブロック２０２は、完了したコンテキストの解放においてもブロック２００をアシストする。再び、このフローを開始するのはブロック２０４であり、消費コンテキストマネージャ（ＣＣＭ）（例えば、図２のブロック１６４）を実現するブロックに対する解放メッセージをもたらすのはブロック２０２である。解放メッセージがＣＣＭによって受信され動作が開始されたとき、ブロック２０２は、ブロック２０４に通知し、その後、ブロック２０４は、コンテキスト処理の実行を保持する。
【００３０】
ブロック２０２は、一般に、コンテキストのいくらかの解釈を実行する。具体的には、ブロック２０２は、コンテキストがプロセッサ制御モード（ＰＣＭ）コンテキストか否かを判断する目的でコンテキストを解釈する。ＰＣＭコンテキストが受信されるとき、コンテキストフェッチ（追加）は停止するべきである。その後、ブロック２０２は、ブロック２０４がＰＣＭコンテキストを実行し始めることを待ち、プロセッサ制御モードが完了するとき、「スタンダード」動作を再開する。プロセッサ制御モードインターバルの間に、ブロック２０２は、フェッチされたコンテキストが４つのｄｗｏｒｄフラッシュコンテキストの代わりに完全な１５のｄｗｏｒｄコンテキストか否かを判断し、ブロック２０２は「スタンダード」動作のブロック２０４にそれらを送信する。
【００３１】
ブロック２０４は、一例では、コンテキスト状態マシン（ＣＳＭ）、コンテキストフェッチマネージャ（ＣＦＭ）、コンテキスト解放エンジン（ＣＤＥ）、及びコンテキストインタープリタ（ＣＩ）を備える。ブロック２０４は、一般に、ブロック２００によって活動的に処理されるコンテキストを管理する役割を担う。ブロック２０４は、一般に、アクティブなコンテキストの「ブックキーピング」を実行する。コンテキストは、システムバッファに対するフラッシュトランザクション及びＤＭＡを実行するためにフラッシュメディアコントローラ（ＦＭＣ）によって必要とされる全ての情報を提供するデータ構造である。ブロック２０４は、フラッシュレーンコントローラのレベルでコンテキストを管理し、従って、フラッシュトランザクションに関連するように、コンテキスト管理に主として関する。ブロック２０４は、フラッシュレーンのフラッシュダイに対するコマンド及びデータ転送を実行するために、ブロック２０８によって用いられる情報を保持する。
【００３２】
ブロック２０６は、一般に、ブロック２００の動作のために必要とされるダイに基づいた情報を保持するための役割を担う。ブロック２０６は、ダイ管理テーブルのダイごとに情報を管理し、コンテキストテーブルへの待ち行列となるためのアクセスのためにダイの間にアービトレートする。ブロック２０６は、一例では、ダイ状態をアップデートするためにダイ状態マシンを含む。ブロック２０６は、マルチダイ動作を実行／モニタリングする。ブロック２０６は、一般に、ＲＥＡＤ、ＣＯＰＹＢＡＣＫ  ＲＥＡＤ／ＣＯＰＹＢＡＣＫ  ＷＲＩＴＥ、ＢＬＯＣＫ  ＥＲＡＳＥ、ＰＡＧＥ  ＰＲＯＧＲＡＭを含み、これらに限定されないフラッシュコマンド、及びＲＥＡＤ  ＩＤ、ＲＥＡＤ  ＰＡＲＡＭＥＴＥＲ  ＰＡＧＥ、ＧＥＴ  ＦＥＡＴＵＲＥＳ、ＳＥＴ  ＦＥＡＴＵＲＥＳ、ＳＹＮＣＨＲＯＮＯＵＳ  ＲＥＳＥＴ、及びＲＥＳＥＴを含み、これらに限定されないターゲットレベルコマンドのための役割を担う。
【００３３】
ブロック２０８は、一般に、フラッシュレーンに適用されたフラッシュ動作のそれぞれのシーケンシングをハンドリングする。１つのブロック２０８は、一般に、フラッシュメディアコントローラのフラッシュレーンコントローラ（ＦＬＣ）のそれぞれのために実現される。ブロック２０８は、ブロック２０４のコンテキストテーブルのコマンドの間にアービトレートし、ブロック２１２にコマンドを適用する。一例では、ブロック２０８は、本来、三星ＮＡＮＤフラッシュデバイスにおいて知られたいくつかの特定の（かつ類似した）コマンドと同様にＯＮＦＩ２．０コマンドリストからの大部分の共通コマンドをサポートする。更に、他の既存の及び将来のコマンドは、ナノシーケンサ（図９〜１１に関してより詳細に説明される）を介してサポートされる。本来、サポートされたコマンドは、プロセッサインターベンションなしに実行されるが、一般に他のコマンドはいくらかのレベルのプロセッササポートを用いる。
【００３４】
フラッシュコマンドは、ブロック２０８によって制御された実際のフラッシュダイに連続的に適用される原子の「サイクル」に分割される。典型的には、フラッシュコマンドが長いウェイト時間（例えば、データがチップから読み取られるために使用可能な前に、ページ読み取りは２５μｓを要する）を含んでいるので、「コマンドサイクル」は、しばしばフラッシュレーン上の異なるダイに「バックツーバック」実行され、従って、累積的なウェイト時間を効果的に削減できる。ブロック２０８は、一般に、フラッシュ「サイクル」のそれぞれが適用されるとき、ダイの状態をアップデートすることによってフラッシュダイを管理する。その後、ブロック２０８は、「サイクル」が次に実行されるべき（又はありうる）であるかを判断するべきための最新のコンテキストテーブルを読み取る。ＮＡＮＤフラッシュ動作は、一般に、１つ以上のフラッシュサイクルで構成される。４つのタイプのフラッシュサイクルが一般にある：コマンド、アドレス、データ出力（フラッシュデバイスについては、例えば、読み取り）、及びデータ入力（フラッシュデバイスについては、例えば、書き込み）。サイクルタイプは、大雑把に言ってブロック２０８とブロック２１２との間に定義された動作タイプに解釈する。
【００３５】
ブロック２１０は、一般に、ブロック２００の内部のアドレス可能なリソースにＦＭＣ１００のＡＨＢライトスレーブインタフェースからのプロセッサアクセスを提供するインタフェースブロックを実現する。ここでアドレスされた大部分のリソースは、全てのコンフィギュレーション信号がグローバルレベル（共有コンフィギュレーションレジスタブロックの一部としての）で送信されるとき、主として診断目的のためのアクセス可能である。例えば、フラッシュレーンデータバッファに対する完全なアクセスは、ブロック２１０によって使用可能である。アクセスは単に迅速な検証の足がかりとして提供される。しかしながら、フラッシュレーンデータバッファに対するアクセスは、内部テーブルに対する直接アクセスを必要とするファームウェアパッチもサポートする。そのようなアクセスは、ブロック２１０によって提供される。
【００３６】
ブロック２１０の特徴は次のものを含む：ＡＨＢライトスレーブプロトコルに従い、ＦＭＣにおいてプロセッサインタフェースロジック（ＰＩＬ）によってバッファされるシンプルアクセスインタフェース；リソース、コンテキストテーブル、コンテキストキャッシュ、及びダイ管理テーブルをレジストするために提供される読み取り書き込みアクセス；ブロック２１４に位置されるフラッシュレーンデータバッファメモリリソースに提供される読み取り書き込みアクセス。大部分のコンフィギュレーションレジスタは、一般に、ブロック２００に入力として提供されるが、ブロック２１０は、一般に、レーンごとにコンフィギュレーションレジスタを追加するための能力をサポートする。同様に、大部分の状態及び割り込みレジスタは、一般に、ブロック２００の外部に生成されるが、状態及び割り込みレジスタアクセスはサポートされる。ブロック２１０の主要なロジックグループは次のものを含む：インタフェースマネージャ（ＩＦ＿ＭＧＲ）、データフローマネージャインタフェース（ＤＭ＿ＩＦ）、レジスタブロックデコーダ（ＲＥＧ＿ＤＥＣ）、レジスタブロックマルチプレクサ（ＲＥＧ＿ＭＵＸ）、割り込みハンドラ（ＩＮＴ＿ＨＮＤ）、及びＦＬＣグローバルレジスタ（ＧＬＯＢ＿ＲＥＧＳ）。
【００３７】
図４を参照すると、図３のコンテキストマネージャモジュール２０４のサブモジュールを図示する図が示される。一例では、ブロック２０４は、コンテキストテーブル（ＣＴ）２２０、コンテキスト状態マシン（ＣＳＭ）２２２、コンテキストキャッシュ（ＣＣ）２２４、及びコンテキスト待ち行列コントローラ（ＣＱＣ）２２６を含む。ブロック２０４は、一般に、フラッシュレーンコントローラに対する動作のフェーズをステージし実行し、フラッシュレーンで全てのアクティブなコンテキストのプライオリティオーダリングを保持し、フラッシュレーンでコンテキストのそれぞれの状態を保持し、完全なトランザクションを実行するために必要とされるコンテキストのテンポラリオンチップストレージの最低量を提供し（例えば、コンテキストキャッシュを介して）、実行が進行中のコンテキストのそれぞれのバッファポインタを保持し、及びコンテキスト状態マシン（ＣＳＭ）２２２を用いてコンテキストの次の状態を決定することによって、コンテキストのそれぞれのためにエージェンシーを提供する。最小のコンテキスト情報は、コンテキストテーブル（ＣＴ）２２０に保持される。コンテキストテーブル２２０は、一般に、現在実行されているコンテキストの優先待ち行列を提供する。コンテキスト待ち行列コントローラ（ＣＱＣ）２２６は、コンテキストテーブル２２０から完了したコンテキストを除去し、かつギャップを削減するためにコンテキストテーブル２２０を圧縮するように構成される。
【００３８】
図５を参照すると、図３のダイ管理モジュール２０６のサブモジュールを図示する図が示される。一例では、ブロック２０６は、ダイ状態マシン２３０、ダイサービスアービタ２３２、及びダイ管理テーブル２３４を備える。
【００３９】
図６を参照すると、図３のフラッシュ動作マネージャ（ＦＯＭ）２０８のサブモジュールを図示する図が示される。一例では、ブロック２０８は、４つのサブモジュール、コマンドアービタ（ＣＡ）２４０、データ転送アービタ（ＤＴＡ）２４２、フラッシュ動作フォーマッタ（ＦＯＦ）２４４、及びナノシーケンサ２４６に分割される。コマンドアービタ２４０は、一般に、適用するためのコマンドのためにコンテキストテーブルをスキャンし、その後、フラッシュバッファコントローラ（ＦＢＣ）に信号を送信するためにフラッシュ動作フォーマッタ（ＦＯＦ）２４４によって通信する。全ての「コマンド」の部分が実行され、フラッシュが「データフェーズ」のための準備ができたならば、データ転送アービタ２４２は、ＦＢＣとデータフローマネージャ（ＤＭ）２１４との間の転送を開始する。最後に、ナノシーケンサ２４６は、本来、コマンドシーケンスがサポートされてなくても、フラッシュが必要とするあらゆるコマンドシーケンスを適用するために特別の「ソフトコンテキスト」を解釈する。
【００４０】
図７を参照すると、図３のデータフローマネージャ２１４のサブモジュールを図示する図が示される。データフローマネージャ２１４は、一般に、フラッシュレーンデータバッファメモリリソースを提供する。一例では、フラッシュレーンデータバッファメモリリソースは、カットスルーバッファ２５０及び２５２を備える。一例では、カットスルーバッファ２５０及び２５２は、プログラマブルなサイズで実現される。例えば、バッファ２５０及び２５２のサイズは、帯域幅仕様とマッチするように調節される。一例では、バッファ２５０及び２５２は、静的ランダムアクセスメモリ（ＳＲＡＭ）を備える。しかしながら、他のタイプのメモリは、特定の実施の形態のその設計基準を満たすために実現される。一般に、２つのカットスルーバッファは、フラッシュレーンごとに実現される。
【００４１】
図８を参照すると、図３のコンテキストマネージャ（ＣＭ）２０４の実施の形態の一例を図示する図が示される。コンテキストマネージャ（ＣＭ）２０４は、一般に、フラッシュレーンコントローラ（ＦＬＣ）のそれぞれによってアクティブに処理されているコンテキストを管理する役割を担う。ＣＭ２０４は、一般に、アクティブなコンテキストの「ブックキーピング」を実行する。先に述べたように、コンテキストは、システムバッファに対するフラッシュトランザクション及びＤＭＡを実行するためにフラッシュメディアコントローラ（ＦＭＣ）１０２によって用いられる全ての情報を提供するデータ構造である。ＣＭ２０４は、ＦＬＣのレベルでコンテキストを管理し、従って、フラッシュトランザクションに関連するコンテキスト管理に主として関する。ＣＭ２０４は、フラッシュレーンのフラッシュダイに対するコマンド及びデータ転送を実行するためにフラッシュ動作マネージャ（ＦＯＭ）によって用いられる情報を保持する。
【００４２】
ＣＭ２０４は、一般に、（ｉ）フラッシュレーンコントローラのそれぞれに対する動作のフェーズをステージし実行し、するように構成される。（ｉｉ）フラッシュレーンのそれぞれで全てのアクティブなコンテキストのプライオリティオーダリングを保持し、（ｉｉｉ）フラッシュレーンのそれぞれでコンテキストのそれぞれの状態を保持し、（ｉｖ）完全なトランザクションを実行するために用いられるコンテキストのテンポラリオンチップストレージ（例えば、コンテキストキャッシュ２２４を介して）の最低量（又は最小限に抑えた量）を提供し、（ｖ）実行が進行中のコンテキストのそれぞれのバッファポインタを保持し、（ｖｉ）コンテキスト状態マシン（ＣＳＭ）２２２を用いてコンテキストの次の状態を決定することによって、コンテキストのそれぞれのためにエージェンシーを提供し、及び（ｖｉｉ）現在実行されているコンテキスト（例えば、コンテキストテーブル２２０）の優先待ち行列に最小のコンテキスト情報を保持する。コンテキスト待ち行列コントローラ２２６は、一般に、コンテキストテーブル２２０から完了したコンテキストを除去し、かつギャップを削減するためにコンテキストテーブル２２４を圧縮するように構成される。
【００４３】
コンテキスト待ち行列コントローラ（ＣＱＣ）２２６は、コンテキストテーブル（ＣＴ）２２０で修正を実行するロジックブロックである。ＣＴ２２０は、一例では、待ち行列に入れられたコンテキストごとに１つのエントリに編成されるレジスタのブロックとして実現される。ＣＱＣ２２６は、優先待ち行列として編成されるテーブルで動作を実行するブロックである。ＣＱＣ２２６は、一般に、コンテキスト処理を開始し実行し、コンテキストテーブルの処理を実行する役割を担う。メイン処理は、一般に、追加、待機、修正、解放、及び圧縮の処理を含む。処理は、ＣＱＣ２２６によってステージされ実行される。
【００４４】
追加フェーズは、新規のコンテキストがＦＭＣによってフェッチされ、それらのコンテキストのためのエントリがコンテキストテーブル２２０に追加されるフェーズである。ＣＱＣ２２６は、ＣＰＣ２０２によって送信されたフラッシュコンテキスト及びコンテキスト情報の内容を検査し、内容とコンテキスト情報に基づいたエントリを追加し、作成する。一例では、コンテキストテーブルエントリは、コンテキストテーブルエントリがアクティブか否かを示すビット（又はフラグ）、コンテキスト状態を表わす値、コンテキストキャッシュインデックスを表わす値、フラッシュ動作を送信する値、フラッシュダイを表わす値、コンテキストポインタ、データ転送を無効にするべきか否かを示すビット（又はフラグ）、及びプレーンアドレスを表わす値を備える。新規なエントリは、一般に、「アクティブな」ビットセット（例えば、ロジック「１」）によって開始し、「コンテキスト状態」は値「ＱＵＥＵＥＤ」に設定する。フラッシュ動作がイリーガルの場合、初期状態は値「ＩＬＬＥＧＡＬ」に設定され、コンテキストテーブルエントリは解放フェーズの間に除去される。他のフィールドは、一般に、ＣＱＣ２２６によって提供されるコンテキストと情報によって決定される。新規なエントリは、一般に、圧縮されたコンテキストテーブル２２０の末尾に追加される。従って、ＣＱＣ２２６は、一般に、コンテキストテーブル２２０の深度を知っている。
【００４５】
ＣＱＣ２２６は、一般に、ＣＱＣ２２６がもはや未解決のデータ転送が完了するのを待っておらず、ＣＱＣ２２６が与えられたフラッシュ動作サイクルの間に少なくとも１つ追加の動作を試みたとき、「追加」フェーズを完了する。ＣＱＣ２２６は、コンテキストテーブル２２０又はコンテキストキャッシュ２２４に使用可能なスペースがもはやないときも、「追加」フェーズを完了する。
【００４６】
コンテキストマネージャ２０４は、完全なフラッシュ動作サイクルの間に待つことを強制されるか、又は強制されない。コンテキストマネージャ２０４は、一般に、最小のフラッシュ動作期間（例えば、フラッシュ動作期間レジスタを介して）を強制するための能力を有する。そのような最小の期間は、例えば、フラッシュレーンがＰＲＯＧＲＡＭ又はＥＲＡＳＥのコマンドの後にポーリングすることを除いて主として使用されていないケースのために望ましい。そのようなインスタンスでは、コンテキストフェーズは、追加又は解放がないとき、実行するべきための非常に短時間を要する。従って、レーンが連続的に使用中であるフラッシュダイをポーリングする状態においてレーンが存在するための傾向があり、その結果としてその消費電力が保証されないときフラッシュインタフェースで電力を消費する。ＣＱＣ２２６は、一般に、所定時間が完了する（例えば、時間は「フラッシュ動作タイマー」レジスタにおいて指定される）まで存続する。所定時間が完了したとき、ＣＱＣ２２６は「修正」フェーズに入る。
【００４７】
ＣＱＣによって開始される次のフェーズは、一般に、「修正」フェーズである。修正フェーズでは、コンテキストテーブル２２０は、フラッシュ動作マネージャ（ＦＯＭ）によって及びデータパス転送からの結果によって実行されたフラッシュ動作に基づいて修正される。アップデートは、一般に、コンテキストの状態に関連し、従って、一般に、コンテキスト状態マシン（ＣＳＭ）２２２によって開始される。状態アップデートが発生するとき、ＣＳＭ２２２はＣＱＣ２２６に最新の状態及びコンテキストテーブルインデックスを送信する。その後、ＣＱＣ２２６は、コンテキストテーブル２２０のエントリをアップデートする。ＦＯＭがフラッシュインタフェース処理のサイクルを終えるとき修正フェーズは終わる。ＦＯＭは、信号（例えば、ＦＯＭ＿ＣＭ＿ＦＬＡＳＨ＿ＰＲＯＣ＿ＣＭＰＬＴ）のアサートによって、フラッシュインタフェース処理が終わったことをコンテキストマネージャ２０４に通知する。修正フェーズが完了したならば、ＣＱＣ２２６は、解放、圧縮、及びコンテキストテーブル２２０のコンテキストの追加を実行する。この時間の間に、コンテキストテーブル２２０はＦＯＭに対してアクセス不能である。ＣＱＣ２２６は、コンテキストテーブルがエントリを読み取ったこと、及びコンテキストキャッシュに読み取られたデータが特定のクロックサイクルの間に有効であることをＦＯＭに示す信号（例えば、ＣＭ＿ＦＯＭ＿ＣＴ＿ＶＡＬＩＤ）をデアサートすることによってＦＯＭに対してアクセス不能なコンテキストテーブル２２０を強制する。
【００４８】
修正フェーズが完了したとき、ＣＰＣ２０２は「解放」アクションを開始する。解放アクションは、ＣＱＣ２２６が実行を終えたエントリ有産者を捜すコンテキストテーブル２２０を探索するモードにＣＱＣ２２６を至らせる。ＣＱＣ２２６は、エントリがコンテキストの状態の実行を終えたか否かの判断に基づく。コンテキストが「完了」状態であるとき、コンテキストはＣＱＣ２２６によって解放される。一例では、コンテキストは、ＣＱＣ２２６がコンテキストの完了状態に関してデータパスからの通知を待つ状態である。例えば、読み取り動作の場合には、コンテキストはＤＡＴＡ＿ＴＲＡＮＳＦＥＲ＿ＤＯＮＥ状態にあり、ＥＣＣチェックの結果を待つ。この場合には、ＣＱＣ２２６は一時的に解放処理を停止し、状態がデータパスから復帰されるのを待つ。この時間の間に、ＣＱＣ２２６は「追加」を許可する。しかしながら、待機状態が復帰されれば、コンテキストはＣＱＣ２２６によって解放され、消費されたコンテキストレコードはＣＰＣ２０２に（結局、消費コンテキストマネージャ（ＣＣＭ）１６４に）転送される。
【００４９】
ＣＱＣ２２６がコンテキストを解放したとき、ＣＱＣ２２６はコンテキストテーブル２２０の通信エントリのための「アクティブ」ビットを除去する。ＣＱＣ２２６がコンテキストテーブル２２０ごとにコンテキストを調査するまで、その処理は継続する。ＣＱＣ２２６がコンテキストテーブル２２０のアクティブなコンテキストの終わりに到達するとき、解放フェーズは完了する。
【００５０】
ＣＱＣ２２６によって解放されたコンテキストは除去されたテーブルエントリのそれぞれにおいて「アクティブ」ビットを有する。ホールを満たすまでテーブルをシフトするための機構なしに、アクティブなエントリはコンテキストテーブル２２０に支出される（又は細分化される）。支出されたコンテキストは、コンテキストテーブルをスキャンすることを困難にし、「追加」フェーズをより複雑にする。コンテキストテーブル２２０が優先待ち行列としてそのキャラクタを保持することを保証するために、コンテキストテーブル２２０は圧縮される。圧縮処理において、ＣＱＣ２２６がコンテキストを解放するとき、ＣＱＣ２２６は１つの位置によって解放されたエントリの後に直ちに全てのエントリをシフトする。処理が完了するとき、全てのアクティブなエントリはプライオリティオーダーのリストのフロントにあり、全ての「ホール」は除去される。他のアクションの場合であるとき、圧縮処理が完了されるとき、ＣＱＣ２２６は「完了」セマフォ（又はビット）をアサートする。最終の圧縮フェーズの終わりで、ＣＱＣ２２６は追加フェーズを開始する。
【００５１】
ＣＱＣ２２６は、一般に、プロセッサ制御モードを知っている。プロセッサ制御モードでは、全てのＣＭ２０４はスタンダード動作を停止し、フラッシュ動作マネージャ２０８の内部のナノシーケンサ２４６によって実行される「ソフトコンテキスト」によってＦＬＣの動作が本質的に駆動されるモードで進行する。ソフトコンテキストは、スタンダードフラッシュコンテキストとは異なるサイズである。一例では、ソフトコンテキストは完全な１５の３２ビットダブルワードを備えるが、「フラッシュコンテキスト」、ＦＬＣによって実行された完全なメディアコンテキストの部分は、一般に、ちょうど４つの３２ビットダブルワードを備える。
【００５２】
プロセッサ制御モード（ＰＣＭ）は、一般に、「フラッシュ動作」フィールドがＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥに設定されるコンテキストがコンテキスト待ち行列のトップに現われるとき開始する。一般に、ＣＱＣ２２６がＰＣＭコンテキストを待ち行列に入れれば、ＣＱＣ２２６がスタンダードコンテキストの訂正を停止するとき、コンテキストテーブル２２０にＰＣＭコンテキストの後ろにアクティブなエントリはない。ＰＣＭが開始するとき、ＣＱＣ２２６は信号（例えば、ＣＭ＿ＣＰＣ＿ＰＲＯＣ＿ＣＮＴＬ＿ＭＯＤＥ）を介してＣＰＣ２０２に通知する。通知に応じて、ＣＰＣ２０２は、ＰＣＭコンテキストに与えられた位置で見つけられた「ソフトコンテキスト」をフェッチする。ＦＯＭに送信されるものの観点から、ＰＣＭコンテキストがコンテキストテーブル２２０の他のアクティブなエントリの後ろにある間に、ＦＯＭは、一般に、コンテキストテーブル２２０のＰＣＭコンテキストの存在についての情報を有さない。ＣＭ２０４がソフトコンテキストを実行し始めるＦＯＭのための準備ができるまで、コンテキストテーブル２２０のＰＣＭコンテキストエントリは、ＦＯＭに「アクティブ」ビットを０として送信する。
【００５３】
ＦＯＭがソフトコンテキストを読み取り始めるとき、ソフトコンテキストが格納されるコンテキストキャッシュ２２４によって動作がＦＯＭ２０８に送信されるとき、ＣＱＣ２２６は動作をスヌープする。動作がＤＭＡコンテキスト（例えば、プリフェッチデータ、セット読み取りデータバッファ、又はコンテキストポインタの解放）を含んでいるとき、ＣＱＣ２２６は、コンテキストテーブル２２０の現在未使用のストレージを選出し、トラッキングのためのコンテキストテーブルにポインタを配置する。それらのＤＭＡコンテキストが完了するとき、ＦＯＭ２０８はコンテキストマネージャ２０４に通知し、その後、コンテキストマネージャ２０４は通常の方法でコンテキストを解放する。
【００５４】
スヌープしている間に、ＣＱＣ２２６は、「ネクストソフトコンテキストのフェッチ」動作を捜す。ＣＱＣ２２６がそれを見つけるとき、ＣＱＣ２２６はＣＰＣ２０２に信号（例えば、ＣＭ＿ＣＱＣ＿ＰＣＭ＿ＮＥＸＴ＿ＣＯＮＴＥＸＴ）をアサートし、ＣＰＣ２０２はネクストソフトコンテキストをフェッチする。ＦＯＭ２０８がソフトコンテキスト実行が完了したことをＣＭ２０４に通知するとき、ＦＯＭ２０８はＦＯＭ／ＣＭコマンドインタフェースでＣＭ２０４に通知する。その後、ＣＱＣ２２６は、ＣＰＣに信号（例えば、ＣＭ＿ＣＰＣ＿ＰＲＯＣ＿ＣＮＴＬ＿ＭＯＤＥ）をデアサートし、スタンダード動作は継続する。一例では、ＣＭ２０４がプロセッサ制御モードに入っており、現在ソフトコンテキストを受信するための準備ができていることを示すためのレベルとして信号ＣＭ＿ＣＰＣ＿ＰＲＯＣ＿ＣＮＴＬ＿ＭＯＤＥがアサートされる。
【００５５】
ＣＱＣ２２６の別の重要な機能は、タイムアウト状況をモニタすることにある。一例では、ＣＱＣ２２６は、同一のコンテキストテーブルエントリがコンテキストテーブル２２０のトップ（例えばエントリ０で）に属するシステムクロック（ＳＹＳ＿ＣＬＫ）サイクルの数を数えるように構成されたカウンタを含む。カウント値がプログラマブルな「タイムアウト」カウンタの値に到達する場合、コンテキストテーブル２２０のトップのエントリはタイムアウトを有すると見なされる。エントリがタイムアウトを有すると見なされるとき、エントリは、コンテキストテーブル２２０から除去され、コンテキストポインタは、消費コンテキストインタフェースのコンテキスト処理コーディネータ（ＣＰＣ）２０２にリターンされる。
【００５６】
コンテキストのためのリターン状態は２つの起こり得る「タイムアウト」状態の１つである。第１のケースでは、タイムアウトは、可能性としてフラッシュレーンの別のダイが使用中で、Ｒ／Ｂラインを押し下げている状況である。この場合には、状態は、タイムアウトが別のダイのタイムアウトであることを示す。第２のケースでは、コンテキストのためのダイはカルプリットであると認識される。ここで、異なる状態はダイがカルプリットであることを示してリターンされる。
【００５７】
コンテキストテーブル２２０は、本質的にエントリの記憶媒体である。コンテキストテーブルの深度は、パラメータ化することができる。例えば、レーンごとに１６ダイをサポートすることができるチップの場合には、１６のエントリが実現される。１つを超える動作が１つのダイごとに管理されるならば、深度を増加させることは有利である。コンテキストテーブル２２０は、最小の機能を有する。大部分のより複雑な処理は、コンテキストテーブル２２０でＣＱＣ２２６によって実行される。しかしながら、コンテキストテーブル２２０は、複数の読み取りインタフェース、及び読み取りインタフェースのそれぞれのための多重化ロジックで実現される。一例では、コンテキストテーブル２２０は、ＦＯＭ２０８に対するインタフェース、及び読み取りアクセシビリティのためのコンテキスト状態マシン（ＣＳＭ）２２２に対するインタフェースによって実現される。コンテキストテーブル２２０は、ＣＱＣ２２６に対する読み取りインタフェースも有する。コンテキストテーブル２２０は、プロセッサによってもアクセスされる。
【００５８】
コンテキストテーブル２２０は、同様にテーブルの圧縮フェーズのために用いられる「シフト」性能を有する。それに加えて、ＣＱＣ２２６はシンプルな書き込みインタフェースを用いてコンテキストテーブル２２０をアップデートする。一例では、コンテキストテーブル２２０は、フリップフロップで実現される。コンテキストテーブル２２０がフリップフロップで実現されるとき、読み取りアクセスのために必要なアービトレーションはない。コンテキストテーブル２２０が約１０００を超えるフリップフロップのサイズに増加する場合、コンテキストテーブル２２０はレジスタファイル又はＳＲＡＭで実現されるが、追加の管理及びアクセスのアービトレーションも実現される。
【００５９】
コンテキストキャッシュ２２４は、コンテキストテーブル２２０に類似する別のコンテキストデータストレージエレメントである。コンテキストキャッシュ２２４は、一般に、エントリのパラメータ化することができる数を含む。一例では、エントリの数は８である。しかしながら、エントリの他の数は、特定の実施の形態のその設計基準を満たすために実現される。例えば、完全なパイプライン動作のために事実上必要とされるよりエントリの数は１つ又は２つ以上に設定される。数は、一般に、プロセッサ制御モードの完全な「ソフトコンテキスト」のための十分なスペースを許可するために十分に大きくされる。先に述べたように、完全なコンテキストは１５の３２ビットダブルワードを備える。完全なメディアコンテキストのサブセットは「フラッシュコンテキスト」と指称される。フラッシュコンテキストは、一般に、完全なメディアコンテキストの第１の４つのダブルワード（又はｄｗｏｒｄｓ）である。フラッシュコンテキストの４つのｄｗｏｒｄｓは、一般に、ファームウェアによって指定された完全な動作を実行するためにＦＬＣによって用いられる全ての情報を含む。スタンダード動作（例えば、ＦＬＣがプロセッサ制御モードにないとき）の間に、フラッシュコンテキストの第１の２つのｄｗｏｒｄｓのみがコンテキストキャッシュ２２４に格納される。フラッシュコンテキストの残りは、一般に、コンテキストテーブル２２０に格納される。
【００６０】
コンテキストキャッシュ２２４は、一般に、エントリのそれぞれの状態を保持する。一例では、状態は、エントリがＦＲＥＥ又はＵＳＥＤか否かを示すビットを備える。一例では、そのような８ビットは、コンテキストキャッシュ２２４で実現される。フラッシュコンテキストがコンテキストキャッシュ２２４で位置に書き込まれるとき、位置の状態はＵＳＥＤになる。ＣＱＣ２２６がその位置をクリアすることを許可する状態変更についての情報を取得するとき、位置の状態はＦＲＥＥにリターンする。スタンダード動作の間に、コンテキストキャッシュ２２４は、コンテキストキャッシュ２２４が状態ビットに基づいてフリーエントリのためのスペースを有することをＣＱＣ２２６に通知する。フリーロケーションがあるならば、ＣＱＣ２２６は自由にＣＰＣ２０２からコンテキストを要求することができる。ＣＰＣ２０２が新規のフラッシュコンテキストをフェッチしたとき、ＣＰＣ２０２はデータの３２ビットダブルワードのバーストとしてコンテキストキャッシュ２２４にフラッシュコンテキストを送信する。データが有効なとき、信号（例えば、ＣＰＣ＿ＣＭ＿ＥＮＱ＿ＣＴＸ＿ＶＡＬＩＤ）がアサートされる。コンテキストキャッシュ２２４は、フリーロケーションにデータを書き込む。コンテキストキャッシュ２２４は、ＣＰＣ２０２が単に１つのフラッシュコンテキストを書き込むだろうと予期する。
【００６１】
コンテキストテーブル２２０のトップのエントリがＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥ動作として示されるときに入るプロセッサ制御モードでは、コンテキストキャッシュ２２４は完全に自由である。プロセッサ制御モードでは、コンテキストキャッシュ２２４は、ＣＰＣ２０２からソフトコンテキストを受信することを予期する。コンテキストキャッシュ２２４は、ソフトコンテキストが１５のｄｗｏｒｄｓを含むことも予期する。本質的に、コンテキストキャッシュ２２４は、ＣＰＣ２０２によって送信された全てのデータを受け取って、スレーブとして行動する。コンテキストキャッシュ２２４にデータの適正量を書き込むことはＣＰＣ２０２の責務である。コンテキストキャッシュ２２４は、ＦＯＭ２０８によってアクセス可能であり、フラッシュユニットで実コマンドを実行するとき、完全なフラッシュコンテキスト情報を用いる。ＦＯＭ２０８は、３２ビットダブルワードにアドレスを提供し、コンテキストキャッシュ２２４は、以下のクロックサイクルで要求されたダブルワードによって応答する。プロセッサ制御モードの間に、コンテキストキャッシュ２２４からの読み取られた応答は、動作の内容に基づいたアクションを実行するコンテキスト待ち行列コントローラ（ＣＱＣ）２２６によってスヌープされる。コンテキストキャッシュ２２４は、コンテキストテーブル２２０であるときも、プロセッサインタフェースによってアクセス可能である。
【００６２】
コンテキスト状態マシン（ＣＳＭ）２２２は、一般に、エントリの現在状態に基づいてコンテキストテーブル２２０のコンテキストのそれぞれの実行状態、及びＦＯＭ２０８によって実行されている動作又はデータパス動作の状態のいずれかを決定するように構成される。修正フェーズでは、ＣＳＭ２２２は、ＦＯＭ２０８がコマンドを適用するか、結果をリターンするごとにＣＱＣ２２６によって呼び出される。ＦＯＭコマンド通知インタフェース及びＦＯＭコンテキストテーブル読み取りインタフェースの内容は、一般に、次の状態を決定するためにＣＳＭ２２２のために必要とされる全ての情報を提供する。
【００６３】
解放フェーズでは、ＣＱＣ２２６がコンテキストテーブル２２０をスキャンし、コンテキストテーブルエントリがアクション（例えば、ＴＲＡＮＳＦＥＲ＿ＤＡＴＡ状態又はＰＲＥＦＥＴＣＨ＿ＤＡＴＡ状態）を待っている状態であるコンテキストテーブルエントリにエンカウントするとき、ＣＳＭ２２２はＣＱＣ２２６によって呼び出される。ＴＲＡＮＳＦＥＲ＿ＤＡＴＡ状態又はＰＲＥＦＥＴＣＨ＿ＤＡＴＡ状態にエンカウントするとき、ＣＱＣ２２６はデータ転送の状態に関するデータパスからの情報（例えば、ＤＭ、ＤＤＭ、又はＤＴＰのいずれか）を待つ。どちらにしても、ＣＳＭ２２２は、一般に、懸案のコンテキストテーブルエントリのための次の状態を決定するために呼び出される。ＣＳＭ２２２は、コンテキストテーブルエントリが完了状態（例えば、ＣＯＭＰＬＥＴＥＤ又はＣＯＭＰＬＥＴＥＤ  ＷＩＴＨ  ＥＲＲＯＲ）に移行するときに、ダイ管理モジュール２０６に通知するための役割も担う。
【００６４】
図９を参照すると、図６のフラッシュ動作マネージャ（ＦＯＭ）２０８の実施の形態の一例を図示するブロック図が示される。一例では、ブロック２０８は、５つのサブモジュールにより実現される。例えば、ブロック２０８は、ブロック（又は回路）２４０、ブロック（又は回路）２４２、ブロック（又は回路）２４４、ブロック（又は回路）２４６、及びブロック（又は回路）２４８を備える。回路２４０から２４８は、ハードウェア、ファームウェア、ソフトウェア、ハードウェアの組み合わせ、ファームウェア及び／又はソフトウェア、又は他のインプリメンテーションとして実現されるモジュール及び／又はブロックを表わす。ブロック２４０は、一例では、コマンドアービタ（ＣＡ）を実現する。ブロック２４２は、一例では、データ転送アービタ（ＤＴＡ）を実現する。ブロック２４４は、一例では、フラッシュ動作フォーマッタ（ＦＯＦ）を実現する。ブロック２４６は、一例では、ナノシーケンサを実現する。ブロック２４８は、一例では、制御状態マシン（ＦＯＭＣＳＭ）を実現する。
【００６５】
データ転送アービタ２４２は、一般に、データフローマネージャ２１４にフラッシュ動作マネージャ２０８を接続する。フラッシュ動作フォーマッタ２４４は、一般に、フラッシュバスコントローラ２１２にフラッシュ動作マネージャ２０８を連結する。制御状態マシン２４８は、一般に、コンテキストマネージャ２０４にフラッシュ動作マネージャ２０８を連結する。コマンドアービタ２４０は、一般に、フラッシュ動作フォーマッタ（ＦＯＭ）２４４と制御状態マシン２４８との間に接続される。データ転送アービタ２４２は、一般に、フラッシュ動作フォーマッタ２４４と制御状態マシン２４８との間に連結される。ナノシーケンサ２４６は、一般に、フラッシュ動作フォーマッタ２４４と制御状態マシン２４８との間に連結される。コマンドアービタ２４０は、一般に、適用するためのコマンドのためのコンテキストマネージャのコンテキストテーブルをスキャンし、その後、フラッシュバスコントローラ（ＦＢＣ）２１２に信号を送信するためにフラッシュ動作フォーマッタ（ＦＯＦ）２４４と通信する。
【００６６】
フラッシュメディアコントローラ（ＦＭＣ）ハードウェア自動化の特徴は、最大性能を達成するために必要とされるコマンドのみに最適化される。この最適化の意図は、ハードウェア自動化を単純化し、インターオペラビリティに既存のフラッシュデバイスを提供しつつ、ファームウェア設計を単純化することである。しかしながら、ハードウェアは、最大性能を達成するために必要とされるコマンドのみの発行に限定されない。それどころか、フラッシュで実行されるほぼ全ての原子動作を実行するために、ハードウェアはファームウェアによって導かれ、ファームウェアは、フラッシュの制御及びデータの移動を容易にするためにＦＭＣに組み込まれたハードウェアリソースの直接制御をする。ファームウェアがＦＭＣに組み込まれたハードウェアリソースの直接制御をするモードは、一般に、プロセッサ制御モード（ＰＣＭ）と指称される。
【００６７】
プロセッサ制御モード（ＰＣＭ）は、フラッシュユニットに「ソフト」コマンド（例えば、本来、ハードウェアによってサポートされないコマンド）を適用するために用いられる。一般に、プロセッサ制御モードは、フラッシュレーンコントローラ（ＦＬＣ）にのみ可視である。ＦＬＣの外部のロジックは、一般に、プロセッサ制御モードに入ったか否かにかかわらず、動作のプロセッサ制御モードを全く気にせず、同一の方法でＦＬＣをサポートする。
【００６８】
「ソフト」コマンドが適用される方式は、「ソフト」コンテキストの作成及び送信を介する。ここに用いられるようなソフトコンテキストは、一般に、「フラッシュ動作」フィールドがプロセッサ制御モードに関連した値（例えば、ＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥ）に設定されたコンテキストを指す。フラッシュ動作フィールドをＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥ値に設定することは、一般に、ＦＬＣが全コンテキスト（通常完了のときに単なる「フラッシュコンテキスト」サブセットの代わりに）を格納することを試み、ＦＬＣのコンテキストテーブルの全ての未解決のコンテキストを実行し終えるモードにＦＬＣを配置する。その後、ＦＬＣは、ＦＬＣの通常のハードウェア自動化をサスペンドし、コンテキストの残りのダブルワードからの指令を発行し、ダブルワードのそれぞれは、例えば、ナノシーケンサ２４６によって実行されるための動作を表わす。
【００６９】
ＰＣＭコマンドのための基本的なフローは以下の通りである：
１．最初にＦＭＣは通常動作モードにある。通常動作モードでは、ＦＬＣのそれぞれは、サポートするダイのそれぞれに待ち行列に入れられた複数のコンテキストを有する。ダイのそれぞれのためのこれらのコンテキストの最初の１〜２は、実行のためにＦＬＣに予めフェッチされる。
【００７０】
２．ファームウェアは、特定のフラッシュレーンコントローラによってサポートされたダイの１つのためのリンクリストのエンドにＰＣＭコンテキストを挿入する。ファームウェアは、ダイのリンクリスト、又はファームウェア若しくは任意のＦＬＣによってサポートされた他のダイのリストのそれぞれにおけるＰＣＭコンテキストの後に他のコンテキストを挿入し続ける。ＰＣＭコンテキストは、ＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥにセットされたフラッシュ動作コードを有し、コンテキストのフラッシュローアドレスフィールドは、第１の「ソフト」コンテキストに１６ビットのコンテキストポインタを提供する。一例では、ＰＣＭコンテキストの全ての他のｄｗｏｒｄは、予約フィールドとして扱われる。
【００７１】
３．ＰＣＭコンテキストは、最終的にＦＬＣにフェッチされる。この瞬間に、ＦＬＣのそれぞれは、ＰＣＭモードに入り、ＦＬＣに新規のコンテキストをフェッチすることを停止する。全ての他のＦＬＣは、影響を受けず、通常のものとしてダイリストのそれぞれをフェッチし実行することを継続する。
【００７２】
４．ＦＬＣによってサポートされたダイのために今までフェッチされた全てのコンテキストの実行が完了するまで、ＰＣＭコンテキストを有するＦＬＣはそこで待機し、従って、ＰＣＭコンテキストのみがＦＬＣのそれぞれに残される。
【００７３】
５．ＰＣＭコンテキストのフラッシュローアドレスフィールドは、ＦＬＣに第１の「ソフト」コンテキストをフェッチするために、コンテキストポインタとして用いられる。「ソフト」コンテキストは、通常のコンテキストと同一のサイズであるが、１５のｄｗｏｒｄのそれぞれは、ナノシーケンサ２４６によってｄｗｏｒｄ−０からｄｗｏｒｄ−１５の順に実行される「ソフト」コマンドを含む。
【００７４】
６．「ソフト」コマンドのいくつかは、バッファに準備されている他の「ＰＣＭ  ＤＭＡ」コンテキストを参照する。「ＰＣＭ  ＤＭＡ」コンテキストは、データ転送をＦＬＣとシステムバッファとの間に生じさせるための「ソフト」コマンドによってＦＭＣにロードされる。他の「ソフト」コマンドは、コマンド及びアドレスサイクル及び／又はフラッシュレーンの送信／受信バイトを定義する。もし必要ならば、１５の「ソフト」コマンドの最後は、１５の追加の「ソフト」コマンドを新規の「ソフト」コンテキストにロードする。一例では、「ソフト」コマンドは、用いるためのチップイネーブルを指定し、従って、どのリンクリストがオリジナルのＰＣＭコンテキストに用いられたかは問題とならない。
【００７５】
７．「ソフト」フラッシュ動作が完了するとき、最後の「ソフト」コマンドはＰＣＭモードが完了していることを示す。このとき、オリジナルのＰＣＭコンテキストは完了し、ファームウェアへの通知のために消費コンテキストマネージャに送信される。その後、ＦＬＣはノーマルモードにリターンし、ＦＬＣによってサポートされたリンクリストからコンテキストを再びフェッチし始める。
【００７６】
図１０を参照すると、ナノ命令の一例のセットを図示するテーブル３００の図が示される。一例では、ナノシーケンサ２４６は、フラッシュデバイスにアクセスし、データパスの間でデータを移動させるために用いられるＦＬＣハードウェアリソースの駆動に特に適合した動作をサポートするシンプルなシーケンサを備える。ナノシーケンサ２４６は、「ソフト」コンテキストを取得し、コントローラファームウェアが任意のコンテキストリンクリストの一部として実行するための全ての任意のフラッシュコマンドをセットアップすることを可能にするように構成される。ファームウェアは、コマンドを完了するために必要なサイクルのシーケンスを有するソフトコンテキストの構築によって、コマンドのローレベルのタイミング及び特性のための責任を有する。ソフトコンテキスト（図１１に関連して説明された）は、コンテキストのリンクリストに追加され、通常のコンテキストと同様の方式で動作され、解放される。ソフトコンテキストは、追加される全ての将来のフラッシュコマンドを適応するために用いられる。ナノシーケンサ２４６は、一般に、コンテキストキャッシュからナノ命令を読み取る。プロセッサ制御モードでは、コンテキストキャッシュは、一般に、ＦＬＣコンテキストよりもむしろ、３２ビットのナノ命令を含む。図１０で示された命令の一例が以下に説明される。
【００７７】
最も共通のプロセッサ制御モード動作は、ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作である。ソフトコンテキストｄｗｏｒｄの第１の２ビットがある値（例えば、１１）であるとき、プロセッサ制御モードＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ命令が示される。ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ命令は、一般に、適用されるための任意の８ビットのフラッシュバス命令を許可する。ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ命令では、３０より低いビット（例えば、ビット２９：０）は、フラッシュバスコントローラ（ＦＢＣ）ブロック２１２への動作を表わす。３０より低いビットは、例えば、フラッシュデバイス又はチップイネーブルフィールド（例えば、ビット２９：２６）、動作タイプフィールド（例えばビット２５：２３）、動作オプションフィールド（例えばビット２２：２０）、動作コマンドフィールド（例えばビット１９：１２）、動作長フィールド（例えばビット１１：９）、動作データ長フィールド（例えばビット８：０）を含む複数のフラッシュバス動作フィールドを符号化する。チップイネーブルフィールドは、一例では、フラッシュ動作が適用される８のチップイネーブル信号の１つの１６のフラッシュデバイスの１つを選択する。動作タイプフィールドは、フラッシュバスコントローラに送信される。動作タイプフィールドは、一般に、動作のタイプを示す。例えば、動作タイプフィールドは、動作がコマンド（例えば、０により示される）、アドレス（例えば、１の値により示される）、読み取り（例えば、２により示される）、又は書き込み（例えば、３により示される）か否かを判断する。動作タイプフィールドの残りの可能な値は、一般に、保存される。
【００７８】
動作オプションフィールドは、一般に、組み合わせられる各種動作を決定する。例えば、動作オプションフィールドは、コマンドサイクルがアドレスサイクルを含むことを許可する。動作オプションフィールドの解釈は、先に述べたＯｐＴｙｐｅフィールドに依存して異なる。コマンド動作とアドレス動作については、ビットは以下の通りに定義される：    ビット２２：設定されたとき、全ての他のサイクルの後にコマンドサイクルを追加する。動作コマンドフィールド（例えば、ＯＰＣＯＭＭＡＮＤ）フィールドをコマンドに用いる。アドレス動作にのみ有用である；
ビット２１：設定されたとき、初期コマンドサイクルの後にアドレスサイクルを追加する。コマンド動作にのみ有用である；
ビット２０：アドレス重要度。設定されたとき、送信するためのアドレスフィールドの最下位のバイトを選択する。
【００７９】
読み取り及び書き込み動作については、ビットは以下の通り定義される：
ビット２２：設定されたとき、直接データを用いる。状態を読み取るためにのみ有用である。状態データは、ロジックにおいて「直接」用いられ、データフローマネージャのもとに送信されない。
ビット２１：設定されたとき、データサイクルの後にコマンドサイクルを追加する。動作コマンドフィールドはコマンドに用いられる。
ビット２０：バイト転送を繰り返す。設定されたとき、同期的なフラッシュを用いるとき、データは、クロックの立ち下り立ち上がりエッジの両方で繰り返される。
【００８０】
動作コマンドフィールドは、一般に、コマンドタイプ動作にコマンドタイプを提供する。動作アドレス長フィールド（例えば、ＡＤＤＲＬＥＮ）は、一般に、コマンドで送信されるアドレス長（例えば、アドレスバイトの数）を提供する。動作データ長フィールド（例えば、ＤＡＴＡ  ＬＥＮＧＴＨ）は、一般に、コマンドで送信される／読み取られるデータ長（例えば、データバイトの数）を提供する。動作データ長フィールドは、一般に、長さ５１２バイト以下の動作のためのものである。長さ５１２バイトを超える動作については、フィールドは、一般に、全て０に設定され、ＰＣＭデータ長レジスタは、データ長を決定するために用いられ、ＰＣＭデータ長レジスタは、一般に、フルページになる。一般に、トランザクションに用いられる４０ビットのアドレスを含み、この動作を用いて設定されないＦＢＣに動作レジスタも存在するが、ＳＥＴ＿ＦＬＡＳＨ＿ＡＤＤＲＥＳＳ動作コード又はＳＥＴ  ＤＡＴＡ  ＴＲＡＮＳＦＥＲ  ＬＥＮＧＴＨ動作コードを用いて設定される。
【００８１】
一例では、ナノシーケンサ動作コードは、前述のＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作に加えて長さ８ビットとして実現される。ナノシーケンサ動作コードは、「ソフト」コマンドのそれぞれのビット３１：２４に位置する。フラッシュバスコントローラのフラッシュバスレジスタに指定された動作（例えば、フラッシュバス動作命令）の実行に加えて、ナノシーケンサ命令は、クロックサイクルの特定数のために待機し（例えば、サイクルの待機）、レディ／ビジーラインがＲ／Ｂフィールドに定義された一定の状態に進むために待機し（例えば、Ｒ／Ｂの待機）、状態レジスタをポーリングする間に一定の状態のために待機し（例えば、状態のための待機）、データフローマネージャバッファが特定の状態に到達するまで待機し（例えば、バッファ状態のための待機）、逐次的な状態ポーリングの試みの間のクロックサイクルの数を設定し（例えば、ポーリング周期の設定）、データ転送のためのバイトのデフォルト数を設定し（例えば、データ転送長の設定）、フラッシュトランザクションのための４０ビットのフラッシュアドレスの３つの最上位のビットを設定し（例えば、フラッシュローアドレスの設定）、フラッシュトランザクションのための４０ビットのフラッシュアドレスの２つの最下位のバイトを設定し（例えば、フラッシュカラムアドレスの設定）、状態動作のための待機によって用いられる状態ポーリングコマンドのフォーマットを設定し（例えば、状態コマンドフォーマットの設定）、最も最近に取得された状態レジスタ読み取りの内容を用いて、動作のパス／フェイル状態を取得し（例えば、パス／フェイル状態の取得）、データフローマネージャの２つのローカルバッファの１つを用いて、プログラムトランザクションのためのデータプリフェッチ動作を開始し（例えば、データのプリフェッチ）、次の読み取り転送が導かれ、バッファ転送にＤＭＡコンテキストポインタを関連付けるローカルデータバッファを設定し（例えば、読み取りデータバッファの設定）、与えられた動作のためにＤＭＡコンテキストポインタを解放し（例えば、コンテキストポインタの解放）、プロセッサに割り込みをアサートすると共にファームウェアによって割り込みをユニークに識別することができるように割り込みレジスタに引数を配置し（例えば、割り込みのアサート）、プロセッサ制御モードのネクストソフトコンテキストポインタをフェッチし（例えば、ネクストソフトコンテキストのフェッチ）、プロセッサ制御モードから脱出する（例えば、プロセッサ制御モード完了）ことを含む。
【００８２】
バッファ状態命令のための待機では、マスクフィールドは、ビット４が完了ビット（ビット２）のためのマスクであり、ビット３が準備ビット（ビット１）のためのマスクであるかの比較のために設定される。バッファ状態について、完了は、全ての転送が完了したことを意味する（例えば、データはＤＭＡマネージャから検索されると共にフラッシュデバイスに送信され、又はデータはフラッシュデバイスから読み取られ、ＤＭＡマネージャはデータフローマネージャのデータ出力を移動させる）。準備は、データがデータフローマネージャにあることを意味する（例えば、データはＤＭＡマネージャから検索されると共にフラッシュデバイスに送信されるための準備ができているか。又はデータはフラッシュデバイスから読み取られると共にＤＭＡマネージャによって移動されるための準備ができている）。Ｂｎフィールドは、一般に、データフローマネージャのどのバッファが用いられるかを定義する。状態コマンドフォーマット命令セットでは、ビットマップフィールドは、一般に、アドレスのどのバイトが読み取られた状態コマンドのために送信されるか判断するために用いられ、コマンドバイトフィールドは、一般に、読み取られた状態コマンドは何かを定義する。ゲットパス／フェイル状態命令は、一般に、「フィールド」を取得するために比較値及びマスクフィールドを用い、その後、デフォルトの「ＡＮＤ」によって、全てのビットがコンテキストマネージャに送信されるためにシングルビット状態を取得するために一緒にされる。「ＯＲ」ビットが設定された場合、ナノシーケンサは、結果を取得するためにフィールドをＡＮＤする代わりにフィールドをＯＲする。ＮＥビットが設定される場合、ナノシーケンサはコンテキストマネージャに送信される結果ビットを反転させる。
【００８３】
プリフェッチデータ命令では、ビットＷＩがクリアされるとき、データフローマネージャは８ビットデータを用いる。ビットＷＩが設定されるとき、データフローマネージャは、転送の幅を決定するためにフラッシュバス幅レジスタビットの値を用いる。ビットＢＮは、一般に、データフローマネージャの２つのカットスルーバッファのどちらが用いられるか判断する。コンテキストポインタフィールドは、データフローマネージャに送信されるコンテキストポインタを含んでいる。コンテキストポインタ命令の解放では、ビットＷが設定される場合、シーケンスはコンテキストが解放されたコンテキストマネージャレポートまで止まる（又は待機する）。ビットＷが設定されない場合、シーケンスは単に継続する。ネクストソフトコンテキストのフェッチ命令が実行されているとき、フェッチはコンテキストマネージャで行われる。コンテキストマネージャは、一般に、新規のシーケンスがフェッチされ、コンテキストキャッシュにあるまで、コンテキストテーブルが有効ではないことを示す。
【００８４】
一般に、動作のプロセッサ制御モードは少なくともハードウェア範囲の面からフラッシュレーンコントローラ（ＦＬＣ）に限定される。ＦＬＣ具体化の外部のフラッシュメディアコントローラ（ＦＭＣ）ロジックは、一般に、制御がフラッシュレーンコントローラの内部にどのように生じているかに気付かない。ＦＭＣのＤＭＡリソースがそれらの重要なサービスを提供し続けることができるように、ＤＭＡリソースは、なおコンテキストの従来の「自動化されたハードウェア」形式を作成するためにファームウェアを利用し、その後、それは、ＦＬＣのソフトコンテキストによって発行されたデータ転送に関連付けられる。関連は、ＰＲＥＦＥＴＣＨ＿ＤＡＴＡとＳＥＴ＿ＲＥＡＤ＿ＤＡＴＡ＿ＢＵＦＦＥＲ動作を用いて生じさせられ、それらの両方はデータフローマネージャにコンテキストポインタをロードする。その後、それがハードウェア自動モードを行うように、データＤＭＡマネージャ（ＤＤＭ）にＤＭＡ要求を生じさせるとき、データフローマネージャはコンテキストポインタを用いる。ＤＤＭは、チャンクディスクリプタ位置の指示を提供するコンテキスト、データバッファアドレス、スキップマスク、及びＤＭＡを実行するために用いられる他のコンフィギュレーション情報をフェッチする。
【００８５】
図１１を参照すると、シンプルなフラッシュプログラムコマンドが、本発明の実施の形態によるプロセッサ制御モード及びソフトコンテキストを用いて、どのように実行されるかを図示するソフトコンテキスト４００の図が示される。番号付けされたステップのそれぞれは、一般に、ソフトコンテキスト４００のｄｗｏｒｄに対応する。
【００８６】
０．ＰＲＥＦＥＴＣＨ＿ＤＡＴＡ動作は、ローカルデータバッファ数を０にすることによって適用され、コンテキストポインタは、「通常」ＤＭＡコンテキストの位置に設定される。ｄｗｏｒｄ０における命令は、一般に、データフローマネージャにデータＤＭＡマネージャへの要求をアサートし、それはコンテキストポインタを用いてＤＭＡコンテキストをフェッチし、データフローマネージャのローカルデータバッファにデータを移動させる。
【００８７】
１．ＳＥＴ＿ＦＬＡＳＨ＿ＲＯＷ＿ＡＤＤＲＥＳＳ動作は、引数で指定されたローアドレスによって適用される。これは、プログラム動作に用いられるＦＢＣ（例えば、ｏｐ＿ａｄｄｒ）で内部ローアドレスレジスタを設定する。一般に、レジスタの従来の値が認められると仮定して、必ずしもＳＥＴ＿ＦＬＡＳＨ＿ＣＯＬＵＭＮ＿ＡＤＤＲＥＳＳ動作を適用する必要はない。（一般に、ページ読み取り及び書き込みのために、フラッシュカラムアドレスは全て０であり、この一例ではフラッシュカラムアドレスは全て０であると仮定される）。
【００８８】
２．ＳＥＴ＿ＤＡＴＡ＿ＴＲＡＮＳＦＥＲ＿ＬＥＮＧＴＨ動作は、４３２０の引数により適用され、それはフルページに転送長を設定する。一般に、置き換えられるまでレジスタ値は保持され、転送長はトランザクションごとに設定される必要はない。
【００８９】
３．ＷＡＩＴ＿ＦＯＲ＿ＢＵＦＦＥＲ＿ＳＴＡＴＥ動作は、ビット１が１（完全のための待機）に設定され、ビット０が０（バッファ０のための待機のために）に設定されることによって適用される。データが実際のプログラムコマンドを適用する前にバッファにあるまで、これは実行を待機させる。
【００９０】
４．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：      −チップイネーブル＝０
−動作タイプ＝コマンド
−動作オプション＝０
−動作コマンド＝０ｘ８０
−動作アドレス長＝Ｘ
−動作データ長＝Ｘ
ｄｗｏｒｄ４における命令は、チップイネーブル０のフラッシュにプログラムコマンドサイクルを適用するようにフラッシュバスコントローラに命じる。
【００９１】
５．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：      −チップイネーブル＝０
−動作タイプ＝アドレス
−動作オプション＝０
−動作コマンド＝Ｘ
−動作アドレス長＝５
−動作データ長＝Ｘ
ｄｗｏｒｄ５における命令は、フラッシュバスコントローラのｏｐ＿ａｄｄｒレジスタのチップイネーブル０の５つのアドレスサイクルをフラッシュデバイスに適用する。
【００９２】
６．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：      −チップイネーブル＝０
−動作タイプ＝書き込み
−動作オプション＝０
−動作コマンド＝０
−動作アドレス長＝Ｘ
−動作データ長＝０
ｄｗｏｒｄ６における命令は、フラッシュバスコントローラにフラッシュレーンデータバッファからチップイネーブル０のフラッシュユニットへのデータの移動をもたらす。動作データ長フィールドが０に設定されるので、フラッシュバスコントローラは全ての４３２０バイト（データ転送長レジスタで指定されたような）を移動させる。（コマンドサイクルが最適化として書き込み動作により適用されるのをフラッシュバスコントローラが許可することに注意する。１つの動作をセーブするために任意に以下のステップで適用された０ｘ１０コマンドをここで適用することができる。）
【００９３】
７．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：      −チップイネーブル＝０
−動作タイプ＝コマンド
−動作オプション＝０
−動作コマンド＝０ｘ１０
−動作アドレス長＝Ｘ
−動作データ長＝Ｘ
ｄｗｏｒｄ７における命令は、チップイネーブル０のフラッシュデバイスに第２及び最後のコマンドサイクル（０ｘ１０）を適用することをフラッシュバスコントローラに伝える。
【００９４】
８．ＷＡＩＴ＿ＲＢ動作は引数１により適用される。ｄｗｏｒｄ８における命令は、フラッシュバスが別のコマンドを適用する前に準備ができるまで（Ｒ／Ｂ＝１）、ナノシーケンサを待機させる。
【００９５】
９．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：      −チップイネーブル＝０
−動作タイプ＝コマンド
−動作オプション＝０
−動作コマンド＝０ｘ７０
−動作アドレス長＝Ｘ
−動作データ長＝Ｘ
ｄｗｏｒｄ９における命令は、フラッシュバスコントローラにチップイネーブル０のフラッシュユニットへのＲＥＡＤ＿ＳＴＡＴＵＳコマンドの適用をもたらす。
【００９６】
１０．ＦＬＡＳＨ＿ＢＵＳ＿ＯＰＥＲＡＴＩＯＮ動作は以下の引数により適用される：
−チップイネーブル＝０
−動作タイプ＝読み取り
−動作オプション＝「０１０」
−動作コマンド＝０ｘ００
−動作アドレス長＝Ｘ
−動作データ長＝１
ｄｗｏｒｄ１０における命令は、フラッシュバスコントローラに読み取りイネーブルのトグルとフラッシュユニットの状態のキャプチャをもたらす。データがフラッシュバスコントローラメモリではなくフラッシュバスコントローラの直接データレジスタに配置されるように、オプションビット１は設定される（及び動作データ長は１に設定される）。（コマンドサイクルが最適化として読み取り動作により適用されるのをフラッシュバスコントローラが許可することに注意する。従来のステップで適用された０ｘ７０コマンドは、１つの動作をセーブするためにここで任意に適用することができる。）
【００９７】
１１．ＧＥＴ＿ＰＡＳＳ／ＦＡＩＬ＿ＳＴＡＴＵＳ動作は以下の引数により適用される：
−ネゲート、又はリデュース＝０
−比較値＝「０００００００１」
−マスク＝「１１１１１１１０」
ｄｗｏｒｄ１１におけるコマンドは、ナノシーケンサに比較値が１のビット０にフラッシュバスコントローラの直接データレジスタのアンマスクされたビット、ビット０の値の比較をもたらす。比較値が一致する場合、結果は１であり、それは状態レジスタビット０が確かに１であったことを意味し、フェイルを示す。比較値が一致しない場合、結果はコマンドがフェイルでなかったことを示す０である。コンテキストポインタが解放されるとき、結果は消費されたコンテキストポインタと共にＣＣＭに送信される。
【００９８】
１２．ＤＩＳＰＯＳＥ＿ＯＦ＿ＣＯＮＴＥＸＴ＿ＰＯＩＮＴＥＲ動作は引数としてコンテキストポインタ０ｘＡＢＣＤにより適用される。ｄｗｏｒｄ１２における命令は、ナノシーケンサにＣＣＭへのポインタ（及び関連するパス／フェイルビット）の送信をもたらす。これは、本質的にフラッシュ及びフラッシュバスコントローラの関与にプログラム動作を完了する。
【００９９】
１３．フラッシュバスコントローラにプロセッサ制御モードを残させ、「通常」ハードウェア自動化モードにリターンする完了動作が適用される。この点では、ＦＯＭは、ソフトコンテキスト処理が完了していることをコンテキストテーブルに通知する。これは、コンテキストテーブルから除去されると共にＣＣＭに転送されるために、ＰＲＯＣＥＳＳＯＲ＿ＣＯＮＴＲＯＬ＿ＭＯＤＥに「フラッシュ動作」フィールドセットを有する「オリジナル」ＰＣＭコンテキストをもたらす、ここでコンテキストは「通常」（又は自動化）コンテキストと同一の方式で消費される。動作の数が１５を越えて拡張された場合、ＦＥＴＣＨ＿ＮＥＸＴ＿ＳＯＦＴ＿ＣＯＮＴＥＸＴ動作が適用され、シーケンサは新規のソフトコンテキストの受信の後にすぐに実行を継続する。この動作モードは無制限に継続することができる。
【０１００】
図１〜１１によって実行される機能は、従来のメインプロセッサ、デジタルコンピュータ、マイクロプロセッサ、マイクロコントローラ、ＲＩＳＣ（縮小命令型コンピュータ）プロセッサ、ＣＩＳＣ（複雑命令セットコンピュータ）プロセッサ、ＳＩＭＤ（単一命令多重データ）プロセッサ、信号プロセッサ、中央演算処理装置（ＣＰＵ）、算術論理演算装置（ＡＬＵ）、ビデオデジタル信号プロセッサ（ＶＤＳＰ）、及び／又は関連する技術分野における当業者に明らかであろうように本明細書の教示に従ってプログラムされた同様の計算機の１つ以上を用いて実現される。適切なソフトウェア、ファームウェア、符号化、ルーチン、命令、オペコード、マイクロコード、及び／又はプログラムモジュールもまた関連する技術分野における当業者に明らかであろうように本明細書の教示に基づいて熟練したプログラマによって容易に準備される。ソフトウェアは、一般に、機械実装のプロセッサの１つ以上によって１つの媒体又は複数の媒体から実行される。
【０１０１】
本発明は、更にＡＳＩＣ（特定用途向け集積回路）、プラットホームＡＳＩＣ、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＰＬＤ（プログラマブルロジックデバイス）、ＣＰＬＤ（コンプレックスプログラマブルロジックデバイス）、シーゲート、ＲＦＩＣ（高周波集積回路）、ＡＳＳＰ（特定用途専用標準品）、１つ以上のモノリシック集積回路、１つ以上のチップ又はダイに配置されたフリップチップモジュール及び／又はマルチチップモジュールによって、又はここで説明されるように従来の構成回路の適切なネットワークを相互に接続することによって実現され、それらの修正は、技術分野における当業者に容易に明らかである。
【０１０２】
本発明は、また本発明による１つ以上の処理又は方法を行うように機械をプログラムするために用いられる命令を含むコンピュータ製品である記憶媒体又は媒体及び／又は送信媒体又は媒体を含む。コンピュータ製品に包含される命令の機械による実行は、回路素子を取り巻く動作に加えて、入力データを記憶媒体で１つ以上のファイル、及び／又はオーディオ及び／又はビジュアルな描写のようなフィジカルオブジェクト又は実体の典型である１つ以上の出力信号に変換する。記憶媒体は、限定されるものではないが、フロッピー（登録商標）ディスク、ハードドライブ、磁気ディスク、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、及び光磁気ディスクを含む如何なるタイプのディスク、及びＲＯＭ（リードオンリメモリ）、ＲＡＭ（ランダムアクセスメモリ）、ＥＰＲＯＭ（電気的プログラム可能リードオンリメモリ）、ＥＥＰＲＯＭ（電気的消去可能リードオンリメモリ）、ＵＶＰＲＯＭ（紫外線消去可能リードオンリメモリ）、フラッシュメモリ、磁気カード、光カードのような回路、及び／又は電子命令の格納のために適切な如何なるタイプの媒体を含む。
【０１０３】
本発明のエレメントは、１つ以上のデバイス、ユニット、コンポーネント、システム、機械及び／又は装置の一部又は全てを構成する。デバイスは、限定されるものではないが、サーバ、ワークステーション、記憶アレイコントローラ、記憶システム、パーソナルコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、パームコンピュータ、携帯情報端末、携帯電子デバイス、バッテリ駆動デバイス、セットトップボックス、エンコーダ、デコーダ、トランスコーダ、コンプレッサ、デコンプレッサ、プリプロセッサ、ポストプロセッサ、トランスミッタ、レシーバ、トランシーバ、サイファ回路、携帯電話、デジタルカメラ、ポジショニング及び／又はナビゲーションシステム、医療機器、ヘッドアップ表示装置、ワイヤレスデバイス、オーディオ録音、記憶及び／又は再生装置、ビデオ録画、記憶及び／又は再生装置、ゲームプラットホーム、周辺装置及び／又はマルチチップモジュールを含む。関連する技術分野における当業者は、特定用途の基準を満たす他のタイプのデバイスで、本発明のエレメントが実現されることを理解するであろう。
【０１０４】
本発明は、特にその好適な実施の形態に関して表わされ説明されたが、本発明の範囲から逸脱することなく、形式と細部の様々な変更なし得るであろうことが当業者によって理解されるであろう。
【図１】
0005977094.tif 000002
【図２】
0005977094.tif 000003
【図３】
0005977094.tif 000004
【図４】
0005977094.tif 000005
【図５】
0005977094.tif 000006
【図６】
0005977094.tif 000007
【図７】
0005977094.tif 000008
【図８】
0005977094.tif 000009
【図９】
0005977094.tif 000010
【図１０】
0005977094.tif 000011
【図１１】
0005977094.tif 000012