説明

メモリ制御装置

【課題】本発明は、少なくとも2種類以上のデータ長のデータに対して冗長データを付加し、誤り訂正を行なうメモリ制御装置において、メモリを最大限有効に使用することを目的としている。
【解決手段】上記課題は、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイス200と、該誤り訂正データを読み出して誤り訂正を行なうメモリコントローラ20と、
前記誤り訂正データは前記メモリデバイス200からデータと冗長データを連続的に読み出す手段を有することによりなされる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ制御装置に関する。
【背景技術】
【0002】
メモリデバイス上の記憶素子はα線、宇宙線等によりデータが反転してしまうことがある。この記憶素子上にあるプログラムや、格納されているデータに反転が生じると、システムに障害が発生する可能性がある。
【0003】
システムをこのような障害から守る方式として、記憶するデータに冗長なデータを付加し、誤り訂正符号で誤りを訂正する方式がある。この方式を用いて高信頼なシステムを構築しようとすると、冗長なデータを記憶する記憶素子が必要となる。2のべき乗の記憶素子からなるメモリデバイスで、2のべき乗のデータに冗長なデータを付加すると、別にその分の情報を記憶させるメモリデバイスが必要となりコストがアップする。
【0004】
この点に関し、例えば特許文献1には、32ビットのデータに、7ビットの冗長なデータを付加することで1ビットの誤りを訂正し、2ビットの誤りを検出する半導体メモリ装置の構成が示されている。この方式では、2のべき乗の32ビットのデータを高信頼に扱うために、39ビットの情報を記憶する。
【0005】
特許文献1の方式を16ビットのデータ幅を持つメモリデバイスを使用して実現する場合、特許文献2にあるように、3個のメモリデバイスで48ビットのデータ幅とし、そのうち39ビットをデータ(32ビット)とその誤り訂正(7ビット)に使用するのが簡単であるが、残り9ビットのデータは使用することが無く、無駄になってしまう。
【0006】
また、特許文献3には、120ビットのデータに、8ビットの冗長なデータを付加することで1ビットの誤りを訂正する誤り訂正方式が示されている。この方式では、120ビットのデータを高信頼に扱う場合、128ビットの情報を記憶すれば良い。この2のべき乗である128ビットの情報を記憶する場合は、メモリデバイスを有効に利用できるが、反面において、一般的なプロセッサの演算装置は32ビットのような2のべき乗のデータを扱うことから、そのようなプロセッサでは効率良くメモリをアクセスすることができない。
【0007】
例えば、特許文献4に開示してある記憶装置においては、ホスト計算機からの512バイトのセクターデータ、マイクロプロセッサのプログラムやデータである4バイトデータなど、各種管理テーブルには、さまざまなデータ長のデータが半導体メモリに格納される。ここで、512バイトのデータと、4バイトのデータに対して、1ビットの誤り訂正、2ビットの誤り検出を可能にするためには、それぞれ14ビットと7ビットの冗長なデータを付加する必要がある。冗長分の効率だけを考えた場合、512バイトのデータを扱う方が良いが、4バイトを書き込んだり、読み出したりする時、512バイト単位に行うのは不合理である。
【0008】
また、特許文献5には、不揮発メモリの一部の記憶領域をソフトウェアECC処理の対象にするデータ処理方法が示されている。フラッシュメモリ等の不揮発メモリは、書き換え回数が増えるごとに誤りの発生する確率が増加する。書き換え回数が多い記憶領域や、重要なデータが格納されている記憶領域だけをソフトウェアECC処理の対象とすることで、それ以外の領域の無駄を省けることが示されている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開平6−250935号公報
【特許文献2】特開2010−086120号公報
【特許文献3】特開2001−249854号公報
【特許文献4】特願2009−275048号公報
【特許文献5】特開2002−91831号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
本発明においては、2のべき乗の記憶素子からなるメモリデバイスを用い、誤り訂正符号で誤りを訂正する高信頼なシステムをメモリ効率が最大になるように構築することを大前提としている。
【0011】
係るメモリ効率最大という観点から、前述の特許文献を検討すると、それぞれ以下のことが言える。
【0012】
特許文献1ならびに、特許文献2には一般的な4バイトのデータに対する誤り訂正、誤り検出を行なうメモリ制御装置が記されている。仮に16ビットのメモリデバイスを使用する場合、4バイトのデータに対して3個のメモリデバイスを使用することになるので、48ビット中の9ビットのデータは無駄になってしまう。また、メモリデバイスの容量に関係なく3個のメモリデバイスが必要であり、必要なメモリ容量が少ない場合には無駄が大きくなる。
【0013】
特許文献3には、120ビットのデータに、8ビットの冗長なデータを付加し128ビットの情報を記憶する効率の良い方法が記されている。しかし、120ビット単位にデータを扱う場合は良いが、それ以外では効率良くメモリをアクセスすることができない。例えば、32ビットのデータは120ビットとして扱われ、128ビットのデータとして格納される。
【0014】
特許文献5には、不揮発メモリの一部の記憶領域をデータの重要度に応じて誤り訂正するデータ処理方法が示されている。プログラムにより誤り訂正のための冗長なデータを生成し付加するので、誤り訂正しないデータには冗長なデータを付加しなくて良く、無駄を省くことができる。ここでは、データの重要度、書き換え保証回数により誤り訂正能力を選択することが記されているが、さまざまなデータ長のデータに対してメモリデバイスの使用効率を最大にすることは考慮していない。
【0015】
以上の特許文献の方式には、メモリ効率最大という観点からみると一長一短があるが、実際のメモリデバイスにおいては、特許文献4にあるように、ホスト計算機からのセクターデータ(512バイト)、マイクロプロセッサのプログラムやデータである4バイトデータなど、各種管理テーブルに格納されるさまざまなデータ長のデータを取り扱うことが多い。
【0016】
本発明では、係る使用の場面においても効率良くメモリデバイス上に割り付け、ハードウェアで高速にアクセスするメモリ制御装置を提供することを目的としている。
【課題を解決するための手段】
【0017】
上記課題を解決するために、本発明のメモリ制御装置は、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、誤り訂正データを読み出して誤り訂正を行なうメモリコントローラを有し、誤り訂正データはメモリデバイスからデータと冗長データを連続的に読み出す。
【0018】
また、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、メモリコントローラは、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、メモリデバイスに書き込みを行ない、メモリコントローラは、誤り訂正データをメモリデバイスから読み出して誤り訂正を行なうものであって、メモリデバイスに対して書き込み、あるいは読み出しを行なう誤り訂正データは、データと冗長データが連続的に転送する。
【0019】
上記課題を解決するために、本発明のメモリ制御装置は、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、メモリコントローラは、少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、メモリコントローラは、誤り訂正データをメモリデバイスから読み出して誤り訂正を行なうものであって、アドレス空間を分割するための情報を指定するレジスタがある。
【0020】
また、アドレス空間を分割するための情報を指定するレジスタは、アドレス空間を示す先頭アドレスと、アドレス空間を示す空間サイズと、少なくとも2種類以上のデータ長を示す情報がある。
【0021】
上記課題を解決するために、本発明のメモリ制御装置は、複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうとともに、メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを制御するメモリコントローラとを含む。
【0022】
また、メモリデバイスの第1の空間には冗長なデータを当該空間内の別領域に格納しており、メモリコントローラは、先頭アドレスが第1の空間である場合に、冗長なデータを当該空間内の別領域に格納する予め決められたデータ長の誤り訂正タイプであると判断し、データ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し実行する。
【0023】
また、メモリデバイスの第2の空間には2のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納されており、メモリコントローラは、先頭アドレスが第2の空間である場合に、2のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、一度のデータアクセス単位長での処理により、2のべき乗の長さのデータと、これに付加する冗長なデータが得られない場合には、再度データアクセス単位長での処理を実行する。
【0024】
また、メモリデバイスの第3の空間には2のべき乗の長さの範囲内にデータとこれに付加する冗長なデータが連続して格納されており、メモリコントローラは、先頭アドレスが第3の空間である場合に、2のべき乗の長さの範囲内にデータとこれに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、データアクセス単位長での処理を実行する。
【0025】
上記課題を解決するために、本発明のメモリ制御装置は、複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に連続して格納するメモリデバイスと、メモリデバイスに対して書き込みと読み出しを行なうとともに、メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御するメモリコントローラとを含み、メモリデバイスは、冗長なデータを当該空間内の別領域に格納する第1の空間と、2のべき乗の長さの前記データとこれに付加する冗長なデータが連続して格納された第2の空間と、2のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された第3の空間のうち、2つ以上の空間を備えている。
【0026】
また、メモリコントローラは、第1の空間の処理のときにこの空間でのデータ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、第2の空間の処理のときにデータアクセス単位長での書き込みあるいは、読み出しを実行し、第3の空間の処理のときに、必要に応じてデータアクセス単位長での書き込みあるいは、読み出しを再実行し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御する。
【発明の効果】
【0027】
本発明によれば、512バイトや4バイトのような、さまざまなデータ長で誤り訂正するデータを効率良くメモリデバイス上に割り付け、ハードウェアで高速にアクセスするメモリ制御装置を提供することができる。
【0028】
さらに本発明の実施例によれば、システムの仕様によりデータの割り付けを最適にできるようなメモリ制御装置を提供することができる。
【0029】
また本発明の実施例によれば、メモリデバイスが、連続した記憶素子の一部を連続的に外部ピンに入出力するものであるとき、高性能にメモリ制御装置を提供することができる。
【0030】
以上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0031】
【図1】メモリ制御装置1の構成を示す図。
【図2】メモリ制御回路100の構成を示す図。
【図3】メモリデバイス200のインタフェースを説明する図。
【図4】データ制御部の動作を示す図。
【図5】4バイトデータのメモリアクセスの例を示す図。
【図6】8バイトデータのメモリアクセスの例を示す図。
【図7】26ビットデータのメモリアクセスの例を示す図。
【図8】512バイトデータのメモリアクセスの例を示す図。
【図9】シンドロームの生成方法を示す図。
【図10】シンドロームを生成する回路を示す図。
【発明を実施するための形態】
【0032】
以下、本発明の実施例を、図面を用いて説明する。
【実施例】
【0033】
本実施例では、メモリデバイスを4つの領域に分割したメモリ制御装置1の例を説明する。
【0034】
図1は、本実施例のメモリ制御装置1の構成例を示している。メモリ制御装置1は、マイコン10、メモリコントローラ20、SCSI(small computer system interface)コネクタ30、メモリデバイス200から構成される。
【0035】
マイコン10は、メモリ制御装置1を所定のプログラムに従って制御するプロセッサである。所定のプログラムは、マイコン10内部のROM(図示せず)に書き込まれている。マイコン10は、メモリコントローラ20を介してメモリデバイス200や、メモリコントローラ20の内部レジスタにアクセスすることができる。
【0036】
メモリコントローラ20は、メモリ制御回路100と、例えば3組のリクエスタから構成される。3組のリクエスタは、512B(バイト)単位リクエスタ300、4B単位リクエスタ400、26ビット単位リクエスタ500である。
【0037】
SCSIコネクタ30は、ホスト計算機(図示せず)と接続し、ホスト計算機からのコマンド、データのやり取りをするポートである。ホスト計算機からは、SCSIコネクタ30を介して512バイトのデータが書き込まれ、あるいは読みだされる。
【0038】
ホスト計算機から、512バイトのデータが書き込まれるときは、信号線L1を介して512B単位リクエスタ300が一旦512バイトのデータを受け取り、そのデータが正しいか確認する。それから信号線L2、メモリ制御回路100を介してメモリデバイス200に書き込みを行なう。ホスト計算機から512バイトのデータの読み出しを行なう場合には、メモリ制御回路100、信号線L2を介して512バイトのデータを読み出し、一旦512B単位リクエスタ300に格納し、誤りがある場合には格納されているデータを訂正し、信号線L1、SCSIコネクタ30を介してホスト計算機に出力する。
【0039】
4B単位リクエスタ400は、マイコン10からのメモリデバイス200に対する書き込み、読み出しを制御する。4バイトの書き込みでは、4B単位リクエスタ400は、マイコン10から信号線L3を介して書き込むデータを受け取り、信号線L4を介してメモリ制御回路100に書き込みの要求を出力する。また、4バイトの読み出しでは、4B単位リクエスタ400は、信号線L4を介してメモリ制御回路100に読み出し要求を出し、読み出したデータを信号線L3経由でマイコン10に出力する。
【0040】
26ビット単位リクエスタ500は、メモリデバイス200上に定義するアクセス単位が26ビットのデータに対してマイコン10からの書き込み、読み出しを制御する。この場合、信号線L5、L6が使用される。
【0041】
このように、メモリ制御回路100は512B単位リクエスタ300、4B単位リクエスタ400、26ビット単位リクエスタ500からの書き込み、読み出し要求を受け取り、それぞれに対応するエラー訂正を行なってメモリデバイス200に対して制御信号を生成する。なお、メモリ制御回路100とマイコン10は、メモリ制御回路内のアドレスレジスタ110をアクセスするため信号線L7により直接接続されている。
【0042】
メモリデバイス200は、2のべき乗のデータを入出力する信号線L8(例えば16ビット)でメモリコントローラ20と接続されている。本実施例では、メモリデバイス200は一般的なダイナミックメモリを想定しており、メモリの記憶素子を2次元状に配置し、行アドレスで読み出した連続するデータから列アドレスで指定されたデータを対象に書き込み、あるいは読み出しするものである。当然、一般的なRAMを用いても問題ない。
【0043】
メモリデバイス200は、例えば4個の空間(図1メモリマップ太枠内)に分けてアクセスされる。各空間では、データと冗長データを、領域を分けて格納する場合と、データと冗長データを連続するデータとして扱う場合とがある。図1では、512B単位データと4B単位データが、領域を分けて格納する場合を示しており、それ以外は連続するデータとして扱う場合を示している。なお、4B単位データは、連続するデータとして扱い、格納領域を分割しない方式とすることもできる。
【0044】
領域210は、512バイト単位のデータを書き込み、あるいは読み出す空間である。領域210に対して、通常512B単位リクエスタ300からの要求で512バイト単位の書き込み、あるいは読み出しが行われ、その512バイトの冗長データを領域211に格納、あるいは読み出して訂正する。領域210と領域211により、4個の空間のうちの1つの空間を形成する。この空間は512バイト単位のデータのための空間である。
【0045】
領域212は、4バイト単位のデータの書き込み、あるいは読み出す空間である。領域213は、領域212の4バイトデータに対する冗長データを格納する空間である。但し、本実施例では冗長データは領域213に配置するのではなく、領域212の先頭から4バイトのデータに1バイトの冗長データを付加したものを領域213の最後まで配置したものとなる。領域212と領域213により、4個の空間のうちの2つ目の空間を形成する。この空間は4バイト単位のデータのための空間である。
【0046】
領域214は、26ビット単位のデータに6ビットの冗長データを付加し、4バイト単位にしてメモリに配置した空間である。これが3つ目の空間である。
【0047】
領域215は、32ビットの誤り訂正を行なわない、冗長データの無い書き込み、あるいは読み出しを行なう空間である。ここでは、マイコン10とメモリ制御回路100を直接接続した信号線L7を介してマイコン10から読み出し、あるいは書き込みを行なうものとする。これが4つ目の空間である。
【0048】
これら4個の空間は、メモリ制御回路100内に配置するアドレスレジスタ110によって定義できる。ここでは、4個の空間の先頭アドレスが、AD1、AD2、AD3、AD4と定義されている。
【0049】
ところで、本実施例のメモリ制御装置1は、SCSIインタフェースの半導体ストレージドライブを想定して記載をしており、マイコン10は、半導体ストレージドライブのシステムを制御するように動作する。半導体ストレージドライブでは、マイコン10はメモリコントローラ20の内部に配置されていることも多いが、ここでは、メモリコントローラ20の外部に配置する構成を記した。
【0050】
メモリ制御回路100は、マイコン10、3個のリクエスタ300、400、500と、信号線L2、L4、L6、L7で接続されており、このための4個のポートを持つ。また、4個に分けたメモリデバイス上の空間210と211、212と213、214、215に、それぞれのデータ単位(512バイト、4バイト、26ビット、32ビット)に従って書き込み、あるいは読み出しの制御を行なう。このため、予め各データの空間が決まっていれば前記空間を分割するためのアドレスレジスタ110は必要ない。しかし、別のシステムにメモリコントローラ20を使用する場合などを考えると、メモリデバイス200の空間の分割を変更する手段は必要である。
【0051】
次に、図2を用いてメモリ制御回路100をより詳細に説明する。
【0052】
メモリ制御回路100は、各リクエスタ300、400、500からのアクセス要求を調停するアービタ112、アドレスレジスタ110を含む誤り訂正選択レジスタ111、選択されたリクエスタからの書き込むデータや、読み出したデータを操作するデータ制御部113から構成される。さらに、データ制御部113は、書き込みデータから誤り訂正のための冗長データを算出するECC生成部114、読み出したデータの誤り訂正を行なうECC訂正部115を含んでいる。
【0053】
各リクエスタ300、400、500とメモリ制御回路100の間の信号線には、図2には示していないが、リード、ライトを要求する信号が印加され、アービタ112に対してアドレス(REQA1、REQA2、REQA3)とともに出力される。なお、REQA1、REQA2、REQA3は、それぞれ各リクエスタ300、400、500の与えるアドレスを意味する。
【0054】
アービタ112は、適切な調停法方、例えばラウンドロビンにより各リクエスタ300、400、500からのアクセス要求を調停する。これにより選択されたアドレス(REQ_ADR)が、誤り訂正選択レジスタ111に送られ、アドレスレジスタ110に格納されているアドレスAD1、AD2、AD3、AD4と比較し誤り訂正するデータ長が選択される。なお、図1に示したマイコン10からの信号は簡単化のため省略してある。基本的には、4B単位リクエスタ400と同じであると考えて良い。
【0055】
本実施例においては、誤り訂正選択レジスタ111には、4個のメモリ領域ごとにアドレス空間サイズ(SIZE1、SIZE2、SIZE3、SIZE4)と、データの単位長を示す誤り訂正タイプ(TYPE1、TYPE2、TYPE3、TYPE4)を格納するレジスタがあり、メモリ領域ごとの先頭アドレスAD1、AD2、AD3、AD4と対比して記憶されている。これにより、アービタ112により選択されたアドレス(REQ_ADR)が、アドレスレジスタ110に格納されているアドレスAD1、AD2、AD3、AD4と比較され、さらにはアドレス空間サイズ(SIZE1、SIZE2、SIZE3、SIZE4)と、データの単位長を示す誤り訂正タイプ(TYPE1、TYPE2、TYPE3、TYPE4)が参照される。
【0056】
これに基づいて、アドレス指定のエラー(ADR_ERR)、データを書き込むあるいは読み出すデータアドレス(DATA_ADR)、冗長データの書き込みあるいは読み出す冗長アドレス(RDATA_ADR)、誤り訂正タイプ(RTYPE)を出力する。
【0057】
なお、アドレス空間サイズ(SIZE1、SIZE2、SIZE3、SIZE4)は、ある誤り訂正タイプの有効なアドレス範囲を示すもので、例えばAD1であれば、AD1から(AD1+SIZE1×データの単位長)の空間が、TYPE1の誤り訂正の範囲となる。
【0058】
また、誤り訂正タイプ(TYPE1、TYPE2、TYPE3、TYPE4)には、図1に示したように512バイト単位、4バイト単位、26ビット単位、32ビット非冗長などが指定できる。他に、8バイト単位のデータに8ビットの冗長データを付加して誤り訂正する誤り訂正タイプや、120ビットのデータを1単位として扱う誤り訂正タイプ、16バイトに2バイトの冗長データを付加する誤り訂正タイプが考えられる。
【0059】
26ビット単位や、57ビット単位、120ビット単位等のように、冗長データを含んで2のべき乗のアドレス範囲になる場合は、冗長データ領域を設けなくとも良いが、それ以外の誤り訂正タイプでは、図1のメモリマップに示すように冗長データ領域(512バイト単位の冗長データ211、4バイト単位の冗長データ213)が必要になる。
【0060】
各リクエスタ300、400、500から要求されるアドレスが、アドレスレジスタ110の示す誤り訂正タイプの先頭アドレスからアドレス空間サイズの示す領域以外になる場合、アドレス指定のエラー(ADR_ERR)が検出され出力される。
【0061】
次に、データ制御部113について説明する。データ制御部113は、誤り訂正選択レジスタ111からのデータアドレス(DATA_ADR)、冗長アドレス(RDATA_ADR)、誤り訂正タイプ(RTYPE)に基づいて、メモリデバイス200へのアドレス(MEMADR)、制御信号(MEMCONT)、マスクデータ(MEMDM)を生成し、アービタ112からのライトデータ116に基づいてメモリデバイス200へのライトデータを生成する。
【0062】
また、メモリデバイス200が出力するリードデータから誤り訂正の復号をECC訂正部115で行い、読み出しデータ117としてアービタ112を介して各リクエスタ300、400、500にREQRD信号で出力する。誤り訂正でエラーになった場合は、DATA_ERR信号を発生し、システムにデータリードでエラーが発生したことを通知する。
【0063】
次に、このデータ制御部113について更に詳細に説明する。
【0064】
図3は、メモリデバイス200のインタフェースを説明する図である。ここに示す本実施例のメモリデバイス200は、一般的なSDRAMを想定している。メモリデバイス200と、データ制御部113の間の信号線L8には、メモリアドレスMEMADRと、制御信号MEMCONTと、マスクデータMEMDMとメモリデータMEMDATAとが印加され、図3のタイミングでデータ制御が実行される。
【0065】
書き込みの場合、データ制御部113は、時刻t1においてメモリアドレスMEMADRと制御信号MEMCONTに行アドレス(RA1、ACT)を指定する。次いで時刻t2において、メモリアドレスMEMADRに列アドレス(CA1)を指定し、制御信号MEMCONTにライトコマンド(WT)を指定する。これにより、メモリデバイス200は、データのライトを開始する。このときのライト開始位置は、行アドレス(RA1、ACT)と列アドレス(CA1)で指定されたデータ位置とされる。
【0066】
具体的には、ライトコマンド(WT)を指定した一定時間T1後に、メモリデータMEMDATA信号にライトデータDを、またマスクデータMEMDMにデータマスク信号(Lレベル)を与えることで、データマスク信号がLレベルの期間にライトが行われる。逆に言えば、データマスク信号がHレベルの期間には、ライトが阻止される。このことから明らかなように、前述の一定時間T1は、メモリデータの当該行において、ライトする列位置(CA1)に応じて定められる。通常データマスク信号MEMDMは、1バイト単位に指定できる。図3では、アドレスRA1、CA1に対してデータD10、D11、D12、D13をライトし、時刻t3で与えたアドレスRA1、CA2に対してデータD20をライトした例を示している。
【0067】
なお、実際には、MEMDATAは16ビット(2バイト)のデータであるから、MEMDMは2ビットになる。また、図3ではバースト数を4で説明したが、以降はバースト数を8として説明している。なお、メモリデバイス200のリードは、列アドレスRAを指定する時の制御信号をリードコマンドにすることでその一定時間後にMEMDATA信号にリードデータが出力される。
【0068】
次に、データ制御部113の制御フローを図4に示す。このフローのどのパスの処理を実行するのかは、誤り訂正タイプで決まる。この誤り訂正タイプは、図2の誤り訂正選択レジスタ111において、アービタ112により選択されたアドレス(REQ_ADR)、つまりアクセス要求のあったアドレスに応じてレジスタ111を参照して決定されたものである。この誤り訂正タイプは、アクセスするアドレスに応じて、データの長さと、連続するデータとして取り扱うか、別に取り扱うのかを定めたものということができる。なお、メモリデバイス200は、上述のように、2バイトのバス幅で、8回のバーストを基本としたアクセスを行なうため、16バイトを基本アクセスとして説明している。つまり、1回のデータアクセスで取り扱う長さ(これをデータアクセス単位長とする)を、以下の例では16バイトとする例で説明する。
【0069】
まず、処理S121では、図2の誤り訂正タイプ(TYPE)が、冗長データを別アドレスとして処理する場合に処理S126に分岐する。処理S126に分岐された場合には、処理S126、処理S127、処理S128からなる一連のパスを実行する。
【0070】
冗長データを別アドレスとして処理するケースとしては、図1の512バイト単位データが、これに相当する。これは、例えば512バイト単位のアクセスの場合、連続した512バイトのデータは、512バイトのメモリ境界(図1の領域210)に配置し、その冗長データ(2バイト)は別の冗長領域(図1の領域211)に書き込むための分岐である。なお、4バイト単位データの場合には、冗長データを別アドレスとすることも、連続データとすることもできる。以下の例では、512バイト単位のアクセスを例にして、別アドレスとして処理するケースを説明する。
【0071】
この実施例では、書き込みあるいは、読み出しのデータは16バイト単位にアクセスされる。このため、処理S126において、16バイト単位にアクセスされ取り出されたデータは、処理S127において、アクセスデータ総量が512バイトになるまで、繰り返し計数される。512バイト処理した後、処理S128で、冗長データ領域211にそれまでに求める2バイトの冗長データを書き込む、または、読み出しエラー訂正する。なお、冗長データを別アドレスとしたときの4バイト単位データの取り扱いの場合には、処理S127において繰り返し処理をするのではなく、直ちに処理S128に移り、冗長データ領域213に冗長データを書き込む、または、読み出しエラー訂正の処理をする。
【0072】
次に、誤り訂正タイプ(TYPE)が冗長データを連続したデータとして処理する場合には、処理S122に分岐し、これを実行する。
【0073】
図1のメモリマップの例では、領域214,215のデータの処理が処理S122の対象となる。また、4バイト単位データであっても、冗長データの格納領域を分割せずに連続データとしている場合には、この処理ルートに入ってくる。
【0074】
処理S122では、誤り訂正タイプが冗長データを2のべき乗のデータとは別に持つ(1バイトの冗長なのでECC奇数と表記)場合、処理S123に分岐する。2のべき乗のデータである4バイト(32ビット)とは別に、7ビット(1バイト)の冗長データを付加する場合がこれにあたる。
【0075】
逆に、2のべき乗の範囲内のデータとする場合、あるいは2のべき乗の範囲内に冗長データとデータを含む場合には、処理S125に分岐する。2のべき乗の範囲内のデータとする場合としては、26ビットのデータを4バイト(32ビット)で処理する場合がこれにあたる。また、2のべき乗の範囲内に冗長データとデータを含む場合としては、57ビット、120ビットのデータなどを8バイト、16バイトで処理する場合がこれにあたる。
【0076】
処理S125に分岐した場合、2のべき乗の範囲(この例では16バイト)内に冗長データとデータを含むので、16バイトを単位として処理すればよい。
【0077】
これに対し処理S123では、2のべき乗のデータ(例えば4バイト)とは別に、冗長データ(1バイト)を有するので、奇数バイトになっている。これを16バイト処理すると、16バイトのデータの境界を越えることがある。このことから、処理S124では、境界をまたぐ時もう一度処理S123を実行するようにしている。
【0078】
図5には、この処理S123のときのメモリデータMEMDATAの内容を示している。図5の上は、4バイトのアクセスデータ(D10、D11、D12、D13)に対して7ビットの冗長データD1E(ダミー1ビットを付加して1バイト)が、バイトアドレスの下位が3から7の範囲に書き込まれ、あるいは読み出す場合を示している。
【0079】
図5の下には、4バイトのアクセスデータ(D20、D21、D22、D23)と冗長データ(D2E)が、16バイトのアドレス境界をまたいでいるケースを示している。バイトアドレスの下位が0から”B”(十進の11)までは、1回のメモリアクセス(列アドレス、制御信号の出力)で処理が完了するが、バイトアドレスの下位が”C”(十進の12)以降は、2回メモリアクセスする。なお、ここで言うバイトアドレスは、メモリデバイス200に与えるアドレスである。アービタ112の出力するREQ_ADRに基づいて算出するなら、AD2+((REQ_ADR−AD2)÷4)×5となる(但し、REQ_ADR、AD2は4の倍数とする)。
【0080】
なお、図5で”M”は、ライト時にデータをマスクしていることを示す。図5のデータパターンにおいて、バイトアドレス0からFまでが1つの列を形成しており、今回のライトはバイトアドレス3から7に行うので、バイトアドレス0から2の期間、バイトアドレス8からFの期間をマスクする。図3において、列アドレス(CA2)指定後の一定時間T1は、バイトアドレス0から2の期間に相当しており、この期間のライトを阻止することで、バイトアドレス3から7のライトを有意の処理とする。
【0081】
図6は、8バイトの単位のデータアクセスで、1バイト(8ビット)の冗長データを付加した例を示している。バイトアドレス境界が0から7の場合に1回のメモリアクセスで良く、8から”F”(十進の15)の時、2回のメモリアクセスとなる。
【0082】
図7は、26ビット単位のデータアクセス(DATA26)で6ビットの冗長データ(ECC6)を付加し、合せて4バイト単位にアクセスする場合の16バイトのメモリ配置例を示している。4バイト単位にアクセスするため、16バイト境界をまたぐことはない。
【0083】
前述のように、図4の分岐処理S122では、誤り訂正のための冗長データを含め4バイト、8バイト、16バイトアクセスを行なう誤り訂正タイプの場合は、処理S125における1回のメモリアクセスを行なうことで、処理を終了する。
【0084】
図8は、512バイト単位にアクセスする場合のメモリマップと冗長データの関係を示している。データ書き込みの場合の処理S126では、先頭アドレスAD1から始まるメモリエリア210に、16バイト単位で512バイトのデータを格納する。
【0085】
同時に誤り訂正符号の冗長データを算出し、処理S128で冗長データエリア211に求めた冗長データを格納する。冗長データは、アドレスレジスタ110に設定した先頭アドレスAD1に、データサイズSIZE1×512バイトを加えたアドレスから冗長データサイズSIZE1×2となる。
【0086】
データ読み出しの場合も同様に、処理S126で16バイト単位にデータを読み出し、冗長データを算出しながらアービタ112に読み出しデータを送出する。最後の転送が終了した処理S128では、冗長データ211から該当する冗長データを読み出し、これまで算出してきた冗長データと排他的論理和(EXOR)をとることで誤り訂正がある場合の誤りのビット位置を求めることができる。なお、メモリ制御回路100に、誤ったビットを訂正する機能を持たせることも可能であるが、512バイト単位のアクセスを行なうリクエスタ1には、512バイトのバッファがあるため、メモリ制御回路100からは、誤り訂正するビット位置を送出することにする。
【0087】
図9に示すハミング符号を用いれば、処理S128で最後に求められる値は、0の時誤りなし、0以外は誤り訂正するビット位置そのものを示す。ただし、パリティに矛盾があれば訂正できないエラーと判定し、DATA_ERRをアサートする。
【0088】
最後に、図9と図10を用いてハミング符号を用いた冗長データを算出する方法を示す。図9は左に入力データ(書き込むデータまたは読み出したデータ)の1ビット(B0からB4095)が記され、それに対応するシンドローム(S0からS7、512バイトのシンドロームは13ビット必要でありS0からS12までとなる)を右側に記した。シンドロームは、1ビットだけの値は、それ自身の誤りを示す。また、1、2、4、8、・・・は除き、図のように、2ビット以上の1か、3、5、6、7、9が順次入力データのビット位置(B0、B1、B2、B3、・・・)に割りつけられる。さらに、入力データの”1”を計数しパリティを求め、メモリ書き込み時は、シンドロームを含めてパリティを生成する。
【0089】
図3に示したように、メモリデバイス200とのインタフェースでは、メモリデバイス200とのデータバス幅16ビット単位にデータを出力、あるいは入力するため、図9のシンドロームを求める表は、一度に16ビット分参照し、演算できれば良く、誤り訂正タイプによって共通に使用することができる。
【0090】
512バイトの場合、256個の13ビットのシンドロームを16個出力する表をハードウェアで実装すれば良い。例えば、512バイトのデータの内N回目の16ビットがそれぞれ1の時のシンドロームは、Nが0の時3、Nが1の時は0x16、Nが2の時は0x27と全てのケースについて予め求められる。これを指定してハードウェアを合成し、生成することができる。ここで、0xはそれ以降の数字が16進数であることを表している。
【0091】
あるいは、この条件を整理してNによってシンドロームを算出することもできる。即ち、シンドロームの値は、シンドローム自身に1ビットだけの誤りがある場合を除いて数えた入力ビット列の順番であるから、N×16にNで決まる値を加算すればよい。具体的には、入力の0ビット目では、この加算する値はN=0で3、N=1で6、N=2と3で7、N=4から7で8、N=8から15までで9、N=16から31までで10、N=32から63までで11、N=64から127までで12、N=128から255までで13となる。
【0092】
このような対応関係を、2ビット目から16ビット目まで記述すれば16ビット分のシンドロームを生成することができる。Nに対する16個のシンドロームを表で表しても良いが、N×16にNで決まる加算値を加える方が、記述性が良く、ハードウェアで合成する際も最適化を容易に行える。実際表で表す場合、256個のNに対して16個のシンドロームを指定するので4096個の値を指定する必要がある。
【0093】
一方、N×16にNで決まる加算値を加える記述では、Nで決まる加算値を約9個の条件で指定できるので、16ビット分の160個以内の値で指定することができる。実際合成した結果は、512バイトのデータに必要な8ビットのNに対して、16個のシンドロームを出力する回路が表で表す場合約6000ゲートのところ、Nで決まる値を求める方法では約4000ゲート実現できた。
【0094】
図10は、入力された16ビット(B15−B0)の個数をカウンタNで求め、カウンタNと、誤り訂正タイプで求められる16個のシンドロームを該入力された16ビットで選択したものを全て順次排他的論理和(EXOR)することで512バイトのシンドロームを求める回路を示している。この回路は、適宜入力のビットをマスクすれば基本的に何ビットでも共通に使用できる。
【符号の説明】
【0095】
10:マイコン
20:メモリコントローラ
100:メモリ制御回路
110:アドレスレジスタ
111:領域分割レジスタ
113:データ制御部
200:メモリデバイス
300:512B単位リクエスタ
400:4B単位リクエスタ
500:26ビット単位リクエスタ

