(57)【特許請求の範囲】
【請求項１】
ブロック単位で記憶内容を消去するフラッシュ型メモリを備えた記憶装置であって、
自己のブロックの管理情報を記憶する第１の領域と、主情報を記憶する第２の領域とを、各ブロック毎に設け、
隣接する前記ブロックの第１の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行う第１のアドレス変換手段と、
隣接する前記ブロックの第２の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行う第２のアドレス変換手段と、
を備えたことを特徴とする記憶装置。
【請求項２】
ブロック単位で記憶内容を消去するフラッシュ型メモリの管理方法であって、
自己のブロックの管理情報を記憶する第１の領域と、主情報を記憶する第２の領域とを、各ブロック毎に設け、
隣接する前記ブロックの第１の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行うとともに、
隣接する前記ブロックの第２の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行う
ことを特徴とするフラッシュ型メモリの管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、フラッシュ型メモリを備えた記憶装置，フラッシュ型メモリの管理方法にかかり、更に具体的には、フラッシュ型メモリの効率的な管理手法の改良に関するものである。
【０００２】
【背景技術】
一般にフラッシュタイプのフローティングゲートトランジスタを含む電気的に消去可能なプログラマブル読出専用メモリ（ＥＥＰＲＯＭ）は、現在市場で容易に入手できる。これらのいわゆるフラッシュメモリは、機能・性能面でＥＰＲＯＭメモリと類似した不揮発メモリであり、メモリ内で分割されているブロックを消去する回路内プログラマブル動作を可能にするという機能を更に有する。フラッシュメモリでは、以前に書き込まれたブロック領域を前もって消去することで、その内容の書き換えが行われる。
【０００３】
典型的なコンピュータシステムでは、オペレーティングシステム（以下、単に「ＯＳ」という）のプログラムがそのシステムのデータ記憶装置のデータ管理を担う。ＯＳプログラムとの互換性を達成するために必要かつ十分であるデータ記憶装置のアトリビュート（属性）は、データ記憶装置のいかなる位置からもデータを読み出すことができ、これにデータを書き込むことができることである。しかし、フラッシュメモリの場合、データが既に書き込まれている領域には、その領域のデータを消去しなければデータを書き込むことはできない。このため、フラッシュメモリは、典型的な既存のＯＳプログラムとは互換性がない。
【０００４】
このような点に着目し、既存のＯＳプログラムによってフラッシュメモリを管理することを可能にするソフトウエアが先行技術において提案されている。この先行技術のプログラムでは、フラッシュメモリを「書込み１回読出し複数回」の装置として動作させるか、「書込み複数回読出し複数回」の装置として動作させている。前者は、以前に書き込まれているメモリ領域を再利用することはできない装置であり、補助記憶装置や拡張記憶装置として使用できる。後者は、以前に書き込まれているメモリ領域を再利用可能とし、その領域中にはフラッシュメモリの書き換回数を少なくするような制御を持つ補助記憶装置（半導体ファイル記憶装置）がある。
【０００５】
【発明が解決しようとする課題】
上述のような先行技術に見られる装置によれば、フラッシュメモリを使用した拡張記憶装置上では書換回数が少なくなるような制御構造を持たずにＲＯＭエグゼキュータブルなプログラムを動作させている。つまり、フラッシュメモリのデータを書き換えるときは、全ブロックを一括して消去し、その後、データを記憶させる必要がある。また、フラッシュメモリの書換回数を少なくするような制御構造を持つ装置としては補助記憶装置（半導体ファイル記憶装置）があるものの、フラッシュメモリを使用した拡張記憶装置上でプログラムの実行を可能とする装置にはない。補助記憶装置において書換回数を少なくするためにその情報（書換回数テーブル）を異なるメモリ上に記憶する方式があるが、コスト高となる。また、同一フラッシュメモリ上に記憶する方式では、データを完全に連続的な配置できることができない。
【０００６】
この発明は、以上の点に着目したもので、その目的は、フラッシュメモリを使用した拡張記憶装置上で、フラッシュメモリの書換回数を少なくするような制御構造を持つ装置を提供することである。また、他の目的は、主記憶装置にプログラムをロードすることなく、拡張記憶装置上でプログラムの実行を可能とすることである。更に他の目的は、フラッショメモリを使用した補助記憶装置として、書換回数を少なくする制御構造をもちながら、連続的な論理アドレスを不連続な物理アドレスに変換するメモリ管理装置によって、隣接するブロックのデータ領域ブロックを、アクセスのためのオーバヘッドを低減して、高速アクセス可能とすることである。
【０００７】
【課題を解決するための手段】
前記目的を達成するため、本発明は、ブロック単位で記憶内容を消去するフラッシュ型メモリを備えた記憶装置であって、自己のブロックの管理情報を記憶する第１の領域と、主情報を記憶する第２の領域とを、各ブロック毎に設け、隣接する前記ブロックの第１の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行う第１のアドレス変換手段と、隣接する前記ブロックの第２の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行う第２のアドレス変換手段と、を備えたことを特徴とする。
【０００８】
他の発明は、ブロック単位で記憶内容を消去するフラッシュ型メモリの管理方法であって、自己のブロックの管理情報を記憶する第１の領域と、主情報を記憶する第２の領域とを、各ブロック毎に設け、隣接する前記ブロックの第１の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行うとともに、隣接する前記ブロックの第２の領域が連続する論理アドレスとなるように、物理アドレスと論理アドレスの変換を行うことを特徴とする。
【０００９】
この発明の前記及び他の目的，特徴，利点は、以下の詳細な説明及び添付図面から明瞭になろう。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態について詳細に説明する。本発明は、例えば図１に示すように、プロセッサ１０，フラッシュメモリ１２およびその制御装置１４を含む拡張もしくは補助の記憶装置，ＲＡＭ（主記憶装置）１６を含むコンピュータシステムに適用される。フラッシュメモリ１２は、その書換回数を少なくなるようにするために、フラッシュメモリ１２のブロック単位の書換情報（イレース情報）を持つ領域（ヘッダエリア）と、フラッシュメモリ１２上のプログラムやデータを記憶する領域（プログラム・データエリア）を持つ（後述する図４参照）。フラッシュメモリ制御装置１４は、フラッシュメモリ１２へのリード，ライト，チップセレクトなどの信号を生成し、プロセッサ１０からフラッシュメモリ１２をインターフェース（Ｉ／Ｆ）する役割を担う。
【００１１】
ヘッダエリアには、例えばイレースの回数や時刻を記述する。ここで、プロセッサ１０の論理アドレスをフラッシュメモリ１２のブロック数の単位に分割してフラッシュメモリ１２に記憶することができれば、フラッシュメモリ１２の書換回数の低減とフラッシュメモリ１２の管理方法が簡単になる。すなわち、書換えるべきデータが複数のブロックに跨っていると、それら複数のブロックについて書換処理を行わなければならない。しかし、書換えるべきデータが一つのブロック内にあれば、そのブロックのみを書換えればよく、フラッシュメモリ１２の書換回数を低減して管理を簡略化することができる。
【００１２】
そこで、図２に示す装置を用いて、図３に示すメモリマッピングを行う。つまり、ヘッダエリアやプログラム・データエリアを、ブロック数の単位にそれぞれ分割する。そして分割された各エリアを、フラッシュメモリの中に効率よくブロック単位で配置する。すなわち、同時に書換えが必要となる分割ヘッダエリアと分割プログラム・データエリアが、同一のブロックに含まれるように配置する。このような配置は、プロセッサ１０の論理アドレスをフラッシュメモリ１２の物理アドレスに変換するアドレス変換装置２０によって実現する。
【００１３】
図４に、ブロック構造を持つフラッシュメモリ１２のメモリマップの一例を示す。この例は、１ブロックがＬバイトで、かつ全体でｍ＋１ブロックをもつ、Ｌ×（ｍ＋１）バイトを記憶できるフラッシュメモリである。各ブロックを管理するためにフラッシュメモリ１２の書換回数などの情報を持つヘッダエリアとして、Ｐバイト必要であるとすると、全体でＰ×（ｍ＋１）バイトのヘッダエリアが必要である。従って、このシステムは、（Ｌ−Ｐ）×（ｍ＋１）バイトのプログラム・データエリアを持つことになる。
【００１４】
このようなエリア構成のフラッシュメモリ１２に対し、図２に示したアドレス変換装置１８による変換を行う。詳述すると、図５に示すように、プロセッサ１０の論理アドレスでは各ブロックのヘッダエリアを順にブロック０，ブロック１，……，ブロックｍのように連続して配置する。一方、プログラム・データエリアについては、順にブロック０，ブロック１，……，ブロックｍとヘッダエリア部分を抜いて連続した配置とする。これによって、各ブロックのヘッダエリアが、それぞれ連続する論理アドレスで配置されることになる。また同様に、各ブロックのプログラム・データエリアも、それぞれ連続する論理アドレスで配置されることになる。
【００１５】
このようなアドレス配置において、例えばプログラム・データエリアｎに含まれるデータを書き換える必要が生じたとする。プロセッサ１０の論理アドレス上でみると、プログラム・データエリアｎのヘッダエリアが含まれるブロックと、プログラム・データエリアｎに相当するブロックの合計２つのブロックを書き換えなければならない。しかし、フラッシュメモリ１２の物理アドレス上でみると、プログラム・データエリアｎは該当するヘッダエリアとともに同一ブロック内にある。従って、そのブロックのみを書き換えればよい。
【００１６】
このように、本形態によれば、フラッシュメモリの書換回数を低減する高速の管理プログラムがヘッダエリアの情報を読み、実行プログラムやデータの書換えや追記を簡便に実現できる。また、論理アドレス上でプログラム・データエリアのブロック間が連続的に配置しているため、無駄な空きスペースのないデータ構造を持つ拡張記憶装置および補助記憶装置を実現でき、かつフラッシュメモリ上での実行プログラムの動作が可能となる。更に、ヘッダエリアは、自己が管理するブロックの中に記憶されることになるため、ヘッダエリアのための別個のメモリ領域を必要としない。
【００１７】
フラッシュメモリの各ブロックの管理方法を説明すると、最初はすべて、ヘッダエリアには「ＦＦｈ（１６進表示）」が記憶されている。フラッシュメモリは、初期化しなければ拡張記憶装置や補助記憶装置として使用できないため、ブロック０のヘッダエリアに書換回数０回と現時刻を記憶し、同様にブロック１のヘッダエリアに書換回数０回と現時刻を記憶し、……という具合に昇順で最後のブロックまで繰り返し記憶する。
【００１８】
拡張記憶装置や補助記憶装置としてフラッシュメモリを使用するシステムでは、データや実行プログラムは追記させる構造でメモリに記憶させるのが通例である。この追記させる構造では、更新されたデータや実行プログラムは追記されるが、以前のデータや実行プログラムは無効となるような構造を持っている。そして、繰り返しデータや実行プログラムが更新されていくと、無駄なメモリエリアが拡大していく。そこで、フラッシュメモリ上のメモリ領域の再配置を行う必要がある。そのとき、イレースするブロックの候補として、書換回数の少ないブロック優先してイレースする。このとき、書換回数が同じブロックが複数あり、いずれかをイレースする必要があるときは、前回のブロック消去時刻の古い方を優先してイレースする。
【００１９】
実際にブロックを消去するときであるが、そのブロックのヘッダエリアに記憶している以前の書換回数「Ｕ」を一時的に別メモリあるいはレジスタに保持し、その後フラッシュメモリのブロックを消去させるプログラムによって目的とするブロック（ヘッダエリア及びデータ・プログラムエリア）を消去して初期化する。その後すぐに、そのブロックのヘッダエリアに以前の書換回数に「１」インクリメントした値「Ｕ＋１」を書き込み、同時に現時刻も書き込む。そして必要に応じて、データ・プログラムを再配置する。以下、本形態の実施例について説明する。
【００２０】
【実施例１】
図１に示したような、汎用ＣＰＵもしくは汎用マイコンであるプロセッサ１０，、高速にアクセス可能なＲＡＭ１６，フラッシュメモリ１２及びその制御装置１４を含む拡張記憶装置もしくは補助記憶装置をもつようなシステムにおいて、本実施例では、拡張記憶装置もしくは補助記憶装置に使用するフラッシュメモリ１２として、２メガビット×８で合計３２個の６４Ｋバイトのブロックをもつものを搭載したとする。
【００２１】
このフラッシュメモリ１２は、図６に示すような物理アドレスのメモリマップを持つ。各ブロックは、ＯＳプログラム又は制御プログラムが管理するために、１ブロック毎に自己のヘッダエリアを持つ。ヘッダエリアには、その内容として、ブロックの消去回数や消去した時刻などを図７に示すような構造で記録されており、１６バイト分の容量をとる。なお、図７中に示すアドレスは、フラッシュメモリ１２の物理アドレスである。ブロックｎのヘッダエリアに記憶されている内容を参照して、ＯＳプログラム又は制御プログラムがブロックｎの消去や書換えを管理する。
【００２２】
フラッシュメモリ１２の物理アドレスは、プロセッサ１０から見た論理アドレスに変換され、図３もしくは図５に示したように、各ブロックのヘッダエリアや、プログラム・データエリアのブロックが連続するようになる。この論理アドレスと物理アドレスとの変換の計算式の一例を示すと、以下のようになる。なお、数値ｎは、１０進数表記で０から３１までの数字である。このｎを１６進数に変換した数値をＮ（ｈ）とする。物理アドレスの値を「１６進数：［ＰＡ（ｈ）］，ＰＡ［２０：０］」とし、論理アドレスの値を「１６進数：［ＬＡ（ｈ）］，ＬＡ［２０：０］」とし、ブロックＮ（ｈ）を用いて変換式を示すと、以下のようになる。
【００２３】
ＩＦ（００００００ｈ≦ＬＡ（ｈ）≦００ＦＦＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）
ＥＬＳＥ  ＩＦ（００ＦＦＦ０ｈ≦ＬＡ（ｈ）≦０１ＦＦＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１０（ｈ）
ＥＬＳＥ  ＩＦ（００ＦＦＥ０ｈ≦ＬＡ（ｈ）≦０２ＦＦＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋２０（ｈ）
ＥＬＳＥ  ＩＦ（０２ＦＦＤ０ｈ≦ＬＡ（ｈ）≦０３ＦＦＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋３０（ｈ）
ＥＬＳＥ  ＩＦ（０３ＦＦＣ０ｈ≦ＬＡ（ｈ）≦０４ＦＦＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋４０（ｈ）
ＥＬＳＥ  ＩＦ（０４ＦＦＢ０ｈ≦ＬＡ（ｈ）≦０５ＦＦ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋５０（ｈ）
ＥＬＳＥ  ＩＦ（０５ＦＦＡ０ｈ≦ＬＡ（ｈ）≦０６ＦＦ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋６０（ｈ）
ＥＬＳＥ  ＩＦ（０６ＦＦ９０ｈ≦ＬＡ（ｈ）≦０７ＦＦ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋７０（ｈ）
ＥＬＳＥ  ＩＦ（０７ＦＦ８０ｈ≦ＬＡ（ｈ）≦０８ＦＦ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋８０（ｈ）
ＥＬＳＥ  ＩＦ（０８ＦＦ７０ｈ≦ＬＡ（ｈ）≦０９ＦＦ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋９０（ｈ）
ＥＬＳＥ  ＩＦ（０９ＦＦ６０ｈ≦ＬＡ（ｈ）≦０ＡＦＦ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ａ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＡＦＦ５０ｈ≦ＬＡ（ｈ）≦０ＢＦＦ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｂ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＢＦＦ４０ｈ≦ＬＡ（ｈ）≦０ＣＦＦ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｃ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＣＦＦ３０ｈ≦ＬＡ（ｈ）≦０ＤＦＦ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｄ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＤＦＦ２０ｈ≦ＬＡ（ｈ）≦０ＥＦＦ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｅ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＥＦＦ１０ｈ≦ＬＡ（ｈ）≦０ＦＦＥＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｆ０（ｈ）
ＥＬＳＥ  ＩＦ（０ＦＦＦ００ｈ≦ＬＡ（ｈ）≦１０ＦＥＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１００（ｈ）
ＥＬＳＥ  ＩＦ（１０ＦＥＦ０ｈ≦ＬＡ（ｈ）≦１１ＦＥＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１１０Ｆ（ｈ）
ＥＬＳＥ  ＩＦ（１１ＦＥＥ０ｈ≦ＬＡ（ｈ）≦１２ＦＥＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１２０（ｈ）
ＥＬＳＥ  ＩＦ（１２ＦＥＤ０ｈ≦ＬＡ（ｈ）≦１３ＦＥＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１３０（ｈ）
ＥＬＳＥ  ＩＦ（１３ＦＥＣ０ｈ≦ＬＡ（ｈ）≦１４ＦＥＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１４０（ｈ）
ＥＬＳＥ  ＩＦ（１４ＦＥＢ０ｈ≦ＬＡ（ｈ）≦１５ＦＥ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１５０（ｈ）
ＥＬＳＥ  ＩＦ（１５ＦＥＡ０ｈ≦ＬＡ（ｈ）≦１６ＦＥ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１６０（ｈ）
ＥＬＳＥ  ＩＦ（１６ＦＥ９０ｈ≦ＬＡ（ｈ）≦１７ＦＥ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１７０（ｈ）
ＥＬＳＥ  ＩＦ（１７ＦＥ８０ｈ≦ＬＡ（ｈ）≦１８ＦＥ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１８０（ｈ）
ＥＬＳＥ  ＩＦ（１８ＦＥ７０ｈ≦ＬＡ（ｈ）≦１９ＦＥ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１９０（ｈ）
ＥＬＳＥ  ＩＦ（１９ＦＥ６０ｈ≦ＬＡ（ｈ）≦１ＡＦＥ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ａ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＡＦＥ５０ｈ≦ＬＡ（ｈ）≦１ＢＦＥ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ｂ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＢＦＥ４０ｈ≦ＬＡ（ｈ）≦１ＣＦＥ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ｃ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＣＦＥ３０ｈ≦ＬＡ（ｈ）≦１ＤＦＥ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ｄ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＤＦＥ２０ｈ≦ＬＡ（ｈ）≦１ＥＦＥ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ｅ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＥＦＥ１０ｈ≦ＬＡ（ｈ）≦１ＦＦＤＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１Ｆ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ００ｈ≦ＬＡ（ｈ）≦１ＦＦＥ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＥＦＥ１０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ１０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＤＦＥ２０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ２０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＣＦＥ３０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ３０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＢＦＥ４０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ４０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＡＦＥ５０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ５０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１９ＦＥ６０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ６０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１８ＦＥ７０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ７０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１７ＦＥ８０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ８０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１６ＦＥ９０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ９０ｈ≦ＬＡ（ｈ）≦１ＦＦＥ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１５ＦＥＡ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＡ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１４ＦＥＢ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＢ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１３ＦＥＣ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＣ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１２ＦＥＤ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＤ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１１ＦＥＥ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＥ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１０ＦＥＦ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥＦ０ｈ≦ＬＡ（ｈ）≦１ＦＦＥＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＦＦＦ００（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ００ｈ≦ＬＡ（ｈ）≦１ＦＦＦ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＥＦＦ１０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ１０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＤＦＦ２０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ２０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＣＦＦ３０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ３０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＢＦＦ４０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ４０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＡＦＦ５０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ５０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−９ＦＦ６０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ６０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−８ＦＦ７０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ７０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−７ＦＦ８０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ８０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−６ＦＦ９０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦ９０ｈ≦ＬＡ（ｈ）≦１ＦＦＦ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−５ＦＦＡ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＡ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−４ＦＦＢ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＢ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−３ＦＦＣ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＣ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−２ＦＦＤ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＤ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＦＦＥ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＥ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＦＦＦ０（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＦＦ０ｈ≦ＬＡ（ｈ）≦１ＦＦＦＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）
【００２４】
一例を示すと、最初の
ＩＦ（００００００ｈ≦ＬＡ（ｈ）≦００ＦＦＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）
は、論理アドレスＬＡ（ｈ）が００００００ｈと００ＦＦＥＦｈの間にあるときに、物理アドレスＰＡ（ｈ）は論理アドレスＬＡ（ｈ）と同じ値であることを意味する。
【００２５】
同様に、
ＥＬＳＥ  ＩＦ（００ＦＦＦ０ｈ≦ＬＡ（ｈ）≦０１ＦＦＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１０（ｈ）
は、論理アドレスＬＡ（ｈ）が００ＦＦＦ０ｈと０１ＦＦＤＦｈの間にあるときに、物理アドレスＰＡ（ｈ）は論理アドレスＬＡ（ｈ）に１０（ｈ）加算した値であることを意味する。以下、同様である。
【００２６】
次に、図２のアドレス変換装置１８を、上述したアドレス変換式を用いてワイヤードロジックで構成し、フラッシュメモリ１２の制御装置１４とともにプロセッサ１０とＩ／Ｆをとる。本実施例のフラッシュメモリ１２のブロック管理方法を説明すると、上述したように、最初に各ブロックのヘッダエリアの初期化（イニシャライズ）を行う。初期化の一例を示すと、次のようになる。
【００２７】
ブロック０のヘッダエリアでは、物理アドレスＰＡ［２０：０］の「００ＦＦＦＤｈ」から「００ＦＦＦＦｈ」にそれぞれ「００ｈ」を書き込み、「００ＦＦＦ６ｈ」から「００ＦＦＦＢｈに」現在の時刻をそれぞれ書き込む。次に、ブロック１のヘッダエリアでは、物理アドレスＰＡ［２０：０］の「０１ＦＦＦＤｈ」から「０１ＦＦＦＦｈ」にそれぞれ「００ｈ」を書き込み、「０１ＦＦＦ６ｈ」から「０１ＦＦＦＢｈ」に現在の時刻をそれぞれ書き込む。…………そして、昇順ブロックｘｘｈのヘッダエリアでは、物理アドレスＰＡ［２０：０］の「ｘｘＦＦＦＤｈ」から「ｘｘＦＦＦＦｈ」にそれぞれ「００ｈ」を書き込み、「ｘｘＦＦＦ６ｈ」から「ｘｘＦＦＦＢｈ」に現在の時刻をそれぞれ書き込む。…………最終ブロック１Ｆｈのヘッダエリアでは、物理アドレスＰＡ［２０：０］の「１ＦＦＦＦＤｈ」から「１ＦＦＦＦＦｈ」にそれぞれ「００ｈ」を書き込み、「１ＦＦＦＦ６ｈ」から「１ＦＦＦＦＢｈ」に現在の時刻をそれぞれ書き込んで初期化を終了する。
【００２８】
拡張記憶装置あるいは補助記憶装置としてフラッシュメモリを用いた本システムでは、データや実行プログラムなどは追記する手法で新たに更新していくことになる。この手法自体は従来の手法と同様である。しかし、データや実行プログラムの更新を繰り返す度に、不要なメモリエリアが拡大していく。そこで、データや実行プログラムの更新により不要となったデータ・実行プログラムやメモリフラグメンテーションを削除するために、メモリデータの再配置（デフラグメンテーション）を行い、不要なメモリエリアの縮小と再利用エリアの拡大を図るようにする。このとき、イレースするブロックの候補として、上述したように書換回数の少ない方のブロックを優先して消去する。もし、書換回数が同じで２つ以上の候補があるときは、その候補の以前の消去時刻の古いブロックを優先してイレースすることにする。この処理は、デフラグメンテーションプログラムにより、プロセッサ１０がフラッシュメモリ制御装置１４を介して行う。
【００２９】
具体的には、優先的に選ばれたブロックのヘッダエリアに記憶されている書換回数「Ｖ」を他のメモリあるいはレジスタに記憶し、そして次に該当ブロックをイレースするためのプログラム（イレースシーケンスルーチン）の実行に移る。このプログラムが終了後、そのブロックはイレースされたことになる。そして直ちに、ヘッダエリアの更新を行う。すなわち、書換回数を以前の回数に１インクリメントした値「Ｖ＋１」として新たに書き込み、更に現在の時刻を書き込む。この作業の終了後、通常のデータなどの追記や読み出しができる状態に戻す。
【００３０】
【実施例２】
この実施例２では、拡張記憶装置もしくは補助記憶装置に使用するフラッシュメモリ１２として、１メガビット×１６で合計３２個の３２キロワードのブロックをもつものを搭載したシステム構成となっている。このフラッシュメモリは、図８に示すような物理アドレスのメモリマップを持つ。前記実施例と同様に、各ブロックは、ＯＳプログラム又は制御プログラムが管理するために、１ブロック毎に自己のヘッダエリアを持つ。その内容であるブロックの消去回数や消去した時刻などは、図９に示すような構造で８ワード分をとる。なお、図９中に示すアドレスは、フラッシュメモリ１２の物理アドレスである。ブロックｎのヘッダエリアに記憶されている内容を参照して、ＯＳプログラム又は制御プログラムがブロックｎのブロック消去や書き換えを管理する。この管理方法は、前記実施例１と同様の手法で対応できる。
【００３１】
次に、各ブロックのヘッダエリアやプログラム・データエリアのブロックが連続するように、アドレス変換を行う。この論理アドレスから物理アドレスへのアドレス変換の計算式の一例を示すと、以下のようになる。なお、数値ｎ，数値Ｎ（ｈ），物理アドレスの値［ＰＡ（ｈ）］，ＰＡ［２０：１］，論理アドレスの値［ＬＡ（ｈ）］，ＬＡ［２０：１］は、前記実施例と同様である。
【００３２】
ＩＦ（０００００ｈ≦ＬＡ（ｈ）≦０７ＦＦ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）
ＥＬＳＥ  ＩＦ（０７ＦＦ８ｈ≦ＬＡ（ｈ）≦０ＦＦＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋８（ｈ）
ＥＬＳＥ  ＩＦ（０ＦＦＦ０ｈ≦ＬＡ（ｈ）≦１７ＦＥ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１０（ｈ）
ＥＬＳＥ  ＩＦ（１７ＦＥ８ｈ≦ＬＡ（ｈ）≦１ＦＦＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋１８（ｈ）
ＥＬＳＥ  ＩＦ（１ＦＦＥ０ｈ≦ＬＡ（ｈ）≦２７ＦＤ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋２０（ｈ）
ＥＬＳＥ  ＩＦ（２７ＦＤ８ｈ≦ＬＡ（ｈ）≦２ＦＦＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋２８（ｈ）
ＥＬＳＥ  ＩＦ（２ＦＦＤ０ｈ≦ＬＡ（ｈ）≦３７ＦＣ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋３０（ｈ）
ＥＬＳＥ  ＩＦ（３７ＦＣ８ｈ≦ＬＡ（ｈ）≦３ＦＦＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋３８（ｈ）
ＥＬＳＥ  ＩＦ（３ＦＦＣ０ｈ≦ＬＡ（ｈ）≦４７ＦＢ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋４０（ｈ）
ＥＬＳＥ  ＩＦ（４７ＦＢ８ｈ≦ＬＡ（ｈ）≦４ＦＦＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋４８（ｈ）
ＥＬＳＥ  ＩＦ（４ＦＦＢ０ｈ≦ＬＡ（ｈ）≦５７ＦＡ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋５０（ｈ）
ＥＬＳＥ  ＩＦ（５７ＦＡ８ｈ≦ＬＡ（ｈ）≦５ＦＦ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋５８（ｈ）
ＥＬＳＥ  ＩＦ（５ＦＦＡ０ｈ≦ＬＡ（ｈ）≦６７Ｆ９７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋６０（ｈ）
ＥＬＳＥ  ＩＦ（６７Ｆ９８ｈ≦ＬＡ（ｈ）≦６ＦＦ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋６８（ｈ）
ＥＬＳＥ  ＩＦ（６ＦＦ９０ｈ≦ＬＡ（ｈ）≦７７Ｆ８７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋７０（ｈ）
ＥＬＳＥ  ＩＦ（７７Ｆ８８ｈ≦ＬＡ（ｈ）≦７ＦＦ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋７８（ｈ）
ＥＬＳＥ  ＩＦ（７ＦＦ８０ｈ≦ＬＡ（ｈ）≦８７Ｆ７７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋８０（ｈ）
ＥＬＳＥ  ＩＦ（８７Ｆ７８ｈ≦ＬＡ（ｈ）≦８ＦＦ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋８８（ｈ）
ＥＬＳＥ  ＩＦ（８ＦＦ７０ｈ≦ＬＡ（ｈ）≦９７Ｆ６７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋９０（ｈ）
ＥＬＳＥ  ＩＦ（９７Ｆ６８ｈ≦ＬＡ（ｈ）≦９ＦＦ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋９８（ｈ）
ＥＬＳＥ  ＩＦ（９ＦＦ６０ｈ≦ＬＡ（ｈ）≦Ａ７Ｆ５７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ａ０（ｈ）
ＥＬＳＥ  ＩＦ（Ａ７Ｆ５８ｈ≦ＬＡ（ｈ）≦ＡＦＦ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ａ８（ｈ）
ＥＬＳＥ  ＩＦ（ＡＦＦ５０ｈ≦ＬＡ（ｈ）≦Ｂ７Ｆ４７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｂ０（ｈ）
ＥＬＳＥ  ＩＦ（Ｂ７Ｆ４８ｈ≦ＬＡ（ｈ）≦ＢＦＦ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｂ８（ｈ）
ＥＬＳＥ  ＩＦ（ＢＦＦ４０ｈ≦ＬＡ（ｈ）≦Ｃ７Ｆ３７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｃ０（ｈ）
ＥＬＳＥ  ＩＦ（Ｃ７Ｆ３８ｈ≦ＬＡ（ｈ）≦ＣＦＦ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｃ８（ｈ）
ＥＬＳＥ  ＩＦ（ＣＦＦ３０ｈ≦ＬＡ（ｈ）≦Ｄ７Ｆ２７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｄ０（ｈ）
ＥＬＳＥ  ＩＦ（Ｄ７Ｆ２８ｈ≦ＬＡ（ｈ）≦ＤＦＦ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｄ８（ｈ）
ＥＬＳＥ  ＩＦ（ＤＦＦ２０ｈ≦ＬＡ（ｈ）≦Ｅ７Ｆ１７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｅ０（ｈ）
ＥＬＳＥ  ＩＦ（Ｅ７Ｆ１８ｈ≦ＬＡ（ｈ）≦ＥＦＦ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｅ８（ｈ）
ＥＬＳＥ  ＩＦ（ＥＦＦ１０ｈ≦ＬＡ（ｈ）≦Ｆ７Ｆ０７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｆ０（ｈ）
ＥＬＳＥ  ＩＦ（Ｆ７Ｆ０８ｈ≦ＬＡ（ｈ）≦ＦＦＥＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）＋Ｆ８（ｈ）
ＥＬＳＥ  ＩＦ（ＦＦＦ００ｈ≦ＬＡ（ｈ）≦ＦＦＦ０７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ｆ７Ｆ０８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ０８ｈ≦ＬＡ（ｈ）≦ＦＦＦ０Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＥＦＦ１０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ１０ｈ≦ＬＡ（ｈ）≦ＦＦＦ１７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ｅ７Ｆ１８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ１８ｈ≦ＬＡ（ｈ）≦ＦＦＦ１Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＤＦＦ２０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ２０ｈ≦ＬＡ（ｈ）≦ＦＦＦ２７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ｄ７Ｆ２８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ２８ｈ≦ＬＡ（ｈ）≦ＦＦＦ２Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＣＦＦ３０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ３０ｈ≦ＬＡ（ｈ）≦ＦＦＦ３７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ｃ７Ｆ３８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ３８ｈ≦ＬＡ（ｈ）≦ＦＦＦ３Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＢＦＦ４０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ４０ｈ≦ＬＡ（ｈ）≦ＦＦＦ４７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ｂ７Ｆ４８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ４８ｈ≦ＬＡ（ｈ）≦ＦＦＦ４Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＡＦＦ５０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ５０ｈ≦ＬＡ（ｈ）≦ＦＦＦ５７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−Ａ７Ｆ５８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ５８ｈ≦ＬＡ（ｈ）≦ＦＦＦ５Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−９ＦＦ６０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ６０ｈ≦ＬＡ（ｈ）≦ＦＦＦ６７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−９７Ｆ６８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ６８ｈ≦ＬＡ（ｈ）≦ＦＦＦ６Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−８ＦＦ７０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ７０ｈ≦ＬＡ（ｈ）≦ＦＦＦ７７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−８７Ｆ７８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ７８ｈ≦ＬＡ（ｈ）≦ＦＦＦ７Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−７ＦＦ８０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ８０ｈ≦ＬＡ（ｈ）≦ＦＦＦ８７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−７７Ｆ８８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ８８ｈ≦ＬＡ（ｈ）≦ＦＦＦ８Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−６ＦＦ９０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ９０ｈ≦ＬＡ（ｈ）≦ＦＦＦ９７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−６７Ｆ９８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦ９８ｈ≦ＬＡ（ｈ）≦ＦＦＦ９Ｆｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−５ＦＦＡ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＡ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＡ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−５７ＦＡ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＡ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＡＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−４ＦＦＢ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＢ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＢ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−４７ＦＢ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＢ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＢＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−３ＦＦＣ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＣ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＣ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−３７ＦＣ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＣ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＣＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−２ＦＦＤ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＤ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＤ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−２７ＦＤ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＤ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＤＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１ＦＦＥ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＥ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＥ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−１７ＦＥ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＥ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＥＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−ＦＦＦ０ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＦ０ｈ≦ＬＡ（ｈ）≦ＦＦＦＦ７ｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）−７ＦＦ８ｈ
ＥＬＳＥ  ＩＦ（ＦＦＦＦ８ｈ≦ＬＡ（ｈ）≦ＦＦＦＦＦｈ）
ＰＡ（ｈ）＝ＬＡ（ｈ）
【００３３】
次に、図２のアドレス変換装置１８を、上述したアドレス変換式を用いてワイヤードロジックで構成し、フラッシュメモリ１２の制御装置１４とともにプロセッサ１０とＩ／Ｆをとる。このようにして、前記実施例と同様に、ヘッダエリアにおける書換えの管理・制御とプログラム・データエリアのブロック間を連続化するアドレスマップへの変換が可能となる。
【００３４】
【他の実施例】
この発明には数多くの実施の形態があり、以上の開示に基づいて多様に改変することが可能である。例えば、次のようなものも含まれる。
（１）前記実施例１，２では、ハードロジックによってアドレス変換装置を実現したが、アドレス変換用のＲＯＭを使用し、テーブル参照方式によって論理アドレスから物理アドレスへのアドレス変換を行うようにしてもよい。すなわち、論理アドレスをＲＯＭのアドレス側に供給し、物理アドレスをＲＯＭのデータ側から出力する。ＲＯＭのチップイネーブルやアウトプットイネーブルはアサートしたままにして、アドレスコントロールとする。このＲＯＭに、前記実施例で示したようなアドレス変換式を展開したテーブルを記憶すればよい。
【００３５】
（２）前記形態はフラッシュメモリに本発明を適用したものであるが、他の類似するメモリがフラッシュメモリと同じ書込み，読出し機能を備えており、かつ、書込前ブロック消去特性を有するメモリであれば、同様に適用可能である。
（３）前記実施例は、バイト単位やワード（１６ビットや３２ビット）単位による操作の場合であるが、他のデータ単位であっても、同様に適用可能である。
【００３６】
【発明の効果】
以上説明したように、本発明によれば、次のような効果がある。
（１）対応するヘッダエリアとプログラム・データエリアが、メモリの同一ブロック内となるようにアドレス変換を行うので、ブロックの書換回数を低減して、高速のアクセスが可能となる。また、ヘッダエリア用のメモリを必要とせず、コストの削減を可能にする。
（２）アドレス変換によって、プロセッサ側からみたときにプログラム・データエリアのブロックが連続するようになり、メモリ領域の無駄を省くとともに、主記憶装置に実行プログラムをロードすることなく、拡張記憶装置もしくは補助記憶装置上でプログラムの実行が可能となる。
【図面の簡単な説明】
【図１】本発明を利用したシステムの一例のブロック図である。
【図２】本発明の一形態の主要部を示すブロック図である。
【図３】論理アドレスから物理アドレスにアドレス変換するための、メモリマッピングの手法を示す概念図である。
【図４】ブロック消去機能をもつ汎用のフラッシュメモリにおける物理アドレスのメモリマッピングと、ヘッダエリア及びプログラム・データエリアの関係を示す図である。
【図５】フラッシュメモリの物理アドレスとプロセッサの論理アドレスの関係を示す図である。
【図６】実施例１におけるフラッシュメモリのメモリマップを示す図である。
【図７】実施例１におけるフラッシュメモリのブロックｎにおける詳細な構造のメモリマップを示す図である。
【図８】実施例２におけるフラッシュメモリのメモリマップを示す図である。
【図９】実施例２におけるフラッシュメモリのブロックｎにおける詳細な構造のメモリマップを示す図である。
【符号の説明】
１０…プロセッサ
１２…フラッシュメモリ
１４…フラッシュメモリ制御装置
１６…ＲＡＭ
１８…アドレス変換装置
【図１】
0003552490.tif 000002
【図２】
0003552490.tif 000003
【図３】
0003552490.tif 000004
【図４】
0003552490.tif 000005
【図５】
0003552490.tif 000006
【図６】
0003552490.tif 000007
【図７】
0003552490.tif 000008
【図８】
0003552490.tif 000009
【図９】
0003552490.tif 000010