(57)【特許請求の範囲】
【請求項１】
バスによりメモリに接続されているプロセッサを搭載したシステムのそのバスに接続されたフラッシュメモリシステムにおいて、
前記フラッシュメモリシステムにより実行されるコマンドを受け取るユーザインターフェイスであって、実行している現在コマンドを含め１つないし複数のコマンドを格納するコマンド待ち行列を有するユーザインターフェイスと、
実行すべきコマンドを受け取るために前記ユーザインターフェイスに接続され、かつ前記フラッシュメモリシステム内のフラッシュメモリアレイに対する読取り、消去、プログラムを行うために電源を制御するアレイコントローラと、
前記アレイコントローラに接続されて当該アレイコントローラの状態を記憶する複数のレジスタと、
設定されるとコマンドの実行中に割込みの発行を可能にする割込み状態ビットとからなり、
前記割込み状態ビットが設定されており、かつ前記コマンド待ち行列が現在実行している消去コマンドと実行すべき次のコマンドを含んでいる場合、前記ユーザインターフェイスは前記次のコマンドを実行させるための割込み命令をアレイコントローラに出し、
該割り込み命令を受けた前記アレイコントローラは
前記フラッシュメモリアレイの実行中の消去コマンドによる消去動作を中断させ、
前記電源を制御して前記消去のための電圧を低下させ、
当該アレイコントローラの前記消去コマンド実行状態を前記レジスタに保存し、
前記割込み命令による次のコマンドを実行し、
前記レジスタに保存していた状態をリストアして前記アレイコントローラを消去コマンド実行状態に回復させ、
前記中断中の消去動作を再開させるよう前記フラッシュメモリアレイを制御するよう構成され、
さらに、前記ユーザインターフェースからの割り込み命令は安全な戻し地点を引数として有しており、前記次のコマンドの実行が完了した際に該引数が示す戻し地点から前記消去コマンドの実行を再開させるよう構成されており、さらにその安全な割り込み戻し地点は、前記アレイコントローラにより、前記消去動作中に更新制御されて該割り込み命令による処理が開始された地点と異なって設定されることを許容するよう構成され、これにより前記フラッシュメモリアレイを変改することなしに割り込み処理を行うフラッシュメモリシステム。
【請求項２】
バスによりメモリに接続されているプロセッサを搭載したシステムのそのバスに接続されたフラッシュメモリシステムにおいて、
データを記憶する複数のフラッシュセルからなるフラッシュメモリアレイと、
前記フラッシュメモリシステムにより実行されるコマンドを受け取るユーザインターフェイスであって、実行している現在コマンドを含め１つないし複数のコマンドを格納するコマンド待ち行列を有し、かつ実行したときにコマンドを行うコードの位置を識別するコマンドアドレスを生成するユーザインターフェイスと、
前記ユーザインターフェイスに接続されてコマンドアドレスを受け取るアレイコントローラであって、マイクロコントローラと、ユーザがプログラム可能なプログラムメモリとを有し、前記コマンドアドレスは前記マイクロコントローラが実行するプログラムメモリ内の前記コードの位置を識別し、前記マイクロコントローラはプログラムメモリ内の当該コードに従って前記フラッシュメモリアレイ上で書込み、消去または読取り動作を行うとともに、消去動作実行中の割り込み処理の制御を行うアレイコントローラと
からなり、
さらに前記アレイコントローラが前記消去動作実行中に割り込み処理を受けたときに、
該消去動作を中断させ、
ついで該割り込みによる処理を実行させるとともに、
その割り込みによる処理が完了したときに安全な割り込み戻し地点に割り込み戻しさせるよう制御するよう構成され、さらにその割り込み戻し地点が前記消去動作実行中に更新されて当該割り込みによる処理が開始された地点と異なる地点に前記安全な割り込み戻し地点が設定されることを許容するよう制御して
前記フラッシュメモリアレイを変改することなしに割り込み処理の制御を行うフラッシュメモリシステム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はフラッシュメモリに関し、特にフラッシュメモリ動作を制御する装置と方法に関する。
【０００２】
【従来の技術】
従来の不揮発性半導体メモリの１つのタイプにフラッシュ電気的消去、書込み可能読取り専用メモリ（「フラッシュ」）がある。フラッシュメモリは電気信号で書込み可能で、一旦書き込むとフラッシュメモリはそのデータが消去されるまでそれを保持する。消去後、フラッシュメモリには新しいコードないしデータを書き込むことができる。
【０００３】
フラッシュメモリは従来の電気的消去、書込み可能読取り専用メモリ（「ＥＥＰＲＯＭ］）とは消去に関して異なっている。従来のＥＥＰＲＯＭは一般に個々のバイトの消去制御にセレクトトランジスタを使用する。他方、フラッシュメモリは一般に単一のトランジスタセルではるかに高い密度を達成する。従来のフラッシュメモリの消去方法では、メモリアレイ内の全てのメモリセルのソースに高電圧を同時に供給し、それにより全アレイの消去をもたらしている。一般に論理１は、ビットセルのフローティングゲートに電子がほんのわずかしか（電子があれば）格納されないことを意味し、論理０は多くの電子がブロックセルのフローティングゲートに格納されていることを意味する。フラッシュメモリの消去により論理１が各々のビットセルに格納される。そのフラッシュメモリの各々の単一のビットセルは先に消去しなければ論理０から論理１に重ね書きすることはできない。しかしそのフラッシュメモリの各々の単一ブロックセルは、それが消去状態に固有の数の電子を含むフローティングゲートに単に電子を追加するだけであるので、論理１から論理０には重ね書きすることができる。
【０００４】
消去、書込み、妥当性検査過程は、それらのステップを行うのに必要な電圧の慎重な制御を要する。例えば従来のフラッシュメモリに、 256キロビットフラッシュメモリであるインテル社（カリフォルニア州サンタクララ）から市販されている28F256相補形金属酸化物半導体（ＣＭＯＳ）フラッシュメモリがある。フラッシュメモリを制御するため、メモリには電気的な消去と再書込みを管理するコマンドレジスタを含める。コマンドは消去のために、制御マイクロプロセッサから標準のマイクロプロセッサ書込みタイミングを用いて書き込まれる。コマンドレジスタの内容は、消去、書込み回路を制御する内部状態マシンへの入力としての役割をする。
【０００５】
【発明が解決しようとする課題】
フラッシュメモリの密度が増大したことで、フラッシュメモリを含むアプリケーションも増大した。それらのアプリケーションは劇的に変化し、しばしば異なる処理、制御メカニズムを必要とする。一般にアプリケーションはバスを通してフラッシュメモリに接続されているマイクロコントローラにより駆動する。しかしマイクロコントローラでのオーバーヘッドが大きいとフラッシュ処理のスループットが減少する。更にフラッシュメモリの適切な信頼できる動作を確保するため、消去手順は厳密に守らなければならない。従ってマイクロコントローラを用いてバス上でフラッシュメモリを制御することとマイクロコントローラを通してユーザとフラッシュメモリをインターフェイスすることは、例えばマイクロコントローラにより出されている制御信号を一時的に停止する割込みその他の動作により生じる時期を逸した制御信号によるフラッシュメモリの過剰消去により生じるフラッシュエラーをもたらす可能性が増大する。
【０００６】
さらに、フラッシュメモリでは一般に一時に１つの動作しか行うことができない。従って低優先度の動作を実行していて高優先度の動作を実行しようとする場合、高優先度動作はその動作を行う前に低優先度動作が完了するのを待たなければならない。
更にフラッシュメモリのコストが低下すると共にフラッシュメモリを利用したアプリケーションが増大している。従って様々なアプリケーションに対して柔軟性があり容易に適応できるフラッシュメモリとインターフェイスを提供することが望ましい。
従って本発明の目的は、本発明の装置と方法によりアプリケーションで使用する際に劇的な柔軟性を提供し、行う動作の全体的なスループットを増大するフラッシュメモリを制御するオンチップメカニズムを提供することである。本発明の別の目的は、マイクロコントローラのオーバーヘッドを最小にし、例えばフラッシュアレイの過剰消去により生じるエラーの危険性をなくすことである。
【０００７】
【課題を解決するための手段】
本発明の装置は互いに共に作動して全機能性とフラッシュアレイの制御を提供するいくつかの主要要素から構成する。
メモリアレイと同一構成部分にある回路は、例えばマイクロコントローラからバスを通してアドレス、コマンド、データ情報を受け取るユーザインターフェイスからなり、コマンドをアレイコントローラに出し、アレイコントローラはユーザインターフェイスから出されたコマンドで識別される消去、書込み動作を行う。アレイコントローラはフラッシュアレイと特定の動作を行うのに必要な電圧をユーザインターフェイスとは独立した形で制御する。従ってユーザインターフェイスは様々なユーザコマンドを受け取り、アレイコントローラに実行するために送るコマンドシーケンスを制御でき、大きな柔軟性が達成できる。命令パイプライン化が可能で最大のスループットがもたらされる。更にアレイコントローラはプログラムメモリに格納されたコードに基づいて動作を行う。従ってメモリ内に格納されたマイクロコードを単に変更するだけでハードウエアを変更することなしに新しいコマンドを追加したり古いコマンドを変えることができる。
【０００８】
回路は更にアレイコントローラにより実行されるコマンドのコンテキスト切替えを行う能力も有している。第２の過程が完了すると実行の所定の「安全」時点で実行を被割込み過程に戻し、それによりアレイ内のデータが変改されないように現在実行している過程の別の過程による安全な割込みを可能にする革新的な割込みメカニズムを提供する。例えばアレイの１つのバンクに作用する低速、低優先度の動作を一時停止し、アレイコントローラ内でコンテキスト切替えを行って高優先度の命令を実行することができる。従ってアレイの１つないし複数のバンクの消去などの時間のかかる動作を実行しているとき、アレイコントローラが消去命令と高優先度命令のコンテキスト切替えを行って消去中の書込みのような動作を実行可能にできる次の命令をユーザインターフェイスはアレイコントローラに出すことができる。
【０００９】
【実施例】
以下の説明では本発明の完全な理解を提供するため数々の詳細を述べるが、当業者にはそれらの特定的な詳細は本発明を実施するのに必要でないことが明かであろう。他に、よく知られた電気的構造や回路は本発明を不必要に曖昧にしないためにブロック図形式で示すことにする。
【００１０】
図１はコンピュータシステム 300のブロック図である。コンピュータシステム 300は中央演算処理装置（ＣＰＵ） 302と、主記憶装置サブシステム 304と、１組のフラッシュメモリシステム310−314とからなる。ＣＰＵ 302はユーザバス 306を通して主記憶装置サブシステム 304及びフラッシュメモリ装置310−314と交信する。
フラッシュメモリシステム310−314はコンピュータシステム 300のためのランダムアクセス不揮発性大型データ記憶装置を提供する。ＣＰＵ 302はユーザバス 306を通して読取り記憶サイクルを生成してフラッシュメモリシステム310−314の内容を読み取る。またユーザバス 306を通してフラッシュメモリシステム310−314に書込みコマンドと書込みデータブロックを転送してフラッシュメモリシステム310−314に書込みを行う。
【００１１】
図２に本発明のフラッシュメモリシステム 310のブロック図を示す。フラッシュメモリシステム 310はフラッシュセルアレイ20と、ユーザインターフェイス回路40と、アレイコントローラ50と、ページバッファ回路70と、制御レジスタ回路80−85と、読取り／書込み経路回路30とからなる。フラッシュセルアレイ20はランダムアクセス不揮発性大型データ記憶装置を提供する。１つの実施例では、フラッシュセルアレイ20は１組の32個のフラッシュアレイブロックとして構成される。フラッシュメモリシステム 310はユーザバス 306に接続されて示されている。ユーザバス 306はユーザアドレスバス 102と、ユーザデータバス 104と、ユーザ制御バス 106とからなる。ユーザインターフェイス回路40はマイクロコントローラなどのマスタ装置からデータ、コマンド、アドレス情報を受け取り、その情報をバッファに格納する。バッファはそれぞれ好適には複数バッファとしてマイクロコントローラからの複数の要求を受け取り、ユーザインターフェイス回路40で考察できるようにすることに留意する。後述するようにアレイコントローラ50の状態に基づいて即時の実行を受けるために特定のコマンドを高い優先位置に置き、アレイコントローラ50が現在実行しているコマンドとコンテキストを切り換える。ユーザインターフェイス回路40は更にアレイコントローラ50から状態情報を受け取り、ユーザインターフェイス回路40はそれを続いてマイクロコントローラに与える。
【００１２】
ユーザインターフェイス回路40はユーザバス 306上で通信動作要求を受け取って処理することでユーザバス 306を通してフラッシュセルアレイ20のアクセスを可能にする。ユーザインターフェイス回路40で動作要求を受け取ると、ユーザバス 306から受け取ったアドレス、データ、コマンド情報はユーザインターフェイス回路40にあるバッファに格納される。要求動作がプログラムあるいは消去コマンドなどのアレイコントローラ動作である場合、ユーザインターフェイス回路40が受け取ったコマンドやデータは続いてアレイコントローラ50に転送され、待ち行列バス41を通して要求コマンドが実行される。アドレス情報はユーザインターフェイス回路40によりマルチプレクサ35を通して読取り／書込み経路回路30へ送られ、アドレス回線36を通して交信したアドレスでコマンドが実行される。読取り動作はアレイコントローラが作動していないときに可能である。ユーザインターフェイス回路40はアドレスを読取り／書込み経路回路30へ送り、出力マルチプレクサをセットしてアレイから読み取ったデータを出力する。
【００１３】
ユーザインターフェイス回路40とアレイコントローラ50は両構成要素からアクセス可能なページバッファ回路70を共有し、フラッシュメモリシステムに様々な形で作動する機能を提供する。例えばページバッファ回路70は十分なデータが蓄積されてデータがフラッシュセルアレイ20に流れることができるようにフラッシュセルアレイ20に書き込むデータをバッファするのに使用することができ、フラッシュセルアレイ20でのスループットの増大をもたらす。
【００１４】
このバッファはユーザインターフェイス回路40とアレイコントローラ50の両方からアクセスできる。例えばページバッファ回路70はフラッシュアレイへの高速書込み動作を扱うのに用いる。データは引続きのアレイ書込み動作のためにユーザインターフェイス回路40によりページバッファ回路70にロードする。２つのページバッファ回路70にあるデータをアレイへ書き込むユーザコマンドは、ユーザインターフェイス回路40の待ち行列構造を通して他のアレイコントローラコマンドと同様な形で待ち合わせさせることができる。そこでアレイはページバッファ回路70に保持されたデータを用いてそれらのコマンドを実行することでプログラムすることができる。このようにユーザはページバッファ回路70をロードし、ページバッファ回路70の内容を利用するアレイコントローラコマンドを出し、第１のアレイコントローラコマンドが出された後にユーザインターフェイスが利用できるようにする第２のページバッファをロードすることができる。
【００１５】
実施例では、ページバッファはＳＲＡＭセルの128 x 19 x 2メモリアレイとする。これはいくつかの作動モードを有し、アレイコントローラとユーザインターフェイスによりアクセスできる。モードにより８ビットないし19ビットメモリとして構成する。またモードはそれを１つの連続メモリ面ないし２つのメモリ面に制御できる。各々の面は同時にアクセス可能である。テストモードでないとき、ページバッファは２つのＳＲＡＭメモリの面に分割するのが好ましい。この２面アーキテクチャによりアレイコントローラはメモリの半分に対する読取り／書込みアクセスを持ち、ユーザインターフェイスは残りの半分に対するアクセスを同時に持つことができる。アクセス可能な半分は固定されておらず、むしろ面の所有権を切り換えることができる。例えばこれはユーザインターフェイスがデータのページをアレイコントローラに送り、アレイのページプログラミングに使用することができる。ユーザインターフェイスは最初にページバッファの１つの面をデータで満たし、次にコマンド（ジャンプオフセット）をアレイコントローラに出してページプログラムを行う。内部論理と制御信号を使用することを通して適切なコマンドを受け取ると、アレイコントローラはホストＣＰＵがちょうどロードした面を指定し、ユーザインターフェイスは他の面を制御してデータを書き込む。従って別々にアクセスできる２つのページバッファがあり、ページバッファプログラミングはパイプライン化してフラッシュアレイへのデータ流れを達成してデータスループットを増加できるようにシーケンス化できる。
【００１６】
ページバッファはアレイコントローラアルゴリズムにより様々な目的に使用することができる。例えばマルチブロック消去アルゴリズムは、その動作中に割込みを可能にするようにページバッファを用いてマルチブロック消去情報を記憶することができる。更にアレイコントローラはページバッファを用いてパイプラインプログラミングのためにジャンプオフセット、データ、アドレス情報を記憶することができる。外部のユーザは更に、ユーザインターフェイスを通してページバッファをそれ自身高速読取り／書込みメモリとして使用することができる。テストモード中、アレイコントローラにページバッファに記憶された命令を実行するように命令することができる。従ってページバッファはアレイコントローラのマイクロコード記憶装置としての役割を果たすことができる。このモードの時、ページバッファのアーキテクチャは好適に１つの連続メモリに再構成される。
【００１７】
アレイコントローラ50は中央制御バス 100を通してアレイ20のプログラム、消去、検証を行うのに必要な異なる構成要素を制御する。アレイコントローラ50はフラッシュセルアレイ20に対してプログラム、消去その他の動作を行うための専用縮小命令セットプロセッサである。アレイコントローラ50には論理演算装置、汎用レジスタ、制御記憶装置、制御シーケンサが含まれている。アレイコントローラ50は待ち行列バス41を通して受け取った情報を用いてプログラムメモリの適切な場所にアクセスして動作を行うのに必要な命令を実行する。アレイコントローラ50はフラッシュセルアレイ20のフラッシュセルに対して電荷を加え、またフラッシュセルアレイ20のフラッシュセルから電荷を除去するために読取り／書込み経路回路30の高電圧回路を順序づける実施アルゴリズムを実行する。アレイコントローラ50は高電圧回路を制御し中央制御バス 100を通して制御レジスタ回路80−85にアクセスしてフラッシュセルアレイ20をアドレス指定する。
【００１８】
読取り／書込み経路回路30はフラッシュセルアレイ20にアクセスする読取り、書込み経路回路からなる。特に読取り／書込み経路回路30には消去機能用の適切な電圧レベルをフラッシュセルアレイ20に加えるソーススィッチ回路が含まれている。読取り／書込み経路回路30には更に、プログラム機能中にフラッシュセルアレイ20のビットラインに対してプログラムレベル電圧を駆動するプログラムロード回路が含まれている。
制御レジスタ回路80−85は読取り／書込み経路回路30に対して制御信号を出す専用制御レジスタと関連回路のセットを含んでいる。専用制御レジスタは中央制御バス 100を通して書込み、読取りが行われる。
【００１９】
本実施例では、制御アクセス回路60によりユーザインターフェイス回路40とアレイコントローラ50の両方は中央制御バス 100を通して制御レジスタ回路80−85にアクセスすることができる。フラッシュメモリシステム 310の通常モード中、アレイコントローラ50は制御アクセス回路60を制御して中央制御バス 100を通して制御レジスタ回路80−85にアクセスする。
【００２０】
本実施例では、アレイコントローラ50は書込み制御信号とレジスタアドレスを対応する書込みデータと共にバス52を通して制御アクセス回路60に転送して専用制御レジスタに書込みを行う。そこで制御アクセス回路60は中央制御バス 100を通して書込みサイクルを生成してアドレス指定専用制御レジスタに書込みを行う。またアレイコントローラ50はレジスタアドレスと読取り制御信号をバス52を通して制御アクセス回路60に転送して専用制御レジスタの読取りを行う。そこで制御アクセス回路60は中央制御バス 100を通して読取りアクセスサイクルを生成してアドレス指定専用制御レジスタの読取りを行う。
【００２１】
例えば制御レジスタ回路80は１組の制御信号90に従って読取り／書込み経路回路30の高電圧回路を制御する専用制御レジスタと回路とを含んでいる。制御レジスタ回路81は１組の制御信号91に従って読取り／書込み経路回路30の専用行アクセス回路を制御する制御レジスタと回路を含んでいる。制御レジスタ回路82は読取り／書込み経路回路30からの１組の状態信号92を感知しラッチする１組の読取り専用レジスタを含んでいる。制御レジスタ回路83は１組の制御信号93に従って読取り／書込み経路回路30の読取り経路を制御する制御レジスタと回路とを含んでいる。制御レジスタ回路84はページバッファ回路70の１組のテストモードを制御するレジスタを含んでいる。制御レジスタ回路85は１組の制御信号95に従ってフラッシュメモリシステム 310の特殊テスト機能を制御するレジスタを含んでいる。
【００２２】
ユーザインターフェイス回路40は入力アドレスマルチプレクサ35を制御して読取り／書込み経路回路30に対する入力アドレス36を選択する。選択した入力アドレス36はユーザアドレスバス上でＴＴＬバッファ（図示せず）により感知されたアドレスないしユーザインターフェイス回路40からのラッチされたアドレス37である。入力アドレス36は制御レジスタ回路84内の制御レジスタをプログラムすることでオーバーライドすることができる。
ユーザインターフェイス回路40は出力データマルチプレクサ45を制御してユーザデータバス 104を通して出力データ転送用のソースを選択する。選択された出力データは読取り／書込み経路回路30からのフラッシュアレイデータ46、ページバッファ回路70からのページバッファデータ47ないしユーザインターフェイス回路40内に含まれる１組のブロック状態レジスタからのブロック状態レジスタ（ＢＳＲ）データ48となる。このように要求装置は、アレイからのデータ並びにフラッシュメモリシステム 310の状態に関する状態情報を受け取ることができる。
【００２３】
従ってＣＰＵ 302はユーザ制御バス 106を通して読取りサイクルを合図する間、アドレスをユーザアドレスバス 102に転送してフラッシュセルアレイ20を読み取る。ユーザインターフェイス回路40はその読取りサイクルを検出し、入力アドレスマルチプレクサ35にユーザアドレスバス 102からのアドレスを読取り／書込み経路回路30のｘ、ｙ復号回路に転送させる。またユーザインターフェイス回路40は出力データマルチプレクサ45にユーザデータバス 104を通して読取り／書込み経路回路30からのアドレス指定された読取りデータを転送させる。
【００２４】
ＣＰＵ 302はユーザバス 306を通して書込みサイクルを生成してプログラムコマンドとデータをユーザインターフェイス回路40に転送してフラッシュセルアレイ20にデータを書き込む。ユーザインターフェイス回路40はプログラムコマンドを検証し、プログラムコマンドとアドレス及びデータパラメータをアレイコントローラ50に待ち行列をつくる。アレイコントローラ50は指定されたデータを指定アドレスのフラッシュセルアレイ20にプログラムすることでプログラム動作を行う。
【００２５】
ＣＰＵ 302はオプション的にユーザバス 306を通して書込みサイクルを生成してプログラムデータをページバッファ回路70に転送してフラッシュセルアレイ20へデータを書き込む。次にＣＰＵ 302はプログラムをページバッファコマンドと共にユーザインターフェイス回路40に転送する。ユーザインターフェイス回路40はページバッファコマンドの付いたプログラムを検証してアレイコントローラ50に待ち行列を作る。アレイコントローラ50はページバッファ回路70からのプログラムデータを読取りフラッシュセルアレイ20へプログラムデータをプログラムすることでページバッファコマンドの付いたプログラムを実行する。
【００２６】
ページバッファ回路70は２つの別々のスタティックランダムアクセスメモリ（ＳＲＡＭ）面からなる。２つのＳＲＡＭ面は面０と面１とからなる。ユーザインターフェイス回路40はアレイコントローラ50により処理されたユーザコマンドに対して面０及び面１ページバッファ資源を割り当てる。更にユーザインターフェイス回路40は面０及び面１のページバッファ資源をユーザアクセスに割り当てる。ページバッファ資源面０、１は限定資源とも称する。
【００２７】
ユーザインターフェイス回路40は32のブロック状態レジスタ（ＢＳＲ）を含んでいる。各々のＢＳＲはフラッシュセルアレイ20のブロックの１つに対応している。アレイコントローラ50はブロック状態レジスタ内の状態ビットを維持してフラッシュセルアレイ20の各々のブロックの状態を示す。ＣＰＵ 302はユーザバス
306を通してＢＳＲの内容を読み取る。
【００２８】
ユーザインターフェイス回路40はコマンドを出すユーザないしマイクロプロセッサと選択されたコマンドを実行するアレイコントローラ50の間の調整器として機能する。例えばアレイコントローラ50の現在状態を想定してユーザの要求動作が妥当かどうかを判定する。ユーザインターフェイス回路40はユーザバス 306からコマンド及びアドレス情報を入力として受取り、アレイコントローラ50が実行すべき動作を決定する。更にユーザインターフェイス回路40はアドレスとデータ、状態レジスタへのユーザアクセス、及び出力マルチプレクサ45の待ち行列を制御する。図３にユーザインターフェイス回路40のブロック図を示す。
【００２９】
図３で、コマンド状態マシン 200はＣＰＵ 302がユーザバス 306を通して提示するコマンド要求に基づいて行う動作を決定する。コマンドのタイプにはアレイ動作並びに状態レジスタ、テストモード、ページバッファ動作がある。コマンド状態マシン 200は回路で符号化されたアルゴリズムを通して、正当なコマンドシーケンス、間違ったコマンドシーケンスからユーザを締め出す方法、アレイコントローラ50を開始したり中断する方法を知っている。そこで動作をアレイコントローラ50により行う場合はコマンドをアレイコントローラ50に送る。読取り動作を行う場合、コマンド状態マシン 200はアドレスを読取り／書込み経路回路30に送る。コマンド状態マシン 200は出力マルチプレクサ（45、図２）を通して出力で得られるデータと入力マルチプレクサ（35、図２）を通して入力で得られるデータを制御する。更にコマンド状態マシン 200は状態レジスタ 260へのアクセスを制御する。従ってコマンド状態マシン 200はユーザバス 306を通して受けるユーザのコマンド入力を理解し、残りのフラッシュメモリシステム 310に対してユーザのコマンド入力を実行するために行うべきステップを指令する回路である。
【００３０】
要求されたコマンドが例えばアレイ読取りないし状態レジスタ読取りコマンドなどのアレイコントローラ50により実行されないものである場合、ユーザインターフェイス回路40は適切な制御信号を出して要求されたコマンドの実行を行うようにする。受け取ったコマンド要求がアレイコントローラ50により実行されるものである場合、ユーザインターフェイス回路40が受け取ったコマンド要求を示すコマンドコードを用いてユーザインターフェイス回路40内にあるアレイコントローラ50ジャンプ表（図示せず）へのインデックスを生成する。受け取るコマンドにより（例えば図４〜図１４を参照のこと）、ジャンプ表に格納されコマンドコードに対して写像されるオフセットベクトルはアレイコントローラに送られ、アレイコントローラはオフセットベクトルを用いてコマンドを実行するためアレイコントローラ50が行うアルゴリズムに対するコードをアドレス指定する。好適にはオフセットベクトルはプログラムメモリの最初の32位置の１つを引用して実際のプログラムメモリアドレスを判定して実行を開始する。本実施例では、４つの異なるクラスの 128までのコマンドを受けてユーザインターフェイス回路40で処理することができる。
【００３１】
本実施例では、ジャンプ表は複数コマンドを単一のオフセットベクトルに写像するように構成する。オフセットベクトルの二重性により使用するハードウエア構成により区別される複数のコマンドクラスを同一アレイコントローラ50アルゴリズムに写像することができる。従って複数ハードウエア構成をユーザインターフェイス回路40ないしアレイコントローラ50の変更なしに支援することができる。これに関してコマンドコード変換メカニズムは、アレイコントローラ50に交信する適切なハードウエア制御信号とオフセットベクトルを生成する。
【００３２】
コマンド状態マシン 200でコマンドコードを受取り、ハードウエア制御信号を生成する。そのコマンドは次に、動作待ち行列 230に対して出力する前にコマンドコードをオフセットベクトルに変換するジャンプ表を含む一次コマンド／アドレス／データ待ち行列 210に送る。生成されるハードウエア信号の種類はシステムの構成による。例えば本実施例では、ハードウエア信号を生成して、ページバッファが使用されるのか、どのページバッファが使用されるのか、行われる動作は８ビット動作あるいは16ビット動作なのかなどを識別する。
【００３３】
図４〜図１４に戻る。いくつかのコマンドコードとアレイコントローラオフセットベクトルはアレイコントローラ50が行うカスタムアルゴリズム用に割り当てられている。フラッシュメモリシステム 310をカスタム化するには、アレイコントローラプログラムメモリに単にコードをロードしてカスタムアルゴリズムを行うだけである。従ってフラッシュメモリシステム 310は特定のユーザのアプリケーション専用のコマンドを行うようにカスタム化できる。更にコマンドセットは柔軟性があり、ユーザインターフェイス回路40を変更することなしに新しいコマンドを加えたり、古いコマンド機能を変更できる。
【００３４】
コマンド機能はプログラムメモリ内の最初の32位置に格納されたプログラムメモリアドレスを改訂して異なるプログラムメモリ位置を引用することで容易に変更することができる。更にアレイコントローラ50の機能は製造時にシステムに与えられたアルゴリズムに限定されない。システムは製造後にアレイコントローラアルゴリズムの更新、修正、追加を可能にするフラッシュプログラムメモリなどの更新可能プログラムメモリを備えている。好適にはプログラムメモリはＣＰＵ（ユーザ）が出す所定のコマンドを通して更新する。ユーザインターフェイスはコマンドを受けると、アレイコントローラがプログラムメモリを更新できるようにするページバッファに一時格納されたアルゴリズムをアレイコントローラに実行させる。このようにしてアルゴリズムの開始アドレス及びアルゴリズムそれ自身を修正、削除、あるいは追加できる。例えばプログラムメモリはユーザから受け取る新しいアルゴリズムで更新することができる。
【００３５】
アレイコントローラ50によりコマンドを実行する場合、コマンド、アドレス、データ情報をユーザインターフェイス回路40で処理するため一時待ち行列 210に与える。特に一時待ち行列 210でコマンド、データ、アドレス情報を受け取りコマンドがオフセットベクトルに変換されると、情報は動作待ち行列 220に送られる。アレイコントローラコマンドがコマンド状態マシン 200に与えられると、コマンド状態マシン 200はそのコマンドとアドレス／データ情報を一時待ち行列 210に送り、それはそれらを引続き動作待ち行列 230に送る。一時待ち行列 210は動作待ち行列 230が活動待ち行列の１つにそのコマンドを受け入れる用意ができるまでそのコマンドを保持する。一時待ち行列 210への情報の転送は、ユーザ制御バス 106を通して受け取る書込み可能クロックと同期化する。動作待ち行列 230はコマンドを一時待ち行列 210から受取り、それをアレイコントローラクロックで駆動される活動待ち行列に配列する。コマンド状態マシン 200が情報を一時待ち行列 210に転送すると、それは更にコマンドが活動待ち行列に加えられるのを待っていることを動作待ち行列 230に告げるフラッグを設定する。動作待ち行列 230がコマンドを一時待ち行列 210から待ち行列の１つに移動すると、フラッシュはリセットされる。このフラッグは更に状態レジスタ 260により待ち行列満杯ビットとして用いられる。この待ち行列満杯ビットはそのビットがなくなるまでアレイコントローラ50により実行することが必要なコマンドをフラッシュメモリシステム 310に出さないようにユーザに告げるのに用いる。
【００３６】
好適には動作待ち行列 220は２動作迄待ち合わせさせる能力を持っているが、２動作以上待ち合わせさせることができることは明かである。一次待ち行列は実行する動作ないし実行されている動作を示す。二次待ち行列は一次待ち行列内にある動作の実行が完了すれば行われる次の動作のデータを含んでいる。アレイコントローラ50による一次待ち行列内の動作の実行が完了すると、一次動作はその動作待ち行列から取り除かれてアレイコントローラ50により次の動作を実行できるようにする。実行する命令が一時待ち行列 210に格納されている場合、オフセットベクトル、データ、アドレスは引き続き実行するために動作待ち行列 230に転送される。後に詳細に説明するように、特定のケースでは一次動作が完了する前に二次待ち行列内にある動作を行うことが望ましい。一次及び二次動作の間で革新的なコンテキスト切替え処理を行って一次待ち行列にある動作の完了前に二次待ち行列内にある動作を実行する。
【００３７】
ユーザインターフェイス回路40はアレイコントローラ50により実行するコマンドを受け取ると、アレイコントローラ50を駆動するクロック信号を出すアレイコントローラ50の局所発振器が開始するようにアレイコントローラ50に信号を出す。アレイコントローラ50が作動すると、オフセットベクトルはユーザインターフェイスからアレイコントローラ50に転送され、プログラムメモリを割り出す。動作待ち行列 230に格納されたアドレス、データ情報は直接読取り／書込み経路回路30に与えたり、制御レジスタから与えることができ、読取り／書込み経路回路30でのアドレス、データ情報を用いての動作の実行は、プログラムメモリから実行されるアルゴリズムに規定されてアレイコントローラ50により制御される。
【００３８】
動作待ち行列 220は好適には、一時待ち行列 210からオフセットベクトルとアドレス、データ情報を受取り、アレイコントローラ50によりアクセスするベクトル及び関連アドレス、データ情報を待ち合わせさせる状態マシンとなる。
【００３９】
実施例では、コマンドの待ち行列とユーザインターフェイス回路40へのパイプライン化を支援するため、３層のコマンドの待ち行列を造る。例えば受け取ったコマンドがアレイコントローラ50の動作を必要とし、１つが現在実行しているものでない場合、ユーザインターフェイス回路40は動作待ち行列の最初のもの（一次待ち行列とも称する）を動作のためのデータと共にロードしてアレイコントローラ50の作動を開始する。一般にアレイコントローラ50はその自由裁量で、そのコマンド情報の内容を待ち行列の最初に持ち、行列の最後はユーザバス 306を通しコマンド状態マシン 200そしておそらく一時待ち行列 210を通して出される別のコマンドに使用できるようにする。このアーキテクチャによりアレイコントローラ50が最初のコマンドを実行している間に、ユーザはアレイコントローラ動作その他の任意の有効なコマンドをユーザインターフェイス回路40に出すことができる。ユーザインターフェイス回路40は後続のコマンドを受け取ると、新しい動作が待ち行列に配列されたことをアレイコントローラ50に通知し、現在走っているアレイコントローラアルゴリズムはアレイコントローラ50がその動作を中断して待っている動作を扱うべきかあるいは処理中の動作を最初に完了するかを判定する。アレイコントローラ50が現在実行しているアルゴリズムを中断するかどうかを判定する基準は、実行しているアルゴリズムの論理に含めるようにする。例えばブロックを消去するアルゴリズムは、後続のプログラムコマンドは消去アルゴリズムの実行を中断することができることを示すコードを含むようにする。
【００４０】
ユーザインターフェイス回路40の構造により、動作待ち行列 230内でコマンドをパイプライン化できる。例えば１プログラムバイト／語ないし２プログラムバイト／語コマンドをパイプライン化でき、１プログラムバイト／語消去、単一ブロックをパイプライン化でき（メモリアレイの異なるブロックに関して）、ページバッファコマンドからの１つのブロックの消去と別のブロックの書込みをパイプライン化でき、ページバッファコマンドからのプログラムアレイと別のブロックの消去並びに他の特殊なアルゴリズムをパイプライン化できる。
【００４１】
ユーザインターフェイス回路40には複数の状態レジスタ 260が含まれている。状態レジスタの一部はアレイコントローラ50による読取り、書込みアクセスが可能で、ユーザインターフェイス回路40による読取りアクセス可能であるが、他のレジスタはユーザインターフェイス回路40による読取り、書込みアクセス可能である。各々の状態レジスタは、アレイコントローラ動作の実行状態に関する情報をアレイコントローラによりモニタないし交信でき、ユーザインターフェイスとユーザがモニタできるようにするため、ユーザインターフェイスにより読取りアクセス可能となっている。ユーザはコマンドを出していつでも状態レジスタにアクセスして、アレイコントローラの状態を判定することができる。例えばメモリシステムにコマンドを出す前に、アレイコントローラの状態が出す命令が有効なコマンドとして受け入れられる状態であることが好ましい。アレイコントローラの状態は状態レジスタ 260を読み取ることで判定することができる。
【００４２】
好適には３つの大域状態レジスタと１組の32ブロック状態レジスタ（ＢＳＲ）を設ける。図１５は例示的な状態レジスタビット定義を示すブロック図である。大域状態レジスタは装置の全般的な状態を提供するが、ブロックの特定情報は提供しない。例えば間違った動作は大域状態レジスタで検出することができるが、間違った動作が生じた実際のブロックはブロック状態レジスタを読み取ることでしか検出できない。第１の大域状態レジスタは先のメモリ生成物と協調する反対方向に構成するようにする。第２の大域状態レジスタはアレイコントローラの状態、動作待ち行列の状態、ページバッファの状態に関する情報を提供する。第３の大域状態レジスタはアレイコントローラにより操作できる８つの非専用ビットを含んでいる。そのビットの定義は、アレイコントローラ上で実施されるアルゴリズムによる。従ってユーザはコマンドを出して第３の大域状態レジスタをモニタして特定のアルゴリズムに対するアレイコントローラにより実行状態を判定することができる。状態レジスタを通してのアレイコントローラの状態をモニタする機能により、ユーザはメモリシステムに引続きコマンドを出す前に有効なコマンドを判定することができる。
【００４３】
ブロック状態レジスタ（ＢＳＲ）はアレイのブロックに対して行われる動作の状態を維持するのに用いる。図１６に例示的なブロック図を示す。図１６に示すように、ブロック状態レジスタは32x8単一ポート書込み二重ポート読取りＳＲＡＭアレイとして構成するのが好ましい。ＳＲＡＭの書込みポートはアレイコントローラ書込みデコーダに接続されている。読取りデコーダはアレイコントローラとユーザインターフェイスに備えられている。従ってアレイコントローラはＳＲＡＭアレイにあるブロック状態レジスタに対して書込み、読取りを行うことができるが、ユーザインターフェイスはアレイから読取りしか行うことができない。ユーザは、１つのブロック状態レジスタを選択し、入出力状態レジスタバス上のブロック状態レジスタの内容をユーザインターフェイスに与える信号（例えばアドレスを有するＩＤＡ［12:０］、ＩＤＡ［20:16］及びＯＥＢＰＡＤ）をもたらす要求をユーザインターフェイスに対して出すことによりブロック状態レジスタを読み取ることができる。そこで状態情報がユーザにもたらされる。図１７はブロック状態レジスタがＳＲＡＭアレイで構成されるときのブロック状態レジスタのビットの例示的な構成を示すもので、ビットの定義はプログラム可能でシステムの作動に更に柔軟性をもたらす。
【００４４】
各々のブロック状態レジスタはフラッシュアレイの対応するブロックの書込み保護のメカニズムをもたらすロックビットを含み、不注意な消去やプログラム動作からブロックを保護するため、その特定ブロックと関連したブロック状態レジスタ内の不揮発性ロックビットを設定する。特定ブロックに対してロックビットを設定すると、そのブロックは消去ないし書込み動作から保護されるようになる。ロックビットは各々のアレイブロックに有り、関連ブロックが消去される度に消去される。ユーザはロックビットの状態をブロック状態レジスタ内の対応するビットを読み取ることにより読み取ることができる。
【００４５】
上述したように、アレイコントローラはフラッシュ装置の内部モードを制御するために使用するプログラマブル・マイクロコントローラである。特にアレイコントローラはフラッシュアレイ内のセルをプログラム、消去するアルゴリズムを含むアルゴリズムを自動的かつ正確に制御する手段を提供する。アレイコントローラはアレイコントローラ動作の起動を制御するユーザインターフェイスを通してアクセスする。アレイコントローラは動作当り２クロックサイクルのベースで作動する。好適には動作Ｎの実行の用意に対するクロックサイクルは、動作Ｎ−１の実行クロックサイクル中に生じる。このようにしてアレイ動作は１サイクルで実行し、第１の命令の実行前に遅延だけが生じる。クロックサイクル内で命令実行は３つの段階に分ける。この区分により１クロックサイクル中に入出力バスサイクルのための十分なクロックエッジがもたらされる。
【００４６】
図１８で、アレイコントローラはフラッシュプログラムメモリ 320に記憶されたアルゴリズムを実行する。それらのアルゴリズムは命令語、特にデータ転送命令、計算命令、分岐命令、制御命令からなる。データ転送命令は８ビットないし16ビットデータをレジスタファイルに対して移動することに関連している。分岐命令はサブルーチンコールや条件的／無条件的ジャンプの使用を通してプログラミングでアルゴリズムの流れを修正可能にする。計算命令は論理演算装置 370に関連した動作をもたらす。制御命令はフラッグを設定ないし除去し、割込み処理ルーチンに対するポインタを設定する手段を提供する。
【００４７】
ユーザインターフェイスとアレイコントローラの間にある制御アクセス回路 380は、アレイコントローラが命令を受けてアルゴリズムを実行し、状態情報をユーザインターフェイス及び最終的にユーザに通信する手段を提供する。例えば実施例では、ユーザインターフェイスは実行を待っているアルゴリズムがあることをアレイコントローラに知らせるＣＤＲＵＮＦ、現在アルゴリズムに加えて実行を待っている少なくとも１つのアルゴリズムがあることを示すＣＤＣＭＤＲＤＹ、アレイコントローラに未決のアレイコントローラ実行を一時停止する要求があることを知らせるＣＤＳＵＳＲＥＱの３つの信号を出す。代わりにアレイコントローラはユーザインターフェイスに対してアレイコントローラが装置の制御を有して走っているかどうかを示す信号ＦＤＲＤＹ、アレイコントローラが一次待ち行列にあるコマンドないし二次待ち行列にある割込みコマンドを実行しているかを示すＦＤＮＸＴＣＭＤ、現在行っている動作が完了したことを示すＦＤＯＰＤＯＮＥ、動作はうまく一時的に停止し、ユーザはメモリ装置の制御をして読取り動作などの動作を行うことができることを示すＦＤＩＤＬＥを通信する。
【００４８】
先に述べたように、ユーザインターフェイスはマイクロプロセッサバス信号により駆動されるが、アレイコントローラはフラッシュシステム内にある発振器により駆動される。特に発振器位相生成器ブロック 305はアレイコントローラ回路のために離散クロック信号として用いられる３つの非重複クロックパルスを生成する。発振器器 305はユーザインターフェイスからのコマンドが実行されるときにユーザインターフェイスにより起動される。
【００４９】
プログラムメモリ 320はアクセスしたアルゴリズムをユーザインターフェイスから受け取ったジャンプベクトルとプログラムメモリの最初の32アドレス内に格納されたプログラムアドレスにしたがって格納し、アレイコントローラにより実行して要求された機能を行うアルゴリズムを格納する。プログラマブルアレイコントローラを備えることにより実現される利益は膨大である。アルゴリズムはフラッシュシステムが提供するアプリケーションの要件に対して構成することができる。例えば標準プログラム及びプログラム及び消去過程上で変更を行う消去過程並びにカスタム過程のアルゴリズムはプログラムメモリに含めて対応するコマンドを出してアクセスすることができる。更にユーザインターフェイスに対して出したコマンドを通してユーザはプログラムメモリ内に格納されたアルゴリズムを修正することでアレイコントローラの機能を修正することができる。これはアルゴリズムを変更するにはハードウエアを修正する必要のあった従来技術の装置とは全く異なる。好適にはプログラムメモリはユーザインターフェイス回路により制御されるようにアレイコントローラにより修正されるようにする。プログラムメモリ自身が修正されると、ページバッファにはプログラミングアルゴリズムがロードされ、アレイコントローラはプログラムメモリをプログラムするためアルゴリズムに付いてページバッファを参照する。
【００５０】
本発明のフラッシュメモリシステムのアーキテクチャによりもたらされる柔軟性は非常に広い。例えばアプリケーションがフラッシュアレイ内に格納された特定のデータを指定するためにインデックスを備えていることを必要とする場合、従来のシステムはＳＲＡＭなどの外部メモリを利用してフラッシュアレイ内のどこのデータにアクセスするかを判定するためにポインタを格納してアクセスしていた。しかし本発明のフラッシュシステムにより、アレイコントローラはポインタを格納してそのポインタを用いて探索を行うことができ、外部ＳＲＡＭの必要性をなくし、各々のアレイは動作を並列に行うことができるので動作のスループットを増大することができる。従ってアレイのためのフラッシュの並列処理が達成される。本発明のフラッシュメモリシステムにより実行できる別の応用は、フラッシュメモリを用いてカメラのフィルムと置き換えることである。この応用を効果的なものにするため、画像データの高速書込みが必要になる。一般にエラーが引き起こされると、別の書込み動作の試みが行われる。しかしこの応用では速度が不可欠であり、単にそのブロックを不良としてマークする方が早い。本発明のフラッシュメモリシステムは単にプログラムコードを生成して書込み機能を行い、そのコードをフラッシュアレイコード記憶装置に格納することでこの応用に対応することができる。このようにカスタム化が可能で、実施は非常に簡単である。
【００５１】
アルゴリズムを実行するため、アレイコントローラは現在命令を記憶する命令レジスタ 330、プログラムカウンタ 340、コールスタック 345、論理演算装置（ＡＬＵ） 370、実行中にＡＬＵ 370によりスクラッチメモリとして使用されるレジスタファイル360からなる汎用処理構造として具現される。
【００５２】
プログラムカウンタ 340はアレイコントローラに与えられる命令の適切なサイクルを維持するために全てのポインタ記憶装置と論理を含んでいる。更にこの構造は革新的なコンテキスト切替え、割込み構造を備えている。プログラムカウンタの基本的な動作は、実行する次の命令を解読し、次の適切な命令を指定することである（ＥＤＰＣ［11:0］）。プログラムカウンタの出力として与えられるアドレスを用いてプログラムメモリから次の命令を検索し、命令レジスタに転送してＡＬＵにより実行する。図１９で、プログラムカウンタはコール 805、コール割込み 810の２つのスタックと、割込み開始 815、割込み戻し 820、ゼロ充填 825、オフセットジャンプ 830、間接ジャンプ 835の５つのレジスタと１つのレジスタ加算器 840からなる。制御回路 845は、マルチプレクサ 855の制御を含む複数の制御機能を行い、835、815、820、825、830、840、805 の様々なソースからアドレス出力のソースを選択し、次の命令ジャンプ位置アルゴリズム、オフセット開始点、ハードウエア割込み、ソフトウエア戻しの間の仲裁を行う。コールスタック 805は12ビットワイドのプッシュアップ・ポップダウン全スタックからなる。
【００５３】
このアーキテクチャによりアレイコントローラは割込み中にコンテキスト切替えを行って、割込み動作が完了した後コンテキスト切替えを行ってアレイコントローラの元の状態を回復し、元の動作を続行できるようにタイミングよくアレイコントローラのコンテキストを保存することができる。各々のスタック 805、 810は、スタックのような挙動をもたらすためロジック（図示せず）で囲んだラッチからなる。好適にはプッシュ、ポップロジックはプッシュないしポップ動作が行われた後指定する次のアドレスを解読する状態マシンとする。
【００５４】
図１８に戻り、プログラムメモリ 320はプログラムカウンタ 340により決定されたアドレスを受け取り、命令出力をラッチする命令レジスタ 330に命令を出力する。動作で更に柔軟性をもたらすため、命令レジスタ 330は更にページバッファ 310を通して受け取る命令をラッチする機能を持っている。その命令は次にＡＬＵ 370により実行する。ＡＬＵ 370は全ての演算、論理機能並びにアレイコントローラのためのシフト動作を行い、またバイトと語動作の両方を扱うことができる。実行する命令は命令レジスタ 330を通してプログラムメモリ 320から得る。ＡＬＵへの入力データは、ページバッファ及び入出力インターフェイスを初めとする複数のソースから発することができる。
【００５５】
レジスタファイル 360は３つのポートのＳＲＡＭとして構成され、アレイコントローラが２つのポートから読取り、第３のポートを通してレジスタファイルに書き込むことができるようにしている。２つの読取りポートと１つの書込みポートの各々は互いに独立して作動し、実際には同一メモリ位置で作動することができる。そのタイミングはセルの段階１中に読取り動作が生じ、クロックの段階３中に書込み動作が生じ、それにより段階２を計算段階として使用するというものである。従ってレジスタファイルは１クロックサイクルで読取り、更新することができる。レジスタファイルはアレイコントローラの状態を含み、特にアレイコントローラアルゴリズムの実行中に利用する変数を含んでいる。
【００５６】
レジスタファイル 360は２つの部分に区分されている。主要部分である第１の部分はアレイコントローラが実行するアルゴリズムの変数を含み、第２の部分は割込みアルゴリズムの変数を含んでいる従って割込みを行うとき、レジスタファイルは主要部分から第２の部分へのアレイコントローラの状態のハードウエアコンテキスト切替えを行うことができる。ここで全ての動作は主要部分と同一に見えるレジスタファイルの割込み部分で行われる。レジスタファイルの主要部分に保持された全ての変数は維持されるが、割込み作業中にアクセスすることはできない。割込み作業後、制御は主要部分に再び与えられる。
【００５７】
本アーキテクチャは、４レベルの深さのプログラムカウンタスタックを支援する。これによりメモリ装置に対して書き込まれるアルゴリズムは動作をよりモジュール的にすることができる。例えば戻り命令はプログラムカウンタスタックと共に二重のデューティを行う。プログラムカウンタスタックにデータがあるとき、戻し命令は被呼サブルーチンから戻す役割をする。ＰＣスタックが空の場合、この命令はアルゴリズム終了命令の役割をする。これにより通常動作に付いてはアレイコントローラが実行を停止するがサイクリングなどのテスト動作に付いてはユーザアルゴリズムをそれらがサブルーチンであるかのように呼び出すことができるようにユーザアルゴリズムを戻し命令で終了することができる。
【００５８】
本発明のフラッシュメモリシステムのアーキテクチャは、データの変改ないし高電圧プログラム／消去回路なしにアレイコントローラアルゴリズムの割込みを可能にする革新的な割込みメカニズムを提供する。従来の装置とは異なり、この割込みメカニズムはアレイに対して害を与える恐れのある状態からメモリ装置を取り出すことで割込みを行う前にメモリ装置を保護する方法を提供する。例えばアレイコントローラが現在消去過程を制御している場合、アレイを消去するのに必要な電圧はメモリに害を与えるのを避けるために低下させる。割込みを行った後、メモリ装置とアレイコントローラを消去パルスのような元の実行過程を続行できる状態に配置し直す。
【００５９】
特に革新的な割込みメカニズムは最初に現在実行しているアルゴリズムに関連した割込み開始コードを実行することで現在実行しているアルゴリズムの安全な割込みと中断を備えている。この割込み開始コードは現在実行アルゴリズムを安全に中断する。例えば割込み開始コードは利用している高電圧回路を低下し、読取り／書込み回路を割込みアルゴリズムで使用する状態に置き、必要なレジスタのコンテキスト切替えを行って中断するアルゴリズムの安全時点を判定する。割込み開始ルーチンが実行を完了すると、割込みルーチンが実行を始め、割込みルーチンの実行の終わりに、割込み戻しルーチンが実行されてプログラムカウンタを調節して割り込んだコード内の安全戻し地点を指定し、被割込みルーチンが実行を続行できるようにレジスタのコンテキスト切替えを行う。
【００６０】
本発明のフラッシュ回路に備えられた革新的な割込み処理を用いて、消去中のプログラム支援アルゴリズムその他のアルゴリズム中断機能が可能となる。例えばこの割込み構造により、アルゴリズムを同時に実行している間に割込みを生じることが可能である。更に割込み構造、動作待ち行列及び状態レジスタは革新的な仮想状態マシンとして機能してマルチプロセッシング的な機能を提供する。
【００６１】
割込みの取り扱いはユーザインターフェイスの状態マシンが出す３つの命令、即ち使用可能割込み（ＥＮＩ）、使用不能割込み（ＤＳＩ）、セット割込み開始レジスタ（ＳＩＳＲ）により制御する。ＥＮＩはアルゴリズムへの安全な戻し地点を引数として取り、割込み戻しレジスタ（ＩＲＲ）をこの値に設定し、割込み可能フラッグ（ＩＦ）を設定する。ＤＳＩは引数を取らず、単にＩＦをリセットするだけである。ＳＩＳＲは割込み開始ルーチンアドレスのアドレスを引数として取り、割込み開始レジスタ（ＩＳＲ）を設定する。ＰＣスタックの保全性を確保するため、ＩＲＲアドレスは割込みが為された手順内になければならない。従って例えば信号ＣＤＣＭＤＲＤＹが実行を待っているコマンドを示し現在実行しているアルゴリズムが割込み可能である場合、即ちＩＦビットが設定されている場合、ＣＤＣＭＤＲＤＹが設定された後最初の命令サイクルでＩＳＲに格納されているアドレスへのジャンプが生じる。直ちに割込み要求信号が表明され、ＩＦが取り除かれる。割込み開始ルーチンが完了すると、戻しによる表示（ＲＥＴ）命令、割込み肯定応答信号及び開始信号が表明される。そこで割込みアルゴリズムが実行される。空のＰＣスタック上でＲＥＴにより表示される割込みアルゴリズムが完了すると、割込みビットが取り除かれ、ＩＲＲに記憶されたアドレスへのジャンプが生じる。そこで被割込みアルゴリズムは実行を続ける。
【００６２】
戻しアドレス及び割込み開始ルーチンを含む割込み戻しルーチンは事前に決定されている。アレイコントローラアルゴリズムが造られプログラムメモリにロードされるとき、割込み開始ルーチンと戻しルーチンが造られてプログラムメモリにロードされ、割込み開始ルーチンと戻しルーチンのアドレスを決定するようにする。アルゴリズムが実行されるとき、割込みが生じたときに情報を容易に得ることができ、割込み開始及び戻しルーチンの開始アドレスをタイムリーに利用してプログラムメモリの該当アドレスにアクセスして命令レジスタにロードしＡＬＵにより実行するようにＩＲＲとＩＳＲはプログラムカウンタにロードされる。
【００６３】
このように割込み可能アルゴリズムが実行しており、割込みが生じると、制御は直ちにそのアルゴリズムの割込み開始ルーチンに渡される。割込み開始ルーチンはアレイコントローラを割込みアルゴリズムが実行し被割込みアルゴリズムが続いて実行されて完了できる状態にする。従って割込み開始ルーチンは割込みをこの時点で行うことができるかどうかを判定し、そしてそれを行うことができればフラッシュ高電圧と読取り回路を周知の安全な状態にする。そこでアレイコントローラはコールスタックとレジスタファイルのコンテキスト切替えを行って交互のコピーにアクセスし、それによりコンテキスト切替えを行う。割込みアルゴリズムを完了すると、制御は割込み戻しルーチンに渡される。この移行が行われると、コールスタックとレジスタファイルは被割込みアルゴリズムで使用されたもとのものに切り換えられる。割込み戻しルーチンは装置の高電圧と読取り回路を適切な状態にして被割込みアルゴリズムの実行を続け、実行を始める安全地点である被割込みアルゴリズムのアドレスを提供することに責任を持つ。この時点で被割込みアルゴリズムの実行が続けられる。この過程の流れを図２０に図式的に示す。
【００６４】
被割込みアルゴリズムの実行が始まる地点はアルゴリズムが割り込まれた場所とは同じでないことがあることに留意する。これはアプリケーションにより決定される。例えば被割込みアルゴリズムがアレイ消去動作ならば、割込み前に行われた最後の消去動作が完了したことを検証するためにアルゴリズムは割込み後、検証命令で開始されることがある。アルゴリズムのアプリケーションが指令するように被割込みアルゴリズムの戻し地点を決定する他の基準を用いることができる。
【００６５】
更に被割込みアルゴリズムの安全戻し地点を識別するアドレスは、アルゴリズムがアルゴリズムの異なる「段階」ないし部分を実行することでアルゴリズムの実行中に変わることがある。従って割込み戻し地点はコードの実行中に更新されて異なる戻し地点を指定する。これは割込み戻しルーチンを修正ないしＩＲＲを更新して、アルゴリズム内の実行位置により異なる割込み戻しルーチンを指定することで行うことができる。例えば消去アルゴリズムでは、事前調整段階の戻し地点は、アルゴリズムの消去部分の戻し地点とは異なり、それはまたアルゴリズムの後調整段階の戻し地点とは異なるものとなる。
【００６６】
好適には割込みフラッグと大域割込みフラッグの２つの割込みフラッグをアレイコントローラに設ける。割込みが生じるには、動作が未決で、両フラッグが使用可能でなければならない。最初は使用不能状態の割込みフラッグは、アルゴリズム内で使用して局所的に割込みを可能、不能にする。従ってアルゴリズムは、アルゴリズムの実行時点でそれぞれ割込み可能及び割込み不能であるフラッグを使用可能、不能にするアレイコントローラに対する命令を持つことができる。割込みフラッグはコールないし戻し命令が実行されると自動的に不能にされる。これは特定サブルーチンに付いてＩＲＲが適切な戻しを指定するようにするためである。
【００６７】
最初は使用可能になっている大域割込みフラッグは、アルゴリズムが未決割込みを扱うことができない場合に割込みを不能にするのに使用する。図２１に示すように、被割込みアルゴリズムに対する割込み開始ルーチンがこの時点で割込みを処理することができないと判定すると、大域割込みフラッグが不能になり、割込み戻しルーチンに対するスキップ命令が実行される。
【００６８】
スキップ命令は依然割込み開始ルーチン中に実行されることを除いて戻し命令と見ることができる。スキップ命令によりアレイコントローラは割込み開始ルーチンを終了し、直ちに割込み戻しルーチンを実行して割込みアルゴリズムの実行をスキップする。従って割込み戻しルーチンが完了した時点で大域割込みフラッグが使用可能であれば、割込みアルゴリズムが完了し、動作待ち行列から取り除くことができる。大域割込みフラッグが不能であれば、ユーザインターフェイスは未決の動作を続いて実行できるように動作待ち行列に残す。
【００６９】
従ってこの構造はアレイ内のデータの変改や破壊を生じることなく事実条件的でフラッシュメモリシステム内で作動する割込みメカニズムを提供する。更にこのメカニズムは割込みの優先順位レベルに容易に対応することができる。例えば各々のアルゴリズムは優先順位レベルで識別できる。ユーザインターフェイス回路40は動作を二次待ち行列にロードし、割込みを要求するのに必要な信号を出し、現在実行している過程は未決のコマンド要求は高い優先度のものかどうかを判定する。そうであればその割込みは実行している動作を中断してアレイコントローラにより実行される（一次待ち行列に現在格納されている情報で記されているように）。
【００７０】
更にこの構造により消去動作中のプログラムが生じる。アレイ上の消去動作はよく知られた時間のかかる過程である。ブロックの消去動作が現在実行しており、別のブロックのプログラム動作が実行を待っている場合、割込みが生成され割込みアルゴリズムの適切性を割込み開始ルーチンがチェックし（例えばそれは既に消去しているブロックへのプログラムしようとする試みか？）、プログラムアルゴリズムの実行前に内部電源をオフ状態に安全にシーケンス化する。これを図２２、２３に単純化した流れ図で例示する。説明のために消去過程は全てのブロックデータが「０」にプログラムされた事前調整過程とブロックデータが「１」の値に設定された検証過程の２つの大きな部分からなると記述できる。過程流れ図に示すように、例えば別のブロックをプログラムする要求により生じる割込みは、高電圧回路操作中には許されないが、消去中には許される（図２３を参照のこと）。
【図面の簡単な説明】
【図１】  フラッシュメモリを含むコンピュータシステムのブロック図である。
【図２】  本発明のフラッシュメモリシステムのブロック図である。
【図３】  本発明のユーザインターフェイスのブロック図である。
【図４】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図５】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図６】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図７】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図８】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図９】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１０】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１１】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１２】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１３】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１４】  本発明のシステムで受け取るコマンドコードと実施されるアレイコントローラベクトルを例示した図表である。
【図１５】  例示的な状態レジスタビット定義を示したブロック図である。
【図１６】  本発明のブロック状態レジスタの構造を示したブロック図である。
【図１７】  ブロック状態レジスタのビットの例示的な構成を示す。
【図１８】  本発明の不揮発性メモリで利用するアレイコントローラのブロック図である。
【図１９】  プログラムカウンタ回路を示すブロック図である。
【図２０】  本発明の割込み過程の流れを示す図である。
【図２１】  本発明の割込み過程の流れを示す図である。
【図２２】  本発明の教示による消去過程中のプログラムを示す流れ図である。
【図２３】  本発明の教示による消去過程中のプログラムを示す流れ図である。
【符号の説明】
３００コンピュータシステム
３０２ＣＰＵ
３０４主記憶装置
３０６ユーザバス
３１０フラッシュメモリシステム
２０  フラッシュセルアレイ
３０  読取り／書込み経路回路
４０  ユーザインターフェイス回路
５０  アレイコントローラ
６０  制御アクセス回路
７０  ページバッファ回路
８０−８５  制御レジスタ回路
２００コマンド状態マシン
２１０一時待ち行列
２３０動作待ち行列
２５０ページバッファカウンタ
２６０状態レジスタ
【図１】
0003787167.tif 000002
【図２】
0003787167.tif 000003
【図３】
0003787167.tif 000004
【図４】
0003787167.tif 000005
【図５】
0003787167.tif 000006
【図６】
0003787167.tif 000007
【図７】
0003787167.tif 000008
【図８】
0003787167.tif 000009
【図９】
0003787167.tif 000010
【図１０】
0003787167.tif 000011
【図１１】
0003787167.tif 000012
【図１２】
0003787167.tif 000013
【図１３】
0003787167.tif 000014
【図１４】
0003787167.tif 000015
【図１５】
0003787167.tif 000016
【図１６】
0003787167.tif 000017
【図１７】
0003787167.tif 000018
【図１８】
0003787167.tif 000019
【図１９】
0003787167.tif 000020
【図２０】
0003787167.tif 000021
【図２１】
0003787167.tif 000022
【図２２】
0003787167.tif 000023
【図２３】
0003787167.tif 000024