"不揮発性メモリを制御するメモリコントローラであって、複数のチャネルを有し、前記チャネルごとに前記不揮発性メモリへの書込みを行うメモリインタフェースと、データバッファと、前記不揮発性メモリへ書込まれる書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するECCエンコーダと、前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネルを割付けるチャネル割付け部と、前記書込みデータを前記データバッファへ格納するとともに当該書込みデータを前記ECCエンコーダへ入力する書込みデータ受信処理部と、前記チャネル割付け部による割付け結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを前記メモリインタフェースの前記チャネルへ転送するチャネルスケジューラと、を備えることを特徴とするメモリコントローラ。前記データフォーマットを、1つの前記冗長データに対応する前記書込みデータを2以上の前記チャネルに分散させて配置するフォーマットとすることを特徴とする請求項1に記載のメモリコントローラ。前記メモリインタフェースに対して転送を行うデータ単位を書込み処理単位とし、前記チャネル割付け部による割付け結果を受信し、前記割付け結果に基づいて書込み処理単位に対応するデータの書込み準備が完了したと判断すると、前記チャネルスケジューラに対して当該書込みデータの書込みを指示するライトコマンドを発行するライトコマンド発行部、をさらに備え、前記チャネルスケジューラは、前記ライトコマンド発行部から前記ライトコマンドに基づいて前記メモリインタフェースへの前記書込みデータおよび前記冗長データの転送を実施することを特徴とする請求項1または2に記載のメモリコントローラ。前記書込み処理単位のデータサイズは、1つの前記冗長データに対応する前記書込みデータおよび当該冗長データで構成される誤り訂正単位データのサイズより小さいことを特徴とする請求項3に記載のメモリコントローラ。前記書込み処理単位のデータは、単一の前記チャネルに書き込まれるデータで構成されることを特徴とする請求項4に記載のメモリコントローラ。前記ECCエンコーダは、前記冗長データを格納するECCバッファと、前記メモリインタフェースへの転送が実施されたことを通知された前記冗長データについて、当該冗長データが格納されているECCバッファを空き領域に変更するバッファ管理部と、を備えることを特徴とする請求項1乃至5のいずれか一項に記載のメモリコントローラ。前記ECCエンコーダは、入力される前記書込みデータについて、前記冗長データの元になる前記書込みデータの開始位置を検出し、前記ECCバッファの空き領域の情報に基づいて、前記冗長データを格納する前記ECCバッファ上の開始アドレスを決定するスタート検出部と、所定のデータ単位の前記書込みデータを入力データとし、前記スタート検出部により検出された開始位置の入力データを始めの入力として誤り訂正符号化処理の結果を求め、前記結果を前記ECCバッファの前記開始アドレスへ格納し、以降入力データを追加するごとに誤り訂正符号化処理を実施して前記ECCバッファの前記結果を更新し、入力データごとに前記誤り訂正符号化処理が実施されると符号化カウンタの値を更新するECC計算部と、前記冗長データの元になる入力データの個数と前記符号化カウンタのカウンタ値とに基づいて前記冗長データの生成終了を検出した場合に、前記冗長データの生成終了を前記チャネル割付け部へ通知するエンド検出部と、を備え、前記チャネル割付け部は、前記通知により生成終了が通知された前記冗長データに対して前記チャネルを割付けることを特徴とする請求項6に記載のメモリコントローラ。不揮発性メモリと、複数のチャネルを有し、前記チャネルごとに前記不揮発性メモリへの書込みを行うメモリインタフェースと、データバッファと、前記不揮発性メモリへ書込まれる書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するECCエンコーダと、前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネルを割付けるチャネル割付け部と、前記書込みデータを前記データバッファへ格納するとともに当該書込みデータを前記ECCエンコーダへ入力する書込みデータ受信処理部と、前記チャネル割付け部による割付け結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを前記メモリインタフェースの前記チャネルへ転送するチャネルスケジューラと、を備えることを特徴とするメモリシステム。複数のチャネルにより読み書き可能な不揮発性メモリとECCエンコーダとを備えるメモリシステムにおけるメモリ書込み方法であって、前記不揮発性メモリへ書込まれる書込みデータをデータバッファへ格納するとともに当該書込みデータをECCエンコーダへ入力するステップと、前記書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するステップと、前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネル割付けを実施するステップと、前記チャネル割付けの結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを対応するチャネルへ転送するステップと、チャネルごとに前記不揮発性メモリへの書込みを行うステップと、を含むことを特徴とするメモリ書込み方法。本実施形態は、チャネル利用効率および書込み速度を向上させることができるメモリコントローラ、メモリシステムおよびメモリ書込み方法を提供する。本願発明の一態様によれば、複数のチャネルを有し、チャネルごとに不揮発性メモリへの書込みを行うメモリインタフェースと、データバッファと、書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するECCエンコーダと、書込みデータフォーマットに基づいて書込みデータおよび冗長データに対してチャネルを割付けるチャネル割付け部と、書込みデータをデータバッファへ格納するとともに当該書込みデータをECCエンコーダへ入力する書込みデータ受信処理部と、チャネル割付け結果に基づいてデータバッファに格納された書込みデータと冗長データとをメモリインタフェースへ転送するチャネルスケジューラと、を備える。複数のチャネルを有するSSDシステムでは、メモリチップ単位の故障時にデータを復元可能とするために、誤り訂正符号の元となるデータを複数のチャネルに分散させて書き込むチャネル間ECCErrorCheckandCorrectが導入されることがある。この様なSSDシステムでは、チャネル間ECCを実施する場合、ECC生成単位分の書込みデータがそろうのを待ってから書込みを行うことを基本としている。このため、チャネル間ECCを実施する場合、1ECCデータ誤り訂正符号化における冗長データを生成してから書き込む、2ECCデータを生成しながら書き込む、のどちらかの方法が採用され得る。1の場合、書込みデータが揃っても、ECCデータの生成が終了するまで当該ECCデータの生成の元になる書込みデータをNANDメモリへ書込むことができない。このため、書込み速度が低下するという問題がある。2の場合、ECCデータの生成処理に入力する順にNANDメモリに転送することにより、ECCデータと当該ECCデータの対応を管理するため、ECCデータにかかわる全てのチャネルECCデータと当該ECCデータに対応する書込みデータとを書き込む全てのチャネルが空くのを待ってからNANDメモリへの書込みを実施することになる。このため、チャネルごとに見た場合、空き時間が生じることとなり非効率である。また、ECCデータとECCデータにかかわる全ての書込みデータの書込みが終了するまで書込み対象のチャネルは解放されない。このため、システムとして優先されるべきリードコマンドが発生しても、対応するチャネルが使用中であり割り込めない確率が増え、システム全体の性能を落とすこととなる。以下に添付図面を参照して、実施形態にかかるメモリコントローラ、メモリシステムおよびメモリ書込み方法を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。図1は、実施の形態にかかるメモリシステムの構成例を示すブロック図である。図1に示すように、本実施の形態のメモリシステム3は、メモリコントローラ1とNANDメモリ不揮発性メモリ2を備える。メモリシステム3は、ホスト4と接続可能であり、図1ではホスト4と接続された状態を示している。ホスト4は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。NANDメモリ2は、データを不揮発に記憶する不揮発性メモリであり、4個のメモリチップメモリ21-1~21-4で構成されている。ここでは、NANDメモリ2を構成するメモリチップの数を4としているが、メモリチップの数はこれに限定されない。また、ここでは、不揮発性メモリとしてNANDメモリ2を用いる例を説明するが、NANDメモリ以外の記憶手段を用いてもよい。メモリコントローラ1は、ホスト4からの書込み要求ライトコマンドに従ってNANDメモリ2への書込みを制御し、またホスト4からの読出し要求リードコマンドに従ってNANDメモリ2からの読出しを制御する。メモリコントローラ1は、リードコマンド受信処理部ReadCommandAcceptor11、ライトコマンド受信処理部WriteCommandAcceptor12、書込みデータ受信処理部WriteDataAcceptor13、リードコマンド発行部ReadCommander14、誤り訂正符号生成部ECCGenerator15、チャネルスケジューラChannelScheduler16、NANDI/Fメモリインタフェース17、およびデータバッファDataBuffer18を備える。NANDI/F17は、NANDメモリ2への書込みや読出しを直接制御するコントローラである。NANDI/F17は、メモリチップに対応する数のチャネル制御部Channel171-1~171-4を有し、チャネル制御部171-1~171-4はそれぞれ対応するメモリ21-1~21-4に対する書込みや読出しを制御する。チャネル制御部171-1~171-4は、並行してNANDメモリ2への書込みや読出しを行うことができる。ここでは、NANDI/F17は、NANDメモリ2のメモリチップの数に合わせて4つのチャネルを有しているが、メモリチップの数が4以外の場合はメモリチップの数のチャネルを有するようにすればよい。なお、以下、チャネル制御部171-ii=1,2,...,4に対応するチャネルをCHiと表記する。リードコマンド受信処理部11は、ホスト4から読出し対象データのアドレスを含む読出し要求を受信すると、リードコマンド発行部14へ読出し要求を通知する。リードコマンド発行部14は、ホスト4から要求された読出し対象データのアドレスをNANDメモリ上のアドレスに変換し、変換したアドレスを含むリードコマンドを発行してチャネルスケジューラ16へ通知する。ライトコマンド受信処理部12は、ホスト4から書込みデータのアドレスを含むライトコマンドを受信すると、誤り訂正符号生成部15へライトコマンドおよび書込みデータのアドレスを通知する。書込みデータ受信処理部13は、ホスト4から書込みデータを受信すると、当該データを誤り訂正符号生成部15へ入力するとともにデータバッファ18へ格納する。誤り訂正符号生成部15は、書込みデータに対してチャネル割付けを実施し、チャネル割付け結果と入力された書込みデータとに基づいて誤り訂正符号化処理を実施する。本実施の形態では、誤り訂正符号の生成の元になるデータが複数のチャネルに分散して配置される複数のメモリチップに分散して格納されるページ間ECCを実施する。また、誤り訂正符号生成部15は、チャネル割付け結果に基づいて書込みデータに対応するNANDメモリ2上のアドレスを含むライトコマンドを発行し、チャネルスケジューラ16へ通知する。チャネルスケジューラ16は、リードコマンド発行部14から発行されたリードコマンドに基づいて、読出し対象のデータが格納されているメモリ21-1~21-4に対応するチャネル制御部171-1~171-4へ当該データを読出すよう指示する。また、チャネルスケジューラ16は、誤り訂正符号生成部15から発行されたライトコマンドに基づいて、データバッファ18に格納されている書込みデータを、当該書込みデータに対応するNANDI/F17のチャネル制御部171-1~171-4へ転送する。図1に、白抜き矢印で、本実施の形態の書込みデータの流れを示している。本実施の形態では、図1の白抜き矢印で示したように、誤り訂正符号生成部15へ入力されるとともにデータバッファ18経由でNANDI/F17へ転送される。なお、本実施の形態では、NANDメモリ2への書込み処理について主として説明するため、図1では、データのフローについては、書込み方向の矢印を示し、また読出し処理に関する構成要素は一部しか示していないが、読出し時には、逆の方向NANDメモリ2からメモリコントローラ1へ向かう方向のデータフローとなる。読出しに関する処理や構成に特に制約はないが、例えば、チャネル制御部171-1~171-4によりNANDメモリ2から読み出されたデータおよび誤り訂正符号は一旦データバッファ18に格納され、誤り訂正処理後のデータがホスト4へ転送される。次に、本実施の形態の書込み処理について詳細に説明する。図2は、本実施の形態の誤り訂正符号生成部15の構成例を示す図である。図2に示すように、本実施の形態の誤り訂正符号生成部15は、チャネル割付け部ChannelAllocator51、ライトコマンド発行部WriteCommander52およびチャネル間ECCエンコーダInter-ChannelECCEncoderECCエンコーダ53を備える。図3は、チャネル割付け部51の構成例を示す図である。図3に示すように、チャネル割付け部51は、チャネル算出部ChannelCalculator511を備える。チャネル算出部511は、ライトコマンド受信処理部12からライトコマンドを受信すると、チャネル数ChannelNumberと誤り訂正符号の配置ECCDestinationとに基づいて、書込みデータ書込みデータのアドレスに割付けるチャネルとNANDメモリ2上のアドレスを計算し、チャネルとアドレスを割付け情報割付け結果としてライトコマンド発行部52へ出力する。また、チャネル算出部511は、ECC生成通知ECCReadyを受信すると、ECCデータに対して割付けるチャネルとNANDメモリ2上のアドレスを計算して割付け情報としてライトコマンド発行部52へ出力する。誤り訂正符号の配置とはNANDメモリ2格納の際のデータフォーマットを示し、誤り訂正符号と当該誤り訂正符号に対応する書込みデータのNANDメモリ2上の記憶位置を決定するための規則を示す。ここで、1つの誤り訂正符号と当該誤り訂正符号に対応する書込みデータとを誤り訂正単位データと呼ぶこととし、誤り訂正単位データのサイズを示す単位を誤り訂正単位と呼ぶこととする。誤り訂正符号の配置は、誤り訂正単位データを書込むNANDメモリ2の書込み領域における誤り訂正符号の配置を示す。例えば、チャネル数が4で3ページ分のデータに基づいて1ページ分の1つの誤り訂正符号を生成する場合に、誤り訂正単位データは4ページとなる。1つの誤り訂正単位データ内の書込みデータを1ページ分ずつ各チャネルに分散させるとすると、CH1~CH4のうちいずれか1つが誤り訂正符号を書込むチャネルとなり、他のチャネルは書込みデータを書込むチャネルとなる。この場合には、誤り訂正符号の配置は、3ページの書込みデータをどのチャネルに書込むかを指定する情報と、どのチャネルに誤り訂正符号を書込こむかを指定する情報と、を含む。CH1~CH4のうち誤り訂正符号を書込むチャネルは、固定でもよいし固定でなくてもよい。なお、誤り訂正符号の配置の具体例については後述する。なお、本実施の形態では、チャネル間ECCを実施するが、誤り訂正符号生成部15に入力されたデータが、複数のチャネルに分散されて配置されるためには、チャネル割付け部51は、誤り訂正符号生成部15に入力されるデータの順序を把握する必要がある。ここでは、書込みデータ受信処理部13が受信した順に誤り訂正符号生成部15にデータが入力されるとし、チャネル割付け部51は、データバッファ18に格納された順に誤り訂正符号生成部15にデータが入力されるとしてチャネル割付けを行う。書込みデータ受信処理部13が受信したデータの順序と誤り訂正符号生成部15へ入力するデータの順序を異なるように構成する場合は、チャネル割付け部51は、誤り訂正符号生成部15へ入力するデータの順序を示す規則を保持しておき、この規則に基づいてチャネル割付けを行えばよい。図4は、チャネル間ECCエンコーダ53の構成例を示す図である。図4に示すように、チャネル間ECCエンコーダ53は、バッファ管理部BufferManager531、スタート検出部StartDetector532、ECC計算部ECCCalculator533、エンド検出部EndDetector534およびECCバッファECCBuffer535を備える。スタート検出部532は、誤り訂正単位データの開始位置、すなわち1つのECCデータに対応する誤り訂正符号化処理の開始を検出する。スタート検出部532は、ECC処理開始要求ECCRequestをチャネル割付け部51またはライトコマンド受信処理部12から受けると、誤り訂正単位データのデータ数EccunitNumber、符号化カウンタ値EncodedCounter、空き領域情報VacantAreaに基づいて、入力される書込みデータについて誤り訂正単位データの開始を検出する。誤り訂正単位データの開始を検出すると、スタート検出部532は、ECCバッファ535上の格納開始アドレスStartAddress:これから生成する誤り訂正符号を格納する領域の開始アドレスを求め、ECC計算部533へ通知する。誤り訂正単位データのデータ数は、誤り訂正単位データの書込みデータのサイズを表し、ここではページ数でサイズを示すとする。符号化カウンタ値は、ECC計算部533により処理されたデータ数をカウントするカウンタ値であり、ここではページ単位でカウントするとする。空き領域情報は、ECCバッファ535上の空き領域を示す情報である。ECC計算部533は、入力された書込みデータに基づいて誤り訂正符号化処理により冗長データを生成し、生成した冗長データをECCデータとしてECCバッファ535へアドレススタート検出部532から通知された格納開始アドレスを指定してECCバッファ535へ格納する。また、ECC計算部533は、符号化処理の中間状態をECCバッファ535の対応する格納領域へ書込み、入力された書込みデータを符号化処理へ反映させるごとに中間時状態を更新するとともに符号化カウンタ値を更新する。また、ECC計算部533は、スタート検出部532から格納開始アドレスが通知された場合には、処理を初期化してECCバッファ535へ格納するアドレスを通知された格納開始アドレスへ変更する。なお、ここでは、ページ単位で書込みデータが入力されるとし、符号化カウンタ値はページごとに更新される。エンド検出部534は、誤り訂正単位データのデータ数および符号化カウンタ値に基づいて入力される書込みデータについて1つのECCデータに対応する誤り訂正符号化処理の終了を検出する。エンド検出部534は、誤り訂正単位データの終了を検出した場合、誤り訂正単位データの終了したことを示すECC生成通知ECCReadyを、当該誤り訂正単位データが格納されたECCバッファ535上のアドレスECCAddressとともにチャネル割付け部51へ出力する。バッファ管理部531は、ECCデータの書込み完了通知ECCWriteDoneと当該ECCデータのアドレスとに基づいて、ECCバッファ535上の空き領域情報を更新する。すなわち、バッファ管理部531は、ECCデータの書込み完了通知を受信したECCデータが格納されていたECCバッファ535上の領域を空き領域に変更する。ECCデータの書込み完了通知ECCWriteDoneは、チャネルスケジューラ16が発行してもよいし、ライトコマンド発行部52が発行してもよい。例えば、誤り訂正単位データが3ページの書込みデータと1ページのECCデータで生成されるとする。書込み処理の開始時には、スタート検出部532は、入力された最初のデータが誤り訂正単位データの開始であると判断し、エンド検出部534は、符号化カウンタ値に基づいて3ページのデータの符号化処理が終了すると誤り訂正単位データの終了を検出する。その後、スタート検出部532は、前の誤り訂正単位データが終了すると次の誤り訂正単位データの開始と判断する。なお、スタート検出部532による誤り訂正単位データの開始位置の検出、およびエンド検出部534による誤り訂正単位データの終了位置の検出方法は、前述の例に限定されず、どのような方法で実施してもよい。図5は、ライトコマンド発行部52の構成例を示す図である。図5に示すように、ライトコマンド発行部52は、解読部Decoder521、受信処理部Acceptor522~525およびコマンド発行部Commander526を備える。解読部521は、チャネル割付け部51から入力される割付け情報を解読し、割付け情報が通知されたデータについてはNANDメモリ2への書込み準備が完了したと判断し、割付け情報により通知された書込み先のチャネルに対応する受信処理部522~525に書込み先のアドレスを通知する。受信処理部522,523,524,525は、それぞれCH1,CH2,CH3,CH4に対応する処理を実施する。例えば、解読部521は、チャネル割付け部51からCH1を書込み先として指定する割付け情報を受け取った場合、CH1に対応する受信処理部522へ当該割付け情報で指定されたアドレスを通知する。受信処理部522~525は、解読部521から通知されたアドレスを、保持しているアドレス数がチャネル書込み処理単位ChannelWrite-Unitに対応する数となるまで保持する。チャネル書込み処理単位は、メモリコントローラ1がNANDメモリ2に対して、書込みのために一度にデータを転送するデータ書込み処理単位の1チャネル当たりのデータサイズを示す単位である。保持しているアドレス数がチャネル書込み処理単位に対応する数となると、受信処理部522~525は、チャネル書込み処理単位に対応する数のアドレスをコマンド発行部526へ入力する。なお、図5では、書込み処理単位を各チャネル4ページずつの16ページとし、チャネルごとにアドレスを4つ保持している例を示しているが、チャネル書込み処理単位はこれに限定されない。コマンド発行部526は、受信処理部522~525から受け取ったアドレスに基づいて、1つの書込み処理単位のアドレスが揃った場合に、当該書込み処理単位に対応するライトコマンドをアドレスパケット書込み先のチャネルとアドレスを含むとともに発行する。チャネルスケジューラ16は、コマンド発行部526から発行されたライトコマンドに基づいて書込み対象の書込みデータまたはECCデータをデータバッファ18またはECCバッファ535から読出しNANDI/F17へ転送してNANDメモリ2への書込みを行う。すなわち、チャネルスケジューラ16は、書込み処理単位でNANDI/F17へデータを転送する。この際、データバッファ18上の書込みデータの格納位置、およびECCバッファ535上のECCデータの格納位置は、ライトコマンドとともにチャネル割付け部51から通知されてもよいし、メモリコントローラ2の図示しない全体制御部等からデータバッファ18上の書込みデータの格納位置、およびECCバッファ535上のECCデータの格納位置が通知されてもよい。なお、一般にNANDメモリでは複数チャネルのデータで書込み処理単位が構成される。例えば、4チャネルの場合に、各チャネル4ページずつの計16ページ分を書込み処理単位とする。本実施の形態では、通常と同様に複数チャネルのデータで書込み処理単位を構成してもよいし、書込み処理単位を複数チャネルのデータで構成せずに、チャネルごとにライトコマンドを発行するようにしてもよい。また、さらに、チャネルごとにページ単位でライトコマンドを発行するようにしてもよいすなわち、書込み処理単位を1ページとする。また、書込み処理単位と誤り訂正単位は同じであってもよいし、異なっていてもよい。図6~9は、本実施の形態のNANDメモリ2へ書込むデータフォーマット誤り訂正符号の配置例を示す図である。図6~9において、Host-Dは1ページのホストデータを示し、ECC-Dは、ECCデータを示している。図6、7は、書込み処理単位と誤り訂正単位が一致する例を示しており、図6は、書込み処理単位および誤り訂正単位が8ページの例を示し、図7は、書込み処理単位および誤り訂正単位が16ページの例を示している。なお、図6または図7に示すフォーマットを繰り返すようにしてもよいし、書込み処理単位内のECC-Dの配置を固定せず変更可能としてもよい。図8、9は、書込み処理単位と誤り訂正単位が一致しない例を示している。図8は、書込み処理単位が誤り訂正単位より小さい例を示しており、誤り訂正単位が8ページであり、書込み処理単位が4ページである。図8の例では、1つの誤り訂正単位は、書込み処理単位U1、U2の2つを含む。図9は、書込み処理単位が誤り訂正単位より大きい例を示しており、誤り訂正単位が8ページであり、書込み処理単位が16ページである。このように、誤り訂正単位は書込み処理単位より大きくてもよいし小さくてもよいが、本実施の形態では誤り訂正単位は書込み処理単位より大きい場合に、より効率的な書込みが実施できる。また、前述したように、書込み処理単位を1ページとしてもよい。次に、本実施の形態の書込み動作について説明する。図10は、本実施の形態のメモリコントローラ1におけるNANDメモリ2への書込み手順の一例を示すフローチャートである。なお、ここでは説明の簡略化のため、1つの誤り訂正単位データをNANDメモリ2へ書き込む例を示し、また誤り訂正単位が書込み処理単位より大きい例を示す。まず、メモリコントローラ1のライトコマンド受信処理部12は、ホストから書込み要求ライトコマンドを受信ステップS1し、ホストデータホストから送信された書込みデータを受信するステップS2。チャネル割付け部51は、ホストデータに対してチャネル割付けを行うステップS3。また、ホストデータは誤り訂正符号生成部15に入力されるステップS4。誤り訂正符号生成部15は、入力されたホストデータに基づいてECCデータ中間状態を含むを生成するステップS5。そして、誤り訂正符号生成部15は、誤り訂正単位データ分のデータを処理したか否かを判断するステップS6。誤り訂正単位データ分のデータを処理した場合ステップS6Yesには、生成されたECCデータは、チャネルスケジューラ16およびNANDI/F17により、書込み処理単位でNANDメモリ2への書込みが実施されステップS8、書込み処理を終了する。NANDI/F17は、転送されたデータをチャネルごとにNANDメモリ2へ書込む。一方、誤り訂正単位データ分のデータを処理していない場合ステップS6No、ステップS4へ戻る。また、ステップS3の後、ステップS4と並行して、チャネルスケジューラ16が、誤り訂正符号生成部15からライトコマンドを受信することにより書込み処理単位のデータに対するチャネル割付けの終了を検知すると、対応する書込み処理単位のホストデータをデータバッファ18から読み出しNANDI/F17へ転送するステップS7。なお、2以上の誤り訂正単位データをNANDメモリ2へ書込む場合は、ステップS2~ステップS8を繰り返す。以上説明したように、本実施の形態では、誤り訂正符号化処理とNANDI/Fへのデータ転送が並行して行われる。このため、書込み速度を向上させることができる。本実施の形態の効果を、図を用いて説明する。図11は、書込み処理単位を1ページとする場合のNANDメモリ2への書込みの順序の一例を示す図である。Host-Diは、1ページのホストデータを示し、iは誤り訂正符号生成部15へ入力される順序を示す。すなわち、Host-D1,Host-D2,Host-D3,...の順に誤り訂正符号生成部15へ入力されるとする。図11のWEjj=1,2,3,4は各ホストデータについてのNANDメモリ2への書込みが終了した順序を示し、WE1、WE2、WE3、WE4の順に書込みが終了したことを示す。すなわち、図11の例では、Host-D3、Host-D2、Host-D1、Host-D4の順に書込みが終了している。図11の例では、誤り訂正単位は8ページとしている。従来は、誤り訂正符号化処理への入力順とNANDメモリ2への書込み順を整合させるため、誤り訂正単位データを書込む全てのチャネルが空くのを待ち、また誤り訂正単位データを書込みが終了するまで誤り訂正単位データを書込むチャネルを解放しない。したがって、図11のように、Host-D3、Host-D2、Host-D1、Host-D4の順に書込みが完了しても、従来の方法では、次の書込みデータHost-D5を書込むCH1が空くまでCH3やCH2の書込みは実施できない。これに対し、本実施の形態では、書込み処理単位のデータが揃えば、NANDメモリ2への書込みを実施するため、ページ単位で書込みを行うとすると図11のWSjj=1,2,3,4で示した順に次のデータを書込むことができる。すなわち、書込みが終了したチャネルから順に次のデータの書込みを実施することができ、チャネルの空時間を低減することができる。図12は、従来の書込み方法と本実施の形態の書込み方法との比較を示す図である。上段は、従来の書込み方法を示し、下段は本実施の形態の書込み方法を示している。図12では、図11に示したフォーマットで書込みを行い、図11に示したWE1、WE2、WE3、WE4の順に書込みが終了することを仮定している。図12に示すように、書込みが終了したチャネルから順に次のデータの書込みを実施するため、従来に比べ空き時間を低減することができる。また、図12に示すように、この8ページ分の書込みを行っている途中に、CH2に対応するデータを読み出すリードコマンドをホストから受信した場合、従来の書込み方法では、全ての誤り訂正単位データの書込みが終了するまで読み出しを行うことができない。これに対し、本実施の形態では、CH2が空くタイミングが従来より早いため、リードコマンドに対応する読み出しを従来に比べ速やかに実施することができる。なお、図11、12では、1ページを書込み処理単位とする例を示したが、図11と同様の誤り訂正単位データのデータフォーマットの場合に、書込み処理単位を4チャネル各1ページの4ページとする場合にも、書込み処理単位の書込みが終了するごとにリードコマンドを受け付けることができるため、従来に比べ、応答速度を向上させることができる。以上のように、本実施の形態では、NANDメモリ2へのデータ書込み処理と誤り訂正符号化処理とを並行して行うようにした。このため、従来に比べ、リードコマンドに対応する読み出しを速やかに実施することができシステム全体の性能を向上させることができる。また、書込み処理単位を適切に設定すると従来に比べ書込み速度を向上させることができる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"