(57)【要約】【課題】チャネル利用効率および書込み速度を向上させることができるメモリコントローラを提供する。【解決手段】複数のチャネルを有し、チャネルごとに不揮発性メモリへの書込みを行うメモリインタフェースと、データバッファと、書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するＥＣＣエンコーダと、書込みデータフォーマットに基づいて書込みデータおよび冗長データに対してチャネルを割付けるチャネル割付け部と、書込みデータをデータバッファへ格納するとともに当該書込みデータをＥＣＣエンコーダへ入力する書込みデータ受信処理部と、チャネル割付け結果に基づいてデータバッファに格納された書込みデータと冗長データとをメモリインタフェースへ転送するチャネルスケジューラと、を備える。【選択図】図１
2013137713.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリを制御するメモリコントローラであって、
複数のチャネルを有し、前記チャネルごとに前記不揮発性メモリへの書込みを行うメモリインタフェースと、
データバッファと、
前記不揮発性メモリへ書込まれる書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するＥＣＣエンコーダと、
前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネルを割付けるチャネル割付け部と、
前記書込みデータを前記データバッファへ格納するとともに当該書込みデータを前記ＥＣＣエンコーダへ入力する書込みデータ受信処理部と、
前記チャネル割付け部による割付け結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを前記メモリインタフェースの前記チャネルへ転送するチャネルスケジューラと、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記データフォーマットを、１つの前記冗長データに対応する前記書込みデータを２以上の前記チャネルに分散させて配置するフォーマットとすることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記メモリインタフェースに対して転送を行うデータ単位を書込み処理単位とし、
前記チャネル割付け部による割付け結果を受信し、前記割付け結果に基づいて書込み処理単位に対応するデータの書込み準備が完了したと判断すると、前記チャネルスケジューラに対して当該書込みデータの書込みを指示するライトコマンドを発行するライトコマンド発行部、
をさらに備え、
前記チャネルスケジューラは、前記ライトコマンド発行部から前記ライトコマンドに基づいて前記メモリインタフェースへの前記書込みデータおよび前記冗長データの転送を実施することを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
前記書込み処理単位のデータサイズは、１つの前記冗長データに対応する前記書込みデータおよび当該冗長データで構成される誤り訂正単位データのサイズより小さいことを特徴とする請求項３に記載のメモリコントローラ。
【請求項５】
前記書込み処理単位のデータは、単一の前記チャネルに書き込まれるデータで構成されることを特徴とする請求項４に記載のメモリコントローラ。
【請求項６】
前記ＥＣＣエンコーダは、
前記冗長データを格納するＥＣＣバッファと、
前記メモリインタフェースへの転送が実施されたことを通知された前記冗長データについて、当該冗長データが格納されているＥＣＣバッファを空き領域に変更するバッファ管理部と、
を備えることを特徴とする請求項１乃至５のいずれか一項に記載のメモリコントローラ。
【請求項７】
前記ＥＣＣエンコーダは、
入力される前記書込みデータについて、前記冗長データの元になる前記書込みデータの開始位置を検出し、前記ＥＣＣバッファの空き領域の情報に基づいて、前記冗長データを格納する前記ＥＣＣバッファ上の開始アドレスを決定するスタート検出部と、
所定のデータ単位の前記書込みデータを入力データとし、前記スタート検出部により検出された開始位置の入力データを始めの入力として誤り訂正符号化処理の結果を求め、前記結果を前記ＥＣＣバッファの前記開始アドレスへ格納し、以降入力データを追加するごとに誤り訂正符号化処理を実施して前記ＥＣＣバッファの前記結果を更新し、入力データごとに前記誤り訂正符号化処理が実施されると符号化カウンタの値を更新するＥＣＣ計算部と、
前記冗長データの元になる入力データの個数と前記符号化カウンタのカウンタ値とに基づいて前記冗長データの生成終了を検出した場合に、前記冗長データの生成終了を前記チャネル割付け部へ通知するエンド検出部と、
を備え、
前記チャネル割付け部は、前記通知により生成終了が通知された前記冗長データに対して前記チャネルを割付けることを特徴とする請求項６に記載のメモリコントローラ。
【請求項８】
不揮発性メモリと、
複数のチャネルを有し、前記チャネルごとに前記不揮発性メモリへの書込みを行うメモリインタフェースと、
データバッファと、
前記不揮発性メモリへ書込まれる書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するＥＣＣエンコーダと、
前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネルを割付けるチャネル割付け部と、
前記書込みデータを前記データバッファへ格納するとともに当該書込みデータを前記ＥＣＣエンコーダへ入力する書込みデータ受信処理部と、
前記チャネル割付け部による割付け結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを前記メモリインタフェースの前記チャネルへ転送するチャネルスケジューラと、
を備えることを特徴とするメモリシステム。
【請求項９】
複数のチャネルにより読み書き可能な不揮発性メモリとＥＣＣエンコーダとを備えるメモリシステムにおけるメモリ書込み方法であって、
前記不揮発性メモリへ書込まれる書込みデータをデータバッファへ格納するとともに当該書込みデータをＥＣＣエンコーダへ入力するステップと、
前記書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するステップと、
前記不揮発性メモリへの書込みデータフォーマットに基づいて前記書込みデータおよび前記冗長データに対して前記チャネル割付けを実施するステップと、
前記チャネル割付けの結果に基づいて前記データバッファに格納された前記書込みデータと前記冗長データとを対応するチャネルへ転送するステップと、
チャネルごとに前記不揮発性メモリへの書込みを行うステップと、
を含むことを特徴とするメモリ書込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリコントローラ、メモリシステムおよびメモリ書込み方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリという）を用いたＳＳＤ（Solid  State  Drive）システムでは、一般に、信頼性確保のために記憶するデータとともに誤り訂正符号における冗長データをＮＡＮＤメモリへ格納する。ＳＳＤシステムのメモリコントローラでは、複数のチャネルを有し、各チャネルで並行してＮＡＮＤメモリの読み書きを実施する場合がある。各チャネルは、一般にＮＡＮＤメモリのメモリチップにそれぞれ対応している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１９５９９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態は、チャネル利用効率および書込み速度を向上させることができるメモリコントローラ、メモリシステムおよびメモリ書込み方法を提供する。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、複数のチャネルを有し、チャネルごとに不揮発性メモリへの書込みを行うメモリインタフェースと、データバッファと、書込みデータに基づいて誤り訂正符号化処理を実施して冗長データを生成するＥＣＣエンコーダと、書込みデータフォーマットに基づいて書込みデータおよび冗長データに対してチャネルを割付けるチャネル割付け部と、書込みデータをデータバッファへ格納するとともに当該書込みデータをＥＣＣエンコーダへ入力する書込みデータ受信処理部と、チャネル割付け結果に基づいてデータバッファに格納された書込みデータと冗長データとをメモリインタフェースへ転送するチャネルスケジューラと、を備える。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態にかかるメモリシステムの構成例を示すブロック図である。
【図２】図２は、誤り訂正符号生成部の構成例を示す図である。
【図３】図３は、チャネル割付け部の構成例を示す図である。
【図４】図４は、チャネル間ＥＣＣエンコーダの構成例を示す図である。
【図５】図５は、ライトコマンド発行部の構成例を示す図である。
【図６】図６は、書込み処理単位と誤り訂正単位が一致する場合のデータフォーマットの一例を示す図である。
【図７】図７は、書込み処理単位と誤り訂正単位が一致する場合のデータフォーマットの一例を示す図である。
【図８】図８は、書込み処理単位が誤り訂正単位より小さい場合のデータフォーマットの一例を示す図である。
【図９】図９は、書込み処理単位が誤り訂正単位より大きい場合のデータフォーマットの一例を示す図である。
【図１０】図１０は、メモリコントローラにおけるＮＡＮＤメモリへの書込み手順の一例を示すフローチャートである。
【図１１】図１１は、ＮＡＮＤメモリへの書込みの順序の一例を示す図である。
【図１２】図１２は、従来の書込み方法と本実施の形態の書込み方法との比較を示す図である。
【発明を実施するための形態】
【０００７】
複数のチャネルを有するＳＳＤシステムでは、メモリチップ単位の故障時にデータを復元可能とするために、誤り訂正符号の元となるデータを複数のチャネルに分散させて書き込むチャネル間ＥＣＣ（Error  Check  and  Correct）が導入されることがある。この様なＳＳＤシステムでは、チャネル間ＥＣＣを実施する場合、ＥＣＣ生成単位分の書込みデータがそろうのを待ってから書込みを行うことを基本としている。
【０００８】
このため、チャネル間ＥＣＣを実施する場合、（１）ＥＣＣデータ（誤り訂正符号化における冗長データ）を生成してから書き込む、（２）ＥＣＣデータを生成しながら書き込む、のどちらかの方法が採用され得る。（１）の場合、書込みデータが揃っても、ＥＣＣデータの生成が終了するまで当該ＥＣＣデータの生成の元になる書込みデータをＮＡＮＤメモリへ書込むことができない。このため、書込み速度が低下するという問題がある。
【０００９】
（２）の場合、ＥＣＣデータの生成処理に入力する順にＮＡＮＤメモリに転送することにより、ＥＣＣデータと当該ＥＣＣデータの対応を管理するため、ＥＣＣデータにかかわる全てのチャネル（ＥＣＣデータと当該ＥＣＣデータに対応する書込みデータとを書き込む全てのチャネル）が空くのを待ってからＮＡＮＤメモリへの書込みを実施することになる。このため、チャネルごとに見た場合、空き時間が生じることとなり非効率である。また、ＥＣＣデータとＥＣＣデータにかかわる全ての書込みデータの書込みが終了するまで書込み対象のチャネルは解放されない。このため、システムとして優先されるべきリードコマンドが発生しても、対応するチャネルが使用中であり割り込めない確率が増え、システム全体の性能を落とすこととなる。
【００１０】
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、メモリシステムおよびメモリ書込み方法を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【００１１】
図１は、実施の形態にかかるメモリシステムの構成例を示すブロック図である。図１に示すように、本実施の形態のメモリシステム３は、メモリコントローラ１とＮＡＮＤメモリ（不揮発性メモリ）２を備える。メモリシステム３は、ホスト４と接続可能であり、図１ではホスト４と接続された状態を示している。ホスト４は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
【００１２】
ＮＡＮＤメモリ２は、データを不揮発に記憶する不揮発性メモリであり、４個のメモリチップ（メモリ２１−１〜２１−４）で構成されている。ここでは、ＮＡＮＤメモリ２を構成するメモリチップの数を４としているが、メモリチップの数はこれに限定されない。また、ここでは、不揮発性メモリとしてＮＡＮＤメモリ２を用いる例を説明するが、ＮＡＮＤメモリ以外の記憶手段を用いてもよい。
【００１３】
メモリコントローラ１は、ホスト４からの書込み要求（ライトコマンド）に従ってＮＡＮＤメモリ２への書込みを制御し、またホスト４からの読出し要求（リードコマンド）に従ってＮＡＮＤメモリ２からの読出しを制御する。メモリコントローラ１は、リードコマンド受信処理部（Read  Command  Acceptor）１１、ライトコマンド受信処理部（Write  Command  Acceptor）１２、書込みデータ受信処理部（Write  Data  Acceptor）１３、リードコマンド発行部（Read  Commander）１４、誤り訂正符号生成部（ＥＣＣ  Generator）１５、チャネルスケジューラ（Channel  Scheduler）１６、ＮＡＮＤＩ／Ｆ（メモリインタフェース）１７、およびデータバッファ（Data  Buffer）１８を備える。
【００１４】
ＮＡＮＤＩ／Ｆ１７は、ＮＡＮＤメモリ２への書込みや読出しを直接制御するコントローラである。ＮＡＮＤＩ／Ｆ１７は、メモリチップに対応する数のチャネル制御部（Channel）１７１−１〜１７１−４を有し、チャネル制御部１７１−１〜１７１−４はそれぞれ対応するメモリ２１−１〜２１−４に対する書込みや読出しを制御する。チャネル制御部１７１−１〜１７１−４は、並行してＮＡＮＤメモリ２への書込みや読出しを行うことができる。ここでは、ＮＡＮＤＩ／Ｆ１７は、ＮＡＮＤメモリ２のメモリチップの数に合わせて４つのチャネルを有しているが、メモリチップの数が４以外の場合はメモリチップの数のチャネルを有するようにすればよい。なお、以下、チャネル制御部１７１−ｉ（ｉ＝１，２，…，４）に対応するチャネルをＣＨ＃ｉと表記する。
【００１５】
リードコマンド受信処理部１１は、ホスト４から読出し対象データのアドレスを含む読出し要求を受信すると、リードコマンド発行部１４へ読出し要求を通知する。リードコマンド発行部１４は、ホスト４から要求された読出し対象データのアドレスをＮＡＮＤメモリ上のアドレスに変換し、変換したアドレスを含むリードコマンドを発行してチャネルスケジューラ１６へ通知する。
【００１６】
ライトコマンド受信処理部１２は、ホスト４から書込みデータのアドレスを含むライトコマンドを受信すると、誤り訂正符号生成部１５へライトコマンドおよび書込みデータのアドレスを通知する。書込みデータ受信処理部１３は、ホスト４から書込みデータを受信すると、当該データを誤り訂正符号生成部１５へ入力するとともにデータバッファ１８へ格納する。
【００１７】
誤り訂正符号生成部１５は、書込みデータに対してチャネル割付けを実施し、チャネル割付け結果と入力された書込みデータとに基づいて誤り訂正符号化処理を実施する。本実施の形態では、誤り訂正符号の生成の元になるデータが複数のチャネルに分散して配置される（複数のメモリチップに分散して格納される）ページ間ＥＣＣを実施する。また、誤り訂正符号生成部１５は、チャネル割付け結果に基づいて書込みデータに対応するＮＡＮＤメモリ２上のアドレスを含むライトコマンドを発行し、チャネルスケジューラ１６へ通知する。
【００１８】
チャネルスケジューラ１６は、リードコマンド発行部１４から発行されたリードコマンドに基づいて、読出し対象のデータが格納されているメモリ２１−１〜２１−４に対応するチャネル制御部１７１−１〜１７１−４へ当該データを読出すよう指示する。また、チャネルスケジューラ１６は、誤り訂正符号生成部１５から発行されたライトコマンドに基づいて、データバッファ１８に格納されている書込みデータを、当該書込みデータに対応するＮＡＮＤＩ／Ｆ１７のチャネル制御部１７１−１〜１７１−４へ転送する。
【００１９】
図１に、白抜き矢印で、本実施の形態の書込みデータの流れを示している。本実施の形態では、図１の白抜き矢印で示したように、誤り訂正符号生成部１５へ入力されるとともにデータバッファ１８経由でＮＡＮＤＩ／Ｆ１７へ転送される。
【００２０】
なお、本実施の形態では、ＮＡＮＤメモリ２への書込み処理について主として説明するため、図１では、データのフローについては、書込み方向の矢印を示し、また読出し処理に関する構成要素は一部しか示していないが、読出し時には、逆の方向（ＮＡＮＤメモリ２からメモリコントローラ１へ向かう方向）のデータフローとなる。読出しに関する処理や構成に特に制約はないが、例えば、チャネル制御部１７１−１〜１７１−４によりＮＡＮＤメモリ２から読み出されたデータおよび誤り訂正符号は一旦データバッファ１８に格納され、誤り訂正処理後のデータがホスト４へ転送される。
【００２１】
次に、本実施の形態の書込み処理について詳細に説明する。図２は、本実施の形態の誤り訂正符号生成部１５の構成例を示す図である。図２に示すように、本実施の形態の誤り訂正符号生成部１５は、チャネル割付け部（Channel  Allocator）５１、ライトコマンド発行部（Write  Commander）５２およびチャネル間ＥＣＣエンコーダ（Inter−Channel  ECC  Encoder）（ＥＣＣ  エンコーダ）５３を備える。
【００２２】
図３は、チャネル割付け部５１の構成例を示す図である。図３に示すように、チャネル割付け部５１は、チャネル算出部（Channel  Calculator）５１１を備える。チャネル算出部５１１は、ライトコマンド受信処理部１２からライトコマンドを受信すると、チャネル数（Channel  Number）と誤り訂正符号の配置（ＥＣＣ  Destination）とに基づいて、書込みデータ（書込みデータのアドレス）に割付けるチャネルとＮＡＮＤメモリ２上のアドレスを計算し、チャネルとアドレスを割付け情報（割付け結果）としてライトコマンド発行部５２へ出力する。また、チャネル算出部５１１は、ＥＣＣ生成通知（ＥＣＣ  Ready）を受信すると、ＥＣＣデータに対して割付けるチャネルとＮＡＮＤメモリ２上のアドレスを計算して割付け情報としてライトコマンド発行部５２へ出力する。
【００２３】
誤り訂正符号の配置とはＮＡＮＤメモリ２格納の際のデータフォーマットを示し、誤り訂正符号と当該誤り訂正符号に対応する書込みデータのＮＡＮＤメモリ２上の記憶位置を決定するための規則を示す。ここで、１つの誤り訂正符号と当該誤り訂正符号に対応する書込みデータとを誤り訂正単位データと呼ぶこととし、誤り訂正単位データのサイズを示す単位を誤り訂正単位と呼ぶこととする。誤り訂正符号の配置は、誤り訂正単位データを書込むＮＡＮＤメモリ２の書込み領域における誤り訂正符号の配置を示す。例えば、チャネル数が４で３ページ分のデータに基づいて１ページ分の１つの誤り訂正符号を生成する場合に、誤り訂正単位データは４ページとなる。１つの誤り訂正単位データ内の書込みデータを１ページ分ずつ各チャネルに分散させるとすると、ＣＨ＃１〜ＣＨ＃４のうちいずれか１つが誤り訂正符号を書込むチャネルとなり、他のチャネルは書込みデータを書込むチャネルとなる。この場合には、誤り訂正符号の配置は、３ページの書込みデータをどのチャネルに書込むかを指定する情報と、どのチャネルに誤り訂正符号を書込こむかを指定する情報と、を含む。ＣＨ＃１〜ＣＨ＃４のうち誤り訂正符号を書込むチャネルは、固定でもよいし固定でなくてもよい。なお、誤り訂正符号の配置の具体例については後述する。
【００２４】
なお、本実施の形態では、チャネル間ＥＣＣを実施するが、誤り訂正符号生成部１５に入力されたデータが、複数のチャネルに分散されて配置されるためには、チャネル割付け部５１は、誤り訂正符号生成部１５に入力されるデータの順序を把握する必要がある。ここでは、書込みデータ受信処理部１３が受信した順に誤り訂正符号生成部１５にデータが入力されるとし、チャネル割付け部５１は、データバッファ１８に格納された順に誤り訂正符号生成部１５にデータが入力されるとしてチャネル割付けを行う。書込みデータ受信処理部１３が受信したデータの順序と誤り訂正符号生成部１５へ入力するデータの順序を異なるように構成する場合は、チャネル割付け部５１は、誤り訂正符号生成部１５へ入力するデータの順序を示す規則を保持しておき、この規則に基づいてチャネル割付けを行えばよい。
【００２５】
図４は、チャネル間ＥＣＣエンコーダ５３の構成例を示す図である。図４に示すように、チャネル間ＥＣＣエンコーダ５３は、バッファ管理部（Buffer  Manager）５３１、スタート検出部（Start  Detector）５３２、ＥＣＣ計算部（ＥＣＣ  Calculator）５３３、エンド検出部（End  Detector）５３４およびＥＣＣバッファ（ＥＣＣ  Buffer）５３５を備える。
【００２６】
スタート検出部５３２は、誤り訂正単位データの開始位置、すなわち１つのＥＣＣデータに対応する誤り訂正符号化処理の開始を検出する。スタート検出部５３２は、ＥＣＣ処理開始要求（ＥＣＣ  Request）をチャネル割付け部５１またはライトコマンド受信処理部１２から受けると、誤り訂正単位データのデータ数（Ecc-unit  Number）、符号化カウンタ値（Encoded  Counter）、空き領域情報（Vacant  Area）に基づいて、入力される書込みデータについて誤り訂正単位データの開始を検出する。誤り訂正単位データの開始を検出すると、スタート検出部５３２は、ＥＣＣバッファ５３５上の格納開始アドレス（Start  Address：これから生成する誤り訂正符号を格納する領域の開始アドレス）を求め、ＥＣＣ計算部５３３へ通知する。誤り訂正単位データのデータ数は、誤り訂正単位データの書込みデータのサイズを表し、ここではページ数でサイズを示すとする。符号化カウンタ値は、ＥＣＣ計算部５３３により処理されたデータ数をカウントするカウンタ値であり、ここではページ単位でカウントするとする。空き領域情報は、ＥＣＣバッファ５３５上の空き領域を示す情報である。
【００２７】
ＥＣＣ計算部５３３は、入力された書込みデータに基づいて誤り訂正符号化処理により冗長データを生成し、生成した冗長データをＥＣＣデータとしてＥＣＣバッファ５３５へアドレス（スタート検出部５３２から通知された格納開始アドレス）を指定してＥＣＣバッファ５３５へ格納する。また、ＥＣＣ計算部５３３は、符号化処理の中間状態をＥＣＣバッファ５３５の対応する格納領域へ書込み、入力された書込みデータを符号化処理へ反映させるごとに中間時状態を更新するとともに符号化カウンタ値を更新する。また、ＥＣＣ計算部５３３は、スタート検出部５３２から格納開始アドレスが通知された場合には、処理を初期化してＥＣＣバッファ５３５へ格納するアドレスを通知された格納開始アドレスへ変更する。なお、ここでは、ページ単位で書込みデータが入力されるとし、符号化カウンタ値はページごとに更新される。
【００２８】
エンド検出部５３４は、誤り訂正単位データのデータ数および符号化カウンタ値に基づいて入力される書込みデータについて１つのＥＣＣデータに対応する誤り訂正符号化処理の終了を検出する。エンド検出部５３４は、誤り訂正単位データの終了を検出した場合、誤り訂正単位データの終了したことを示すＥＣＣ生成通知（ＥＣＣ  Ready）を、当該誤り訂正単位データが格納されたＥＣＣバッファ５３５上のアドレス（ＥＣＣ  Address）とともにチャネル割付け部５１へ出力する。
【００２９】
バッファ管理部５３１は、ＥＣＣデータの書込み完了通知（ＥＣＣ  Write  Done）と当該ＥＣＣデータのアドレスとに基づいて、ＥＣＣバッファ５３５上の空き領域情報を更新する。すなわち、バッファ管理部５３１は、ＥＣＣデータの書込み完了通知を受信したＥＣＣデータが格納されていたＥＣＣバッファ５３５上の領域を空き領域に変更する。ＥＣＣデータの書込み完了通知（ＥＣＣ  Write  Done）は、チャネルスケジューラ１６が発行してもよいし、ライトコマンド発行部５２が発行してもよい。
【００３０】
例えば、誤り訂正単位データが３ページの書込みデータと１ページのＥＣＣデータで生成されるとする。書込み処理の開始時には、スタート検出部５３２は、入力された最初のデータが誤り訂正単位データの開始であると判断し、エンド検出部５３４は、符号化カウンタ値に基づいて３ページのデータの符号化処理が終了すると誤り訂正単位データの終了を検出する。その後、スタート検出部５３２は、前の誤り訂正単位データが終了すると次の誤り訂正単位データの開始と判断する。
【００３１】
なお、スタート検出部５３２による誤り訂正単位データの開始位置の検出、およびエンド検出部５３４による誤り訂正単位データの終了位置の検出方法は、前述の例に限定されず、どのような方法で実施してもよい。
【００３２】
図５は、ライトコマンド発行部５２の構成例を示す図である。図５に示すように、ライトコマンド発行部５２は、解読部（Decoder）５２１、受信処理部（Acceptor）５２２〜５２５およびコマンド発行部（Commander）５２６を備える。
【００３３】
解読部５２１は、チャネル割付け部５１から入力される割付け情報を解読し、割付け情報が通知されたデータについてはＮＡＮＤメモリ２への書込み準備が完了したと判断し、割付け情報により通知された書込み先のチャネルに対応する受信処理部５２２〜５２５に書込み先のアドレスを通知する。受信処理部５２２，５２３，５２４，５２５は、それぞれＣＨ＃１，ＣＨ＃２，ＣＨ＃３，ＣＨ＃４に対応する処理を実施する。例えば、解読部５２１は、チャネル割付け部５１からＣＨ＃１を書込み先として指定する割付け情報を受け取った場合、ＣＨ＃１に対応する受信処理部５２２へ当該割付け情報で指定されたアドレスを通知する。
【００３４】
受信処理部５２２〜５２５は、解読部５２１から通知されたアドレスを、保持しているアドレス数がチャネル書込み処理単位（Channel  Write−Unit）に対応する数となるまで保持する。チャネル書込み処理単位は、メモリコントローラ１がＮＡＮＤメモリ２に対して、書込みのために一度にデータを転送するデータ（書込み処理単位）の１チャネル当たりのデータサイズを示す単位である。保持しているアドレス数がチャネル書込み処理単位に対応する数となると、受信処理部５２２〜５２５は、チャネル書込み処理単位に対応する数のアドレスをコマンド発行部５２６へ入力する。なお、図５では、書込み処理単位を各チャネル４ページずつの１６ページとし、チャネルごとにアドレスを４つ保持している例を示しているが、チャネル書込み処理単位はこれに限定されない。
【００３５】
コマンド発行部５２６は、受信処理部５２２〜５２５から受け取ったアドレスに基づいて、１つの書込み処理単位のアドレスが揃った場合に、当該書込み処理単位に対応するライトコマンドをアドレスパケット（書込み先のチャネルとアドレスを含む）とともに発行する。
【００３６】
チャネルスケジューラ１６は、コマンド発行部５２６から発行されたライトコマンドに基づいて書込み対象の書込みデータまたはＥＣＣデータをデータバッファ１８またはＥＣＣバッファ５３５から読出しＮＡＮＤＩ／Ｆ１７へ転送してＮＡＮＤメモリ２への書込みを行う。すなわち、チャネルスケジューラ１６は、書込み処理単位でＮＡＮＤＩ／Ｆ１７へデータを転送する。この際、データバッファ１８上の書込みデータの格納位置、およびＥＣＣバッファ５３５上のＥＣＣデータの格納位置は、ライトコマンドとともにチャネル割付け部５１から通知されてもよいし、メモリコントローラ２の図示しない全体制御部等からデータバッファ１８上の書込みデータの格納位置、およびＥＣＣバッファ５３５上のＥＣＣデータの格納位置が通知されてもよい。
【００３７】
なお、一般にＮＡＮＤメモリでは複数チャネルのデータで書込み処理単位が構成される。例えば、４チャネルの場合に、各チャネル４ページずつの計１６ページ分を書込み処理単位とする。本実施の形態では、通常と同様に複数チャネルのデータで書込み処理単位を構成してもよいし、書込み処理単位を複数チャネルのデータで構成せずに、チャネルごとにライトコマンドを発行するようにしてもよい。また、さらに、チャネルごとにページ単位でライトコマンドを発行するようにしてもよい（すなわち、書込み処理単位を１ページとする）。
【００３８】
また、書込み処理単位と誤り訂正単位は同じであってもよいし、異なっていてもよい。図６〜９は、本実施の形態のＮＡＮＤメモリ２へ書込むデータフォーマット（誤り訂正符号の配置）例を示す図である。図６〜９において、Host−Dは１ページのホストデータを示し、ECC−Dは、ＥＣＣデータを示している。図６、７は、書込み処理単位と誤り訂正単位が一致する例を示しており、図６は、書込み処理単位および誤り訂正単位が８ページの例を示し、図７は、書込み処理単位および誤り訂正単位が１６ページの例を示している。なお、図６または図７に示すフォーマットを繰り返すようにしてもよいし、書込み処理単位内のECC−Dの配置を固定せず変更可能としてもよい。
【００３９】
図８、９は、書込み処理単位と誤り訂正単位が一致しない例を示している。図８は、書込み処理単位が誤り訂正単位より小さい例を示しており、誤り訂正単位が８ページであり、書込み処理単位が４ページである。図８の例では、１つの誤り訂正単位は、書込み処理単位Ｕ１、Ｕ２の２つを含む。図９は、書込み処理単位が誤り訂正単位より大きい例を示しており、誤り訂正単位が８ページであり、書込み処理単位が１６ページである。このように、誤り訂正単位は書込み処理単位より大きくてもよいし小さくてもよいが、本実施の形態では誤り訂正単位は書込み処理単位より大きい場合に、より効率的な書込みが実施できる。また、前述したように、書込み処理単位を１ページとしてもよい。
【００４０】
次に、本実施の形態の書込み動作について説明する。図１０は、本実施の形態のメモリコントローラ１におけるＮＡＮＤメモリ２への書込み手順の一例を示すフローチャートである。なお、ここでは説明の簡略化のため、１つの誤り訂正単位データをＮＡＮＤメモリ２へ書き込む例を示し、また誤り訂正単位が書込み処理単位より大きい例を示す。まず、メモリコントローラ１のライトコマンド受信処理部１２は、ホストから書込み要求（ライトコマンド）を受信（ステップＳ１）し、ホストデータ（ホストから送信された書込みデータ）を受信する（ステップＳ２）。
【００４１】
チャネル割付け部５１は、ホストデータに対してチャネル割付けを行う（ステップＳ３）。また、ホストデータは誤り訂正符号生成部１５に入力される（ステップＳ４）。誤り訂正符号生成部１５は、入力されたホストデータに基づいてＥＣＣデータ（中間状態を含む）を生成する（ステップＳ５）。そして、誤り訂正符号生成部１５は、誤り訂正単位データ分のデータを処理したか否かを判断する（ステップＳ６）。誤り訂正単位データ分のデータを処理した場合（ステップＳ６  Ｙｅｓ）には、生成されたＥＣＣデータは、チャネルスケジューラ１６およびＮＡＮＤＩ／Ｆ１７により、書込み処理単位でＮＡＮＤメモリ２への書込みが実施され（ステップＳ８）、書込み処理を終了する。ＮＡＮＤＩ／Ｆ１７は、転送されたデータをチャネルごとにＮＡＮＤメモリ２へ書込む。
【００４２】
一方、誤り訂正単位データ分のデータを処理していない場合（ステップＳ６  Ｎｏ）、ステップＳ４へ戻る。また、ステップＳ３の後、ステップＳ４と並行して、チャネルスケジューラ１６が、誤り訂正符号生成部１５からライトコマンドを受信することにより書込み処理単位のデータに対するチャネル割付けの終了を検知すると、対応する書込み処理単位のホストデータをデータバッファ１８から読み出しＮＡＮＤＩ／Ｆ１７へ転送する（ステップＳ７）。
【００４３】
なお、２以上の誤り訂正単位データをＮＡＮＤメモリ２へ書込む場合は、ステップＳ２〜ステップＳ８を繰り返す。
【００４４】
以上説明したように、本実施の形態では、誤り訂正符号化処理とＮＡＮＤＩ／Ｆへのデータ転送が並行して行われる。このため、書込み速度を向上させることができる。
【００４５】
本実施の形態の効果を、図を用いて説明する。図１１は、書込み処理単位を１ページとする場合のＮＡＮＤメモリ２への書込みの順序の一例を示す図である。Host−D＃ｉは、１ページのホストデータを示し、ｉは誤り訂正符号生成部１５へ入力される順序を示す。すなわち、Host−D＃１，Host−D＃２，Host−D＃３，…の順に誤り訂正符号生成部１５へ入力されるとする。図１１の（ＷＥｊ）（ｊ＝１，２，３，４）は各ホストデータについてのＮＡＮＤメモリ２への書込みが終了した順序を示し、（ＷＥ１）、（ＷＥ２）、（ＷＥ３）、（ＷＥ４）の順に書込みが終了したことを示す。すなわち、図１１の例では、Host−D＃３、Host−D＃２、Host−D＃１、Host−D＃４の順に書込みが終了している。図１１の例では、誤り訂正単位は８ページとしている。
【００４６】
従来は、誤り訂正符号化処理への入力順とＮＡＮＤメモリ２への書込み順を整合させるため、誤り訂正単位データを書込む全てのチャネルが空くのを待ち、また誤り訂正単位データを書込みが終了するまで誤り訂正単位データを書込むチャネルを解放しない。したがって、図１１のように、Host−D＃３、Host−D＃２、Host−D＃１、Host−D＃４の順に書込みが完了しても、従来の方法では、次の書込みデータHost−D＃５を書込むＣＨ＃１が空くまでＣＨ＃３やＣＨ＃２の書込みは実施できない。これに対し、本実施の形態では、書込み処理単位のデータが揃えば、ＮＡＮＤメモリ２への書込みを実施するため、ページ単位で書込みを行うとすると図１１の（ＷＳｊ）（ｊ＝１，２，３，４）で示した順に次のデータを書込むことができる。すなわち、書込みが終了したチャネルから順に次のデータの書込みを実施することができ、チャネルの空時間を低減することができる。
【００４７】
図１２は、従来の書込み方法と本実施の形態の書込み方法との比較を示す図である。上段は、従来の書込み方法を示し、下段は本実施の形態の書込み方法を示している。図１２では、図１１に示したフォーマットで書込みを行い、図１１に示した（ＷＥ１）、（ＷＥ２）、（ＷＥ３）、（ＷＥ４）の順に書込みが終了することを仮定している。図１２に示すように、書込みが終了したチャネルから順に次のデータの書込みを実施するため、従来に比べ空き時間を低減することができる。
【００４８】
また、図１２に示すように、この８ページ分の書込みを行っている途中に、ＣＨ＃２に対応するデータを読み出すリードコマンドをホストから受信した場合、従来の書込み方法では、全ての誤り訂正単位データの書込みが終了するまで読み出しを行うことができない。これに対し、本実施の形態では、ＣＨ＃２が空くタイミングが従来より早いため、リードコマンドに対応する読み出しを従来に比べ速やかに実施することができる。
【００４９】
なお、図１１、１２では、１ページを書込み処理単位とする例を示したが、図１１と同様の誤り訂正単位データのデータフォーマットの場合に、書込み処理単位を４チャネル各１ページの４ページとする場合にも、書込み処理単位の書込みが終了するごとにリードコマンドを受け付けることができるため、従来に比べ、応答速度を向上させることができる。
【００５０】
以上のように、本実施の形態では、ＮＡＮＤメモリ２へのデータ書込み処理と誤り訂正符号化処理とを並行して行うようにした。このため、従来に比べ、リードコマンドに対応する読み出しを速やかに実施することができシステム全体の性能を向上させることができる。また、書込み処理単位を適切に設定すると従来に比べ書込み速度を向上させることができる。
【００５１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５２】
１  メモリコントローラ、２  ＮＡＮＤメモリ、３  メモリシステム、４  ホスト、１１  リードコマンド受信処理部、１２  ライトコマンド受信処理部、１５  誤り訂正符号生成部、１６  チャネルスケジューラ、１７  ＮＡＮＤＩ／Ｆ、１８  データバッファ、５１  チャネル割付け部  ５２  ライトコマンド発行部、５３  チャネル間ＥＣＣエンコーダ、５３５  ＥＣＣバッファ。
【図１】
2013137713.tif 000003
【図２】
2013137713.tif 000004
【図３】
2013137713.tif 000005
【図４】
2013137713.tif 000006
【図５】
2013137713.tif 000007
【図６】
2013137713.tif 000008
【図７】
2013137713.tif 000009
【図８】
2013137713.tif 000010
【図９】
2013137713.tif 000011
【図１０】
2013137713.tif 000012
【図１１】
2013137713.tif 000013
【図１２】
2013137713.tif 000014