以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図1は、本発明を適用したデータ記憶システムの一実施の形態の構成例を示すブロック図である。なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
図1において、データ記憶システム10は、ホスト11、メモリコントローラ12、および不揮発性メモリ13を備えて構成される。不揮発性メモリ13は、データの書き込み処理において、データの消去を行った後にデータの書き込みを行うという一連の処理が必要とされるタイプのものである。
ホスト11は、所定のホストアプリケーションを実行し、必要に応じて、メモリコントローラ12に対して、不揮発性メモリ13へのデータの書き込み要求、および不揮発性メモリ13からのデータの読み出し要求を行う。
また、ホスト11は、1バイトまたは数バイトごとの所定のアクセス単位でデータを転送して不揮発性メモリ13へのデータの書き込みを行い、このアクセス単位は、ホスト11が実行するホストアプリケーションによるメモリの使用の仕方に応じて決定される。そして、ホスト11は、例えば、ホストアプリケーションの実行を開始するときに、そのホストアプリケーションによって決定されるアクセス単位をメモリコントローラ12に通知する。
また、ホスト11では、ホスト11が実行するホストアプリケーションごとに、それぞれのアプリケーションにおいて使用されるアドレス空間が設定されており、ホスト11は、ホスト11でのアドレス空間をメモリコントローラ12に通知する。
さらに、ホスト11は、ホストアプリケーションの仕様やデータ記憶システム10の使用環境などに応じて、並列動作させる不揮発性メモリ13のバンク(メモリブロック)の個数を示すインターリーブ数を決定し、メモリコントローラ12に通知する。例えば、ホスト11は、図17を参照して後述するように、処理速度を優先してメモリ制御を行うときに使用するインターリーブ数を決定する。
メモリコントローラ12は、ホストインターフェイス21、メモリインターフェイス22、データバッファ23、アドレス変換部24、アドレス空間設定部25、アクセス単位設定部26、インターリーブ数設定部27、メモリ制御部28を備えて構成される。
ホストインターフェイス21は、ホスト11とメモリコントローラ12との間の信号を仲介し、メモリインターフェイス22は、メモリコントローラ12と不揮発性メモリ13との間の信号を仲介する。
アドレス空間設定部25には、ホスト11でのアドレス空間がホストインターフェイス21を介して通知(即ち、アドレス空間を示す情報が供給)され、アドレス空間設定部25は、ホスト11でのアドレス空間をレジスタに保存する。また、ホスト11でのアドレス空間は、ホスト11が実行するホストアプリケーションごとにそれぞれ設定され、アドレス空間設定部25は、ホストアプリケーションごとに設定されているホスト11でのアドレス空間を保存する。
アクセス単位設定部26には、ホスト11からのアクセス単位がホストインターフェイス21を介して通知(即ち、アクセス単位を示す情報が供給)され、アクセス単位設定部26は、ホスト11からのアクセス単位をレジスタに保存する。
インターリーブ数設定部27には、ホスト11が決定したインターリーブ数がホストインターフェイス21を介して通知(即ち、インターリーブ数を示す情報が供給)され、インターリーブ数設定部27は、インターリーブ数をレジスタに保存する。
データバッファ23には、ホスト11からホストインターフェイス21を介して、不揮発性メモリ13に記憶させるデータが供給され、データバッファ23は、そのデータをバッファリングする。
アドレス変換部24は、アクセス単位設定部26に設定されているアクセス単位と、インターリーブ数設定部27に設定されているインターリーブ数とに基づいて、アドレス空間設定部25に設定されているホスト11でのアドレス空間を、不揮発性メモリ13のアドレスに変換する(割り当てる)。ここで、インターリーブ数は、不揮発性メモリ13のバンクBA1乃至BANのうちの、切り替えながら並列動作させるバンクの個数である。
例えば、アドレス変換部24は、図2乃至4を参照して後述するように、ホスト11の下位のアドレスから順に、不揮発性メモリ13のバンクBA1乃至BANに書き込み単位ごとに、先頭のバンクの下位の行から順にホスト11でのアドレス空間を割り当て、不揮発性メモリ13のバンクをインターリーブしながら(切り替えながら)、インターリーブ数に応じたバンク数だけインターリーブすると、先頭のバンクの次の書き込み単位の行に戻るということを繰り返すように、ホスト11でのアドレス空間を不揮発性メモリ13のアドレスに割り当てる。
そして、例えば、アドレス変換部24は、ホスト11のアドレス空間と不揮発性メモリ13のアドレスとを対応付けたアドレス変換表をレジスタに保存する。
メモリ制御部28は、ホストインターフェイス21を介してホスト11から供給されるデータを、メモリインターフェイス22を介して不揮発性メモリ13に書き込む制御を行う。
ホスト11からは、不揮発性メモリ13にデータを書き込むことを指示するコマンド(書き込みコマンド)とともに、不揮発性メモリ13に書き込むデータと、そのデータのホスト11でのアドレスとが送信されてくる。メモリ制御部28は、書き込みコマンドに従い、アドレス変換部24のアドレス変換表を参照して、不揮発性メモリ13に書き込むデータのホスト11でのアドレスを不揮発性メモリ13のアドレスに変換する。
そして、メモリ制御部28は、不揮発性メモリ13のアドレスに変換したホスト11でのアドレスに対応付けられていたデータであって、データバッファ23にバッファリングされているデータ(以下、適宜、変換後のアドレスに対応するデータとも称する)を不揮発性メモリ13に書き込むように制御を行う。即ち、メモリ制御部28は、所定の作動クロックに同期させて、そのデータを不揮発性メモリ13に出力させるとともに、書き込みコマンドと、変換後の不揮発性メモリ13のアドレスとを、メモリインターフェイス22およびメモリインターフェイス31を介して制御部32に供給する。ここで、メモリ制御部28が不揮発性メモリ13に送信する書き込みコマンドは、指定のアドレスに対してデータを消去した後に、データを書き込むという一連の動作を実行するものである。
また、メモリ制御部28は、アドレス空間設定部25に記憶されているアドレス空間、アクセス単位設定部26に記憶されているアクセス単位、インターリーブ数設定部27に記憶されているインターリーブ数を記憶させる領域を不揮発性メモリ13に確保する。そして、データ記憶システム10のシステム停止時に、メモリ制御部28は、アドレス空間、アクセス単位、およびインターリーブ数を設定情報として、不揮発性メモリ13に記憶させる。さらに、データ記憶システム10の起動時に、メモリ制御部28は、不揮発性メモリ13に記憶させた設定情報を不揮発性メモリ13から読み出して、アドレス空間設定部25、アクセス単位設定部26、およびインターリーブ数設定部27に設定することができる。
不揮発性メモリ13は、メモリインターフェイス31、制御部32、および、N個のバンクBA1乃至BANを備えて構成される。
メモリインターフェイス31は、メモリコントローラ12と不揮発性メモリ13との間の信号を仲介する。
制御部32は、メモリインターフェイス31を介して、書き込みコマンドとともに、不揮発性メモリ13に書き込むデータと、そのデータのアドレスとがメモリコントローラ12から供給されると、データを一時的に蓄積し、そのアドレスのデータの消去を開始する。そして、そのアドレスのデータの消去が完了すると、制御部32は、そのアドレスにデータの書き込みを行うという連続した処理を行う。
上述したように、不揮発性メモリ13のバンクをインターリーブしながら書き込み単位ごとの書き込みを行って、インターリーブ数に応じたバンク数だけインターリーブすると、先頭のバンクの次の書き込み単位の行に戻るということを繰り返すように、アドレスが割り当てられているので、制御部32は、バンクBA1乃至BANをインターリーブしながら、それぞれにデータを書き込むことができる。
バンクBA1乃至BANは、不揮発性メモリ13の記憶領域を区切る区画(メモリブロック)であり、バンクBA1乃至BANそれぞれが独立して動作することが可能である。また、バンクBA1乃至BANは、書き込みまたは消去が所定のバイト数ごとに行われるように構成されており、例えば、1バイトごとや4バイトごとなどに書き込みまたは消去が可能である。
このように構成されているデータ記憶システム10では、ホスト11が、アクセス単位およびインターリーブ数をメモリコントローラ12に通知し、メモリコントローラ12は、そのアクセス単位およびインターリーブ数に従って、ホスト11でのアドレス空間が不揮発性メモリ13のアドレスに割り当てられる。そして、ホスト11から不揮発性メモリ13への書き込み要求が発生すると、メモリコントローラ12は、ホスト11でのアドレスを不揮発性メモリ13のアドレスに変換し、不揮発性メモリ13では、バンクBA1乃至BANをインターリーブしながら、データの消去動作と書き込み動作とが並列に行われる。
次に、図2乃至図4を参照して、アクセス単位およびインターリーブ数の設定に従ってアドレスを変換する変換例について説明する。なお、アドレスを変換する方法は、以下で説明する3つの方法に限られるものではない。
図2では、独立動作可能な16個のバンクBA0乃至BA15を備えた不揮発性メモリ13に対して、ホスト11からのアクセス単位を8バイト、インターリーブ数を4に設定したときの第1の変換例について説明する。また、図2の不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。
このようにアクセス単位およびインターリーブ数が設定されているとき、まず、ホスト11のアドレス空間の最も下位のアドレス(0X0000)から上位に向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3に割り当てられる。
例えば、最も下位のアドレスの8バイトが、バンクBA0乃至BA3の0列目および1列目の8バイト(太線で囲われた領域)に割り当てられ、その次のアドレスの8バイトが、バンクBA0乃至BA3の2列目および3列目の8バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3に割り当てられる。
そして、不揮発性メモリ13のバンクBA0乃至BA3の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。即ち、不揮発性メモリ13のバンクBA0乃至BA3に最後に割り当てられたアドレスの次のアドレスの8バイトが、バンクBA4乃至BA7の0列目および1列目の8バイトに割り当てられる。そして、その次のアドレスの8バイトが、バンクBA4乃至BA7の2列目および3列目の8バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。
そして、不揮発性メモリ13のバンクBA4乃至BA7の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA8乃至BA11に割り当てられる。さらに、不揮発性メモリ13のバンクBA8乃至BA11の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA12乃至BA15に割り当てられる。
このようにホスト11のアドレス空間が不揮発性メモリ13に割り当てられることにより、ホスト11からの書き込みが発生すると、不揮発性メモリ13では、バンクをインターリーブしながらデータの書き込みが行われる。
例えば、ホスト11の下位のアドレス(0X0000)の8バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0の0列目へのデータの書き込みが開始される。そして、バンクをインターリーブしながら、バンクBA1の0列目、バンクBA2の0列目、バンクBA3の0列目へのデータの書き込みが順次開始される。そして、バンクBA3の0列目へのデータの書き込みの次に、バンクBA0の1列目へのデータの書き込みが開始され、以下、同様に、バンクBA1の1列目、バンクBA2の1列目、バンクBA3の1列目へのデータの書き込みが順次開始される。
このように、バンクをインターリーブしながらデータの書き込みを行うことで、データの消去時間を隠しながら、データの書き込みを実行することができる。
即ち、上述したように、不揮発性メモリ13では、データの書き込みコマンドに従って、データを消去した後に、データを書き込むという一連の処理が実行される。このとき、ホスト11が、消去時間を書き込み時間で隠せるようなインターリーブを設定することで、消去時間のオーバヘッドが隠れ、同時動作するバンクを少なくすることができる。
例えば、不揮発性メモリ13の消去および書き込みに必要な時間が動作クロックの4クロック分である場合について、ホスト11の下位のアドレス(0X0000)の8バイトのデータの書き込みを例に説明する。
この場合、図2の書き込み順序に示されているように、クロックCLK0で、バンクBA0の0列目にデータを書き込む処理が開始され、クロックCLK1で、バンクがインターリーブされて、バンクBA1の0列目にデータを書き込む処理が開始される。以下、同様に、クロックCLK2でバンクBA2の0列目にデータを書き込む処理が開始され、クロックCLK3でバンクBA3の0列目にデータを書き込む処理が開始される。
このとき、不揮発性メモリ13の消去および書き込みに必要な時間は動作クロックの4クロック分であるので、クロックCLK4の開始時において、クロックCLK0で開始されたバンクBA0の0列目へのデータの書き込みは終了している。従って、クロックCLK4において、バンクBA0の1列目にデータを書き込む処理を開始することができる。以下、同様に、クロックCLK5でバンクBA1の1列目にデータを書き込む処理が開始され、クロックCLK6でバンクBA2の1列目にデータを書き込む処理が開始され、クロックCLK7でバンクBA3の1列目にデータを書き込む処理が開始される。
このようにバンクをインターリーブすることで、ホスト11から見て、データの消去動作を隠しながら、書き込みが連続的に実行される。
次に、図3では、独立動作可能な16個のバンクBA0乃至BA15を備えた不揮発性メモリ13に対して、ホスト11からのアクセス単位を8バイト、インターリーブ数を2に設定したときの第2の変換例について説明する。また、図3の不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、4バイト単位でデータの消去が可能であるものとする。
このようにアクセス単位およびインターリーブ数が設定されているとき、まず、ホスト11のアドレス空間の最も下位のアドレス(0X0000)から上位に向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA0およびBA1に割り当てられる。
例えば、最も下位のアドレスの8バイトが、バンクBA0およびBA1の0列目乃至3列目の8バイト(太線で囲われた領域)に割り当てられ、その次のアドレスの8バイトが、バンクBA0およびBA1の4列目乃至7列目の8バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA0およびBA1に割り当てられる。
そして、不揮発性メモリ13のバンクBA0およびBA1の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA2およびBA3に割り当てられる。即ち、不揮発性メモリ13のバンクBA0およびBA1に最後に割り当てられたアドレスの次のアドレスの8バイトが、バンクBA2およびBA3の0列目乃至3列目の8バイトに割り当てられる。そして、その次のアドレスの8バイトが、バンクBA2およびBA3の4列目乃至7列目の8バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11のアドレス空間が、不揮発性メモリ13のバンクBA2およびBA3に割り当てられる。
そして、不揮発性メモリ13のバンクBA2およびBA3の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA4およびBA5に割り当てられる。さらに、不揮発性メモリ13のバンクBA4およびBA5の全てが割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA6およびBA7に割り当てられる。以下、同様に、ホスト11の上位のアドレスに向かって順次、バンクBA8およびBA9、バンクBA10およびBA11、バンクBA12およびBA13、そして、バンクBA14およびBA15に割り当てられる。
ここで、第2の変換例では、ホスト11のアクセス単位に不揮発性メモリ13の消去単位の4バイトが含まれるように設定されているので、書き込み時に消去単位の4バイトのデータをメモリコントローラ12にバッファリングしなくても済むことになる。
例えば、ホスト11の下位のアドレス(0X0000)の8バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0の0列目へのデータの書き込みが開始され、次に、バンクBA1の0列目へのデータの書き込みが開始される。このように、バンクBA0とバンクBA1とをインターリーブしながらデータの書き込みが行われる。以下、同様に、バンクBA0の1列目、バンクBA1の1列目、バンクBA0の2列目、バンクBA1の2列目、バンクBA0の3列目、バンクBA1の3列目、バンクBA0の4列目、そして、バンクBA1の4列目へのデータの書き込みが順次開始される。
これにより、消去動作を隠しながら、書き込みを実行することができる。
例えば、不揮発性メモリ13の消去および書き込みに必要な時間が動作クロックの2クロック分である場合について、ホスト11の下位のアドレス(0X0000)の8バイトのデータの書き込みを例に説明する。
この場合、図3の書き込み順序に示されているように、クロックCLK0で、バンクBA0の0列目にデータを書き込む処理が開始され、バンクがインターリーブされて、クロックCLK1で、バンクBA1の0列目にデータを書き込む処理が開始される。
このとき、不揮発性メモリ13の消去および書き込みに必要な時間は動作クロックの2クロック分であるので、クロックCLK2の開始時において、クロックCLK0で開始されたバンクBA0の0列目へのデータの書き込みは終了している。従って、クロックCLK2において、バンクBA0の1列目にデータを書き込む処理を開始することができる。
以下、同様に、クロックCLK3でバンクBA1の1列目にデータを書き込む処理が開始され、クロックCLK4でバンクBA0の2列目にデータを書き込む処理が開始され、クロックCLK5でバンクBA1の2列目にデータを書き込む処理が開始される。そして、このようにインターリーブを繰り返しながら、クロックCLK7でバンクBA1の3列目にデータを書き込む処理が開始される。
このようにバンクをインターリーブすることで、ホスト11から見て、データの消去動作を隠しながら、書き込みが実行される。
次に、図4では、ホスト11のアドレス空間を分割し、それぞれの領域に異なるアクセス単位を設定したときの第3の変換例について説明する。例えば、ホスト11が複数のホストアプリケーションを実行し、それぞれのホストアプリケーションのアクセス単位が異なるときに、アドレス空間ごとに異なるアクセス単位が設定される。図4の不揮発性メモリ13は、独立動作可能な16個のバンクBA0乃至BA15を備え、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。
図4では、ホスト11のアドレス空間が、3つの第1乃至第3のアドレス空間に分割され、第1のアドレス空間(0x0000〜0x03FF)では、ホスト11からのアクセス単位を16バイト、インターリーブ数を4に設定している。また、第2のアドレス空間(0x0400〜0x13FF)では、ホスト11からのアクセス単位を1Kバイト、インターリーブ数を16に設定している。また、第3のアドレス空間(0x1400〜0x1FFF)では、ホスト11からのアクセス単位を4バイト、インターリーブ数を4に設定している。
このように、ホスト11のアドレス空間ごとにアクセス単位が異なる場合には、それぞれのアドレス空間に対し、インターリーブ可能なバンクすべてが含まれるように、不揮発性メモリ13が割り当てられる。即ち、第1乃至第3のアドレス空間のそれぞれに対し、16個のバンクBA0乃至BA15が割り当てられる。このように割り当てることで、インターリーブするバンクの制約を最小限にすることができる。
例えば、ホスト11の第1のアドレス空間の最も下位のアドレス(0X0000)から上位に向かって、ホスト11の第1のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3の0行目からm−1行目までに割り当てられる。即ち、最も下位のアドレスの16バイトが、バンクBA0乃至BA3の0列目乃至3列目の16バイト(太線で囲われた領域)に割り当てられ、その次のアドレスの16バイトが、バンクBA0乃至BA3の4列目乃至7列目の16バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11の第1のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3に割り当てられる。
そして、不揮発性メモリ13のバンクBA0乃至BA3のm−1行目まで割り当てられると、その次のホスト11の第1のアドレス空間が、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。即ち、不揮発性メモリ13のバンクBA0乃至BA3のm−1行目に割り当てられたアドレスの次のアドレスの16バイトが、バンクBA4乃至BA7の0列目乃至3列目の16バイトに割り当てられる。そして、その次のアドレスの16バイトが、バンクBA4乃至BA7の4列目乃至7列目の16バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11の第1のアドレス空間が、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。
そして、不揮発性メモリ13のバンクBA4乃至BA7のm−1行目まで割り当てられると、その次のホスト11の第1のアドレス空間は、不揮発性メモリ13のバンクBA8乃至BA11に割り当てられる。さらに、不揮発性メモリ13のバンクBA8乃至BA11のm−1行目までの割り当てられると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA12乃至BA15に割り当てられる。
このように、ホスト11の第1のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA15の0行目からm−1行目までに割り当てられる。
次に、ホスト11の第2のアドレス空間について説明する。例えば、ホスト11の第2のアドレス空間の最も下位のアドレス(0x0400)から上位に向かって、ホスト11の第2のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA15のm行目からn−1行目までに割り当てられる。即ち、最も下位のアドレスの16バイトが、バンクBA0乃至BA15のm列目の16バイトに割り当てられ、その次のアドレスの16バイトが、バンクBA0乃至BA15のm+1列目の16バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11の第2のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA15のn−1行目までに割り当てられる。
このように、ホスト11の第2のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA15のm行目からn−1行目までに割り当てられる。
次に、ホスト11の第3のアドレス空間について説明する。例えば、ホスト11の第3のアドレス空間の最も下位のアドレス(0x1400)から上位に向かって、ホスト11の第3のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3のn行目以降に割り当てられる。即ち、最も下位のアドレスの4バイトが、バンクBA0乃至BA3のn列目の4バイト(太線で囲われた領域)に割り当てられ、その次のアドレスの4バイトが、バンクBA0乃至BA3のn+1列目の4バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11の第3のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA3に割り当てられる。
そして、不揮発性メモリ13のバンクBA0乃至BA3の最後の行までの割り当てが行われると、その次のホスト11の第3のアドレス空間は、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。即ち、不揮発性メモリ13のバンクBA0乃至BA3に最後に割り当てられたアドレスの次のアドレスの4バイトが、バンクBA4乃至BA7のn列目の4バイトに割り当てられる。そして、その次のアドレスの4バイトが、バンクBA4乃至BA7のn+1列目の4バイトに割り当てられる。以下、同様に、上位のアドレスに向かって、ホスト11の第3のアドレス空間が、不揮発性メモリ13のバンクBA4乃至BA7に割り当てられる。
そして、不揮発性メモリ13のバンクBA4乃至BA7の最後の行までの割り当てが行われると、その次のホスト11の第3のアドレス空間は、不揮発性メモリ13のバンクBA8乃至BA11に割り当てられる。さらに、不揮発性メモリ13のバンクBA8乃至BA11の最後の行までの割り当てが行われると、その次のホスト11のアドレス空間は、不揮発性メモリ13のバンクBA12乃至BA15に割り当てられる。
このように、ホスト11の第3のアドレス空間が、不揮発性メモリ13のバンクBA0乃至BA15のn行目以降に割り当てられる。
また、上述したように、データ記憶システム10では、ホスト11が、アクセス単位およびインターリーブ数を設定することで、消去時間と書き込み時間とのバランスを調整し、消去時間がオーバヘッドとして現れないようにすることができる。
次に、図5乃至図16を参照して、消去時間と書き込み時間とのバランスについて説明する。
図5および図6では、不揮発性メモリ13のデータの消去時間が書き込み時間よりも長い場合において、アクセス単位が16バイトと設定され、インターリーブ数が8と設定されたときの例について説明する。
図5には、データ記憶システム10を構成する各ブロックのうちの説明に必要なブロックが示されている。図5の不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。また、メモリコントローラ12から不揮発性メモリ13へは、不揮発性メモリ13での処理の同期をとるためのクロック信号CLK、データの書き込みなどを示すコマンド信号CMD、データを書き込む不揮発性メモリ13のアドレスを示すアドレス信号ADR、および、書き込むデータを示すデータ信号DATAが供給される。
例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0乃至BA7の0行目および1行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図6の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)とともに、アドレス信号ADR(BA0〜BA7)およびデータ信号DATA(DATA0〜DATA15)が順次供給される。ここで、不揮発性メモリ13は、データの消去時間が書き込み時間よりも長く、例えば、データの消去に6クロック分の時間がかかるとともに、データの書き込みに2クロック分の時間がかかるものとする。
そして、図6の下側に示すように、不揮発性メモリ13では、バンクBA0へのデータDATA0の書き込み(消去して書き込む一連の処理)が開始されると、その次のクロックで、バンクBA1へのデータDATA1の書き込みが開始される。そして、その次のクロックで、バンクBA2へのデータDATA2の書き込みが開始され、以下、順次、バンクBA3、バンクBA4、バンクBA5、バンクBA6、そして、バンクBA7への書き込みが開始される。
そして、バンクBA7への書き込みが開始された次のクロックでは、バンクBA0へのデータDATA0の書き込みが終了しているので、続けて、バンクBA0へのデータDATA8の書き込みが開始される。その次のクロックで、バンクBA1へのデータDATA1の書き込みが終了しているので、続けて、バンクBA1へのデータDATA9の書き込みが開始される。以下、順次、バンクをインターリーブさせてデータの書き込みが行われる。
このように、データの書き込み(消去して書き込む一連の処理)にかかる時間と、バンクのインターリーブ数とのバランスが調整されているので、消去にかかる時間がオーバヘッドとして現れることが回避される。即ち、ホスト11から見て、消去時間を隠すことができ、不揮発性メモリ13へのアクセスが連続的に(間隔が生じることなく)行われている。
一方、図7および図8を参照して、不揮発性メモリ13へのアクセスに間隔が生じる例について説明する。
図7の不揮発性メモリ13は、図5の不揮発性メモリ13と同様に、データの消去時間が書き込み時間よりも長く、例えば、データの消去に6クロック分の時間がかかるとともに、データの書き込みに2クロック分の時間がかかるものとする。
このような不揮発性メモリ13に対して、アクセス単位が16バイトと設定され、インターリーブ数が4と設定されると、不揮発性メモリ13へのアクセスに間隔が生じてしまう。
このように設定されているとき、例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0乃至BA3の0行目乃至3行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図8の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)、アドレス信号ADR(BA0〜BA3)、およびデータ信号DATA(DATA0〜DATA15)が順次供給される。
そして、図8の下側に示すように、不揮発性メモリ13では、バンクBA0へのデータDATA0の書き込み(消去して書き込む一連の処理)が開始されると、その次のクロックで、バンクBA1へのデータDATA1の書き込みが開始される。そして、その次のクロックで、バンクBA2へのデータDATA2の書き込みが開始され、その次のクロックで、バンクBA3へのデータDATA3の書き込みが開始される。
この例では、インターリーブ数が4に設定されているため、バンクBA3の次にバンクBA0への書き込みが行われるが、バンクBA3へのデータDATA3の書き込みが開始された次のクロックでは、バンクBA0へのデータDATA0の書き込み処理が終了していない。従って、この場合、バンクBA0へのデータの書き込み処理が終了するまで、不揮発性メモリ13へのアクセスを待機する必要があり、バンクBA0へのデータDATA0の書き込み処理が終了した後に、バンクBA0へのデータDATA4の書き込みが開始される。
このように、アクセス単位およびインターリーブ数の設定によって、不揮発性メモリ13へのアクセスに間隔が生じ、即ち、データの消去時間がオーバヘッドとして現れるため、書き込み処理のパフォーマンスが低下してしまう。従って、ホスト11は、このような間隔が生じないように、即ち、データの消去時間がオーバヘッドとして現れないように、アクセス単位およびインターリーブ数の設定をする。
次に、図9および図10では、不揮発性メモリ13のデータの消去時間と書き込み時間とが等しい場合において、アクセス単位が16バイトと設定され、インターリーブ数が2と設定されたときの例について説明する。
図9の不揮発性メモリ13は、データの消去に1クロック分の時間がかかるとともに、データの書き込みに1クロック分の時間がかかるものとする。また、不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。
例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0およびBA1の0行目乃至7行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図10の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)とともに、アドレス信号ADR(BA0とBA1とが交互に)およびデータ信号DATA(DATA0〜DATA15)が順次供給される。
そして、図10の下側に示すように、不揮発性メモリ13では、バンクBA0へのデータDATA0の書き込み(消去して書き込む一連の処理)が開始されると、その次のクロックで、バンクBA1へのデータDATA1の書き込みが開始される。そして、バンクBA1への書き込みが開始された次のクロックでは、バンクBA0へのデータDATA0の書き込みが終了しているので、続けて、バンクBA0へのデータDATA2の書き込みが開始される。
以下、順次、バンクBA0とバンクBA1とをインターリーブしながら、データDATA3乃至データDATA15の書き込みが行われる。
このように、データの書き込み(消去して書き込む一連の処理)にかかる時間と、バンクのインターリーブ数とのバランスが調整されているので、消去にかかる時間がオーバヘッドとして現れることが回避される。
次に、図11および図12では、不揮発性メモリ13のデータの消去時間が書き込み時間よりも短い場合において、アクセス単位が16バイトと設定され、インターリーブ数が4と設定されたときの例について説明する。
図11の不揮発性メモリ13は、データの消去時間が書き込み時間よりも短く、例えば、データの消去に1クロック分の時間がかかるとともに、データの書き込みに3クロック分の時間がかかるものとする。また、不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。
例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0乃至BA3の0行目乃至3行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図12の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)、アドレス信号ADR(BA0〜BA3)、およびデータ信号DATA(DATA0〜DATA15)が順次供給される。
そして、図12の下側に示すように、不揮発性メモリ13では、バンクBA0へのデータDATA0の書き込み(消去して書き込む一連の処理)が開始されると、その次のクロックで、バンクBA1へのデータDATA1の書き込みが開始される。そして、その次のクロックで、バンクBA2へのデータDATA2の書き込みが開始され、その次のクロックで、バンクBA3へのデータDATA3の書き込みが開始される。
そして、バンクBA3への書き込みが開始された次のクロックでは、バンクBA0へのデータDATA0の書き込みが終了しているので、続けて、バンクBA0へのデータDATA4の書き込みが開始される。その次のクロックで、バンクBA1へのデータDATA1の書き込みが終了しているので、続けて、バンクBA1へのデータDATA5の書き込みが開始される。以下、順次、バンクをインターリーブさせてデータの書き込みが行われる。
このように、データの書き込み(消去して書き込む一連の処理)にかかる時間と、バンクのインターリーブ数とのバランスが調整されているので、消去にかかる時間がオーバヘッドとして現れることが回避される。即ち、ホスト11から見て、消去時間を隠すことができ、不揮発性メモリ13へのアクセスが連続的に(間隔が生じることなく)行われている。
一方、図13および図14を参照して、不揮発性メモリ13へのアクセスに間隔が生じる例について説明する。
図13の不揮発性メモリ13は、図11の不揮発性メモリ13と同様に、データの消去時間が書き込み時間よりも短く、例えば、データの消去に1クロック分の時間がかかるとともに、データの書き込みに3クロック分の時間がかかるものとする。
このような不揮発性メモリ13に対して、アクセス単位が16バイトと設定され、インターリーブ数が2と設定されると、不揮発性メモリ13へのアクセスに間隔が生じてしまう。
このように設定されているとき、例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0およびBA1の0行目乃至7行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図14の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)、アドレス信号ADR(BA0とBA1とが交互に)、およびデータ信号DATA(DATA0〜DATA15)が順次供給される。
そして、図14の下側に示すように、不揮発性メモリ13では、バンクBA0へのデータDATA0の書き込み(消去して書き込む一連の処理)が開始されると、その次のクロックで、バンクBA1へのデータDATA1の書き込みが開始される。
この例では、インターリーブ数が2に設定されているため、バンクBA1の次にバンクBA0への書き込みが行われるが、バンクBA1へのデータDATA1の書き込みが開始された次のクロックでは、バンクBA0へのデータDATA0の書き込み処理が終了していない。従って、この場合、バンクBA0へのデータの書き込み処理が終了するまで、不揮発性メモリ13へのアクセスを待機する必要があり、バンクBA0へのデータDATA0の書き込み処理が終了した後に、バンクBA0へのデータDATA2の書き込みが開始される。また、同様に、バンクBA1へのデータDATA3の書き込みからバンクBA0へのデータDATA4の書き込みまでの間、バンクBA1へのデータDATA5の書き込みからバンクBA0へのデータDATA6の書き込みまでの間にものアクセスに間隔が生じる。
このように、アクセス単位およびインターリーブ数の設定によって、不揮発性メモリ13へのアクセスに間隔が生じ、即ち、データの消去時間がオーバヘッドとして現れるため、書き込み処理のパフォーマンスが低下してしまう。従って、ホスト11は、このような間隔が生じないように、即ち、データの消去時間がオーバヘッドとして現れないように、アクセス単位およびインターリーブ数の設定をする。
ここで、不揮発性メモリ13では、データを消去して書き込む一連の処理を1バイトごとに行うこともできるし、この一連の処理を複数バイトごとに行うこともできる。
図15および図16では、データを消去して書き込む一連の処理を2バイトごとに行う場合において、アクセス単位が16バイトと設定され、インターリーブ数が8と設定されたときの例について説明する。即ち、メモリコントローラ12は、ホスト11からのアクセス単位が予め設定されているので、データの書き込みを開始するタイミングで、アクセス単位を構成する複数バイトを予め消去しておき、書き込みデータが転送された直後に、データを書き込むことができる。これにより、データを書き込む処理速度をより改善させることができる。
また、図15の不揮発性メモリ13は、2バイトのデータの消去に6クロック分の時間がかかるとともに、2バイトのデータの書き込みに4クロック分の時間がかかるものとする。また、不揮発性メモリ13は、1バイト単位でデータの書き込みが可能であり、かつ、1バイト単位でデータの消去が可能であるものとする。
例えば、ホスト11の下位のアドレスの16バイトのデータの書き込みが発生すると、不揮発性メモリ13のバンクBA0乃至BA7の0行目および1行目の16バイト(太線で囲われた領域)にデータが書き込まれる。
このとき、図16の上側に示すように、クロック信号CLKに同期して、データの書き込みを示すコマンド信号CMD(Write)とともに、アドレス信号ADR(BA0〜BA7)およびデータ信号DATA(DATA0〜DATA15)が供給される。
そして、図16の下側に示すように、不揮発性メモリ13では、バンクBA0の0行目および1行目へのデータDATA0およびデータDATA8の書き込み(消去して書き込む一連の処理)が開始される。そして、その次のクロックで、バンクBA1の0行目および1行目へのデータDATA1およびデータDATA9の書き込みが開始される。以下、順次、バンクBA3乃至バンクBA7の0行目および1行目への書き込みが開始される。
このように、データを消去して書き込む一連の処理を複数バイトごとに行う場合においても、バンクのインターリーブ数とのバランスが調整されているので、消去にかかる時間がオーバヘッドとして現れることが回避される。
次に、データ記憶システム10において、処理速度を優先してメモリ制御を行うときに使用するインターリーブ数を決定するインターリーブ数決定処理について説明する。
データ記憶システム10において処理速度を優先する場合、図5乃至図16を参照して説明したように、ホスト11から見て、不揮発性メモリ13におけるデータの消去動作を隠しながら、データの書き込みを実行することができるインターリーブ数が用いられる。
そのようなインターリーブ数は、例えば、消去時間TE、書き込み時間TW、データロード時間TDL、クロック周期、およびメモリI/Oビット幅に基づいて決定される。ここで、消去時間TEは、不揮発性メモリ13の消去単位当たりで消去に必要な時間であり、書き込み時間TWは、不揮発性メモリ13の書き込み単位当たりで書き込みに必要な時間である。また、データロード時間TDLは、データの書き込み開始バンクからインターリーブ数で決められる最後のバンクまでの合計の書き込みデータサイズ分のデータ(インターリーブ数あたりのデータ)をメモリコントローラ12から不揮発性メモリ13に転送するのに必要な時間であって、例えば、1クロックあたり1バイトのデータを転送する場合には、1クロック周期×インターリーブ数である。また、クロック周期は、図6などを参照して説明したクロック信号CLKの1クロック分の時間であり、メモリI/Oビット幅は、1クロック周期あたりにメモリコントローラ12から不揮発性メモリ13に転送されるデータ量である。
ホスト11は、不揮発性メモリ13が、消去時間TE、書き込み時間TW、およびクロック周期が等しいという条件を満たすとき、インターリーブ数を2に決定する。ここで、この条件(消去時間TE=書き込み時間TW=クロック周期)を第1の決定条件とする。例えば、図9および図10を参照して説明した例では、消去時間TE、書き込み時間TW、およびクロック周期が等しいので、インターリーブ数が2と設定される。
また、ホスト11は、不揮発性メモリ13が、第1の決定条件を満たさない場合であって、消去時間TEと書き込み時間TWとの和がデータロード時間TDL以下であり、かつ、バンク数よりも小さいインターリーブ数を設定することができるという条件を満たすとき、インターリーブ数を、消去時間TEと書き込み時間TWとの和をクロック周期で除算した値(即ち、インターリーブ数=(消去時間TE+書き込み時間TW)/クロック周期)に決定する。ここで、この条件(消去時間TE+書き込み時間TW≦データロード時間TDL、かつ、インターリーブ数<バンク数)を第2の決定条件とし、インターリーブ数を決定する式を第1の決定式とする。
例えば、図5および図6に示した例では、消去時間TEが6クロック周期であり、書き込み時間TWが2クロック周期であるので、インターリーブ数が8(=6クロック周期+2クロック周期/クロック周期)と設定される。また、図11および図12に示した例では、消去時間TEが1クロック周期であり、書き込み時間TWが3クロック周期であるので、インターリーブ数が4(=1クロック周期+3クロック周期/クロック周期)と設定される。
また、ホスト11は、不揮発性メモリ13が第1および第2の決定条件を満たさない場合であって、ホスト11からのアクセス単位が、バンク数とメモリI/Oビット幅とを積算した値未満であるとき、インターリーブ数を、ホスト11からのアクセス単位をメモリI/Oで除算した値(即ち、インターリーブ数=ホスト11からのアクセス単位/メモリI/Oビット幅)に決定する。ここで、この条件(ホスト11からのアクセス単位<バンク数×メモリI/Oビット幅)を第3の決定条件とし、インターリーブ数を決定する式を第2の決定式とする。
また、ホスト11は、不揮発性メモリ13が第1乃至第3の決定条件のいずれも満たさない場合、インターリーブ数を、不揮発性メモリ13のバンク数に決定する。
次に、図17は、インターリーブ数決定処理を説明するフローチャートである。例えば、データ記憶システム10では、初回の起動時に、ホスト11がインターリーブ数決定処理を実行する。
ステップS1において、ホスト11は、不揮発性メモリ13が第1の決定条件(消去時間TE=書き込み時間TW=クロック周期)を満たしているか否かを判定する。
ステップS1において、ホスト11が、不揮発性メモリ13が第1の決定条件を満たしていると判定した場合、処理はステップS2に進み、ホスト11は、インターリーブ数を2に決定し、インターリーブ数決定処理は終了する。
一方、ステップS1において、ホスト11が、不揮発性メモリ13が第1の決定条件を満たしていないと判定した場合、処理はステップS3に進む。ステップS3において、ホスト11は、不揮発性メモリ13が第2の決定条件(消去時間TE+書き込み時間TW ≦データロード時間TDL、かつ、インターリーブ数<バンク数)を満たしているか否かを判定する。
ステップS3において、ホスト11が、不揮発性メモリ13が第2の決定条件を満たしていると判定した場合、処理はステップS4に進む。ステップS4において、ホスト11は、第1の決定式(インターリーブ数=(消去時間TE+書き込み時間TW)/クロック周期)によりインターリーブ数を決定し、インターリーブ数決定処理は終了する。
一方、ステップS3において、ホスト11が、不揮発性メモリ13が第2の決定条件を満たしていないと判定した場合、処理はステップS5に進む。ステップS5において、ホスト11は、不揮発性メモリ13が第3の決定条件(ホスト11からのアクセス単位<バンク数×メモリI/Oビット幅)を満たしているか否かを判定する。
ステップS5において、ホスト11が、不揮発性メモリ13が第3の決定条件を満たしていると判定した場合、処理はステップS6に進む。ステップS6において、ホスト11は、第2の決定式(インターリーブ数=ホスト11からのアクセス単位/メモリI/Oビット幅)によりインターリーブ数を決定し、インターリーブ数決定処理は終了する。
一方、ステップS5において、ホスト11が、不揮発性メモリ13が第3の決定条件を満たしていないと判定した場合、処理はステップS7に進む。ステップS7において、ホスト11は、インターリーブ数を不揮発性メモリ13のバンク数に決定し、インターリーブ数決定処理は終了する。
なお、例えば、ステップS5の判定における第3の決定条件には、ホスト11からのアクセス単位が含まれており、インターリーブ数決定処理を実行するときにおいてホスト11からのアクセス単位が決まっていれば、そのホスト11からのアクセス単位に基づいて判定が行われる。一方、例えば、インターリーブ数決定処理においてホスト11からのアクセス単位が決まっていないときには、ホストアプリケーションの実行を開始するときに、ステップS5乃至S7の処理を行ってインターリーブ数を決定することができる。
以上のように、データ記憶システム10では、ホスト11が、インターリーブ数を決定してメモリコントローラ12に通知するので、メモリ制御の自由度を高く(柔軟な使い方ができるように)なり、処理速度を優先してメモリ制御をしたり、消費電力の抑制を優先してメモリ制御をしたりすることができる。なお、本実施の形態では、ホスト11がインターリーブ数を決定しているが、例えば、メモリコントローラ12や不揮発性メモリ13が決定してもよい。
次に、図18は、図1のデータ記憶システム10においてメモリコントローラ12に対する設定を行う処理を説明するフローチャートである。
例えば、データ記憶システム10が搭載されている装置に電源が投入されて、ホスト11がホストアプリケーションの実行を開始すると処理が開始され、ステップS11において、ホスト11は、実行するホストアプリケーションの仕様やデータ記憶システム10の使用環境などに応じて、処理速度を優先してメモリ制御を行うのか、消費電力の抑制を優先してメモリ制御を行うのかを判定する。
ステップS11において、ホスト11が、処理速度を優先してメモリ制御を行うと判定した場合、処理はステップS12に進む。ステップS12において、ホスト11は、メモリ制御に使用するインターリーブ数を、図17のインターリーブ数決定処理において決定したインターリーブ数に決定する。
一方、ステップS11において、ホスト11が、消費電力の抑制を優先してメモリ制御を行うと判定した場合、処理はステップS13に進み、ホスト11は、メモリ制御に使用するインターリーブ数を小さな数値、例えば、2に決定する。
ステップS12またはS13の処理後、処理はステップS14に進む。ステップS14において、ホスト11は、設定情報として、実行するホストアプリケーションが使用するホスト11でのアドレス空間、実行するホストアプリケーションに応じたアクセス単位、および、ステップS12またはS13で決定したインターリーブ数をメモリコントローラ12に通知する。
ステップS14の処理後、処理はステップS15に進み、ホスト11は、実行する全てのホストアプリケーションについて、アドレス空間、アクセス単位、およびインターリーブ数をメモリコントローラ12に通知したか否かを判定する。即ち、ホスト11において複数のホストアプリケーションを実行する場合には、図4を参照して説明したように、ホストアプリケーションごとにアドレス空間、アクセス単位、およびインターリーブ数をメモリコントローラ12に設定する必要がある。
従って、ステップS15において、ホスト11が、実行する全てのホストアプリケーションについて、アドレス空間、アクセス単位、およびインターリーブ数をメモリコントローラ12に通知していないと判定した場合、即ち、それらをメモリコントローラ12に通知していないホストアプリケーションを実行する場合、処理はステップS11に戻り、それらをメモリコントローラ12に通知する処理を行っていないホストアプリケーションを対象として、以下、同様の処理が繰り返される。
一方、ステップS15において、ホスト11が、実行する全てのホストアプリケーションについて、アドレス空間、アクセス単位、およびインターリーブ数をメモリコントローラ12に通知したと判定した場合、処理は終了される。
以上のように、データ記憶システム10では、ホスト11が、実行するホストアプリケーションごとに、アドレス空間、アクセス単位、およびインターリーブ数をメモリコントローラ12に通知することができる。このように、ホスト11が、アドレス空間、アクセス単位、およびインターリーブ数を通知することで、データ記憶システム10では、実行するホストアプリケーションの仕様やデータ記憶システム10の使用環境などに応じて不揮発性メモリ13の使い方を選択することができる。
即ち、従来、消去が必要な不揮発性メモリを使ったシステムにおいて、ホストが、アドレス空間、アクセス単位、並びに、不揮発性メモリの消去時間および書き込み時間を考慮してインターリーブ数をメモリコントローラに通知することはなく、ホストからのアクセス単位に合わせて、消去時間を隠すような柔軟なメモリ制御を行うことができなかった。これに対し、データ記憶システム10では、ホスト11が、実行するホストアプリケーションごとに、アドレス空間、アクセス単位、並びに、不揮発性メモリの消去時間および書き込み時間を考慮したインターリーブ数をメモリコントローラ12に通知することができるので、実行するホストアプリケーションの仕様やデータ記憶システム10の使用環境などに応じたメモリ制御、即ち、従来よりも自由度が高い(柔軟な)メモリ制御を行うことができる。このように、従来よりメモリ制御の自由度を向上させ、不揮発性メモリの消去動作を隠しながら、書き込みを実行することができる。
次に、図19は、図1のデータ記憶システム10においてアドレスを変換する処理を説明するフローチャートである。
例えば、データ記憶システム10が搭載されている装置に電源が投入されたとき、または、ホスト11から設定情報が供給されたときに、処理が開始される。ステップS21において、メモリコントローラ12のメモリ制御部28は、電源が投入されたことにより処理が開始されたのか、ホスト11からの設定情報が供給されたことにより処理が開始されたのかを判定する。
ステップS21において、メモリ制御部28が、電源が投入されたことにより処理が開始されたと判定した場合、処理はステップS22に進み、メモリ制御部28は、メモリインターフェイス22を介して、不揮発性メモリ13から設定情報を読み出す。即ち、データ記憶システム10では、システム停止時に、メモリ制御部28が、アドレス空間設定部25に記憶されているアドレス空間、アクセス単位設定部26に記憶されているアクセス単位、インターリーブ数設定部27に記憶されているインターリーブ数を、設定情報として不揮発性メモリ13に記憶させておくことができ、ステップS22では、それらの設定情報が読み出される。
一方、ステップS21において、メモリ制御部28が、ホスト11から設定情報が供給されたことにより処理が開始されたと判定した場合、処理はステップS23に進み、メモリ制御部28は、ホスト11から供給される設定情報を受け取る。即ち、メモリ制御部28は、図18のステップS14でホスト11が通知するアドレス空間、アクセス単位、およびインターリーブ数を受け取る。
ステップS22またはS23の処理後、処理はステップS24に進み、メモリ制御部28は、アドレス空間をアドレス空間設定部25のレジスタに保存させる。また、メモリ制御部28は、アクセス単位をアクセス単位設定部26のレジスタに保存させ、インターリーブ数をインターリーブ数設定部27のレジスタに保存させる。
ステップS24の処理後、処理はステップS25に進み、アドレス変換部24は、ステップS24で各部に保存されたアドレス空間、アクセス単位、およびインターリーブ数に基づいて、ホスト11のアドレス空間を不揮発性メモリ13におけるアドレスに変換する。
例えば、アクセス単位が8バイトに設定され、インターリーブ数が4に設定された場合、アドレス変換部24は、ホスト11のアドレスに対して、図2を参照して説明したように、バンクBA0乃至BA15を割り当てる。つまり、アドレス変換部24は、ホスト11の下位のアドレスから上位に向かって、順次、バンクBA0乃至BA3、バンクBA4乃至BA7、バンクBA8乃至BA11、バンクBA12乃至BA15を割り当てる。
このようにアドレス変換部24は、ホスト11のアドレス空間を不揮発性メモリ13におけるアドレスに変換し、その結果得られるアドレス変換表を、例えば、自身のレジスタに保存し、処理は終了する。
以上のように、メモリコントローラ12では、アドレス空間、アクセス単位、およびインターリーブ数に基づいて、ホスト11のアドレス空間を不揮発性メモリ13におけるアドレスに変換することができる。
次に、図20は、図1の不揮発性メモリ13にアクセス単位分のデータを書き込む処理を説明するフローチャートである。
ホスト11が、書き込みコマンドとともに、不揮発性メモリ13に書き込むデータと、そのデータのホスト11でのアドレスとの送信を開始すると処理が開始され、ステップS31において、メモリコントローラ12は、アドレスとデータの受信を開始する。そして、メモリコントローラ12では、データバッファ23が、不揮発性メモリ13に書き込むデータをバッファリングするとともに、メモリ制御部28が、そのデータのホスト11でのアドレスを取得する。
ステップS32において、メモリ制御部28は、アドレス変換部24が保持しているアドレス変換表を参照し、ステップS31で取得したホスト11でのアドレスを、不揮発性メモリ13のアドレスに変換し、処理はステップS33に進む。
このとき、メモリ制御部28が参照するアドレス変換表は、不揮発性メモリ13のバンクをインターリーブしながら書き込み単位ごとの書き込みを行って、インターリーブ数に応じたバンク数だけインターリーブすると、先頭のバンクの次の書き込み単位の行に戻るということを繰り返すように、アドレスが割り当てられているので、インターリーブ数に応じたバンク数で並列動作しながら書き込みが行われるように、ホスト11でのアドレスが不揮発性メモリ13のアドレスに変換される。
ステップS33において、メモリ制御部28は、書き込みコマンドとともに、ステップS32で変換したアドレスと、その変換後のアドレスに対応するデータバッファ23にバッファリングされているデータとを不揮発性メモリ13に送信する。
ステップS33の処理後、処理はステップS34に進み、メモリ制御部28は、アクセス単位分のデータを不揮発性メモリ13に転送したか否かを判定する。
ステップS34において、メモリ制御部28が、アクセス単位分のデータを不揮発性メモリ13に転送していないと判定した場合、処理はステップS32に戻り、アクセス単位分のデータを転送すると判定されるまで、ステップS32乃至S34の処理が繰り返される。一方、メモリ制御部28が、アクセス単位分のデータを不揮発性メモリ13に転送したと判定した場合、処理は終了する。
以上のように、データ記憶システム10では、メモリコントローラ12に、ホスト11のアドレス空間、アクセス単位、およびインターリーブ数を設定することで、インターリーブ数に応じたバンク数で並列動作しながら書き込みが行われるように、ホスト11でのアドレスが不揮発性メモリ13のアドレスに変換される。これにより、不揮発性メモリ13が、データの消去を行った後にデータの書き込みを行うという一連の処理が必要とされるタイプのものであっても、不揮発性メモリ13のバンクBA1乃至BANをインターリーブしながら書き込みを行うことで、消去時間によるオーバヘッドを隠すことができる。これにより、データを書き込む処理速度を改善すること、即ち、データの書き込み処理を高速化することができる。
即ち、従来のメモリ制御では、アクセス単位が考慮されていないため、アプリケーションによって様々な単位で書き込みが行われる場合には、書き込みデータをデータラッチにキャッシュする時間よりも消去時間が長くなることがあり、その場合、消去時間によるオーバヘッドが顕著に表れたり、書き込み速度が向上するようにホストの論理アドレスを不揮発性メモリのバンクに割り当てることができなかったりした。
これに対し、データ記憶システム10では、メモリコントローラ12が、ホスト11のアドレス空間、アクセス単位、およびインターリーブ数を把握することで、オーバヘッドが現れないようにすることができ、書き込み速度を改善することができる。
また、メモリ制御部28においてアドレスの変換が行われるので、ホスト11は、不揮発性メモリ13のアドレスと、インターリーブするバンクBA1乃至BANとの関係を意識することなく処理を行うことができる。
さらに、ホスト11が、アクセス単位の異なる複数のホストアプリケーションを実行する場合において、1つの不揮発性メモリ13を使用するとき、それぞれのホストアプリケーションが使用するアドレス空間ごとに、アクセス単位およびインターリーブ数が設定されているので、それぞれのホストアプリケーションごとに、最適な処理速度でデータを書き込むことができる。
ところで、上述したように、ホスト11は所定のアクセス単位でデータを転送し、そのアクセス単位はアクセス単位設定部26に保存されている。また、ホスト11は、アクセス単位において下位のアドレスのデータから転送を開始する。従って、メモリ制御部28は、ホスト11からアクセス単位分のデータが転送されてくると、その最初のデータのアドレスと、アクセス単位設定部26に設定されているアクセス単位とに基づいて、アクセス単位のデータを書き込む不揮発性メモリ13の領域を把握することができる。
これにより、メモリコントローラ12は、データの書き込みに必要になる領域に、不揮発性メモリ13のデータを消去することを指示するコマンド(消去コマンド)をあらかじめ送信し、その領域に書き込むデータが蓄積されたタイミングで、不揮発性メモリ13への書き込みを開始するようなメモリ制御(以下、適宜、先消しメモリ制御と称する)を行うことができる。
このとき、即ち、書き込みコマンドの供給の前に、消去コマンドがメモリコントローラ12から供給されたとき、不揮発性メモリ13において、制御部32は、不揮発性メモリ13のデータの消去を行い、その後、書き込みコマンドが供給されると、データの消去が完了次第、データの書き込みを行う。
図21および図22を参照して、先消しメモリ制御を行う処理と、先消しメモリ制御を行わない処理について説明する。
図21および図22は、アクセス単位が32バイトと設定され、インターリーブ数が4と設定され、不揮発性メモリ13の書き込み単位および消去単位が8バイトであるときのメモリコントローラ12および不揮発性メモリ13の動作を示すタイミングチャートである。
メモリコントローラ12は、ホスト11から不揮発性メモリ13に書き込むデータの供給が開始されると、ホスト11からのアクセス単位が32バイトであることより、ホスト11からのデータを不揮発性メモリ13に供給するより先に、32バイト分の領域の消去を行う。このとき、最初にデータを書き込むバンクについては、データを書き込むコマンドを送信することによって、データを消去した後にデータの書き込みが行われるので、メモリコントローラ12は、最初にデータを書き込むバンク以外のバンクにデータの消去を示すコマンド信号を送信する。ここで、インターリーブ数が4と設定されていることより、メモリコントローラ12は、バンクBA0以外のバンクBA1乃至BA3にデータの消去を示すコマンド信号を送信する。
即ち、図21の上側に示すように、メモリコントローラ12は、最初の3クロックで、データの消去を示すコマンド信号CMD(Erase)(図21においては、Eで示されているコマンド信号)とともに、アドレス信号ADR(1)、アドレス信号ADR(2)、およびアドレス信号ADR(3)を順次送信する。これにより、不揮発性メモリ13は、書き込み単位および消去単位である8バイトの消去(Erase Byte 0〜7)を、バンクBA1乃至BA3に対して順次開始する。
そして、メモリコントローラ12は、その次のクロックから、データの書き込みを示すコマンド信号CMD(Write)(図21においては、Wで示されているコマンド信号)の送信を開始するとともに、アドレス信号ADR(0)と、バンクBA0に書き込む8バイト分のデータ(Data 0〜7)とを順次送信する。その後、メモリコントローラ12は、アドレス信号ADR(1)と、バンクBA1に書き込む8バイト分のデータ(Data 8〜15)とを送信し、アドレス信号ADR(2)と、バンクBA2に書き込む8バイト分のデータ(Data 16〜23)とを送信し、アドレス信号ADR(3)と、バンクBA3に書き込む8バイト分のデータ(Data 24〜31)とを送信する。
一方、不揮発性メモリ13では、メモリコントローラ12からのデータを一時的に蓄積し、データの書き込みを開始するバンクBA0の8バイト分のデータの消去が終了すると、その次のクロックで、バンクBA0への8バイト分のデータ(Data 0〜7)の書き込みを開始する。このとき、不揮発性メモリ13には、バンクBA1に書き込む8バイト分のデータも既に蓄積されているので、不揮発性メモリ13は、その次のクロックで、バンクBA1への8バイト分のデータ(Data 8〜15)の書き込みを開始する。
その後、不揮発性メモリ13は、バンクBA2に書き込む8バイト分のデータが蓄積されるまで待機し、バンクBA2に書き込む8バイト分のデータが蓄積されると、その次のクロックで、バンクBA2への8バイト分のデータ(Data 16〜23)の書き込みを開始する。同様に、不揮発性メモリ13は、バンクBA3に書き込む8バイト分のデータが蓄積されるまで待機し、バンクBA3に書き込む8バイト分のデータが蓄積されると、その次のクロックで、バンクBA3への8バイト分のデータ(Data 24〜31)の書き込みを開始する。
このように、先消しメモリ制御を行うときには、メモリコントローラ12がホスト11からのアクセス単位に基づいてデータの書き込みに必要となる領域を把握することができるので、ホスト11からの書き込みアドレスを不揮発性メモリ13のアドレスに変換することで、先消しする不揮発性メモリ13のアドレスを決定することができる。従って、不揮発性メモリ13の消去単位分のデータがそろう前に、データの消去を実行することができる。そして、不揮発性メモリ13では、データの消去が完了したバンクに対して、書き込み単位分のデータが揃い次第、データの書き込みを実行することができる。
これに対し、先消しメモリ制御を行わない場合、即ち、ホスト11が、アクセス単位をメモリコントローラ12に通知せずに、メモリコントローラ12が、データの書き込みに必要となる領域を把握することができない場合には、メモリコントローラ12は、不揮発性メモリ13の書き込み単位のデータ分が揃うまでは、データの消去を実行することができない。例えば、不揮発性メモリ13に書き込むデータが、不揮発性メモリ13の消去単位未満である場合には、データのマージが必要になり、不揮発性メモリ13の消去単位分のデータがそろう前に消去を実行すると、消去してはいけないデータまで消去することになる。
従って、先消しメモリ制御を行わない場合には、図22に示すように、メモリコントローラ12は、データを書き込む順に従って、データの書き込みを示すコマンド信号CMD(Write)と、アドレス信号ADR(0)乃至ADR(3)と、データ(Data 0〜31)とを順次送信する。
そして、不揮発性メモリ13では、コマンド信号CMD(Write)とともにアドレス信号ADR(0)が供給されると、バンクBA0への消去を開始して、その消去の後にデータ(Data 0〜7)の書き込みを行う。以下、同様に、コマンド信号CMD(Write)とともにアドレス信号ADR(1)が供給されると、バンクBA1への消去を開始して、その消去の後にデータ(Data 8〜15)の書き込みを行う。その後、コマンド信号CMD(Write)とともにアドレス信号ADR(2)が供給されると、バンクBA2への消去を開始して、その消去の後にデータ(Data 16〜23)の書き込みを行う。その後、コマンド信号CMD(Write)とともにアドレス信号ADR(3)が供給されると、バンクBA3への消去を開始して、その消去の後にデータ(Data 24〜31)の書き込みを行う。
図21と図22とを比較して分かるように、先消しメモリ制御を行わない処理よりも、先消しメモリ制御を行う処理の方が、データの書き込みを早く(図21と図22の例では8クロック分早く)完了することができる。
また、先消しメモリ制御を行うときには、メモリコントローラ12は、不揮発性メモリ13での消去の実行中に、不揮発性メモリ13へのデータを転送することができるので、不揮発性メモリ13の消去単位当たりで消去に必要な時間が長く、不揮発性メモリ13の書き込み単位が大きいほど、不揮発性メモリ13への書き込み処理に必要な時間を短縮することができる。
次に、図23は、先消しメモリ制御を行って、図1の不揮発性メモリ13にアクセス単位分のデータを書き込む処理を説明するフローチャートである。
ホスト11が、書き込みコマンドとともに、不揮発性メモリ13に書き込むデータと、そのデータのホスト11でのアドレスとの送信を開始すると処理が開始され、ステップS51において、メモリコントローラ12は、アドレスとデータの受信を開始する。そして、メモリコントローラ12では、データバッファ23が、不揮発性メモリ13に書き込むデータをバッファリングするとともに、メモリ制御部28が、そのデータのホスト11でのアドレスを取得する。
ステップS52において、メモリ制御部28は、アクセス単位分のデータを書き込むのに必要な、インターリーブ数ごとに書き込みを繰り返す繰り返し回数を決定し、その繰り返し回数をカウントするための繰り返しパラメータを0にセットする。即ち、ホスト11からのアクセス単位が、インターリーブ数と書き込み単位とを積算した値より大きい場合には、データの書き込みを開始するバンクから、インターリーブ数で決められる最後のバンクまでの書き込みを、複数回、繰り返すことになり、メモリ制御部28は、この繰り返す回数を求める。
例えば、不揮発性メモリ13の書き込み単位がA(Byte)であり、インターリーブ数がBであり、ホスト11からのアクセス単位がC(Byte)であるとすると、繰り返し回数は、C/A×Bで求められる。具体的には、不揮発性メモリ13の書き込み単位が8(Byte)であり、インターリーブ数が4であり、ホスト11からのアクセス単位が64(Byte)であるとすると、繰り返し回数は2と求められる。
ステップS52の処理後、処理はステップS53に進み、メモリ制御部28は、データの書き込みの対象となるバンクであって、あらかじめ消去コマンドを送信してデータの消去を行うバンクを決定する。例えば、データの書き込みを開始するアドレス(最初にホスト11から送信されてきたデータのアドレスを、不揮発性メモリ13のアドレスに変換したアドレス)と、アクセス単位設定部26に設定されているアクセス単位とに基づいて、アクセス単位分のデータの書き込みに必要となる複数のバンクを把握し、それらのバンクのうちの、2番目以降にデータが書き込まれるバンクを、先消しするバンクとして決定する。
ステップS53の処理後、処理はステップS54に進み、メモリ制御部28は、ステップS53で先消しすると決定したバンクに対し、データを書き込む順に、消去コマンドを送信し、処理はステップS55に進む。
ステップS55において、メモリ制御部28は、アドレス変換部24が保持しているアドレス変換表を参照し、ステップS51で取得したホスト11でのアドレスを、不揮発性メモリ13のアドレスに変換し、処理はステップS56に進む。
ステップS56において、メモリ制御部28は、書き込みコマンドとともに、ステップS55で変換したアドレスと、その変換後のアドレスに対応するデータバッファ23にバッファリングされているデータとを不揮発性メモリ13に送信する。
ステップS56の処理後、処理はステップS57に進み、メモリ制御部28は、1インターリーブ数分のデータを不揮発性メモリ13に転送したか否かを判定する。
例えば、1インターリーブ数分のデータとは、データの書き込みを開始するバンクから、インターリーブ数で決められる最後のバンクまでの書き込み単位での書き込みを繰り返して行うときの、その1回分の書き込みにおけるデータの量(即ち、インターリーブ数分×不揮発性メモリ13の書き込み単位)である。
ステップS57において、メモリ制御部28が、1インターリーブ数分のデータを不揮発性メモリ13に転送していないと判定した場合、処理はステップS55に戻り、1インターリーブ数分のデータが不揮発性メモリ13に転送されたと判定されるまで、処理が繰り返される。一方、ステップS57において、メモリ制御部28が、1インターリーブ数分のデータを不揮発性メモリ13に転送したと判定した場合、処理はステップS58に進む。
ステップS58において、メモリ制御部28は、ステップS52で決定した繰り返し回数だけ、インターリーブ数ごとの書き込みを繰り返したか否かを判定する。例えば、ステップS52で0にセットした繰り返しパラメータが、繰り返し回数に到達していれば、メモリ制御部28は、繰り返し回数だけインターリーブ数ごとの書き込みを繰り返したと判定する。一方、ステップS52で0にセットした繰り返しパラメータが、繰り返し回数未満であれば、メモリ制御部28は、繰り返し回数だけインターリーブ数ごとの書き込みを繰り返していないと判定する。
ステップS58において、メモリ制御部28が、繰り返し回数だけインターリーブ数ごとの書き込みを繰り返していないと判定した場合、処理はステップS59に進み、メモリ制御部28は、繰り返しパラメータをインクリメントする。その後、処理はステップS54に戻り、以下、同様の処理が繰り返される。
一方、ステップS58において、メモリ制御部28が、繰り返し回数だけインターリーブ数ごとの書き込みを繰り返したと判定した場合、即ち、この場合、アクセス単位分のデータが不揮発性メモリ13に転送されており、処理は終了する。
以上のように、データ記憶システム10では、メモリコントローラ12がアクセス単位に基づいてデータの書き込みに必要となる領域を把握しているので、データの書き込みに必要になる領域に、あらかじめ消去コマンドを送信し、その領域に書き込むデータが蓄積されたタイミングで、不揮発性メモリ13への書き込みを開始するようなメモリ制御を行うことができる。これにより、データの書き込み処理をより高速化することができる。
なお、本発明は、図1に示したようにメモリコントローラ12と不揮発性メモリ13とが独立して構成されるシステムの他、メモリコントローラの機能を有した不揮発性メモリに適用することができる。
即ち、図24は、本発明を適用したデータ記憶システムの他の実施の形態の構成例を示すブロック図である。
図24において、図1のデータ記憶システム10と共通するブロックには、同一の符号を付し、それらの説明は、適宜、省略する。
即ち、図24に示す実施の形態では、ホストインターフェイス21、データバッファ23、アドレス変換部24、アドレス空間設定部25、アクセス単位設定部26、インターリーブ数設定部27、およびメモリ制御部28が、不揮発性メモリ13’に内蔵されている点で、図1の不揮発性メモリ13と異なっている。
このように、メモリコントローラ12の機能が内蔵された不揮発性メモリ13’を用いたデータ記憶システムにおいても、図1のデータ記憶システム10と同様に、ホスト11が、不揮発性メモリ13’に対して、アクセス単位およびインターリーブ数を設定することができる。そして、ホスト11から見て、データの消去時間を隠しながら、データの書き込みを実行することができる。
また、上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用性のあるコンピュータなどにインストールされる。
図25は、上述した一連の処理をプログラムにより実行するコンピュータ(マイクロコンピュータ)のハードウエアの構成例を示すブロック図である。
プログラムは、コンピュータに内蔵されている記録媒体としてのEEPROM(Electrically Erasable Programmable Read-only Memory)105やROM103に予め記録(インストール)しておくことができる。
あるいはまた、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納(記録)して提供することができる。
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、有線または無線のネットワークを介して、コンピュータに転送し、コンピュータでは、そのようにして転送されてくるプログラムを、入出力インタフェース110で受信し、内蔵するEEPROM105にインストールすることができる。
コンピュータでは、CPU(Central Processing Unit)(あるいは、DSP(Digital Signal Processor))102、ROM(Read Only Memory)103、RAM(Random Access Memory)104、EEPROM105、および入出力インタフェース110が、バス101を介して接続されている。
CPU102は、ROM(Read Only Memory)103やEEPROM105に格納されているプログラムを、RAM(Random Access Memory)104にロードして実行する。これにより、CPU102は、上述したフローチャートにしたがった処理、あるいは上述したブロック図の構成により行われる処理を行う。なお、外部とのデータのやりとりは、入出力インタフェース110を介して行われる。
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。即ち、上述のフローチャートを参照して説明した各処理は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。また、プログラムは、1のCPUにより処理されるものであっても良いし、複数のCPUによって分散処理されるものであっても良い。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。