(57)【要約】【課題】転送効率を向上させる。【解決手段】メモリセルアレイおよびリードデータを一時記憶する読み出しバッファを備える第１メモリと、ホスト装置からのライトデータを一時記憶する第２メモリと、先に到着したコマンドにアクセス範囲が重複する後に到着したコマンドを除くコマンドをコマンドキューから取り出してリードキューまたはライトキューに記憶させるコマンド振り分け部と、リードキューが記憶しているリードコマンドにかかるリードデータをメモリセルアレイから読み出しバッファに読み出させる頭出し処理と、読み出させたリードデータをホスト装置に転送する第１データ転送と、を逐次実行し、ライトキューが記憶しているライトコマンドにかかるライトデータを受け付けて第２メモリに格納する第２データ転送を逐次実行し、頭出し処理と第２データ転送とを並行して実行するデータ転送系を備える。【選択図】図２
2012128644.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性のメモリセルアレイと、前記メモリセルアレイから読み出した単位サイズのリードデータを出力する前に当該リードデータを一時記憶する読み出しバッファと、を備える第１メモリと、
ホスト装置からのライトデータを一時記憶する第２メモリと、
前記ホスト装置から受信したライトコマンドおよびリードコマンドを蓄積記憶するコマンドキューと、
リードコマンドを蓄積記憶するリードキューと、
ライトコマンドを蓄積記憶するライトキューと、
前記コマンドキューが蓄積記憶するコマンドのうち先に到着したコマンドにアクセス範囲が重複する後に到着したコマンドを除くコマンドを前記コマンドキューから取り出して、当該取り出したコマンドを前記リードキューまたは前記ライトキューに記憶させるコマンド振り分け部と、
リードコマンドにかかるリードデータを前記メモリセルアレイから前記読み出しバッファに読み出させる頭出し処理と、当該読み出しバッファに読み出させたリードデータを前記ホスト装置に転送する第１データ転送と、を前記リードキューが蓄積記憶しているリードコマンド毎に逐次実行し、ライトコマンドにかかる前記ホスト装置から送信されてくるライトデータを受け付けて当該受け付けたライトデータを前記第２メモリに格納する第２データ転送を前記ライトキューが蓄積記憶しているライトコマンド毎に逐次実行するデータ転送系と、
を備え、
前記データ転送系は、前記頭出し処理と前記第２データ転送とを並行して実行する、
ことを特徴とするメモリシステム。
【請求項２】
前記データ転送系は、前記第１データ転送および前記第２データ転送の両方を実行できるとき、前記第１データ転送を先に実行する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記コマンド振り分け部は、前記先に到着したコマンドにかかる第１データ転送または第２データ転送が完了した後に、前記先に到着したコマンドにアクセス範囲が重複する前記後に到着したコマンドを前記コマンドキューから取り出して、当該取り出したコマンドを前記リードキューまたは前記ライトキューに記憶させる、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項４】
前記第１メモリを複数備え、
前記データ転送系は、夫々読み出し元の第１メモリが異なる複数のライトコマンドにかかる頭出し処理を並行して実行する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項５】
前記データ転送系は、前記第２メモリが一時記憶しているライトデータを所定のタイミングで前記メモリセルアレイに書き込む第３データ転送を実行し、前記第２データ転送を実行中に、前記複数の第１メモリのうちの前記実行中の第２データ転送の転送元となっていない第１メモリを書き込み先とした第３データ転送を並行して実行する、
ことを特徴とする請求項４に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
コンピュータシステム（以降、コンピュータ）に用いられるメモリシステムとして、ＮＡＮＤ型フラッシュメモリ（以降、単にＮＡＮＤメモリという）などの不揮発性半導体メモリを搭載したＳＳＤ（Solid  State  Drive）が注目されている。ＳＳＤなどのメモリシステムは、磁気ディスク装置に比べ、高速、軽量、低消費電力などの利点を有している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１５５３３５号公報
【特許文献２】特開２００６−１３９５４８号公報
【特許文献３】特開平８−２２１３１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、ホストとの間の転送効率を向上させたメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、不揮発性のメモリセルアレイと、前記メモリセルアレイから読み出した単位サイズのリードデータを出力する前に当該リードデータを一時記憶する読み出しバッファと、を備える第１メモリと、ホスト装置からのライトデータを一時記憶する第２メモリと、前記ホスト装置から受信したライトコマンドおよびリードコマンドを蓄積記憶するコマンドキューと、リードコマンドを蓄積記憶するリードキューと、ライトコマンドを蓄積記憶するライトキューと、前記コマンドキューが蓄積記憶するコマンドのうち先に到着したコマンドにアクセス範囲が重複する後に到着したコマンドを除くコマンドを前記コマンドキューから取り出して、当該取り出したコマンドを前記リードキューまたは前記ライトキューに記憶させるコマンド振り分け部と、リードコマンドにかかるリードデータを前記メモリセルアレイから前記読み出しバッファに読み出させる頭出し処理と、当該読み出しバッファに読み出させたリードデータを前記ホスト装置に転送する第１データ転送と、を前記リードキューが蓄積記憶しているリードコマンド毎に逐次実行し、ライトコマンドにかかる前記ホスト装置から送信されてくるライトデータを受け付けて当該受け付けたライトデータを前記第２メモリに格納する第２データ転送を前記ライトキューが蓄積記憶しているライトコマンド毎に逐次実行するデータ転送系と、を備えている。そして、前記データ転送系は、前記頭出し処理と前記第２データ転送とを並行して実行する、ことを特徴とする。
【図面の簡単な説明】
【０００６】
【図１】図１は、ＮＣＱ機能を用いたホスト−デバイス間のデータ転送の処理手順の一例を説明する図である。
【図２】図２は、本発明の実施形態のメモリシステムを適用したＳＳＤの構成を説明する図である。
【図３】図３は、コマンド振り分け部のコマンド振り分け動作を説明するフローチャートである。
【図４】図４は、リード制御部の動作を説明するフローチャートである。
【図５】図５は、ライト制御部の動作を説明するフローチャートである。
【図６】図６は、データ転送部がディスクリプタを生成する動作を説明するフローチャートである。
【図７】図７は、データ転送部がデータ転送の調停を行う動作を説明するフローチャートである。
【図８】図８は、ＳＡＴＡコントローラがホストとの間でデータ転送を行う動作を説明するフローチャートである。
【図９】図９は、本発明の第１の実施形態のＳＳＤとホストとの間のデータ転送の一例を説明するタイミングチャートである。
【図１０】図１０は、比較例にかかるＳＳＤとホストとの間のデータ転送の一例を説明するタイミングチャートである。
【図１１】図１１は、本発明の第２の実施形態のメモリシステムを適用したＳＳＤの構成図である。
【図１２】図１２は、本発明の第２の実施形態のＳＳＤとホストとの間のデータ転送の一例を説明するタイミングチャートである。
【発明を実施するための形態】
【０００７】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などのデータ記憶装置の接続規格の一つにシリアルＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ：ＳＡＴＡ）規格がある。ＳＡＴＡ規格によれば、ＨＤＤに対するリード／ライトコマンドをキューに格納し、当該キューに格納されたリード／ライトコマンドを効率の良い順番に並べ替えて実行（リオーダー実行）をするＮＣＱ（Ｎａｔｉｖｅ  Ｃｏｍｍａｎｄ  Ｑｕｅｕｉｎｇ）と呼ばれる機能が規定されている。
【０００８】
図１は、ＮＣＱ機能を用いたホスト−デバイス間のデータ転送の処理手順の一例を説明する図である。図示するように、まず、ホストはデバイスに対してライトコマンドまたはリードコマンドを送信する（ステップＳ１）。すると、デバイスは、受信したリード／ライトコマンドをコマンドキューにエンキューし、当該コマンドを受け付けた旨を通知する受け付け応答をホストに送信する（ステップＳ２）。
【０００９】
ここで、ステップＳ１とステップＳ２の動作は、最多で３２回繰り返し実行できる。すなわち、デバイスは、３２個のリード／ライトコマンドを内部のコマンドキューに保持することができる。リード／ライトコマンドは、より具体的には、アクセス範囲を示すための先頭ＬＢＡおよびセクタ数と、コマンドキューに保持された３２個のキューを互いに識別するための識別子としてのタグ番号と、リード／ライトコマンドがライトコマンドであるかリードコマンドであるかを示すコマンドコードとを含んでいる。
【００１０】
複数のリード／ライトコマンドを受け付けた後、デバイスは、コマンドキューに格納されたコマンドを、効率よく実行できる順番に並べ替える。そして、デバイスは、並べ替えたコマンドを１つ実行する際、ホストに実行対象のコマンドのタグ番号を付した転送開始通知を送信する（ステップＳ３）。当該実行対象のコマンドがリードコマンドである場合、デバイスは、転送開始通知に引き続いて、リードデータをＳＡＴＡ規格で定められた所定の単位サイズ毎にデータ転送する（ステップＳ４、ステップＳ５）。１つのリードコマンドにかかるデータ転送が終了すると、デバイスは、終了したリードコマンドのタグ番号を付した転送終了通知をホストに送信する（ステップＳ６）。
【００１１】
続いて、デバイスは、次のコマンドの実行に移る。すなわち、デバイスは、当該次のコマンドのタグ番号を付した転送開始通知をホストに送信する（ステップＳ７）。当該次のコマンドがライトコマンドである場合、ホストは、ライトデータをＳＡＴＡ規格で定められた所定の単位サイズ毎にデバイスにデータ転送する（ステップＳ８、ステップＳ９）。そして、デバイスは、当該ライトコマンドが指定するサイズ分のライトデータを受信すると、当該ライトコマンドのタグ番号を付した転送終了通知をホストに送信する（ステップＳ１０）。以降、デバイスは、コマンドキューに保持されたコマンドを並べ替えた順番で順次実行する。
【００１２】
このように、ＮＣＱ機能を使用することにより、ＨＤＤは、磁気ディスクの回転やヘッド動作を最小限に抑えるようリード／ライトコマンドを並べかえて実行することができ、結果としてホストとの間の転送効率を向上することができるようになる。
【００１３】
次に、本発明の実施形態と比較される技術（以下、単に比較例という）について説明する。比較例によれば、ＳＳＤは、ホストが上述のＮＣＱ機能を用いて発行したコマンドであっても、受信したコマンドを到着順で逐次処理を行う。ＳＡＴＡ規格上、キューイングされたコマンドのＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）が重複していた場合、ライトコマンドとリードコマンドの時系列順序を守る必要がある場合があるからである。例えばアクセス範囲が重複したコマンドがライトコマンド、リードコマンドの順にホストから発行された場合、ライトコマンドを実行してからリードコマンドを実行することを保証しなくてはならない。
【００１４】
比較例にかかるＳＳＤは、逐次処理を行うために、リードコマンドの後にライトコマンドがキューイングされた場合、リードコマンドによるデータがページバッファに用意できるまでライトコマンドのデータ転送を待つ。ライトコマンドのデータ転送を待っている間、ホスト、ＳＳＤ間のデータ転送は行なわず、結果としてＳＡＴＡインタフェースのデータ転送利用率が低下することとなる。近年においては、ＮＡＮＤメモリは、頭出しコマンドを受信した後、ＮＡＮＤメモリがセルアレイからページバッファにデータが用意できる時間は、ＳＡＴＡインタフェースのデータ転送時間を考えると無視できない時間となっており、ホストとＳＳＤとの間の転送効率の向上の足かせとなっている。
【００１５】
そこで、本発明の実施形態によれば、ＮＣＱ機能を利用して送られてきたリード／ライトコマンドをアクセス範囲が重複するリード／ライトコマンドの実行順序に留意してリード／ライトコマンドを並び替え、かつ、頭出し処理を実行中にライトコマンドにかかるデータ転送を実行することによって、頭出し処理にかかる待ち時間をホストから隠蔽するようにした。以下に添付図面を参照して、本発明の実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１６】
（第１の実施形態）
図２は、本発明の実施形態のメモリシステムを適用したＳＳＤの構成を説明する図である。ＳＳＤ１は、ホスト２との間でＳＡＴＡインタフェースで接続されており、ＳＡＴＡインタフェースを介して、ホスト２からのリード／ライトコマンドおよびライトデータの受信、ホスト２へのリードデータの送信を実行する。
【００１７】
ＳＡＴＡコントローラ１０、リードキュー２０、ライトキュー３０、ＮＡＮＤメモリ４０、リード制御部５０、ライト制御部６０、一時情報記憶装置７０、データ転送部８０、および追い出し制御部９０を備えている。
【００１８】
ＮＡＮＤメモリ４０は、ホスト２からのライトデータを記憶するＮＡＮＤ型のメモリセルアレイ４１およびメモリセルアレイ４１からの読み出し単位のサイズ（ページサイズ）のデータが格納されるページバッファ４２を備えている。ＮＡＮＤメモリ４０は、頭出しコマンド（例えば、００ｈ−アドレス−３０ｈ）を受信すると、メモリセルアレイ４１からページサイズのデータを読み出して読み出したデータをページバッファ４２にいったん格納（頭出し）する。この頭出しの期間、ＮＡＮＤメモリ４０はビジー信号を出力し、頭出しが終わると、ＮＡＮＤメモリ４０はレディ信号を出力する。レディ信号を出力する状態においてＮＡＮＤメモリ４０がデータアウトコマンド（例えば、／ＲＥクロックをトグルする）を受信したとき、ページバッファ４２に格納したデータを出力する。
【００１９】
ＳＡＴＡコントローラ１０は、コマンドキュー１１、コマンド振り分け部１２および重複関係記憶部１３を備えている。重複関係記憶部１３はＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などにより構成される。コマンドキュー１１は、ＮＣＱ機能を用いて送信されてきたリード／ライトコマンドを到着順に蓄積記憶する。コマンド振り分け部１２は、コマンドキュー１１に蓄積記憶されている夫々のコマンドにかかるアクセス範囲をチェックして、コマンドキュー１１に格納されているコマンドのうち先に到着したコマンドのアクセス範囲とアクセス範囲が重複する後に到着したコマンドがある場合、当該後に到着したコマンドを除いてコマンドをコマンドキュー１１からデキューして、デキューしたコマンドのうちのリードコマンドをリードキュー２０にエンキューし、ライトコマンドをライトキュー３０にエンキューする。コマンド振り分け部１２は、アクセス範囲が重複する先のコマンドと後のコマンドとの関係を重複関係記憶部１３に記憶させる。具体的には、コマンド振り分け部１２は、先のコマンドのタグ番号と後のコマンドのタグ番号とを対応づけて記憶させる。
【００２０】
例えば、コマンド到着順に昇順にタグ番号が付されるものとし、タグ番号「３」のコマンドとタグ番号「４」のコマンドとがアクセス範囲が重複し、タグ番号「６」のコマンドとタグ番号「７」のコマンドとがアクセス範囲が重複する場合、コマンド振り分け部１２は重複関係記憶部１３に「３−４、６−７」を記憶させるとよい。また、タグ番号「３」のコマンドとタグ番号「４」のコマンドとタグ番号「５」のコマンドとがアクセス範囲が重複する場合、コマンド振り分け部１２は重複関係記憶部１３に「３−４、３−５、４−５」を記憶させるとよい。また、タグ番号「３」のコマンドとタグ番号「４」のコマンドとがアクセス範囲が重複し、タグ番号「４」のコマンドとタグ番号「５」のコマンドとがアクセス範囲が重複し、タグ番号「３」のコマンドとタグ番号「５」のコマンドとがアクセス範囲が重複しない場合、コマンド振り分け部１２は重複関係記憶部１３に「３−４、４−５」を記憶させるとよい。また、タグ番号「３」のコマンドとタグ番号「４」のコマンドとがアクセス範囲が重複し、タグ番号「３」のコマンドとタグ番号「５」のコマンドとがアクセス範囲が重複し、タグ番号「４」のコマンドとタグ番号「５」のコマンドとがアクセス範囲が重複しない場合、コマンド振り分け部１２は重複関係記憶部１３に「３−４、３−５」を記憶させるとよい。
【００２１】
一時情報記憶装置７０は、ＤＲＡＭやＳＲＡＭなどにより構成されており、ディスクリプタ記憶領域７１、リードデータバッファ７２、キャッシュ領域７３が確保されている。リードデータバッファ７２は、ページバッファ４２に頭出しされたデータをホスト２に転送するためのバッファである。キャッシュ領域７３は、ホスト２から転送されてきたライトデータを一時記憶するためのキャッシュであり、例えば一般的なｎウェイセットアソシアティブ方式やＦＩＦＯ方式により管理される。ディスクリプタ記憶領域７１は、ＳＡＴＡコントローラ１０に対して発行されるデータ転送のための具体的な指示内容を記述したディスクリプタが格納される。ライトデータを転送するためのディスクリプタは、例えばキャッシュ領域７３におけるライトデータの格納先の物理アドレスと格納先に格納するデータのサイズとを指定する記述を含み、リードデータを転送するためのディスクリプタは、例えばリードデータバッファ７２の物理アドレスとリードデータバッファ７２に格納されているデータのサイズとを指定する記述を含む。
【００２２】
リード制御部５０は、リードキュー２０にキューイングされているリードコマンドをデキューして、デキューしたリードコマンドにおいてＬＢＡとセクタ数とにより記述されているアクセス範囲をメモリセルアレイ４１における物理アドレスの範囲、すなわち目的のデータが格納されている位置および範囲に変換する。そして変換して得られた物理アドレス範囲からデータを読み出してページバッファ４２に頭出しする頭出しコマンドを生成し、生成した頭出しコマンドをＮＡＮＤメモリ４０へ送信する。そして、リード制御部５０は、データ転送部８０にリードコマンドに記述されているアクセス範囲およびタグ番号を通知する。リード制御部５０は、ページバッファ４２に頭出しされたデータを、データ読み出しを促す旨の通知（図示せず）をデータ転送部８０から受けたタイミングで読み出して、読み出したデータをリードデータバッファ７２に格納する。
【００２３】
ライト制御部６０は、ライトキュー３０にキューイングされているライトコマンドをデキューして、デキューしたライトコマンドにおいてＬＢＡとセクタ数とにより記述されているアクセス範囲と、タグ番号とをデータ転送部８０に通知する。また、ライト制御部６０は、キャッシュ領域７３を監視しており、キャッシュ領域７３が溢れるタイミングなど所定のタイミングで追い出し制御部９０に対して追い出し命令を発行する。
【００２４】
追い出し制御部９０は、追い出し命令を受信すると、キャッシュ領域７３に格納されているライトデータをＮＡＮＤメモリ４０に退避させる。
【００２５】
データ転送部８０は、リードデータの転送とライトデータの転送との間の調停を行う。具体的には、リード制御部５０やライト制御部６０からアクセス範囲の通知を受けたとき、当該アクセス範囲のデータを転送するためのディスクリプタを生成して、生成したディスクリプタをディスクリプタ記憶領域７１に格納する。データ転送部８０は、ディスクリプタ記憶領域７１に用意したディスクリプタを指定して、指定したディスクリプタに基づくデータ転送処理を実行する旨の命令（転送命令）をＳＡＴＡコントローラ１０に送信する。ここで、データ転送部８０は、ライトデータ転送のためのディスクリプタよりリードデータ転送のためのディスクリプタを優先して実行させるように転送命令を発行する。ＳＡＴＡコントローラ１０は、転送命令により命令されたデータ転送を完了すると、転送終了応答をデータ転送部８０に送信する。データ転送部８０は、転送終了応答を受けた後、次の転送命令を発行する。
【００２６】
次に、図３〜８を参照して本発明の第１の実施形態のＳＳＤの動作を説明する。図３は、コマンド振り分け部１２のコマンド振り分け動作を説明するフローチャートである。
【００２７】
図３に示すように、コマンド振り分け部１２は、まず、コマンドキュー１１の先頭に格納されているリード／ライトコマンドを選択する（ステップＳ２１）。そして、コマンドキュー１１に格納されているコマンドのうち、選択したコマンドとアクセス範囲が重複する他のコマンドがあるか否かを判定する（ステップＳ２２）。アクセス範囲が重複するコマンドがある場合（ステップＳ２２、Ｙｅｓ）、コマンド振り分け部１２は、当該アクセス範囲が重複するコマンドのタグ番号を選択したコマンドのタグ番号と対応づけて重複関係記憶部１３に格納する（ステップＳ２３）。アクセス範囲が重複するコマンドがない場合（ステップＳ２２、Ｎｏ）、ステップＳ２３の処理はスキップされる。
【００２８】
続いて、コマンド振り分け部１２は、選択したコマンドをコマンドキュー１１からデキューして、リードキュー２０またはライトキュー３０にエンキューする（ステップＳ２４）。コマンド振り分け部１２は、選択したコマンドがリードコマンドであればリードキュー２０にエンキューし、ライトコマンドであればライトキュー３０にエンキューする。
【００２９】
そして、コマンド振り分け部１２は、コマンドキュー１１に未選択のコマンドがあるか否かを判定する（ステップＳ２５）。コマンドキュー１１に未選択のコマンドがある場合（ステップＳ２５、Ｙｅｓ）、コマンド振り分け部１２は、未選択のコマンドのうち先頭のコマンドを選択し（ステップＳ２６）、選択したコマンドのタグ番号が重複関係記憶部１３に記憶されているか否かを判定する（ステップＳ２７）。選択したコマンドのタグ番号が重複関係記憶部１３に記憶されていない場合（ステップＳ２７、Ｎｏ）、当該選択したコマンドは先行して受信したいずれのコマンドともアクセス範囲が重複しないコマンドであるので、コマンド振り分け部１２は、ステップＳ２４に移行して、当該選択したコマンドをデキューしてリードキュー２０またはライトキュー３０に振り分ける。選択したコマンドのタグ番号が重複関係記憶部１３に記憶されている場合（ステップＳ２７、Ｙｅｓ）、当該選択したコマンドは、先行して受信したコマンドとアクセス範囲が重複するコマンドであり、当該先行して受信したアクセス範囲が重複するコマンドの実行終了後でないと実行開始することができない。したがって、コマンド振り分け部１２は、当該選択したコマンドをコマンドキュー１１に残したまま、ステップＳ２５に移行して、未選択のコマンドがあるか否かの判定を行う。
【００３０】
ステップＳ２５において、未選択のコマンドがない場合（ステップＳ２５、Ｎｏ）、コマンド振り分け動作が終了となる。
【００３１】
図４は、リード制御部５０の動作を説明するフローチャートである。図示するように、リード制御部５０は、まず、リードキュー２０の先頭に格納されているリードコマンドをデキューする（ステップＳ３１）。そして、リード制御部５０は、デキューしたリードコマンドに記述されているアクセス範囲に基づいてメモリセルアレイ４１上の格納位置を特定し、頭出しコマンドを生成する（ステップＳ３２）。リードコマンドに記述されているアクセス範囲が複数ページサイズに相当する場合、頭出しコマンドは複数生成される。リード制御部５０は、生成した頭出しコマンドを１つＮＡＮＤメモリ４０へ送信する（ステップＳ３３）。
【００３２】
そして、リード制御部５０は、データ転送部８０からデータ読み出しを促す旨の通知があるか否かを判定する（ステップＳ３４）。通知があった場合（ステップＳ３４、Ｙｅｓ）、リード制御部５０は、ＮＡＮＤメモリ４０にデータアウトコマンドを送信してページバッファ４２に頭出しされたリードデータを出力させて、出力されたリードデータをリードデータバッファ７２に格納し（ステップＳ３５）、ステップＳ３１にてデキューしたリードコマンドに記述されているアクセス範囲およびタグ番号をデータ転送部８０に通知する（ステップＳ３６）。
【００３３】
そして、リード制御部５０は、未処理の頭出しコマンドがあるか否かを判定し（ステップＳ３７）、未処理の頭出しコマンドがある場合（ステップＳ３７、Ｙｅｓ）、ステップＳ３３に移行して未処理の頭出しコマンドをＮＡＮＤメモリ４０へ送信する。未処理の頭出しコマンドがない場合（ステップＳ３７、Ｎｏ）、リード制御部５０は、ステップＳ３１に移行して次のリードコマンドをデキューする。
【００３４】
図５は、ライト制御部６０の動作を説明するフローチャートである。図示するように、ライト制御部６０は、ライトキュー３０の先頭に格納されているライトコマンドをデキューする（ステップＳ４１）。そして、ライト制御部６０は、デキューしたライトコマンドに基づいてキャッシュ領域７３におけるライトデータの書き込み位置を特定する（ステップＳ４２）。例えば、キャッシュ領域７３がＬＢＡアドレスに基づいてｎウェイセットアソシアティブ方式により管理されている場合、ＬＢＡアドレスに基づいてタグメモリを参照することによりキャッシュ領域７３の物理アドレスを求めることができる。ライト制御部６０は、ライトコマンドのアクセス範囲、タグ番号、および特定した書き込み位置をデータ転送部８０に通知し（ステップＳ４３）、ステップＳ４１に移行して次のライトコマンドをデキューする。
【００３５】
図６は、データ転送部８０がディスクリプタを生成する動作を説明するフローチャートである。図示するように、データ転送部８０は、リード制御部５０またはライト制御部６０からの通知があるか否かを監視しており（ステップＳ５１、Ｎｏ）、通知を受信すると（ステップＳ５１、Ｙｅｓ）、当該通知に基づいてディスクリプタを生成する（ステップＳ５２）。生成されたディスクリプタはディスクリプタ記憶領域７１に格納される。データ転送部８０は、ディスクリプタを生成後、ステップＳ５１に移行して通知の監視を続行する。
【００３６】
図７は、データ転送部８０がデータ転送の調停を行う動作を説明するフローチャートである。図示するように、データ転送部８０は、未処理のリードデータ転送のためのディスクリプタがあるか否かを判定する（ステップＳ６１）。未処理のディスクリプタとは、既に生成されたディスクリプタのうちＳＡＴＡコントローラ１０が未だ実行していないデータ転送にかかるディスクリプタである。未処理のリードデータ転送のためのディスクリプタがある場合（ステップＳ６１、Ｙｅｓ）、データ転送部８０は、データ読み出しを促す旨の通知をリード制御部５０に発行する（ステップＳ６２）。そして、データ転送部８０は、ページバッファ４２から読み出されたデータがリードデータバッファ７２に格納されると、リードデータ転送用のディスクリプタを指定した転送命令をタグ番号およびアクセス範囲を付してＳＡＴＡコントローラ１０に発行する（ステップＳ６３）。なお、転送対象のリードデータが複数ページ分のサイズを有している場合、ステップＳ６２とステップＳ６３は複数回繰り返される。
【００３７】
そして、データ転送部８０は、ＳＡＴＡコントローラ１０から転送終了応答を受信したか否かを判定する（ステップＳ６４）。転送終了応答を受信していない場合（ステップＳ６４、Ｎｏ）、データ転送部８０は、転送終了応答を受信するまでステップＳ６４の処理を繰り返す。転送終了応答を受信した場合（ステップＳ６４、Ｙｅｓ）、ステップＳ６１に移行する。
【００３８】
ステップＳ６１において、未処理のリードデータ転送用のディスクリプタがない場合（ステップＳ６１、Ｎｏ）、データ転送部８０は、未処理のライトデータ転送用のディスクリプタがあるか否かを判定する（ステップＳ６５）。未処理のライトデータ転送用のディスクリプタがある場合（ステップＳ６５、Ｙｅｓ）、データ転送部８０は、当該ライトデータ転送用のディスクリプタにかかる転送命令をタグ番号およびアクセス範囲を付してＳＡＴＡコントローラ１０に発行する（ステップＳ６６）。そして、ステップＳ６４に移行する。未処理のライトデータ転送用のディスクリプタがない場合（ステップＳ６５、Ｎｏ）、ステップＳ６１に移行する。
【００３９】
図８は、ＳＡＴＡコントローラ１０がホスト２との間でデータ転送を行う動作を説明するフローチャートである。図示するように、ＳＡＴＡコントローラ１０は、データ転送部８０から転送命令を受信したか否かを判定する（ステップＳ７１）。転送命令を受信していない場合（ステップＳ７１、Ｎｏ）、ＳＡＴＡコントローラ１０は、転送命令を受信するまでステップＳ７１の処理を実行する。転送命令を受信した場合（ステップＳ７１、Ｙｅｓ）、ＳＡＴＡコントローラ１０は、転送命令に指定されたディスクリプタに基づいてホスト２との間のデータ転送を実行する（ステップＳ７２）。すなわち、ライトデータの転送を実行する場合、ＳＡＴＡコントローラ１０は、ディスクリプタにより指定されたキャッシュ領域７３のアドレスにホスト２から転送されてきたデータを格納する。また、リードデータの転送を実行する場合、ＳＡＴＡコントローラ１０は、ディスクリプタに指定されたリードデータバッファ７２のアドレスに格納されているリードデータを読み出してホスト２へ転送する。
【００４０】
データ転送を終了すると、ＳＡＴＡコントローラ１０は、データ転送部８０に転送終了応答を発行する（ステップＳ７３）。そして、ＳＡＴＡコントローラ１０は、終了した転送命令に付されていたタグ番号が重複関係記憶部１３に記憶されているか否かを判定する（ステップＳ７４）。終了した転送命令に付されていたタグ番号が重複関係記憶部１３に記憶されている場合（ステップＳ７４、Ｙｅｓ）には、当該終了した転送命令にかかるリード／ライトコマンドのアクセス範囲が重複するコマンドがコマンドキュー１１に残されていることになる。したがって、終了した転送命令に付されていたタグ番号が重複関係記憶部１３に記憶されている場合（ステップＳ７４、Ｙｅｓ）、コマンド振り分け部１２は、実行終了した転送命令にかかるタグ番号に対応付けられているタグ番号にかかるコマンドをコマンドキュー１１からデキューして、リードキュー２０またはライトキュー３０にエンキューする（ステップＳ７５）。そして、コマンド振り分け部１２は、実行終了した転送命令にかかるタグ番号とコマンドキュー１１からデキューしたコマンドとの対応付けを重複関係記憶部１３から削除する（ステップＳ７６）。そして、ステップＳ７１に移行してＳＡＴＡコントローラ１０は転送命令の受信を待ち受ける。
【００４１】
ステップＳ７４において終了した転送命令に付されていたタグ番号が重複関係記憶部１３に記憶されていない場合（ステップＳ７４、Ｎｏ）、ＳＡＴＡコントローラ１０は、ステップＳ７１に移行して次の転送命令の受信を待ち受ける。
【００４２】
図９は、以上のように動作する本発明の第１の実施形態のＳＳＤ１とホスト２との間のデータ転送の一例を説明するタイミングチャートであり、図１０は、比較例にかかるＳＳＤとホスト２との間のデータ転送の一例を説明するタイミングチャートである。図９および図１０においては、ホスト２は、タグ番号「０」が付されたライトコマンド、タグ番号「１」が付されたリードコマンド、タグ番号「２」が付されたライトコマンド、およびタグ番号「３」が付されたライトコマンドをこの順番で発行したものとし、タグ番号「１」が付されたリードコマンドとタグ番号「２」が付されたライトコマンドとはアクセス範囲が重複しているものとしている。なお、ＳＡＴＡインタフェース上のデータ（あるいはコマンド）転送が行われる処理を示す部分にはハッチングを施してある。以降、タグ番号「ｎ」のリード（ライト）コマンドをリード（ライト）コマンドｎを省略して表現する。
【００４３】
図９において、ホスト２がＳＡＴＡインタフェース上に各コマンドをシリアルに送信すると、コマンドの振り分け動作が実行される。コマンドの振り分け動作により、リードキュー２０にはリードコマンド１がキューイングされ、ライトキュー３０にはライトコマンド０およびライトコマンド３がこの順番でキューイングされる。ライトコマンド２は、リードコマンド１とアクセス範囲が重複するので、この時点ではライトキュー３０にキューイングされない。コマンド振り分けの後、リードコマンド１にかかる頭出し処理が開始されるが、頭出し処理時にはＳＡＴＡインタフェースが使用されていないので、データ転送部８０による調停により、当該頭出し処理の実行中にライトコマンド０にかかるライトデータ転送が開始される。そして、ライトコマンド０にかかるライトデータ転送が終了した時点において、まだ頭出し処理が継続して実行されているので、ライトコマンド３にかかるライトデータ転送が開始される。ライトコマンド３にかかるライトデータ転送が終了した時点で、リードコマンド１にかかる頭出し処理が終了しているので、データ転送部８０は、ＳＡＴＡインタフェースをリードコマンド１にかかるリードデータ転送に使用する。リードコマンド１にかかるリードデータ転送が終了すると、リードコマンド１とアクセス範囲が重複していたライトコマンド２がライトキュー３０に投入され、ＳＡＴＡインタフェースは、ライトコマンド２にかかるライトデータ転送に使用される。
【００４４】
一方、図１０では、各コマンドがシリアルに送信されてきた後、各コマンドは送信されてきた順番で実行される。すなわち、まず、ライトコマンド０にかかるライトデータ転送が実行される。当該ライトデータ転送の後、リードコマンド１にかかる頭出し処理が開始される。当該頭出し処理の実行中には、ＳＡＴＡインタフェース上はデータ転送が行われない。頭出し処理が終了すると、リードコマンド１にかかるリードデータ転送が実行される。リードコマンド１にかかるリードデータ転送が終了すると、ライトコマンド２にかかるライトデータ転送、ライトコマンド３にかかるライトデータ転送が順次行われる。
【００４５】
このように、ＮＣＱ機能を使用してコマンドが送られてきても、比較例にかかるＳＳＤでは、頭出し処理の実行時にはデータ転送が行われないが、本発明の第１の実施形態にかかるＳＳＤ１は、頭出し処理の実行時にライトデータの転送を行うことができるので、比較例にかかるＳＳＤよりもＮＣＱ機能を使用しておくられてきたコマンド群を早く処理することができる。すなわち、ＳＡＴＡインタフェースの使用効率が向上する。
【００４６】
以上説明したように、本発明の第１の実施形態によれば、リードコマンドを蓄積記憶するリードキュー２０と、ライトコマンドを蓄積記憶するライトキュー３０と、先に到着したコマンドにアクセス範囲が重複する後に到着したコマンドを除くコマンドをコマンドキュー１１からデキューして、当該デキューしたコマンドをリードキュー２０またはライトキュー３０にエンキューするコマンド振り分け部１２と、リードコマンドにかかるリードデータをメモリセルアレイ４１からページバッファ４２に読み出させる頭出し処理と、ページバッファ４２に読み出させたリードデータをホスト２に転送するリードデータの転送（第１データ転送）と、をリードコマンド毎に逐次実行し、ライトコマンドにかかるホスト２から送信されてくるライトデータを受け付けて当該受け付けたライトデータをキャッシュ領域７３に格納するライトデータの転送（第２データ転送）をライトキュー３０が蓄積記憶しているライトコマンド毎に逐次実行するデータ転送系（ＳＡＴＡコントローラ１０、リード制御部５０、ライト制御部６０、データ転送部８０）と、を備え、データ転送系は、頭出し処理とライトデータの転送とを並行して実行する、ように構成したので、アクセス範囲が重複することによりコマンドの実行順序を守るべきコマンド群に留意しつつ頭出し処理にかかる待ち時間をホスト２から隠蔽することができるので、ホスト２との間の転送効率を向上させることができる。
【００４７】
また、データ転送系は、リードデータの転送とライトデータの転送との両方を実行できるとき、リードデータの転送を先に実行する、ように構成したので、ライトデータの転送をできるだけ頭出し処理と同時に実行できるようになり、結果としてホスト２との間の転送処理を向上させることができる。例えば、１回目の頭出し処理、１回目のリードデータの転送、２回目の頭出し処理、２回目のリードデータ転送を行う必要があり、１回目の頭出し処理が終わった時点でライトコマンドがライトキュー３０にある場合、１回目のリードデータの転送が先に実行される。これにより、当該ライトキュー３０にあるライトコマンドにかかるライトデータの転送は、２回目の頭出し処理と同時に実行される。仮に１回目のリードデータの転送ではなくライトキュー３０にあるライトコマンドにかかるライトデータ転送を先に実行するようにすると、１回目のリードデータの転送は当該ライトデータの転送が終了するまで待たされる。また、ライトキュー３０に別のライトコマンドが無い場合、２回目の頭出し処理の実行時にはＳＡＴＡインタフェースはデータ転送がされない状態となる。すなわち、ホスト２との間の転送効率が本発明の第１の実施形態よりも悪化する。
【００４８】
また、コマンド振り分け部１２は、先に到着したコマンドにかかるデータ転送が完了した後に、当該先に到着したコマンドにアクセス範囲が重複する後に到着したコマンドをコマンドキュー１１からデキューして、当該デキューしたコマンドをリードキュー２０またはライトキュー３０にエンキューするように構成したので、ＮＣＱ機能を用いて複数送られてきたコマンド群のうちの実行順序を守るべき複数のコマンドを到着した順番で実行することができるようになる。
【００４９】
（第２の実施形態）
図１１は、本発明の第２の実施形態のメモリシステムを適用したＳＳＤの構成図である。なお、第２の実施形態のＳＳＤ３は、ＮＡＮＤメモリを複数備えていることにより、ＮＡＮＤメモリおよびＮＡＮＤメモリの近辺の構成が第１の実施形態と異なる。図１１は、第１の実施形態のＳＳＤ１と同一の構成要素の図示を省略している。
【００５０】
図１１に示すように、ＳＳＤ３は、複数（ここでは４つ）のＮＡＮＤメモリ４０ａ〜ｄを備えている。ＮＡＮＤメモリ４０ａ〜ｄの内部の構成は第１の実施形態と同様である。そして、ＮＡＮＤメモリ４０ａ〜ｄとリード制御部５０の間にはＮＡＮＤコマンドキュー１００ａ〜ｄが夫々介在して設けられており、リード制御部５０からの頭出しコマンドおよびデータアウトコマンドはＮＡＮＤメモリ４０ａ〜ｄのうちのコマンド発行先のＮＡＮＤメモリに対応するＮＡＮＤコマンドキュー１００ａ〜ｄにキューイングされる。ＮＡＮＤコマンドキュー１００ａ〜ｄにキューイングされたコマンドは、対応するＮＡＮＤメモリが動作を行っていない状態のときに逐次投入される。
【００５１】
また、ＮＡＮＤコマンドキュー１００ａ〜ｄには、追い出し制御部９０がキャッシュ領域７３にキャッシュされているライトデータをＮＡＮＤメモリ４０ａ〜ｄに退避するためのＮＡＮＤ書き込みコマンドもエンキューされる。夫々のＮＡＮＤ書き込みコマンドは、例えば書き込み先のメモリセルアレイ４１の物理アドレスと書き込みデータとを含む。
【００５２】
図１２は、本発明の第２の実施形態のＳＳＤ３とホスト２との間のデータ転送の一例を説明するタイミングチャートである。図１２においては、ホスト２は、リードコマンド０、リードコマンド１、ライトコマンド２、およびライトコマンド３をこの順番で発行したものとし、簡単のために夫々のコマンド間にアクセス範囲の重複はないものとする。また、リードコマンド０がリード対象とするデータとリードコマンド１がリード対象とするデータは夫々別々のＮＡＮＤメモリに格納されているものとする。
【００５３】
図示するように、ホスト２がＳＡＴＡインタフェース上に各コマンドをシリアルに送信すると、コマンドの振り分け動作が実行される。コマンドの振り分け動作により、リードキュー２０にはリードコマンド０およびリードコマンド１がこの順番でキューイングされ、ライトキュー３０にはライトコマンド２およびライトコマンド３がこの順番でキューイングされる。前述のように、リードコマンド０にかかるデータとリードコマンド１にかかるデータとは夫々異なるＮＡＮＤメモリに格納されているので、コマンド振り分けの後、リードコマンド０およびリードコマンド１にかかる頭出し処理が同時に開始される。当該頭出し処理の実行中においては、データ転送部８０の調停により、ライトコマンド２にかかるライトデータ転送およびライトコマンド３にかかるライトデータ転送が続けて実行される。頭出し処理が終了すると、頭出しされたリードコマンド０にかかるリードデータとリードコマンド１にかかるリードデータとがシリアルに転送される。そして、当該リードデータの転送中においては、追い出し制御部９０がＮＡＮＤ追い出しコマンドを発行し、キャッシュ領域７３からＮＡＮＤメモリ４０ａ〜４０ｄのうちのリードデータ転送を行っていないＮＡＮＤメモリに対するライトデータのキャッシュ追い出し処理が実行される。
【００５４】
このように、本発明の第２の実施形態によれば、ＮＡＮＤメモリ４０を複数備え、データ転送系は、夫々読み出し元のＮＡＮＤメモリ４０が異なる複数のリードコマンドにかかる頭出し処理を並行して実行する、ように構成したので、ＳＡＴＡインタフェースの転送速度に比して処理が重い頭出し処理を複数のＮＡＮＤメモリ４０間で並行して実行できるので、結果としてホスト２との間の転送効率を向上させることができるようになる。
【００５５】
また、データ転送系は、キャッシュ領域７３がキャッシュしているライトデータを所定のタイミングでメモリセルアレイ４１に書き込むデータ追い出し（第３データ転送）を実行し、リードデータの転送とデータ追い出しとを並行して実行する、ように構成したので、ライトデータのキャッシュ追い出しにかかる処理時間をホスト２から隠蔽することができるので、結果としてホスト２との間の転送効率を向上させることができるようになる。
【００５６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５７】
１、３  ＳＳＤ、２  ホスト、１０  ＳＡＴＡコントローラ、１１  コマンドキュー、１２  コマンド振り分け部、１３  重複関係記憶部、２０  リードキュー、３０  ライトキュー、４０  ＮＡＮＤメモリ、４１  メモリセルアレイ、４２  ページバッファ、５０  リード制御部、６０  ライト制御部、７０  一時情報記憶装置、７１  ディスクリプタ記憶領域、７２  リードデータバッファ、７３  キャッシュ領域、８０  データ転送部、９０  追い出し制御部、１００ａ〜ｄ  ＮＡＮＤコマンドキュー。
【図１】
2012128644.tif 000003
【図２】
2012128644.tif 000004
【図３】
2012128644.tif 000005
【図４】
2012128644.tif 000006
【図５】
2012128644.tif 000007
【図６】
2012128644.tif 000008
【図７】
2012128644.tif 000009
【図８】
2012128644.tif 000010
【図９】
2012128644.tif 000011
【図１０】
2012128644.tif 000012
【図１１】
2012128644.tif 000013
【図１２】
2012128644.tif 000014