(57)【特許請求の範囲】
【請求項１】
集積回路の外部インターフェイスをコントロールする装置において、
第１の複数のコマンドを記憶するように構成された第１のコマンドキューであって、その第１の複数のコマンドの割り込みを許すところの第１の複数のコマンド内のポイントを識別する１つ以上の指示を記憶するように更に構成された第１のコマンドキューと、
第２の複数のコマンドを記憶するように構成された第２のコマンドキューと、
前記第１のコマンドキュー及び第２のコマンドキューに結合されたコントロール回路であって、前記第２のコマンドキューにおける少なくとも第２コマンドを検出するのに応答して割り込み可能なポイントとして識別される第１コマンドにおいて前記第１の複数のコマンドの処理に割り込むように構成され、且つ前記割り込みに応答して前記第２コマンドの処理を開始するように構成されたコントロール回路と、
前記コントロール回路に結合された複数のコントロールレジスタであって、前記コントロール回路は、前記第２の複数のコマンドが処理されることを指示するために前記複数のコントロールレジスタの１つを更新するよう構成され、そして前記コントロール回路は、前記第１の複数のコマンドの処理を続けるべきであることを指示するために前記複数のコントロールレジスタの１つが再び更新されるまで前記第１の複数のコマンドの処理を禁止するように構成されたコントロールレジスタと、
を備えた装置。
【請求項２】
前記１つ以上の指示は、前記第１の複数のコマンドの各コマンドに各々関連し、そして前記第１の複数のコマンドが各コマンドにおいて割り込み可能であるかどうか各々表わす複数の指示である、請求項１に記載の装置。
【請求項３】
１つ以上のメモリ装置に結合するように構成されたメモリコントローラと、
１つ以上のフラッシュメモリ装置に結合するように構成されたフラッシュメモリインターフェイスユニットであって、請求項１に記載の装置を備えたフラッシュメモリインターフェイスユニットと、
前記メモリコントローラ及びフラッシュメモリインターフェイスユニットに結合された直接メモリアクセス（ＤＭＡ）コントローラであって、前記メモリコントローラとフラッシュメモリインターフェイスユニットとの間でＤＭＡ動作を遂行するように構成されたＤＭＡコントローラと、
前記ＤＭＡコントローラに結合されたプロセッサであって、このプロセッサは、前記フラッシュメモリインターフェイスユニットをコントロールするように構成され、このプロセッサからの通信は、前記ＤＭＡコントローラを通り、前記ＤＭＡコントローラとフラッシュメモリインターフェイスとの間の相互接続部を経て前記フラッシュメモリユニットへ送られ、前記相互接続部は、前記フラッシュメモリインターフェイスユニットとメモリコントローラとの間のＤＭＡ動作にも使用されるようなプロセッサと、
を備え、前記プロセッサは、前記フラッシュメモリインターフェイスユニットと１つ以上のフラッシュメモリ装置との間の第１の転送をコントロールするために前記第１のコマンドキューに第１の複数のコマンドを書き込むように構成され、更に、前記プロセッサは、前記第１の転送が完了する前に前記フラッシュメモリインターフェイスユニットと１つ以上のフラッシュメモリ装置との間の第２の転送をコントロールするために前記第２のコマンドキューに第２の複数のコマンドを書き込むように構成された、集積回路。
【請求項４】
外部インターフェイスを経て１つ以上の転送を遂行するためにインターフェイスコントローラにおいて第１のコマンドキューからのコマンドを処理する段階と、
前記第１のコマンドキューからのコマンド内の第１コマンドに関連した指示を検出する段階と、
前記指示が検出されたときに第２のコマンドキューにおいて少なくとも１つの第２のコマンドを検出する段階と、
前記指示及び少なくとも１つの第２のコマンドを検出するのに応答して前記第２のコマンドキューからのコマンドを処理するために前記第１のコマンドキューからの更なるコマンド処理に割り込む段階と、
前記第２コマンドキュー内のコマンドが処理されていることを指示するためにコントロールレジスタに書き込みする段階と、
前記コントロールレジスタが前記第１のコマンドキューからのコマンド処理を続けるべきであることを指示するために前記複数のコントロールレジスタの１つが再び書き込まれるまで、前記コントロールレジスタのコンテンツに応答して前記第１のコマンドキューからの更なるコマンド処理を禁止する段階と、
を含む方法。
【請求項５】
前記第１のコマンドキュー内のコマンドの継続処理を許すために前記コントロールレジスタを更新する書き込み動作を受け取る段階を更に含む、請求項４に記載の方法。
【請求項６】
前記書き込み動作はプロセッサにより発生される、請求項５に記載の方法。
【請求項７】
プロセッサと、第１コマンドキュー及び第２コマンドキューを含む外部インターフェイスユニットとを備え、各コマンドキューは、外部インターフェイスを介した転送をコントロールするために複数のコマンドを記憶するように構成され、前記プロセッサは、
第１の複数のコマンドを第１のコマンドキューにロードし、その第１の複数のコマンドを実行することで外部インターフェイスを介した第１の転送を生じさせ、
前記第１の転送よりプライオリティの高い転送の必要性を検出し、
前記プライオリティの高い転送を行うために第２の複数のコマンドを第２のコマンドキューにロードし、前記外部インターフェイスユニットは、前記プライオリティの高い転送を行うために前記第１の転送の処理に割り込ませ、
前記第２の複数のコマンドの終了に応答して当該第２の複数のコマンドが実行されるべきである指示をクリアーするためコントローラレジスタに書き込むようにし、一方、前記外部インターフェイスユニットは、前記指示がクリアーされるまで、たとえ前記第２のコマンドが空であっても前記指示に応答して前記第１のコマンドキュー内にある第１の複数のコマンドの処理を禁止する、
という複数のインストラクションを実行するように構成された、集積回路。
【請求項８】
実行時に第１の複数のコマンドを第１のコマンドキューにロードするという前記複数のインストラクションは、実行時に、前記第１の複数のコマンドに割り込みできるポイントの対応指示をロードするインストラクションを含む、請求項７に記載の集積回路。
【請求項９】
前記複数のインストラクションは、実行時に、
前記第１の転送よりプライオリティが高くない第３の転送の必要性を検出し、
前記第３の転送を実行するために第３の複数のコマンドを前記第１のコマンドキューにロードする、
請求項７に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路の分野に関し、より特定すれば、集積回路の周辺コンポーネントにおけるコマンド処理に関する。
【背景技術】
【０００２】
著しいデータ帯域巾を有する周辺インターフェイスコントローラにおいて行われる挑戦の１つは、外部プロセッサから周辺インターフェイスコントローラへコントロール入力を与えることである。典型的に、周辺インターフェイスコントローラとメモリとの間にデータを転送する周辺コントローラの同じ内部インターフェイスが、外部プロセッサからコントロール入力を与えるのにも使用される（例えば、周辺インターフェイスコントローラのコントロールレジスタへの一連の書き込みを経て）。データ転送が行われる間に、周辺インターフェイスに対するメモリは、データ転送で飽和される。従って、データ転送の次のセットをアレンジするためのコントロール入力は、現在データ転送が完了するまで実際上締め出される。コントロール入力が与えられる時間中に、周辺インターフェイスコントローラによりコントロールされる外部周辺インターフェイスは、アイドル状態となる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
周辺対メモリインターフェイスにおける競合を減少する１つのメカニズムは、周辺インターフェイスコントローラのハードウェアをコントロールするためのプログラムを実行するプロセッサを周辺インターフェイスコントローラに含ませることである。しかしながら、そのようなメカニズムは、多くの点で費用がかかる。即ち、プロセッサを取得するための金額に関して（個別のコンポーネントとして、又は周辺インターフェイスコントローラ設計に合体される知的特性として）；プロセッサが含まれるときに周辺インターフェイスコントローラにより占有されるスペースに関して；及びプロセッサにより消費される電力に関して。更に、実行されるプログラムは、システムメモリに記憶され、従って、インストラクションフェッチが周辺対メモリインターフェイスにおけるデータ転送と競合する。
【０００４】
更に、所与のデータ転送がスタートした後に、より重要な（又はよりプライオリティの高い）データ転送を遂行する必要性が識別される場合には、１つのデータ転送に割り込んで別のことを行うことが複雑になる。
【課題を解決するための手段】
【０００５】
一実施形態において、集積回路は、該集積回路の外部インターフェイスをコントロールするよう構成された周辺コンポーネントを備えている。例えば、周辺コンポーネントは、フラッシュメモリインターフェイスユニットのようなメモリインターフェイスユニットである。周辺コンポーネントに対する内部インターフェイスは、外部インターフェイスへの／からのデータ転送と、周辺コンポーネントへのコントロール通信との間で共有される。周辺コンポーネントは、インターフェイスにおいて転送を遂行するためのコマンドのセットを記憶するように構成された低プライオリティコマンドキューを備えている。更に、周辺コンポーネントは、インターフェイスにおいて転送を遂行するためのコマンドの第２セットを記憶するように構成された高プライオリティコマンドキューも備えている。低プライオリティキューにおけるコマンドは、コマンドの第２セットを遂行するためにコマンドのセットに割り込むところのポイントを識別する指示を含む。コントロール回路が低プライオリティコマンドキューに結合され、コマンドを読み取って、コマンドに応答してインターフェイスにおいて転送を生じさせるようにインターフェイスコントローラと通信する。更に、コントロール回路は、指示に応答して低プライオリティキューからのコマンドの処理に割り込み、高プライオリティコマンドキューからのコマンドを処理することができる。
【０００６】
一実施形態において、コマンドの第２セットにより表される高プライオリティ転送は、低プライオリティキューを最初に空にすることが要求される場合より迅速に遂行される。更に、割り込み可能なポイントで低プライオリティ転送に割り込むことにより、高プライオリティ転送が完了したときに低プライオリティ転送を再開することができる。高プライオリティ転送の前に行われた処理は、正しく完了し、繰り返す必要はない。
【０００７】
以下、添付図面を参照して、本発明を詳細に説明する。
【図面の簡単な説明】
【０００８】
【図１】集積回路、メモリ及びフラッシュメモリの一実施形態のブロック図である。
【図２】図１に示すフラッシュメモリインターフェイスの一実施形態のブロック図である。
【図３】書き込み動作を受け取るのに応答して行われる図２に示すフラッシュメモリインターフェイスコントロール回路の一実施形態の動作を示すフローチャートである。
【図４】フラッシュメモリインターフェイスコントロール回路によりサポートされるコマンドの一実施形態を示すテーブルである。
【図５】低プライオリティコマンドの先入れ先出しバッファ（ＦＩＦＯ）からコマンドを読み取るのに応答して行われる図２に示すフラッシュメモリインターフェイスコントロール回路の一実施形態の動作を示すフローチャートである。
【図６】高プライオリティコマンドの先入れ先出しバッファ（ＦＩＦＯ）からコマンドを読み取るのに応答して行われる図２に示すフラッシュメモリインターフェイスコントロール回路の一実施形態の動作を示すフローチャートである。
【図７】マクロメモリの規範的使用を示すブロック図である。
【図８】図１に示すプロセッサの一実施形態により実行されるフラッシュメモリインターフェイスコードの一実施形態の動作を示すフローチャートである。
【図９】図１に示す装置を含むシステムの一実施形態のブロック図である。
【図１０】コンピュータアクセス可能な記憶媒体の一実施形態のブロック図である。
【発明を実施するための形態】
【０００９】
本発明は、種々の変更を受けそして別の形態でも実施できるが、その特定の実施形態を一例として添付図面に示して以下に詳細に説明する。しかしながら、添付図面及び詳細な説明は、本発明を、ここに開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲に規定される本発明の精神及び範囲内に入る全ての変更、等効物及び代替え物を網羅することを理解されたい。ここに使用する見出しは、編成上の目的に過ぎず、説明の範囲を限定するためのものではない。又、本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味（即ち、〜の潜在性があるという意味）で使用されるもので、強制の意味（即ち、〜しなければならないという意味）ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
【００１０】
種々のユニット、回路又は他のコンポーネントは、１つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に１つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット／回路／コンポーネントは、そのユニット／回路／コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路、及び／又は動作を実施するように実行できるプログラムインストラクションを記憶するメモリを含む。メモリは、スタティック又はダイナミックランダムアクセスメモリのような揮発性メモリ、及び／又は光学又は磁気ディスク記憶装置、フラッシュメモリ、プログラム可能なリードオンリメモリ、等の不揮発性メモリを含む。同様に、種々のユニット／回路／コンポーネントは、説明の便宜上、１つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。１つ以上のタスクを遂行するように構成されたユニット／回路／コンポーネントを表現する場合、そのユニット／回路／コンポーネントに関して３５Ｕ.Ｓ.Ｃ.§１１２、第６節の解釈を引用しないことが明確に意図される。
【００１１】
図１は、外部メモリ１２及び１つ以上のフラッシュメモリ装置２８Ａ−２８Ｂに結合された集積回路１０の一実施形態を示すブロック図である。ここに示す実施形態では、集積回路１０は、メモリコントローラ１４と、相互接続ファブリック１６と、コンポーネント１８Ａ−１８Ｂのような周辺コンポーネントのセットと、フラッシュメモリインターフェイスユニット３０と、中央ＤＭＡ（ＣＤＭＡ）コントローラ２０と、レベル１（Ｌ１）キャッシュ２４、レベル２（Ｌ２）キャッシュ２６を含むプロセッサ２２と、入力／出力プロセッサ（Ｉ／Ｏ）プロセッサ（ＩＯＰ）３２と、を備えている。メモリコントローラ１４は、メモリ１２が結合されるメモリインターフェイスに結合されると共に、相互接続ファブリック１６に結合される。ＣＤＭＡコントローラ２０、Ｌ２キャッシュ２６及びプロセッサ２２（Ｌ２キャッシュ２６を経て）も、ここに示す実施形態では、相互接続ファブリック１６に結合される。Ｌ２キャッシュ２６は、プロセッサ２２に結合され、そしてＣＤＭＡコントローラ２０は、コンポーネント１８Ａ−１８Ｂ、フラッシュメモリインターフェイスユニット３０及びＩＯＰ３２に結合される。１つ以上の周辺コンポーネント１８Ａ−１８Ｂは、周辺コンポーネント１８Ａのような外部インターフェイスにも結合される。他の実施形態では、他のコンポーネントが相互接続ファブリック１６に直結される（例えば、他の周辺コンポーネント）。
【００１２】
ＣＤＭＡコントローラ２０は、メモリ１２、種々の周辺コンポーネント１８Ａ−１８Ｂ及び／又はフラッシュメモリインターフェイスユニット３０の間でＤＭＡ動作を遂行するように構成される。種々の実施形態には、ＣＤＭＡコントローラ２０を通して結合された多数の周辺コンポーネント及び／又はフラッシュメモリインターフェイスユニット３０が含まれる。プロセッサ２２（及び特にプロセッサ２２により実行されるインストラクション）は、ＤＭＡ動作を遂行するようにＣＤＭＡコントローラ２０をプログラムする。種々の実施形態では、ＣＤＭＡコントローラ２０が種々の仕方でプログラムされる。例えば、遂行されるべきＤＭＡ動作を記述するＤＭＡ記述子がメモリ１２に書き込まれ、そしてＣＤＭＡコントローラ２０は、メモリ１２にＤＭＡ記述子を配置するようにプログラムすることのできるレジスタを含む。ＤＭＡチャンネルに対して複数の記述子が生成され、そしてそれら記述子に記述されたＤＭＡ動作は、指定されたように遂行される。或いは又、ＣＤＭＡコントローラ２０は、遂行されるべきＤＭＡオペレーションを記述するようにプログラムできるレジスタを含み、そしてＣＤＭＡコントローラ２０をプログラムすることは、レジスタに書き込みすることを含む。
【００１３】
一般的に、ＤＭＡ動作とは、インストラクションを実行するプロセッサとは個別のハードウェアにより遂行される、ソースからターゲットへのデータ転送である。ハードウェアは、プロセッサによって実行されるインストラクションを使用してプログラムされるが、転送それ自体は、プロセッサにおけるインストラクションの実行とは独立してハードウェアにより遂行される。ソース及びターゲットの少なくとも１つは、メモリである。メモリは、システムメモリ（例えば、メモリ１２）、フラッシュメモリ装置２８Ａ−２８Ｂ、又はある実施形態では、集積回路１０の内部メモリである。あるＤＭＡ動作は、ソース及びターゲットとしてメモリを有する（例えば、メモリ１２とフラッシュメモリ装置２８Ａ−２８Ｂとの間のＤＭＡ動作、又はメモリ１２の１つのブロックから別のブロックへのコピー動作）。他のＤＭＡ動作は、ソース又はターゲットとして周辺コンポーネントを有する。周辺コンポーネントは、ＤＭＡデータが転送されるか又はＤＭＡデータを受信するところの外部インターフェイスに結合される。例えば、周辺コンポーネント１８Ａは、ＤＭＡデータが転送されるか又はＤＭＡデータを受信するところのインターフェイスに結合される。従って、ＤＭＡ動作は、ＣＤＭＡコントローラ２０がソースからデータを読み取りそして行先へデータを書き込むことを含む。データは、ＤＭＡ動作の一部分としてＣＤＭＡコントローラ２０を通して流れる。特に、メモリ１２からのＤＭＡ読み取りのためのＤＭＡデータは、メモリコントローラ１４を通り、相互接続ファブリック１６を経て、ＣＤＭＡコントローラ２０を通り、周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０へ（及びもし該当する場合は、おそらく、周辺コンポーネントが結合されるインターフェイスへ）流れる。メモリへＤＭＡ書き込みするためのデータは、逆方向に流れる。
【００１４】
一実施形態において、プロセッサ２２及び／又はＩＯＰ３２により実行されるインストラクションは、プログラムされた入力／出力（ＰＩＯ）動作と称される読み取り及び／又は書き込み動作を使用して周辺コンポーネント１８Ａ−１８Ｂ及びフラッシュメモリインターフェイスユニット３０とも通信する。ＰＩＯ動作は、集積回路１０により周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０（及びより詳細には、コンポーネント内のレジスタ又は他の読み取り可能／書き込み可能なリソース）へマップされるアドレスを有する。アドレスマッピングは、アドレススペースに固定されてもよいし、或いはプログラム可能であってもよい。或いは又、ＰＩＯ動作は、メモリ読み取り／書き込み動作とは区別できる形態で送信されてもよい（例えば、相互接続ファイバ１６におけるメモリ読み取り／書き込み動作とは異なるコマンドエンコーディングを使用して、又はメモリ対ＰＩＯを指示するための側波帯信号又はコントロール信号を使用して、等々）。ＰＩＯ送信は、そのような実施のためにＰＩＯアドレススペース内で周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０（及びアドレスされたリソース）を識別するアドレスを依然含む。アドレスされたリソースは、コンフィギュレーション又はコントロールレジスタ、論理的リソース（例えば、ＰＩＯは、コマンドとして解釈される）、等の、アドレスされたコンポーネント／ユニット内のリソースである。
【００１５】
一実施形態において、ＰＩＯ動作は、ＣＤＭＡコントローラ２０と同じ相互接続を使用し、周辺コンポーネント１８Ａ−１８Ｂ及びフラッシュメモリインターフェイスユニット３０のためにＣＤＭＡコントローラ２０を通して流れる。従って、ＰＩＯ動作は、プロセッサ２２により、（この実施形態ではＬ２キャッシュ２６を通して）相互接続ファブリック１６を経て、ＣＤＭＡコントローラ２０、及びターゲットとする周辺コンポーネント／フラッシュメモリインターフェイスユニットへ発生される。同様に、ＰＩＯ３２は、ＰＩＯ動作をＣＤＭＡコントローラ２０へ発生し、該コントローラは、同じ相互接続を経て周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０へＰＩＯ動作を送信する。
【００１６】
従って、周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０への／からのＤＭＡ動作のためのデータ転送が、同じ周辺コンポーネント１８Ａ−１８Ｂ又はフラッシュメモリインターフェイスユニット３０への／からのＰＩＯ動作と競合することがある。例えば、フラッシュメモリインターフェイスユニット３０は、フラッシュメモリ装置２８Ａ−２８Ｂへの／からのメモリ転送を遂行するためにＰＩＯ動作を経てプログラムされる。書き込み動作については、ＣＤＭＡコントローラ２０は、フラッシュメモリインターフェイスユニット３０へ書き込まれるべきデータのＤＭＡを行う。読み取り動作については、ＣＤＭＡコントローラ２０は、フラッシュメモリインターフェイスユニット３０から読み取られるべきデータのＤＭＡを行う。一実施形態では、フラッシュメモリ装置２８Ａ−２８Ｄは、装置への／装置からの１ページのデータ転送をサポートする。ページのサイズは、装置に依存し、メモリ１２のためのバーチャル対物理的アドレス変換に使用されるページサイズと同じでなくてもよい。例えば、５１２バイト、２０４８バイト及び４０９６バイトのページサイズがしばしば使用される。従って、この点について、ページとは、メモリ装置のためのデータ転送の単位である。
【００１７】
フラッシュメモリインターフェイスユニット３０は、１ページのデータ転送を遂行するようにプログラムされ、そしてＣＤＭＡユニット２０は、データを転送するためのＤＭＡ動作を遂行する。複数のページを転送すべき場合には、付加的なＰＩＯ動作を使用して、次の転送を行うようにフラッシュメモリインターフェイスユニット３０をプログラムすることができる。しかしながら、ＤＭＡ動作は、現在ページが完了するまで付加的なＰＩＯ動作を実際上締め出す。従って、次のページのためにフラッシュメモリインターフェイスユニット３０をプログラムする間に経過する時間は、フラッシュメモリ装置へのインターフェイスにアイドル時間を生じさせる。
【００１８】
更に、ＤＭＡ転送が開始され、次いで、ＩＣ１０では、よりプライオリティの高いデータ転送が必要となる。例えば、フラッシュメモリインターフェイスユニット３０については、進行中のＤＭＡ転送がアプリケーションによって開始され、次いで、オペレーティングシステムは、ページ欠陥を満足するために、フラッシュメモリ２８Ａ−２８Ｂへデータをページアウトするか又はフラッシュメモリ２８Ａ−２８Ｂからデータを読み取ることが必要となる。或いは又、バックグラウンドで実行中のアプリケーションがＤＭＡ転送を開始し、そしてアクティブに使用される（フォアグラウンドの）アプリケーションは、転送を遂行することが必要となる。別の例では、アプリケーションにプライオリティが指定される。更に別の例では、ＩＣ１０のハードウェアは、フラッシュメモリ２８Ａ−２８Ｂへのアクセスを必要とし、ソフトウェアアクセスより高いプライオリティとなる。
【００１９】
一実施形態において、フラッシュメモリインターフェイスユニット３０は、複数のコマンドキューをサポートする。転送されるべきページのセットに対してフラッシュメモリインターフェイスユニット３０をプログラムするためのコマンドは、コマンドキューの１つにキューイングされる。第１ページのＤＭＡ動作が開始すると、その後のページに対してフラッシュメモリインターフェイスユニット３０をプログラムするためのデータがコマンドキューに予め記憶される。従って、フラッシュメモリインターフェイスユニット３０をプログラムするためのＰＩＯ動作と、データを転送するためのＤＭＡ動作との間に競合が生じることはない。ＣＤＭＡユニット３０が現在ページに対するＤＭＡ動作を完了する間に転送されるべき次のページに対してフラッシュメモリコントローラ３０を構成するようにコマンドキューからのコマンドを処理できるためにフラッシュメモリ装置２８Ａ−２８Ｂへのインターフェイスの利用性を高めることができる。
【００２０】
更に、コマンドキューには、プライオリティが関連付けられる。例えば、２つのキューが含まれ、一方は、プライオリティの低いキューであり、他方は、プライオリティの高いキューである。フラッシュメモリインターフェイスユニット３０は、処理されるべきコマンドが高プライオリティキューにある場合に低プライオリティキューのコマンドの処理に割り込むように構成される。従って、プライオリティの高い転送が、プライオリティの低い転送に割り込む。１つの実施形態では、低プライオリティキューは、割り込みが許されるコマンドストリームにおける位置を識別する１つ以上の指示を含む。それらの指示は、コマンド内の「良好な」場所（例えば、ページの終わり、同期ポイント、等）で割り込みが生じるように保証する。即ち、コマンドが高プライオリティキューに書き込まれる時間に低プライオリティキューで行われていた動作が完了され、従って、それらの動作は、高プライオリティ処理が終了した後に再び遂行される必要はない。一実施形態において、キューは、高プライオリティ又は低プライオリティとしてスタティックに指定される。他の実施形態では、プライオリティは、プログラム可能である。
【００２１】
一実施形態において、フラッシュメモリインターフェイスユニット３０は、１つ以上のマクロを記憶するためにマクロメモリをサポートする。マクロとは、マクロコマンドを経て呼び出される２つ以上のコマンドのシーケンスである。例えば、マクロコマンドは、コマンドキューの１つに書き込まれ、そしてフラッシュメモリインターフェイスユニット３０によりマクロコマンドが遂行されるときにマクロを呼び出す。頻繁に使用されるコマンドシーケンスを実施するマクロがマクロメモリにダウンロードされ、従って、後でダウンロードされる必要のあるコマンドは僅かである。即ち、マクロに記憶されるコマンドを繰り返し書き込むのではなく、マクロコマンドがコマンドキューに書き込まれる。一実施形態では、マクロコマンドは、マクロのスタートアドレス及びマクロにおけるワード数を指定する。その数のワードがマクロから読み取られ、そしてそれに対応するコマンドが遂行されると、そのマクロコマンドの後の対応コマンドキューにおける次のコマンドが遂行される。従って、マクロにおいてリターンコマンドが回避され、一実施形態ではより濃密なマクロが許される。他の実施形態では、スタートアドレス及びコマンドの数がオペランドとして使用される。更に別の実施形態では、リターンコマンドが実施され、そしてマクロコマンドは、スタートアドレス（ワード／コマンドカウントではない）をオペランドとして含む。一実施形態では、マクロコマンドは、ループカウントオペランドも含む。ループカウントオペランドは、遂行されるべきマクロの繰り返し数を指定する。従って、マクロコマンドを遂行することは、スタートアドレスで始めてその数のワードを読み取り、そしてコマンドを遂行し、これをループカウント回数繰り返した後に、マクロコマンド後のコマンドシーケンスにおける次のコマンドで処理を行うことを含む。
【００２２】
コマンドキューにおけるコマンド及び／又はマクロメモリにおけるコマンドは、オペランドを使用してそれらの動作をコントロールする。あるケースでは、オペランドは、それに対応するコマンドキューに記憶される。他のケースでは、オペランドは、オペランドキューに記憶される。コマンドキュー又はマクロメモリにおけるコマンドは、フラッシュメモリインターフェイスユニット３０がオペランドキューからオペランドをロードしそしてオペランドに基づいて動作することを指定する。オペランドキューは、一般的マクロのためのインスタンス特有データ（例えば、フラッシュメモリアドレス、チップイネーブル、等）を供給するためにマクロと共に使用される。同様に、オペランドキューは、コマンドキューにおけるコマンドのためのオペランドを供給する。
【００２３】
ここで使用するメモリ転送とは、（メモリ装置に対するインターフェイスを経て）メモリ装置へ／からデータを転送することを指す。従って、フラッシュメモリ装置２８Ａ−２８Ｂへの／からのメモリ転送は、フラッシュメモリ装置２８Ａ−２８Ｂとフラッシュメモリインターフェイスユニット３０との間のインターフェイスを経て行われる。同様に、メモリ１２への／からのメモリ転送は、メモリ１２とメモリコントローラ１４との間のインターフェイスを経て行われる。メモリ転送は、メモリ装置により定義されたプロトコルを使用して行われる。更に、コマンドは、周辺コンポーネントのハードウェア（例えば、フラッシュメモリインターフェイスユニット３０）によりハードウェアで遂行される特定の動作を指定するものとして解釈される１つ以上のデータバイトを指してもよい。
【００２４】
一般的に、周辺コンポーネントは、プロセッサと共に集積回路１０に含まれるべき望ましい回路である。周辺コンポーネントは、集積回路１０の他のコンポーネントがその周辺コンポーネントと通信できるようにする定義された機能及びインターフェイスを有する。例えば、周辺コンポーネントは、ディスプレイコントローラ、グラフィックプロセッサ、等のビデオコンポーネントと；デジタル信号プロセッサ、ミクサ、等のオーディオコンポーネントと；イーサネット（登録商標）メディアアクセスコントローラ（ＭＡＣ）又はワイヤレスフィデリティ（ＷｉＦｉ）コントローラと；種々のインターフェイス、例えば、ユニバーサルシリアルバス（ＵＳＢ）、周辺コンポーネント相互接続（ＰＣＩ）、又はその変形、例えば、ＰＣＩエクスプレス（ＰＣＩｅ）、シリアル周辺インターフェイス（ＳＰＩ）、フラッシュメモリインターフェイス、等を経て通信するためのコントローラと、を含む。フラッシュメモリインターフェイスユニット３０は、周辺コンポーネントの一例であり、ここに述べる周辺コンポーネントの一般的な特性は、フラッシュメモリインターフェイスユニット３０に適用することができる。
【００２５】
プロセッサ２２は、インストラクションセットアーキテクチャーを実施し、そしてそのインストラクションセットアーキテクチャーに定義されたインストラクションを実行するように構成される。プロセッサ２２は、スカラー、スーパースカラー、パイプライン、スーパーパイプライン、無秩序、秩序、推論的、非推論的、等、又はその組み合わせを含むマイクロアーキテクチャーを使用する。プロセッサ２２は、回路を含み、そして任意であるが、マイクロコーディング技術を実施する。ここに示す実施形態では、プロセッサ２２は、該プロセッサ２２により使用されるデータ及びインストラクションを記憶するためのＬ１キャッシュ２４を備えている。個別のＬ１データ及びインストラクションキャッシュがある。Ｌ１キャッシュは、任意の容量及び編成（セット連想、直接マップ、等）を有するものでよい。ここに示す実施形態では、Ｌ２キャッシュ２６も設けられる。Ｌ２キャッシュ２６は、Ｌ１キャッシュと同様に、任意の容量及び編成を有するものでよい。
【００２６】
同様に、ＩＯＰ３２は、インストラクションセットアーキテクチャーを実施し、そしてそのインストラクションセットアーキテクチャーで定義されたインストラクションを実行するように構成される。ＩＯＰ３２により実施されるインストラクションセットアーキテクチャーは、プロセッサ２２により実施される同じインストラクションセットアーキテクチャーである必要はない。一実施形態では、ＩＯＰ３２は、プロセッサ２２より低電力、低性能のプロセッサである。ＩＯＰ３２は、種々のＩ／Ｏインターフェイス問題を取り扱う（望ましい動作、あるエラー処理、等を遂行するように周辺コンポーネントを構成する）。ＩＯＰ３２は、フラッシュメモリインターフェイスユニット３０のコマンドキューにコマンドを書き込み、フラッシュメモリインターフェイスユニット３０のマクロメモリにマクロを書き込み、及び／又はフラッシュメモリインターフェイスユニット３０のオペランドキューにオペランドを書き込むためのインストラクションを実行する。更に、ＩＯＰ３２は、他の周辺コンポーネント１８Ａ-１８Ｂにサービスするためのインストラクションも実行する。従って、プロセッサ２２は、他のコンピューティングタスクを遂行してもよいし、又は遂行すべき他のコンピューティングタスクがない場合には電力を保存するためにパワーダウンされてもよい。ＩＯＰ３２は、スカラー、スーパースカラー、パイプライン、スーパーパイプライン、無秩序、秩序、推論的、非推論的、等、又はその組み合わせを含むマイクロアーキテクチャーを使用する。ＩＯＰ３２は、回路を含み、そして任意であるが、マイクロコーディング技術を実施する。
【００２７】
相互接続ファブリック１６は、これを経て、メモリコントローラ１４、プロセッサ２２（Ｌ２キャッシュ２６を通して）、Ｌ２キャッシュ２６、及びＣＤＭＡコントローラ２０が通信を行えるようにする相互接続部である。相互接続ファブリック１６は、任意の形式の相互接続部（例えば、バス、パケットインターフェイス、ポイント対ポイントリンク、等）を実施する。一実施形態において、相互接続ファブリック１６は、相互接続部のハイアラーキーである。例えば、プロセッサ２２及びキャッシュ２４、２６は、コヒレントポート及びメモリコントローラ１４へのポートを含む「コアコンプレックス」において実施される。ＣＤＭＡコントローラ２０は、コヒレントポートに結合される。ある実施形態では、メモリコントローラ１４は、マルチポート型である。そのようなある実施形態では、ＣＤＭＡコントローラ２０は、メモリコントローラ１４の個別ポートに結合される。そのような他の実施形態では、ＣＤＭＡコントローラ２０は、ＡＣＰポートを通して結合される。
【００２８】
メモリコントローラ１４は、システムインターフェイスユニット１６からメモリ要求を受け取るように構成される。メモリコントローラ１４は、取り付けられたメモリ１２に対して定義されたインターフェイスを使用して、メモリ１２にアクセスして、要求（書き込み要求については受け取ったデータをメモリ１２に書き込み、又は読み取り要求に応答してメモリ１２からのデータを与える）を完了させる。メモリコントローラ１４は、任意の形式のメモリ１２、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、倍データレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、等）ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、等とインターフェイスするように構成される。メモリは、複数のメモリバンク、例えば、デュアルインラインメモリモジュール（ＤＩＭＭ）、シングルインラインメモリモジュール（ＳＩＭＭ）、等として配置される。一実施形態では、１つ以上のメモリチップが、パッケージオンパッケージ（ＰＯＰ）又はチップオンチップ（ＣＯＣ）構成で集積回路１０に取り付けられる。
【００２９】
メモリ１２は、１つ以上のメモリ装置を含む。一般的に、メモリ装置は、書き込み動作ではデータが与えられるアドレスに基づいてデータを記憶し、そしてそのアドレスが読み取り動作に使用されるときにはそのデータを供給するように設計された任意のコンポーネントである。上述したメモリ形式は、例えば、メモリ装置で実施され、そしてフラッシュメモリ装置２８Ａ−２８Ｂもメモリ装置でよい。メモリ装置は、プリント回路板のような基板に接続されるチップ、マルチチップ（例えば、ＳＩＭＭ又はＤＩＭＭであるか、又はＩＣ１０が結合される回路板に直結される）、等である。
【００３０】
フラッシュメモリインターフェイスユニット３０は、フラッシュメモリ装置２８Ａ−２８Ｂに対する読み取り及び書き込み要求を受け取るように構成されると共に、フラッシュメモリ装置２８Ａ−２８Ｂにインターフェイスして読み取り／書き込み要求を完了するように構成された回路を含む。一実施形態では、読み取り／書き込み要求がＣＤＭＡコントローラ２０から供給される。フラッシュメモリインターフェイスユニット３０は、（例えば、ＰＩＯ動作を経て）フラッシュメモリ装置２８Ａ−２８Ｂへの／からのメモリ転送を遂行するために１つ以上のコントロールレジスタ（以下に説明する図２を参照）を経てプログラムすることができる。フラッシュメモリ装置２８Ａ−２８Ｂは、この技術でよく知られた不揮発性メモリの一形式であるフラッシュメモリである。他の実施形態では、他の形態の不揮発性メモリが使用される。例えば、バッテリ支援型ＳＲＡＭ、種々の形式のプログラマブルＲＯＭ、例えば、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）、等が使用されてもよい。更に別の実施形態では、メモリ１２と同様の揮発性メモリが使用される。
【００３１】
この実施形態は、フラッシュメモリインターフェイスユニット３０にコマンドキュー（ＦＩＦＯ）、マクロメモリ、及び／又はオペランドキュー（ＦＩＦＯ）を使用して説明するが、他の実施形態では、周辺コンポーネントにおける特徴が、任意の形式のメモリ又は周辺インターフェイスで実施されてもよい。
【００３２】
他の実施形態は、図１に示すコンポーネント及び／又は他のコンポーネントのサブセット又はスーパーセットを含めて、コンポーネントの他の組み合わせを含んでもよいことに注意されたい。所与のコンポーネントの一例が図１に示されたが、他の実施形態は、所与のコンポーネントの１つ以上の例を含んでもよい。
【００３３】
図２は、フラッシュメモリインターフェイスユニット３０の一実施形態のブロック図である。ここに示す実施形態では、フラッシュメモリインターフェイスユニット３０は、低プライオリティ（ＬＰ）コマンドＦＩＦＯ４０と、高プライオリティ（ＨＰ）コマンドキュー４１と、フラッシュメモリインターフェイス（ＦＭＩ）コントロール回路４２と、マクロメモリ４４と、オペランドＦＩＦＯ４６と、フラッシュメモリコントローラ（ＦＭＣ）４８と、レジスタ５１を含むＦＭＣコントロールレジスタ５０のセットと、データバッファ５２Ａ−５２Ｂと、エラーチェック／修正（ＥＣＣ）ユニット５４とを備えている。コマンドＦＩＦＯ４０及び４１、ＦＭＩコントロール回路４２、マクロメモリ４４、オペランドＦＩＦＯ４６、及びバッファ５２Ａ−５２Ｂは、全て、ＣＤＭＡコントローラ２０に対する内部インターフェイスに結合される。ＦＭＩコントロール回路４２は、更に、コマンドＦＩＦＯ４０及び４１、マクロメモリ４４、オペランドＦＩＦＯ４６、及びＦＭＣコントロールレジスタ５０に結合される。ＦＭＣコントロールレジスタ５０は、更に、ＦＭＣ４８に結合され、これは、フラッシュメモリ装置への外部インターフェイスに結合される。ＦＭＣ４８は、更に、バッファ５２Ａ−５２Ｂに結合される。ＥＣＣユニット５４もバッファ５２Ａ−５２Ｂに結合される。
【００３４】
ＦＭＩコントロール回路４２は、ＣＤＭＡコントローラ２０からＰＩＯ動作を受け取るように構成される。コマンドＦＩＦＯ４０及び４１、マクロメモリ４４、又はオペランドＦＩＦＯ４６に幾つかのＰＩＯ動作が向けられる。例えば、コマンドＦＩＦＯ４０又は４１にコマンドを書き込み、マクロメモリ４４にマクロをダウンロードし、又はオペランドＦＩＦＯ４６にオペランドを書き込むために、ＰＩＯ書き込みが使用される。ＦＩＦＯ４０及び４１、マクロメモリ４４、及びオぺランドＦＩＦＯ４６の各々にアドレスが指定され、これは、望ましいリソースをアドレスするためにＰＩＯオペランドに使用されるものである。例えば、ＦＩＦＯ４０、４１及び４６は、先入れ先出し的に動作するので単一のアドレスが指定されている。アドレスへのＰＩＯ書き込みは、ＦＭＩコントロール回路４２が、書き込みで与えられるデータを、ＦＩＦＯ４０、４１又は４６における次のオープンエントリに記憶するようにさせる。即ち、データがＦＩＦＯ４０、４１又は４６の末尾に添付され、ここで、ＦＩＦＯ４０、４１又は４６の頭部からコマンド又はオペランドが除去される。マクロメモリ４４には、ある範囲のアドレス、例えば、マクロメモリ４４のワード当たりのアドレスが指定される。アドレスへのＰＩＯ書き込みは、与えられたデータワードを、マクロメモリ４４のアドレスされたワードに記憶する。
【００３５】
ＦＭＩコントロール回路４２は、コマンドＦＩＦＯ４０又は４１内のコマンドを処理して、フラッシュメモリ装置２８Ａ−２８Ｂへの／からの特定のメモリ転送をＦＭＣ４８に遂行させるように種々のＦＭＣコントロールレジスタ５０をプログラムする。一実施形態において、ＦＭＣ４８は、アドレス、チップイネーブル、転送コマンド、等を含めて、ＦＭＣコントロールレジスタ５０を経て比較的低レベルのコントロールを受け取るように構成される。コマンドＦＩＦＯ４０及び４１内のコマンドは、ＦＭＩコントロール回路４２により解釈され、そしてそれに対応するＦＭＣコントロールレジスタ５０は、ＦＭＩコントロール回路４２により書き込まれる。同様に、１つ以上のＦＭＣコントロールレジスタ５０を読み取って事象を検出するために、ある事象を待機するコマンドがＦＭＩコントロール回路４２により解釈される。又、コマンドに応答してＦＭＩコントロール回路４２により駆動され及び／又はコマンドに応答してＦＭＩコントロール回路４２により監視されるある実施形態（図２には示さず）では、ＦＭＩコントロール回路４２とＦＭＣ４８との間に直接的なコントロール信号も存在する。
【００３６】
ＦＭＩコントロール回路４２は、コマンドＦＩＦＯ４０又は４１からコマンドを、そのＦＩＦＯに書き込まれた順序で読み取るように構成される。より一般的には、コマンドキューがサポートされる（例えば、コマンドＦＩＦＯ４０及び４１は、特にＦＩＦＯとして構成されなくてもよく、キューの各エントリーがＦＭＩコントロール回路４２に同時に見えるようにしてもよい）。同様に、オペランドＦＩＦＯ４６は、オペランドキューでもよく、そしてＦＭＩコントロール回路４２は、コマンドキュー又はマクロメモリ４４内のコマンドに応答してオペランドＦＩＦＯ４６からオペランドを、それらオペランドが書き込まれた順序で読み取ってもよい。
【００３７】
両ＦＩＦＯ４０及び４１が空であり、そしてコマンドがＬＰコマンドＦＩＦＯ４０に書き込まれる場合には、ＦＭＩコントロール回路４２は、ＬＰコマンドＦＩＦＯ４０からコマンドを読み取ってそのコマンドを実行する。ＦＭＩコントロール回路４２がＬＰコマンドＦＩＦＯ４０からのコマンドを処理している間にコマンドがＨＰ  ＦＩＦＯ４１に書き込まれる場合には、ＦＭＩコントロール回路４２は、ＦＩＦＯ４１からのコマンドの処理を開始するためにＦＩＦＯ４０からのコマンドの処理に割り込むべきポイントを決定する。図２において、この実施形態のためにＬＰコマンドＦＩＦＯ４０における多数のエントリーが示されている。この実施形態では、ＬＰコマンドＦＩＦＯ４０の各エントリーは、コマンドの記憶部をイールド(yield)ビット（Ｙ）と共に含む。このイールドビットが所与のコマンドに対してセットされた場合には、その所与のコマンドが処理された後にコマンドの処理に割り込みがなされる。イールドビットがクリアされた場合には、処理への割り込みがなされない。イールドビットは、ＬＰコマンドＦＩＦＯ４０へのＰＩＯ書き込みに対するＰＩＯデータの一部分である。他の実施形態では、他の指示が使用される（例えば、セット及びクリア状態に対して逆の意味をもつビット）。更に、他の実施形態は、ＦＩＦＯ４０内の個別のコマンドを使用して、割り込み可能性を指示する。即ち、ＦＩＦＯ４１からのコマンドがある場合にそのようなコマンドを処理するためにＦＩＦＯ４０からの処理にＦＭＩコントロール回路４２が割り込むのを許すことがその動作であるコマンドが定義される。ＦＩＦＯ４１における処理を待機しているコマンドがない場合には、ＦＩＦＯ４０の処理は、次のコマンドで続けられる。
【００３８】
ＨＰコマンドＦＩＦＯ４１内のコマンドを処理するためにＬＰコマンドＦＩＦＯ４０内のコマンドの処理に割り込むのに応答して、ＦＭＩコントロール回路４２は、この実施形態では、レジスタ５１内のＨＰＥビットをセットするように構成される。ＨＰＥビットがセットされると、ＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４１からのコマンドがもしあれば処理するが、ＬＰコマンドＦＩＦＯ４０からのコマンドはＨＰＥビットがクリアされるまで処理しないように構成される。ＦＭＩコントロール回路４２は、ＨＰＥビットをクリアせず、むしろ、ソフトウェアがレジスタ５１に書き込みを行うことによりそれを行う。このように、ソフトウェアがコマンドＦＩＦＯ４１をいっぱいにし終える前にＦＭＩコントロール回路４２がＨＰコマンドＦＩＦＯ４１を空にする場合には（例えば、ソフトウェアの割り込み、フラッシュメモリインターフェイスユニット３０へコマンドを送信する際の遅延、等のために）、ＦＭＩコントロール回路４２は、ＬＰコマンドＦＩＦＯ４０からのコマンドの処理に永久的に戻ることはない。更に、コマンドの高プライオリティシーケンスが完了すると、ソフトウェアは、ＬＰコマンドＦＩＦＯ４０を読み取って、コマンドの低プライオリティシーケンスのどこで割り込まれたか決定する。
【００３９】
ある実施形態では、ソフトウェアは、レジスタ５１に書き込みを行ってＨＰＥビットをセットする。そのようにすることで、ＦＭＩコントロール回路４２は、（Ｙビットで指示される）次の境界においてＬＰコマンドＦＩＦＯ４０の処理に割り込む。このような動作で、ソフトウェアは、ＬＰコマンドＦＩＦＯ４０の処理を停止することができ、そしてソフトウェアは、ＬＰコマンドＦＩＦＯ４０の状態を検査することができるようにされる。同様に、ソフトウェアは、待機コマンド（又はフラッシュメモリインターフェイス３０又はコントロールレジスタ５０のコンフィギュレーションを変化させることない他のコマンド）をＨＰコマンドＦＩＦＯ４１に書き込み、これは、ＦＭＩコントロール回路４２が、適当なポイントにおいてＬＰコマンドＦＩＦＯ４０からのコマンドの処理に割り込むようにさせる。
【００４０】
上述したように、マクロコマンドは、コマンドＦＩＦＯ４０又は４１の一方にあり、そしてＦＭＩコントロール回路４２は、マクロコマンドに応答してマクロメモリ４４からのコマンドを実行する。他の実施形態では、マクロコマンドは、ＰＩＯ動作としてＦＭＩコントロール回路４２へ送信される。更に別の実施形態では、コマンドＦＩＦＯ４０又は４１、或いはＰＩＯ動作においてマクロコマンドに遭遇する。マクロコマンドは、マクロメモリにおけるスタートアドレスと、マクロメモリ４４から読み取るべきワードの数を指示するワードカウントとを含む。ＦＭＩコントロール回路４２は、マクロのコマンドを、それに対応するコマンドＦＩＦＯ４０又は４１における次のコマンド（マクロコマンドに続く）を読み取る前に、実行する。マクロのワードは、一実施形態では、コマンドに加えてオペランドを含む。他の実施形態では、ワードカウントではなくコマンドカウントが使用される。上述したように、マクロコマンドは、ループカウントも含み、マクロは、ループカウントで指示された回数、繰り返される。
【００４１】
コマンドＦＩＦＯ４０及び４１から及びオペランドＦＩＦＯ４６からワードを読み取ることは、ＦＭＩコントロール回路４２がＦＩＦＯからのこれらのワードを削除することを含む。他方、マクロメモリ４４からワードを読み取ることは、マクロを繰り返し実行できるようにワードの削除を含まない。
【００４２】
ＦＭＣ４８は、ＦＭＣコントロールレジスタ５０のコンテンツに応答してメモリ転送を遂行し、フラッシュメモリ装置２８Ａ−２８Ｂから読み取られたデータをバッファ５２Ａ−５２Ｂに書き込むか、又はバッファ５２Ａ−５２Ｂから読み取られたデータをフラッシュメモリ装置２８Ａ−２８Ｂに書き込む。バッファ５２Ａ−５２Ｂは、その一方が充填される間に他方が排出されるようなピンポン形態で使用される。例えば、フラッシュメモリ装置２８Ａ−２８Ｂからの読み取りは、ＦＭＣ４８がバッファ５２Ａ−５２Ｂの一方を充填している間にその他方のバッファ５２Ａ−５２Ｂが、メモリ１２へのＤＭＡ動作を遂行しているＣＤＭＡコントローラ２０により排出されることを含む。フラッシュメモリ装置２８Ａ−２８Ｂへの書き込みは、ＣＤＭＡコントローラ２０がバッファ５２Ａ−５２Ｂの一方にデータを充填している間にＦＭＣ４８が他方のバッファ５２Ａ−５２Ｂを排出することを含む。ＥＣＣユニット５４は、フラッシュメモリ装置２８Ａ−２８Ｂに書き込むためのＥＣＣデータを発生し、そしてフラッシュメモリ装置２８Ａ−２８Ｂからの読み取りについてＥＣＣデータをチェックする。
【００４３】
図３は、ＣＤＭＡコントローラ２０からＰＩＯ動作を受け取るのに応答して行われるＦＭＩコントロール回路４２の一実施形態の動作を示すフローチャートである。理解を容易にするためにブロックが特定の順序で示されているが、他の順序を使用してもよい。ブロックは、ＦＭＩコントロール回路４２の組み合わせロジックにおいて並列に遂行されてもよい。例えば、図３に示す判断ブロックは、独立したものであり、並列に遂行されてもよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として、複数のクロックサイクルにわたりパイプライン化される。ＦＭＩコントロール回路は、図３に示す動作を実施するように構成される。
【００４４】
ＰＩＯ書き込みがＬＰコマンドＦＩＦＯ４０にアドレスされる場合には（判断ブロック６０、「イエス」岐路）、ＦＭＩコントロール回路４２は、ＬＰコマンドＦＩＦＯ４０の次のエントリーをＰＩＯ書き込みからのデータで更新するように構成される（ブロック６２）。即ち、ＰＩＯ書き込みからのデータがＬＰコマンドＦＩＦＯ４０の末尾に添付される。上述したように、この実施形態のＰＩＯデータは、コマンド及びイールドビットである。ＰＩＯ書き込みがＨＰコマンドＦＩＦＯ４１にアドレスされる場合には（判断ブロック６１、「イエス」岐路）、ＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４１の次のエントリーをＰＩＯ書き込みからのデータで更新するように構成される（ブロック６３）。即ち、ＰＩＯ書き込みからのデータがＨＰコマンドＦＩＦＯ４１の末尾に添付される。上述したように、この実施形態のＰＩＯデータは、コマンドである。ＰＩＯ書き込みがマクロメモリ４４にアドレスされる場合には（判断ブロック６４、「イエス」岐路）、ＦＭＩコントロール回路４２は、マクロメモリ４４におけるアドレスされたエントリーをＰＩＯ書き込みからのデータで更新するように構成される（ブロック６６）。ＰＩＯ書き込みがオペランドＦＩＦＯ４６にアドレスされる場合には（判断ブロック６８、「イエス」岐路）、ＦＭＩコントロール回路４２は、オペランドＦＩＦＯ４６における次のエントリーをＰＩＯ書き込みからのデータで更新するように構成される（ブロック７０）。即ち、ＰＩＯ書き込みからのデータがオペランドＦＩＦＯ４６の末尾に添付される。ＰＩＯ書き込みがＦＭＣコントロールレジスタ５０内のレジスタ（又は種々の実施形態ではフラッシュメモリインターフェイスユニット３０における他のレジスタ）にアドレスされる場合には（判断ブロック７２、「イエス」岐路）、ＦＭＩコントロール回路４２は、アドレスレジスタを更新するように構成される（ブロック７４）。
【００４５】
図４は、フラッシュメモリインターフェイスユニット３０、特に、ＦＭＩコントロール回路４２の一実施形態によりサポートされる規範的なコマンドセットを示すテーブルである。他の実施形態は、図４に示すコマンドのサブセット、コマンド及び他のコマンドのサブセット、及び／又はコマンド及び他のコマンドのスーパーセットを含めて、コマンドの他のセットをサポートする。このテーブルは、各コマンドを示す「コマンド」欄、所与のコマンドに対するオペランドを示す「オペランド」欄、及びコマンドにより占有されるコマンドＦＩＦＯ４０又は４１におけるワードの数を示す「ワード」欄を含む。
【００４６】
コマンドのフォーマットは、実施形態ごとに変化する。例えば、一実施形態では、各コマンドは、コマンドセット内のコマンドを識別するｏｐｃｏｄｅバイトを含む（即ち、テーブル７６における各エントリーは、異なるｏｐｃｏｄｅエンコーディングを経て識別される）。コマンドを形成するワード（１つ又は複数）内の残りのバイトは、コマンドに対するオペランドを指定するのに使用される。コマンドは、種々の実施形態において、コマンドＦＩＦＯ４０又は４１或いはマクロメモリ４４に記憶される。
【００４７】
アドレスコマンド（テーブル７６のａｄｄｒ０ないしａｄｄｒｅ７）は、フラッシュメモリ装置２８Ａ−２８Ｂへのインターフェイス（より簡潔に、フラッシュメモリインターフェイスと称される）にアドレスバイトを発生するのに使用される。「ａｄｄｒ」の後の数字は、フラッシュメモリインターフェイスのアドレスのバイト０でスタートして、送信されるアドレスバイトの数を指示する。ＦＭＩコントロール回路４２は、一実施形態において、次のコマンドを実行する前にアドレスバイトが送信されるまで休止するように構成される。ａｄｄｒＸコマンドは、一実施形態において次のＦＭＣコントロールレジスタ５０、即ち１つ以上のアドレスレジスタをアドレスバイトでプログラミングし、そして１つ以上のレジスタに転送数及び読み取り／書き込みモードをプログラミングするのと同等である。読み取り／書き込みモードに応答して、ＦＭＣ４８は、フラッシュメモリインターフェイスを経てアドレスバイトを送信し、ＦＭＣコントロールレジスタ５０内の状態レジスタにおけるアドレス終了割り込みを信号する。更に、ａｄｄｒＸコマンドは、状態レジスタにおけるアドレス終了割り込みを待機しそしてクリアすることを更に含む。ａｄｄｒ０コマンドは、そのアドレスレジスタにおけるａｄｄｒ１ないしａｄｄｒ７コマンドとは異なり、そしてアドレス転送数レジスタは、プログラムされない。むしろ、これらのレジスタは、以下に述べるｌｏａｄ＿ｎｅｘｔ＿ｗｏｒｄ又はｌｏａｄ＿ｆｒｏｍ＿ｆｉｆｏコマンドのような他のコマンドを使用して事前にプログラムされる。
【００４８】
ｃｍｄコマンドは、フラッシュメモリインターフェイスを経てフラッシュメモリインターフェイスコマンドを送出するのに使用される。一実施形態において、フラッシュメモリインターフェイスコマンドは１バイトである。従って、ｃｍｄコマンドのオペランドは、フラッシュメモリインターフェイスを経て送信されるコマンドバイトである。ＦＭＩコントロール回路４２は、フラッシュメモリインターフェイスにおいてｃｍｄコマンドが完了するまで休止するように構成される。ｃｍｄコマンドは、ＦＭＣコントロールレジスタ５０のコマンドレジスタをコマンドバイトでプログラミングし、別のＦＭＣコントロールレジスタ５０においてコマンドモードビットをセットし、そしてＦＭＣコントロールレジスタ内の状態レジスタにおいてｃｍｄ終了割り込みを待機し及びクリアすることと同等である。コマンドモードビットをセットするのに応答して、ＦＭＣ４８は、フラッシュメモリインターフェイスを経てコマンドバイトを送信するように構成され、そして状態レジスタにｃｍｄ終了割り込みを書き込む。
【００４９】
ｅｎａｂｌｅ＿ｃｈｉｐコマンドは、ＦＭＣコントロールレジスタ５０のチップイネーブルレジスタに書き込みするのに使用され、ＦＭＣ４８がチップイネーブルオペランドに基づいてフラッシュメモリインターフェイスにおいてチップイネーブル信号を駆動するようにさせる。
【００５０】
ｘｆｅｒ＿ｐａｇｅコマンドは、フラッシュメモリ装置２８Ａ−２８Ｂへの／からのページ転送を開始するのに使用される。ｘｆｅｒ＿ｐａｇｅコマンドに応答して、ＦＭＩコントロール回路４２は、ＦＭＣコントロールレジスタ５０においてスタートビットをセットし、そして別のＦＭＣコントロールレジスタ５０においてページ終了割り込みビットを待機し及びクリアするように構成される。スタートビットに応答して、ＦＭＣ４８は、特定のページ転送を遂行し、そして完了時にページ終了割り込みをセットするように構成される。
【００５１】
ＦＭＩコントロール回路４２により種々の同期コマンドがサポートされる。一般的に、同期コマンドは、ＦＭＩコントロール回路４２が監視すべき事象を指定するのに使用され、そして次のコマンドの実行の前にＦＭＩコントロール回路４２が事象の発生を待機する（即ち、ＦＭＩコントロール回路４２が事象を検出するまで待機する）ようにさせる。従って、同期コマンドは、コマンドのシーケンスを事前にプログラムできるようにし、又、同期コマンドは、正しいタイミングを保証する上で助けとなる。例えば、複数ページ転送を事前にプログラムし、そして同期コマンドを使用して、次のページに対するＦＭＣコントロールレジスタ５０のプログラミングを、レジスタが現在ページに対してもはや必要でなくなるまで（例えば、ページからの最後のデータが読み取りのためにバッファ５２Ａ−５２Ｂへロードされた後）遅延することができる。
【００５２】
図４の実施形態では、同期コマンドは、ｗａｉｔ＿ｆｏｒ＿ｒｄｙ、休止、ｔｉｍｅｄ＿ｗａｉｔ、及びｗａｉｔ＿ｆｏｒ＿ｉｎｔを含む。ｗａｉｔ＿ｆｏｒ＿ｒｄｙコマンドは、ページ転送中にフラッシュメモリ装置２８Ａ−２８Ｂの状態を監視するのに使用される。ｗａｉｔ＿ｆｏｒ＿ｒｄｙコマンドは、ＦＭＣコントロールレジスタ５０の状態レジスタにおける特定の「終了(done)」割り込み（例えば、ページ終了）を待機し及びクリアし、状態レジスタ内の状態バイトをマスクオペランドでマスクし、そしてそのマスクされた状態バイトを条件オペランドと比較することを含む。マスクされた状態バイトが条件オペランドに一致する場合には、ＦＭＩコントロール回路４２は、次のコマンドを遂行するように構成される。さもなければ、ＦＭＩコントロール回路４２は、割り込みを信号し（例えば、種々の実施形態では、ＩＯＰ３２又はプロセッサ２２へ）、そしてＩＯＰ３２／プロセッサ２２が割り込みにサービスするまで付加的なコマンドの実行を停止する。
【００５３】
ｐａｕｓｅコマンドは、ＦＭＩコントロール回路４２によりコマンドの実行を休止するように使用される。ＦＭＩコントロール回路４２は、ＩＯＰ３２／プロセッサ２２で実行されるソフトウェアがＦＭＣコントロールレジスタ５０の１つに指定のイネーブルビットを書き込むことにより特別に非休止とされるまでコマンドの実行を休止する。
【００５４】
ＦＭＩコントロール回路４２は、休止を行いそしてｔｉｍｅｄ＿ｗａｉｔコマンドを経てある数のクロックサイクルの後に再開を行うように構成される。クロックサイクルの数は、ｔｉｍｅｄ＿ｗａｉｔコマンドのオペランドとして指定される。ある実施形態では、ｔｉｍｅｄ＿ｗａｉｔコマンドは、フラッシュメモリインターフェイスユニット３０を低速化するのに使用される。というのは、コマンドＦＩＦＯ４０、マクロメモリ４４、及びオペランドＦＩＦＯ４６を使用して可能となる性能が、フラッシュメモリ装置２８Ａ−２８Ｂによりアクティビティが遂行されるレートを越えるからである。
【００５５】
ｗａｉｔ＿ｆｏｒ＿ｉｎｔコマンドは、ＦＭＩコントロール回路４２に指定割り込み値を待機させるように使用される。オペランドは、「ビット」オペランドを使用して、待機すべき割り込み（ｉｒｑ）及び待機すべきｉｒｑビットの状態（例えば、セット又はクリア）を指定する。
【００５６】
ｓｅｎｄ＿ｉｎｔｅｒｒｕｐｔコマンドは、指定の割り込みをＩＯＰ３２又はプロセッサ２２へ送信するのに使用される。ｓｅｎｄ＿ｉｎｔｅｒｒｕｐｔコマンドのオペランドは、ＦＭＣコントロールレジスタ５０の割り込みコードレジスタに書き込むべき割り込みコードを指定し、これは、割り込みを送るようにさせるものである。
【００５７】
ｌｏａｄ＿ｎｅｘｔ＿ｗｏｒｄ及びｌｏａｄ＿ｆｒｏｍ＿ｆｉｆｏコマンドは、ＦＭＣコントロールレジスタ５０の種々のレジスタをプログラムするのに使用される。これらコマンドのオペランドの１つは、書き込まれるコントロールレジスタのレジスタアドレスである。ｌｏａｄ＿ｎｅｘｔ＿ｗｏｒｄコマンドに応答して、ＦＭＩコントロール回路４２は、コマンドＦＩＦＯ４０から次のワードを読み取り、そしてそのワードをアドレスされたレジスタに書き込む。ｌｏａｄ＿ｆｒｏｍ＿ｆｉｆｏコマンドに応答して、ＦＭＩコントロール回路４２は、オペランドＦＩＦＩ４６の頭部においてワードを読み取り、そしてそのワードをアドレスされたレジスタに書き込むように構成される。
【００５８】
ｍａｃｒｏコマンドは、ＦＭＩコントロール回路４２がマクロメモリ４４からコマンドを読み取るようにさせるのに使用される。ｍａｃｒｏコマンドは、アドレスオペランド、長さオペランド、及びループカウントオペランドを含む。アドレスは、マクロメモリ４４から読み取られるべき第１のワードを識別し、そして長さは、ｍａｃｒｏの長さを識別する（例えば、コマンドの数又はワードの数に関して）。一実施形態では、長さは、ワードの数である。ループカウントは、実行されるべきｍａｃｒｏの繰り返し数を示す。一実施形態では、ループカウントオペランドは、繰り返し数より１つ小さい（例えば、０のループカウントは、１回の繰り返しであり、１のループカウントは、２回の繰り返しであり、等々）。ｍａｃｒｏが完了すると、次のコマンドＦＩＦＯ４２が読み取られる（即ち、ｍａｃｒｏにはリターンコマンドがない）。
【００５９】
ｐｏｌｌコマンドは、ＦＭＣコントロールレジスタ５０内の任意のレジスタを指定の値に対してポーリングする（マスクフィールドを使用してレジスタから読み取った値をマスクした後に）。ＦＭＩコントロール回路４２は、指定値が検出されるまでレジスタをポーリングし、次いで、次のコマンドへ進む。
【００６０】
上述したように、ＦＭＩコントロール回路４２は、あるコマンドを遂行する一部分としてＦＭＣコントロールレジスタ５０内の１つ以上の状態レジスタに記録された種々の割り込みを監視する。ＦＭＩコントロール回路４２は、割り込みをクリアし、そしてそれに対応するコマンドを完了する。コマンドＦＩＦＯ４０にコマンドがない場合には、割り込みがＩＯＰ３２／プロセッサ２２へ送られる（もしイネーブルされていれば）。従って、ＦＭＣコントロールレジスタ５０へのＰＩＯ書き込み動作及びＩＯＰ３２／プロセッサ２２への割り込みは、フラッシュメモリ装置２８Ａ−２８Ｂへの／からのメモリ転送を遂行する別のメカニズムである。
【００６１】
図５は、ＬＰコマンドキュー４０からのコマンドを処理するためのＦＭＩコントロール回路４２の一実施形態の動作を示すフローチャートである。理解を容易にするためにブロックが特定の順序で示されているが、他の順序を使用してもよい。ブロックは、ＦＭＩコントロール回路４２の組み合わせロジックにおいて並列に遂行されてもよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として、複数のクロックサイクルにわたりパイプライン化される。ＦＭＩコントロール回路４２は、図５に示す動作を実施するように構成される。
【００６２】
ＦＭＩコントロール回路４２は、ＬＰコマンドＦＩＦＯ４０からコマンドを読み取るように構成される（ブロック８０）。コマンドがマクロコマンドでない場合には（判断ブロック８２、「ノー」岐路）、ＦＭＩコントロール回路４２は、コマンドを実行するように構成される（ブロック８４）。コマンドが完了し、イールド（Ｙ）ビットがセットされ、そしてＨＰコマンドキュー４１に有効なコマンドがある場合には（判断ブロック８５、「イエス」岐路）、ＦＭＩコントロール回路４２は、レジスタ５１にＨＰＥビットをセットし、そしてＨＰコマンド処理（例えば、図６）へ退出するように構成される（ブロック８７）。同様に、ある実施形態では、ＦＭＩコントロール回路４２は、（例えば、ソフトウェアがレジスタ５１に書き込みすることにより）ＨＰＥビットがセットされるのに応答してＨＰコマンド処理へ退出する（又は少なくとも低プライオリティ処理を中止する）ように構成される。さもなければ（判断ブロック８４、「ノー」岐路）、ＦＭＩコントロール回路４２は、マクロがその終了に到達したかどうか決定するのに使用されるワードカウントをチェックするように構成される。コマンドがマクロの一部分でない場合には、ワードカウントがゼロとなる（判断ブロック８６、「ノー」岐路）。ＦＭＩコントロール回路４２は、マクロコマンドに関連したループカウントをチェックするように構成される。コマンドがマクロの一部分でない場合には、ループカウントがゼロとなる（判断ブロック９５、「ノー」岐路）。ＦＭＩコントロール回路４２は、コマンドＦＩＦＯ４０に別の有効なコマンドがあるかどうか決定するように構成される（判断ブロック８８）。即ち、ＦＭＩコントロール回路４２は、コマンドＦＩＦＯ４０が空であるかどうか決定するように構成される。別の有効なコマンドがある場合には（判断ブロック８８、「イエス」岐路）、ＦＭＩコントロール回路４２は、次のコマンドを読み取って処理するように構成される。さもなければ、ＦＭＩコントロール回路４２のコマンド処理回路は、別の有効なコマンドがコマンドＦＩＦＯ４０に書き込まれるまでアイドル状態である（判断ブロック８８、「ノー」岐路）。
【００６３】
コマンドがマクロコマンドである場合には（判断ブロック８２、「イエス」岐路）、ＦＭＩコントロール回路４２は、ワードカウントをマクロコマンドの長さオペランドに初期化しそしてループカウントをマクロコマンドのループカウントオペランドに初期化するように構成される（ブロック９０）。又、ＦＭＩコントロール回路４２は、マクロメモリ４４からコマンドを読み取る（ブロック９２）。特に、このケースでは、ＦＭＩコントロール回路４２は、マクロコマンドのアドレスオペランドとして与えられたマクロメモリ４４内のアドレスから第１のワードを読み取る。ＦＭＩコントロール回路４２は、コマンドを実行するように構成され（ブロック８４）、そしてワードカウントをチェックするように構成される（このケースでは、Ｙビットがなく、従って、判断ブロック８５は、「ノー」岐路となる）。ワードカウントは、ゼロより大きく（判断ブロック８６、「イエス」岐路）、ＦＭＩコントロール回路４２は、ワードカウントをデクリメントしそしてマクロメモリ４４から次のコマンドを読み取るように構成される（例えば、アドレスをインクリメントすることにより）（ブロック９４及び９６）。ＦＭＩコントロール回路４２は、次のコマンドを処理するように構成される（図５のフローチャートの判断ブロック８２へ戻る）。ワードカウントがゼロである場合には（判断ブロック８６、「ノー」岐路）、ＦＭＩコントロール回路４２は、ループカウントをチェックするように構成される。ループカウントがゼロより大きい場合には（判断ブロック９５、「イエス」岐路）、マクロの別の繰り返しを行うべきである。ＦＭＩコントロール回路４２は、ループカウントをデクリメントし（ブロック９７）、ワードカウント及びマクロアドレスを再初期化し（ブロック９９）、そしてマクロメモリ４４から次のコマンド（即ち、マクロの第１コマンド）を読み取る（ブロック９６）。ワードカウント及びループカウントの両方がゼロである場合には（判断ブロック８６及び９５、「ノー」岐路）、マクロが完了し、そしてＦＭＩコントロール回路４２は、コマンドキュー４０における次の有効コマンドについてチェックする（判断ブロック８８）。
【００６４】
各コマンドがマクロコマンドについてチェックされるので、マクロコマンドもマクロメモリ４４に記憶されることに注意されたい。従って、マクロは、「ネスト化」されるが、実行されるべき最後のマクロは、コマンドＦＩＦＯ４０へ復帰し、従って、マクロが、それらをコールしたマクロに復帰しないという意味で、真のネスティングではない。
【００６５】
図６は、ＨＰコマンドキュー４１からのコマンドを処理するために行われるＦＭＩコントロール回路４２の一実施形態の動作を示すフローチャートである。即ち、図６に示された処理は、図５（ブロック８７）に関して上述したＬＰ処理を退出するのに応答して開始される。理解を容易にするためにブロックが特定の順序で示されているが、他の順序を使用してもよい。ブロックは、ＦＭＩコントロール回路４２の組み合わせロジックにおいて並列に遂行されてもよい。ブロック、ブロックの組み合わせ、及び／又はフローチャートは、全体として、複数のクロックサイクルにわたりパイプライン化される。ＦＭＩコントロール回路４２は、図６に示す動作を実施するように構成される。
【００６６】
ＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４０からコマンドを読み取るように構成される（ブロック１８０）。コマンドがマクロコマンドでない場合には（判断ブロック１８２、「ノー」岐路）、ＦＭＩコントロール回路４２は、コマンドを実行するように構成される（ブロック１８４）。コマンドが完了すると、ＦＭＩコントロール回路４２は、マクロがその終了に到達したかどうか決定するのに使用されるワードカウントをチェックするように構成される。コマンドがマクロの一部分でない場合には、ワードカウントがゼロとなる（判断ブロック１８６、「ノー」岐路）。ＦＭＩコントロール回路４２は、マクロコマンドに関連したループカウントをチェックするように構成される。コマンドがマクロの一部分でない場合には、ループカウントがゼロとなる（判断ブロック１９５、「ノー」岐路）。ＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４１に別の有効なコマンドがあるかどうか決定するように構成される（判断ブロック１８８）。即ち、ＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４０が空であるかどうか決定するように構成される。別の有効なコマンドがある場合には（判断ブロック１８８、「イエス」岐路）、ＦＭＩコントロール回路４２は、次のコマンドを読み取って処理するように構成される。さもなければ、ＦＭＩコントロール回路４２は、ＨＰＥビットがクリアであるかどうかチェックする（判断ブロック１９８）。もしそうであれば、ＦＭＩコントロール回路４２は、ＬＰコマンド処理に復帰する（判断ブロック１９８、「イエス」岐路）。もしそうでなければ（判断ブロック１９８、「ノー」岐路）、ＦＭＩコントロール回路４２は、有効なコマンドがＨＰコマンドＦＩＦＯ４１に現れるか又はＨＰＥビットがクリアされるまでアイドル状態である。
【００６７】
コマンドがマクロコマンドである場合には（判断ブロック１８２、「イエス」岐路）、ＦＭＩコントロール回路４２は、ワードカウントをマクロコマンドの長さオペランドに初期化しそしてループカウントをマクロコマンドのループカウントオペランドに初期化するように構成される（ブロック１９０）。又、ＦＭＩコントロール回路４２は、マクロメモリ４４からコマンドを読み取る（ブロック１９２）。特に、このケースでは、ＦＭＩコントロール回路４２は、マクロコマンドのアドレスオペランドとして与えられたマクロメモリ４４内のアドレスから第１のワードを読み取る。ＦＭＩコントロール回路４２は、コマンドを実行するように構成され（ブロック１８４）、そしてワードカウントをチェックするように構成される。ワードカウントは、ゼロより大きく（判断ブロック１８６、「イエス」岐路）、ＦＭＩコントロール回路４２は、ワードカウントをデクリメントしそしてマクロメモリ４４から次のコマンドを読み取るように構成される（例えば、アドレスをインクリメントすることにより）（ブロック１９４及び１９６）。ＦＭＩコントロール回路４２は、次のコマンドを処理するように構成される（図６のフローチャートの判断ブロック１８２へ戻る）。ワードカウントがゼロである場合には（判断ブロック１８６、「ノー」岐路）、ＦＭＩコントロール回路４２は、ループカウントをチェックするように構成される。ループカウントがゼロより大きい場合には（判断ブロック１９５、「イエス」岐路）、マクロの別の繰り返しを行うべきである。ＦＭＩコントロール回路４２は、ループカウントをデクリメントし（ブロック１９７）、ワードカウント及びマクロアドレスを再初期化し（ブロック１９９）、そしてマクロメモリ４４から次のコマンド（即ち、マクロの第１コマンド）を読み取る（ブロック１９６）。ワードカウント及びループカウントの両方がゼロである場合には（判断ブロック１８６及び１９５、「ノー」岐路）、マクロが完了し、そしてＦＭＩコントロール回路４２は、ＨＰコマンドＦＩＦＯ４１における次の有効コマンドについてチェックする（判断ブロック１８８）。
【００６８】
図７は、マクロを使用してフラッシュメモリ装置２８Ａ−２８Ｂへの複数ページ書き込みを遂行する一例のブロック図である。３つのコマンド区分を含むマクロメモリ４４のコンテンツが示されている。マクロメモリアドレス０とＮ−１との間に、手前のページへの書き込みを完了するためのＮワードのマクロ１００が記憶される。マクロメモリアドレスＮとＮ＋Ｍ−１との間に、次のページへの書き込みをスタートするためのＭワードのマクロ１０２が記憶される。マクロメモリアドレスＮ＋ＭとＮ＋Ｍ＋Ｐ−１との間に、メモリへの最後のページの書き込みを終了するためのＰワードのマクロ１０４が記憶される。
【００６９】
ＬＰコマンドＦＩＦＯ４０内のコマンドのセットが図７に示されており、ＬＰコマンドＦＩＦＯ４０の最上部にはＦＩＦＯの頭部があり、そしてその後のＦＩＦＯのコマンドが図７に示すようにＬＰコマンドＦＩＦＯ４０を下る順序で続いている。第１のコマンドは、マクロＮ、Ｍである。このコマンドは、ワードＮで始めて、マクロ１０４をコールし、Ｍ個のワード（即ち、図６に示すマクロ１０２）を実行する。従って、第１のページへの書き込みが初期化される。その後のページ書き込みは、マクロ０、Ｎ＋Ｍコマンドを使用して実行される。これらのコマンドは、マクロ１００及びマクロ１０２を実行させるものである。手前のページへの書き込みが完了し（マクロ１００）、次のページへの書き込みがスタートされる（マクロ１０２）。マクロ０、Ｎ＋Ｍ＋Ｐコマンドを使用して最後のページが書き込まれる。このコマンドは、マクロ１００、１０２、及び１０４を実行させ、第２ないし最後のページへの書き込みを完了し（マクロ１００）、最後のページへの書き込みを実行し（マクロ１０２）、そして最後のページへの書き込みを完了してフラッシュメモリ装置２８Ａ−２８Ｂを閉じる（マクロ１０４）。この例では、各マクロコマンドのループカウントオペランドがゼロである（１回の繰り返し）。しかしながら、図７の第１の例の下に示す別の例では、ループカウントオペランドを使用して、コマンドキュー内のコマンドをより効率的なものとすることができる。第１ページに対するマクロＮ、Ｍコマンド、及び最後のページに対するマクロ０、Ｎ＋Ｍ＋Ｐコマンドのループカウントは、依然ゼロであり、その繰り返しを指定する。しかしながら、中間ページの書き込みは、全て、ループカウントオペランドをページカウント（Ｃ）−３に等しくして１つのマクロコマンド（マクロ０、Ｎ＋Ｍ）を使用して達成される。最初と最後のページ、並びにこの実施形態ではループカウントオペランドが希望の繰り返し数より１つ小さいことを考慮して、ループカウントは、Ｃ−３となる。マクロ１００、１０２及び１０４が示すように、マクロメモリ４４内にマクロを入念に配置することにより、高密度で且つ効率的なマクロが生じる。マクロは、ｌｏａｄ＿ｆｒｏｍ＿ｆｉｆｏコマンドを使用してページ書き込みオペランドごとに異なるオペランドを使用することができ、そして各ページのオペランドは、ＬＰコマンドＦＩＦＯ４０内のコマンドを開始する前にオペランドＦＩＦＯ４６へロードされる。
【００７０】
マクロ１０２に含まれたコマンドは、書き込まれるべきアドレス、チップイネーブル、等を確立する。マクロ１００に含まれたコマンドは、手前のページをメモリへ転送するためのｘｆｅｒ＿ｐａｇｅ、及びエラーをチェックして次のページ転送を同期させるためのコマンド（マクロ１０２を経て初期化される）を含む。マクロ１０４は、最終的なｘｆｅｒ＿ｐａｇｅコマンド、及びエラーをチェックして書き込みのターゲットであったフラッシュメモリ装置を閉じ、アクティブページ／領域をデアクチベートし、及び／又はフラッシュメモリ装置に対して指定される他の動作を遂行するためのコマンドを含む。
【００７１】
図８は、ＩＯＰ３２及び／又はプロセッサ２２により実行されるべきフラッシュコードの動作を示すフローチャートである。理解を容易にするためにブロックが特定の順序で示されているが、他の順序を使用してもよい。フラッシュコードは、ＩＯＰ３２及び／又はプロセッサ２２によって実行されたときに、図８に示す動作を実施するインストラクションを含む。
【００７２】
フラッシュコードは、集積回路１０の動作中にいつでも実行することができる。例えば、フラッシュコードは、フラッシュメモリインターフェイスユニット３０を初期化するために実行される。又、フラッシュコードは、フラッシュメモリ３０がアイドル状態であるが、マクロメモリ４４内のマクロ等を再構成するためにアクセスされる任意の時間に実行することもできる。
【００７３】
フラッシュコードは、希望のマクロをマクロメモリ４４にダウンロードする（ブロック１１０）。マクロメモリ４４に既に記憶されているマクロが希望のマクロであるか、又は希望のマクロがない場合には、ブロック１１０をスキップする。又、フラッシュコードは、コマンド又はマクロにより使用されるべきオペランドもダウンロードし（ブロック１１２）、そしてダウンロードすべきオペランドがない場合にはブロック１１２をスキップする。フラッシュコードは、実行すべきコマンドをＬＰコマンドＦＩＦＯ４０にダウンロードし（ブロック１１４）、そしてフラッシュメモリインターフェイスユニット３０においてコマンド実行を開始する。コマンドをＬＰコマンドＦＩＦＯ５０にダウンロードすることは、動作の一部分の完了を表わすコマンドに対して高プライオリティコマンドのためのコマンドの割り込みを許可できるようにＹビットをセットし、そして他のＹビットをクリアすることを含む。付加的なコマンドをダウンロードする準備ができ（判断ブロック１１６、「イエス」岐路）、そしてそれらのコマンドが、フラッシュメモリインターフェイスユニット３０により現在実行されているコマンドよりプライオリティが高い（判断ブロック１２０、「イエス」岐路）場合には、フラッシュコードが付加的なコマンドをＨＰコマンドＦＩＦＯ４１にダウンロードする（ブロック１２２）。さもなければ（判断ブロック１２０、「ノー」岐路）、フラッシュコードは、コマンドをＬＰコマンドＦＩＦＯ４０にダウンロードする（ブロック１１４）。新たなオペランド又はマクロをダウンロードする準備ができた場合には（判断ブロック１１８、「イエス」岐路）、フラッシュコードは、ブロック１１０及び／又は１１２に戻ってそれらをダウンロードする。更に、ＨＰコマンドが完了すると、フラッシュコードは、レジスタ５１におけるＨＰＥビットをリセットする（図８には示さず）。
【００７４】
システム及びコンピュータアクセス可能な記憶媒体
図９は、システム１５０の一実施形態のブロック図である。ここに示す実施形態では、システム１５０は、１つ以上の周辺装置１５４及び外部メモリ１５８に結合された集積回路１０（図１）の少なくとも１つの例を含む。外部メモリ１５８は、メモリ１２及び／又はフラッシュメモリ装置２８Ａ−２８Ｂを含む。電源１５６も設けられ、これは、集積回路１０に供給電圧を供給すると共に、メモリ１５８及び／又は周辺装置１５４に１つ以上の供給電圧を供給する。ある実施形態では、集積回路１０の２つ以上の例が含まれてもよい（そして２つ以上の外部メモリ１５８も含まれてもよい）。
【００７５】
周辺装置１５４は、システム１５０の形式に基づいて望ましい回路を含む。例えば、一実施形態では、システム１５０は、移動装置（例えば、パーソナルデジタルアシスタント（ＰＤＡ）、スマートホン、等）であり、そして周辺装置１５４は、ｗｉｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、セルラー、グローバルポジショニングシステム、等の種々の形式のワイヤレス通信のための装置を含む。又、周辺装置１５４は、ＲＡＭ記憶装置、ソリッドステート記憶装置、又はディスク記憶装置を含めて、付加的な記憶装置も含む。又、周辺装置１５４は、タッチディスプレイスクリーン又はマルチタッチディスプレイスクリーンを含むディスプレイスクリーン、キーボード又は他の入力装置、マイクロホン、スピーカ、等のユーザインターフェイス装置を含む。他の実施形態では、システム１５０は、任意の形式のコンピューティングシステム（例えば、デスクトップパーソナルコンピュータ、ラップトップ、ワークステーション、ネットトップ、等）である。
【００７６】
外部メモリ１５８は、任意の形式のメモリを含む。例えば、外部メモリ１５８は、ＳＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）例えば、同期ＤＲＡＭ（ＳＤＲＡＭ）、倍データレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、等）ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＤＲＡＭ、等を含む。外部メモリ１５８は、メモリ装置がマウントされる１つ以上のメモリモジュール、例えば、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）、等を含む。
【００７７】
図１０は、コンピュータアクセス可能な記憶媒体２００のブロック図である。一般的に述べると、コンピュータアクセス可能な記憶媒体は、コンピュータにインストラクション及び／又はデータを与えるために使用中にコンピュータによりアクセスできる記憶媒体を含む。例えば、コンピュータアクセス可能な記憶媒体は、磁気又は光学媒体のような記憶媒体、例えば、ディスク（固定又は除去可能な）、テープ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、又はＢｌｕ−Ｒａｙを含む。記憶媒体は、更に、揮発性又は不揮発性メモリ媒体、例えば、ＲＡＭ（例えば、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、Ｒａｍｂｕｓ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、等）、ＲＯＭ、フラッシュメモリ、ユニバーサルシリアルバス（ＵＳＢ）インターフェイスやフラッシュメモリインターフェイス（ＦＭＩ）やシリアル周辺インターフェイス（ＳＰＩ）等の周辺インターフェイスを経てアクセスできる不揮発性メモリ（例えば、フラッシュメモリ）を含む。記憶媒体は、マイクロエレクトロメカニカルシステム（ＭＥＭＳ）を含む。図１０のコンピュータアクセス可能な記憶媒体２００は、ＩＯＰ３２及び／又はプロセッサ２２によって実行できるコードを含むフラッシュコード２０２を記憶する。フラッシュコード２０２は、実行時に、図８に関して上述した動作を実施するインストラクションを含む。一般的に、コンピュータアクセス可能な記憶媒体２００は、実行時に図８に示す動作の一部分又は全部を実施するインストラクションのセットを記憶する。更に、コンピュータアクセス可能な記憶媒体２００は、マクロメモリ４４へダウンロードされる１つ以上のマクロ２０４、オペランドＦＩＦＯ３６へダウンロードされる１つ以上のオペランド、及び／又はコマンドＦＩＦＯ４０へダウンロードされる１つ以上のコマンドを記憶する。キャリア媒体は、コンピュータアクセス可能な記憶媒体、並びにワイヤード又はワイヤレス送信のような送信媒体を含む。
【００７８】
当業者であれば、前記開示を完全に理解すれば、多数の修正や変更が明らかとなろう。そのような修正や変更は、全て、特許請求の範囲内に包含されるものとする。
【符号の説明】
【００７９】
１０：集積回路
１２：外部メモリ
１４：メモリコントローラ
１６：相互接続ファブリック
１８Ａ−１８Ｂ：周辺コンポーネント
２０：中央ＤＭＡ（ＣＤＭＡ）コントローラ
２２：プロセッサ
２４：レベル１（Ｌ１）キャッシュ
２６：レベル２（Ｌ２）キャッシュ
２８Ａ−２８Ｂ：フラッシュメモリ
３０：フラッシュメモリインターフェイスユニット
４０：低プライオリティ（ＬＰ）コマンドＦＩＦＯ
４１：高プライオリティ（ＨＰ）コマンドキュー
４２：フラッシュメモリインターフェイス（ＦＭＩ）コントロール回路
４４：マクロメモリ
４６：オペランドＦＩＦＯ
４８：フラッシュメモリコントローラ（ＦＭＣ）
５０：ＦＭＣコントロールレジスタ
５１：レジスタ
５２Ａ−５２Ｂ：データバッファ
５４：エラーチェック／修正（ＥＣＣ）ユニット
【図１】
0005499124.tif 000002
【図２】
0005499124.tif 000003
【図３】
0005499124.tif 000004
【図４】
0005499124.tif 000005
【図５】
0005499124.tif 000006
【図６】
0005499124.tif 000007
【図７】
0005499124.tif 000008
【図８】
0005499124.tif 000009
【図９】
0005499124.tif 000010
【図１０】
0005499124.tif 000011