【特許請求の範囲】
【請求項1】
メモリ制御装置であって、
少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該誤り訂正データを読み出して誤り訂正を行なうメモリコントローラを有し、
前記誤り訂正データは前記メモリデバイスからデータと冗長データを連続的に読み出すことを特徴とするメモリ制御装置。
【請求項2】
メモリ制御装置であって、
少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、
該メモリコントローラは、前記少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、前記メモリデバイスに書き込みを行ない、
また、前記メモリコントローラは、前記誤り訂正データを前記メモリデバイスから読み出して誤り訂正を行なうものであって、
前記メモリデバイスに対して書き込み、あるいは読み出しを行なう誤り訂正データは、データと冗長データが連続的に転送されることを特徴とするメモリ制御装置。
【請求項3】
メモリ制御装置であって、
少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データをアドレス空間で分割し格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうメモリコントローラを有し、
該メモリコントローラは、前記少なくとも2種類以上のデータ長のデータに対して冗長なデータを付加した誤り訂正データを生成し、また、前記メモリコントローラは、前記誤り訂正データを前記メモリデバイスから読み出して誤り訂正を行なうものであって、
前記アドレス空間を分割するための情報を指定するレジスタがあることを特徴とするメモリ制御装置。
【請求項4】
請求項3に記載のメモリ制御装置であって、
前記アドレス空間を分割するための情報を指定するレジスタは、アドレス空間を示す先頭アドレスと、アドレス空間を示す空間サイズと、前記少なくとも2種類以上のデータ長を示す情報があることを特徴とするメモリ制御装置。
【請求項5】
メモリ制御装置であって、
複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうとともに、前記メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、前記冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを制御するメモリコントローラとを含む
ことを特徴とするメモリ制御装置。
【請求項6】
請求項5に記載のメモリ制御装置において、
前記メモリデバイスの第1の空間には冗長なデータを当該空間内の別領域に格納しており、
前記メモリコントローラは、先頭アドレスが第1の空間である場合に、冗長なデータを当該空間内の別領域に格納する予め決められたデータ長の誤り訂正タイプであると判断し、
前記データ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、その後冗長データ領域にそれまでに求めた冗長データを書き込みあるいは読み出しエラー訂正を実行する
ことを特徴とするメモリ制御装置。
【請求項7】
請求項5に記載のメモリ制御装置において、
前記メモリデバイスの第2の空間には2のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納されており、
前記メモリコントローラは、先頭アドレスが第2の空間である場合に、2のべき乗の長さの前記データと、これに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、一度のデータアクセス単位長での処理により、2のべき乗の長さの前記データと、これに付加する冗長なデータが得られない場合には、再度データアクセス単位長での処理を実行する
ことを特徴とするメモリ制御装置。
【請求項8】
請求項5に記載のメモリ制御装置において、
前記メモリデバイスの第3の空間には2のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納されており、
前記メモリコントローラは、先頭アドレスが第3の空間である場合に、2のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された誤り訂正タイプであると判断し、データアクセス単位長での処理を実行する
ことを特徴とするメモリ制御装置。
【請求項9】
メモリ制御装置であって、
複数の空間に分割され、各空間には互いに異なるデータ長のデータに対して冗長なデータを付加した誤り訂正データを格納すると共に、空間ごとに冗長なデータを当該空間内の別領域に格納し、あるいは前記データと一体に連続して格納するメモリデバイスと、
該メモリデバイスに対して書き込みと読み出しを行なうとともに、前記メモリデバイスの分割された各空間の先頭アドレスと、各空間の大きさと、前記冗長なデータの格納手法を示す誤り訂正タイプとを記憶し、誤り訂正タイプに応じて書き込みと読み出しを変更して制御するメモリコントローラとを含み、
前記メモリデバイスは、冗長なデータを当該空間内の別領域に格納する第1の空間と、2のべき乗の長さの前記データとこれに付加する冗長なデータが連続して格納された第2の空間と、2のべき乗の長さの範囲内に前記データとこれに付加する冗長なデータが連続して格納された第3の空間のうち、2つ以上の空間を備えている
ことを特徴とするメモリ制御装置。
【請求項10】
請求項9に記載のメモリ制御装置において、
前記メモリコントローラは、第1の空間の処理のときにこの空間でのデータ長になるまでデータアクセス単位長での書き込みあるいは、読み出しを繰り返し、第2の空間の処理のときに前記データアクセス単位長での書き込みあるいは、読み出しを実行し、第3の空間の処理のときに、必要に応じてデータアクセス単位長での書き込みあるいは、読み出しを再実行し、前記誤り訂正タイプに応じて書き込みと読み出しを変更して制御する
ことを特徴とするメモリ制御装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate