(57)【要約】      （修正有）【課題】多チャネルによるリード／ライトを適切なタイミングで行いパフォーマンスを向上できる。【解決手段】チャネル毎のキューは、記憶媒体に対するデータの書込命令を保持する。第１の制御手段は、複数のチャネルのキューに書込命令が保持され、複数のチャネルを同期させた上で書込命令の処理が可能になるまでの間に、記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、書込命令より優先して行わせ、複数のチャネルで書込命令の処理が可能になった場合に、複数のチャネルを同期させた上で書込命令によるデータの書き込み処理を行わせる。生成手段は、書込命令による処理を行う際、複数のチャネルで書き込まれるデータに基づいて、複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する。第２の制御手段は、エラー訂正符号を、記憶媒体に書き込む処理を行う。【選択図】図２
2012089010.tif 000002
【特許請求の範囲】
【請求項１】
複数のチャネルで記憶媒体に対する命令処理を行うメモリ制御装置において、
前記記憶媒体に対するデータの書込命令を保持する、前記チャネル毎のキューと、
前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる第１の制御手段と、
前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれる前記データに基づいて、前記複数のチャネルで書き込まれた前記データの誤りを検出および訂正するためのエラー訂正符号を生成する生成手段と、
前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う第２の制御手段と、
を備えることを特徴とするメモリ制御装置。
【請求項２】
前記複数のチャネルの各々の前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になると共に、任意のチャネルで前記記憶媒体に対するデータの読出命令を受け付けた場合に、前記書込命令と前記読出命令とのうちどちらを優先して処理するのかをラウンドロビンで決定する決定手段を、さらに備えることを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記決定手段は、前記ラウンドロビンによる決定として、各チャネルで前記書込命令による処理を行った時、次に行う命令として読出命令を優先するよう設定し、各チャネルで前記読出命令による処理を行った時、次に行う命令として書込命令を優先するよう設定すること、
を特徴とする請求項２に記載のメモリ制御装置。
【請求項４】
前記決定手段は、さらに、前記複数のチャネルのうちの任意の１つのチャネルで前記読出命令による処理を行った時、前記複数のチャネルの全てで前記書込命令による処理が可能な場合、前記複数のチャネルに対して前記書込命令を優先するよう設定すること、
を特徴とする請求項３に記載のメモリ制御装置。
【請求項５】
複数のチャネル分の前記記憶媒体と、
前記記憶媒体に対するデータの書込命令を保持する、前記チャネル毎のキューと、
前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる第１の制御手段と、
前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれるデータに基づいて、前記複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する生成手段と、
前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う第２の制御手段と、
を備えることを特徴とする記憶装置。
【請求項６】
前記複数のチャネルの各々の前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になると共に、任意のチャネルで前記記憶媒体に対するデータの読出命令を受け付けた場合に、前記書込命令と前記読出命令とのうちどちらを優先して処理するのかをラウンドロビンで決定する決定手段を、さらに備えることを特徴とする請求項５に記載の記憶装置。
【請求項７】
前記決定手段は、前記ラウンドロビンによる決定として、各チャネルで前記書込命令による処理を行った時、次に行う命令として読出命令を優先するよう設定し、各チャネルで前記読出命令による処理を行った時、次に行う命令として書込命令を優先するよう設定すること、
を特徴とする請求項６に記載の記憶装置。
【請求項８】
前記決定手段は、さらに、前記複数のチャネルのうちの任意の１つのチャネルで前記読出命令による処理を行った時、前記複数のチャネルの全てで前記書込命令による処理が可能な場合、前記複数のチャネルに対して前記書込命令を優先するよう設定すること、
を特徴とする請求項７に記載の記憶装置。
【請求項９】
複数のチャネルで前記記憶媒体に対する命令処理を行うメモリ制御装置で実行されるメモリ制御方法であって、
前記複数のチャネルの各々のキューが、前記記憶媒体に対するデータの書込命令を保持する保持ステップと、
第１の制御手段が、前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる第１の制御ステップと、
生成手段が、前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれるデータに基づいて、前記複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する生成ステップと、
第２の制御手段が、前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う書込ステップと、
を含むことを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリ制御装置、記憶装置、及びメモリ制御方法に関する。
【背景技術】
【０００２】
従来から、様々なデータ記憶装置が開発されている。このようなデータ記憶装置として、例えば、書き換え可能な不揮発性メモリの一種であるＮＡＮＤ型フラッシュメモリを記憶媒体とするＳＳＤ（Solid  State  Drive）が開発されている。
【０００３】
かかるＳＳＤでは、ページ(Page)やクラスタ（cluster）と呼ぶ論理的なアクセス単位でデータの書き込み、読み出し動作が実行される。このようなＳＳＤでは、処理を高速に行うために、どのタイミングでリード／ライトを行うのかが重要となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２７９６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、近年、ＳＳＤに対して多チャネルでリード／ライトを行う傾向にあるが、従来技術においては、多チャネルに適したリード／ライトのタイミングについては考慮されていない。
【０００６】
本発明は、上記に鑑みてなされたものであって、多チャネルによるリード／ライトを適切なタイミングで行うメモリ制御装置、記憶装置、及びメモリ制御方法を提案する。
【課題を解決するための手段】
【０００７】
実施形態のメモリ制御装置は、複数のチャネルで記憶媒体に対する命令処理を行うメモリ制御装置において、チャネル毎のキューと、第１の制御手段と、生成手段と、第２の制御手段と、を備える。キューは、記憶媒体に対するデータの書込命令を保持する。第１の制御手段は、複数のチャネルのキューに書込命令が保持され、複数のチャネルを同期させた上で書込命令の処理が可能になるまでの間に、記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、書込命令より優先して行わせ、複数のチャネルで書込命令の処理が可能になった場合に、複数のチャネルを同期させた上で書込命令によるデータの書き込み処理を行わせる。生成手段は、複数のチャネルで同期させて書込命令による処理を行う際、複数のチャネルで書き込まれるデータに基づいて、複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する。第２の制御手段は、エラー訂正符号を、記憶媒体に書き込む処理を行う。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態にかかるデータ記憶装置の構成を示すブロック図である。
【図２】図２は、第１の実施形態にかかるタイミング制御部と、チャネル・キュー処理回路の内部構成と、を示した図である。
【図３】図３は、発行順決定回路で発行されるコマンドの優先順位を示した図である。
【図４】図４は、第１の実施の形態にかかるデータ記憶装置１における、複数のチャネル分のＮＡＮＤフラッシュ制御部による並列構成を示した図である。
【図５】図５は、リードコマンド及びライトコマンドが共に発行可能な場合に、各チャネルのキューの優先順位の切替を示した説明図である。
【図６】図６は、第１の実施の形態にかかるＮＡＮＤフラッシュ制御部における、読み出し及び書き込みの処理の手順を示すフローチャートである。
【図７】図７は、第１の実施の形態にかかる、各チャネルの優先順位の切替に従ったコマンドの発行タイミングを示した図である。
【図８】図８は、第２の実施形態にかかるタイミング制御部と、チャネル・キュー処理回路の内部構成と、を示した図である。
【図９】図９は、第２の実施の形態にかかる、各チャネルのキューの優先順位の切替を示した説明図である。
【図１０】図１０は、第２の実施の形態にかかるＮＡＮＤフラッシュ制御部における、読み出し及び書き込みの処理の手順を示すフローチャートである。
【図１１】図１１は、第２の実施の形態にかかる、各チャネルの優先順位の切替に従ったコマンドの発行タイミングを示した図である。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、第１の実施形態にかかるデータ記憶装置１の構成を示すブロック図である。データ記憶装置１は、ＮＡＮＤ型フラッシュメモリ２０（以下、フラッシュメモリと称す）を記憶媒体として使用するＳＳＤ（Solid  State  Drive）とする。図１に示すように、データ記憶装置１は、メモリコントローラチップ（以下、コントローラと称す）１００と、複数のフラッシュメモリ２０と、ブート用ＲＯＭ（Read  Only  Memory）１５０と、を有する。そして、データ記憶装置１は、ホストデバイス１６０から入力されるコマンドに従ってデータの読み出し、書き込み等を行う。
【００１０】
ホストデバイス１６０は、例えばパーソナルコンピュータとＳＳＤとを接続する。ホストデバイス１６０は、例えばＳＡＳ（Serial  Attached  SCSI）規格やＳＡＴＡ（Serial  ATA）規格のインターフェースコントローラとする。なお、ホストデバイス１６０は、論理ブロックアドレス（ＬＢＡ）によりアクセスを行なう。
【００１１】
ブート用ＲＯＭ１５０は、フラッシュメモリで構成され、ＳＳＤに対して外部（例えば、ホストデバイス１６０）からのアクセスを可能とするための起動用プログラムが格納されている。
【００１２】
ＮＡＮＤ型フラッシュメモリ２０は、読み書き可能な記憶媒体であり、チャネル（パッケージ）単位で外付け可能とする。本実施の形態では、消費電力の観点等からＮＡＮＤ型フラッシュメモリ２０の数を、ＣＰＵ１０１内のファームウェアからの指示により任意に変更することができる。
【００１３】
コントローラ１００は、フラッシュメモリ２０に対してアドレスやデータ制御を行なうＮＡＮＤフラッシュメモリコントローラ１０４と、メモリインターフェース１１０と、ホストインターフェース１０６と、データフロー制御回路１０５と、マイクロプロセッサ（ＣＰＵ）１０１と、ＤＲＡＭ（Dynamic  Random  Access  Memory）１０２と、内部バス１０３と、を有する。
【００１４】
ＣＰＵ１０１は、データ記憶装置１全体を制御するプロセッサとする。ＣＰＵ１０１は、ファームウェアを含み、ホストデバイス１６０からのコマンドに応じて、データの書き込み動作及び読み出し制御を行うコマンドを、ＮＡＮＤフラッシュメモリコントローラ１０４に出力する。
【００１５】
ＤＲＡＭ１０２は、ＣＰＵ１０１の作業領域として用いられ、ＣＰＵ１０１からのアクセス制御に応じて、ＮＡＮＤ型フラッシュメモリ２０への書き込みデータおよびＮＡＮＤ型フラッシュメモリ２０からの読み出しデータ、さらにはテーブル情報などを格納する。
【００１６】
メモリインターフェース１１０は、入出力（Ｉ／Ｏ）バッファを含み、フラッシュメモリ２０との間でアドレスやデータの入出力を制御する。
【００１７】
ホストインターフェース１０６は、ホストデバイス１６０との間でデータ又はコマンドを転送する。
【００１８】
データフロー制御回路１０５は、ホストインターフェース１０６により転送するデータのバッファ制御を行なう。
【００１９】
ＮＡＮＤフラッシュメモリコントローラ１０４は、ホストインターフェース１０６により転送するデータのバッファ制御を行なう。
【００２０】
ＮＡＮＤフラッシュメモリコントローラ１０４は、コマンド・テーブル管理部１０７と、タイミング制御部１０８と、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎと、を有し、フラッシュメモリ２０に対して、複数のチャネルで読み出し／書き込みを行う。
【００２１】
コマンド・テーブル管理部１０７は、レスポンス・キュー１１１と、コマンド・キュー受領回路１１２と、コマンド処理回路１１３と、テーブル管理回路１１４と、を備える。
【００２２】
レスポンス・キュー１１１は、ＣＰＵ１０１にコマンド終了情報とステータス情報を提供する。
【００２３】
コマンド・キュー受領回路１１２は、（図示しない）コマンド・キューを有し、ＣＰＵ１０１からのコマンドを受領し、当該コマンド・キューに格納する。コマンド・キューは、待ち行列バッファであり、ＣＰＵ１０１からのライトやリードのコマンドが格納される。ここでのコマンド・フォーマットはハードウエアが処理しやすいビットフォーマットとする。コマンド・キュー受領回路１１２へのキューの発行は、ＣＰＵ１０１のファームウェアで行なう。
【００２４】
コマンド処理回路１１３は、コマンド・キュー受領回路１１２内のキューに格納されているライトコマンドなどのコマンドを解読、制御する。また、コマンド処理回路１１３から投入されるコマンドは、クラスタ（４Kバイト）単位とする。
【００２５】
コマンド処理回路１１３は、コマンド・キュー受領回路１１２から受領したデータ転送長や、テーブル管理回路１１４から対象データの物理ブロック番号やチップ番号を、受領する。そして、コマンド処理回路１１３は、チャネル毎のＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎ内のチャネル・キュー処理回路１２１＿０〜１２１＿ｎへ、ライトコマンドやリードコマンドをキューイングする。
【００２６】
テーブル管理回路１１４は、ＤＲＡＭ１０２に格納されているテーブル情報（ＬＢＡと物理アドレスの変換用テーブルなど）を更新する。
【００２７】
また、テーブル管理回路１１４は、ＬＢＡ（論理ブロックアドレス）をインデックスとして用い、ＤＲＡＭ１０２から各種テーブルを参照し、対象データの物理ブロック番号やチップ番号を算出する。
【００２８】
ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎは、複数のＮＡＮＤ型フラッシュメモリ２０に対してアドレスやデータ制御を行なうための構成であり、ＮＡＮＤフラッシュにアクセスするチャネルの数だけ備えている。
【００２９】
ＮＡＮＤフラッシュ制御部１０９＿０は、チャネル・キュー処理回路１２１＿０と、データ処理回路１２２＿０と、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０と、を備える。なお、ＮＡＮＤフラッシュ制御部１０９＿１〜１０９＿ｎについても同様の構成を備えるものとする。
【００３０】
チャネル・キュー処理回路１２１＿０は、各チャネルでコマンド制御を行うための様々なキューを有し、コマンド処理回路１１３からのコマンドを受領し、各キューに格納する。
【００３１】
データ処理回路１２２＿０は、データフロー制御回路１０５やＮＡＮＤ型フラッシュメモリ２０とのデータ転送インタフェースとなる。さらに、データ処理回路１２２＿０は、データのエラー検出処理やエラー訂正処理（ＥＣＣ処理など）を行なう。
【００３２】
ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、複数あるＮＡＮＤ型フラッシュメモリ２０の選択と、ＮＡＮＤ型フラッシュメモリ２０に対するアクセスコマンド発行を行う。
【００３３】
次に、本実施の形態にかかるデータ記憶装置１で行われる、フラッシュメモリ２０に対するリード動作、及びライト動作について説明する。
【００３４】
本実施の形態にかかるリード動作時において、コマンド処理回路１１３は、コマンド・キュー受領回路１１２にキューイングされていたリードコマンドを取り出す。そして、コマンド処理回路１１３は、任意のチャネルとして、例えばＮＡＮＤフラッシュコマンドシーケンサ１２３＿０にコマンド発行し、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０を起動させる。その後、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、メモリインターフェース１１０を介して、ＮＡＮＤ型フラッシュメモリ２０からデータをリードする。なお、ＮＡＮＤ型フラッシュメモリ２０では、格納されたデータが有効であるか否かをフラグで管理され、当該リードは、当該フラグに従って有効なデータに対して行われる。また、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、ＮＡＮＤ型フラッシュメモリ２０にアクセスする際、データ処理回路１２２＿０に対してＤＲＡＭ１０２へのデータ転送要求を実施し、データ処理回路１２２＿０は、データ読み出しが完了するとＮＡＮＤフラッシュコマンドシーケンサ１２３＿０に終了レスポンスを返す。
【００３５】
本実施の形態にかかるライト動作時において、コマンド処理回路１１３は、コマンド・キュー受領回路１１２にキューイングされていたライトコマンドを取り出す。そして、コマンド処理回路１１３は、任意のチャネルとして、例えばＮＡＮＤフラッシュコマンドシーケンサ１２３＿０にコマンド発行し、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０を起動させる。その後、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、メモリインターフェース１１０を介して、ＮＡＮＤ型フラッシュメモリ２０に対するデータのライトを制御する。この時、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、データ処理回路１２２＿０に対してＤＲＡＭ１０２からデータ転送要求を実施する。そして、データ処理回路１２２＿０は、データフロー制御回路１０５を介して、ライトの対象となるデータを受領する。そして、データ処理回路１２２＿０は、メモリインターフェース１１０を介して受領したデータを、ＮＡＮＤ型フラッシュメモリ２０に書き込む。そして、データ処理回路１２２＿０は、データの受領及び書き込みが完了した後、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０に終了レスポンスを返す。その後、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０は、テーブル管理回路１１４に対して、終了通知とテーブル更新に必要な情報と、を受け渡す。これにより、テーブル管理回路１１４が、ＤＲＡＭ１０２上のデータを更新する。その後、テーブル管理回路１１４が、レスポンス・キュー１１１へ終了情報とステータスを発行する。そして、ＣＰＵ１０１は、当該情報を参照し、ライト動作が正常に終了したかを判断する。実際にはその他の管理テーブルや、テーブルアップデート処理に関する動作があるが、従来からの手法を用いればよいものとして、説明を省略する。
【００３６】
ところで、本実施の形態では、上述したように、ＮＡＮＤ型フラッシュメモリ２０は、複数のチャネルで構成される。
【００３７】
そこで、本実施の形態にかかるデータ記憶装置１では、ＮＡＮＤ型フラッシュメモリ２０に対して読み出し処理を行なう場合、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎのいずれか１つが、制御の対象となる１つのチャネルの状態に応じて、リードコマンドを発行する。これにより、上述したリード動作が、任意のチャネルで行われる。
【００３８】
一方、本実施の形態にかかるデータ記憶装置１では、ＮＡＮＤ型フラッシュメモリ２０に対して書き込み処理を行う際、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎの全てが、同期をとった上で、一斉にライトコマンドを発行する。これにより、上述したライト動作が、全チャネルで行われる。
【００３９】
このような同期を取るため、タイミング制御部１０８は、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎによる書き込み処理の同期を行うためのタイミングを制御する。
【００４０】
このように、本実施の形態にかかるデータ記憶装置１では、コマンドの種類に応じて、マルチチャネルアクセスと、シングルチャネルアクセスと、が行われることになる。これらコマンド制御を行うために構成について説明する。
【００４１】
図２は、フラッシュメモリ２０に対するコマンドを発行するために用いられる、タイミング制御部１０８と、チャネル・キュー処理回路１２１＿０〜１２１＿ｎ内部の構成と、を示した図である。
【００４２】
チャネル・キュー処理回路１２１＿０は、発行順決定回路２５１＿０と、シングル・リード・キュー２５２＿０と、ユーザ・マルチ・キュー２５３＿０と、Ａリード・キュー２５４＿０と、Ｂマルチ・キュー２５５＿０と、セレクタ２５６＿０を備える。なお、チャネル・キュー処理回路１２１＿１〜１２１＿ｎについても同様の構成を備えているものとする。
【００４３】
シングル・リード・キュー２５２＿０は、ＮＡＮＤ型フラッシュメモリ２０に対するリードコマンドを保持するキューであって、同一チャネルへのリードアクセスが重なっても効率よく処理を可能とする０〜ｍ段のEntryを有する。また、シングル・リード・キュー２５２＿０は、ユーザデータのリードするリードコマンドを保持するためのキューとする。
【００４４】
本実施の形態においては、チャネル・キュー処理回路１２１＿０のシングル・リード・キュー２５２＿０にリードコマンドが１つでも格納された場合に、リードコマンドが発行可能となる。そして、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０に対してリードコマンドを発行すると、シングル・リード・キュー２５２＿０は、１Entry分のキューが空く。これにより、コマンド処理回路１１３から次のコマンドが受け付け可能となる。なお、シングル・リード・キュー２５２＿０が有するキューの段数は、要求性能によって異ならせても良い。
【００４５】
ユーザ・マルチ・キュー２５３＿０は、ＮＡＮＤ型フラッシュメモリ２０に対する、ユーザデータのライトコマンドを保持するキューであって、論理ページ単位で書き込みを行うために必要な段数（本実施の形態では４段）のコンテキストを格納できるEntryを有する。
【００４６】
本実施の形態においては、１論理ページが８KBのＮＡＮＤ型フラッシュメモリ２０を用いる。そして、本実施の形態では２クラスタを１ページとする。そして、本実施の形態にかかるチャネル・キュー処理回路１２１＿０は、マルチページライト（マルチプレーンライトとも称す）を実行する場合、ユーザ・マルチ・キュー２５３＿０に４クラスタ分のコマンド(Context0-3)が格納されるまで、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０にライトコマンドを発行しない。つまり、本実施の形態では、各チャネルのユーザ・マルチ・キュー２５３＿(ｉ)（ｉ＝１〜ｎ）に４クラスタ分のコマンドが格納された場合に、同期した上で書き込み制御がなされることになる。
【００４７】
また、ユーザ・マルチ・キュー２５３＿０は、４段のコンテキスト全てにライトコマンドが格納された場合に、Ch0UMQFull＝“H”信号を、ＣＨ間同期状態確認回路２０１に出力する。各チャネル（ｉ＝０〜ｎ）からCh(i)UMQFull＝“H”が入力されるか否かにより、タイミング制御部１０８内のＣＨ間同期状態確認回路２０１は、各チャネルのユーザ・マルチ・キュー２５３＿（ｉ）のコンテキスト全てにライトコマンドが格納されたか否かを確認できる。
【００４８】
Ａリード・キュー２５４＿０は、コンパクション等を行うために、データ記憶装置１で発行されたリードコマンドを保持するキューであって、０〜ｍ段のEntryを有する。
【００４９】
Ｂマルチ・キュー２５５＿０は、コンパクション等を行うために、データ記憶装置１で発行されたライトコマンドを保持するキューであって、４段のコンテキストを格納できるEntryを有する。
【００５０】
そして、チャネル・キュー処理回路１２１＿０〜１２１＿ｎは、上記の各キューに格納されたコマンドに基づいて、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０〜１２３＿ｎにコマンド発行する。コマンド発行により、上記の各キューに空きができると、コマンド処理回路１１３が、次のコマンドを空きができたキューに投入する。
【００５１】
そして、シングル・リード・キュー２５２＿（ｉ）、ユーザ・マルチ・キュー２５３＿（ｉ）、Ａリード・キュー２５４＿（ｉ）、及びＢマルチ・キュー２５５＿（ｉ）（ｉ＝０〜ｎ）は、チャネル毎に設けられたチャネル・キュー処理回路１２１＿０〜１２１＿ｎの各々に設けられる。
【００５２】
なお、本実施の形態は、チャネル・キュー処理回路１２１＿０内部に設けられた各キューの構成の例を示したものであり、これらの構成に制限するものではない。
【００５３】
発行順決定回路２５１＿０は、シングル・リード・キュー２５２＿０、ユーザ・マルチ・キュー２５３＿０、Ａリード・キュー２５４＿０、及びＢマルチ・キュー２５５＿０に格納されたコマンドのうち、いずれのコマンドを発行するか決定する。
【００５４】
図３は、発行順決定回路２５１＿０で発行されるコマンドの優先順位を示した図である。図３に示すように、各キューのコマンドが発行可能になった場合、発行順決定回路２５１＿０は、Ｂ・マルチ・キュー２５５＿０、Ａリード・キュー２５４＿０、シングル・リード・キュー２５２＿０並びにユーザ・マルチ・キュー２５３＿０の順に、各コマンドに格納されたコマンドを発行する。
【００５５】
さらに、発行順決定回路２５１＿０は、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）（ｉ＝１〜ｎ）のコンテキスト全てにライトコマンドが保持され、各チャネルを同期させた上でライトコマンドの処理が可能になるまでの間に、当該チャネル０のシングル・リード・キュー２５２＿０にフラッシュメモリ２０に対するデータのリードコマンドが格納された場合に、当該リードコマンドによるデータの読み出し処理を、ライトコマンドより優先して行わせるよう、セレクタ２５６＿０を制御する。
【００５６】
また、発行順決定回路２５１＿０は、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）（なお、ｉは１〜ｎとする）のコンテキスト全てにライトコマンドが保持され、各チャネルを同期させた上でライトコマンドの処理が可能になった場合、換言すればＣＨ間同期状態確認回路２０１からUsrWriteGo＝“H”信号が入力された場合に、当該信号が入力されたタイミングをトリガーとして、当該チャネル０のユーザ・マルチ・キュー２５３＿０に格納されたライトコマンドによるデータの書き込み処理を行う。当該タイミングをトリガーとして、書き込み命令を行うことで、各チャネルでライトコマンドを同期させた上で書き込み処理を行うことができる。
【００５７】
そして、本実施の形態にかかるタイミング制御部１０８は、キューイングされたライトコマンドが全チャネルで発行可能になった時点と、１つのリードコマンドが任意のチャネルで発行可能になった時点と、で、どちらを優先すべきか優先順を決定して、コマンド発行を行なうこととする。これにより、リードの発行が長時間待たされてしまうことを回避し、リードのコマンド発行のパフォーマンスを向上できる。
【００５８】
セレクタ２５６＿０は、発行順決定回路２５１＿０からの制御に従って、シングル・リード・キュー２５２＿０、ユーザ・マルチ・キュー２５３＿０、Ａリード・キュー２５４＿０、及びＢマルチ・キュー２５５＿０から命令を発行するのか選択する。そして、当該選択に従って、キューに蓄積されたコマンドが、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿０に出力される。
【００５９】
図４は、本実施の形態にかかるデータ記憶装置１における、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎによる並列構成を示した図である。
【００６０】
本実施の形態のデータ記憶装置１では、各チャネルを同期した上でライト処理を行う際に、各チャネルのデータに基づいて、エラーの検出及び訂正を行うための符号を生成し、当該エラー訂正用の符号をＮＡＮＤ型フラッシュメモリ２０に書き込む。そして、データの読み出し時に当該エラー訂正用符号も読み出し、読み出したデータに対するエラーの検出、訂正が行われる。
【００６１】
上述した機能を実現するために、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿（ｎ−１）までは、ライト制御時に、ＣＰＵ１０１から要求されたユーザデータを書き込む。
【００６２】
ＮＡＮＤフラッシュ制御部１０９＿ｎは、エラー訂正符号生成部３０１を備え、エラー訂正符号生成部３０１により生成されたエラー訂正用の符号を、フラッシュメモリ２０のSyndrome格納部に対して書き込む。なお、本実施の形態は、エラー訂正符号の生成、書き込みを行う構成がＮＡＮＤフラッシュ制御部１０９＿ｎとした例を示したものであり、他の構成で行ってもよい。
【００６３】
エラー訂正符号生成部３０１は、チャネル０〜チャネルｎ−１で同期させたライトコマンドによる処理を行う際、チャネル０〜チャネルｎ−１で書き込まれるデータに基づいて、チャネル０〜チャネルｎ−１で書き込まれたデータの誤りを検出、訂正するためのエラー訂正用の符号を生成する。
【００６４】
チャネル間の同期を取ってエラー訂正を行なうデータ記憶装置１では、ライト処理時には全チャネルでＮＡＮＤフラッシュメモリ２０に対して規則正しく、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿（ｉ）（ｉ＝１〜ｎ）にコマンド発行しなければならない。そこで、本実施の形態では各チャネルについて同時にコマンド発行を行うこととした。
【００６５】
例えば、ｎ＝６であれば、６チャネルのうち１チャネルは符号化データ格納メモリ構成となる。そして、５チャネル分のＮＡＮＤフラッシュ制御部１０９＿（ｉ）（ｉ＝０〜４）が、各々４個のコマンドを、フラッシュコマンドシーケンサ１２３＿（ｉ）に発行する。そして、エラー訂正符号生成部３０１は、２０コマンド(４個×５チャネル)で書き込み対象となるデータから、Syndrome計算等のエラー訂正用の符号化を行なう。
【００６６】
次に、本実施の形態にかかる、リードコマンドやライトコマンドの発行の優先順位の決定手法について説明する。
【００６７】
ＮＡＮＤフラッシュ制御部１０９＿（ｉ）（ｉ＝０〜ｎ）のコマンド実行は、図４に示すように、チャネル毎に並列動作している。そして、チャネル間でのコマンド実行順番は保証されない。またチャネル内においては、ライトコマンドでは、マルチページライトを行い、リードコマンドでは、クラスタリードを行う。
【００６８】
上述したように、ライトコマンドが各ユーザ・マルチ・キュー２５３＿（ｉ）（ｉ＝０〜ｎ）の全コンテキストに格納され、マルチページライトが実行可能になるまで、リードコマンドが優先して実行される。このため、コマンド実行順番は保証されない。図２を用いて説明すると、例えばチャネル０に対して、Write  context0、Write  context1、Read  context0の順番でコマンドをキューイングしても、ユーザ・マルチ・キュー２５３＿０の全コンテキストを満たしていないため、リードコマンドがライトコマンドより優先して実行される。
【００６９】
ところで、従来の技術を用いて各チャネルの同期を行った場合、各チャネルのユーザ・マルチ・キュー２５３＿（ｉ）で、ライトコマンドが４個キューイングされ、Entryが満たされた時点で、当該チャネルのライトコマンドの優先順位を高く設定されることになる。しかしながら、ライトコマンドを発行する場合には全チャネルを同期させる必要があるため、１つのチャネルでEntryが満たされても全チャネルのEntryが満たされるまでライトコマンドが発行されない。このため、全チャネルのEntryが満たされるまでの間に、リードコマンドがキューイングされた場合、リードコマンドの発行可能であるにも関わらず、長時間待たされることになる。
【００７０】
そこで、本実施の形態では、図２に示すタイミング制御部１０８内で各コマンドの優先順位が高く設定されるタイミングを調整することとした。
【００７１】
図２のタイミング制御部１０８は、ＣＨ間同期状態確認回路２０１と、コマンドレディ制御回路２０２と、を備える。
【００７２】
ＣＨ間同期状態確認回路２０１は、各チャネルのユーザ・マルチ・キュー２５３＿（ｉ）（ｉ＝１〜ｎ）から、送信されるCh(i)UMQFull信号により、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）のコンテキスト全てにライトコマンドが格納されたか否かを確認できる。なお、Ch(i)UMQFull信号は、各チャネルのEntryが満たされた状態であることを示す信号とする。
【００７３】
そして、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされたことを確認した場合、各チャネルの発行順決定回路２５１＿（ｉ）に対して、UsrWriteGo＝“H”信号を出力する。
【００７４】
そして、各チャネルのチャネル・キュー処理回路１２１＿（ｉ）の発行順決定回路２５１＿（ｉ）は、UsrWriteGo＝“H”信号を受領した時に、全チャネルのEntryにライトコマンドが満たされたことを認識する。そして、発行順決定回路２５１＿（ｉ）は、当該認識に基づいて、いずれのコマンドを発行するか決定する。当該決定は、仮に、全チャネルのライトコマンドが満たされた時に、無条件にライトコマンドの優先順位を高くすると、当該ライトコマンドが満たされた状態が継続した場合に、リードコマンドが発行されないという問題を抑止するために行われるものである。
【００７５】
そこで、本実施の形態にかかるデータ記憶装置１では、全チャネルのEntryにライトコマンドが満たされた状態であり且つ、任意のチャネルにリードコマンドが１つEntryされた状態を満たした場合、換言するとリードコマンド及びライトコマンドとも発行可能状態になった場合には、各チャネルの発行順決定回路２５１＿（ｉ）（ｉ＝１〜ｎ）がラウンドロビンを用いて、シングル・リード・キュー２５２＿（ｉ）と、ユーザ・マルチ・キュー２５３＿（ｉ）と、のどちらの優先順位を高くするかを、交互に切り替える。これにより、ライトコマンド受領期間中にリードコマンドの発行が長時間待たされることを回避できる。
【００７６】
そして、シングル・リード・キュー２５２＿（ｉ）の優先順位が高く設定された後、各チャネルのチャネル・キュー処理回路１２１＿（ｉ）が、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿（ｉ）からCh(i)CmdReady信号でコマンドの発行準備が整ったことを受信した場合、発行順決定回路２５１＿（ｉ）は、リードコマンドを発行するよう、セレクタ２５６＿（ｉ）を制御する。（シングル）リード（SR）コマンドが発行された場合に、次はライトコマンドを優先させるため、発行順決定回路２５１＿（ｉ）は、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くするよう設定する。
【００７７】
ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位が高く設定された場合、各チャネルのチャネル・キュー処理回路１２１＿（ｉ）は、ＣＨ間同期状態確認回路２０１からUsrWriteGo信号で、全チャネルのユーザ・マルチ・キュー２５３＿０〜２５３＿ｎのEntryが満たされたことを受信した後、発行順決定回路２５１＿（ｉ）は、AllCmdReady信号を用いて全チャネルを同期させた上で、ライトコマンドを発行するよう、セレクタ２５６＿（ｉ）を制御する。
【００７８】
図５は、リードコマンド及びライトコマンドが共に発行可能な場合に、各チャネルのキューの優先順位の切替を示した説明図である。なお、データ記憶装置１によるハードウェア・リセット解除がされた場合に、発行順決定回路２５１＿（ｉ）は、初期値として、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定する。
【００７９】
図５に示すように、各チャネルのチャネル・キュー処理回路１２１＿（ｉ）（ｉ＝１〜ｎ）では、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高い場合、ライトコマンドが発行された後、発行順決定回路２５１＿（ｉ）は、シングル・リード・キュー（ＳＲＱ）２５２＿（ｉ）の優先順位を高く設定する。
【００８０】
そして、シングル・リード・キュー（ＳＲＱ）２５２＿（ｉ）の優先順位が高く設定された場合、リードコマンドが発行された後、発行順決定回路２５１＿（ｉ）は、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定する。
【００８１】
このように、ユーザ・マルチ・キュー２５３＿（ｉ）、及びシングル・リード・キュー２５２＿（ｉ）の優先順位は、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿（ｉ）がコマンドを発行する度に切り替えられる。
【００８２】
そして、コマンドレディ制御回路２０２は、全てのＮＡＮＤフラッシュコマンドシーケンサ１２３＿０〜１２３＿ｎからCh(i)CmdReady信号でコマンド発行の準備が整ったことを受信した場合に、全チャネルに対してAllCmdReady信号で、全チャネルでコマンド発行の準備が整ったこと（AllCmdReady＝“H”）を出力する。これにより、全チャネルで同期してライトコマンドの発行がなされる。
【００８３】
次に、本実施の形態にかかるデータ記憶装置１のＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎにおける、読み出し及び書き込みの処理について説明する。図６は、本実施の形態にかかるＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎにおける、上述した処理の手順を示すフローチャートである。
【００８４】
図６に示すように、読み込み及び書き込みのために行われる処理は、ステージで管理されている。図６に示すように、当該処理手順は、第１ステージ６５１、第２ステージ６５２、及び第３ステージ６５３で構成されている。これらのステージ内の処理が、ＣＰＵ１０１のクロックサイクルに合わせて実行される。つまり、ＣＰＵ１０１のクロックサイクルに合わせて、第１ステージ６５１、第２ステージ６５２、及び第３ステージ６５３の順に処理を行った後、再び第１ステージ６５１に戻る。このように各ステージの処理が、ステージの順にクロックサイクルに合わせて繰り返し（第１ステージ６５１、第２ステージ６５２、第３ステージ６５３、第１ステージ６５１、第２ステージ６５２、第３ステージ６５３、第１ステージ６５１の順）で行われる。第１ステージ６５１では、各チャネルで実行するコマンドを決めるための優先順位を決定するステージとする。第２ステージ６５２では、全チャネルの同期を取るステージとする。第３ステージ６５３では、実際にコマンドをシーケンサに発行するステージとする。次に、ステージ毎の処理について説明する。
【００８５】
まず、各ステージの処理を行う前に、ＮＡＮＤフラッシュ制御部１０９＿（ｉ）（ｉ＝０〜ｎ）の発行順決定回路２５１＿（ｉ）は、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位を、初期値として高く設定しておく（ステップＳ６０１）。
【００８６】
次に、第１ステージ６５１の最初の処理として、各チャネルのチャネル・キュー処理回路１２１＿(ｉ)（ｉ＝０〜ｎ）は、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿（ｉ）からCh(i)CmdReady信号＝“H”を受信したか否かを判定する（ステップＳ６０２）。そして、Ch(i)CmdReady信号＝“H”を受信しなかった、換言すればAllCmdReady信号＝“L”を受信した場合（ステップＳ６０２：Ｎｏ）、当該チャネルにおいては、これ以降の処理（第２ステージ６５２及び第３ステージ６５３の処理）を行わず、再びステップＳ６０２に戻る。
【００８７】
一方、Ch(i)CmdReady信号＝“H”を受信した場合（ステップＳ６０２：Ｙｅｓ）、当該チャネルでは、シングル・リード・キュー２５２＿（ｉ）に、リードコマンドがあるか否かに応じて処理を切り替える（ステップＳ６０３）。シングル・リード・キュー２５２＿（ｉ）にリードコマンドが格納されていない場合（ステップＳ６０３：Ｎｏ）、当該ユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされているか否かで処理を切り替える（ステップＳ６０４）。当該ユーザ・マルチ・キュー２５３＿（ｉ）にEntryが満たされていない場合（ステップＳ６０４：Ｎｏ）、これ以降の処理（第２ステージ６５２及び第３ステージ６５３の処理）を行わず、再びステップS６０２に戻る。また、ユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされた場合（ステップＳ６０４：Ｙｅｓ）、ユーザ・マルチ・キュー２５３＿（ｉ）からCh(i)UMQFull＝“H”信号を、ＣＨ間同期状態確認回路２０１に出力し、第２ステージ６５２のステップＳ６１０の処理に進む。
【００８８】
また、ステップＳ６０３において、シングル・リード・キュー２５２＿（ｉ）にリードコマンドが格納されている場合（ステップＳ６０３：Ｙｅｓ）、当該ユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされているか否かで処理を切り替える（ステップＳ６０５）。当該ユーザ・マルチ・キュー２５３＿（ｉ）にEntryが満たされていない場合（ステップＳ６０５：Ｎｏ）、第２ステージ６５２のステップＳ６０７に進む。また、ユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされた場合（ステップＳ６０５：Ｙｅｓ）、ユーザ・マルチ・キュー２５３＿（ｉ）からCh(i)UMQFull＝“H”信号を、ＣＨ間同期状態確認回路２０１に出力する。この状況では、当該チャネルでライトコマンド及びリードコマンド共に格納されているため、どちらを優先すべきかを決定する必要がある。そこで、各チャネルの発行順決定回路２５１＿（ｉ）が、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高いか否かを判定する（ステップＳ６０６）。ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高いと判定した場合（ステップＳ６０６：Ｙｅｓ）、第２ステージ６５２のステップＳ６１０の処理に進む。一方、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高くない、換言すればシングル・リード・キュー２５２＿（ｉ）の優先順位が高いと判定した場合（ステップＳ６０６：Ｎｏ）、第２ステージのステップＳ６０７に進む。
【００８９】
次に、ＣＰＵ１０１のクロックサイクルに合わせて、第２ステージ６５２の処理が行われる。ステップＳ６０４でユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされた場合（ステップＳ６０４：Ｙｅｓ）、またはステップＳ６０６でユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高いと判定された場合（ステップＳ６０６：Ｙｅｓ）、各チャネルの発行順決定回路２５２＿（ｉ）が、UserWriteGo信号＝“H”を受信したか否かにより、全チャネルのユーザ・マルチ・キュー（ＵＭＱ）２５３＿１〜２５３＿ｎのEntryが満たされたか否かを判定する（ステップＳ６１０）。全チャネルのユーザ・マルチ・キュー（ＵＭＱ）２５３＿１〜２５３＿ｎのEntryが満たされていないと判定した場合（ステップＳ６１０：Ｎｏ）、第３ステージの処理を行わずに、ステップＳ６０２に戻る。このように全チャネルのユーザ・マルチ・キュー（ＵＭＱ）２５３＿１〜２５３＿ｎのEntryが満たされていない場合に、第１ステージ６５１のステップＳ６０２に戻って、処理を繰り返すことで、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿１〜２５３＿ｎのEntryが満たされていないが、リードコマンドを受け付けたチャネルがある場合に、当該チャネルにおいて、リードコマンドの発行が可能となる。
【００９０】
一方、各チャネルの発行順決定回路２５２＿（ｉ）が、UserWriteGo信号＝“H”を受信したことで、全チャネルのユーザ・マルチ・キュー（ＵＭＱ）２５３＿１〜２５３＿ｎのEntryが満たされていると判定した場合（ステップＳ６１０：Ｙｅｓ）、コマンドレディ制御回路２０２からAllCmdReady信号＝“H”を受信したか否かを判定する（ステップＳ６１１）。そして、AllCmdReady信号＝“H”を受信しなかった場合（ステップＳ６１１：Ｎｏ）、第３ステージの処理を行わずに、第１ステージ６５１のステップＳ６０２に戻る。そして、AllCmdReady信号＝“H”を受信した場合（ステップＳ６１１：Ｙｅｓ）、第３ステージ６５３のステップＳ６１２に進む。
【００９１】
また、第１のステージ６５１において、ステップＳ６０５でユーザ・マルチ・キュー２５３＿（ｉ）のEntryが満たされていない（ステップＳ６０５：Ｎｏ）、またステップＳ６０６で、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が低いと判定した場合（ステップＳ６０６：Ｎｏ）、当該チャネルについて、第２ステージ６５２では、ＣＰＵ１０１のクロックサイクルに合わせてウェイト処理が行われる（ステップＳ６０７）。
【００９２】
そして、第２ステージ６５２において、各チャネルの発行順決定回路２５２＿（ｉ）がAllCmdReady信号＝“H”を受信していた場合（ステップＳ６１１：Ｙｅｓ）、第３ステージ６５３で、全チャネルの発行順決定回路２５１＿０〜２５１＿ｎが、対応するセレクタ２５６＿（ｉ）を制御して、ユーザ・マルチ・キュー２５３＿（ｉ）からコマンドが発行されるように設定する。これにより、全チャネルを同期した上で、ライトコマンドによる書き込み処理が、全チャネルのＮＡＮＤフラッシュコマンドシーケンサ１２３＿０〜１２３＿ｎにより行われる（ステップＳ６１２）。その後、全チャネルの発行順決定回路２５１＿０〜２５１＿ｎは、シングル・リード・キュー２５２＿（ｉ）（ｉ＝０〜ｎ）の優先度を高く設定する（ステップＳ６１３）。
【００９３】
また、第２ステージ６５２において、ＣＰＵ１０１のクロックサイクルに合わせてウェイト処理が行われていた場合（ステップＳ６０７）、第３ステージ６５３で、リードコマンドによる読み出し処理が、ＮＡＮＤフラッシュコマンドシーケンサ１２３＿（ｉ）により行われる（ステップＳ６０８）。その後、当該チャネルの発行順決定回路２５１＿（ｉ）は、当該チャネルのユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位を高く設定する（ステップＳ６０９）。
【００９４】
その後、第３ステージ６５３の処理の後、全チャネルのＮＡＮＤフラッシュ制御部１０９＿（ｉ）（ｉ＝０〜ｎ）において、全てのキューのコマンドの処理が完了していない場合（ステップ６１４：Ｎｏ）には、再び第１ステージ６５１のステップＳ６０２に戻る。全てのキューのコマンドの処理が完了している場合（ステップ６１４：Ｙｅｓ）には、全ての処理を終了する。
【００９５】
なお、本実施の形態では、各処理をステージ毎に管理する例について説明したが、ステージ毎に管理することに制限するものではなく、様々な手法で行なってよい。つまり、ユーザ・マルチ・キュー（ＵＭＱ）２５３が満たされるまでの間に、リードコマンドを受け付けた場合にはリードコマンドを発行し、リードコマンド及びライトコマンドが発行可能となった場合に、ラウンドロビンでどちらのコマンドを発行するかを決定できるような処理手順であればよい。
【００９６】
本実施の形態では、上述した処理手順で優先順位の切替と、読み出し及び書き込み処理とが行われることになる。
【００９７】
図７は、第１の実施の形態にかかる、各チャネルの優先順位の切替に従ったコマンドの発行タイミングを示した図である。
【００９８】
(1)ユーザーデータのライトコマンド（ＵＷ）が、ユーザ・マルチ・キュー２５３＿（ｉ）（ｉ＝１〜ｎ）からＮＡＮＤフラッシュコマンドシーケンサ１２３＿(ｉ)に発行されることで、シングル・リード・キュー２５２＿（ｉ）の優先順位が高く設定される。なお、ＮＡＮＤ型フラッシュメモリ２０への書き込み動作が実行中とする。
【００９９】
(2)このような状態で、新たなユーザデータのライトコマンドが投入され、全チャネル、全Entryが満たされた場合であっても、全チャネルのCh（ｉ）CmdReadyの論理積を取ったALLCmdReady信号が“H”となり（全チャネルのコマンドが完了し）、ユーザデータのライトコマンドを発行可能となるまで待機している。
【０１００】
(3)ところで、（１）でシングル・リード・キュー２５２＿（ｉ）の優先順位が高く設定されていると共に、リードコマンドは、チャネル毎に単独で動作可能である。このため、チャネル・キュー処理回路１２１＿（ｉ）のシングル・リード・キュー２５２＿(ｉ)にリードコマンドが格納された際、各チャネルでコマンドの発行の準備が完了したタイミング(Ch(i)CmdReady=“H”が入力されたタイミング)、換言すれば当該チャネルのライト処理が完了したタイミングで、発行順決定回路２５１＿（ｉ）は、シングル・リードコマンドを発行するよう制御する。
【０１０１】
(4)各チャネルでシングル・リード・キュー２５２＿（ｉ）の優先順位は高く設定されているので、発行順決定回路２５１＿（ｉ）は、各チャネルで一度はシングル・リードコマンドを発行するよう制御できる。そして、各チャネルでリードコマンドが発行される度に、当該チャネルのユーザ・マルチ・キュー２５３＿（ｉ）の優先順位が高く設定される。最大ｎチャネル分のシングル・リードコマンドが発行された段階で、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）の優先順位が高く設定されることになる。そして、全チャネルのリードが完了すると、コマンドレディ制御回路２０２から出力されるAllCmdReady信号が“H”となり、全チャネルの発行順決定回路２５１＿（ｉ）は、AllCmdReady信号=“H”を受け取ったタイミングで、ユーザデータのライトコマンドを発行するよう制御する。
【０１０２】
なお、全チャネルでリードコマンドを発行する前に、各チャネルにリードコマンドの投入がなされなくなり、全チャネルのリードが完了すると、コマンドレディ制御回路２０２が出力するAllCmdReady信号が“H”となる。この場合、全チャネルの発行順決定回路２５１＿（ｉ）は、AllCmdReady信号=“H”を受け取ったタイミングで、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くし、ユーザデータのライトコマンドを発行する。
【０１０３】
なお、本実施の形態においては、全チャネルのライトコマンドを同時に実行することで同期させることとしたが、同時に実行することに制限するものではない。ライトコマンドが投入される度に、ライトコマンドの発行を許可するデータ記憶装置において、発行された各チャネルのライトコマンド及び書き込むデータを、一時的にＳＲＡＭ等にキャッシュして、全チャネルのライトコマンド及びデータが蓄積された段階で、エラー訂正符号を生成しても良い。このように同時にコマンドが実行されずとも、全チャネルのライトコマンド及びデータが揃うよう、同期制御がされていればよい。
【０１０４】
本実施の形態にかかるデータ記憶装置１では、キューイングされたコマンドのコマンド発行の優先順位がラウンドロビンによって決定することとした。これにより読み出し処理と、書き込み処理と、がそれぞれ長時間待機されることなく、均等に処理が行うことができる。
【０１０５】
本実施の形態にかかるデータ記憶装置１では、全チャネルについてライトコマンドの発行可能状態であり、且つ任意のチャネルでリードコマンドの発行可能状態になった場合に、ラウンドロビンで優先順位を切り替えることで、リードコマンドの発行が長時間待たされてしまうことを回避し、リードコマンドの発行のパフォーマンスを向上させることができる。
【０１０６】
（第２の実施の形態）
第１の実施の形態では、図７に示すように、各チャネルにシングル・リードコマンドが逐次投入された場合、シングル・リード・キュー２５２＿（ｉ）（ｉ＝１〜ｎ）の優先順位の高い状態が継続し、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くするタイミングが遅延する。そこで、第２の実施の形態では、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くするタイミングを異ならせた例について説明する。
【０１０７】
図８は、第２の実施の形態にかかるタイミング制御部８０１と、チャネル・キュー処理回路８２１＿０〜８２１＿ｎと、の構成を示した図である。なお、第２の実施の形態にかかるデータ記憶装置１は、第１の実施の形態のタイミング制御回路１０８及びチャネル・キュー処理回路１２１＿０〜１２１＿ｎが、タイミング制御部８０１及びチャネル・キュー処理回路８２１＿０〜８２１＿ｎに変更された以外、第１の実施の形態と同様の構成として説明を省略する。
【０１０８】
チャネル・キュー処理回路８２１＿０は、第１の実施の形態のチャネル処理回路１２１＿０と比べ、発行順決定回路２５１＿０と実行する処理が異なる発行順決定回路８５１＿０に変更されている。
【０１０９】
発行順決定回路８５１＿０は、第１の実施の形態の発行順決定回路２５１＿０と同様の処理を行うほか、UsrWriteGo＝“H”信号を受領し、シングル・リード・キュー２５２＿（ｉ）からリードコマンドを発行した場合、Ch(i)UMWSRIssue信号でその旨を、特殊発行制御回路８１０に通知する。
【０１１０】
タイミング制御回路８０１は、第１の実施の形態のタイミング制御回路１０８と比べて、特殊発行制御回路８１０が追加された構成とする。
【０１１１】
第２の実施の形態にかかる特殊発行制御回路８１０は、全チャネルのうち、任意の１つのチャネルでリードコマンドを発行した処理を行った時（つまり、発行順決定回路２８１＿（ｉ）からCh(i)UMWSRIssueでその旨を受信した時）、全チャネルのユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定する。
【０１１２】
図９は、第２の実施の形態にかかる、各チャネルのキューの優先順位の切替を示した説明図である。なお、データ記憶装置１によるハードウェア・リセット解除がされた場合に、発行順決定回路８５１＿（ｉ）は、初期値として、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定する。
【０１１３】
図９に示すように、各チャネルのチャネル・キュー処理回路８２１＿（ｉ）（ｉ＝１〜ｎ）では、ユーザ・マルチ・キュー（ＵＭＱ）２５３＿（ｉ）の優先順位が高い場合、ライトコマンドを発行した後、発行順決定回路８５１＿（ｉ）が、シングル・リード・キュー（ＳＲＱ）２５２＿（ｉ）の優先順位を高く設定する。
【０１１４】
そして、シングル・リード・キュー（ＳＲＱ）２５２＿（ｉ）の優先順位が高い場合にリードコマンドが発行された後、発行順決定回路８５１＿（ｉ）が、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定する。
【０１１５】
さらに、シングル・リード・キュー（ＳＲＱ）２５２＿（ｉ）の優先順位が高い場合に、全チャネルでライトコマンドが発行可能な状態であり、且つ任意の１つのチャネルでリードコマンドが実行されると、全チャネルの発行順決定回路８５１＿０〜８５１＿ｎが、ユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位を高く設定する。
【０１１６】
つまり、任意のチャネルの発行順決定回路８５１＿（ｉ）が、ＣＨ間同期状態確認回路２０１からUsrWriteGo信号が入力されていると共に、シングル・リード・キュー２５２＿（ｉ）からリードコマンドを発行した場合に、Ch(i)UMWSRIssueでその旨を、特殊発行制御回路８１０に通知する。この通知を受けた特殊発行制御回路８１０が、全チャネルに対して、UMWPriorityH信号で、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高く設定するよう通知する。これにより、全チャネルで、ユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位が高く設定される。
【０１１７】
このように、第２の実施の形態では、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位が高くなるための遷移条件が１つ追加された。第２の実施の形態にかかるデータ記憶装置１では、追加された遷移条件を満たした場合に全チャネルのユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位が高く設定されるため、コマンド発行の準備が整い次第、即座にライトコマンドが発行されることになる。換言すれば、リードコマンドが発行可能となっても、ユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位が高いためリードコマンドが発行されない。
【０１１８】
次に、第２の実施の形態にかかるデータ記憶装置１の、ＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎにおける、読み出し及び書き込みの処理について説明する。図１０は、本実施の形態にかかるＮＡＮＤフラッシュ制御部１０９＿０〜１０９＿ｎにおける、上述した処理の手順を示すフローチャートである。
【０１１９】
第２の実施の形態においては、第１の実施の形態の図６で示した処理手順のうち、ステップＳ６０９を除いた処理手順（ステップＳ６０１〜Ｓ６０８、Ｓ６１０〜Ｓ６１４）と同様の処理が行われる（ステップＳ１００１〜Ｓ１００８、Ｓ１０１０〜Ｓ１０１４）。
【０１２０】
そして、ステップＳ１００８において、任意のチャネル（ｉ）で、リードコマンドによる読み出し処理が行われた後、第１の実施の形態のステップＳ６０９の処理の代わりに、発行順決定回路８５１＿（ｉ）は、リードコマンドを発行した旨を、Ch(i)UMWSRIssue信号で、特殊発行制御回路８１０に通知する。これにより、特殊発行制御回路８１０が、全チャネルに対してUMWPriorityH信号で、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くするよう通知する。これにより全チャネルについて、ユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位が高く設定される（ステップＳ１００９）。
【０１２１】
また、第２の実施の形態の第１ステージ１０５１、第２ステージ１０５２、及び第３ステージ１０５３においても、第１の実施の形態の第１ステージ６５１、第２ステージ６５２、及び第３ステージ６５３と同様に、ＣＰＵ１０１のクロックサイクルに合わせて実行される。
【０１２２】
本実施の形態では、上述した処理手順で優先順位の切替と、読み出し及び書き込み処理とが行われることになる。
【０１２３】
図１１は、第２の実施の形態にかかる、各チャネルの優先順位の切替に従ったコマンドの発行タイミングを示した図である。図１１に示す例では、図７で示す例と同様のタイミングで、シングル・リードコマンドの投入がなされているものとする。
【０１２４】
（１）ユーザーデータのライトコマンド（ＵＷ）が、ユーザ・マルチ・キュー２５３＿（ｉ）からＮＡＮＤフラッシュコマンドシーケンサ１２３＿(ｉ)に発行されることで、シングル・リード・キュー２５２＿（ｉ）（ｉ＝１〜ｎ）の優先順位が高く設定される。なお、ＮＡＮＤ型フラッシュメモリ２０への書き込み動作が実行中とする。
【０１２５】
（２）このような状態で、新たなユーザデータのライトコマンドが投入され、全チャネル、全Entryが満たされた場合であっても、全チャネルのCh（ｉ）CmdReadyの論理積を取ったALLCmdReady信号が”H”となり（全チャネルのコマンドが完了し）、ユーザデータのライトコマンドを発行可能となるまで待機している。
【０１２６】
（３）ところで、（１）でシングル・リード・キュー２５２＿（ｉ）の優先順位が高く設定されていると共に、リードコマンドは、チャネル毎に単独で動作可能である。このため、チャネル・キュー処理回路８２１＿（ｉ）のシングル・リード・キュー２５２＿(ｉ)にリードコマンドが格納された際、リードコマンドは、チャネル毎に単独で動作可能である。そこで、各チャネルでコマンドの発行の準備が完了したタイミング(Ch(i)CmdReady=”H”が入力されたタイミング)、換言すれば当該チャネルのライト処理が完了したタイミングで、シングル・リード・キュー２５２＿（ｉ）の優先順位が高いので、発行順決定回路８５１＿（ｉ）は、シングル・リードコマンドを発行するよう制御する。
【０１２７】
（４）上記の（３）でシングル・リードコマンドが発行された場合において、当該発行を制御した発行順決定回路８５１＿（ｉ）にUserWriteGo信号が入力されている場合、発行順決定回路８５１＿（ｉ）は、Ch(i)UMWSRIssue信号を、特殊発行制御回路８１０に出力する。
【０１２８】
（５）特殊発行制御回路８１０は、全チャネルのCh(i)UMWSRIssueの論理和を取っているので、少なくとも１つのチャネルからCh(i)UMWSGRIssueが入力された場合、全チャネルに対して、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くする信号(UMWPriorityH=”H”)を出力する。
【０１２９】
（６）そして、ユーザ・マルチ・キュー２５３＿（ｉ）の優先順位を高くする信号(UMWPriorityH=”H”)を受信した全チャネルで、ユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位が高く設定される。この場合、各チャネルにリードコマンドが投入されたとして、リードコマンドは発行されない。そして、全チャネルの発行順決定回路８５１＿０〜８５１＿ｎは、ALLCmdReady=“H”を受信したタイミングで、全チャネルで同期した上で、ライトコマンドが発行される。
【０１３０】
このように、第２の実施の形態では、全チャネルでライトコマンドの発行が可能な場合、任意のチャネルでリードコマンドの発行を一度だけ許可した後、全チャネルのユーザ・マルチ・キュー２５３＿０〜２５３＿ｎの優先順位を強制的に高く設定するよう制御することとした。これにより、ライトコマンドの発行が、第１の実施の形態と比べて迅速に発行することが可能となった。
【０１３１】
ところで、通常のＮＡＮＤ型フラッシュメモリへのライト処理は、数msオーダーかかるとされていて、リード処理よりも処理時間を要する。したがって、ライト処理が待機されることは、システム全体のパフォーマンスに大きな影響を与える。ライトコマンドが発行可能になった段階で、優先的にライトコマンドを発行させることは、システム全体のパフォーマンスを向上させることが可能となる。
【０１３２】
つまり、第２の実施の形態においては、リードコマンドが延々と継続して投入される場合でも、上述した制御でライトコマンドの発行を優先させ、ライトコマンドの発行が長時間待機されることを回避することで、第２の実施の形態にかかるデータ記憶装置１全体のパフォーマンスを向上できる。
【０１３３】
以上説明したとおり、第１〜第２の実施形態によれば、データ記憶装置１のメモリコントローラチップ１００は、全チャネルのライトコマンドの発行可能となるまでの間は、リードコマンドを優先的に発行することで、リードコマンドの発行が長時間待機されることを回避でき、リードコマンド発行のパフォーマンスを向上できる。
【０１３４】
さらに、第１〜第２の実施形態によれば、データ記憶装置１のメモリコントローラチップ１００は、マルチチャネルアクセスのライトコマンドの発行と、シングルチャネルアクセスのリードコマンドの発行と、が可能状態になった時点で、どちらを優先させるかをラウンドロビンで交互に設定することで、リードコマンドの発行が長時間待機されることを回避でき、リードコマンド発行のパフォーマンスを向上できる。同様にライトコマンドの発行が長時間待機されることも回避でき、ライトコマンドの発行のパフォーマンスを向上できる。
【０１３５】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０１３６】
１…データ記憶装置、２０…ＮＡＮＤ型フラッシュメモリ、１００…コントローラ、１０１…ＣＰＵ、１０２…ＤＲＡＭ、１０３…内部バス、１０４…フラッシュメモリコントローラ、１０５…データフロー制御回路、１０６…ホストインターフェース、１０７…コマンド・テーブル管理部、１０８…タイミング制御部、１０９＿０〜１０９＿ｎ…フラッシュ制御部、１１０…メモリインターフェース、１１１…レスポンス・キュー、１１２…コマンド・キュー受領回路、１１３…コマンド処理回路、１１４…テーブル管理回路、１２１＿０〜１２１＿ｎ…チャネル・キュー処理回路、１２２＿０〜１２２＿ｎ…データ処理回路、１２３＿０〜１２３＿ｎ…フラッシュコマンドシーケンサ、１５０…ブート用ＲＯＭ、１６０…ホストデバイス、２０１…間同期状態確認回路、２０２…特殊発行制御回路、２５１＿０〜２５１＿ｎ…発行順決定回路、２５２＿０〜２５２＿ｎ…シングル・リード・キュー、２５３＿０〜２５３＿ｎ…ユーザ・マルチ・キュー、２５４＿０〜２５４＿ｎ…Ａリード・キュー、２５５＿０〜２５５＿ｎ…Ｂマルチ・キュー、２５６＿０〜２５６＿ｎ…セレクタ、３０１…エラー訂正符号生成部
【図１】
2012089010.tif 000003
【図２】
2012089010.tif 000004
【図３】
2012089010.tif 000005
【図４】
2012089010.tif 000006
【図５】
2012089010.tif 000007
【図６】
2012089010.tif 000008
【図７】
2012089010.tif 000009
【図８】
2012089010.tif 000010
【図９】
2012089010.tif 000011
【図１０】
2012089010.tif 000012
【図１１】
2012089010.tif 000013
【手続補正書】
【提出日】平成24年2月13日(2012.2.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のチャネルで記憶媒体に対する命令処理を行うメモリ制御装置において、
前記記憶媒体に対するデータの書込命令を保持する、前記チャネル毎のキューと、
前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる第１の制御手段と、
前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれる前記データに基づいて、前記複数のチャネルで書き込まれた前記データの誤りを検出および訂正するためのエラー訂正符号を生成する生成手段と、
前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う第２の制御手段と、
前記複数のチャネルの各々の前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になると共に、任意のチャネルで前記記憶媒体に対するデータの読出命令を受け付けた場合に、前記書込命令と前記読出命令とのうちどちらを優先して処理するのかをラウンドロビンで決定する決定手段と、
を備えることを特徴とするメモリ制御装置。 
【請求項２】
前記決定手段は、前記ラウンドロビンによる決定として、各チャネルで前記書込命令による処理を行った時、次に行う命令として読出命令を優先するよう設定し、各チャネルで前記読出命令による処理を行った時、次に行う命令として書込命令を優先するよう設定すること、
を特徴とする請求項１に記載のメモリ制御装置。 
【請求項３】
前記決定手段は、さらに、前記複数のチャネルのうちの任意の１つのチャネルで前記読出命令による処理を行った時、前記複数のチャネルの全てで前記書込命令による処理が可能な場合、前記複数のチャネルに対して前記書込命令を優先するよう設定すること、
を特徴とする請求項２に記載のメモリ制御装置。 
【請求項４】
複数のチャネル分の前記記憶媒体と、
前記記憶媒体に対するデータの書込命令を保持する、前記チャネル毎のキューと、
前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる第１の制御手段と、
前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれるデータに基づいて、前記複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する生成手段と、
前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う第２の制御手段と、
前記複数のチャネルの各々の前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になると共に、任意のチャネルで前記記憶媒体に対するデータの読出命令を受け付けた場合に、前記書込命令と前記読出命令とのうちどちらを優先して処理するのかをラウンドロビンで決定する決定手段と、
を備えることを特徴とする記憶装置。 
【請求項５】
前記決定手段は、前記ラウンドロビンによる決定として、各チャネルで前記書込命令による処理を行った時、次に行う命令として読出命令を優先するよう設定し、各チャネルで前記読出命令による処理を行った時、次に行う命令として書込命令を優先するよう設定すること、
を特徴とする請求項４に記載の記憶装置。 
【請求項６】
前記決定手段は、さらに、前記複数のチャネルのうちの任意の１つのチャネルで前記読出命令による処理を行った時、前記複数のチャネルの全てで前記書込命令による処理が可能な場合、前記複数のチャネルに対して前記書込命令を優先するよう設定すること、
を特徴とする請求項５に記載の記憶装置。 
【請求項７】
複数のチャネルで前記記憶媒体に対する命令処理を行うメモリ制御装置で実行されるメモリ制御方法であって、
前記複数のチャネルの各々のキューが、前記記憶媒体に対するデータの書込命令を保持する保持ステップと、
第１の制御手段が、前記複数のチャネルの前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になるまでの間に、前記記憶媒体に対するデータの読出命令を受け付けた場合に、当該読出命令によるデータの読み出し処理を、前記書込命令より優先して行わせ、前記複数のチャネルで前記書込命令の処理が可能になった場合に、前記複数のチャネルを同期させた上で前記書込命令によるデータの書き込み処理を行わせる制御ステップと、
生成手段が、前記複数のチャネルで同期させて前記書込命令による処理を行う際、前記複数のチャネルで書き込まれるデータに基づいて、前記複数のチャネルで書き込まれたデータの誤りを検出および訂正するためのエラー訂正符号を生成する生成ステップと、
第２の制御手段が、前記エラー訂正符号を、前記記憶媒体に書き込む処理を行う書込ステップと、
決定手段が、前記複数のチャネルの各々の前記キューに前記書込命令が保持され、前記複数のチャネルを同期させた上で前記書込命令の処理が可能になると共に、任意のチャネルで前記記憶媒体に対するデータの読出命令を受け付けた場合に、前記書込命令と前記読出命令とのうちどちらを優先して処理するのかをラウンドロビンで決定する決定ステップと、
を含むことを特徴とするメモリ制御方法。