(57)【要約】【課題】本発明は、少なくとも２種類以上のデータ長のデータに対して冗長データを付加し、誤り訂正を行なうメモリ制御装置において、メモリを最大限有効に使用することを目的としている。【解決手段】上記課題は、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイス２００と、該誤り訂正データを読み出して誤り訂正を行なうメモリコントローラ２０と、前記誤り訂正データは前記メモリデバイス２００からデータと冗長データを連続的に読み出す手段を有することによりなされる。【選択図】図１
2012174088.tif 000002
【特許請求の範囲】
【請求項１】
メモリ制御装置であって、
少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該誤り訂正データを読み出して誤り訂正を行なうメモリコントローラを有し、
前記誤り訂正データは前記メモリデバイスからデータと冗長データを連続的に読み出すことを特徴とするメモリ制御装置。
【請求項２】
メモリ制御装置であって、
少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、
該メモリコントローラは、前記少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、前記メモリデバイスに書き込みを行ない、
また、前記メモリコントローラは、前記誤り訂正データを前記メモリデバイスから読み出して誤り訂正を行なうものであって、
前記メモリデバイスに対して書き込み、あるいは読み出しを行なう誤り訂正データは、データと冗長データが連続的に転送されることを特徴とするメモリ制御装置。
【請求項３】
メモリ制御装置であって、
少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、
該メモリコントローラは、前記少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、また、前記メモリコントローラは、前記誤り訂正データを前記メモリデバイスから読み出して誤り訂正を行なうものであって、
前記アドレス空間を分割するための情報を指定するレジスタがあることを特徴とするメモリ制御装置。
【請求項４】
請求項３に記載のメモリ制御装置であって、
前記アドレス空間を分割するための情報を指定するレジスタは、アドレス空間を示す先頭アドレスと、アドレス空間を示す空間サイズと、前記少なくとも２種類以上のデータ長を示す情報があることを特徴とするメモリ制御装置。
【請求項５】
メモリ制御装置であって、
複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうとともに、前記メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、前記冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを制御するメモリコントローラとを含む
ことを特徴とするメモリ制御装置。
【請求項６】
請求項５に記載のメモリ制御装置において、
前記メモリデバイスの第１の空間には冗長なデータを当該空間内の別領域に格納しており、
前記メモリコントローラは、先頭アドレスが第１の空間である場合に、冗長なデータを当該空間内の別領域に格納する予め決められたデータ長の誤り訂正タイプであると判断し、
前記データ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、その後冗長データ領域にそれまでに求めた冗長データを書き込みあるいは読み出しエラー訂正を実行する
ことを特徴とするメモリ制御装置。
【請求項７】
請求項５に記載のメモリ制御装置において、
前記メモリデバイスの第２の空間には２のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納されており、
前記メモリコントローラは、先頭アドレスが第２の空間である場合に、２のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、一度のデータアクセス単位長での処理により、２のべき乗の長さの前記データと、これに付加する冗長なデータが得られない場合には、再度データアクセス単位長での処理を実行する
ことを特徴とするメモリ制御装置。
【請求項８】
請求項５に記載のメモリ制御装置において、
前記メモリデバイスの第３の空間には２のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納されており、
前記メモリコントローラは、先頭アドレスが第３の空間である場合に、２のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、データアクセス単位長での処理を実行する
ことを特徴とするメモリ制御装置。
【請求項９】
メモリ制御装置であって、
複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に連続して格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうとともに、前記メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、前記冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御するメモリコントローラとを含み、
前記メモリデバイスは、冗長なデータを当該空間内の別領域に格納する第１の空間と、２のべき乗の長さの前記データとこれに付加する冗長なデータが連続して格納された第２の空間と、２のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された第３の空間のうち、２つ以上の空間を備えている
ことを特徴とするメモリ制御装置。
【請求項１０】
請求項９に記載のメモリ制御装置において、
前記メモリコントローラは、第１の空間の処理のときにこの空間でのデータ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、第２の空間の処理のときに前記データアクセス単位長での書き込みあるいは、読み出しを実行し、第３の空間の処理のときに、必要に応じてデータアクセス単位長での書き込みあるいは、読み出しを再実行し、前記誤り訂正タイプに応じて書き込みと読み出しを変更して制御する
ことを特徴とするメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御装置に関する。
【背景技術】
【０００２】
メモリデバイス上の記憶素子はα線、宇宙線等によりデータが反転してしまうことがある。この記憶素子上にあるプログラムや、格納されているデータに反転が生じると、システムに障害が発生する可能性がある。
【０００３】
システムをこのような障害から守る方式として、記憶するデータに冗長なデータを付加し、誤り訂正符号で誤りを訂正する方式がある。この方式を用いて高信頼なシステムを構築しようとすると、冗長なデータを記憶する記憶素子が必要となる。２のべき乗の記憶素子からなるメモリデバイスで、２のべき乗のデータに冗長なデータを付加すると、別にその分の情報を記憶させるメモリデバイスが必要となりコストがアップする。
【０００４】
この点に関し、例えば特許文献１には、３２ビットのデータに、７ビットの冗長なデータを付加することで１ビットの誤りを訂正し、２ビットの誤りを検出する半導体メモリ装置の構成が示されている。この方式では、２のべき乗の３２ビットのデータを高信頼に扱うために、３９ビットの情報を記憶する。
【０００５】
特許文献１の方式を１６ビットのデータ幅を持つメモリデバイスを使用して実現する場合、特許文献２にあるように、３個のメモリデバイスで４８ビットのデータ幅とし、そのうち３９ビットをデータ（３２ビット）とその誤り訂正（７ビット）に使用するのが簡単であるが、残り９ビットのデータは使用することが無く、無駄になってしまう。
【０００６】
また、特許文献３には、１２０ビットのデータに、８ビットの冗長なデータを付加することで１ビットの誤りを訂正する誤り訂正方式が示されている。この方式では、１２０ビットのデータを高信頼に扱う場合、１２８ビットの情報を記憶すれば良い。この２のべき乗である１２８ビットの情報を記憶する場合は、メモリデバイスを有効に利用できるが、反面において、一般的なプロセッサの演算装置は３２ビットのような２のべき乗のデータを扱うことから、そのようなプロセッサでは効率良くメモリをアクセスすることができない。
【０００７】
例えば、特許文献４に開示してある記憶装置においては、ホスト計算機からの５１２バイトのセクターデータ、マイクロプロセッサのプログラムやデータである４バイトデータなど、各種管理テーブルには、さまざまなデータ長のデータが半導体メモリに格納される。ここで、５１２バイトのデータと、４バイトのデータに対して、１ビットの誤り訂正、２ビットの誤り検出を可能にするためには、それぞれ１４ビットと７ビットの冗長なデータを付加する必要がある。冗長分の効率だけを考えた場合、５１２バイトのデータを扱う方が良いが、４バイトを書き込んだり、読み出したりする時、５１２バイト単位に行うのは不合理である。
【０００８】
また、特許文献５には、不揮発メモリの一部の記憶領域をソフトウェアＥＣＣ処理の対象にするデータ処理方法が示されている。フラッシュメモリ等の不揮発メモリは、書き換え回数が増えるごとに誤りの発生する確率が増加する。書き換え回数が多い記憶領域や、重要なデータが格納されている記憶領域だけをソフトウェアＥＣＣ処理の対象とすることで、それ以外の領域の無駄を省けることが示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平６−２５０９３５号公報
【特許文献２】特開２０１０−０８６１２０号公報
【特許文献３】特開２００１−２４９８５４号公報
【特許文献４】特願２００９−２７５０４８号公報
【特許文献５】特開２００２−９１８３１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明においては、２のべき乗の記憶素子からなるメモリデバイスを用い、誤り訂正符号で誤りを訂正する高信頼なシステムをメモリ効率が最大になるように構築することを大前提としている。
【００１１】
係るメモリ効率最大という観点から、前述の特許文献を検討すると、それぞれ以下のことが言える。
【００１２】
特許文献１ならびに、特許文献２には一般的な４バイトのデータに対する誤り訂正、誤り検出を行なうメモリ制御装置が記されている。仮に１６ビットのメモリデバイスを使用する場合、４バイトのデータに対して３個のメモリデバイスを使用することになるので、４８ビット中の９ビットのデータは無駄になってしまう。また、メモリデバイスの容量に関係なく３個のメモリデバイスが必要であり、必要なメモリ容量が少ない場合には無駄が大きくなる。
【００１３】
特許文献３には、１２０ビットのデータに、８ビットの冗長なデータを付加し１２８ビットの情報を記憶する効率の良い方法が記されている。しかし、１２０ビット単位にデータを扱う場合は良いが、それ以外では効率良くメモリをアクセスすることができない。例えば、３２ビットのデータは１２０ビットとして扱われ、１２８ビットのデータとして格納される。
【００１４】
特許文献５には、不揮発メモリの一部の記憶領域をデータの重要度に応じて誤り訂正するデータ処理方法が示されている。プログラムにより誤り訂正のための冗長なデータを生成し付加するので、誤り訂正しないデータには冗長なデータを付加しなくて良く、無駄を省くことができる。ここでは、データの重要度、書き換え保証回数により誤り訂正能力を選択することが記されているが、さまざまなデータ長のデータに対してメモリデバイスの使用効率を最大にすることは考慮していない。
【００１５】
以上の特許文献の方式には、メモリ効率最大という観点からみると一長一短があるが、実際のメモリデバイスにおいては、特許文献４にあるように、ホスト計算機からのセクターデータ（５１２バイト）、マイクロプロセッサのプログラムやデータである４バイトデータなど、各種管理テーブルに格納されるさまざまなデータ長のデータを取り扱うことが多い。
【００１６】
本発明では、係る使用の場面においても効率良くメモリデバイス上に割り付け、ハードウェアで高速にアクセスするメモリ制御装置を提供することを目的としている。
【課題を解決するための手段】
【００１７】
上記課題を解決するために、本発明のメモリ制御装置は、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、誤り訂正データを読み出して誤り訂正を行なうメモリコントローラを有し、誤り訂正データはメモリデバイスからデータと冗長データを連続的に読み出す。
【００１８】
また、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、メモリコントローラは、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、メモリデバイスに書き込みを行ない、メモリコントローラは、誤り訂正データをメモリデバイスから読み出して誤り訂正を行なうものであって、メモリデバイスに対して書き込み、あるいは読み出しを行なう誤り訂正データは、データと冗長データが連続的に転送する。
【００１９】
上記課題を解決するために、本発明のメモリ制御装置は、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、メモリコントローラは、少なくとも２種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、メモリコントローラは、誤り訂正データをメモリデバイスから読み出して誤り訂正を行なうものであって、アドレス空間を分割するための情報を指定するレジスタがある。
【００２０】
また、アドレス空間を分割するための情報を指定するレジスタは、アドレス空間を示す先頭アドレスと、アドレス空間を示す空間サイズと、少なくとも２種類以上のデータ長を示す情報がある。
【００２１】
上記課題を解決するために、本発明のメモリ制御装置は、複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうとともに、メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを制御するメモリコントローラとを含む。
【００２２】
また、メモリデバイスの第１の空間には冗長なデータを当該空間内の別領域に格納しており、メモリコントローラは、先頭アドレスが第１の空間である場合に、冗長なデータを当該空間内の別領域に格納する予め決められたデータ長の誤り訂正タイプであると判断し、データ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し実行する。
【００２３】
また、メモリデバイスの第２の空間には２のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納されており、メモリコントローラは、先頭アドレスが第２の空間である場合に、２のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、一度のデータアクセス単位長での処理により、２のべき乗の長さのデータと、これに付加する冗長なデータが得られない場合には、再度データアクセス単位長での処理を実行する。
【００２４】
また、メモリデバイスの第３の空間には２のべき乗の長さの範囲内にデータとこれに付加する冗長なデータが連続して格納されており、メモリコントローラは、先頭アドレスが第３の空間である場合に、２のべき乗の長さの範囲内にデータとこれに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、データアクセス単位長での処理を実行する。
【００２５】
上記課題を解決するために、本発明のメモリ制御装置は、複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に連続して格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうとともに、メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御するメモリコントローラとを含み、メモリデバイスは、冗長なデータを当該空間内の別領域に格納する第１の空間と、２のべき乗の長さの前記データとこれに付加する冗長なデータが連続して格納された第２の空間と、２のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された第３の空間のうち、２つ以上の空間を備えている。
【００２６】
また、メモリコントローラは、第１の空間の処理のときにこの空間でのデータ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、第２の空間の処理のときにデータアクセス単位長での書き込みあるいは、読み出しを実行し、第３の空間の処理のときに、必要に応じてデータアクセス単位長での書き込みあるいは、読み出しを再実行し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御する。
【発明の効果】
【００２７】
本発明によれば、５１２バイトや４バイトのような、さまざまなデータ長で誤り訂正するデータを効率良くメモリデバイス上に割り付け、ハードウェアで高速にアクセスするメモリ制御装置を提供することができる。
【００２８】
さらに本発明の実施例によれば、システムの仕様によりデータの割り付けを最適にできるようなメモリ制御装置を提供することができる。
【００２９】
また本発明の実施例によれば、メモリデバイスが、連続した記憶素子の一部を連続的に外部ピンに入出力するものであるとき、高性能にメモリ制御装置を提供することができる。
【００３０】
以上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００３１】
【図１】メモリ制御装置１の構成を示す図。
【図２】メモリ制御回路１００の構成を示す図。
【図３】メモリデバイス２００のインタフェースを説明する図。
【図４】データ制御部の動作を示す図。
【図５】４バイトデータのメモリアクセスの例を示す図。
【図６】８バイトデータのメモリアクセスの例を示す図。
【図７】２６ビットデータのメモリアクセスの例を示す図。
【図８】５１２バイトデータのメモリアクセスの例を示す図。
【図９】シンドロームの生成方法を示す図。
【図１０】シンドロームを生成する回路を示す図。
【発明を実施するための形態】
【００３２】
以下、本発明の実施例を、図面を用いて説明する。
【実施例】
【００３３】
本実施例では、メモリデバイスを４つの領域に分割したメモリ制御装置１の例を説明する。
【００３４】
図１は、本実施例のメモリ制御装置１の構成例を示している。メモリ制御装置１は、マイコン１０、メモリコントローラ２０、ＳＣＳＩ（ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）コネクタ３０、メモリデバイス２００から構成される。
【００３５】
マイコン１０は、メモリ制御装置１を所定のプログラムに従って制御するプロセッサである。所定のプログラムは、マイコン１０内部のＲＯＭ（図示せず）に書き込まれている。マイコン１０は、メモリコントローラ２０を介してメモリデバイス２００や、メモリコントローラ２０の内部レジスタにアクセスすることができる。
【００３６】
メモリコントローラ２０は、メモリ制御回路１００と、例えば３組のリクエスタから構成される。３組のリクエスタは、５１２Ｂ（バイト）単位リクエスタ３００、４Ｂ単位リクエスタ４００、２６ビット単位リクエスタ５００である。
【００３７】
ＳＣＳＩコネクタ３０は、ホスト計算機（図示せず）と接続し、ホスト計算機からのコマンド、データのやり取りをするポートである。ホスト計算機からは、ＳＣＳＩコネクタ３０を介して５１２バイトのデータが書き込まれ、あるいは読みだされる。
【００３８】
ホスト計算機から、５１２バイトのデータが書き込まれるときは、信号線Ｌ１を介して５１２Ｂ単位リクエスタ３００が一旦５１２バイトのデータを受け取り、そのデータが正しいか確認する。それから信号線Ｌ２、メモリ制御回路１００を介してメモリデバイス２００に書き込みを行なう。ホスト計算機から５１２バイトのデータの読み出しを行なう場合には、メモリ制御回路１００、信号線Ｌ２を介して５１２バイトのデータを読み出し、一旦５１２Ｂ単位リクエスタ３００に格納し、誤りがある場合には格納されているデータを訂正し、信号線Ｌ１、ＳＣＳＩコネクタ３０を介してホスト計算機に出力する。
【００３９】
４Ｂ単位リクエスタ４００は、マイコン１０からのメモリデバイス２００に対する書き込み、読み出しを制御する。４バイトの書き込みでは、４Ｂ単位リクエスタ４００は、マイコン１０から信号線Ｌ３を介して書き込むデータを受け取り、信号線Ｌ４を介してメモリ制御回路１００に書き込みの要求を出力する。また、４バイトの読み出しでは、４Ｂ単位リクエスタ４００は、信号線Ｌ４を介してメモリ制御回路１００に読み出し要求を出し、読み出したデータを信号線Ｌ３経由でマイコン１０に出力する。
【００４０】
２６ビット単位リクエスタ５００は、メモリデバイス２００上に定義するアクセス単位が２６ビットのデータに対してマイコン１０からの書き込み、読み出しを制御する。この場合、信号線Ｌ５、Ｌ６が使用される。
【００４１】
このように、メモリ制御回路１００は５１２Ｂ単位リクエスタ３００、４Ｂ単位リクエスタ４００、２６ビット単位リクエスタ５００からの書き込み、読み出し要求を受け取り、それぞれに対応するエラー訂正を行なってメモリデバイス２００に対して制御信号を生成する。なお、メモリ制御回路１００とマイコン１０は、メモリ制御回路内のアドレスレジスタ１１０をアクセスするため信号線Ｌ７により直接接続されている。
【００４２】
メモリデバイス２００は、２のべき乗のデータを入出力する信号線Ｌ８（例えば１６ビット）でメモリコントローラ２０と接続されている。本実施例では、メモリデバイス２００は一般的なダイナミックメモリを想定しており、メモリの記憶素子を２次元状に配置し、行アドレスで読み出した連続するデータから列アドレスで指定されたデータを対象に書き込み、あるいは読み出しするものである。当然、一般的なＲＡＭを用いても問題ない。
【００４３】
メモリデバイス２００は、例えば４個の空間（図１メモリマップ太枠内）に分けてアクセスされる。各空間では、データと冗長データを、領域を分けて格納する場合と、データと冗長データを連続するデータとして扱う場合とがある。図１では、５１２Ｂ単位データと４Ｂ単位データが、領域を分けて格納する場合を示しており、それ以外は連続するデータとして扱う場合を示している。なお、４Ｂ単位データは、連続するデータとして扱い、格納領域を分割しない方式とすることもできる。
【００４４】
領域２１０は、５１２バイト単位のデータを書き込み、あるいは読み出す空間である。領域２１０に対して、通常５１２Ｂ単位リクエスタ３００からの要求で５１２バイト単位の書き込み、あるいは読み出しが行われ、その５１２バイトの冗長データを領域２１１に格納、あるいは読み出して訂正する。領域２１０と領域２１１により、４個の空間のうちの１つの空間を形成する。この空間は５１２バイト単位のデータのための空間である。
【００４５】
領域２１２は、４バイト単位のデータの書き込み、あるいは読み出す空間である。領域２１３は、領域２１２の４バイトデータに対する冗長データを格納する空間である。但し、本実施例では冗長データは領域２１３に配置するのではなく、領域２１２の先頭から４バイトのデータに１バイトの冗長データを付加したものを領域２１３の最後まで配置したものとなる。領域２１２と領域２１３により、４個の空間のうちの２つ目の空間を形成する。この空間は４バイト単位のデータのための空間である。
【００４６】
領域２１４は、２６ビット単位のデータに６ビットの冗長データを付加し、４バイト単位にしてメモリに配置した空間である。これが３つ目の空間である。
【００４７】
領域２１５は、３２ビットの誤り訂正を行なわない、冗長データの無い書き込み、あるいは読み出しを行なう空間である。ここでは、マイコン１０とメモリ制御回路１００を直接接続した信号線Ｌ７を介してマイコン１０から読み出し、あるいは書き込みを行なうものとする。これが４つ目の空間である。
【００４８】
これら４個の空間は、メモリ制御回路１００内に配置するアドレスレジスタ１１０によって定義できる。ここでは、４個の空間の先頭アドレスが、ＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４と定義されている。
【００４９】
ところで、本実施例のメモリ制御装置１は、ＳＣＳＩインタフェースの半導体ストレージドライブを想定して記載をしており、マイコン１０は、半導体ストレージドライブのシステムを制御するように動作する。半導体ストレージドライブでは、マイコン１０はメモリコントローラ２０の内部に配置されていることも多いが、ここでは、メモリコントローラ２０の外部に配置する構成を記した。
【００５０】
メモリ制御回路１００は、マイコン１０、３個のリクエスタ３００、４００、５００と、信号線Ｌ２、Ｌ４、Ｌ６、Ｌ７で接続されており、このための４個のポートを持つ。また、４個に分けたメモリデバイス上の空間２１０と２１１、２１２と２１３、２１４、２１５に、それぞれのデータ単位（５１２バイト、４バイト、２６ビット、３２ビット）に従って書き込み、あるいは読み出しの制御を行なう。このため、予め各データの空間が決まっていれば前記空間を分割するためのアドレスレジスタ１１０は必要ない。しかし、別のシステムにメモリコントローラ２０を使用する場合などを考えると、メモリデバイス２００の空間の分割を変更する手段は必要である。
【００５１】
次に、図２を用いてメモリ制御回路１００をより詳細に説明する。
【００５２】
メモリ制御回路１００は、各リクエスタ３００、４００、５００からのアクセス要求を調停するアービタ１１２、アドレスレジスタ１１０を含む誤り訂正選択レジスタ１１１、選択されたリクエスタからの書き込むデータや、読み出したデータを操作するデータ制御部１１３から構成される。さらに、データ制御部１１３は、書き込みデータから誤り訂正のための冗長データを算出するＥＣＣ生成部１１４、読み出したデータの誤り訂正を行なうＥＣＣ訂正部１１５を含んでいる。
【００５３】
各リクエスタ３００、４００、５００とメモリ制御回路１００の間の信号線には、図２には示していないが、リード、ライトを要求する信号が印加され、アービタ１１２に対してアドレス（ＲＥＱＡ１、ＲＥＱＡ２、ＲＥＱＡ３）とともに出力される。なお、ＲＥＱＡ１、ＲＥＱＡ２、ＲＥＱＡ３は、それぞれ各リクエスタ３００、４００、５００の与えるアドレスを意味する。
【００５４】
アービタ１１２は、適切な調停法方、例えばラウンドロビンにより各リクエスタ３００、４００、５００からのアクセス要求を調停する。これにより選択されたアドレス（ＲＥＱ＿ＡＤＲ）が、誤り訂正選択レジスタ１１１に送られ、アドレスレジスタ１１０に格納されているアドレスＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４と比較し誤り訂正するデータ長が選択される。なお、図１に示したマイコン１０からの信号は簡単化のため省略してある。基本的には、４Ｂ単位リクエスタ４００と同じであると考えて良い。
【００５５】
本実施例においては、誤り訂正選択レジスタ１１１には、４個のメモリ領域ごとにアドレス空間サイズ（ＳＩＺＥ１、ＳＩＺＥ２、ＳＩＺＥ３、ＳＩＺＥ４）と、データの単位長を示す誤り訂正タイプ（ＴＹＰＥ１、ＴＹＰＥ２、ＴＹＰＥ３、ＴＹＰＥ４）を格納するレジスタがあり、メモリ領域ごとの先頭アドレスＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４と対比して記憶されている。これにより、アービタ１１２により選択されたアドレス（ＲＥＱ＿ＡＤＲ）が、アドレスレジスタ１１０に格納されているアドレスＡＤ１、ＡＤ２、ＡＤ３、ＡＤ４と比較され、さらにはアドレス空間サイズ（ＳＩＺＥ１、ＳＩＺＥ２、ＳＩＺＥ３、ＳＩＺＥ４）と、データの単位長を示す誤り訂正タイプ（ＴＹＰＥ１、ＴＹＰＥ２、ＴＹＰＥ３、ＴＹＰＥ４）が参照される。
【００５６】
これに基づいて、アドレス指定のエラー（ＡＤＲ＿ＥＲＲ）、データを書き込むあるいは読み出すデータアドレス（ＤＡＴＡ＿ＡＤＲ）、冗長データの書き込みあるいは読み出す冗長アドレス（ＲＤＡＴＡ＿ＡＤＲ）、誤り訂正タイプ（ＲＴＹＰＥ）を出力する。
【００５７】
なお、アドレス空間サイズ（ＳＩＺＥ１、ＳＩＺＥ２、ＳＩＺＥ３、ＳＩＺＥ４）は、ある誤り訂正タイプの有効なアドレス範囲を示すもので、例えばＡＤ１であれば、ＡＤ１から（ＡＤ１＋ＳＩＺＥ１×データの単位長）の空間が、ＴＹＰＥ１の誤り訂正の範囲となる。
【００５８】
また、誤り訂正タイプ（ＴＹＰＥ１、ＴＹＰＥ２、ＴＹＰＥ３、ＴＹＰＥ４）には、図１に示したように５１２バイト単位、４バイト単位、２６ビット単位、３２ビット非冗長などが指定できる。他に、８バイト単位のデータに８ビットの冗長データを付加して誤り訂正する誤り訂正タイプや、１２０ビットのデータを１単位として扱う誤り訂正タイプ、１６バイトに２バイトの冗長データを付加する誤り訂正タイプが考えられる。
【００５９】
２６ビット単位や、５７ビット単位、１２０ビット単位等のように、冗長データを含んで２のべき乗のアドレス範囲になる場合は、冗長データ領域を設けなくとも良いが、それ以外の誤り訂正タイプでは、図１のメモリマップに示すように冗長データ領域（５１２バイト単位の冗長データ２１１、４バイト単位の冗長データ２１３）が必要になる。
【００６０】
各リクエスタ３００、４００、５００から要求されるアドレスが、アドレスレジスタ１１０の示す誤り訂正タイプの先頭アドレスからアドレス空間サイズの示す領域以外になる場合、アドレス指定のエラー（ＡＤＲ＿ＥＲＲ）が検出され出力される。
【００６１】
次に、データ制御部１１３について説明する。データ制御部１１３は、誤り訂正選択レジスタ１１１からのデータアドレス（ＤＡＴＡ＿ＡＤＲ）、冗長アドレス（ＲＤＡＴＡ＿ＡＤＲ）、誤り訂正タイプ（ＲＴＹＰＥ）に基づいて、メモリデバイス２００へのアドレス（ＭＥＭＡＤＲ）、制御信号（ＭＥＭＣＯＮＴ）、マスクデータ（ＭＥＭＤＭ）を生成し、アービタ１１２からのライトデータ１１６に基づいてメモリデバイス２００へのライトデータを生成する。
【００６２】
また、メモリデバイス２００が出力するリードデータから誤り訂正の復号をＥＣＣ訂正部１１５で行い、読み出しデータ１１７としてアービタ１１２を介して各リクエスタ３００、４００、５００にＲＥＱＲＤ信号で出力する。誤り訂正でエラーになった場合は、ＤＡＴＡ＿ＥＲＲ信号を発生し、システムにデータリードでエラーが発生したことを通知する。
【００６３】
次に、このデータ制御部１１３について更に詳細に説明する。
【００６４】
図３は、メモリデバイス２００のインタフェースを説明する図である。ここに示す本実施例のメモリデバイス２００は、一般的なＳＤＲＡＭを想定している。メモリデバイス２００と、データ制御部１１３の間の信号線Ｌ８には、メモリアドレスＭＥＭＡＤＲと、制御信号ＭＥＭＣＯＮＴと、マスクデータＭＥＭＤＭとメモリデータＭＥＭＤＡＴＡとが印加され、図３のタイミングでデータ制御が実行される。
【００６５】
書き込みの場合、データ制御部１１３は、時刻ｔ１においてメモリアドレスＭＥＭＡＤＲと制御信号ＭＥＭＣＯＮＴに行アドレス（ＲＡ１、ＡＣＴ）を指定する。次いで時刻ｔ２において、メモリアドレスＭＥＭＡＤＲに列アドレス（ＣＡ１）を指定し、制御信号ＭＥＭＣＯＮＴにライトコマンド（ＷＴ）を指定する。これにより、メモリデバイス２００は、データのライトを開始する。このときのライト開始位置は、行アドレス（ＲＡ１、ＡＣＴ）と列アドレス（ＣＡ１）で指定されたデータ位置とされる。
【００６６】
具体的には、ライトコマンド（ＷＴ）を指定した一定時間Ｔ１後に、メモリデータＭＥＭＤＡＴＡ信号にライトデータＤを、またマスクデータＭＥＭＤＭにデータマスク信号（Ｌレベル）を与えることで、データマスク信号がＬレベルの期間にライトが行われる。逆に言えば、データマスク信号がＨレベルの期間には、ライトが阻止される。このことから明らかなように、前述の一定時間Ｔ１は、メモリデータの当該行において、ライトする列位置（ＣＡ１）に応じて定められる。通常データマスク信号ＭＥＭＤＭは、１バイト単位に指定できる。図３では、アドレスＲＡ１、ＣＡ１に対してデータＤ１０、Ｄ１１、Ｄ１２、Ｄ１３をライトし、時刻ｔ３で与えたアドレスＲＡ１、ＣＡ２に対してデータＤ２０をライトした例を示している。
【００６７】
なお、実際には、ＭＥＭＤＡＴＡは１６ビット（２バイト）のデータであるから、ＭＥＭＤＭは２ビットになる。また、図３ではバースト数を４で説明したが、以降はバースト数を８として説明している。なお、メモリデバイス２００のリードは、列アドレスＲＡを指定する時の制御信号をリードコマンドにすることでその一定時間後にＭＥＭＤＡＴＡ信号にリードデータが出力される。
【００６８】
次に、データ制御部１１３の制御フローを図４に示す。このフローのどのパスの処理を実行するのかは、誤り訂正タイプで決まる。この誤り訂正タイプは、図２の誤り訂正選択レジスタ１１１において、アービタ１１２により選択されたアドレス（ＲＥＱ＿ＡＤＲ）、つまりアクセス要求のあったアドレスに応じてレジスタ１１１を参照して決定されたものである。この誤り訂正タイプは、アクセスするアドレスに応じて、データの長さと、連続するデータとして取り扱うか、別に取り扱うのかを定めたものということができる。なお、メモリデバイス２００は、上述のように、２バイトのバス幅で、８回のバーストを基本としたアクセスを行なうため、１６バイトを基本アクセスとして説明している。つまり、１回のデータアクセスで取り扱う長さ（これをデータアクセス単位長とする）を、以下の例では１６バイトとする例で説明する。
【００６９】
まず、処理Ｓ１２１では、図２の誤り訂正タイプ（ＴＹＰＥ）が、冗長データを別アドレスとして処理する場合に処理Ｓ１２６に分岐する。処理Ｓ１２６に分岐された場合には、処理Ｓ１２６、処理Ｓ１２７、処理Ｓ１２８からなる一連のパスを実行する。
【００７０】
冗長データを別アドレスとして処理するケースとしては、図１の５１２バイト単位データが、これに相当する。これは、例えば５１２バイト単位のアクセスの場合、連続した５１２バイトのデータは、５１２バイトのメモリ境界（図１の領域２１０）に配置し、その冗長データ（２バイト）は別の冗長領域（図１の領域２１１）に書き込むための分岐である。なお、４バイト単位データの場合には、冗長データを別アドレスとすることも、連続データとすることもできる。以下の例では、５１２バイト単位のアクセスを例にして、別アドレスとして処理するケースを説明する。
【００７１】
この実施例では、書き込みあるいは、読み出しのデータは１６バイト単位にアクセスされる。このため、処理Ｓ１２６において、１６バイト単位にアクセスされ取り出されたデータは、処理Ｓ１２７において、アクセスデータ総量が５１２バイトになるまで、繰り返し計数される。５１２バイト処理した後、処理Ｓ１２８で、冗長データ領域２１１にそれまでに求める２バイトの冗長データを書き込む、または、読み出しエラー訂正する。なお、冗長データを別アドレスとしたときの４バイト単位データの取り扱いの場合には、処理Ｓ１２７において繰り返し処理をするのではなく、直ちに処理Ｓ１２８に移り、冗長データ領域２１３に冗長データを書き込む、または、読み出しエラー訂正の処理をする。
【００７２】
次に、誤り訂正タイプ（ＴＹＰＥ）が冗長データを連続したデータとして処理する場合には、処理Ｓ１２２に分岐し、これを実行する。
【００７３】
図１のメモリマップの例では、領域２１４，２１５のデータの処理が処理Ｓ１２２の対象となる。また、４バイト単位データであっても、冗長データの格納領域を分割せずに連続データとしている場合には、この処理ルートに入ってくる。
【００７４】
処理Ｓ１２２では、誤り訂正タイプが冗長データを２のべき乗のデータとは別に持つ（１バイトの冗長なのでＥＣＣ奇数と表記）場合、処理Ｓ１２３に分岐する。２のべき乗のデータである４バイト（３２ビット）とは別に、７ビット（１バイト）の冗長データを付加する場合がこれにあたる。
【００７５】
逆に、２のべき乗の範囲内のデータとする場合、あるいは２のべき乗の範囲内に冗長データとデータを含む場合には、処理Ｓ１２５に分岐する。２のべき乗の範囲内のデータとする場合としては、２６ビットのデータを４バイト（３２ビット）で処理する場合がこれにあたる。また、２のべき乗の範囲内に冗長データとデータを含む場合としては、５７ビット、１２０ビットのデータなどを８バイト、１６バイトで処理する場合がこれにあたる。
【００７６】
処理Ｓ１２５に分岐した場合、２のべき乗の範囲（この例では１６バイト）内に冗長データとデータを含むので、１６バイトを単位として処理すればよい。
【００７７】
これに対し処理Ｓ１２３では、２のべき乗のデータ（例えば４バイト）とは別に、冗長データ（１バイト）を有するので、奇数バイトになっている。これを１６バイト処理すると、１６バイトのデータの境界を越えることがある。このことから、処理Ｓ１２４では、境界をまたぐ時もう一度処理Ｓ１２３を実行するようにしている。
【００７８】
図５には、この処理Ｓ１２３のときのメモリデータＭＥＭＤＡＴＡの内容を示している。図５の上は、４バイトのアクセスデータ（Ｄ１０、Ｄ１１、Ｄ１２、Ｄ１３）に対して７ビットの冗長データＤ１Ｅ（ダミー１ビットを付加して１バイト）が、バイトアドレスの下位が３から７の範囲に書き込まれ、あるいは読み出す場合を示している。
【００７９】
図５の下には、４バイトのアクセスデータ（Ｄ２０、Ｄ２１、Ｄ２２、Ｄ２３）と冗長データ（Ｄ２Ｅ）が、１６バイトのアドレス境界をまたいでいるケースを示している。バイトアドレスの下位が０から”Ｂ”（十進の１１）までは、１回のメモリアクセス（列アドレス、制御信号の出力）で処理が完了するが、バイトアドレスの下位が”Ｃ”（十進の１２）以降は、２回メモリアクセスする。なお、ここで言うバイトアドレスは、メモリデバイス２００に与えるアドレスである。アービタ１１２の出力するＲＥＱ＿ＡＤＲに基づいて算出するなら、ＡＤ２＋（（ＲＥＱ＿ＡＤＲ−ＡＤ２）÷４）×５となる（但し、ＲＥＱ＿ＡＤＲ、ＡＤ２は４の倍数とする）。
【００８０】
なお、図５で”Ｍ”は、ライト時にデータをマスクしていることを示す。図５のデータパターンにおいて、バイトアドレス０からＦまでが１つの列を形成しており、今回のライトはバイトアドレス３から７に行うので、バイトアドレス０から２の期間、バイトアドレス８からＦの期間をマスクする。図３において、列アドレス（ＣＡ２）指定後の一定時間Ｔ１は、バイトアドレス０から２の期間に相当しており、この期間のライトを阻止することで、バイトアドレス３から７のライトを有意の処理とする。
【００８１】
図６は、８バイトの単位のデータアクセスで、１バイト（８ビット）の冗長データを付加した例を示している。バイトアドレス境界が０から７の場合に１回のメモリアクセスで良く、８から”Ｆ”（十進の１５）の時、２回のメモリアクセスとなる。
【００８２】
図７は、２６ビット単位のデータアクセス（ＤＡＴＡ２６）で６ビットの冗長データ（ＥＣＣ６）を付加し、合せて４バイト単位にアクセスする場合の１６バイトのメモリ配置例を示している。４バイト単位にアクセスするため、１６バイト境界をまたぐことはない。
【００８３】
前述のように、図４の分岐処理Ｓ１２２では、誤り訂正のための冗長データを含め４バイト、８バイト、１６バイトアクセスを行なう誤り訂正タイプの場合は、処理Ｓ１２５における１回のメモリアクセスを行なうことで、処理を終了する。
【００８４】
図８は、５１２バイト単位にアクセスする場合のメモリマップと冗長データの関係を示している。データ書き込みの場合の処理Ｓ１２６では、先頭アドレスＡＤ１から始まるメモリエリア２１０に、１６バイト単位で５１２バイトのデータを格納する。
【００８５】
同時に誤り訂正符号の冗長データを算出し、処理Ｓ１２８で冗長データエリア２１１に求めた冗長データを格納する。冗長データは、アドレスレジスタ１１０に設定した先頭アドレスＡＤ１に、データサイズＳＩＺＥ１×５１２バイトを加えたアドレスから冗長データサイズＳＩＺＥ１×２となる。
【００８６】
データ読み出しの場合も同様に、処理Ｓ１２６で１６バイト単位にデータを読み出し、冗長データを算出しながらアービタ１１２に読み出しデータを送出する。最後の転送が終了した処理Ｓ１２８では、冗長データ２１１から該当する冗長データを読み出し、これまで算出してきた冗長データと排他的論理和（ＥＸＯＲ）をとることで誤り訂正がある場合の誤りのビット位置を求めることができる。なお、メモリ制御回路１００に、誤ったビットを訂正する機能を持たせることも可能であるが、５１２バイト単位のアクセスを行なうリクエスタ１には、５１２バイトのバッファがあるため、メモリ制御回路１００からは、誤り訂正するビット位置を送出することにする。
【００８７】
図９に示すハミング符号を用いれば、処理Ｓ１２８で最後に求められる値は、０の時誤りなし、０以外は誤り訂正するビット位置そのものを示す。ただし、パリティに矛盾があれば訂正できないエラーと判定し、ＤＡＴＡ＿ＥＲＲをアサートする。
【００８８】
最後に、図９と図１０を用いてハミング符号を用いた冗長データを算出する方法を示す。図９は左に入力データ（書き込むデータまたは読み出したデータ）の１ビット（Ｂ０からＢ４０９５）が記され、それに対応するシンドローム（Ｓ０からＳ７、５１２バイトのシンドロームは１３ビット必要でありＳ０からＳ１２までとなる）を右側に記した。シンドロームは、１ビットだけの値は、それ自身の誤りを示す。また、１、２、４、８、・・・は除き、図のように、２ビット以上の１か、３、５、６、７、９が順次入力データのビット位置（Ｂ０、Ｂ１、Ｂ２、Ｂ３、・・・）に割りつけられる。さらに、入力データの”１”を計数しパリティを求め、メモリ書き込み時は、シンドロームを含めてパリティを生成する。
【００８９】
図３に示したように、メモリデバイス２００とのインタフェースでは、メモリデバイス２００とのデータバス幅１６ビット単位にデータを出力、あるいは入力するため、図９のシンドロームを求める表は、一度に１６ビット分参照し、演算できれば良く、誤り訂正タイプによって共通に使用することができる。
【００９０】
５１２バイトの場合、２５６個の１３ビットのシンドロームを１６個出力する表をハードウェアで実装すれば良い。例えば、５１２バイトのデータの内Ｎ回目の１６ビットがそれぞれ１の時のシンドロームは、Ｎが０の時３、Ｎが１の時は０ｘ１６、Ｎが２の時は０ｘ２７と全てのケースについて予め求められる。これを指定してハードウェアを合成し、生成することができる。ここで、０ｘはそれ以降の数字が１６進数であることを表している。
【００９１】
あるいは、この条件を整理してＮによってシンドロームを算出することもできる。即ち、シンドロームの値は、シンドローム自身に１ビットだけの誤りがある場合を除いて数えた入力ビット列の順番であるから、Ｎ×１６にＮで決まる値を加算すればよい。具体的には、入力の０ビット目では、この加算する値はＮ＝０で３、Ｎ＝１で６、Ｎ＝２と３で７、Ｎ＝４から７で８、Ｎ＝８から１５までで９、Ｎ＝１６から３１までで１０、Ｎ＝３２から６３までで１１、Ｎ＝６４から１２７までで１２、Ｎ＝１２８から２５５までで１３となる。
【００９２】
このような対応関係を、２ビット目から１６ビット目まで記述すれば１６ビット分のシンドロームを生成することができる。Ｎに対する１６個のシンドロームを表で表しても良いが、Ｎ×１６にＮで決まる加算値を加える方が、記述性が良く、ハードウェアで合成する際も最適化を容易に行える。実際表で表す場合、２５６個のＮに対して１６個のシンドロームを指定するので４０９６個の値を指定する必要がある。
【００９３】
一方、Ｎ×１６にＮで決まる加算値を加える記述では、Ｎで決まる加算値を約９個の条件で指定できるので、１６ビット分の１６０個以内の値で指定することができる。実際合成した結果は、５１２バイトのデータに必要な８ビットのＮに対して、１６個のシンドロームを出力する回路が表で表す場合約６０００ゲートのところ、Ｎで決まる値を求める方法では約４０００ゲート実現できた。
【００９４】
図１０は、入力された１６ビット（Ｂ１５−Ｂ０）の個数をカウンタＮで求め、カウンタＮと、誤り訂正タイプで求められる１６個のシンドロームを該入力された１６ビットで選択したものを全て順次排他的論理和（ＥＸＯＲ）することで５１２バイトのシンドロームを求める回路を示している。この回路は、適宜入力のビットをマスクすれば基本的に何ビットでも共通に使用できる。
【符号の説明】
【００９５】
１０：マイコン
２０：メモリコントローラ
１００：メモリ制御回路
１１０：アドレスレジスタ
１１１：領域分割レジスタ
１１３：データ制御部
２００：メモリデバイス
３００：５１２Ｂ単位リクエスタ
４００：４Ｂ単位リクエスタ
５００：２６ビット単位リクエスタ
【図１】
2012174088.tif 000003
【図２】
2012174088.tif 000004
【図３】
2012174088.tif 000005
【図４】
2012174088.tif 000006
【図５】
2012174088.tif 000007
【図６】
2012174088.tif 000008
【図７】
2012174088.tif 000009
【図８】
2012174088.tif 000010
【図９】
2012174088.tif 000011
【図１０】
2012174088.tif 000012