(57)【特許請求の範囲】
【請求項１】
複数の半導体メモリと、それらを制御するメモリコントローラとを具備し、
前記複数の半導体メモリの各々は、複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有し、前記待機期間中に次の動作の開始を予告する予告信号を前記メモリコントローラへ通知すると共に、前記メモリコントローラから前記内部シーケンスの再開命令を受けたときに前記次の動作を開始し、
前記メモリコントローラは、前記複数の半導体メモリのうち所定の半導体メモリから前記予告信号を受けたとき、前記所定の半導体メモリの前記次の動作の動作期間中に消費する電流のピーク期間が前記所定の半導体メモリを除く前記複数の半導体メモリの前記ピーク期間と重ならないことを条件に、前記所定の半導体メモリに対して前記再開命令を通知する
ことを特徴とする半導体メモリシステム。
【請求項２】
前記メモリコントローラは、前記複数の半導体メモリの前記ピーク期間が重ならないことを条件に、前記複数の半導体メモリの各々に同一目的動作を並列に実行させ、
前記メモリコントローラは、前記所定の半導体メモリから前記同一目的動作を終了したことを示す前記予告信号を受けたとき、並列動作させている前記同一目的動作のうち、前記所定の半導体メモリの前記同一目的動作の動作期間と最も長い動作期間との差が基準値以上であることを条件に、直ちに前記所定の半導体メモリに対して前記再開命令を通知することを特徴とする請求項１に記載の半導体メモリシステム。
【請求項３】
前記メモリコントローラは、前記複数の半導体メモリのうち２つ以上の半導体メモリを選択し、前記２つ以上の半導体メモリの前記ピーク期間が重ならないことを条件に、前記２つ以上の半導体メモリの各々に同一目的動作を並列に実行させることを特徴とする請求項１に記載の半導体メモリシステム。
【請求項４】
前記２つ以上の半導体メモリの数は、前記同一目的動作がプログラム動作のときと、前記同一目的動作が前記プログラム動作の次に行われるプログラムベリファイ動作のときとで、互いに異なることを特徴とする請求項３に記載の半導体メモリシステム。
【請求項５】
前記プログラムベリファイ動作は、互いにピーク期間が異なる複数のプログラムベリファイ動作を備え、前記メモリコントローラは、前記複数の半導体メモリのうち同じプログラムベリファイ動作を実行する前記２つ以上の半導体メモリを選択することを特徴とする請求項４に記載の半導体メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、半導体メモリシステムに関する。
【背景技術】
【０００２】
近年、半導体メモリ（例えば、ＮＡＮＤフラッシュメモリ）は、様々なメモリシステムに適用され、それに伴い、そのメモリ容量の増大が課題となっている。そのため、記憶装置(storage device)内に複数のメモリチップを搭載し、さらには多値化を図るなどして、大容量化を実現する。このような記憶装置では、複数のメモリチップは、メモリコントローラにより制御される。
【０００３】
しかし、半導体メモリを用いたメモリシステム（半導体メモリシステム）は、プログラムの高速化を図るのが難しい。これは、微細化された半導体メモリや、多値化された半導体メモリなどに顕著である。そこで、メモリコントローラは、複数のメモリチップに対するデータプログラム動作を並列に行う制御を実行する。
【０００４】
ここで、プログラムを並列化したときに問題となるのが、各メモリチップが消費する消費電流のピーク期間の重なりである。複数のメモリチップの消費電流のピーク期間が重なると、半導体メモリシステム内で一時的に莫大な電流が消費されるため、これが他に悪影響を与えて、半導体メモリシステムの性能の劣化を招くことになる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１９７８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
実施形態は、データプログラムを並列化したときに消費電流のピーク期間の重なりを防止する技術を提案する。
【課題を解決するための手段】
【０００７】
実施形態によれば、複数の半導体メモリと、それらを制御するメモリコントローラとを具備し、前記複数の半導体メモリの各々は、複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有し、前記待機期間中に次の動作の開始を予告する予告信号を前記メモリコントローラへ通知すると共に、前記メモリコントローラから前記内部シーケンスの再開命令を受けたときに前記次の動作を開始し、前記メモリコントローラは、前記複数の半導体メモリのうち所定の半導体メモリから前記予告信号を受けたとき、前記所定の半導体メモリの前記次の動作の動作期間中に消費する電流のピーク期間が前記所定の半導体メモリを除く前記複数の半導体メモリの前記ピーク期間と重ならないことを条件に、前記所定の半導体メモリに対して前記再開命令を通知することを特徴とする半導体メモリシステム。
【図面の簡単な説明】
【０００８】
【図１】半導体メモリを示す図。
【図２】半導体メモリシステムを示す図。
【図３】複数の半導体メモリが同一動作を行う場合を示す図。
【図４】メモリセルの閾値分布の例を示す図。
【図５】複数の半導体メモリが異なる動作を行う場合を示す図。
【図６】半導体メモリを示す図。
【図７】半導体メモリシステムを示す図。
【図８】メモリコントローラを示す図。
【図９】予告信号の例を示す図。
【図１０】管理テーブルの例を示す図。
【図１１】再開命令を出す条件の例を示す図。
【図１２】メモリコントローラの動作を示すフローチャート。
【図１３】内部シーケンスの実施例を示す図。
【図１４】実施例と比較例を比較する図。
【図１５】並列動作させるチップ数の制限を示す図。
【図１６】内部シーケンスの実施例を示す図。
【図１７】内部シーケンスの実施例を示す図。
【図１８】並列動作を行うチップの選択方法の例を示すフローチャート。
【図１９】並列動作を行うチップの選択方法の例を示すフローチャート。
【図２０】プログラムベリファイの開始タイミングを示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら実施形態を説明する。
【００１０】
図１は、比較例としての半導体メモリ１Ｂを示している。  
半導体メモリ（メモリチップ）１は、メモリセルアレイ１１と、プログラムデータ又はリードデータを一時的に記憶するデータレジスタ１２とを有する。
【００１１】
センスアンプ１３は、リードデータをセンスし、これを増幅する。カラムアドレスバッファ１４は、カラムアドレス信号をバッファリングする。カラムアドレスデコーダ１５は、カラムアドレス信号をデコードし、メモリセルアレイ１１のカラムの選択を行う。
【００１２】
本例では、選択された８カラムについて、データレジスタ１２と入出力（Ｉ／Ｏ）回路１６との間でプログラムデータ／リードデータ（８ビットＤＡＴ［７：０］）の転送が行われる。
【００１３】
ロウアドレスバッファ１７は、ロウアドレス信号をバッファリングする。ロウアドレスデコーダ１８は、ロウアドレス信号をデコードし、メモリセルアレイ１１の１つのロウ（例えば、１ページ）の選択を行う。
【００１４】
アドレスレジスタ１９は、ロウアドレス信号及びカラムアドレス信号を一時的に記憶する。コマンドレジスタ２０は、例えば、プログラム動作、リード動作、イレーズ動作などを選択するコマンド信号を一時的に記憶する。
【００１５】
ステータスレジスタ２１は、プログラムベリファイ動作の結果（ステータスパス／ステータスフェイル）を一時的に記憶する。この結果は、Ｉ／Ｏ回路１６を介して、半導体メモリ１の外部にあるメモリコントローラ、さらにホストコントローラに転送される。
【００１６】
制御回路２２は、メモリセルアレイ１１に対するプログラム動作、リード動作、イレーズ動作などの各種の動作を制御する。
【００１７】
ロジック回路２３は、チップイネーブル信号ＣＥ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトイネーブル信号ＷＥ、リードイネーブル信号ＲＥ、及び、ライトプロテクト信号ＷＰを受け、これら制御信号に基づいて、制御回路２２が行うべき動作を指示する。
【００１８】
チップイネーブル信号ＣＥは、チップの選択／非選択を決定する。
【００１９】
コマンドラッチイネーブル信号ＣＬＥがイネーブル状態のとき、入力データ（コマンド信号）は、コマンドレジスタ２０に転送される。アドレスラッチイネーブル信号ＡＬＥがイネーブル状態のとき、入力データ（ロウ／カラムアドレス信号）は、アドレスレジスタ１９に転送される。
【００２０】
ライトイネーブル信号ＷＥがイネーブル状態のとき、プログラム動作が行われ、リードイネーブル信号ＲＥがイネーブル状態のとき、リード動作が行われる。ライトプロテクト信号ＷＰは、上書き(overwrite)の許可／禁止を示す信号である。ライトプロテクト信号ＷＰがイネーブル状態のとき、書き込みが禁止されるため、既に保存されているデータが変更されることはない。
【００２１】
高電圧発生回路２４は、プログラム動作時に使用する高電圧を発生し、これをメモリセルアレイ１１に供給する。
【００２２】
状態検出回路２５は、半導体メモリ１の現在の状態を検出し、これをメモリコントローラに知らせる。例えば、半導体メモリ１が動作中のときは、レディ／ビジー信号ＲＹ／ＢＹは、ビジー状態を示し、半導体メモリ１が待機中のときは、レディ／ビジー信号ＲＹ／ＢＹは、レディ状態を示す。
【００２３】
図２は、図１の半導体メモリを用いた半導体メモリシステムを示している。
【００２４】
記憶装置２６は、例えば、ＳＳＤ、メモリカード、ＵＳＢメモリなどのデータストレージ製品である。
【００２５】
記憶装置２６は、メモリ部２７及びメモリコントローラ２８を備える。メモリ部２７は、複数の半導体メモリ１，１，…を備える。メモリコントローラ２８と複数の半導体メモリ１，１，…とは、データバスを介して互いに接続される。
【００２６】
メモリコントローラ２８は、ホストコントローラ２からのコマンド信号を複数の半導体メモリ１，１，…に転送する。メモリコントローラ２８及び複数の半導体メモリ１，１，…間のデータの転送ビット幅ＤＡＴ［７：０］は、本例では、８ビットであるが、これに限定されることはない。
【００２７】
ここで、図２に示す半導体メモリシステムにおいてプログラムの高速化を図ろうとするとき、例えば、メモリコントローラ２８は、複数の半導体メモリ１，１，…に対するデータプログラム動作を並列に行う制御を実行する。
【００２８】
図３は、２つの半導体メモリＡ，Ｂに対して同一動作でプログラムを並列に行う制御の例を示している。同図において、progは、プログラム動作を表し、pvfy3は、プログラムベリファイ動作を表し、waitは、待機状態を表している。
【００２９】
２つの半導体メモリＡ，Ｂを単純に並列に動作させると、２つの半導体メモリＡ，Ｂが消費する消費電流のピーク期間が重なり、半導体メモリシステム内で一時的に莫大な電流が消費されるため、好ましくない（ピーク電流制御無し）。
【００３０】
この消費電流のピーク期間の重なりを避けるには、２つの半導体メモリＡ，Ｂの内部シーケンスをずらせばよい。即ち、２つの半導体メモリＡ，Ｂがプログラム動作を開始する時期を互いに異ならせる（ピーク電流制御有り）。
【００３１】
しかし、近年の半導体メモリシステムのプログラム動作に関しては、２つの半導体メモリＡ，Ｂが同一動作をすることは稀である。
【００３２】
例えば、データプログラミングは、プログラム動作とベリファイ動作の組み合わせから構成される。仮に、プログラム動作は、同一動作で行えたとしても、ベリファイ動作は、ＱＰＷ (Quick Pass Write)といったプログラム方法を採用するか否か、１つのメモリセルに複数ビットを記憶させる多値メモリのときはどのビットのプログラムを行うかなど、によって変わってくる。
【００３３】
図４は、４値メモリの閾値分布の例を示している。
【００３４】
この例では、イレーズ状態Erから下位ビットのプログラムを行う場合における、閾値分布A-lowerへの書き込みが行えたか否かを検証するベリファイ動作は、ベリファイリード電位Avr-lowerを用いる１回でよい。
【００３５】
これに対し、下位ビットがプログラムされた状態から上位ビットのプログラムを行うときは、閾値分布A, B, Cへの書き込みが行えたか否かを検証する必要がある。そのため、閾値分布A, B, Cへの書き込みが行えたか否かを検証するベリファイ動作は、最大で、ベリファイリード電位Avr, Bvr, Cvrを用いて３回行わなければならない。
【００３６】
従って、２つの半導体メモリＡ，Ｂを並列動作させても、互いのベリファイ期間が異なる場合がある。これに起因して、いずれか一方に無駄な時間が発生し、プログラムの高速化を十分に図ることができない場合がある。
【００３７】
図５は、２つの半導体メモリＡ，Ｂに対して異なる動作でプログラムを並列に行う制御の例を示している。同図において、progは、プログラム動作を表し、pvfy1, pvfy5は、ベリファイ動作を表し、waitは、待機状態を表している。
【００３８】
この例では、半導体メモリＡのプログラム期間をtsp、ベリファイ期間をtsv1とし、半導体メモリＢのプログラム期間をtsp、ベリファイ期間をtsv5とする。但し、tsv1 ＜ tsv5であり、tsv5は、最も長いベリファイ期間であるものとする。
【００３９】
２つの半導体メモリＡ，Ｂを単純に並列に動作させると、２つの半導体メモリＡ，Ｂが消費する消費電流のピーク期間が重なり、半導体メモリシステム内で一時的に莫大な電流が消費されるため、好ましくない（ピーク電流制御無し）。
【００４０】
また、２つの半導体メモリＡ，Ｂの内部シーケンスをtxだけシフトさせ、２つの半導体メモリＡ，Ｂがプログラム動作を開始する時期を互いに異ならせれば、消費電流のピーク期間の重なりを避けることができる（ピーク電流制御有り）。
【００４１】
しかし、メモリコントローラは、プログラムを開始するコマンドとプログラムデータを２つの半導体メモリＡ，Ｂに転送した後、２つの半導体メモリＡ，Ｂからプログラム完了の結果（ステータスパス：ベリファイ動作の結果、書き込み対象のメモリセルへのデータの書き込みが正常終了した／ステータスフェイル：ベリファイ動作の結果、書き込み対象のメモリセルへのデータの書き込みが正常終了しなかった）を受けるまでは、２つの半導体メモリＡ，Ｂに対して新たな指示を出さない。
【００４２】
従って、２つの半導体メモリＡ，Ｂは、それぞれ、１回のデータプログラミングがプログラム期間tspと最大のベリファイ期間（ワーストケース）tsv5とから構成されていると仮定し、プログラム完了の結果がステータスパスとなるまで、データプログラミングを繰り返し行う。
【００４３】
この時、半導体メモリＡの実際のベリファイ期間は、tsv1であるため、半導体メモリＡは、ベリファイ動作pvfy1を終了してから半導体メモリＢがベリファイ動作pvfy5を終了するまで、待機状態waitを維持しなければならず、この期間が無駄になる。
【００４４】
このように、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていると、ベリファイ期間が短い半導体メモリに無駄な時間が発生する。
【００４５】
そこで、以下の実施例では、複数の半導体メモリ（メモリチップ）と、それらを制御するメモリコントローラとを備える半導体メモリシステムにおいて、各半導体メモリは、内部シーケンス内の各動作（プログラム動作、ベリファイ動作など）を終了した後に待機状態となり、メモリコントローラは、各半導体メモリが実行する内部シーケンスの再開を各動作ごとに独立に制御する技術について提案する。
【００４６】
具体的には、複数の半導体メモリの各々は、連続する複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有すると共に、待機期間中に次の動作の開始を予告する２ビット以上の予告信号をメモリコントローラへ通知する。また、待機期間中に、導体メモリの各々がメモリコントローラから内部シーケンスの再開命令を受けたときに、複数の半導体メモリの各々は次の動作を開始する。
【００４７】
また、メモリコントローラは、複数の動作の各々について、動作期間及び動作期間中に消費する電流のピーク期間に関する管理テーブルを備え、複数の半導体メモリのうち所定の半導体メモリから予告信号を受けたとき、メモリコントローラは管理テーブルに基づいて、所定の半導体メモリの次の動作のピーク期間が所定の半導体メモリを除く複数の半導体メモリのピーク期間と重ならないことを条件に、所定の半導体メモリに対して再開命令を通知する。
【００４８】
これにより、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていても、ベリファイ期間が短い半導体メモリに無駄な時間が発生することを防止する。
【００４９】
図６は、実施例としての半導体メモリ１を示している。  
この半導体メモリ１の特徴は、制御回路２２’と予告信号生成回路３２にある。
【００５０】
制御回路２２’は、連続する複数の動作（プログラム動作、ベリファイ動作など）を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を設け、その待機期間中に予告信号生成回路３２に対して次の動作の開始を予告する２ビット以上の予告信号（ステータス信号）ＳＴＡの生成を指示する。
【００５１】
予告信号生成回路３２は、予告信号ＳＴＡを生成し、これをメモリコントローラへ通知する。また、制御回路２２’は、メモリコントローラから内部シーケンスの再開命令を受けたときに次の動作を開始する。
【００５２】
その他の構成については、比較例としての半導体メモリ（図１）と同じであるため、図１と同じ符号を付すことによりその詳細な説明を省略する。
【００５３】
即ち、図１に示すように、比較例としての半導体メモリでは、メモリコントローラは、半導体メモリ１の状態をレディ／ビジー信号（１ビット）ＲＹ／ＢＹでしか知ることができなかったのに対し、図６に示すように、実施例としての半導体メモリでは、メモリコントローラは、２ビット以上の予告信号ＳＴＡによりその状態を逐次知ることができる。
【００５４】
図７は、図６の半導体メモリを用いた半導体メモリシステムを示している。
【００５５】
記憶装置２６は、例えば、ＳＳＤ、メモリカード、ＵＳＢメモリなどのデータストレージ製品である。
【００５６】
記憶装置２６は、メモリ部２７及びメモリコントローラ２８を備える。メモリ部２７は、複数の半導体メモリ１，１，…を備える。メモリコントローラ２８と複数の半導体メモリ１，１，…とは、データバスを介して互いに接続される。
【００５７】
メモリコントローラ２８は、複数の半導体メモリ１，１，…から予告信号ＳＴＡを受け取ると共に、複数の半導体メモリ１，１，…に対して内部シーケンスの再開命令を指示する。メモリコントローラ２８及び複数の半導体メモリ１，１，…間のデータの転送ビット幅ＤＡＴ［７：０］は、本例では、８ビットであるが、これに限定されることはない。
【００５８】
図８は、図７のメモリコントローラを示している。  
メモリコントローラ２８は、記憶部２９、処理部３０及び制御部３１を備える。
【００５９】
記憶部２９は、図７の複数の半導体メモリ１，１，…が実行する内部シーケンス（プログラム動作、ベリファイ動作など）の各動作について、動作期間及び動作期間中に消費する電流のピーク期間に関する管理テーブルを記憶する。なお、この記憶部２９は半導体メモリ１の中に配置されていても良い。
【００６０】
例えば、予告信号ＳＴＡを例えば、４ビットとし、予告信号ＳＴＡと次の動作との関係を図９に示す関係に設定したとき、プログラム動作及びベリファイ動作に関する管理テーブルは、図１０に示すようになる。
【００６１】
ここで、図９及び図１０において、(not wait)は、現在ある動作を継続していることを表し、progは、プログラム動作を表し、pvfy1〜pvfy5は、それぞれプログラム動作後のベリファイ動作を表し、read1〜read3は、それぞれリード動作を表し、eraseは、イレーズ動作を表し、evfyは、イレーズ動作後のベリファイ動作を表し、(reserve)は、予備を表し、endは、内部シーケンスの終了を表している。
【００６２】
また、プログラム動作progの動作期間をtsp、ピーク電流が発生するピーク期間をtppとし、プログラムベリファイ動作pvfy1, pvfy2, pvfy3, pvfy4, pvfy5の動作期間をそれぞれtsv1, tsv2, tsv3, tsv4, tsv5、ピーク電流が発生するピーク期間をtpv、ピーク電流のピッチ（ピークピッチ）をtsvpとする。ピーク期間tpvはピーク位置に向けての立ち上がりから、ピーク位置から電流の変化量が少なくなった部分までの時間である。
【００６３】
プログラムベリファイ動作pvfy1, pvfy2, pvfy3, pvfy4, pvfy5のピーク期間tpv及びピークピッチtsvpは、ほぼ同じであり、ベリファイ動作pvfy1のピーク期間tpvは、動作期間tsv1内に２回存在し、ベリファイ動作pvfy2のピーク期間tpvは、動作期間tsv2内に３回存在し、ベリファイ動作pvfy3のピーク期間tpvは、動作期間tsv3内に４回存在し、ベリファイ動作pvfy4のピーク期間tpvは、動作期間tsv4内に５回存在し、ベリファイ動作pvfy5のピーク期間tpvは、動作期間tsv5内に６回存在するものとする。
【００６４】
さらに、tsv1 ＜ tsv2 ＜ tsv3 ＜ tsv4 ＜ tsv5とし、tsv5は、最も長いベリファイ期間であるものとする。
【００６５】
但し、上述の関係は、一例であり、記憶部２９に記憶される管理テーブルがこれに限定されるというものではない。また、ピーク期間tpvはそれぞれのベリファイ動作によって異なっていても良い。また、１つのベリファイ動作中に複数のピーク期間が有る場合には、それぞれのピーク期間が異なっていても良い。
【００６６】
メモリコントローラ２８内の制御部３１は、図７の複数の半導体メモリ１，１，…のうち所定の半導体メモリから予告信号ＳＴＡを受けたとき、例えば、図１０の管理テーブルに基づいて、所定の半導体メモリの次の動作のピーク期間tpp, tpvが所定の半導体メモリを除く図７の複数の半導体メモリ１，１，…のピーク期間tpp, tpvと重ならないことを条件に、所定の半導体メモリに対して内部シーケンスの再開命令を通知する。ここで、１つのベリファイ動作中に複数のピーク期間が有る場合には、最も大きいピーク電流mが流れるピーク期間tpv_m同士、または、ピーク期間tppとピーク期間tpv_mが重ならないようにしても良い。ここで、ピーク期間tpv_mは低い閾値分布（例えば、閾値分布Ａ）を検証するベリファイリード電位（例えば、ベリファイリード電位Avr）の場合に大きくなる傾向がある。
【００６７】
これにより、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていても、各半導体メモリは、内部シーケンス内の各動作を終了した後に待機状態となり、メモリコントローラは、各半導体メモリが実行する内部シーケンスの再開を動作ごとに独立に制御するため、例えば、ベリファイ期間が短い半導体メモリに無駄な時間が発生することがない。
【００６８】
図１１は、内部シーケンスの再開命令を出す条件の例を示している。
【００６９】
ここでは、メモリコントローラは、複数の半導体メモリのピーク期間tpvが重ならないことを条件に、複数の半導体メモリの各々に同一目的動作（本例では、プログラムベリファイ動作）を並列に実行させるものとする。
【００７０】
また、プログラム動作prog後に行われるプログラムベリファイ動作は、５種類（pvfy1, pvfy2, pvfy3, pvfy4, pvfy5）のうちから選択され、複数の半導体メモリのうち少なくとも２つのプログラムベリファイ動作の動作期間は、互いに異なるものとする。
【００７１】
メモリコントローラが所定の半導体メモリからプログラムベリファイ動作を終了したことを示す予告信号を受けたとき、その所定の半導体メモリに対して内部シーケンスの再開命令を出す条件は、以下の通りである。
【００７２】
・  全ての半導体メモリが待機状態にあること、又は、  
・  並列動作させているプログラムベリファイ動作のうち、所定の半導体メモリのプログラムベリファイ動作の動作期間と最も長い動作期間との差が基準値α以上であること
例えば、簡単のため、２つの半導体メモリＡ，Ｂについて考えると、半導体メモリＡのプログラムベリファイ動作pvfy1の動作期間がtsv1であり、半導体メモリＢのプログラムベリファイ動作pvfy4の動作期間がtsv4であるとき、メモリコントローラは、｜tsv4-tsv1｜＞基準値αであることを条件に、所定の半導体メモリに対して再開命令を出す。ここで、基準値αとは、この基準値αの間に並列動作する半導体メモリの次の動作が行える時間である。また、並列動作する半導体メモリの動作期間のスタートが異なっている場合、この異なった時間も基準値αに考慮される。例えば、半導体メモリＡの時間txが経過したときにメモリコントローラが半導体メモリＢに再開命令を出した場合は、半導体メモリの次の動作が行える時間からtxが差し引かれて基準値αが設定される。
【００７３】
以下、２つの半導体メモリＡ，Ｂのデータプログラミングを並列して行う場合の内部シーケンスの例について説明する。
【００７４】
図１２は、メモリコントローラの動作を示すフローチャートであり、図１３は、２つの半導体メモリＡ，Ｂの内部シーケンスを示している。
【００７５】
メモリコントローラは、２つの半導体メモリＡ，Ｂに対して、プログラムコマンド、プログラムアドレス及びプログラムデータを、それぞれ転送する。各半導体メモリＡ，Ｂは、メモリコントローラからプログラムコマンドを受け取った後にデータプログラミングの内部シーケンスを開始する。
【００７６】
［図１３の内部シーケンスの期間ｔ１］  
まず、各半導体メモリＡ，Ｂは、プログラムコマンドを受け取ると、内部シーケンスを待機状態waitとし、かつ、予告信号（ステータス信号）ＳＴＡとして“0001（プログラム動作prog）”をメモリコントローラに出力する。
【００７７】
メモリコントローラは、予告信号ＳＴＡに基づき、２つの半導体メモリＡ，Ｂが共にプログラム動作progを開始する前の待機状態にあることを認識する。そこで、メモリコントローラは、２つの半導体メモリＡ，Ｂに対して内部シーケンスの再開命令を出す。
【００７８】
ここで、２つの半導体メモリＡ，Ｂ内で消費する電流のピーク期間をずらすために、半導体メモリＡへの再開コマンドを出力するタイミングと、半導体メモリＢへの再開コマンドを出力するタイミングとを互いに異ならせる。本例では、半導体メモリＡへの再開コマンドを出力した後、例えば、時間txが経過したときに半導体メモリＢへの再開コマンドを出力する。ここで、txは、２つの半導体メモリＡ，Ｂの消費電流のピーク期間をシフトさせるための期間である。
【００７９】
具体的には、図１２のステップＳＴ１〜ＳＴ２に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号ＳＴＡに基づき、半導体メモリＡ (chip A)及び半導体メモリＢ (chip B)のステータス情報を確認する（Wait tstatus → Status read chip A and chip B）。
【００８０】
次に、図１２のステップＳＴ３〜ＳＴ４に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂのステータス情報がデータプログラミングの内部シーケンスの終了（プログラム完了の結果：ステータスパス or ステータスフェイル）を受け取っていないことを確認する（Chip A status = 1111? → No、Chip B status = 1111? → No）。
【００８１】
次に、図１２のステップＳＴ５に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂが共に内部シーケンス内のある動作を継続していないことを確認する（Chip A status = 0000? or Chip B status = 0000? → No）。
【００８２】
次に、図１２のステップＳＴ６に示すように、メモリコントローラは、管理テーブルに基づき、｜tsA - tsB｜＜基準値αを計算する。ここで、tsAは、半導体メモリＡのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリＢのステータス情報が示す次の動作の動作期間である。
【００８３】
即ち、２つの半導体メモリＡ，Ｂのステータス情報が示す次の動作は、共に、プログラム動作progであるため、例えば、図１０の管理テーブルの例によれば、tsA = tsB = tspとなる。
【００８４】
従って、図１２のステップＳＴ６では、メモリコントローラは、｜tsA - tsB｜＜α？ → Yesと判定し、ステップＳＴ７〜ＳＴ９を実行する。
【００８５】
例えば、メモリコントローラは、まず、半導体メモリＡへの再開コマンドを出力し（Chip A restart）、この後、例えば、さらに時間txが経過した後に（wait tx）、半導体メモリＢへの再開コマンドを出力する（Chip B restart）。ここで、txは、２つの半導体メモリＡ，Ｂの消費電流のピーク期間をシフトさせるための期間であり、例えば、tx = tppに設定される。tppは、プログラム動作で消費する電流のピーク期間である。
【００８６】
［図１３の内部シーケンスの期間ｔ２，ｔ３］  
まず、半導体メモリＡのプログラム動作progが終了すると、半導体メモリＡは、待機状態waitになり、予告信号（ステータス信号）ＳＴＡとして“0101（プログラムベリファイ動作pvfy4）”をメモリコントローラに出力する。
【００８７】
引き続き、半導体メモリＢのプログラム動作progが終了すると、半導体メモリＢは、待機状態waitになり、予告信号（ステータス信号）ＳＴＡとして“0010（プログラムベリファイ動作pvfy1）”をメモリコントローラに出力する。
【００８８】
メモリコントローラは、予告信号ＳＴＡに基づき、半導体メモリＡがプログラムベリファイ動作pvfy4を開始する前の待機状態にあることを認識し、かつ、半導体メモリＢがプログラムベリファイ動作pvfy1を開始する前の待機状態にあることを認識する。
【００８９】
そこで、メモリコントローラは、２つの半導体メモリＡ，Ｂに対して内部シーケンスの再開命令を出す。
【００９０】
ここで、２つの半導体メモリＡ，Ｂ内で消費する電流のピーク期間をずらすために、半導体メモリＡへの再開コマンドを出力するタイミングと、半導体メモリＢへの再開コマンドを出力するタイミングとを互いに異ならせる。本例では、半導体メモリＡへの再開コマンドを出力した後、例えば、時間txが経過したときに半導体メモリＢへの再開コマンドを出力する。
【００９１】
具体的には、図１２のステップＳＴ１〜ＳＴ２に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号ＳＴＡに基づき、半導体メモリＡ (chip A)及び半導体メモリＢ (chip B)のステータス情報を認識する（Wait tstatus → Status read chip A and chip B）。
【００９２】
次に、図１２のステップＳＴ３〜ＳＴ４に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂのステータス情報がデータプログラミングの内部シーケンスの終了を示していないことを確認する（Chip A status = 1111? → No、Chip B status = 1111? → No）。
【００９３】
次に、図１２のステップＳＴ５に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂが共に内部シーケンス内のある動作を継続していないことを確認する（Chip A status = 0000? or Chip B status = 0000? → No）。
【００９４】
次に、図１２のステップＳＴ６に示すように、メモリコントローラは、管理テーブルに基づき、｜tsA - tsB｜＜基準値αを計算する。ここで、tsAは、半導体メモリＡのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリＢのステータス情報が示す次の動作の動作期間である。
【００９５】
即ち、半導体メモリＡのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy4であるため、例えば、図１０の管理テーブルの例によれば、tsA = tsv4となる。また、半導体メモリＢのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy1であるため、例えば、図１０の管理テーブルの例によれば、tsB = tsv1となる。
【００９６】
ここで、｜tsA - tsB｜≧基準値αであると仮定すると、図１２のステップＳＴ６では、メモリコントローラは、｜tsA - tsB｜＜α？ → Noと判定し、引き続き、図１２のステップＳＴ１０に示すように、tsA ＞ tsBであるか否かを確認する。
【００９７】
tsA ＞ tsBのときは、ステップＳＴ１１〜ＳＴ１５を実行し、tsA ＜ tsBのときは、ステップＳＴ１６〜ＳＴ２０を実行する。
【００９８】
前者のステップＳＴ１１〜ＳＴ１５は、半導体チップＢの動作期間が半導体チップＡの動作期間よりも短い場合であり、半導体チップＢで生じる無駄な時間をなくすため、半導体チップＢの動作が終了した後、半導体チップＡの動作が終了する前に、半導体チップＢの次の動作を再開することに特徴を有する。
【００９９】
ここで、ステップＳＴ１１〜ＳＴ１２とステップＳＴ１３〜ＳＴ１４とを入れ替えても問題はない。
【０１００】
同様に、後者のステップＳＴ１６〜ＳＴ２０は、半導体チップＡの動作期間が半導体チップＢの動作期間よりも短い場合であり、半導体チップＡで生じる無駄な時間をなくすため、半導体チップＡの動作が終了した後、半導体チップＢの動作が終了する前に、半導体チップＡの次の動作を再開することに特徴を有する。
【０１０１】
ここで、ステップＳＴ１６〜ＳＴ１７とステップＳＴ１８〜ＳＴ１９とを入れ替えても問題はない。
【０１０２】
図１３の内部シーケンスの例では、半導体メモリＡのプログラムベリファイ動作pvfy4の動作期間tsA（= tsv4）は、半導体メモリＢのプログラムベリファイ動作pvfy1の動作期間tsB（= tsv1）よりも長い。
【０１０３】
従って、図１２のステップＳＴ１０では、メモリコントローラは、tsA ＞ tsB？ → Yesと判定し、引き続き、図１２のステップＳＴ１１〜ＳＴ１５を実行する。
【０１０４】
例えば、メモリコントローラは、まず、半導体メモリＡへの再開コマンドを出力し（Chip A restart）、この後、例えば、さらに時間txが経過した後に（wait tx）、半導体メモリＢへの再開コマンドを出力する（Chip B restart）。ここで、txは、２つの半導体メモリＡ，Ｂの消費電流のピーク期間をシフトさせるための期間であり、ＳＴ１２のwait txは、例えば、tx = tpvに設定される。tpvは、ベリファイ動作で消費する電流のピーク期間tpvである。
【０１０５】
この後、半導体メモリＢのプログラムベリファイ動作pvfy1が終了すると、半導体メモリＢは、待機状態waitになり、書き込まれるべきメモリセルのうち全てのメモリセルの書き込みが終了していない場合（ベリファイリードでＮＧとなったメモリセルが有る場合）は、予告信号（ステータス信号）ＳＴＡとして“0001（プログラム動作prog）”をメモリコントローラに出力する。この場合、所定の値だけ上昇させた書き込み電圧でプログラム動作を行う場合がある。
【０１０６】
また、メモリコントローラは、半導体メモリＢへの再開コマンドを前回の半導体メモリＢへの再開コマンド（ＳＴ１３）からＳＴ１４のNext tx後に、半導体メモリＢへ出力する。図１３の内部シーケンスの例では、Next tx=tsv1である。メモリコントローラがＳＴ１３の再開コマンドを半導体メモリＢへ出力した時点で、半導体メモリＢは予告信号（ステータス信号）ＳＴＡとして“0010（プログラムベリファイ動作pvfy1）”をメモリコントローラに出力している。すなわち、メモリコントローラがＳＴ１３の再開コマンドを半導体メモリＢへ出力した時点で、図１０に示す、管理テーブルの例からNext tx=tsv1となることが解っている。その結果、メモリコントローラは、半導体メモリＢから予告信号ＳＴＡを受け取ることなく、直ちに、半導体メモリＢへの再開コマンドを出力することができ、半導体メモリＢの動作時間を短縮することができる。
【０１０７】
［図１３の内部シーケンスの期間ｔ４，ｔ５］  
半導体メモリＡのプログラムベリファイ動作pvfy4が終了すると、半導体メモリＡは、待機状態waitになり、予告信号（ステータス信号）ＳＴＡとして“0001（プログラム動作prog）”をメモリコントローラに出力する。
【０１０８】
メモリコントローラは、予告信号ＳＴＡに基づき、半導体メモリＡがプログラム動作progを開始する前の待機状態にあることを認識する。また、この時、半導体メモリＢは、既に、次のプログラム動作を実行中である。
【０１０９】
そこで、メモリコントローラは、半導体メモリＢのプログラム動作progが終了したことを確認した後に、半導体メモリＡに対して内部シーケンスの再開命令を出す。
【０１１０】
具体的には、図１２のステップＳＴ１〜ＳＴ２に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号ＳＴＡに基づき、半導体メモリＡ (chip A)及び半導体メモリＢ (chip B)のステータス情報を認識する（Wait tstatus → Status read chip A and chip B）。
【０１１１】
次に、図１２のステップＳＴ３〜ＳＴ４に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂがデータプログラミングの内部シーケンスの終了を示していないことを確認する（Chip A status = 1111? → No、Chip B status = 1111? → No）。
【０１１２】
次に、図１２のステップＳＴ５に示すように、メモリコントローラは、２つの半導体メモリＡ，Ｂが共に内部シーケンス内のある動作を継続していないことを確認する（Chip A status = 0000? or Chip B status = 0000? → Yes）。
【０１１３】
ここで、本例では、半導体メモリＢが、既に、次のプログラム動作progを継続中であるため、メモリコントローラは、半導体メモリＡへの再開命令を出すタイミングを、半導体メモリＢのプログラム動作progが終了するまで遅らせる。すなわち、ＳＴ１に戻り、半導体メモリＢの予告信号ＳＴＡが”0000”と異なる信号を受け取るまでこの動作（ＳＴ１→ＳＴ２→ＳＴ３→ＳＴ４→ＳＴ５→ＳＴ１）が繰り返される。
【０１１４】
半導体メモリＢのプログラム動作progが終了すると、半導体メモリＢは、待機状態waitになり、予告信号（ステータス信号）ＳＴＡとして“0011（プログラムベリファイ動作pvfy2）”をメモリコントローラに出力する。
【０１１５】
メモリコントローラは、半導体メモリＢからの予告信号ＳＴＡに基づき、半導体メモリＢがプログラムベリファイ動作pvfy2を開始する前の待機状態にあることを認識する。
【０１１６】
そこで、メモリコントローラは、まず、半導体メモリＡに対して内部シーケンスの再開命令を出し、この後、半導体メモリＢに対して内部シーケンスの再開命令を出す。
【０１１７】
具体的には、図１２のステップＳＴ６に示すように、メモリコントローラは、管理テーブルに基づき、｜tsA - tsB｜＜基準値αであるか否か、を計算する。ここで、tsAは、半導体メモリＡのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリＢのステータス情報が示す次の動作の動作期間である。
【０１１８】
即ち、半導体メモリＡのステータス情報が示す次の動作は、プログラム動作progであるため、例えば、図１０の管理テーブルの例によれば、tsA = tspとなる。また、半導体メモリＢのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy2であるため、例えば、図１０の管理テーブルの例によれば、tsB = tsv2となる。
【０１１９】
ここで、図１２のステップＳＴ６において、例えば、｜tsA - tsB｜＜α？ → Yesであると仮定すると、メモリコントローラは、ステップＳＴ７〜ＳＴ９を実行する。
【０１２０】
例えば、メモリコントローラは、まず、半導体メモリＡへの再開コマンドを出力し（Chip A restart）、この後、例えば、さらに時間txが経過した後に（wait tx）、半導体メモリＢへの再開コマンドを出力する（Chip B restart）。ここで、txは、２つの半導体メモリＡ，Ｂの消費電流のピーク期間をシフトさせるための期間であり、例えば、tx = tppに設定される。
【０１２１】
［その他］  
図１３の内部シーケンスにおいて、２つの半導体メモリＡ，Ｂの内部シーケンスのいずれか一方が先に終了したときは、他方について内部シーケンスが継続される。
【０１２２】
具体的には、図１２のステップＳＴ１〜ＳＴ２に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号ＳＴＡに基づき、半導体メモリＡ (chip A)及び半導体メモリＢ (chip B)のステータス情報を認識する（Wait tstatus → Status read chip A and chip B）。
【０１２３】
次に、図１２のステップＳＴ３〜ＳＴ４に示すように、メモリコントローラは、半導体メモリＡのステータス情報が内部シーケンスを継続中で、半導体メモリＢのステータス情報が内部シーケンスを終了していることを確認すると（Chip A status = 1111? → No、Chip B status = 1111? → Yes）、引き続き、図１２のステップＳＴ２１〜ＳＴ２２を実行する。
【０１２４】
即ち、半導体メモリＡが内部シーケンスを終了し、Chip A status = 1111? → Yesとなるまで、その内部シーケンス内の動作の終了及び次の動作の再開を繰り返す。
【０１２５】
また、図１２のステップＳＴ３及びＳＴ２３に示すように、メモリコントローラは、半導体メモリＡのステータス情報が内部シーケンスを終了し、半導体メモリＢのステータス情報が内部シーケンスを継続中であることを確認すると（Chip A status = 1111? → Yes、Chip B status = 1111? → No）、引き続き、図１２のステップＳＴ２４〜ＳＴ２５を実行する。
【０１２６】
即ち、半導体メモリＢが内部シーケンスを終了し、Chip B status = 1111? → Yesとなるまで、その内部シーケンス内の動作の終了及び次の動作の再開を繰り返す。
【０１２７】
図１４は、実施例と比較例の内部シーケンスを比較して示している。
【０１２８】
この比較では、２つの半導体メモリＡ，Ｂのプログラムベリファイ動作pvfy1, pvfy4の動作期間が異なることを前提とする。
【０１２９】
比較例では、２つの半導体メモリＡ，Ｂのステータス情報をコントローラに報告することはないため、プログラムベリファイ動作の動作期間は、ワーストケースを想定して最大値に設定される。このため、２つの半導体メモリＡ，Ｂが共に待機状態になるまでに無駄な時間が発生する。
【０１３０】
これに対し、実施例では、２つの半導体メモリＡ，Ｂのステータス情報を予告信号として逐次コントローラに報告するため、メモリコントローラは、半導体メモリＢの動作が終了した後に、半導体メモリＡの動作の終了を待つことなく、直ちに、半導体メモリＢの次の動作を再開することができる。
【０１３１】
従って、半導体メモリＢの次の動作を前倒し処理することにより、比較例で生じていた無駄な時間をなくすことができ、プログラムを並列化したときに消費電流のピーク期間の重なりを防止できると共に、プログラムの高速化をさらに図ることができる。
【０１３２】
ここで、比較例においては、プログラム動作とベリファイ動作の間に待機期間waitがない。しかし、この待機時間waitはメモリコントローラが半導体メモリのステータス情報を読み取り、演算し、再開コマンドを出力する程度の時間（ステータスリード時間と称する場合がある）であり、数μsecと非常に短い。すなわち、待機時間にステータスリード時間とピーク期間を考慮したとしても、待機時間waitよりも半導体メモリＢの次の動作を前倒し処理する時間の方が長い。例えば、待機期間waitは約１５μsecであり、１回のベリファイリードに必要な時間は約２５μsecから１００μsecである。すなわち、半導体メモリＡ，Ｂの１回のベリファイリードに必要な時間の差は約５０μsecになる場合もある。半導体メモリ間のベリファイリードに必要な時間の差よりも待機時間waitは十分短いので、データプログラミングを前倒し処理することが可能である。
【０１３３】
次に、複数の半導体メモリ（メモリチップ）を備える半導体メモリシステムにおいて、同一目的動作（例えば、プログラムベリファイ動作）を並列に実行させる２つ以上の半導体メモリを選択し、さらなる高速化を図る技術を説明する。
【０１３４】
例えば、データプログラミングを実行する内部シーケンスは、プログラム動作とプログラムベリファイ動作の繰り返しである。
【０１３５】
ここで、図１５に示すように、プログラム動作progの動作期間は、tspであり、プログラム動作progで消費する電流のピーク期間は、tppである。従って、プログラム動作progのみを考えれば、Ｎp＜tsp/tpp＜Ｎp＋１（但し、Ｎpは自然数）のとき、最大、Ｎp個の半導体メモリについてプログラムの並列化を行うことができる。
【０１３６】
同様に、プログラムベリファイ動作pvfy1のピーク電流のピッチ（ピークピッチ）は、tsvpであり、プログラムベリファイ動作pvfy1で消費する電流のピーク期間は、tpvである。従って、プログラムベリファイ動作pvfy1のみを考えれば、Ｎpv＜tsvp/tpv＜Ｎpv＋１（但し、Ｎpvは自然数）のとき、最大、Ｎpv個の半導体メモリについてプログラムの並列化を行うことができる。
【０１３７】
しかし、例えば、図５に示す比較例としての内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy1とが一体化され、両者が連続して行われる。即ち、プログラム動作progとプログラムベリファイ動作pvfy1との間に待機期間waitがない。
【０１３８】
このため、プログラム動作prog及びプログラムベリファイ動作pvfy1を並列に実行させる半導体メモリの数は、Ｎp及びＮpvのうち小さいほうに設定される。
【０１３９】
Ｎp＞Ｎpvであるため、並列化させる半導体メモリの数は、プログラムベリファイ動作pvfy1におけるピークピッチtsvpとピーク期間tpvにより決定される。
【０１４０】
しかし、この場合、図１５に示すように、プログラム動作progの動作期間tsp内に無駄な時間が発生する。
【０１４１】
この例では、プログラム動作progのみをとってみれば、４個以上の半導体メモリを並列動作させることができるのに、プログラムベリファイ動作pvfy1において最大で３個の半導体メモリＡ，Ｂ，Ｃしか並列動作させることができないため、結果として、プログラム動作progの動作期間tsp内に無駄な時間が発生する。
【０１４２】
これに対し、上述の実施例（図６〜図１４）を採用すると、プログラム動作progとプログラムベリファイ動作pvfy1との間に待機期間waitが設けられ、その待機期間wait内にステータス情報をメモリコントローラに通知することができる。即ち、プログラム動作progの終了／再開とプログラムベリファイ動作pvfy1の終了／再開とを、半導体メモリごとに独立に制御可能である。
【０１４３】
従って、メモリコントローラは、内部シーケンスで実行される動作ごとに、複数の半導体メモリのうち２つ以上の半導体メモリを選択し、これら２つ以上の半導体メモリで消費する電流のピーク期間が重ならないことを条件に、これら２つ以上の半導体メモリの各々に同一目的動作（例えば、プログラムベリファイ動作）を並列に実行させ、この無駄な時間をなくすことができる。
【０１４４】
以下、６個の半導体メモリを有する半導体メモリシステムの例を説明する。
【０１４５】
図１６は、同一目的動作を実行させる２つ以上の半導体メモリを選択する例を示している。同図では、実施例と比較例とを示し、実施例の効果を明確化している。
【０１４６】
本例では、同一目的動作がプログラム動作のときに、６個の半導体メモリを選択し、これらを並列動作させ、かつ、同一目的動作がプログラム動作の次に行われるプログラムベリファイ動作のときに、３個の半導体メモリを選択し、これらを並列動作させる。
【０１４７】
ここで、プログラム動作progの動作期間は、tspであり、プログラム動作progで消費する電流のピーク期間は、tppとする。また、Ｎp＜tsp/tpp＜Ｎp＋１（但し、Ｎp＝６）であり、最大、６個の半導体メモリを並列化できるものとする。
【０１４８】
さらに、プログラムベリファイ動作pvfy2, pvfy3のピーク電流のピッチ（ピークピッチ）は、tsvpであり、プログラムベリファイ動作pvfy2, pvfy3で消費する電流のピーク期間は、tpvとする。また、Ｎpv＜tsvp/tpv＜Ｎpv＋１（但し、Ｎpv＝３）とし、最大、３個の半導体メモリを並列化できるものとする。
【０１４９】
比較例の内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy2, pvfy3が連続して行われ、それらの間に待機期間waitがない。このため、プログラム動作prog及びプログラムベリファイ動作pvfy2, pvfy3を並列に実行させる半導体メモリの数は、３個に設定される。
【０１５０】
この例では、プログラム動作progのみをとってみれば、６個の半導体メモリを並列動作させることができるのに、結果的には、３個の半導体メモリＡ，Ｂ，Ｃを並列動作させ、１回目のデータプログラミング（prog+pvfy2/prog+pvfy3）が終了した後に、引き続き、３個の半導体メモリＤ，Ｅ，Ｆを並列動作させ、１回目のデータプログラミング（prog+pvfy2/prog+pvfy3）を実行する。
【０１５１】
従って、プログラム動作progの動作期間tsp内に無駄な時間が発生する。
【０１５２】
これに対し、実施例の内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy2, pvfy3との間に待機期間waitが設けられ、その待機期間wait内にステータス情報をメモリコントローラに通知することができる。即ち、プログラム動作progの終了／再開とプログラムベリファイ動作pvfy1の終了／再開とを、半導体メモリごとに独立に制御可能である。
【０１５３】
このため、プログラム動作progを並列に実行させる半導体メモリの数は、最大値としての６個に設定でき、かつ、プログラムベリファイ動作pvfy2, pvfy3を並列に実行させる半導体メモリの数も、最大値としての６個に設定できる。
【０１５４】
この例では、まず、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆについて、プログラム動作progを並列化する。最初の３個の半導体メモリＡ，Ｂ，Ｃのプログラム動作progが終了した後、引き続き、それらの半導体メモリＡ，Ｂ，Ｃについて、プログラムベリファイ動作pvfy2, pvfy3を並列化する。
【０１５５】
尚、最初の３個の半導体メモリＡ，Ｂ，Ｃのプログラムベリファイ動作pvfy2, pvfy3を開始するタイミングは、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆで消費する電流のピーク期間が重ならなければ、残りの３個の半導体メモリＤ，Ｅ，Ｆのプログラム動作progが終了する前であってもよい。
【０１５６】
残りの３個の半導体メモリＤ，Ｅ，Ｆのプログラム動作progが終了すると、それらの半導体メモリＤ，Ｅ，Ｆは、最初の３個の半導体メモリＡ，Ｂ，Ｃのプログラムベリファイ動作pvfy2, pvfy3が終了するまで、待機期間waitを維持する。
【０１５７】
そして、最初の３個の半導体メモリＡ，Ｂ，Ｃのプログラムベリファイ動作pvfy2, pvfy3が終了した後、引き続き、残りの半導体メモリＤ，Ｅ，Ｆについて、プログラムベリファイ動作pvfy2, pvfy3を並列化する。
【０１５８】
このように、メモリコントローラは、内部シーケンスで実行される動作ごとに、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのうち２つ以上の半導体メモリを選択し、これら２つ以上の半導体メモリの各々に同一目的動作を並列に実行させる。
【０１５９】
従って、プログラム動作progの動作期間tsp内に無駄な時間が発生することはなく、２回目のデータプログラミングを前倒し処理できる。これに伴い、半導体メモリシステムのさらなる高速化を実現できる。
【０１６０】
図１７は、同一目的動作を実行させる２つ以上の半導体メモリを選択する他の例を示している。同図でも、実施例と比較例とを示し、実施例の効果を明確化している。
【０１６１】
本例では、同一目的動作がプログラム動作のときに、６個の半導体メモリを選択し、これらを並列動作させ、かつ、同一目的動作がプログラム動作の次に行われるプログラムベリファイ動作のときに、３個の半導体メモリを選択し、これらを並列動作させる。
【０１６２】
図１７の例が図１６の例と異なる点は、同一目的動作としてプログラムベリファイ動作を並列化するときに、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのうち同じベリファイ動作を実行する２つ以上の半導体メモリを選択し、これら２つ以上の半導体メモリのプログラムベリファイ動作を並列化することにある。
【０１６３】
この例では、まず、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆについて、プログラム動作progを並列化する。最初の２個の半導体メモリＡ，Ｂのプログラム動作progが終了した後、引き続き、それらの半導体メモリＡ，Ｂについて、プログラムベリファイ動作pvfy2を並列化する。
【０１６４】
次に、２個の半導体メモリＣ，Ｄのプログラム動作progが終了する。メモリコントローラは、これらの半導体メモリＣ，Ｄの待機期間中に、これらの次の動作がプログラムベリファイ動作pvfy3であることを確認する。しかし、プログラムベリファイ動作pvfy3は、最初の２個の半導体メモリＡ，Ｂのプログラムベリファイ動作pvfy2と異なるため、待機状態waitを継続する。
【０１６５】
次に、半導体メモリＥのプログラム動作progが終了する。メモリコントローラは、半導体メモリＥの待機期間中に、その次の動作がプログラムベリファイ動作pvfy2であることを確認する。プログラムベリファイ動作pvfy2は、最初の２個の半導体メモリＡ，Ｂのプログラムベリファイ動作pvfy2と同じであるため、半導体メモリＡ，Ｂ，Ｅについて、プログラムベリファイ動作pvfy2を並列化する。
【０１６６】
次に、半導体メモリＦのプログラム動作progが終了する。メモリコントローラは、半導体メモリＦの待機期間中に、その次の動作がプログラムベリファイ動作pvfy3であることを確認する。しかし、プログラムベリファイ動作pvfy3は、最初の２個の半導体メモリＡ，Ｂのプログラムベリファイ動作pvfy2と異なるため、待機状態waitを継続する。
【０１６７】
そして、３個の半導体メモリＡ，Ｂ，Ｅのプログラムベリファイ動作pvfy2が終了した後、引き続き、残りの半導体メモリＣ，Ｄ，Ｆについて、プログラムベリファイ動作pvfy3を並列化する。
【０１６８】
このように、メモリコントローラは、内部シーケンスで実行される動作ごとに、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのうち、同じベリファイ動作をする２つ以上の半導体メモリを選択し、これら２つ以上の半導体メモリの各々に同一目的動作としてのプログラムベリファイ動作を並列に実行させる。
【０１６９】
従って、プログラム動作progの動作期間tsp内に無駄な時間が発生することはなく、２回目のデータプログラミングを前倒し処理できる。これに伴い、半導体メモリシステムのさらなる高速化を実現できる。
【０１７０】
尚、図１６及び図１７から明らかなように、同じ動作を並列化する手法は、異なる動作を並列化する手法よりも前倒し期間を長くできるため、無駄な時間をなくす効果がさらに顕著に現れる。
【０１７１】
但し、図１７の例のように、常に６個の半導体メモリのうちの半分ずつが同じ動作をするとは限らないため、その場合についても検討しておく必要がある。
【０１７２】
例えば、図１７の例では、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのうちの３個がプログラムベリファイ動作pvfy2を実行し、残りの３個がプログラムベリファイ動作pvfy3を実行する。しかし、例えば、半導体メモリＡ，Ｂがpvfy2を実行し、半導体メモリＣ，Ｄ，Ｅ，Ｆがpvfy3を実行する場合、これら６個の半導体メモリを半分ずつに分けることができない。
【０１７３】
そこで、この場合、最初にプログラム動作progが終了する半導体メモリＡと、これと同じ動作(pvfy2)をする半導体メモリＢと、それらの動作に最も近い動作(pvfy3)をし、かつ、最も先にプログラム動作progが終了する半導体メモリＣと、を並列動作させる。また、残りの３個の半導体メモリＤ，Ｅ，Ｆについて、プログラムベリファイ動作Pvfy3を並列化する。
【０１７４】
また、例えば、半導体メモリＡ，Ｂがpvfy2を実行し、半導体メモリＣ，Ｅがpvfy4を実行し、半導体メモリＤがpvfy3を実行し、半導体メモリＦがpvfy5を実行する場合、最初にプログラム動作progが終了する半導体メモリＡと、これと同じ動作(pvfy2)をする半導体メモリＢと、それらの動作に最も近い動作(pvfy3)をし、かつ、最も先にプログラム動作progが終了する半導体メモリＤと、を並列動作させる。また、残りの３個の半導体メモリＣ，Ｅ，Ｆについて、プログラムベリファイ動作Pvfy4, Pvfy5を並列化する。
【０１７５】
以上をまとめると、最初にプログラム動作progが終了する半導体メモリＡのステータス（プログラムベリファイの種類）を確認し、その半導体メモリＡのステータスと同じ又はそれに最も近いステータスを持つ２個の半導体メモリを選択する。そして、これら３個の半導体メモリについて並列動作を実行する、というのが本例の主旨である。
【０１７６】
尚、本例では、半導体メモリの合計数を６個としているが、４個、８個、１０個、１２個等であっても構わない。
【０１７７】
また、本例において、最初にプログラム動作progが終了する半導体メモリＡのステータスと同じ又はそれに最も近いステータスを持つ２個の半導体メモリを選択するに当たっては、全ての半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのプログラム動作progを終えた後に、これら全ての半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのステータスを確認することにより行ってもよい。
【０１７８】
この場合、図１７の例に比べると、最初にプログラム動作progが終了する半導体メモリＡについて、プログラムベリファイ動作(Pvfy2)を開始させる時期が遅れるが、全体的にみて、図１７の例よりもプログラム動作の速度を向上できる場合もある。
【０１７９】
従って、いずれを採用するかは、tpp、tpv、tsp、tsv1〜tsv5、tsvpなどの値を考慮して最もプログラム時間を短縮できるものを総合的に判断する。
【０１８０】
図１８は、プログラムベリファイ動作を並列化する複数の半導体メモリの選択方法について示すフローチャートである。
【０１８１】
本例では、図１７の例と同様に、６個の半導体メモリ(chip)Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのうち３個ずつを並列動作させる。これら半導体メモリのプログラム動作progは、並列化され、かつ、その開始時期が少しずつシフトされる。従って、プログラム動作progについては、半導体メモリＡから半導体メモリＦに向かって順番に終了する。
【０１８２】
本例の特徴は、最初の半導体メモリＡについては、プログラム動作が終了した後の所定時期にプログラムベリファイ動作を開始すると共に、残りの５個の半導体メモリＢ，Ｃ，Ｄ，Ｅ，Ｆについては、それら全てのプログラム動作が終了した後に、これら半導体メモリＢ，Ｃ，Ｄ，Ｅ，Ｆのステータスを確認し、半導体メモリＡに並列化させる２個の半導体メモリを選択することにある。
【０１８３】
まず、６個の半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆについて、プログラム動作progを並列化する（ステップＳＴ１〜ＳＴ１２）。
【０１８４】
最初にプログラム動作progが終了する半導体メモリＡについては、プログラム動作progが終了した後の所定時期に、プログラムベリファイ動作を実行する（ステップＳＴ１３〜ＳＴ１５）。
【０１８５】
次に、全ての半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのプログラム動作progが終了した後に、これら全ての半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのステータスを確認する（ステップＳＴ１６）。この確認は、半導体メモリＡで生じるピーク電流の待機期間に行うのが望ましい。
【０１８６】
そして、半導体メモリＡのステータスと同じ又はそれに最も近いステータスを持つ１個の半導体メモリを選択する。同じステータスを持つ半導体メモリが１個以上存在すれば、それらのうち最も先にプログラム動作が終了したものを選択する。
【０１８７】
また、半導体メモリＡのステータスと同じステータスを持つ半導体メモリが存在しないときは、それに最も近いステータスを持つ半導体メモリのうち最も先にプログラム動作が終了したものを選択する。
【０１８８】
ここでは、半導体メモリＢがそれに該当するものとする。従って、これら２個の半導体メモリＡ，Ｂについて並列動作を実行する（ステップＳＴ１７）。
【０１８９】
この後、再び、全ての半導体メモリＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのステータスを確認する（ステップＳＴ１８）。この確認は、半導体メモリＢで生じるピーク電流の待機期間に行うのが望ましい。
【０１９０】
そして、半導体メモリＡのステータスと同じ又はそれに最も近いステータスを持つ１個の半導体メモリを選択する。同じステータスを持つ半導体メモリが１個以上存在すれば、それらのうち最も先にプログラム動作が終了したものを選択する。
【０１９１】
また、半導体メモリＡのステータスと同じステータスを持つ半導体メモリが存在しないときは、それに最も近いステータスを持つ半導体メモリのうち最も先にプログラム動作が終了したものを選択する。
【０１９２】
ここでは、半導体メモリＣがそれに該当するものとする。従って、これら３個の半導体メモリＡ，Ｂ，Ｃについて並列動作を実行する（ステップＳＴ１９）。
【０１９３】
そして、３個の半導体メモリＡ，Ｂ，Ｃについて、プログラムベリファイ動作が終了した後に、残りの３個の半導体メモリＤ，Ｅ，Ｆについて並列動作を実行する（ステップＳＴ２０〜ＳＴ２６）。
【０１９４】
図１９は、図１８の比較例としてのフローチャートを示している。
【０１９５】
この比較例では、全ての半導体メモリ(chip)Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆについて、プログラム動作prog後にステータス（プログラムベリファイの種類）を確認することなく、一律に、先にプログラム動作progが終了する３個の半導体メモリＡ，Ｂ，Ｃを並列動作させ、また、後にプログラム動作progが終了する３個の半導体メモリＤ，Ｅ，Ｆを並列動作させる。
【０１９６】
プログラム動作progは、図１８の例と同じである（ステップＳＴ１〜ＳＴ１４）。
【０１９７】
まず、３個の半導体メモリＡ，Ｂ，Ｃのプログラムベリファイ動作を並列化する。
【０１９８】
即ち、半導体メモリＡのプログラム動作progが終了し、それが待機状態になった後、一定期間txが過ぎたときに、半導体メモリＡのプログラムベリファイ動作を開始する（ステップＳＴ１５）。
【０１９９】
次に、半導体メモリＡのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリＢのプログラムベリファイ動作を開始する（ステップＳＴ１６〜ＳＴ１７）。
【０２００】
次に、半導体メモリＢのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリＣのプログラムベリファイ動作を開始する（ステップＳＴ１８〜ＳＴ１９）。
【０２０１】
そして、３個の半導体メモリＡ，Ｂ，Ｃについて、プログラムベリファイ動作が終了した後、一定期間が経過したときに、引き続き、３個の半導体メモリＤ，Ｅ，Ｆのプログラムベリファイ動作を並列化する（ステップＳＴ２０）。
【０２０２】
即ち、半導体メモリＤのプログラムベリファイ動作を開始する（ステップＳＴ２１）。
【０２０３】
次に、半導体メモリＤのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリＥのプログラムベリファイ動作を開始する（ステップＳＴ２２〜ＳＴ２３）。
【０２０４】
次に、半導体メモリＥのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリＦのプログラムベリファイ動作を開始する（ステップＳＴ２４〜ＳＴ２５）。
【０２０５】
そして、３個の半導体メモリＤ，Ｅ，Ｆについて、プログラムベリファイ動作が終了した後、再び、プログラム動作progに戻る。
【０２０６】
ここで、比較例では、プログラムベリファイ動作に関し、３個の半導体メモリＡ，Ｂ，Ｃのステータスに関係なく、それらを一律に並列動作させる。このため、例えば、半導体メモリＡのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリＢのプログラムベリファイ動作を開始できない場合がある。
【０２０７】
例えば、図２０（ａ）に示すように、tpp > tpvのとき、図２０（ｂ）に示すように、半導体メモリ(chip)Ａのプログラムベリファイ期間tpvが経過した後も、半導体メモリ(chip)Ｂのプログラム期間tspが終了していない場合がある。この場合、半導体メモリＢは、当然に、半導体メモリＡのプログラムベリファイ期間tpvが経過した後、直ちにプログラムベリファイを開始することができない。
【０２０８】
従って、図２０（ｃ）に示すように、半導体メモリＡ，Ｂのプログラムベリファイを開始する時期を、半導体メモリＡのプログラム動作progが終了した後、一定期間txだけ遅らせる必要がある。その結果、比較例においては、本例よりもtx分だけ動作が遅くなってしまう。
【０２０９】
以上、いくつかの実施例について説明したが、これら実施例は、特に、微細化された半導体メモリや、多値化された半導体メモリに適用するのが効果的である。また、同一目的動作であっても、プログラムベリファイ動作などのように、動作期間が異なる複数の動作のうちの１つが選択されるときは、無駄な時間が発生し易いため、このようなときに実施例を適用するのが非常に望ましい。
【０２１０】
また、上述の実施例は、例えば、ＳＳＤ、メモリカード、ＵＳＢメモリなどのデータストレージ製品に採用される不揮発性半導体メモリ、例えば、ＮＯＲフラッシュメモリや、ＮＡＮＤフラッシュメモリなどに適用するのが望ましい。但し、これら以外の半導体メモリにおいても、データプログラムを並列化する必要性がある半導体メモリに関しては、実施例を適用する意義がある。
【０２１１】
実施形態によれば、データプログラムを並列化したときに消費電流のピーク期間の重なりを防止することができる。
【０２１２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１３】
１：  不揮発性半導体メモリ、  ２：  ホストコントローラ、  １１：  メモリセルアレイ、  １２：  データレジスタ、  １３：  センスアンプ、  １４：  カラムアドレスバッファ、  １５：  カラムアドレスデコーダ、  １６：  Ｉ／Ｏ回路、  １７：  ロウアドレスバッファ、  １８：  ロウアドレスデコーダ、  １９：  アドレスレジスタ、  ２０：  コマンドレジスタ、  ２１：  ステータスレジスタ、  ２２，２２’：  制御回路、  ２３：  ロジック回路、  ２４：  高電圧発生回路、  ２５：  状態検出回路、  ２６：  記憶装置、  ２７：  メモリ部、  ２８：  メモリコントローラ、  ２９：  記憶部、  ３０：  処理部、  ３１、  制御部、  ３２：  予告信号生成回路。
【図１】
0005713772.tif 000002
【図２】
0005713772.tif 000003
【図３】
0005713772.tif 000004
【図４】
0005713772.tif 000005
【図５】
0005713772.tif 000006
【図６】
0005713772.tif 000007
【図７】
0005713772.tif 000008
【図８】
0005713772.tif 000009
【図９】
0005713772.tif 000010
【図１０】
0005713772.tif 000011
【図１１】
0005713772.tif 000012
【図１２】
0005713772.tif 000013
【図１３】
0005713772.tif 000014
【図１４】
0005713772.tif 000015
【図１５】
0005713772.tif 000016
【図１６】
0005713772.tif 000017
【図１７】
0005713772.tif 000018
【図１８】
0005713772.tif 000019
【図１９】
0005713772.tif 000020
【図２０】
0005713772.tif 000021