"複数の半導体メモリと、それらを制御するメモリコントローラとを具備し、前記複数の半導体メモリの各々は、複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有し、前記待機期間中に次の動作の開始を予告する予告信号を前記メモリコントローラへ通知すると共に、前記メモリコントローラから前記内部シーケンスの再開命令を受けたときに前記次の動作を開始し、前記メモリコントローラは、前記複数の半導体メモリのうち所定の半導体メモリから前記予告信号を受けたとき、前記所定の半導体メモリの前記次の動作の前記ピーク期間が前記所定の半導体メモリを除く前記複数の半導体メモリの前記ピーク期間と重ならないことを条件に、前記所定の半導体メモリに対して前記再開命令を通知することを特徴とする半導体メモリシステム。前記メモリコントローラは、前記複数の半導体メモリの前記ピーク期間が重ならないことを条件に、前記複数の半導体メモリの各々に同一目的動作を並列に実行させ、前記メモリコントローラは、前記所定の半導体メモリから前記同一目的動作を終了したことを示す前記予告信号を受けたとき、並列動作させている前記同一目的動作のうち、前記所定の半導体メモリの前記同一目的動作の動作期間と最も長い動作期間との差が基準値以上であることを条件に、直ちに前記所定の半導体メモリに対して前記再開命令を通知することを特徴とする請求項1に記載の半導体メモリシステム。前記メモリコントローラは、前記複数の半導体メモリのうち2つ以上の半導体メモリを選択し、前記2つ以上の半導体メモリの前記ピーク期間が重ならないことを条件に、前記2つ以上の半導体メモリの各々に同一目的動作を並列に実行させることを特徴とする請求項1に記載の半導体メモリシステム。前記2つ以上の半導体メモリの数は、前記同一目的動作がプログラム動作のときと、前記同一目的動作が前記プログラム動作の次に行われるプログラムベリファイ動作のときとで、互いに異なることを特徴とする請求項3に記載の半導体メモリシステム。前記プログラムベリファイ動作は、互いにピーク期間が異なる複数のプログラムベリファイ動作を備え、前記メモリコントローラは、前記複数の半導体メモリのうち同じベプログラムリファイ動作を実行する前記2つ以上の半導体メモリを選択することを特徴とする請求項4に記載の半導体メモリシステム。実施形態は、データプログラムを並列化したときに消費電流のピーク期間の重なりを防止する技術を提案する。実施形態によれば、半導体メモリシステムは、複数の半導体メモリと、それらを制御するメモリコントローラとを具備し、前記複数の半導体メモリの各々は、連続する複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有し、前記待機期間中に次の動作の開始を予告する2ビット以上の予告信号を前記メモリコントローラへ通知すると共に、前記メモリコントローラから前記内部シーケンスの再開命令を受けたときに前記次の動作を開始し、前記メモリコントローラは、前記複数の動作の各々について、動作期間及び前記動作期間中に消費する電流のピーク期間に関する管理テーブルを備え、前記複数の半導体メモリのうち所定の半導体メモリから前記予告信号を受けたとき、前記管理テーブルに基づいて、前記所定の半導体メモリの前記次の動作の前記ピーク期間が前記所定の半導体メモリを除く前記複数の半導体メモリの前記ピーク期間と重ならないことを条件に、前記所定の半導体メモリに対して前記再開命令を通知する。以下、図面を参照しながら実施形態を説明する。図1は、比較例としての半導体メモリ1Bを示している。半導体メモリメモリチップ1は、メモリセルアレイ11と、プログラムデータ又はリードデータを一時的に記憶するデータレジスタ12とを有する。センスアンプ13は、リードデータをセンスし、これを増幅する。カラムアドレスバッファ14は、カラムアドレス信号をバッファリングする。カラムアドレスデコーダ15は、カラムアドレス信号をデコードし、メモリセルアレイ11のカラムの選択を行う。本例では、選択された8カラムについて、データレジスタ12と入出力I/O回路16との間でプログラムデータ/リードデータ8ビットDAT[7:0]の転送が行われる。ロウアドレスバッファ17は、ロウアドレス信号をバッファリングする。ロウアドレスデコーダ18は、ロウアドレス信号をデコードし、メモリセルアレイ11の1つのロウ例えば、1ページの選択を行う。アドレスレジスタ19は、ロウアドレス信号及びカラムアドレス信号を一時的に記憶する。コマンドレジスタ20は、例えば、プログラム動作、リード動作、イレーズ動作などを選択するコマンド信号を一時的に記憶する。ステータスレジスタ21は、プログラムベリファイ動作の結果ステータスパス/ステータスフェイルを一時的に記憶する。この結果は、I/O回路16を介して、半導体メモリ1の外部にあるメモリコントローラ、さらにホストコントローラに転送される。制御回路22は、メモリセルアレイ11に対するプログラム動作、リード動作、イレーズ動作などの各種の動作を制御する。ロジック回路23は、チップイネーブル信号CE、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトイネーブル信号WE、リードイネーブル信号RE、及び、ライトプロテクト信号WPを受け、これら制御信号に基づいて、制御回路22が行うべき動作を指示する。チップイネーブル信号CEは、チップの選択/非選択を決定する。コマンドラッチイネーブル信号CLEがイネーブル状態のとき、入力データコマンド信号は、コマンドレジスタ20に転送される。アドレスラッチイネーブル信号ALEがイネーブル状態のとき、入力データロウ/カラムアドレス信号は、アドレスレジスタ19に転送される。ライトイネーブル信号WEがイネーブル状態のとき、プログラム動作が行われ、リードイネーブル信号REがイネーブル状態のとき、リード動作が行われる。ライトプロテクト信号WPは、上書きの許可/禁止を示す信号である。ライトプロテクト信号WPがイネーブル状態のとき、書き込みが禁止されるため、既に保存されているデータが変更されることはない。高電圧発生回路24は、プログラム動作時に使用する高電圧を発生し、これをメモリセルアレイ11に供給する。状態検出回路25は、半導体メモリ1の現在の状態を検出し、これをメモリコントローラに知らせる。例えば、半導体メモリ1が動作中のときは、レディ/ビジー信号RY/BYは、ビジー状態を示し、半導体メモリ1が待機中のときは、レディ/ビジー信号RY/BYは、レディ状態を示す。図2は、図1の半導体メモリを用いた半導体メモリシステムを示している。記憶装置26は、例えば、SSD、メモリカード、USBメモリなどのデータストレージ製品である。記憶装置26は、メモリ部27及びメモリコントローラ28を備える。メモリ部27は、複数の半導体メモリ1,1,...を備える。メモリコントローラ28と複数の半導体メモリ1,1,...とは、データバスを介して互いに接続される。メモリコントローラ28は、ホストコントローラ2からのコマンド信号を複数の半導体メモリ1,1,...に転送する。メモリコントローラ28及び複数の半導体メモリ1,1,...間のデータの転送ビット幅DAT[7:0]は、本例では、8ビットであるが、これに限定されることはない。ここで、図2に示す半導体メモリシステムにおいてプログラムの高速化を図ろうとするとき、例えば、メモリコントローラ28は、複数の半導体メモリ1,1,...に対するデータプログラム動作を並列に行う制御を実行する。図3は、2つの半導体メモリA,Bに対して同一動作でプログラムを並列に行う制御の例を示している。同図において、progは、プログラム動作を表し、pvfy3は、プログラムベリファイ動作を表し、waitは、待機状態を表している。2つの半導体メモリA,Bを単純に並列に動作させると、2つの半導体メモリA,Bが消費する消費電流のピーク期間が重なり、半導体メモリシステム内で一時的に莫大な電流が消費されるため、好ましくないピーク電流制御無し。この消費電流のピーク期間の重なりを避けるには、2つの半導体メモリA,Bの内部シーケンスをずらせばよい。即ち、2つの半導体メモリA,Bがプログラム動作を開始する時期を互いに異ならせるピーク電流制御有り。しかし、近年の半導体メモリシステムのプログラム動作に関しては、2つの半導体メモリA,Bが同一動作をすることは稀である。例えば、データプログラミングは、プログラム動作とベリファイ動作の組み合わせから構成される。仮に、プログラム動作は、同一動作で行えたとしても、ベリファイ動作は、QPWといったプログラム方法を採用するか否か、1つのメモリセルに複数ビットを記憶させる多値メモリのときはどのビットのプログラムを行うかなど、によって変わってくる。図4は、4値メモリの閾値分布の例を示している。この例では、イレーズ状態Erから下位ビットのプログラムを行う場合における、閾値分布Alowerへの書き込みが行えたか否かを検証するベリファイ動作は、ベリファイリード電位Avrlowerを用いる1回でよい。これに対し、下位ビットがプログラムされた状態から上位ビットのプログラムを行うときは、閾値分布ABCへの書き込みが行えたか否かを検証する必要がある。そのため、閾値分布ABCへの書き込みが行えたか否かを検証するベリファイ動作は、最大で、ベリファイリード電位AvrBvrCvrを用いて3回行わなければならない。従って、2つの半導体メモリA,Bを並列動作させても、互いのベリファイ期間が異なる場合がある。これに起因して、いずれか一方に無駄な時間が発生し、プログラムの高速化を十分に図ることができない場合がある。図5は、2つの半導体メモリA,Bに対して異なる動作でプログラムを並列に行う制御の例を示している。同図において、progは、プログラム動作を表し、pvfy1pvfy5は、ベリファイ動作を表し、waitは、待機状態を表している。この例では、半導体メモリAのプログラム期間をtsp、ベリファイ期間をtsv1とし、半導体メモリBのプログラム期間をtsp、ベリファイ期間をtsv5とする。但し、tsv1<tsv5であり、tsv5は、最も長いベリファイ期間であるものとする。2つの半導体メモリA,Bを単純に並列に動作させると、2つの半導体メモリA,Bが消費する消費電流のピーク期間が重なり、半導体メモリシステム内で一時的に莫大な電流が消費されるため、好ましくないピーク電流制御無し。また、2つの半導体メモリA,Bの内部シーケンスをtxだけシフトさせ、2つの半導体メモリA,Bがプログラム動作を開始する時期を互いに異ならせれば、消費電流のピーク期間の重なりを避けることができるピーク電流制御有り。しかし、メモリコントローラは、プログラムを開始するコマンドとプログラムデータを2つの半導体メモリA,Bに転送した後、2つの半導体メモリA,Bからプログラム完了の結果ステータスパス:ベリファイ動作の結果、書き込み対象のメモリセルへのデータの書き込みが正常終了した/ステータスフェイル:ベリファイ動作の結果、書き込み対象のメモリセルへのデータの書き込みが正常終了しなかったを受けるまでは、2つの半導体メモリA,Bに対して新たな指示を出さない。従って、2つの半導体メモリA,Bは、それぞれ、1回のデータプログラミングがプログラム期間tspと最大のベリファイ期間ワーストケースtsv5とから構成されていると仮定し、プログラム完了の結果がステータスパスとなるまで、データプログラミングを繰り返し行う。この時、半導体メモリAの実際のベリファイ期間は、tsv1であるため、半導体メモリAは、ベリファイ動作pvfy1を終了してから半導体メモリBがベリファイ動作pvfy5を終了するまで、待機状態waitを維持しなければならず、この期間が無駄になる。このように、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていると、ベリファイ期間が短い半導体メモリに無駄な時間が発生する。そこで、以下の実施例では、複数の半導体メモリメモリチップと、それらを制御するメモリコントローラとを備える半導体メモリシステムにおいて、各半導体メモリは、内部シーケンス内の各動作プログラム動作、ベリファイ動作などを終了した後に待機状態となり、メモリコントローラは、各半導体メモリが実行する内部シーケンスの再開を各動作ごとに独立に制御する技術について提案する。具体的には、複数の半導体メモリの各々は、連続する複数の動作を含む内部シーケンスを実行すると共に各動作の終了後に待機期間を有すると共に、待機期間中に次の動作の開始を予告する2ビット以上の予告信号をメモリコントローラへ通知する。また、待機期間中に、導体メモリの各々がメモリコントローラから内部シーケンスの再開命令を受けたときに、複数の半導体メモリの各々は次の動作を開始する。また、メモリコントローラは、複数の動作の各々について、動作期間及び動作期間中に消費する電流のピーク期間に関する管理テーブルを備え、複数の半導体メモリのうち所定の半導体メモリから予告信号を受けたとき、メモリコントローラは管理テーブルに基づいて、所定の半導体メモリの次の動作のピーク期間が所定の半導体メモリを除く複数の半導体メモリのピーク期間と重ならないことを条件に、所定の半導体メモリに対して再開命令を通知する。これにより、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていても、ベリファイ期間が短い半導体メモリに無駄な時間が発生することを防止する。図6は、実施例としての半導体メモリ1を示している。この半導体メモリ1の特徴は、制御回路22’と予告信号生成回路32にある。制御回路22’は、連続する複数の動作プログラム動作、ベリファイ動作などを含む内部シーケンスを実行すると共に各動作の終了後に待機期間を設け、その待機期間中に予告信号生成回路32に対して次の動作の開始を予告する2ビット以上の予告信号ステータス信号STAの生成を指示する。予告信号生成回路32は、予告信号STAを生成し、これをメモリコントローラへ通知する。また、制御回路22’は、メモリコントローラから内部シーケンスの再開命令を受けたときに次の動作を開始する。その他の構成については、比較例としての半導体メモリ図1と同じであるため、図1と同じ符号を付すことによりその詳細な説明を省略する。即ち、図1に示すように、比較例としての半導体メモリでは、メモリコントローラは、半導体メモリ1の状態をレディ/ビジー信号1ビットRY/BYでしか知ることができなかったのに対し、図6に示すように、実施例としての半導体メモリでは、メモリコントローラは、2ビット以上の予告信号STAによりその状態を逐次知ることができる。図7は、図6の半導体メモリを用いた半導体メモリシステムを示している。記憶装置26は、例えば、SSD、メモリカード、USBメモリなどのデータストレージ製品である。記憶装置26は、メモリ部27及びメモリコントローラ28を備える。メモリ部27は、複数の半導体メモリ1,1,...を備える。メモリコントローラ28と複数の半導体メモリ1,1,...とは、データバスを介して互いに接続される。メモリコントローラ28は、複数の半導体メモリ1,1,...から予告信号STAを受け取ると共に、複数の半導体メモリ1,1,...に対して内部シーケンスの再開命令を指示する。メモリコントローラ28及び複数の半導体メモリ1,1,...間のデータの転送ビット幅DAT[7:0]は、本例では、8ビットであるが、これに限定されることはない。図8は、図7のメモリコントローラを示している。メモリコントローラ28は、記憶部29、処理部30及び制御部31を備える。記憶部29は、図7の複数の半導体メモリ1,1,...が実行する内部シーケンスプログラム動作、ベリファイ動作などの各動作について、動作期間及び動作期間中に消費する電流のピーク期間に関する管理テーブルを記憶する。なお、この記憶部29は半導体メモリ1の中に配置されていても良い。例えば、予告信号STAを例えば、4ビットとし、予告信号STAと次の動作との関係を図9に示す関係に設定したとき、プログラム動作及びベリファイ動作に関する管理テーブルは、図10に示すようになる。ここで、図9及び図10において、は、現在ある動作を継続していることを表し、progは、プログラム動作を表し、pvfy1~pvfy5は、それぞれプログラム動作後のベリファイ動作を表し、read1~read3は、それぞれリード動作を表し、eraseは、イレーズ動作を表し、evfyは、イレーズ動作後のベリファイ動作を表し、は、予備を表し、endは、内部シーケンスの終了を表している。また、プログラム動作progの動作期間をtsp、ピーク電流が発生するピーク期間をtppとし、プログラムベリファイ動作pvfy1pvfy2pvfy3pvfy4pvfy5の動作期間をそれぞれtsv1tsv2tsv3tsv4tsv5、ピーク電流が発生するピーク期間をtpv、ピーク電流のピッチピークピッチをtsvpとする。ピーク期間tpvはピーク位置に向けての立ち上がりから、ピーク位置から電流の変化量が少なくなった部分までの時間である。プログラムベリファイ動作pvfy1pvfy2pvfy3pvfy4pvfy5のピーク期間tpv及びピークピッチtsvpは、ほぼ同じであり、ベリファイ動作pvfy1のピーク期間tpvは、動作期間tsv1内に2回存在し、ベリファイ動作pvfy2のピーク期間tpvは、動作期間tsv2内に3回存在し、ベリファイ動作pvfy3のピーク期間tpvは、動作期間tsv3内に4回存在し、ベリファイ動作pvfy4のピーク期間tpvは、動作期間tsv4内に5回存在し、ベリファイ動作pvfy5のピーク期間tpvは、動作期間tsv5内に6回存在するものとする。さらに、tsv1<tsv2<tsv3<tsv4<tsv5とし、tsv5は、最も長いベリファイ期間であるものとする。但し、上述の関係は、一例であり、記憶部29に記憶される管理テーブルがこれに限定されるというものではない。また、ピーク期間tpvはそれぞれのベリファイ動作によって異なっていても良い。また、1つのベリファイ動作中に複数のピーク期間が有る場合には、それぞれのピーク期間が異なっていても良い。メモリコントローラ28内の制御部31は、図7の複数の半導体メモリ1,1,...のうち所定の半導体メモリから予告信号STAを受けたとき、例えば、図10の管理テーブルに基づいて、所定の半導体メモリの次の動作のピーク期間tpptpvが所定の半導体メモリを除く図7の複数の半導体メモリ1,1,...のピーク期間tpptpvと重ならないことを条件に、所定の半導体メモリに対して内部シーケンスの再開命令を通知する。ここで、1つのベリファイ動作中に複数のピーク期間が有る場合には、最も大きいピーク電流mが流れるピーク期間tpvm同士、または、ピーク期間tppとピーク期間tpvmが重ならないようにしても良い。ここで、ピーク期間tpvmは低い閾値分布例えば、閾値分布Aを検証するベリファイリード電位例えば、ベリファイリード電位Avrの場合に大きくなる傾向がある。これにより、複数の半導体メモリのプログラムを並列に行うとき、各半導体メモリが異なる動作をしていても、各半導体メモリは、内部シーケンス内の各動作を終了した後に待機状態となり、メモリコントローラは、各半導体メモリが実行する内部シーケンスの再開を動作ごとに独立に制御するため、例えば、ベリファイ期間が短い半導体メモリに無駄な時間が発生することがない。図11は、内部シーケンスの再開命令を出す条件の例を示している。ここでは、メモリコントローラは、複数の半導体メモリのピーク期間tpvが重ならないことを条件に、複数の半導体メモリの各々に同一目的動作本例では、プログラムベリファイ動作を並列に実行させるものとする。また、プログラム動作prog後に行われるプログラムベリファイ動作は、5種類pvfy1pvfy2pvfy3pvfy4pvfy5のうちから選択され、複数の半導体メモリのうち少なくとも2つのプログラムベリファイ動作の動作期間は、互いに異なるものとする。メモリコントローラが所定の半導体メモリからプログラムベリファイ動作を終了したことを示す予告信号を受けたとき、その所定の半導体メモリに対して内部シーケンスの再開命令を出す条件は、以下の通りである。全ての半導体メモリが待機状態にあること、又は、並列動作させているプログラムベリファイ動作のうち、所定の半導体メモリのプログラムベリファイ動作の動作期間と最も長い動作期間との差が基準値α以上であること例えば、簡単のため、2つの半導体メモリA,Bについて考えると、半導体メモリAのプログラムベリファイ動作pvfy1の動作期間がtsv1であり、半導体メモリBのプログラムベリファイ動作pvfy4の動作期間がtsv4であるとき、メモリコントローラは、|tsv4tsv1|>基準値αであることを条件に、所定の半導体メモリに対して再開命令を出す。ここで、基準値αとは、この基準値αの間に並列動作する半導体メモリの次の動作が行える時間である。また、並列動作する半導体メモリの動作期間のスタートが異なっている場合、この異なった時間も基準値αに考慮される。例えば、半導体メモリAの時間txが経過したときにメモリコントローラが半導体メモリBに再開命令を出した場合は、半導体メモリの次の動作が行える時間からtxが差し引かれて基準値αが設定される。以下、2つの半導体メモリA,Bのデータプログラミングを並列して行う場合の内部シーケンスの例について説明する。図12は、メモリコントローラの動作を示すフローチャートであり、図13は、2つの半導体メモリA,Bの内部シーケンスを示している。メモリコントローラは、2つの半導体メモリA,Bに対して、プログラムコマンド、プログラムアドレス及びプログラムデータを、それぞれ転送する。各半導体メモリA,Bは、メモリコントローラからプログラムコマンドを受け取った後にデータプログラミングの内部シーケンスを開始する。[図13の内部シーケンスの期間t1]まず、各半導体メモリA,Bは、プログラムコマンドを受け取ると、内部シーケンスを待機状態waitとし、かつ、予告信号ステータス信号STAとして0001プログラム動作progをメモリコントローラに出力する。メモリコントローラは、予告信号STAに基づき、2つの半導体メモリA,Bが共にプログラム動作progを開始する前の待機状態にあることを認識する。そこで、メモリコントローラは、2つの半導体メモリA,Bに対して内部シーケンスの再開命令を出す。ここで、2つの半導体メモリA,B内で消費する電流のピーク期間をずらすために、半導体メモリAへの再開コマンドを出力するタイミングと、半導体メモリBへの再開コマンドを出力するタイミングとを互いに異ならせる。本例では、半導体メモリAへの再開コマンドを出力した後、例えば、時間txが経過したときに半導体メモリBへの再開コマンドを出力する。ここで、txは、2つの半導体メモリA,Bの消費電流のピーク期間をシフトさせるための期間である。具体的には、図12のステップST1~ST2に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号STAに基づき、半導体メモリA及び半導体メモリBのステータス情報を確認するWaittstatus→StatusreadchipAandchipB。次に、図12のステップST3~ST4に示すように、メモリコントローラは、2つの半導体メモリA,Bのステータス情報がデータプログラミングの内部シーケンスの終了プログラム完了の結果:ステータスパスorステータスフェイルを受け取っていないことを確認するChipAstatus1111→No、ChipBstatus1111→No。次に、図12のステップST5に示すように、メモリコントローラは、2つの半導体メモリA,Bが共に内部シーケンス内のある動作を継続していないことを確認するChipAstatus0000orChipBstatus0000→No。次に、図12のステップST6に示すように、メモリコントローラは、管理テーブルに基づき、|tsAtsB|<基準値αを計算する。ここで、tsAは、半導体メモリAのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリBのステータス情報が示す次の動作の動作期間である。即ち、2つの半導体メモリA,Bのステータス情報が示す次の動作は、共に、プログラム動作progであるため、例えば、図10の管理テーブルの例によれば、tsAtsBtspとなる。従って、図12のステップST6では、メモリコントローラは、|tsAtsB|<α→Yesと判定し、ステップST7~ST9を実行する。例えば、メモリコントローラは、まず、半導体メモリAへの再開コマンドを出力しChipArestart、この後、例えば、さらに時間txが経過した後にwaittx、半導体メモリBへの再開コマンドを出力するChipBrestart。ここで、txは、2つの半導体メモリA,Bの消費電流のピーク期間をシフトさせるための期間であり、例えば、txtppに設定される。tppは、プログラム動作で消費する電流のピーク期間である。[図13の内部シーケンスの期間t2,t3]まず、半導体メモリAのプログラム動作progが終了すると、半導体メモリAは、待機状態waitになり、予告信号ステータス信号STAとして0101プログラムベリファイ動作pvfy4をメモリコントローラに出力する。引き続き、半導体メモリBのプログラム動作progが終了すると、半導体メモリBは、待機状態waitになり、予告信号ステータス信号STAとして0010プログラムベリファイ動作pvfy1をメモリコントローラに出力する。メモリコントローラは、予告信号STAに基づき、半導体メモリAがプログラムベリファイ動作pvfy4を開始する前の待機状態にあることを認識し、かつ、半導体メモリBがプログラムベリファイ動作pvfy1を開始する前の待機状態にあることを認識する。そこで、メモリコントローラは、2つの半導体メモリA,Bに対して内部シーケンスの再開命令を出す。ここで、2つの半導体メモリA,B内で消費する電流のピーク期間をずらすために、半導体メモリAへの再開コマンドを出力するタイミングと、半導体メモリBへの再開コマンドを出力するタイミングとを互いに異ならせる。本例では、半導体メモリAへの再開コマンドを出力した後、例えば、時間txが経過したときに半導体メモリBへの再開コマンドを出力する。具体的には、図12のステップST1~ST2に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号STAに基づき、半導体メモリA及び半導体メモリBのステータス情報を認識するWaittstatus→StatusreadchipAandchipB。次に、図12のステップST3~ST4に示すように、メモリコントローラは、2つの半導体メモリA,Bのステータス情報がデータプログラミングの内部シーケンスの終了を示していないことを確認するChipAstatus1111→No、ChipBstatus1111→No。次に、図12のステップST5に示すように、メモリコントローラは、2つの半導体メモリA,Bが共に内部シーケンス内のある動作を継続していないことを確認するChipAstatus0000orChipBstatus0000→No。次に、図12のステップST6に示すように、メモリコントローラは、管理テーブルに基づき、|tsAtsB|<基準値αを計算する。ここで、tsAは、半導体メモリAのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリBのステータス情報が示す次の動作の動作期間である。即ち、半導体メモリAのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy4であるため、例えば、図10の管理テーブルの例によれば、tsAtsv4となる。また、半導体メモリBのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy1であるため、例えば、図10の管理テーブルの例によれば、tsBtsv1となる。ここで、|tsAtsB|≧基準値αであると仮定すると、図12のステップST6では、メモリコントローラは、|tsAtsB|<α→Noと判定し、引き続き、図12のステップST10に示すように、tsA>tsBであるか否かを確認する。tsA>tsBのときは、ステップST11~ST15を実行し、tsA<tsBのときは、ステップST16~ST20を実行する。前者のステップST11~ST15は、半導体チップBの動作期間が半導体チップAの動作期間よりも短い場合であり、半導体チップBで生じる無駄な時間をなくすため、半導体チップBの動作が終了した後、半導体チップAの動作が終了する前に、半導体チップBの次の動作を再開することに特徴を有する。ここで、ステップST11~ST12とステップST13~ST14とを入れ替えても問題はない。同様に、後者のステップST16~ST20は、半導体チップAの動作期間が半導体チップBの動作期間よりも短い場合であり、半導体チップAで生じる無駄な時間をなくすため、半導体チップAの動作が終了した後、半導体チップBの動作が終了する前に、半導体チップAの次の動作を再開することに特徴を有する。ここで、ステップST16~ST17とステップST18~ST19とを入れ替えても問題はない。図13の内部シーケンスの例では、半導体メモリAのプログラムベリファイ動作pvfy4の動作期間tsAtsv4は、半導体メモリBのプログラムベリファイ動作pvfy1の動作期間tsBtsv1よりも長い。従って、図12のステップST10では、メモリコントローラは、tsA>tsB→Yesと判定し、引き続き、図12のステップST11~ST15を実行する。例えば、メモリコントローラは、まず、半導体メモリAへの再開コマンドを出力しChipArestart、この後、例えば、さらに時間txが経過した後にwaittx、半導体メモリBへの再開コマンドを出力するChipBrestart。ここで、txは、2つの半導体メモリA,Bの消費電流のピーク期間をシフトさせるための期間であり、ST12のwaittxは、例えば、txtpvに設定される。tpvは、ベリファイ動作で消費する電流のピーク期間tpvである。この後、半導体メモリBのプログラムベリファイ動作pvfy1が終了すると、半導体メモリBは、待機状態waitになり、書き込まれるべきメモリセルのうち全てのメモリセルの書き込みが終了していない場合ベリファイリードでNGとなったメモリセルが有る場合は、予告信号ステータス信号STAとして0001プログラム動作progをメモリコントローラに出力する。この場合、所定の値だけ上昇させた書き込み電圧でプログラム動作を行う場合がある。また、メモリコントローラは、半導体メモリBへの再開コマンドを前回の半導体メモリBへの再開コマンドST13からST14のNexttx後に、半導体メモリBへ出力する。図13の内部シーケンスの例では、Nexttxtsv1である。メモリコントローラがST13の再開コマンドを半導体メモリBへ出力した時点で、半導体メモリBは予告信号ステータス信号STAとして0010プログラムベリファイ動作pvfy1をメモリコントローラに出力している。すなわち、メモリコントローラがST13の再開コマンドを半導体メモリBへ出力した時点で、図10に示す、管理テーブルの例からNexttxtsv1となることが解っている。その結果、メモリコントローラは、半導体メモリBから予告信号STAを受け取ることなく、直ちに、半導体メモリBへの再開コマンドを出力することができ、半導体メモリBの動作時間を短縮することができる。[図13の内部シーケンスの期間t4,t5]半導体メモリAのプログラムベリファイ動作pvfy4が終了すると、半導体メモリAは、待機状態waitになり、予告信号ステータス信号STAとして0001プログラム動作progをメモリコントローラに出力する。メモリコントローラは、予告信号STAに基づき、半導体メモリAがプログラム動作progを開始する前の待機状態にあることを認識する。また、この時、半導体メモリBは、既に、次のプログラム動作を実行中である。そこで、メモリコントローラは、半導体メモリBのプログラム動作progが終了したことを確認した後に、半導体メモリAに対して内部シーケンスの再開命令を出す。具体的には、図12のステップST1~ST2に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号STAに基づき、半導体メモリA及び半導体メモリBのステータス情報を認識するWaittstatus→StatusreadchipAandchipB。次に、図12のステップST3~ST4に示すように、メモリコントローラは、2つの半導体メモリA,Bがデータプログラミングの内部シーケンスの終了を示していないことを確認するChipAstatus1111→No、ChipBstatus1111→No。次に、図12のステップST5に示すように、メモリコントローラは、2つの半導体メモリA,Bが共に内部シーケンス内のある動作を継続していないことを確認するChipAstatus0000orChipBstatus0000→Yes。ここで、本例では、半導体メモリBが、既に、次のプログラム動作progを継続中であるため、メモリコントローラは、半導体メモリAへの再開命令を出すタイミングを、半導体メモリBのプログラム動作progが終了するまで遅らせる。すなわち、ST1に戻り、半導体メモリBの予告信号STAが0000と異なる信号を受け取るまでこの動作ST1→ST2→ST3→ST4→ST5→ST1が繰り返される。半導体メモリBのプログラム動作progが終了すると、半導体メモリBは、待機状態waitになり、予告信号ステータス信号STAとして0011プログラムベリファイ動作pvfy2をメモリコントローラに出力する。メモリコントローラは、半導体メモリBからの予告信号STAに基づき、半導体メモリBがプログラムベリファイ動作pvfy2を開始する前の待機状態にあることを認識する。そこで、メモリコントローラは、まず、半導体メモリAに対して内部シーケンスの再開命令を出し、この後、半導体メモリBに対して内部シーケンスの再開命令を出す。具体的には、図12のステップST6に示すように、メモリコントローラは、管理テーブルに基づき、|tsAtsB|<基準値αであるか否か、を計算する。ここで、tsAは、半導体メモリAのステータス情報が示す次の動作の動作期間であり、tsBは、半導体メモリBのステータス情報が示す次の動作の動作期間である。即ち、半導体メモリAのステータス情報が示す次の動作は、プログラム動作progであるため、例えば、図10の管理テーブルの例によれば、tsAtspとなる。また、半導体メモリBのステータス情報が示す次の動作は、プログラムベリファイ動作pvfy2であるため、例えば、図10の管理テーブルの例によれば、tsBtsv2となる。ここで、図12のステップST6において、例えば、|tsAtsB|<α→Yesであると仮定すると、メモリコントローラは、ステップST7~ST9を実行する。例えば、メモリコントローラは、まず、半導体メモリAへの再開コマンドを出力しChipArestart、この後、例えば、さらに時間txが経過した後にwaittx、半導体メモリBへの再開コマンドを出力するChipBrestart。ここで、txは、2つの半導体メモリA,Bの消費電流のピーク期間をシフトさせるための期間であり、例えば、txtppに設定される。[その他]図13の内部シーケンスにおいて、2つの半導体メモリA,Bの内部シーケンスのいずれか一方が先に終了したときは、他方について内部シーケンスが継続される。具体的には、図12のステップST1~ST2に示すように、メモリコントローラは、メモリコントローラの所定の待機期間tstatusの後に、予告信号STAに基づき、半導体メモリA及び半導体メモリBのステータス情報を認識するWaittstatus→StatusreadchipAandchipB。次に、図12のステップST3~ST4に示すように、メモリコントローラは、半導体メモリAのステータス情報が内部シーケンスを継続中で、半導体メモリBのステータス情報が内部シーケンスを終了していることを確認するとChipAstatus1111→No、ChipBstatus1111→Yes、引き続き、図12のステップST21~ST22を実行する。即ち、半導体メモリAが内部シーケンスを終了し、ChipAstatus1111→Yesとなるまで、その内部シーケンス内の動作の終了及び次の動作の再開を繰り返す。また、図12のステップST3及びST23に示すように、メモリコントローラは、半導体メモリAのステータス情報が内部シーケンスを終了し、半導体メモリBのステータス情報が内部シーケンスを継続中であることを確認するとChipAstatus1111→Yes、ChipBstatus1111→No、引き続き、図12のステップST24~ST25を実行する。即ち、半導体メモリBが内部シーケンスを終了し、ChipBstatus1111→Yesとなるまで、その内部シーケンス内の動作の終了及び次の動作の再開を繰り返す。図14は、実施例と比較例の内部シーケンスを比較して示している。この比較では、2つの半導体メモリA,Bのプログラムベリファイ動作pvfy1pvfy4の動作期間が異なることを前提とする。比較例では、2つの半導体メモリA,Bのステータス情報をコントローラに報告することはないため、プログラムベリファイ動作の動作期間は、ワーストケースを想定して最大値に設定される。このため、2つの半導体メモリA,Bが共に待機状態になるまでに無駄な時間が発生する。これに対し、実施例では、2つの半導体メモリA,Bのステータス情報を予告信号として逐次コントローラに報告するため、メモリコントローラは、半導体メモリBの動作が終了した後に、半導体メモリAの動作の終了を待つことなく、直ちに、半導体メモリBの次の動作を再開することができる。従って、半導体メモリBの次の動作を前倒し処理することにより、比較例で生じていた無駄な時間をなくすことができ、プログラムを並列化したときに消費電流のピーク期間の重なりを防止できると共に、プログラムの高速化をさらに図ることができる。ここで、比較例においては、プログラム動作とベリファイ動作の間に待機期間waitがない。しかし、この待機時間waitはメモリコントローラが半導体メモリのステータス情報を読み取り、演算し、再開コマンドを出力する程度の時間ステータスリード時間と称する場合があるであり、数μsecと非常に短い。すなわち、待機時間にステータスリード時間とピーク期間を考慮したとしても、待機時間waitよりも半導体メモリBの次の動作を前倒し処理する時間の方が長い。例えば、待機期間waitは約15μsecであり、1回のベリファイリードに必要な時間は約25μsecから100μsecである。すなわち、半導体メモリA,Bの1回のベリファイリードに必要な時間の差は約50μsecになる場合もある。半導体メモリ間のベリファイリードに必要な時間の差よりも待機時間waitは十分短いので、データプログラミングを前倒し処理することが可能である。次に、複数の半導体メモリメモリチップを備える半導体メモリシステムにおいて、同一目的動作例えば、プログラムベリファイ動作を並列に実行させる2つ以上の半導体メモリを選択し、さらなる高速化を図る技術を説明する。例えば、データプログラミングを実行する内部シーケンスは、プログラム動作とプログラムベリファイ動作の繰り返しである。ここで、図15に示すように、プログラム動作progの動作期間は、tspであり、プログラム動作progで消費する電流のピーク期間は、tppである。従って、プログラム動作progのみを考えれば、Np<tsptpp<Np1但し、Npは自然数のとき、最大、Np個の半導体メモリについてプログラムの並列化を行うことができる。同様に、プログラムベリファイ動作pvfy1のピーク電流のピッチピークピッチは、tsvpであり、プログラムベリファイ動作pvfy1で消費する電流のピーク期間は、tpvである。従って、プログラムベリファイ動作pvfy1のみを考えれば、Npv<tsvptpv<Npv1但し、Npvは自然数のとき、最大、Npv個の半導体メモリについてプログラムの並列化を行うことができる。しかし、例えば、図5に示す比較例としての内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy1とが一体化され、両者が連続して行われる。即ち、プログラム動作progとプログラムベリファイ動作pvfy1との間に待機期間waitがない。このため、プログラム動作prog及びプログラムベリファイ動作pvfy1を並列に実行させる半導体メモリの数は、Np及びNpvのうち小さいほうに設定される。Np>Npvであるため、並列化させる半導体メモリの数は、プログラムベリファイ動作pvfy1におけるピークピッチtsvpとピーク期間tpvにより決定される。しかし、この場合、図15に示すように、プログラム動作progの動作期間tsp内に無駄な時間が発生する。この例では、プログラム動作progのみをとってみれば、4個以上の半導体メモリを並列動作させることができるのに、プログラムベリファイ動作pvfy1において最大で3個の半導体メモリA,B,Cしか並列動作させることができないため、結果として、プログラム動作progの動作期間tsp内に無駄な時間が発生する。これに対し、上述の実施例図6~図14を採用すると、プログラム動作progとプログラムベリファイ動作pvfy1との間に待機期間waitが設けられ、その待機期間wait内にステータス情報をメモリコントローラに通知することができる。即ち、プログラム動作progの終了/再開とプログラムベリファイ動作pvfy1の終了/再開とを、半導体メモリごとに独立に制御可能である。従って、メモリコントローラは、内部シーケンスで実行される動作ごとに、複数の半導体メモリのうち2つ以上の半導体メモリを選択し、これら2つ以上の半導体メモリで消費する電流のピーク期間が重ならないことを条件に、これら2つ以上の半導体メモリの各々に同一目的動作例えば、プログラムベリファイ動作を並列に実行させ、この無駄な時間をなくすことができる。以下、6個の半導体メモリを有する半導体メモリシステムの例を説明する。図16は、同一目的動作を実行させる2つ以上の半導体メモリを選択する例を示している。同図では、実施例と比較例とを示し、実施例の効果を明確化している。本例では、同一目的動作がプログラム動作のときに、6個の半導体メモリを選択し、これらを並列動作させ、かつ、同一目的動作がプログラム動作の次に行われるプログラムベリファイ動作のときに、3個の半導体メモリを選択し、これらを並列動作させる。ここで、プログラム動作progの動作期間は、tspであり、プログラム動作progで消費する電流のピーク期間は、tppとする。また、Np<tsptpp<Np1但し、Np=6であり、最大、6個の半導体メモリを並列化できるものとする。さらに、プログラムベリファイ動作pvfy2pvfy3のピーク電流のピッチピークピッチは、tsvpであり、プログラムベリファイ動作pvfy2pvfy3で消費する電流のピーク期間は、tpvとする。また、Npv<tsvptpv<Npv1但し、Npv=3とし、最大、3個の半導体メモリを並列化できるものとする。比較例の内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy2pvfy3が連続して行われ、それらの間に待機期間waitがない。このため、プログラム動作prog及びプログラムベリファイ動作pvfy2pvfy3を並列に実行させる半導体メモリの数は、3個に設定される。この例では、プログラム動作progのみをとってみれば、6個の半導体メモリを並列動作させることができるのに、結果的には、3個の半導体メモリA,B,Cを並列動作させ、1回目のデータプログラミングprogpvfy2progpvfy3が終了した後に、引き続き、3個の半導体メモリD,E,Fを並列動作させ、1回目のデータプログラミングprogpvfy2progpvfy3を実行する。従って、プログラム動作progの動作期間tsp内に無駄な時間が発生する。これに対し、実施例の内部シーケンスでは、プログラム動作progとプログラムベリファイ動作pvfy2pvfy3との間に待機期間waitが設けられ、その待機期間wait内にステータス情報をメモリコントローラに通知することができる。即ち、プログラム動作progの終了/再開とプログラムベリファイ動作pvfy1の終了/再開とを、半導体メモリごとに独立に制御可能である。このため、プログラム動作progを並列に実行させる半導体メモリの数は、最大値としての6個に設定でき、かつ、プログラムベリファイ動作pvfy2pvfy3を並列に実行させる半導体メモリの数も、最大値としての6個に設定できる。この例では、まず、6個の半導体メモリA,B,C,D,E,Fについて、プログラム動作progを並列化する。最初の3個の半導体メモリA,B,Cのプログラム動作progが終了した後、引き続き、それらの半導体メモリA,B,Cについて、プログラムベリファイ動作pvfy2pvfy3を並列化する。尚、最初の3個の半導体メモリA,B,Cのプログラムベリファイ動作pvfy2pvfy3を開始するタイミングは、6個の半導体メモリA,B,C,D,E,Fで消費する電流のピーク期間が重ならなければ、残りの3個の半導体メモリD,E,Fのプログラム動作progが終了する前であってもよい。残りの3個の半導体メモリD,E,Fのプログラム動作progが終了すると、それらの半導体メモリD,E,Fは、最初の3個の半導体メモリA,B,Cのプログラムベリファイ動作pvfy2pvfy3が終了するまで、待機期間waitを維持する。そして、最初の3個の半導体メモリA,B,Cのプログラムベリファイ動作pvfy2pvfy3が終了した後、引き続き、残りの半導体メモリD,E,Fについて、プログラムベリファイ動作pvfy2pvfy3を並列化する。このように、メモリコントローラは、内部シーケンスで実行される動作ごとに、6個の半導体メモリA,B,C,D,E,Fのうち2つ以上の半導体メモリを選択し、これら2つ以上の半導体メモリの各々に同一目的動作を並列に実行させる。従って、プログラム動作progの動作期間tsp内に無駄な時間が発生することはなく、2回目のデータプログラミングを前倒し処理できる。これに伴い、半導体メモリシステムのさらなる高速化を実現できる。図17は、同一目的動作を実行させる2つ以上の半導体メモリを選択する他の例を示している。同図でも、実施例と比較例とを示し、実施例の効果を明確化している。本例では、同一目的動作がプログラム動作のときに、6個の半導体メモリを選択し、これらを並列動作させ、かつ、同一目的動作がプログラム動作の次に行われるプログラムベリファイ動作のときに、3個の半導体メモリを選択し、これらを並列動作させる。図17の例が図16の例と異なる点は、同一目的動作としてプログラムベリファイ動作を並列化するときに、6個の半導体メモリA,B,C,D,E,Fのうち同じベリファイ動作を実行する2つ以上の半導体メモリを選択し、これら2つ以上の半導体メモリのプログラムベリファイ動作を並列化することにある。この例では、まず、6個の半導体メモリA,B,C,D,E,Fについて、プログラム動作progを並列化する。最初の2個の半導体メモリA,Bのプログラム動作progが終了した後、引き続き、それらの半導体メモリA,Bについて、プログラムベリファイ動作pvfy2を並列化する。次に、2個の半導体メモリC,Dのプログラム動作progが終了する。メモリコントローラは、これらの半導体メモリC,Dの待機期間中に、これらの次の動作がプログラムベリファイ動作pvfy3であることを確認する。しかし、プログラムベリファイ動作pvfy3は、最初の2個の半導体メモリA,Bのプログラムベリファイ動作pvfy2と異なるため、待機状態waitを継続する。次に、半導体メモリEのプログラム動作progが終了する。メモリコントローラは、半導体メモリEの待機期間中に、その次の動作がプログラムベリファイ動作pvfy2であることを確認する。プログラムベリファイ動作pvfy2は、最初の2個の半導体メモリA,Bのプログラムベリファイ動作pvfy2と同じであるため、半導体メモリA,B,Eについて、プログラムベリファイ動作pvfy2を並列化する。次に、半導体メモリFのプログラム動作progが終了する。メモリコントローラは、半導体メモリFの待機期間中に、その次の動作がプログラムベリファイ動作pvfy3であることを確認する。しかし、プログラムベリファイ動作pvfy3は、最初の2個の半導体メモリA,Bのプログラムベリファイ動作pvfy2と異なるため、待機状態waitを継続する。そして、3個の半導体メモリA,B,Eのプログラムベリファイ動作pvfy2が終了した後、引き続き、残りの半導体メモリC,D,Fについて、プログラムベリファイ動作pvfy3を並列化する。このように、メモリコントローラは、内部シーケンスで実行される動作ごとに、6個の半導体メモリA,B,C,D,E,Fのうち、同じベリファイ動作をする2つ以上の半導体メモリを選択し、これら2つ以上の半導体メモリの各々に同一目的動作としてのプログラムベリファイ動作を並列に実行させる。従って、プログラム動作progの動作期間tsp内に無駄な時間が発生することはなく、2回目のデータプログラミングを前倒し処理できる。これに伴い、半導体メモリシステムのさらなる高速化を実現できる。尚、図16及び図17から明らかなように、同じ動作を並列化する手法は、異なる動作を並列化する手法よりも前倒し期間を長くできるため、無駄な時間をなくす効果がさらに顕著に現れる。但し、図17の例のように、常に6個の半導体メモリのうちの半分ずつが同じ動作をするとは限らないため、その場合についても検討しておく必要がある。例えば、図17の例では、6個の半導体メモリA,B,C,D,E,Fのうちの3個がプログラムベリファイ動作pvfy2を実行し、残りの3個がプログラムベリファイ動作pvfy3を実行する。しかし、例えば、半導体メモリA,Bがpvfy2を実行し、半導体メモリC,D,E,Fがpvfy3を実行する場合、これら6個の半導体メモリを半分ずつに分けることができない。そこで、この場合、最初にプログラム動作progが終了する半導体メモリAと、これと同じ動作をする半導体メモリBと、それらの動作に最も近い動作をし、かつ、最も先にプログラム動作progが終了する半導体メモリCと、を並列動作させる。また、残りの3個の半導体メモリD,E,Fについて、プログラムベリファイ動作Pvfy3を並列化する。また、例えば、半導体メモリA,Bがpvfy2を実行し、半導体メモリC,Eがpvfy4を実行し、半導体メモリDがpvfy3を実行し、半導体メモリFがpvfy5を実行する場合、最初にプログラム動作progが終了する半導体メモリAと、これと同じ動作をする半導体メモリBと、それらの動作に最も近い動作をし、かつ、最も先にプログラム動作progが終了する半導体メモリDと、を並列動作させる。また、残りの3個の半導体メモリC,E,Fについて、プログラムベリファイ動作Pvfy4Pvfy5を並列化する。以上をまとめると、最初にプログラム動作progが終了する半導体メモリAのステータスプログラムベリファイの種類を確認し、その半導体メモリAのステータスと同じ又はそれに最も近いステータスを持つ2個の半導体メモリを選択する。そして、これら3個の半導体メモリについて並列動作を実行する、というのが本例の主旨である。尚、本例では、半導体メモリの合計数を6個としているが、4個、8個、10個、12個等であっても構わない。また、本例において、最初にプログラム動作progが終了する半導体メモリAのステータスと同じ又はそれに最も近いステータスを持つ2個の半導体メモリを選択するに当たっては、全ての半導体メモリA,B,C,D,E,Fのプログラム動作progを終えた後に、これら全ての半導体メモリA,B,C,D,E,Fのステータスを確認することにより行ってもよい。この場合、図17の例に比べると、最初にプログラム動作progが終了する半導体メモリAについて、プログラムベリファイ動作を開始させる時期が遅れるが、全体的にみて、図17の例よりもプログラム動作の速度を向上できる場合もある。従って、いずれを採用するかは、tpp、tpv、tsp、tsv1~tsv5、tsvpなどの値を考慮して最もプログラム時間を短縮できるものを総合的に判断する。図18は、プログラムベリファイ動作を並列化する複数の半導体メモリの選択方法について示すフローチャートである。本例では、図17の例と同様に、6個の半導体メモリA,B,C,D,E,Fのうち3個ずつを並列動作させる。これら半導体メモリのプログラム動作progは、並列化され、かつ、その開始時期が少しずつシフトされる。従って、プログラム動作progについては、半導体メモリAから半導体メモリFに向かって順番に終了する。本例の特徴は、最初の半導体メモリAについては、プログラム動作が終了した後の所定時期にプログラムベリファイ動作を開始すると共に、残りの5個の半導体メモリB,C,D,E,Fについては、それら全てのプログラム動作が終了した後に、これら半導体メモリB,C,D,E,Fのステータスを確認し、半導体メモリAに並列化させる2個の半導体メモリを選択することにある。まず、6個の半導体メモリA,B,C,D,E,Fについて、プログラム動作progを並列化するステップST1~ST12。最初にプログラム動作progが終了する半導体メモリAについては、プログラム動作progが終了した後の所定時期に、プログラムベリファイ動作を実行するステップST13~ST15。次に、全ての半導体メモリA,B,C,D,E,Fのプログラム動作progが終了した後に、これら全ての半導体メモリA,B,C,D,E,Fのステータスを確認するステップST16。この確認は、半導体メモリAで生じるピーク電流の待機期間に行うのが望ましい。そして、半導体メモリAのステータスと同じ又はそれに最も近いステータスを持つ1個の半導体メモリを選択する。同じステータスを持つ半導体メモリが1個以上存在すれば、それらのうち最も先にプログラム動作が終了したものを選択する。また、半導体メモリAのステータスと同じステータスを持つ半導体メモリが存在しないときは、それに最も近いステータスを持つ半導体メモリのうち最も先にプログラム動作が終了したものを選択する。ここでは、半導体メモリBがそれに該当するものとする。従って、これら2個の半導体メモリA,Bについて並列動作を実行するステップST17。この後、再び、全ての半導体メモリA,B,C,D,E,Fのステータスを確認するステップST18。この確認は、半導体メモリBで生じるピーク電流の待機期間に行うのが望ましい。そして、半導体メモリAのステータスと同じ又はそれに最も近いステータスを持つ1個の半導体メモリを選択する。同じステータスを持つ半導体メモリが1個以上存在すれば、それらのうち最も先にプログラム動作が終了したものを選択する。また、半導体メモリAのステータスと同じステータスを持つ半導体メモリが存在しないときは、それに最も近いステータスを持つ半導体メモリのうち最も先にプログラム動作が終了したものを選択する。ここでは、半導体メモリCがそれに該当するものとする。従って、これら3個の半導体メモリA,B,Cについて並列動作を実行するステップST19。そして、3個の半導体メモリA,B,Cについて、プログラムベリファイ動作が終了した後に、残りの3個の半導体メモリD,E,Fについて並列動作を実行するステップST20~ST26。図19は、図18の比較例としてのフローチャートを示している。この比較例では、全ての半導体メモリA,B,C,D,E,Fについて、プログラム動作prog後にステータスプログラムベリファイの種類を確認することなく、一律に、先にプログラム動作progが終了する3個の半導体メモリA,B,Cを並列動作させ、また、後にプログラム動作progが終了する3個の半導体メモリD,E,Fを並列動作させる。プログラム動作progは、図18の例と同じであるステップST1~ST14。まず、3個の半導体メモリA,B,Cのプログラムベリファイ動作を並列化する。即ち、半導体メモリAのプログラム動作progが終了し、それが待機状態になった後、一定期間txが過ぎたときに、半導体メモリAのプログラムベリファイ動作を開始するステップST15。次に、半導体メモリAのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリBのプログラムベリファイ動作を開始するステップST16~ST17。次に、半導体メモリBのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリCのプログラムベリファイ動作を開始するステップST18~ST19。そして、3個の半導体メモリA,B,Cについて、プログラムベリファイ動作が終了した後、一定期間が経過したときに、引き続き、3個の半導体メモリD,E,Fのプログラムベリファイ動作を並列化するステップST20。即ち、半導体メモリDのプログラムベリファイ動作を開始するステップST21。次に、半導体メモリDのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリEのプログラムベリファイ動作を開始するステップST22~ST23。次に、半導体メモリEのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリFのプログラムベリファイ動作を開始するステップST24~ST25。そして、3個の半導体メモリD,E,Fについて、プログラムベリファイ動作が終了した後、再び、プログラム動作progに戻る。ここで、比較例では、プログラムベリファイ動作に関し、3個の半導体メモリA,B,Cのステータスに関係なく、それらを一律に並列動作させる。このため、例えば、半導体メモリAのプログラムベリファイ動作を開始した後、一定期間tpvが経過したときに、半導体メモリBのプログラムベリファイ動作を開始できない場合がある。例えば、図20aに示すように、tpptpvのとき、図20bに示すように、半導体メモリAのプログラムベリファイ期間tpvが経過した後も、半導体メモリBのプログラム期間tspが終了していない場合がある。この場合、半導体メモリBは、当然に、半導体メモリAのプログラムベリファイ期間tpvが経過した後、直ちにプログラムベリファイを開始することができない。従って、図20cに示すように、半導体メモリA,Bのプログラムベリファイを開始する時期を、半導体メモリAのプログラム動作progが終了した後、一定期間txだけ遅らせる必要がある。その結果、比較例においては、本例よりもtx分だけ動作が遅くなってしまう。以上、いくつかの実施例について説明したが、これら実施例は、特に、微細化された半導体メモリや、多値化された半導体メモリに適用するのが効果的である。また、同一目的動作であっても、プログラムベリファイ動作などのように、動作期間が異なる複数の動作のうちの1つが選択されるときは、無駄な時間が発生し易いため、このようなときに実施例を適用するのが非常に望ましい。また、上述の実施例は、例えば、SSD、メモリカード、USBメモリなどのデータストレージ製品に採用される不揮発性半導体メモリ、例えば、NORフラッシュメモリや、NANDフラッシュメモリなどに適用するのが望ましい。但し、これら以外の半導体メモリにおいても、データプログラムを並列化する必要性がある半導体メモリに関しては、実施例を適用する意義がある。実施形態によれば、データプログラムを並列化したときに消費電流のピーク期間の重なりを防止することができる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"