以下、図面を参照しつつ、本発明の実施の形態にかかるメモリコントローラ及びフラッシュメモリシステムについて説明する。
図1は、本実施の形態に係るフラッシュメモリシステム1を概略的に示すブロック図である。
図1に示すように、フラッシュメモリシステム1は、2つのフラッシュメモリ2A及び2B(以下、フラッシュメモリ2A及び2Bを総称してフラッシュメモリ2と呼ぶ)と、フラッシュメモリ2を制御するコントローラ3で構成されている。
フラッシュメモリシステム1は、外部バス13を介してホストシステム4と接続される。ホストシステム4は、ホストシステム4の全体の動作を制御するためのCPU(Central Processing Unit)、フラッシュメモリシステム1との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム4は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
フラッシュメモリ2は、不揮発性メモリであり、レジスタと、メモリセルアレイと、から構成される。フラッシュメモリ2は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
メモリセルアレイは、複数のメモリセル群と、ワード線と、を備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
メモリセルアレイを構成するメモリセルは、2つのゲートを備えたMOSトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷(電子)を注入若しくはフローティングゲートから電荷(電子)を排出することによって、データの書き込み若しくはデータの消去が行われる。
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧を印加して電子が注入される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧を印加して電子が排出される。
フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「0」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「1」に対応する。
このようなフラッシュメモリ2のアドレス空間の一例を図2に示す。フラッシュメモリ2のアドレス空間は、“ページ”と“ブロック”に基づいて分割されている。
ページは、フラッシュメモリ2にて行われるデータ読出動作及びデータ書込動作における処理単位である。ブロックは、フラッシュメモリ2にて行われるデータ消去動作における処理単位である。
1つのページは、ユーザ領域25と、16バイトの冗長領域26とを含んでいる。ユーザ領域25は、ホストシステム4から供給されるユーザデータを格納する。1つのページのユーザ領域25は、1セクタ(512バイト)で構成されているものや、4セクタ(2Kバイト)で構成されているものがある。なお、ページの容量、ブロックサイズ(ブロックを構成するページの数)等は、フラッシュメモリの品種により異なる。
冗長領域26は、エラーコレクションコード、対応論理ブロックアドレス、ブロックステータス(フラグ)等の付加データを記録するための領域である。
エラーコレクションコード(ECC)は、ユーザ領域25に記憶されているデータに含まれる誤りを検出し、訂正するためのデータである。
対応論理ブロックアドレスは、1つのブロックに含まれている少なくとも1つのユーザ領域25に有効なデータが格納されているとき、そのブロックが対応付けられている論理ブロックのアドレスを示す。
論理ブロックアドレスは、ホストシステム4から与えられるホストアドレスに基づいて決定されるブロックのアドレスである。一方、フラッシュメモリ2内における実際のブロックのアドレスは、物理ブロックアドレスと称される。
1つのブロックに含まれているいずれのユーザ領域25にも有効なデータが格納されていないときには、そのブロックに含まれている冗長領域26に、対応論理ブロックアドレスは格納されていない。
従って、冗長領域26に対応論理ブロックアドレスが格納されているか否かを判定することにより、その冗長領域26が含まれているブロックのデータが消去されているか否かを判定することができる。冗長領域26に対応論理ブロックアドレスが格納されていないとき、そのブロックは、データが消去された状態となっている。
1つのブロックは、複数のページを含んでいる。フラッシュメモリ2では、データの上書きができない。このため、1つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれたブロック内の全ページに格納されたデータを消去されている別のブロックの1つに再度書き込まなければならない。
上記のようにデータを書き換えるにあたっては、書き換えられたデータは、以前に格納されていたブロックとは異なるブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ2にてデータが書き換えられる毎に、動的に変化する。
従って、論理ブロックアドレスと物理ブロックアドレスとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、各ページの冗長領域26に記憶されている対応論理ブロックアドレスに基づいて作成される。なお、このような動的なアドレス管理手法は、フラッシュメモリを用いたメモリシステムでは一般的に行われている手法である。
ブロックステータスは、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域26には、不良ブロックであることを示すブロックステータスが書き込まれる。
このようなフラッシュメモリ2は、コントローラ3から、データ、アドレス情報、ステータス情報、内部コマンド等を受信して、データの読み出し処理、書き込み処理、ブロック消去処理、転送処理等の各処理を行う。
ここで、内部コマンドとは、コントローラ3がフラッシュメモリ2に処理の実行を指示するためのコマンドであり、フラッシュメモリ2は、コントローラ3からの内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム4がフラッシュメモリシステム1に対して処理の実行を指示するためのコマンドである。
本実施の形態のフラッシュメモリシステム1では、二つのフラッシュメモリ2A及び2Bが、一つの仮想的なアドレス空間を構成する。
すなわち、ホストシステム4は、フラッシュメモリ2A及び2Bが構成する仮想的なアドレス空間におけるページを特定するための仮想ページアドレスに基づいて、該仮想的なアドレス空間を認識する。
一方、実際にフラッシュメモリ2A及び2Bのページにアクセスするためには、フラッシュメモリ2A及び2Bのそれぞれが有する実際のアドレス空間におけるページを特定するための物理ページアドレスを用いる必要がある。
本実施の形態のフラッシュメモリシステム1においては、仮想ページアドレスと物理ページアドレスとは、図3に示すような対応関係にある。図3は、1つのページのユーザ領域が1セクタ(512バイト)で、1ブロックに32個のページが含まれるフラッシュメモリの場合の例であり、フラッシュメモリ2A及び2Bに対して、仮想ページアドレスが交互に割り振られている。
すなわち、仮想ページアドレスにおける偶数ページ(ページ0、2、4、・・・)がフラッシュメモリ2Aの物理ページアドレス(ページ0,1、2、3、・・・)に対応し、仮想ページアドレスにおける奇数ページ(ページ1、3、5、・・・)がフラッシュメモリ2Bの物理ページアドレス(ページ0、1、2、3、・・・)に対応する。その結果、1ブロックを構成するページ数が64ページに拡張される。尚、仮想ページアドレスは、1セクタ(512バイト)を1ページとしてページアドレスを管理している。従って、1つのページのユーザ領域が4セクタに対応するフラッシュメモリの場合には、1つの物理ページに4個の仮想ページアドレスが割り当てられている。
コントローラ3は、フラッシュメモリ2A及び2Bにより構成されるアドレス空間を、仮想的な一つのアドレス空間としてホストシステム4が利用できるように、ホストシステム4によるフラッシュメモリ2A及び2Bへのアクセスを制御する。
コントローラ3は、図1に示すように、マイクロプロセッサ6と、ホストインターフェースブロック7と、ワークエリア8と、バッファ9と、フラッシュメモリインターフェースブロック10と、ECC(エラー・コレクション・コード)ブロック11と、ROM(Read Only Memory)12と、フラッシュメモリシーケンサブロック16A及び16Bと、アドレス変換ブロック17と、カウント値変換ブロック18と、から構成される。これら機能ブロックによって構成されるコントローラ3は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
マイクロプロセッサ6は、ROM12やワークエリア8に記録されたプログラムに従って、コントローラ3の全体の動作を制御する。例えば、マイクロプロセッサ6は、ROM12に格納されたプログラムに基づいてフラッシュメモリシーケンサブロック16Aの有するレジスタの値を設定することにより、フラッシュメモリインターフェースブロック10を介したフラッシュメモリ2Bへのアクセス処理を実行させる。
ホストインターフェースブロック7は、ホストシステム4との間の、データ、アドレス情報、ステータス情報、外部コマンド、等の授受を行なう。すなわち、フラッシュメモリシステム1とホストシステム4は、外部バス13を介して相互に接続される。かかる状態において、ホストシステム4よりフラッシュメモリシステム1に供給されるデータ等は、ホストインターフェースブロック7を入口としてフラッシュメモリシステム1の内部に取り込まれ、フラッシュメモリシステム1からホストシステム4に供給されるデータ等は、ホストインターフェースブロック7を出口としてホストシステム4に供給される。
ワークエリア8は、フラッシュメモリ2の制御に必要なデータが一時的に格納される作業領域であり、複数のSRAM(Static Random Access Memory)セルによって構成される。
バッファ9は、フラッシュメモリ2から読み出されたデータ及びフラッシュメモリ2に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ2から読み出されたデータは、ホストコンピュータ4が受け取り可能な状態となるまでバッファ9に保持され、フラッシュメモリ2に書き込むべきデータは、フラッシュメモリ2が書き込み可能な状態となるまでバッファ9に保持される。
フラッシュメモリインターフェースブロック10は、フラッシュメモリシーケンサブロック16A及び16Bの有する各レジスタの設定に従い、内部バス14を介して、フラッシュメモリ2とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。
フラッシュメモリシーケンサブロック16A及び16Bは、フラッシュメモリの制御手順を記述したシーケンスコマンドに基づいて、それぞれフラッシュメモリ2A及び2Bの動作を制御する。
フラッシュメモリシーケンサブロック16A及び16Bは、それぞれ、複数のレジスタを有している。該レジスタには、図4に示すように、アクセス先の物理ブロックを特定する物理ブロックアドレスが設定される物理ブロックアドレスレジスタと、アクセス先のページを特定する物理ページアドレスが設定される物理ページアドレスレジスタと、物理スタートページを基準としてアクセス対象のページ数を特定する物理カウント値が設定されるカウント値レジスタとが含まれる。
フラッシュメモリシーケンサブロック16A及び16Bは、マイクロプロセッサ6による制御のもと、シーケンスコマンドが実行されるときに使用される情報を、複数のレジスタに設定する。複数のレジスタに情報を設定した後、フラッシュメモリシーケンサブロック16A及び16Bは、各レジスタに設定された情報に基づいて、シーケンスコマンドに従った動作を行う。
ECCブロック11は、フラッシュメモリ2に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出したデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
ROM12は、マイクロプロセッサ6による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ROM12は、例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムを格納する。
アドレス変換ブロック17とカウント値変換ブロック18は、フラッシュメモリ2A及び2Bにより構成される仮想的な一つのアドレス空間内の仮想アドレスを、フラッシュメモリ2A及び2Bのそれぞれにおける実際のアドレス(物理ページアドレス)に変換するためのブロックである。つまり、フラッシュメモリ2Aに含まれる1個のブロックと、フラッシュメモリ2Bに含まれる1個のブロックで構成される領域を仮想的な1つのアドレスとみなした場合の仮想ページアドレスをフラッシュメモリ2A及び2Bのそれぞれにおける実際のアドレス(物理ページアドレス)に変換するためのブロックである。なお、フラッシュメモリ2A及び2Bのそれぞれにおいて、アクセス対象のブロックを特定する物理ブロックアドレスについては、アドレス変換等などを用いて求められる。
本実施の形態のフラッシュメモリシステム1では、複数ページに渡るデータの書き込み又は読み出しを実行する場合、アドレス空間内におけるアクセス対象のページを、その先頭ページに対応するスタートページのページアドレスとセクタ数とによって示す。すなわち、スタートページからセクタ数で示される範囲のページがアクセス対象になる。
すなわち、ホストシステム4が、フラッシュメモリ2にアクセスしようとする場合、仮想スタートページアドレスと、セクタ数に対応する仮想カウント値とにより、アクセス対象のページの仮想ページアドレスが特定される。本実施の形態のフラッシュメモリシステム1では、フラッシュメモリ2A及び2Bの1個のページが1セクタ(512バイト)に対応し、フラッシュメモリ2Aの1個のブロックとフラッシュメモリ2Bの1個のブロックを合わせた全ページ数が64なので、仮想スタートページアドレスと仮想カウント値は、それぞれ6ビットの論理値により表現される。
アドレス変換ブロック17は、仮想スタートページアドレスをフラッシュメモリ2A及び2Bのそれぞれにおけるスタートページのページアドレスを示す物理スタートページアドレスへと変換し、フラッシュメモリシーケンサブロック16A及び16Bが有する物理ページアドレスレジスタに供給する。
アドレス変換ブロック17は、図5に示すように、仮想ページアドレスレジスタ170と、第1の実ページアドレスレジスタ171と、第2の実ページアドレスレジスタ172と、仮想ページ/実ページ選択レジスタ173と、除算器174と、加算器175と、第1のセレクタ176と、第2のセレクタ177と、第3のセレクタ178と、から構成される。
仮想ページアドレスレジスタ170は、アクセス対象の先頭ページの仮想的なアドレスである仮想スタートページアドレスが設定されるレジスタである。この仮想スタートページアドレスは、ホストシステムから与えられる論理アドレスの下位6ビット(0〜63)に対応する。下位6ビットを除いた上位ビットが論理ブロックアドレスに対応する。論理ブロックは、アドレス変換テーブル等を用いてフラッシュメモリ2A及び2B内のブロックを特定する物理ブロックアドレスに変換される。仮想ページアドレスレジスタ170の設定値は、除算器174に供給される。また、仮想ページアドレスレジスタ170の最下位ビット(LSB)の設定値は、第1のセレクタ176に供給される。
第1の実ページアドレスレジスタ171は、アクセス対象データのフラッシュメモリ2Aにおける先頭の物理ページアドレス(物理スタートページアドレス)が設定されるレジスタである。フラッシュメモリ2Aの1個の物理ブロックに32個のページが含まれているので、5ビット(0〜31)の物理ページアドレスが設定される。
第2の実ページアドレスレジスタ172は、アクセス対象データのフラッシュメモリ2Bにおける先頭の物理ページアドレス(物理スタートページアドレス)が設定されるレジスタである。フラッシュメモリ2Bの1個の物理ブロックに32個のページが含まれているので、5ビット(0〜31)の物理ページアドレスが設定される。
仮想ページ/実ページ選択レジスタ173は、アクセス対象データのスタートページアドレスを、仮想ページアドレスと物理ページアドレスとのいずれに基づき特定するかを設定するためのレジスタである。
除算器174は、仮想ページアドレスレジスタ170に設定された仮想スタートページアドレスを2で除算、すなわち、1ビット右にシフトした値を加算器175と、第1のセレクタ176とに供給する。
加算器175は、除算器174により除算された仮想スタートページアドレスに1を加算した値を、第1のセレクタ176に供給する。
第1のセレクタ176は、仮想ページアドレスレジスタ170の最下位ビット(LSB)の設定値に応じて、除算器又は加算器の出力値を第2のセレクタ177に供給する。具体的には、第1のセレクタ176は、仮想ページアドレスレジスタ170のLSBが「0」の場合(すなわち、仮想スタートページアドレスが偶数の場合)、除算器174の出力値を第2のセレクタ177に供給する。一方、仮想ページアドレスレジスタ170のLSBが「1」の場合(すなわち、仮想スタートページアドレスが奇数の場合)、第1のセレクタ176は、加算器175の出力値を第2のセレクタ177に供給する。
第2のセレクタ177は、仮想ページ/実ページ選択レジスタ173の設定値に応じて、第1の実ページアドレスレジスタ171に設定された物理スタートページアドレス又は第1のセレクタ176が出力する仮想スタートページアドレスから変換された物理スタートページアドレスのいずれか一方を出力する。第2のセレクタ177の出力値は、フラッシュメモリシーケンサブロック16Aが有する物理ページアドレスレジスタ162に供給される。
第3のセレクタ178は、仮想ページ/実ページ選択レジスタ173の設定値に応じて、第2の実ページアドレスレジスタ172に設定された物理スタートページアドレス又は除算器174が出力する仮想スタートページアドレスから変換された物理スタートページアドレスのいずれか一方を出力する。第3のセレクタ178の出力値は、フラッシュメモリシーケンサブロック16Bが有する物理ページアドレスレジスタ162に供給される。
図1のカウント値変換ブロック18は、仮想カウント値をフラッシュメモリ2A及び2Bのそれぞれにおける物理カウント値へと変換し、フラッシュメモリシーケンサブロック16A及び16Bが有する物理カウント値レジスタ163に供給する。つまり、カウント値変換ブロック18は、フラッシュメモリ2Aに含まれる1個のブロックとフラッシュメモリ2Bに含まれる1個のブロックで構成される仮想的なアドレス空間におけるアクセス対象のセクタ数(仮想カウント値)をフラッシュメモリ2A及び2Bにおけるアクセス対象のセクタ数(物理カウント値)に変換する。
図6に示すように、カウント値変換ブロック18は、仮想カウント値レジスタ180と、第1の実カウント値レジスタ181と、第2の実カウント値レジスタ182と、仮想カウント/実カウント選択レジスタ183と、除算器184と、加算器185と、第4のセレクタ186と、第5のセレクタ187と、第6のセレクタ188と、第7のセレクタ189と、から構成される。
仮想カウント値レジスタ180は、仮想的なアドレス空間において、仮想スタートページアドレスを基準としたアクセス対象のセクタ数を特定するための仮想カウント値が設定されるレジスタである。仮想カウント値レジスタ180の設定値は、除算器184に供給される。また、仮想ページアドレスレジスタ180の最下位ビット(LSB)の設定値は、第4のセレクタ186と第5のセレクタ187とに供給される。
第1の実カウント値レジスタ181は、フラッシュメモリ2Aの実際のアドレス空間において、アドレス変換ブロック17が設定する物理スタートページアドレスを基準としたアクセス対象のセクタ数を特定するための物理カウント値が設定されるレジスタである。
第2の実カウント値レジスタ182は、フラッシュメモリ2Bの実際のアドレス空間において、アドレス変換ブロック17が設定する物理スタートページアドレスを基準としたアクセス対象のセクタ数を特定するための物理カウント値が設定されるレジスタである。
仮想カウント/実カウント選択レジスタ183は、フラッシュメモリシーケンサブロック16A及び16Bが有する物理カウント値レジスタに設定するカウント値を、仮想カウント値と物理カウント値とのいずれに基づいて特定するかを設定するためのレジスタである。
除算器184は、仮想カウント値レジスタ180に設定された仮想カウント値を2で除算、すなわち、1ビット右にシフトした値を加算器185と、第4のセレクタ186と、第5のセレクタ187とに供給する。
加算器185は、除算器184により除算された仮想カウント値に1を加算した値を、第4のセレクタ186と、第5のセレクタ187とに供給する。
第4のセレクタ186は、仮想カウント値レジスタ180のLSBの設定値と、アドレス変換ブロック17が有する仮想ページアドレスレジスタ170のLSBの設定値とに応じて、仮想カウント値をフラッシュメモリ2Aの物理カウント値に変換して第6のセレクタ188に供給する。
具体的には、第4のセレクタ186は、仮想カウント値レジスタ180のLSBが「0」の場合(すなわち、仮想カウント値が偶数の場合)、又は、仮想ページアドレスレジスタ170のLSBが「1」の場合(すなわち、仮想スタートページアドレスが奇数の場合)、除算器184の出力値を第6のセレクタ188に供給する。一方、仮想カウント値レジスタ180のLSBが「1」、且つ、仮想ページアドレスレジスタ170のLSBが「0」の場合(すなわち、仮想カウント値が奇数且つ仮想スタートページアドレスが偶数の場合)、第4のセレクタ186は、加算器185の出力値を第6のセレクタ188に供給する。
第5のセレクタ187は、仮想カウント値レジスタ180のLSBの設定値と、アドレス変換ブロック17が有する仮想ページアドレスレジスタ170のLSBの設定値とに応じて、仮想カウント値をフラッシュメモリ2Bの物理カウント値に変換して第7のセレクタ189に供給する。
具体的には、第5のセレクタ187は、仮想カウント値レジスタ180のLSBが「0」の場合(すなわち、仮想カウント値が偶数の場合)、又は、仮想ページアドレスレジスタ170のLSBが「0」の場合(すなわち、仮想スタートページアドレスが偶数の場合)、除算器184の出力値を第7のセレクタ189に供給する。一方、仮想カウント値レジスタ180のLSBが「1」、且つ、仮想ページアドレスレジスタ170のLSBが「1」の場合(すなわち、仮想カウント値が奇数且つ仮想スタートページアドレスが奇数の場合)、第5のセレクタ187は、加算器185の出力値を第7のセレクタ189に供給する。
第6のセレクタ188は、仮想カウント/実カウント選択レジスタ183の設定値に応じて、第1の実カウント値レジスタ181に設定された物理カウント値又は第4のセレクタ186が出力する仮想カウント値から変換されたカウント値のいずれか一方を出力する。第6のセレクタ188の出力値は、フラッシュメモリシーケンサブロック16Aが有する物理カウント値レジスタ163に供給される。
第7のセレクタ189は、仮想カウント/実カウント選択レジスタ183の設定値に応じて、第2の実カウント値レジスタ182に設定された物理カウント値又は第5のセレクタ187が出力する仮想カウント値から変換されたカウント値のいずれか一方を出力する。第7のセレクタ189の出力値は、フラッシュメモリシーケンサブロック16Bが有する物理カウント値レジスタ163に供給される。
次に、上記のように構成されるフラッシュメモリシステム1において、ホストシステム4がフラッシュメモリ2にアクセスする場合に、アドレス変換ブロック17及びカウント値変換ブロック18により実行される、仮想スタートページアドレスから物理スタートページアドレスへの変換処理について、仮想スタートページが偶数ページの場合と、奇数ページの場合とに分けて、それぞれ具体的に説明する。
まず、仮想スタートページが偶数ページある場合の例として、仮想スタートページアドレスが4(下位6ビットを2進数表示すると、000100H)のときの仮想スタートページアドレスから物理スタートページアドレスへの変換処理について説明する。
なお、以下の説明では、仮想ページ/実ページ選択レジスタ173には、アクセス対象データの先頭のページアドレスを、仮想ページアドレスに基づいて特定することを選択する値が設定されているものとする。
また、仮想カウント/実カウント選択レジスタ183には、カウント値を、仮想カウント値に基づいて特定することを選択する値が設定されているものとする。
仮想スタートページアドレスは、アドレス変換ブロック17により、フラッシュメモリ2A及び2Bのそれぞれにおける物理スタートページアドレスへと変換される。
ホストシステム4から供給される論理アドレスの下位6ビットに対応する仮想スタートページアドレス「4(=000100H)」は、仮想ページアドレスレジスタ170に設定される。仮想ページアドレスレジスタ170に偶数の仮想スタートページアドレスが設定されている場合は、LSBの「0」が、第1のセレクタ176に供給さる。また、仮想ページアドレスレジスタ170は、設定値「4」を除算器174に供給する。
除算器174は、仮想ページアドレスレジスタ170から供給される値「4」を2で除算して得られる値「2(=000010H)」を、加算器175と、第1のセレクタ176と、第3のセレクタ178とに供給する。
加算器175は、除算器174から供給される値「2」に1を加算して得られる値「3(=000011H)」を、第1のセレクタ176に供給する。
第1のセレクタ176は、仮想ページアドレスレジスタ170のLSBの値「0」に基づき、除算器174の出力値である「2(=000010H)」を選択して第2のセレクタ177に供給する。
第2のセレクタ177は、仮想ページ/実ページ選択レジスタ173の設定値に基づき、第1のセレクタ176から供給される値「2(=000010H)」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理ページアドレスレジスタ162に供給する。つまり、フラッシュメモリ2Aのスタートページは、「2」ページ目となる。
第3のセレクタ178は、仮想ページ/実ページ選択レジスタ173の設定値に基づき、除算器174から供給される値「2(=000010H)」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理ページアドレスレジスタ162に供給する。つまり、フラッシュメモリ2Bのスタートページも、「2」ページ目となる。
仮想カウント値は、カウント値変換ブロック18により、フラッシュメモリ2A及び2Bのそれぞれにおける物理カウント値へと変換される。
仮想カウント値は、ホストシステム4から与えられるセクタ数に基づいて決まる値であり、その値は、仮想カウント値レジスタ180に設定される。ここで、書き込み又は読み出し対象のデータの量が16物理ページ分とすると、仮想カウント値は「16」であり、仮想カウント値レジスタ180に「16(=010000H)」が設定される。仮想カウント値レジスタ180は、LSBの「0」を、第4のセレクタ186と、第5のセレクタ187とに供給する。また、仮想カウント値レジスタ180は、設定値「16(=010000H)」を除算器184に供給する。
除算器184は、仮想カウント値レジスタ180から供給される値「16(=010000H)」を2で除算して得られる値「8(=001000H)」を、加算器185と、第4のセレクタ186と、第5のセレクタ187とに供給する。
加算器185は、除算器184から供給される値「8(=001000H)」に1を加算して得られる値「9(=001001H)」を、第4のセレクタ186と、第5のセレクタ187とに供給する。
第4のセレクタ186は、仮想ページアドレスレジスタ170に格納されている「4(=000100H)」のLSBの値「0」と、仮想カウント値レジスタ180に格納されている「16(=010000H)」のLSBの値「0」、即ち「00:01以外」に基づき、除算器184の出力値である「8(=001000H)」を選択して第6のセレクタ188に供給する。なお、第4のセレクタ186は、仮想ページアドレスレジスタ170の記憶値のLSBの値が「0」で、且つ、仮想カウント値レジスタ180に格納されている仮想カウント値のLSBの値が「1」の場合に、加算器185の出力値を第6のセレクタ188に供給し、それ以外の場合には、除算器184の出力値を第6のセレクタ188に供給する。
第5のセレクタ187は、仮想ページアドレスレジスタ170の記憶値「4(=000100H)」のLSBの値「0」と、仮想カウント値レジスタ180の記憶値「16(=010000H)」のLSBの値「0」とに基づき、除算器184の出力値である「8(=001000H)」を選択して第7のセレクタ189に供給する。なお、第5のセレクタ187は、仮想ページアドレスレジスタ170に記憶されている仮想ページアドレスのLSBが「1」で、且つ、仮想カウント値レジスタ180に記憶されている仮想カウント値のLSBが「1」の場合に、加算器185の出力値を第7のセレクタ189に供給し、それ以外の場合には、除算器184の出力値を第7のセレクタ189に供給する。
第6のセレクタ188は、仮想カウント/実カウント選択レジスタ183の設定値に基づき、第4のセレクタ186から供給される値「8(=001000H)」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理カウント値レジスタ163に供給する。つまり、フラッシュメモリ2Aの物理カウント値は、「8」となる。
第7のセレクタ189は、仮想カウント/実カウント選択レジスタ183の設定値に基づき、第5のセレクタ187から供給される値「8」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理カウント値レジスタ163に供給する。つまり、フラッシュメモリ2Bの物理カウント値は、「8」となる。
次に、仮想カウント値が、奇数の場合の例として、仮想カウント値が17(二進数で表記すると010001H)の場合、即ち、17セクタ分のデータをアクセスする場合の動作について説明する。
この場合、仮想カウント値レジスタ180の記憶値は「17(=010001H)」となり、除算器184の出力は「8(=001000H)」、加算器185の出力は「9(=001001H)」となる。仮想カウント値レジスタ180の記憶値が「17(=010001H)」であるから、そのLSBは、「1」となる。仮想ページアドレスレジスタ170の記憶値が「4(=000100H)」であるとすれば、そのLSBは「0」なので、第4のセレクタ186は、加算器185の出力値である「9」を選択して第6のセレクタ188に供給する。
一方、第5のセレクタ187は、除算器184の出力値である「8(=001000H)」を選択して第7のセレクタ189に供給する。
仮想カウント/実カウント選択レジスタ183には、仮想カウント値により特定することを選択する値が設定されているため、第6のセレクタ188は、第4のセレクタ186から供給される値「9」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理カウント値レジスタ163に供給する。つまり、フラッシュメモリ2Aの物理カウント値は、「9」に設定される。
一方、第7のセレクタ189は、第5のカウンタ187から供給される値「8」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理カウント値レジスタ163に供給する。つまり、フラッシュメモリ2Bの物理カウント値は、「8」に設定される。
次に、仮想スタートページが奇数ページある場合の例として、仮想スタートページアドレスが3(下位6ビットを2進数表示すると、000011H)のときの仮想スタートページアドレスから物理スタートページアドレスへの変換処理について説明する。
なお、以下の説明では、仮想ページ/実ページ選択レジスタ173には、アクセス対象データのスタートページアドレスを、仮想ページアドレスに基づいて特定することを選択する値が設定されているものとする。
また、仮想カウント/実カウント選択レジスタ183には、カウント値を、仮想カウント値に基づいて特定することを選択する値が設定されているものとする。
仮想スタートページアドレスは、アドレス変換ブロック17により、フラッシュメモリ2A及び2Bのそれぞれにおける物理スタートページアドレスへと変換される。
ホストシステム4から供給される論理アドレスの下位6ビットに対応する仮想スタートページアドレス「3(=000011H)」は、仮想ページアドレスレジスタ170に設定される。この場合のように、仮想ページアドレスレジスタ170に奇数の仮想スタートページアドレスが設定された場合、そのLSBの「1」が、第1のセレクタ176に供給される。また、仮想ページアドレスレジスタ170は、設定値「3(=000011H)」を除算器174に供給する。
除算器174は、仮想ページアドレスレジスタ170から供給される値「3(=000011H)」を2で除算して得られる値「1(=000001H)」を、加算器175と、第1のセレクタ176と、第3のセレクタ178とに供給する。
加算器175は、除算器174から供給される値「1(=000001H)」に1を加算して得られる値「2(=000010H)」を、第1のセレクタ176に供給する。
第1のセレクタ176は、仮想ページアドレスレジスタ170の記憶している値「3(=000011H)」のLSBの値「1」に基づき、加算器175の出力値である「2(=000010H)」を選択して第2のセレクタ177に供給する。
第2のセレクタ177は、仮想ページ/実ページ選択レジスタ173の設定値に基づき、第1のセレクタ176から供給される値「2」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理ページアドレスレジスタ162に供給する。つまり、フラッシュメモリ2Aのスタートページは、「2」ページ目となる。
第3のセレクタ178は、仮想ページ/実ページ選択レジスタ173の設定値に基づき、除算器174から供給される値「1」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理ページアドレスレジスタ162に供給する。つまり、フラッシュメモリ2Bのスタートページは、「1」ページ目となる。
仮想カウント値は、カウント値変換ブロック18により、フラッシュメモリ2A及び2Bのそれぞれにおける物理カウント値へと変換される。
ここで、仮想カウント値が「16(2進数で表現すると010000H)」の場合、仮想カウント値レジスタ180は、LSBの「0」を、第4のセレクタ186と、第5のセレクタ187とに供給する。また、仮想カウント値レジスタ180は、設定値「16」を除算器184に供給する。
除算器184は、仮想カウント値レジスタ180から供給される値「16」を2で除算して得られる値「8」を、加算器185と、第4のセレクタ186と、第5のセレクタ187とに供給する。
加算器185は、除算器184から供給される値「8」に1を加算して得られる値「9」を、第4のセレクタ186と、第5のセレクタ187とに供給する。
第4のセレクタ186は、仮想ページアドレスレジスタ170の記憶値「3(=000011H)」のLSBの値「1」と、仮想カウント値レジスタ180の記憶値「16(=010000H)」のLSB「0」とに基づき、除算器184の出力値である「8」を選択して第6のセレクタ188に供給する。
第5のセレクタ187は、仮想ページアドレスレジスタ170の記憶値「3(=000011H)」のLSBの値「1」と、仮想カウント値レジスタ180の記憶値「16(=010000H)」のLSBの値「0」とに基づき、除算器184の出力値である「8」を選択して第7のセレクタ189に供給する。
第6のセレクタ188は、仮想カウント/実カウント選択レジスタ183の設定値に基づき、第4のセレクタ186から供給される値「8」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理カウント値レジスタ163に供給する。
第7のセレクタ189は、仮想カウント/実カウント選択レジスタ183の設定値に基づき、第5のセレクタ187から供給される値「8」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理カウント値レジスタ163に供給する。
次に、仮想カウント値が、奇数の場合の例として、仮想カウント値が17(2進数で表現すると010001H)の場合、即ち、アクセス対象のデータ量が17セクタ分の場合について説明する。
この場合、仮想カウント値レジスタ180の記憶値「17(=010001H)」のLSBは「1」となり、仮想ページアドレスレジスタ170の記憶値「3(=000011H)」のLSBの値は「1」となり、選択制御用のデータは「11」となる。このため、第4のセレクタ186は、除算器184の出力値である「8」を選択して第6のセレクタ188に供給する。
一方、第5のセレクタ187は、選択制御データ「11」に従って、加算器185の出力値である「9」を選択して第7のセレクタ189に供給する。
仮想カウント/実カウント選択レジスタ183には、仮想カウント値により特定することを選択する値が設定されているため、第6のセレクタ188は、第4のセレクタ186から供給される値「8」を選択して、フラッシュメモリシーケンサブロック16Aが有する物理カウント値レジスタ163に供給する。
一方、第7のセレクタ189は、第5のセレクタ187から供給される値「9」を選択して、フラッシュメモリシーケンサブロック16Bが有する物理カウント値レジスタ163に供給する。
フラッシュメモリシーケンサブロック16Aと16Bとは、フラッシュメモリ2A及び2Bにおけるアクセス対象の物理ページのアドレスを、図7に示すように、それぞれが内蔵する物理ブロックアドレスレジスタ161に格納されている物理ブロックアドレスに、物理ページアドレスレジスタ162に格納されている物理ページアドレスを付加(連結)することにより生成する(ステップS11)。
最初のページの物理アドレス(物理スタートページアドレス)は、物理ブロックアドレスレジスタ161に設定された物理ブロックアドレスの下位側に、物理ページアドレスレジスタ162に当初設定された物理ページアドレスを付加することによって得られる。得られた物理アドレスが、対応するフラッシュメモリ2A又は2Bに供給され、該当する記憶エリアへのアクセスが行われる(ステップS12)。
1ページ分のアクセスが終了すると、物理カウントレジスタ163に設定されている値をデクリメント(−1)し(ステップS13)、「0」になっていなければ(ステップS14;No)、物理ページアドレスレジスタ162の値を更新(+1)して(ステップS15)、物理ブロックアドレスの下位側に付加することによって物理アドレスを生成して(ステップS11)、対応するフラッシュメモリ2A又は2Bに供給する。
以後、同様の動作を繰り返す。
物理カウントレジスタ163に当初設定されたページ分のデータがアクセスされると、物理カウントレジスタ163の値が0となり(ステップS14;Yes)、アクセス処理が終了する。
なお、ページ番号が最終値まで達した場合には、新たな空きブロックの物理ブロックアドレスと物理ページアドレスとが設定される。
以上説明したように、本実施の形態のフラッシュメモリシステム1では、仮想的なアドレス空間におけるスタートページが奇数か偶数かに応じて、アドレス変換ブロック17及びカウント値変換ブロック18が、フラッシュメモリ2Aと2Bのそれぞれにつき、物理スタートページアドレスと物理カウント値とを供給する。その結果、本実施の形態のフラッシュメモリシステム1では、スタートページが奇数か偶数かによらず、フラッシュメモリへの円滑で迅速なアクセスが実現できる。
なお、この発明は上記実施の形態に限定されず、種々の変形及び応用が可能である。例えば、回路ブロック構成や動作フローチャートは任意に変更可能である。さらに、上述した様々な数値は例示であり、任意に変更可能である。
また、物理フラッシュメモリの1つのページのユーザ領域が4セクタに対応する場合であっても、セクタ単位で各フラッシュメモリに仮想ページアドレスを割り当てれば、同様に円滑で迅速なアクセスを実現できる。