以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態1>
図1は、本実施の形態に係る自己修復メモリ回路の構成例を示すブロック図である。
自己修復メモリ回路は、自己修復回路1と、メモリインタフェース回路2と、ECC回路3と、メモリ4と、を備えている。
自己修復回路1は、チップイネーブルA、ライトイネーブルA、アドレスA、およびライトデータAが入力される。チップイネーブルA、ライトイネーブルA、アドレスA、およびライトデータAは、メモリインタフェース回路2から出力される。第1のメモリアクセス制御信号は、メモリインタフェース回路2から出力されて自己修復回路1に入力されるメモリアクセス制御信号に相当し、チップイネーブルA、ライトイネーブルA、アドレスA、およびライトデータAを含む。
また、自己修復回路1は、ECC回路3から出力されたリードデータAおよび誤り検出信号が入力される。また、自己修復回路1は、チップイネーブルB、ライトイネーブルB、アドレスB、およびライトデータBをECC回路3に出力する。同時に、自己修復回路1は、チップイネーブルB、ライトイネーブルB、およびアドレスBをメモリ4に出力する。第3のメモリアクセス制御信号は、自己修復回路1から出力されてECC回路3およびメモリ4に入力されるメモリアクセス制御信号に相当し、チップイネーブルB、ライトイネーブルB、アドレスB、およびライトデータBを含む。
自己修復回路1は、メモリインタフェース回路2から出力された第1のメモリアクセス制御信号と、その第1のメモリアクセス制御信号に応答してECC回路3から出力されるメモリアクセス応答信号と、を監視する。メモリアクセス応答信号は、リードデータAおよび誤り検出信号を含む。
自己修復回路1は、監視結果に応じて後述する各動作処理を行い、第3のメモリアクセス制御信号を生成する。さらに、自己修復回路1は、その生成した第3のメモリアクセス制御信号をECC回路3およびメモリ4に出力する。自己修復回路1の構成および動作の詳細についは後述する。
メモリインタフェース回路2は、第1のメモリアクセス制御信号を自己修復回路1に出力する。詳細は後述するが、第1のメモリアクセス制御信号は、自己修復回路1を介して、ECC回路3およびメモリ4に出力される。また、メモリインタフェース回路2は、ECC回路3からのメモリアクセス応答信号に含まれるリードデータAが入力される。メモリインタフェース回路2の構成および動作の詳細については後述する。
ECC回路3は、自己修復回路1から出力された第3のメモリアクセス制御信号が入力される。また、ECC回路3は、ライトデータCをメモリ4に出力する。また、ECC回路3は、メモリ4から出力されたリードアクセス応答信号が入力される。リードアクセス応答信号は、リードデータBを含む。ECC回路3は、メモリアクセス応答信号(リードデータAおよび誤り検出信号)を自己修復回路1に出力する。また、ECC回路3は、メモリアクセス応答信号のうちのリードデータAをメモリインタフェース回路2に出力する。
ECC回路3は、ECC生成回路31およびECC訂正回路32を備えている。ECC生成回路31は、ライトデータBに基づき誤り訂正符号(ECC)を生成し、生成したECCを本来のライトデータであったライトデータBに付加する。ECC生成回路31は、ECCが付加されたライトデータBをライトデータCとしてメモリ4に出力する。
ECC訂正回路32は、リードデータBからECCを分離して、リードデータBに誤りが発生しているか否かを判断する。ECC訂正回路32は、リードデータBに誤りが発生していた場合にはその誤りを訂正した上で、ECCを分離したデータをリードデータAとして自己修復回路1およびメモリインタフェース回路2に出力する。また、ECC訂正回路32は、誤りを訂正した場合には、誤り検出信号のレベルをアクティブに設定して出力する。なお、ECC訂正回路32は、リードデータBに誤りが発生していなかった場合には、リードデータBからECCを分離したデータを、リードデータAとして自己修復回路1に出力する。
メモリ4は、チップイネーブルB、ライトイネーブルB、アドレスB、およびアドレスBが入力される。チップイネーブルB、ライトイネーブルB、アドレスB、およびアドレスBは、自己修復回路1から出力された第3のメモリアクセス制御信号に含まれる。また、メモリ4は、ECC回路3から出力されたライトデータCが入力される。
メモリ4は、チップイネーブルB、ライトイネーブルB、アドレスB、およびライトデータCと、に基づいてメモリアクセス制御を行う。メモリ4は、ライトアクセス制御信号に応答して、ライトデータCをメモリ4にライトする。メモリ4は、リードアクセス制御信号に応答して、リードアクセス応答信号(リードデータB)をECC回路3に出力する。
図2は、自己修復回路1の詳細な回路構成を示す。
自己修復回路1は、メモリ制御信号選択回路10と、修復データFIFO回路11と、メモリ制御信号生成回路12と、FIFO制御回路13と、一時保存バッファ回路14と、を備えている。
メモリ制御信号選択回路10は、第1のメモリアクセス制御信号が入力される。第1のメモリアクセス制御信号は、自己修復回路1の外部から入力される。また、メモリ制御信号選択回路10は、チップイネーブルA'、ライトイネーブルA'、アドレスA'、およびライトデータA'が入力される。チップイネーブルA'、ライトイネーブルA'、アドレスA'、およびライトデータA'は、メモリ制御信号生成回路12から出力される。第2のメモリアクセス制御信号は、メモリ制御信号生成回路12から出力されてメモリ制御信号選択回路10に入力されるメモリアクセス制御信号に相当し、チップイネーブルA'、ライトイネーブルA'、アドレスA'、およびライトデータA'を含む。
メモリ制御信号選択回路10は、チップイネーブルAのレベルに応じて、第1のメモリアクセス制御信号または第2のメモリアクセス制御信号のいずれかのメモリアクセス制御信号を選択する。メモリ制御信号選択回路10は、選択したメモリアクセス制御信号を第3のメモリアクセス制御信号として、ECC回路3およびメモリ4に出力する。
具体的には、メモリ制御信号選択回路10は、チップイネーブルAのレベルがアクティブである場合(メモリインタフェース回路2からのメモリアクセスが行われていると判別した場合)、第1のメモリアクセス制御信号を選択する。また、メモリ制御信号選択回路10は、チップイネーブルAのレベルがアクティブでない場合(メモリインタフェース回路2からのメモリアクセスが行われていないと判別した場合)、第2のメモリアクセス制御信号を選択する。
図3は、メモリ制御信号選択回路10の詳細な回路構成を示す。
メモリ制御信号選択回路10は、チップイネーブルセレクタ101と、ライトイネーブルセレクタ102と、アドレスセレクタ103と、ライトデータセレクタ104と、を備えている。
チップイネーブルセレクタ101は、チップイネーブルAおよびチップイネーブルA'が入力される。チップイネーブルセレクタ101は、チップイネーブルAがアクティブレベルであればチップイネーブルA、チップイネーブルAがインアクティブレベルであればチップイネーブルA'を選択する。チップイネーブルセレクタ101は、選択したチップイネーブルをチップイネーブルBとして、メモリ制御信号選択回路10の外部に出力する。
ライトイネーブルセレクタ102は、ライトネーブルA、ライトイネーブルA'、およびチップイネーブルAが入力される。ライトイネーブルセレクタ102は、チップイネーブルAがアクティブレベルであればライトイネーブルーブルA、チップイネーブルAがインアクティブレベルであればチップイネーブルA'を選択する。ライトイネーブルセレクタ102は、選択したライトイネーブルをライトイネーブルBとしてメモリ制御信号選択回路10の外部に出力する。
アドレスセレクタ103は、アドレスA、アドレスA'、およびチップイネーブルAが入力される。アドレスセレクタ103は、チップイネーブルAがアクティブレベルであればアドレスA、チップイネーブルAがインアクティブレベルであればアドレスA'を選択する。アドレスセレクタ103は、選択したアドレスをアドレスBとしてメモリ制御信号選択回路10の外部に出力する。
ライトデータセレクタ104は、ライトデータA、ライトデータA'、およびチップイネーブルAが入力される。ライトデータセレクタ104は、チップイネーブルAがアクティブレベルであればライトデータA、チップイネーブルAがインアクティブレベルであればライトデータA'を選択する。ライトデータセレクタ104は、選択したライトデータをライトデータBとしてメモリ制御信号選択回路10の外部に出力する。
なお、図3のメモリ制御信号選択回路10の回路構成では、チップイネーブルAのみに応じて出力するメモリアクセス制御信号の選択を行うものとして説明したが、本発明はこれに限定されない。本発明の趣旨は、メモリアクセスの仕様に応じて論理構成を行うことである。すなわち、選択論理の構成はチップイネーブルAのみに基づくマルチプレクサ構成に限定されず、他の構成としてもよい。
図4は、メモリ制御信号選択回路10の他の回路構成を示す。
メモリ制御信号選択回路10は、図3に示した構成と比較して、時分割制御回路105を備える点が異なっている。
時分割制御回路105は、チップイネーブルセレクタ101、ライトイネーブルセレクタ102、アドレスセレクタ103、およびライトデータセレクタ104を制御する。これによって、時分割制御回路105は、各セレクタによる信号の選択を制御する。図4に示す例では、チップイネーブルAのレベルがアクティブにならないクロックサイクルを持つように制御される。そして、時分割制御回路105は、チップイネーブルAのレベルがアクティブでないクロックサイクルにおいてのみ、チップイネーブルA'を選択する制御を行う。
図2に戻って説明を続ける。
修復データFIFO回路11は、自己修復回路1の外部から誤り検出信号が入力される。また、修復データFIFO回路11は、一時保存バッファ回路14から、監視アドレス、監視データ、およびライト上書イネーブル信号が入力される。また、修復データFIFO回路11は、FIFO制御回路13から、FIFO修復ポインタおよびFIFO記録ポインタが入力される。また、修復データFIFO回路11は、修復アドレス、修復データ、および修復待ち制御フラグを、メモリ制御信号生成回路12に出力する。
修復データFIFO回路11は、修復データバッファを備えている。修復データFIFO回路11は、修復対象のデータおよびメモリアドレスのセットを修復データバッファに保持する。修復対象のデータとは、ECC回路3において誤り訂正が行われた誤り訂正済みのリードデータであり、修復対象のメモリアドレスとは、その誤り訂正済みのリードデータのメモリアドレスである。本実施の形態では、修復データFIFO回路11は、データおよびメモリアドレスのセットを複数保持するために、修復データバッファ0−110、修復データバッファ1−111、...、修復データバッファN−11N(Nは0以上の任意の整数)を備えている。以下、これら複数の修復データバッファを、「修復データバッファ110〜修復データバッファ11N(Nは0以上の任意の整数)」と表記する。
図5に、修復データバッファ11W(Wは0以上のN以下の任意の整数)の詳細な回路構成を示す。修復データバッファ11Wは、修復待ちアドレスレジスタ11W0と、修復待ちデータレジスタ11W1と、修復待ち制御フラグレジスタ11W2と、を備えている。
修復データFIFO回路11は、後述する監視プロセスS0または巡回プロセスS4において、誤り検出信号のレベルがアクティブとなった場合に、修復対象となるデータおよびアドレスを、FIFO記録ポインタの値に応じた修復データバッファ11Wに保持する。これにより、自己修復回路1は、修復対象となるデータおよびアドレスを修復データFIFO回路11に保持する。
具体的には、修復データFIFO回路11は、誤り検出信号のレベルがアクティブとなったときに、FIFO記録ポインタがx(xは0以上のN以下の任意の整数)であった場合、修復データバッファ11xのみについて、修復待ちアドレスレジスタ11x0に監視アドレスを保持し、修復待ちデータレジスタ11x1に監視データを保持し、修復待ち制御フラグレジスタ11x2をアクティブレベルに設定する。なお、修復待ち制御フラグレジスタ11x2のレベルがアクティブである場合には、その修復データバッファ11xが修復待ち状態にあることを示す。
修復データFIFO回路11は、修復待ち制御フラグレジスタ11x2のレベルに応じて、対応する修復待ち制御フラグのビットのレベルを設定する。修復待ち制御フラグは、複数のビット(1102、1112、…、11N2)からなる。修復待ち制御フラグの各ビットは、修復データバッファ110〜修復データバッファ11Nの修復待ち制御フラグレジスタにそれぞれ対応する。修復データFIFO回路11は、修復待ち制御フラグレジスタ11x2がアクティブレベルにある場合には、修復待ち制御フラグのビットのうちの対応するビットのレベルをアクティブに設定し、空き状態となった場合には対応するビットのレベルをインアクティブに設定する。
また、修復データFIFO回路11は、後述する修復プロセスS2において、ライト上書イネーブル信号のレベルがアクティブとなった場合に、FIFO修復ポインタの値に応じた修復データバッファ11Wに保持しているデータを出力する。これにより、自己修復回路1は、修復データFIFO回路11に保持した修復対象となるデータおよびアドレスを、メモリ制御信号生成回路12に出力する。この結果、修復対象のアドレスについて修復対象のデータがメモリ4にライトされ、メモリ4に対する修復が行われる。
具体的には、修復データFIFO回路11は、FIFO修復ポインタがy(yは0以上のN以下の任意の整数)であった場合に、修復データバッファ11yのみについて、修復待ちアドレスレジスタ11y0に保持した監視アドレスを出力し、修復待ちデータレジスタ11y1に保持した監視データを出力し、修復待ち制御フラグレジスタ11y2のレベルにインアクティブを設定する。なお、修復待ち制御フラグレジスタ11y2のレベルがインアクティブである場合には、その修復データバッファ11yが空き状態にあることを示す。
なお、修復データFIFO回路11が出力する修復アドレスの値は、修復データバッファ11yの修復待ちアドレスレジスタ11y0の値と等しくなる。また、修復データFIFO回路11が出力する修復データの値は、修復データバッファ11yの修復待ちデータレジスタ11y1の値に等しくなる。
また、修復データFIFO回路11は、ライト上書イネーブル信号がアクティブである場合、修復データバッファ110〜11Nにそれぞれ保持しているアドレスと、監視アドレスとが同一であるか否かを判別する。修復データFIFO回路11は、修復データバッファ110〜11Nのいずれかが保持している修復待ちアドレスが、監視アドレスと同一であった場合、保持している修復待ちデータレジスタの値を監視データの値に更新する。
具体的には、修復データFIFO回路11は、ライト上書イネーブル信号がアクティブであるときに、修復データバッファ11z(zは0以上のN以下の任意の整数)の修復待ちアドレスレジスタ11z0の値が、監視アドレスの値と同一であった場合、修復待ちデータレジスタ11z1の値を、監視データの値に更新する。
図2に戻って説明を続ける。
メモリ制御信号生成回路12は、自己修復回路1の外部からチップイネーブルAが入力される。また、メモリ制御信号生成回路12は、修復データFIFO回路11から、修復アドレス、修復データ、および修復待ち制御フラグが入力される。メモリ制御信号生成回路12は、第2のメモリアクセス制御信号を出力する。
メモリ制御信号生成回路12は、チップイネーブルAのレベルに応じて、メモリインタフェース回路2によりメモリアクセスが行われているか否かを判別する。メモリ制御信号生成回路12は、チップイネーブルAがインアクティブレベルである場合(メモリインタフェース回路2によりメモリアクセスが行われていないと判別した場合)、後述する修復プロセスS2において、修復データFIFO回路11から出力された修復アドレス、修復データ、および修復待ち制御フラグに基づいて、修復対象となるデータおよびアドレスをメモリ制御信号選択回路10に出力する。
具体的には、メモリ制御信号生成回路12は、修復データFIFO回路11から出力された修復アドレスの値をアドレスA'の値とし、修復データFIFO回路11から出力された修復データをライトデータA'とした、ライトアクセス制御信号を生成する。さらに、メモリ制御信号生成回路12は、チップイネーブルA'にアクティブレベルを出力し、ライトイネーブルA'のレベルにアクティブを出力する。
また、メモリ制御信号生成回路12は、メモリインタフェース回路2によりメモリアクセスが行われていないと判別し、かつ、修復データバッファ110〜修復データバッファ11Nのいずれにも誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAが保持されていない場合、後述する巡回プロセスS4において、メモリ4の全メモリアドレスに対するリードアクセスを行うように、第2のメモリアクセス制御信号を生成する。
具体的には、メモリ制御信号生成回路12は、アドレスA'の値としてメモリ4の任意のアドレスの値を設定したリードアクセス制御信号を生成する。メモリ制御信号生成回路12は、メモリ4の全アドレスを対象とするリードアクセス制御信号を生成するために、設定したアドレスA'の値をインクリメントしていく。さらに、メモリ制御信号生成回路12は、チップイネーブルA'にアクティブレベルを出力し、ライトイネーブルA'のレベルにインアクティブを出力する。
FIFO制御回路13は、自己修復回路1の外部から誤り検出信号が入力される。また、FIFO制御回路13は、メモリ制御信号生成回路12から、ライトイネーブルA'が入力される。また、FIFO制御回路13は、修復データFIFO回路11から修復待ち制御フラグが入力される。また、FIFO制御回路13は、FIFO修復ポインタおよびFIFO記録ポインタを修復データFIFO回路11に出力する。FIFO制御回路13は、修復データFIFO回路11に対して、修復データバッファ110〜修復データバッファ11Nのうち、使用対象とする修復データバッファの指示を行う。
FIFO記録ポインタは、後述する監視プロセスS0および巡回プロセスS4において、監視アドレス(すなわち、誤りが発生したメモリ4のアドレス)と、監視データ(すなわち、発生したデータ誤りを訂正済のデータ)とを、修復データバッファ110〜修復データバッファ11Nのいずれに保持するかを示すポインタである。FIFO制御回路13は、監視プロセスS0または巡回プロセスS4において、修復データバッファ110〜修復データバッファ11Nに監視アドレスおよび監視データを入力した場合に、FIFO記録ポインタの値をインクリメントする。
具体的には、FIFO制御回路13は、誤り検出信号がアクティブであり、かつ、修復待ち制御フラグの複数のビットのうち少なくとも1つのビットのレベルがインアクディブレベルとなった場合に、FIFO記録ポインタの値をインクリメントする。FIFO制御回路13は、全てのビットのレベルがアクティブである場合には、FIFO記録ポインタの値をインクリメントしない。
FIFO修復ポインタは、後述する修復プロセスS2において、修復データおよび修復アドレスを、修復データバッファ110〜修復データバッファ11Nのいずれに保持されたデータおよびアドレスから生成するかを示すポインタである。FIFO制御回路13は、修復プロセスS2において、修復データバッファ110〜修復データバッファ11Nに保持された監視アドレスおよび監視データを出力した場合に、FIFO修復ポインタの値をインクリメントする。具体的には、FIFO制御回路13は、ライトイネーブルA'がアクティブになった場合(すなわち、修復プロセスS2において、メモリ制御信号生成回路12が修復のためのライト動作を行った場合)、FIFO修復ポインタをインクリメントする。
一時保存バッファ回路14は、自己修復回路1の外部から、第1のメモリアクセス制御信号(チップイネーブルA、ライトイネーブルA、アドレスA、およびライトデータA)およびリードデータAが入力される。また、一時保存バッファ回路14は、メモリ制御信号生成回路12から、第2のメモリアクセス制御信号(チップイネーブルA'、ライトイネーブルA'、およびアドレスA')が入力される。また、一時保存バッファ回路14は、監視アドレス、監視データ、およびライト上書イネーブル信号を修復データFIFO回路11に出力する。
一時保存バッファ回路14は、監視プロセスS0ではチップイネーブルAのレベルに応じて、巡回プロセスS4ではチップイネーブルA'のレベルに応じて、メモリアクセスが行われているか否かをそれぞれ判別する。また、一時保存バッファ回路14は、監視プロセスS0ではライトイネーブルAのレベルに応じて、巡回プロセスS4ではライトイネーブルA'のレベルに応じて、ライトアクセスまたはリードアクセスのいずれのメモリアクセスが行われているかをそれぞれ判別する。
一時保存バッファ回路14は、メモリアクセスが行われており、かつ、リードアクセスであると判別した場合、アドレスAおよびリードデータAを一時的に保持し、アドレスAを監視アドレス、リードデータAを監視データ、ライト上書イネーブル信号をインアクティブレベルとしてそれぞれ出力する。また、一時保存バッファ回路14は、メモリアクセスが行われており、かつ、ライトアクセスであると判別した場合、アドレスAを監視アドレス、ライトデータAを監視データ、ライト上書イネーブル信号をアクティブレベルとしてそれぞれ出力する。
ここで、図6を参照して、メモリインタフェース回路2の構成を説明する。図6はメモリインタフェース回路2の詳細な回路構成を示す。
メモリインタフェース回路2は、アクセスポート20と、システムバス21と、主回路0−220〜主回路M−22M(Mは0以上の任意の整数)と、を備えている。
アクセスポート20は、バス接続210を介してシステムバス21と接続する。アクセスポート20は、第1のメモリアクセス制御信号をメモリインタフェース回路2の外部に出力する。また、アクセスポート20は、メモリインタフェース回路2の外部からメモリアクセス応答信号のリードデータAが入力される。
システムバス21は、バス接続210を介してアクセスポート20と接続する。また、システムバス21は、バス接続230を介して主回路0−220と接続する。また、バス接続231を介して主回路1−221と接続する。以下同様にして、バス接続23Mを介して主回路M−22Mと接続する。
主回路0−220はバス接続230を介してシステムバス21と接続する。主回路1−221はバス接続231を介してシステムバス21と接続する。以下同様にして、主回路M−22Mはバス接続23Mを介してシステムバス21と接続する。
主回路0−220、主回路1−221、...、主回路M−22Mは、それぞれバスマスタとして機能する。図6に示すように、メモリインタフェース回路2では、主回路0−220、主回路1−221、...、主回路M−22Mがメモリ4を共有する構成を採用しており、主回路0−220、主回路1−221、...、主回路M−22Mに対するアービトレーションをシステムバス21が行う。これによって、バススレーブとして機能するアクセスポート20を、主回路0−220、主回路1−221、...、主回路M−22Mが共有する。
アクセスポート20は、システムバス21からのアクセス要求に従い、メモリ4に対する第1のメモリアクセス制御信号を生成して出力する。メモリインタフェース回路2は、メモリ4に対するメモリアクセス制御に関して、リードアクセス制御信号またはライトアクセス制御信号を生成して出力する。
続いて以下では、自己修復回路1の動作の一例を説明する。図7は、自己修復回路1により実行される自己修復方法における動作手順の具体例を示すフローチャートである。自己修復方法は、監視プロセスS0と、修復プロセスS2と、巡回プロセスS4と、を含んでいる。
まず、図7を参照して、監視プロセスS0の詳細を説明する。監視プロセスS0は、ステップS00、ステップS01、ステップS02、ステップS03、ステップS04、ステップS05、ステップS06、ステップS1を含む。
ステップS00において、一時保存バッファ回路14は、チップイネーブルAのレベルに応じて、メモリインタフェース回路2によりメモリアクセスが行われているか否かを判別する。一時保存バッファ回路14は、チップイネーブルAがアクティブレベルである場合(メモリインタフェース回路2によりメモリアクセスが行われていると判別した場合)、ステップS01へと処理を進める。
また、ステップS00において、チップイネーブルAがインアクティブレベルである場合(メモリインタフェース回路2によりメモリアクセスが行われていないと判別した場合)、後述する修復プロセスS2におけるステップS20へと処理が進められる。
ステップS01において、一時保存バッファ回路14は、ライトイネーブルAのレベルに応じて、メモリアクセスがライトアクセスまたはリードアクセスのいずれであるかを判別する。一時保存バッファ回路14は、ライトイネーブルAがアクティブレベルである場合(ライトアクセスであると判別した場合)、アドレスAの値を監視アドレスの値とし、ライトデータAの値を監視データの値とし、ライト上書イネーブルをアクティブレベルとして、修復データFIFO回路11に出力する。また、一時保存バッファ回路14は、ライトイネーブルAがインアクティブレベルである場合(リードアクセスであると判別した場合)、ステップS05へと処理を進める。
ステップS02において、修復データFIFO回路11は、修復データバッファ110〜修復データバッファ11Nに、修復待ちデータが存在するか否かを判別する。修復データFIFO回路11は、全ての修復データバッファ110〜修復データバッファ11Nについて、それぞれの修復待ち制御フラグレジスタのレベルを確認する。修復データFIFO回路11は、いずれか1の修復待ち制御フラグレジスタのレベルがアクティブである場合(修復待ち状態の修復待ちデータが存在すると判別した場合)、ステップS03へと処理を進める。また、修復データFIFO回路11は、全ての修復待ち制御フラグレジスタのレベルがインアクティブである場合(修復待ち状態の修復待ちデータが存在しないと判別した場合)、監視プロセスS0を終了する。
ステップS03において、修復データFIFO回路11は、修復データバッファ110〜修復データバッファ11Nのうちで修復待ち制御フラグレジスタのレベルがアクティブである修復データバッファについて、その修復データバッファの修復待ちアドレスレジスタの値と、一時保存バッファ回路14から出力された監視アドレスの値(ライトされたアドレスAの値に等しい。)と、を比較する。修復データFIFO回路11は、修復データバッファ110〜修復データバッファ11Nのうちで修復待ちアドレスレジスタが監視アドレスと等しいものが存在した場合には、ステップS04へと処理を進める。修復データFIFO回路11は、修復データバッファ110〜修復データバッファ11Nのうちで修復待ちアドレスレジスタが監視アドレスと等しいものが存在しない場合には、監視プロセスS0を終了する。
ステップS04において、修復データFIFO回路11は、修復データバッファ110〜修復データバッファ11Nのうちで修復待ちアドレスレジスタと監視アドレスの値が等しかったものについて、その修復データバッファの修復待ちデータレジスタの値を、監視データ(ライトデータAの値に等しい。)の値によって上書する。
他方、ステップS05において、一時保存バッファ回路14は、メモリインタフェース回路2から出力されたアドレスAと、ECC回路3から出力されたリードデータAと、を一時的に保持し、ステップS06へと処理を進める。
ステップS06において、修復データFIFO回路11は、誤り検出信号のレベルに応じて、リードデータAが訂正されているか否かを判別する。修復データFIFO回路11は、誤り検出信号のレベルがアクティブである場合(監視データ(一時保存バッファ回路14が一時的に保持しているリードデータAに等しい)が訂正されていると判別した場合)、ステップS1へと処理を進める。
修復データFIFO回路11は、誤り検出信号のレベルがインアクティブである場合(リードデータAが訂正されていないと判別した場合)、監視プロセスS0を終了する。なお、ステップS1でのFIFO入力処理の詳細は後述する。
図8は、ステップS1のFIFO入力処理を示すフローチャートである。図8を参照して、ステップS1のFIFO入力の詳細を説明する。FIFO入力処理は、ステップS10、ステップS11、ステップS12、ステップS13を含む。
ステップS10において、修復データFIFO回路11は、修復待ち制御フラグレジスタのレベルに応じて、修復データバッファが空き状態であるか否かを判別する。修復データFIFO回路11は、例えば、FIFO記録ポインタの値をx(x=0〜Nのいずれか)としたときに、修復データバッファx−11xの修復待ち制御フラグレジスタ11x2のレベルがインアクティブである場合、修復データバッファx−11xは空き状態であると判別し、ステップS11へと処理を進める。
修復データFIFO回路11は、修復待ち制御フラグレジスタ11x2のレベルがアクティブである場合、修復データバッファx−11xは空き状態でない(つまり、修復待ちである。)と判別し、FIFO入力を終了する。なお、このような場合は、全ての修復データバッファが修復待ち状態であり、新たにデータを入力することができない状態である。
ステップS11において、修復データFIFO回路11は、FIFO記録ポインタの値に対応する修復データバッファについて、修復対象となるデータを記録する。具体的には、修復データFIFO回路11は、監視アドレス(すなわち、一時保存バッファ回路14がステップS05で一時的に保持して出力したアドレスA)を、修復データバッファx−11xの修復待ちアドレスレジスタ11x0に保持する。また、修復データFIFO回路11は、監視データ、すなわち、一時保存バッファ回路14がステップS05で保持して出力したリードデータAを、修復データバッファx−11xの修復待ちデータレジスタ11x1に保持する。そして、修復データFIFO回路11は、ステップS12へと処理を進める。
ステップS12において、修復データFIFO回路11は、修復データバッファx−11xの修復待ち制御フラグレジスタ11x2のレベルをアクティブに設定する。そして、ステップS13へと処理を進める。ステップS13において、FIFO制御回路13は、FIFO記録ポインタの値をインクリメントし、ステップS1での処理を終了する。
次に、図7に戻って、修復プロセスS2の詳細を説明する。修復プロセスS2は、ステップS20、ステップS3を含む。
ステップS20において、メモリ制御信号生成回路12は、チップイネーブルAのレベルがインアクティブである場合(メモリインタフェース回路2によりメモリアクセスが行われていない場合)、修復データFIFO回路11から出力された修復待ち制御フラグのレベルに応じて、修復データFIFO回路11の修復データバッファに修復待ちデータが保持されているか否かを判別する。
メモリ制御信号生成回路12は、修復待ち制御フラグのいずれか1ビットのレベルがアクティブである場合(修復待ちデータが保持されていると判別した場合)、ステップS3へと処理を進める。メモリ制御信号生成回路12は、修復待ち制御フラグのいずれか1ビットのレベルがインアクティブである場合(修復待ちアドレスおよび修復待ちデータを保持していないと判別した場合)、後述する巡回プロセスS4のステップS40へと処理を進める。なお、ステップS3でのFIFO出力処理の詳細は後述する。
図9は、FIFO出力処理を示すフローチャートである。図9を参照して、ステップS3のFIFO出力の詳細を説明する。FIFO出力処理は、ステップS30、ステップS31、ステップS32、ステップS33を含む。
ステップS30において、メモリ制御信号生成回路12は、修復データバッファ11y(yはFIFO修復ポインタが示す値。)に保持された修復対象のデータおよびアドレスを用いて、メモリ4に対するライト(すなわち修復処理)を行う。具体的には、メモリ制御信号生成回路12は、チップイネーブルA'にアクティブレベルを出力し、ライトイネーブルA'にアクティブレベルを出力し、修復データバッファ11yの修復アドレスの値をアドレスA'の値として出力し、修復データバッファ11yの修復データの値をライトデータA'の値として出力する。
そして、チップイネーブルAのレベルがアクティブでないため(つまり、メモリインタフェース回路2によりメモリアクセスが行われていないため)、メモリ制御信号選択回路10は、メモリ制御信号生成回路12から出力された第2のメモリアクセス制御信号を第3のメモリアクセス制御信号として選択し、選択した第3のメモリアクセス制御信号をECC回路3およびメモリ4に対して出力する。ステップS31へと処理を進める。
ステップS31において、修復データFIFO回路11は、修復データバッファ11yの修復待ち制御フラグレジスタ11y2の値をクリアする。そして、ステップS32へと処理を進める。
ステップS32において、FIFO制御回路13は、FIFO修復ポインタの値をインクリメントし、ステップS3での処理を終了する。
次に、図7に戻って、巡回プロセスS4の詳細を説明する。巡回プロセスS4は、ステップS40、ステップS41、ステップS42、ステップS43、ステップS1を含む。
ステップS40において、メモリ制御信号生成回路12は、チップイネーブルAのレベルがインアクティブである場合(メモリインタフェース回路2によりメモリアクセスが行われていない場合)、メモリ4の全てのメモリアドレスに対するリード(すなわち、巡回処理)を行う。具体的には、ステップS40において、メモリ制御信号生成回路12は、チップイネーブルA'にアクティブレベルを出力し、ライトイネーブルA'のレベルにインアクティブレベルを出力し、アドレスA'の値として任意のメモリアドレスの値を設定して出力する。
また、ステップS40において、メモリ制御信号選択回路10は、チップイネーブルAのレベルがアクティブでないため(つまり、メモリインタフェース回路2によりメモリアクセスが行われていないため)、メモリ制御信号生成回路12から出力された第2のメモリアクセス制御信号を、ECC回路3およびメモリ4に対して出力する第3のメモリアクセス制御信号として選択および出力する。そして、ステップS43へと処理を進める。
ステップS43において、メモリ制御信号生成回路12は、ステップS40で出力したアドレスA'について、そのアドレスA'のメモリアドレスの値をインクリメントする。そして、ステップS41へと処理を進める。
ステップS41において、一時保存バッファ回路14は、メモリ制御信号生成回路12から出力されたアドレスA'と、ECC回路3から出力されたリードデータAと、を一時的に保持し、ステップS42へと処理を進める。
ステップS42において、修復データFIFO回路11は、誤り検出信号のレベルに応じて、リードデータA'が訂正されているか否かを判別する。修復データFIFO回路11は、誤り検出信号のレベルがアクティブである場合(リードデータA'が訂正されていると判別した場合)、ステップS1へと処理を進める。ステップS1でのFIFO入力処理は上述した処理と同様であるため、ここではその説明を省略する。修復データFIFO回路11は、誤り検出信号のレベルがインアクティブである場合(リードデータA'が訂正されていないと判別した場合)、巡回プロセスS4を終了する。
ステップS43において、メモリ制御信号生成回路12は、ステップS40で出力したアドレスA'について、そのアドレスA'のメモリアドレスの値をインクリメントし、巡回プロセスS4を終了する。
上述したステップS00、S01、S02、S05、S06、S1での動作処理によって、「監視プロセスS0において、リードデータの誤り訂正が検出された場合に、自己修復回路1が、修復待ちデータを修復データFIFO回路11に保持する」という動作処理を実現することができる。
また、上述したステップS00、S20、S3での動作処理によって、「メモリインタフェース回路2がメモリ4にアクセスしていないタイミングにおいて、修復データFIFO回路11に保持しておいた誤り訂正済のデータを、自己修復回路1がメモリ4に上書する。」という動作処理を実現することができる。これにより、修復プロセスを実現することができる。
また、上述したステップS00、S01、S02、S03、S04での動作処理によって、「監視プロセスS0において、誤り訂正済のデータが保持されて修復待ち状態であるときに、メモリインタフェース回路2が修復予定のアドレスにライトアクセスを行い上書する場合であっても、自己修復回路1が、保持している誤り訂正済のデータをそのライトアクセスに追従して修復する。これにより、自己修復回路1が、修復待ちデータを自動的に更新する。」という動作処理を実現することができる。
また、上述したS00、S20、S40、S41、S42、S43での動作処理によって、「メモリインタフェース回路2がメモリ4にアクセスしていないタイミングにおいて、自己修復回路1が、メモリ4の全てのアドレスを順次リードする。これにより、自己修復回路1が、メモリ4内のデータ誤り発生の有無をチェックすると共に、誤り発生を検出した際には修復待ちデータとして修復データFIFO回路11に保持する。」という動作処理を実現することができる。これにより、巡回プロセスを実現することができる。
図10A、図10B、図10Cは、自己修復回路1による修復方法における、監視プロセスおよび修復プロセスの動作処理を示すタイミングチャートである。図10A、図10B、図10Cを参照して、自己修復回路1の監視プロセスと修復プロセスの動作例を説明する。
図10Aを参照する。t01に示す監視プロセス期間において、ECC誤り検出が検出される(同図の602)。この場合、自己修復回路1は、メモリインタフェース回路2により出力されたアドレスAを誤りの発生したアドレス値(同図の600)として、修復データバッファ110の修復待ちアドレスレジスタ1100(同図の603)に保持する。また、自己修復回路1は、ECC回路3により訂正済のリードデータA(同図の601)を、修復データバッファ110の修復待ちデータレジスタ1101(同図の604)に保持する。
続けて誤りが発生し、ECC誤りが検出される(同図の622)。この場合、自己修復回路1は、上記と同様に、誤りの発生したアドレスの値(同図の620)を、修復データバッファ111の修復待ちアドレスレジスタ1110(同図の623)に保持する。また、自己修復回路1は、訂正済のリードデータA(同図の622)を、修復データバッファ111の修復待ちデータレジスタ1111(同図の624)に保持する。
図10Bを参照する。自己修復回路1は、修復待ちデータを保持した状態のまま、メモリインタフェース回路2とメモリ4の間でメモリアクセスが行われていない未使用時間(同図のt10)を検出する。この場合、メモリ制御信号生成回路12が、チップイネーブルA'をアクティブレベルにし(同図の605)、ライトイネーブルA'のレベルをアクティブにし(同図の606)、誤りの発生したアドレスの値(同図の607)をアドレスA'の値にし、訂正済のリードデータの値(同図の608)をライトデータA'の値にして出力する。
図10Cを参照する。自己修復回路1は、ECC回路3およびメモリ4に対して、チップイネーブルB(同図の609)、ライトイネーブルB(同図の610)、アドレスB(同図の613)、およびライトデータB(同図の614)を出力する。これにより、ライトデータBによってメモリ4のデータがライトされることで、誤りの発生したデータが修復される。
自己修復回路1は、修復データバッファ110に保持したデータおよびアドレスを用いて、修復対象データのライト動作に必要とする第2のメモリアクセス制御信号を生成する。そして、自己修復回路1は、第2のメモリアクセス制御信号を出力した後、修復データバッファ110内の修復待ち制御フラグレジスタ1102のレベルをクリアする。
同様にして、自己修復回路1は、修復データバッファ111に保持したデータおよびアドレスを用いて、修復対象データのライト動作に必要とする第2のメモリアクセス制御信号(同図の629、630、633、634)を生成する。そして、自己修復回路1は、第2のメモリアクセス制御信号を出力した後、修復データバッファ111内の修復待ち制御フラグレジスタ1112のレベルをクリアする。
上述した動作処理によって、メモリ4に対するメモリアクセスが行われていない未使用期間t10において、誤りが発生したメモリ4のアドレスに対して、訂正済のデータを上書することができる。
図11A、図11Bは、自己修復回路1による修復方法における、修復待ち期間における修復データ更新の動作処理を示すタイミングチャートである。図11A、図11Bを参照して、自己修復回路1が修復待ちデータを保持しているときに、メモリインタフェース回路2が修復対象となるメモリアドレスにデータを上書する場合の監視プロセスおよび修復プロセスの動作例を説明する。
図11Aを参照する。t04に示す監視プロセス期間において、誤り検出信号のレベルがアクティブになる(同図の644)。この場合、自己修復回路1は、メモリインタフェース回路2により出力されたアドレスAを誤りの発生したアドレスの値(同図の640)として、修復データバッファ110の修復待ちアドレスレジスタ1100(同図の645)に保持する。また、自己修復回路1は、ECC回路3により訂正済のリードデータA(同図の642)を、修復データバッファ110の修復待ちデータレジスタ1101(同図の646)に保持する。
図11Bを参照する。修復データバッファ110に修復待ちデータが存在するときに、その修復待ちデータのアドレスについて同じ値のアドレスであるデータが上書きされる(同図の641のアドレスおよび同図の643のデータに関して、同じ値のアドレスのデータについてライトアクセスがあった場合。)。この場合、自己修復回路1は、修復データバッファ110内に既に保持されている訂正済データの値(同図の646)を、メモリインタフェース回路2が出力したライトデータAの値(同図の647)によって上書する。
自己修復回路1は、メモリインタフェース回路2とメモリ4の間でメモリアクセスが行われていない未使用時間(同図のt12)を検出する。この場合、自己修復回路1は、メモリ制御信号生成回路12において、チップイネーブルA'をアクティブレベルにし(同図の648)、ライトイネーブルA'をアクティブレベルにし(同図の649)、誤りの発生したアドレスの値(図の650)をアドレスA'の値にし、訂正済のリードデータの値(同図の651)をライトデータA'の値にして出力する。
そして、自己修復回路1は、ECC回路3およびメモリ4に対して、チップイネーブルB(同図の656)、ライトイネーブルB(同図の657)、アドレスB(同図の658)、およびライトデータB(同図の659)を出力する。これにより、ライトデータBによってメモリ4のデータがライトされることで、誤りの発生したデータが修復される。
自己修復回路1は、修復データバッファ110に保持したデータおよびアドレスを用いて、修復対象データのライト動作に必要とする第2のメモリアクセス制御信号を生成する。そして、自己修復回路1は、第2のメモリアクセス制御信号を出力した後、修復データバッファ110内の修復待ち制御フラグレジスタ1102のレベルをクリアする。
上述した動作処理によって、メモリ4に対するメモリアクセスが行われていない未使用期間t12において、修復待ち中にデータが更新された場合においても、誤りの発生したアドレスに対して、更新された訂正済のデータを上書することができる。
図12A、図12Bは、自己修復回路1による修復方法における、巡回プロセスの動作処理を示すタイミングチャートである。図12A、図12Bを参照して、自己修復回路1の動作タイミングにおける巡回プロセスの動作例を説明する。
図12Aを参照する。t20に示す巡回プロセス期間において、修復データバッファ110に修復データが存在しない状態で、かつ、メモリインタフェース回路2とメモリ4の間でメモリアクセスが行われていない未使用時間になる。この場合、メモリ制御信号生成回路12は、チップイネーブルA'のレベルをLow(同図の680)にし、ライトイネーブルA'のレベルをLow(図の681)にし、任意の値をアドレスA'の値(同図の682)にして出力する。これにより、メモリ制御信号生成回路12は、メモリ4に対するリードアクセス制御信号を生成する。
図12Bを参照する。メモリ制御信号生成回路12からのリードアクセス制御信号に対して、メモリ4はリードアクセス応答としてリードデータBを出力する。リードデータBに対して誤りの訂正が検出される(同図の683)。この場合、自己修復回路1は、誤りの発生したアドレスの値を、修復データバッファ110の修復待ちアドレスレジスタ1100の値(同図の684)として保持する。また、自己修復回路1は、訂正済リードデータBの値を、修復待ちデータレジスタ1101の値(同図の685)として保持する。
修復データバッファ110に修復データを保持した状態で、かつ、メモリインタフェース回路2とメモリ4の間でメモリアクセスが行われていない未使用時間(同図のt21期間)になる。この場合、自己修復回路1は修復プロセスに移行する。自己修復回路1は、メモリ制御信号生成回路12において、チップイネーブルA'をアクティブレベルにし(同図の680)、ライトイネーブルA'をアクティブレベルにし(図の686)、誤りの発生したアドレスの値(同図の687)をアドレスA'の値にし、訂正済のリードデータの値(同図の688)をライトデータA'の値にして出力する。これにより、メモリ制御信号生成回路12は、メモリ4に対するライトアクセス制御信号を生成する。
そして、自己修復回路1は、ECC回路3およびメモリ4に対して、チップイネーブルB(同図の689)、ライトイネーブルB(同図の690)、アドレスB(同図の691)、およびライトデータB(同図の692)を出力する。これにより、t21期間において訂正済のリードデータを、誤りの発生したメモリ4のアドレスに対して上書する。修復プロセスを完了する。
修復プロセスの完了後、再度、メモリインタフェース回路2とメモリ4の間でメモリアクセスが行われていない未使用時間(同図のt22期間)になる。自己修復回路1は、再び巡回プロセスに移行する。自己修復回路1において、メモリ制御信号生成回路12は、t20期間での手順と同様にして、メモリ4に対するリードアクセス制御信号の生成を再開する。このとき、メモリ制御信号生成回路12は、アドレスA'の値(同図の682)をインクリメントして出力する。
上述した動作処理によって、メモリ4に対するメモリアクセスが行われていない未使用期間t20において、巡回プロセスの動作処理と、巡回プロセス中に誤りが検出された後のt21期間における修復プロセスの動作処理と、以降のt22期間における再度の巡回プロセスの動作処理と、を実現することができる。
以上に説明したように、自己修復回路1によるメモリ4の誤りデータの修復方法では、メモリインタフェース回路2がメモリ4にリードアクセスするときに、リードデータの誤りが検出された場合、誤りが訂正されたデータを自己修復回路1に蓄積する。そして、修復方法では、メモリインタフェース回路2とメモリ4の間でライトアクセスおよびリードアクセスのいずれもが行われていないタイミングを検出し、蓄積しておいた訂正済データをメモリ4に上書きする動作処理を行う。上述した本実施の形態によって奏する効果を、以下により具体的に説明する。
第1の効果として、自己修復回路1は、メモリインタフェース回路2とメモリ4の間で行われる通常のメモリアクセス制御動作(ライトアクセスおよびリードアクセス)を阻害することなく、メモリ4のデータ誤りのチェックを行うことができる。このため、システムの応答時間の低下を防止することができる。したがって、本発明に関連する技術の問題点を解決することができる。
第2の効果として、ソフトエラーなどのメモリに発生したデータ誤りに対する誤動作を防止することができる。上述した監視プロセス、修復プロセス、および巡回プロセスが継続して動作することによって、メモリ4に発生するデータ誤りを、順次修復することができる。これにより、メモリ4に保持されたデータの信頼性を高めることができる。その結果、メモリ4のデータ誤りに起因して発生する予期不可能な制御ソフトウェア上の誤動作を防ぐことができる。
第3の効果として、メモリの面積を小型化することができる。自己修復回路1によるデータ誤りの修復を行わずに、メモリ4にデータ誤りのない状態を長時間にわたって維持するためには、多ビット訂正可能なECC回路を必要とする。しかし、これは、メモリ面積の増大を招くことになる。これに対して本実施の形態では、上述した監視プロセス、修復プロセス、および巡回プロセスが継続して動作することによって、メモリ4に発生したデータ誤りが蓄積されないうちに順次修復されていくために、ECC回路の訂正能力が低いものであってもメモリ4にデータ誤りのない状態を維持することができる。この結果、多ビット訂正可能なECC回路が不要となり、メモリの面積を小型化することができる。
<発明の実施の形態2>
本実施の形態では、上述した発明の実施の形態1に係る自己修復回路1の変形例について説明する。上述した実施の形態1と比較して、本実施の形態では、自己修復回路1の構成が相違する。このため、以下では、自己修復回路1の構成を中心に説明し、他の構成についてはその説明を省略する。
図13Aは、本実施の形態に係る自己修復回路1の構成を示す。本実施の形態に係る自己修復回路1の構成は、上述した実施の形態1および後述する実施の形態3、4と比較して、最も基本的な構成を示す。
自己修復回路1は、メモリ制御信号選択回路10と、修復データFIFO回路11と、メモリ制御信号生成回路12と、を備えている。修復データFIFO回路11は、修復データバッファ110を備えている。
メモリ制御信号選択回路10は、メモリ4へのメモリアクセスが行われているか否かに応じて、第1のメモリアクセス制御信号または第2のメモリアクセス制御信号のいずれかを選択する。メモリ制御信号選択回路10は、選択したメモリアクセス制御信号を第3のメモリアクセス制御信号として出力する。
メモリ制御信号選択回路10は、メモリ4へのメモリアクセスが行われている場合に、第1のメモリアクセス制御信号を選択する。メモリ制御信号選択回路10は、メモリ4へのメモリアクセスが行われていない場合に、第2のメモリアクセス制御信号を選択する。
修復データFIFO回路11は、メモリ4へのリードアクセスが行われており、かつ、ECC回路3において誤り訂正が行われた場合に、ECC回路3において誤り訂正が行われた誤り訂正済のリードデータAと、その誤り訂正済みリードデータAのアドレスAと、を修復データバッファ110に保持する。
また、修復データFIFO回路11は、修復データバッファ110に保持した誤り訂正済のリードデータAおよびその誤り訂正済みリードデータAのアドレスAを、修復データおよび修復アドレスとしてメモリ制御信号生成回路12に出力する。さらに、修復データFIFO回路11は、修復データバッファ110に誤り訂正済のリードデータAおよびその誤り訂正済みリードデータAのアドレスAを保持した場合には、修復待ち制御フラグのビットのレベルをアクティブに設定して、メモリ制御信号生成回路12に出力する。
メモリ制御信号生成回路12は、メモリ4へのメモリアクセスが行われておらず、かつ、修復待ち制御フラグのビットのレベルがアクティブである場合に、修復データバッファ110に保持された誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAを、ライトデータA'およびアドレスA'としてメモリ制御信号選択回路10に出力する。さらに、この場合、メモリ制御信号生成回路12は、チップイネーブルA'にアクティブレベルを出力し、ライトイネーブルA'にアクティブレベルを出力する。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。また、本実施の形態によれば、自己修復による回路規模のオーバーヘッドを最小限に抑制することができる。また、本実施の形態では、ユースケース上、メモリに対するアクセス頻度が低いため、未使用期間が多い場合に特に好適である。また、本実施の形態は、メモリリード・ライトアクセスに対してメモリが同一サイクルにより応答する場合において使用すると好適である。
なお、図13Bは、図13Aに示す自己修復回路1の構成の変形例を示す。図13Bに示す自己修復回路1では、図13Aに示した自己修復回路1と比較して、メモリ制御信号生成回路12から出力されたチップイネーブルA'、ライトイネーブルA'、およびアドレスA'が、修復データFIFO回路11に入力される点が相違する。図13Bに示した自己修復回路1によれば、上述した監視プロセスS0および修復プロセスS2に加えて、上述した巡回プロセスS4を実行することができる。他の構成および動作については図13Aに示した自己修復回路1の構成および動作と同一であるため、ここではその詳細な説明を省略する。
<発明の実施の形態3>
本実施の形態では、上述した発明の実施の形態1、2に係る自己修復回路1の変形例について説明する。上述した実施の形態1、2と比較して、本実施の形態では、自己修復回路1の構成が相違する。このため、以下では、自己修復回路1の構成を中心に説明し、他の構成についてはその説明を省略する。
図14は、本実施の形態に係る自己修復回路1の構成を示す。本実施の形態に係る自己修復回路1の構成は、上述した実施の形態2と比較して、修復データFIFO回路11が、複数の修復データバッファ110〜11Nを備えている。複数の修復データバッファ110〜11Nは、誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAのセットをそれぞれ保持する。
また、本実施の形態に係る自己修復回路1の構成は、上述した実施の形態2と比較して、FIFO記録ポインタおよびFIFO修復ポインタを修復データFIFO回路11に出力するFIFO制御回路13をさらに備えている。
修復データFIFO回路11は、修復データバッファ110〜11Nのそれぞれに対応する複数のビットからなる修復待ち制御フラグを、FIFO制御回路13およびメモリ制御信号生成回路12に出力する。修復データFIFO回路11は、修復データバッファ110〜11Nのうちの対応する修復データバッファにおいて、誤り訂正済のリードデータおよびその誤り訂正済みのリードデータのアドレスを保持している場合には、対応する修復待ち制御フラグのビットのレベルをアクティブに設定する。修復データFIFO回路11は、対応する修復データバッファにおいて誤り訂正済のリードデータおよびその誤り訂正済みのリードデータのアドレスを保持していない場合には、対応する修復待ち制御フラグのビットのレベルをインアクティブに設定する。
FIFO制御回路13は、チップイネーブルAのレベルがアクティブであり、かつ、ライトイネーブルAのレベルがインアクティブであり(すなわち、リードアクセスであり)、かつ、誤り検出信号のレベルがアクティブとなり、かつ、修復待ち制御フラグの複数ビット(1102、1112、…、11N2)の少なくとも1つのレベルがインアクティブとなった場合に、FIFO記録ポインタの値をインクリメントする。
修復データFIFO回路11は、メモリ4へのリードアクセスが行われており、かつ、ECC回路3において誤り訂正が行われた場合に、誤り訂正済のリードデータAおよび誤り訂正済みのリードデータAのアドレスAのセットを、複数の修復データバッファ110〜11NのうちのFIFO記録ポインタが指示する修復データバッファに保持する。
メモリ制御信号生成回路12は、第2のメモリアクセス制御信号を生成する場合には、ライトイネーブルA'のレベルをアクティブに設定して、FIFO制御回路13およびメモリ制御信号選択回路10に出力する。
FIFO制御回路13は、ライトイネーブルA'のレベルがアクティブとなった場合に、FIFO修復ポインタの値をインクリメントする。
修復データFIFO回路11は、メモリ4へのメモリアクセスが行われていない場合に、複数の修復データバッファ110〜11NのうちのFIFO修復ポインタが指示する修復データバッファについて、その修復データバッファに保持された誤り訂正済のリードデータAおよび誤り訂正済みのリードデータAのアドレスAのセットを、メモリ制御信号生成回路12に出力する。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。本実施の形態においても、自己修復による回路規模のオーバーヘッドをより効果的に抑制することができる。また、本実施の形態では、ユースケース上、メモリに対するアクセス頻度が高いため、未使用期間が少ない場合に特に好適である。また、本実施の形態は、メモリリード・ライトアクセスに対してメモリが同一サイクルにより応答する場合において使用すると好適である。
<発明の実施の形態4>
本実施の形態では、上述した発明の実施の形態1、2、3に係る自己修復回路1の変形例について説明する。上述した実施の形態1、2、3と比較して、本実施の形態では、自己修復回路1の構成が相違する。このため、以下では、自己修復回路1の構成を中心に説明し、他の構成についてはその説明を省略する。
図15は、本実施の形態に係る自己修復回路1の構成を示す。本実施の形態に係る自己修復回路1の構成は、上述した実施の形態2と比較して、一時保存バッファ回路14をさらに備えている。
一時保存バッファ回路14は、第1のメモリアクセス制御信号に基づいて、メモリ4へのリードアクセスが行われているか否かを判別する。また、一時保存バッファ回路14は、誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスを一時的に保存する
一時保存バッファ回路は、メモリ4へのリードアクセスが行われたと判別した場合に、ライト上書イネーブル信号のレベルをアクティブに設定する。また、この場合、一時保存バッファ回路は、一時的に保存した誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAを、それぞれ監視データおよび監視アドレスとして、修復データFIFO回路11に出力する。
修復データFIFO回路11は、誤り検出信号に基づいてECC回路3において誤り訂正が行われたか否かを判別する。修復データFIFO回路11は、ECC回路3において誤り訂正が行われたと判別した場合に、一時保存バッファ回路14から出力された監視データおよび監視アドレスを修復データバッファ110に保持する。
また、修復データFIFO回路11は、ライト上書イネーブル信号のレベルがアクティブに設定された場合に、修復データバッファ110に保持した監視データおよび監視アドレスを、それぞれ修復データおよび修復アドレスとして設定し、メモリ制御信号生成回路12に出力する。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。本実施の形態においても、自己修復による回路規模のオーバーヘッドをより効果的に抑制することができる。また、本実施の形態では、ユースケース上、メモリに対するアクセス頻度が高いため、未使用期間が少ない場合に特に好適である。また、本実施の形態は、一般的なメモリ(メモリリード・ライトアクセスに対して、メモリが次サイクル以降に応答するメモリである場合)において、使用すると好適である。
<発明の実施の形態5>
本実施の形態では、上述した発明の実施の形態1に係る自己修復回路1の動作の変形例について説明する。上述した実施の形態1と比較して、本実施の形態では、自己修復回路1により実行される自己修復方法における動作手順が相違する。このため、以下では、自己修復方法における動作手順を中心に説明し、他の構成についてはその説明を省略する。なお、本実施の形態に係る自己修復回路1の構成例は、上述した実施の形態1〜4のいずれかの構成例と同様とすればよい。ここでは、実施の形態2に係る自己修復回路1の構成例を備える場合を例に説明する。
図16は、本実施の形態に係る自己修復方法における動作手順の具体例を示すフローチャートを示す。本実施の形態に係る自己修復方法における動作手順は、上述した実施の形態1および後述する実施の形態6、7と比較して、最も基本的な動作手順を示す。本実施の形態に係る自己修復方法における動作手順は、監視ステップとしての監視プロセスS0と、修復ステップとしての修復プロセスS2と、を含む。
監視プロセスS0において、自己修復回路1は、メモリ4へのリードアクセスが行われているか否かを判別する(ステップS00、S01)。さらに、自己修復回路1は、メモリ4へのリードアクセスが行われている場合、ECC回路3において誤り訂正が行われたか否かを判別する(ステップS06)。そして、自己修復回路1は、メモリ4へのリードアクセスが行われており、かつECC回路3において誤り訂正が行われた場合、ECC回路3において誤り訂正が行われた誤り訂正済のリードデータAと、その誤り訂正済みリードデータAのアドレスAと、を修復データバッファ110に保持する(ステップS1)。
なお、ステップS1でのFIFO入力処理は、図8に示したFIFO入力処理と同様とすればよい。ただし、修復データFIFO回路11が備える修復データバッファ110の個数が1である場合には、FIFO制御回路13によるFIFO記録ポインタを使用せずに済む。このため、この場合には、図8に示したステップS13を省略することができる。
修復プロセスS2において、自己修復回路1は、メモリ4へのメモリアクセスが行われていない場合に、修復データバッファ110に保持した誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAを含む第2のメモリアクセス制御信号を生成して、その生成した第2のメモリアクセス制御信号を第3のメモリアクセス制御信号として出力する(ステップS3)。
なお、ステップS3でのFIFO出力処理は、図9に示したFIFO出力処理と同様とすればよい。ただし、修復データFIFO回路11が備える修復データバッファ110の個数が1である場合には、FIFO制御回路13によるFIFO修復ポインタを使用せずに済む。このため、この場合には、図9に示したステップS32を省略することができる。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。また、本実施の形態によれば、回路構成が単純化されるため、自己修復回路そのものの信頼性が向上される。
<発明の実施の形態6>
本実施の形態では、上述した発明の実施の形態1、5に係る自己修復回路1の動作の変形例について説明する。上述した実施の形態1、5と比較して、本実施の形態では、自己修復回路1により実行される自己修復方法における動作手順が相違する。このため、以下では、自己修復方法における動作手順を中心に説明し、他の構成についてはその説明を省略する。なお、本実施の形態に係る自己修復回路1の構成例は、上述した実施の形態1〜4のいずれかの構成例と同様とすればよい。ここでは、実施の形態2に係る自己修復回路1の構成例を備える場合を例に説明する。
図17は、本実施の形態に係る自己修復方法における動作手順の具体例を示すフローチャートを示す。本実施の形態に係る自己修復方法における動作手順は、上述した実施の形態5と比較して、巡回ステップとしての巡回プロセスS4をさらに含む。巡回プロセスS4は、ステップS40、S42、S43、S1を含む。(a)ステップが、ステップS40、S42、S43を含む。(b)ステップが、S42、S1を含む。
まず、上述した修復プロセスS2において、自己修復回路1は、修復データバッファ110〜11Nに誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAが保持されているか否かを判別する(ステップS20)。
巡回プロセスS4の(a)ステップにおいて、自己修復回路1は、メモリ4へのメモリアクセスが行われておらず、かつ、修復データバッファ110に誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAが保持されていない場合、メモリ4の全メモリアドレスに対するリードアクセスを行うように第2のメモリアクセス制御信号を生成して、その生成した第2のメモリアクセス制御信号を第3のメモリアクセス制御信号として出力する(ステップS40、S42、S43)。
巡回プロセスS4の(b)ステップにおいて、自己修復回路1は、メモリ4へのメモリアクセスが行われていない場合、ECC回路3において誤り訂正が行われたか否かを判別する(ステップS42)。さらに、自己修復回路1は、メモリ4へのメモリアクセスが行われておらず、かつECC回路3において誤り訂正が行われた場合、ECC回路3において誤り訂正が行われた誤り訂正済のリードデータAと、その誤り訂正済みリードデータAのアドレスA'と、を修復データバッファ110に保持する(ステップS1)。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。本実施の形態によっても、回路構成が単純化されるため、自己修復回路そのものの信頼性についても相応に向上される。
<発明の実施の形態7>
本実施の形態では、上述した発明の実施の形態1、5、6に係る自己修復回路1の動作の変形例について説明する。上述した実施の形態1、5、6と比較して、本実施の形態では、自己修復回路1により実行される自己修復方法における動作手順が相違する。このため、以下では、自己修復方法における動作手順を中心に説明し、他の構成についてはその説明を省略する。なお、本実施の形態に係る自己修復回路1の構成例は、上述した実施の形態1〜4のいずれかの構成例と同様とすればよい。ここでは、実施の形態2に係る自己修復回路1の構成例を備える場合を例に説明する。
図18は、本実施の形態に係る自己修復方法における動作手順の具体例を示すフローチャートを示す。本実施の形態に係る自己修復方法における動作手順は、上述した実施の形態5と比較して、メモリ4へのライトアクセス中に修復データバッファ110に保持された修復待ちデータを上書きするステップをさらに含む、
修復待ちデータを上書きするステップにおいて、自己修復回路1は、メモリ4へのライトアクセスが行われている場合に、修復データバッファ110に誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAが保持されているか否かを判別する(ステップS02)。さらに、自己修復回路1は、その保持されている誤り訂正済みのリードデータAのアドレスAとライトアクセスのアドレスAとが等しいか否かを判別する(ステップS03)。そして、自己修復回路1は、メモリ4へのライトアクセスが行われており、かつ、修復データバッファ110に誤り訂正済のリードデータAおよびその誤り訂正済みのリードデータAのアドレスAが保持されていると共に、その保持されている誤り訂正済みのリードデータAのアドレスAとライトアクセスのアドレスAとが等しい場合に、その保持されている誤り訂正済みのリードデータAをライトアクセスのライトデータの値によって上書きする(ステップS04)。
本実施の形態によっても、上述した第1の効果、第2の効果、および第3の効果を奏することができる。本実施の形態によっても、回路構成が単純化されるため、自己修復回路そのものの信頼性についても相応に向上される。
<その他の実施の形態>
上述した複数の実施の形態は、適宜組み合わせることも可能である。さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。