以下、本発明の実施の形態について図面を参照して説明する。ただし、図面は模式的なものであり、寸法の比率などは現実のものとは異なることに留意すべきである。また、図面の相互間においても、互いの寸法の関係や比率が異なる部分が含まれていることは勿論である。
[第1の実施形態]
図1は、この発明の第1の実施形態にしたがった集積回路装置の基本構成を示すものである。なお、ここでは、1チップ(単一チップ)上に複数の半導体回路部品を集積した半導体集積回路(半導体チップ)において、たとえば、小容量のメモリ回路(メモリマクロ)ごとにECC用の部分コード生成/デコード回路(周辺回路)を設け、各メモリマクロ内のビットエラーをデータの読み出し時に一括訂正して出力するように構成した場合を例に説明する。また、この実施形態では、各メモリマクロのサイズ(容量またはアドレス数(ワード数×ビット幅)に応じたメモリ構成)を同一とした場合について説明する。
すなわち、本実施形態の半導体集積回路は、たとえば図1に示すように、半導体基板100上に、CPU(Central Processing Unit)200、および、ECC回路システムを含むECCメモリ回路300など、複数の半導体回路部品が集積されてなる構成とされている。ECCメモリ回路300は、たとえば、上記CPU200に共通に接続された、複数のメモリ回路部310nと1つのECCコード記憶部320とによって構成されている。複数のメモリ回路部310nは、それぞれ、データ格納用のメモリマクロ(たとえば、SRAMマクロ)311、および、部分ECCコード生成/デコード回路312などを有して構成されている。
因みに、この半導体集積回路の場合、メモリマクロ311の待機状態であるNOP(No OPeration)ウェイティング動作を利用し、NOPウェイティング状態にあるメモリマクロ311に対して割り込みをかけることによって、たとえば、複数のメモリマクロ311にそれぞれ分割されて記憶されたデータの一括したECC処理が可能となっている。
図2は、上記したECCメモリ回路300の基本構成を示すものである。なお、ここでは、各メモリ回路部310nにおけるメモリマクロ311の容量を、それぞれ、32bit×512word=16キロビット(以下、kb)とし、このようなメモリ構成とされたメモリマクロ311をそれぞれ含むメモリ回路部310nが全部で8つ(n=1〜8)配置されているものとして説明する(32bit×8=256bit)。
すなわち、各メモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 8 には、たとえば図2に示すように、メモリマクロ311の周辺部に、それぞれ、上記部分ECCコード生成/デコード回路312を構成する、部分ECCコード生成回路(Code_gen)313および部分ECCデコード回路(シンドロームデコーダ/S_dec)314が設けられている。また、これらの制御回路用として、メモリ休止状態制御回路であるNOPコントローラ(NOP cont.)315、および、アドレスコンパレータ(ADDR comp.)316が設けられている。さらに、上記メモリマクロ311の周辺部には、それぞれ、データセレクタとしてのマルチプレクサ317a,317b,317c、および、フリップフロップ(F/F)318が配置されている。
なお、初段のメモリ回路部310- 1 を除く、他のメモリ回路部310- 2 ,310- 3 ,・・・,310- 8 には、それぞれ、加算器(排他的論理和算器)319が設けられている。加算器319のそれぞれは、部分ECCコード生成回路313の各出力(エラー訂正コード)をXOR(順不同)し、最終出力として、256ビットの全保持データに対応する10ビットのECCコードデータ(排他的論理和算値の最終値)を生成するもので、たとえば12ビットのバス幅を有する信号線(メモリ間バス)SLを介して相互に接続されている。本実施形態の場合、上記信号線SLは、コード生成終了信号(1ビット)およびフラグ情報(1ビット)のための、2ビットのバス幅を有する信号線(for ECC contorol)を含んでいる。
一方、ECCコード記憶部320には、コード記憶メモリ(Code mem)321に加えて、アドレスカウンタ(Address counter)322、ステートコントローラ(State cont.)323、コードレジスタ(バッファ)324、および、加算器325a,325bが設けられている。
上記メモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 8 において、各メモリマクロ311は、たとえば、容量(ワード数×ビット幅)が16kbとされた小規模メモリであって、そのビット幅に応じて、入力データ(書き込むべき所定のビット幅を有する一連のデータ列Data/In)を等分割して記憶(プログラム)するようになっている。メモリマクロ311の各アドレスには、フラグ記憶部であるフラグ格納用ビット311aまたはセルが、1ビット(または、複数ビット)ずつ追加されている。フラグ格納用ビット311aは、対応するメモリマクロ311に記憶されているデータの書き換えが行われたか否かを示す、アドレスごとのライト更新履歴管理を可能にするためのフラグ情報(Flag bit)を記憶するものである。このフラグ情報は、信号線SLより各加算器319を介して、ステートコントローラ323に送られる。これにより、上記フラグ情報は、休止状態にあるメモリマクロ311への割り込み時に、対応する部分ECCコード生成回路313によるエラー訂正コードの生成を指示する制御信号となる。
各部分ECCコード生成回路313は、NOP割り込みサイクル(コード生成モードまたはデータ比較/訂正モード)時に、対応するNOPコントローラ315からの制御信号にもとづいて、対応するメモリマクロ311より出力される保持データ(出力データData/Outともいう)を行列成分である部分ハミングコード行列式の規則にしたがってコード化することによって、上記保持データに対応する部分ECCコード(エラー訂正コード)をそれぞれ生成するものである。すなわち、部分ECCコード生成回路313は、それぞれ、全I/O(この例の場合、256ビットI/O)に対応する長大なハミングコード行列のうち、各メモリマクロ311のI/O(この例の場合、32ビットI/O)に対応する部分ハミングコード行列式を用いて、保持データをコード化するものである。部分ハミングコード行列式の詳細については後述する。
生成された部分ECCコードは、それぞれ、信号線SLより各加算器319,325aを介して、加算器325b、および、コードレジスタ324に送られる。なお、この部分ECCコード生成回路313は、データの書き込み時およびNOP割り込みサイクル時以外は、常に、“0”を出力するようになっている。
また、上記各部分ECCコード生成回路313は、部分ECCコードの生成が終了すると、コード生成終了信号(1ビット)を出力するように構成されている。このコード生成終了信号は、信号線SLより各加算器319を介して、ステートコントローラ323に送られる。コード生成終了信号は、次ステップの、上記NOPコントローラ315からのリセット信号によりリセットされる。
各部分ECCデコード回路314は、NOP割り込みサイクル時に、対応するNOPコントローラ315からの制御信号にもとづいて、シンドローム信号(加算器325bの出力である、コード記憶メモリ321の出力と加算器325aの出力との排他的論理和算値)を、部分ハミングコード行列式の規則にしたがってデコードするものである。このデコード結果であるエラービット検出信号(メモリ訂正ビット)は、訂正回路としての対応するマルチプレクサ317cに送られる。なお、この部分ECCデコード回路314は、NOP割り込みサイクル時以外は、常に、“0”を出力するようになっている。
各マルチプレクサ317cは、複数(この例の場合、32ビット分)のプレクサを並列に接続してなり、対応する部分ECCデコード回路314からのエラービット検出信号に応じて、対応するメモリマクロ311からの保持データをビットごとにインバートまたはノットインバートさせることによって、保持データ内のエラービットだけを訂正するものである(つまり、対応するメモリマクロ311からの保持データのエラービットのみをインバートさせるものである)。このマルチプレクサ317cの訂正データ(インバート出力およびノットインバート出力)は、対応するマルチプレクサ317bに送られる。
各マルチプレクサ317bは、対応するNOPコントローラ315からの制御信号またはアドレスコンパレータ316からの制御信号に応じて、入力データData/Inもしくはマルチプレクサ317cによる訂正データのいずれかを選択するものである。このマルチプレクサ317bの出力は、対応するメモリマクロ311に送られる。
各マルチプレクサ317aは、対応するNOPコントローラ315からの制御信号に応じて、アドレスカウンタ322の出力(カウント値)である内部アドレス、もしくは、入力アドレス(外部制御アドレス信号)ADDRのいずれかを選択するものである。このマルチプレクサ317aの出力は、対応するメモリマクロ311に送られる。
各アドレスコンパレータ316は、アドレスカウンタ322の出力とステートコントローラ323の出力と入力アドレスADDRとに応じてデータセレクタ制御信号を生成し、データセレクタであるマルチプレクサ317bに出力するものである。たとえば、データ訂正ステート状態(データ比較/訂正モード)において、入力アドレスADDRと内部アドレス(アドレスカウンタ322のカウント値)とが一致した際には、その訂正動作を中断させるためのデータセレクタ制御信号“0”をマルチプレクサ317bに出力し、入力データData/Inが選択されるように制御する。
各NOPコントローラ315は、各部にモード(ステート)に応じたメモリ動作を実行させるためのものであって、外部命令としてのCPU200からのメモリ制御信号(たとえば、リード/ライト制御信号R/W、チップイネーブル信号、クロック信号など)およびアドレスカウンタ322の出力とステートコントローラ323の出力とに応じて、上記メモリ制御信号、アドレスセレクタ制御信号、データセレクタ制御信号、部分ECCコード生成回路制御信号、および、部分ECCデコード回路制御信号を生成し、それぞれ対応する、メモリマクロ311、部分ECCコード生成回路313、部分ECCデコード回路314、および、マルチプレクサ317a,317bを制御するものである。たとえば、クロック入力の直前において、CPU200からの指示(外部命令)がNOPウェイティング状態以外のときには通常サイクル通りのメモリ動作(読み出し/書き込みなど)を行うように各部を制御し、NOPウェイティング状態で、かつ、ステートコントローラ323の出力がNOP割り込みを指示しているときには、NOP割り込みサイクルを実行するように各部を制御し、ステートに応じたメモリ動作を行わせる。
各フリップフロップ318は、対応するメモリマクロ311からの出力データを、CPU200などのECCメモリ回路300の外部に出力する際に一時的に保持するものであって、1ステップ前の出力データを常に保持するようになっている。
一方、上記ECCコード記憶部320において、コード記憶メモリ321は、全メモリマクロ311の各ビットに対応するECCコードをすべて記憶するもので、加算器325aの出力である、コードレジスタ324の出力と加算器319の最終出力との加算値(10ビットのECCコードデータ)を入力としている。
コードレジスタ324は、NOP割り込みサイクル時に、加算器325aの1つ前の出力を保持するものである。なお、このコードレジスタ324は、各NOPコントローラ315の出力信号の論理積値を、レジスタ出力制御用の入力信号の1つとするように構成されている(図示していない)。
加算器325aは、最終段のメモリ回路部310- 8 の、加算器319の出力(各メモリマクロ311の出力データに応じた部分ECCコード生成回路313からの部分ECCコードの加算値(最終出力))とコードレジスタ324の出力とを加算し、上記コード記憶メモリ321に記憶するECCコードデータを生成するものである。
加算器325bは、加算器325aの出力とコード記憶メモリ321の出力とを加算し、シンドローム信号を生成するものである。生成されたシンドローム信号は、信号線SL’を介して、各部分ECCデコード回路314に送られるとともに、ステートコントローラ323に送られる。
ステートコントローラ323は、各部分ECCコード生成回路313からのコード生成終了信号と、フラグ格納用ビット311aに記憶されたフラグ情報と、加算器325bからのシンドローム信号とにもとづいて、各NOPコントローラ315および各アドレスコンパレータ316に制御信号を出力するとともに、アドレスカウンタ322にセット/リセット信号を出力し、ステートの変更などを制御するものである。
アドレスカウンタ322は、ステートコントローラ323からのセット信号に応じて、カウント値(アドレス)を1つずつインクリメントし、各NOPコントローラ315、各アドレスコンパレータ316、各マルチプレクサ317a、および、コード記憶メモリ321に出力するものである。また、アドレスカウンタ322のカウント値は、ステートコントローラ323からのリセット信号によってリセットされる。
次に、上記した、部分ECCコード生成回路313および部分ECCデコード回路314について、さらに詳しく説明する。一般的に、ECCコードは、あるデータを元にハミングコード行列式によって規則化されたコード生成回路を通して生成される。
ここで、ECCコードをc、ハミング行列をH、データをUとする。すると、これらの関係は、
c=H×UT
となる(ただし、Tはビット幅)。
本実施形態の場合、たとえば図3に示すように、256ビット(32ビット×8)の入力データ(所定のビット幅を有する一連のデータ列)から10ビットのECCコードデータを生成するようにしている。したがって、ハミング行列HをHn=(H1 ,H2 ,・・・,H8 )とし、各メモリマクロ311の出力データUをUn=(d1 ,d2 ,・・・,d8 )とした場合、生成されるECCコードデータc’は、
c’=Hn×UnT =H1 ×d1 T +H2 ×d2 T +・・・+H8 ×d8 T
と表すことができる。つまり、このハミング行列Hn=H1 ,H2 ,・・・,H8 を、それぞれ、各メモリマクロ311の出力データをコード化する際の規則(部分ハミングコード行列式)として適用したものが、部分ECCコード生成回路313である。
本実施形態においては、部分ECCコード生成回路313を、各メモリマクロ311のビット幅に合わせて配置した構造としている。しかし、部分ECCコード生成回路313の総面積は、従来(既存)のECC回路システムのコード生成回路とほぼ一緒である。その一方で、各メモリマクロ311間をつなぐ信号線SLは、コード化された10ビットのデータを転送するだけなので、大幅に配線数(バス幅)を減らすことが可能になる。つまり、コード化される前の256ビット分のデータを転送するのに必要であった従来の配線数を、たったの10ビット分にまで縮小できる。
部分ECCコード生成回路313に限らず、同様の理由によって、部分ECCデコード回路314についても、各メモリマクロ311のビット幅に合わせて、従来のECC回路システムにおけるデコード回路を分割して配置することにより、信号線SL’の配線数を大幅に縮小することができる。
なお、このような構成とすれば、さらにメモリマクロの総ビット幅を大きくし、たとえば512ビットまたは1024ビットとした場合にも、実際のメモリマクロ間の配線数は高々11ビットまたは12ビット程度にしかならないので、従来では不可能であった大規模のビット幅でECC回路システムを実現することが可能になる。
次に、上述した構成の集積回路装置のアクセス方法について説明する。一般に、メモリ回路の制御状態には、読み出し/書き込みなどの通常サイクルでのメモリ動作状態のほかに、メモリ回路がいかなる動作もせずに待機状態となるNOPウェイティング状態が存在する。本実施形態では、たとえば図4に示すように、このNOPウェイティング状態に割り込みをかけ、NOPウェイティング状態に代わってECC処理を行うことを基本動作としている。
その一例として、まずは、ECCコード生成処理について説明する。ここでは、仮に、各メモリマクロ311のアドレス“n”の保持データをもとに、ECCコードデータを生成する場合を例に説明する。
まず、各メモリマクロ311において、NOPウェイティング状態が発生するまで、各NOPコントローラ315は待機する。CPU200からの指示により、もし、あるメモリマクロ311がNOPウェイティング状態になると、対応するNOPコントローラ315は、ステートコントローラ323からの指示およびアドレスカウンタ322の出力に応じて、そのメモリマクロ311を制御する。つまり、ステートコントローラ323からの指示がNOP割り込みの場合には、NOPコントローラ315は、NOPウェイティング状態に代えてNOP割り込みサイクルを実行し、対応するメモリマクロ311からアドレス“n”の保持データを読み出させる(NOP→Rn)。この保持データは、対応する部分ECCコード生成回路313を通ってコード化(部分ECCコードに変換)された後、信号線SLおよび加算器319,325aを介して、コードレジスタ324に送られる。一度、このNOP割り込みサイクルが行われたメモリマクロ311は、次の指示が送られてくるまで、再び待機(NOPウェイティング)状態に戻る。この待機状態においては、部分ECCコード生成回路313の出力はすべて“0”となるように制御されるため、期待されない部分ECCコードがコードレジスタ324に転送されることはない。
同様にして、ステートコントローラ323からの指示およびアドレスカウンタ322の出力に応じて、すべてのメモリマクロ311のアドレス“n”の保持データが読み出されて、逐次、コード化される。そして、そのコード化された各部分ECCコードは、順に、コードレジスタ324内に蓄積される。このコードレジスタ324内には、最終的に、各部分ECCコードの排他的論理和算値(ECCコードデータ)が格納される。こうして、すべてのメモリマクロ311に対するNOP割り込みサイクルが終了する(NOPウェイティング状態が終了する)と、コードレジスタ324内に蓄積されているECCコードデータが、コード記憶メモリ321のアドレス“n”に書き込まれる。以上で、ECCコード生成処理は終了し、次のステップの進むことができる。
このようなアクセス方法を採用することによって、1つ1つのメモリ回路を完全に独立させて動作させることが可能になる。したがって、従来のような、通常サイクルの合間に行われる、ECC処理のための中断サイクルによるスピード劣化や煩雑な制御からは無縁となる。
ここで、各メモリマクロ311は、保持データの書き込みおよび読み出しが独立に行われる。このため、一度、コード記憶メモリ321にECCコードデータを格納した後に、一部でも、メモリマクロ311のアドレス“n”の保持データが書き換えられると、そのECCコードデータは使用できなくなる。つまり、新たなECCコードデータを生成し直す必要がでてくる。
この保持データの書き換え(ライト動作)にともなう、新たなECCコードデータの生成を矛盾なく管理できるようにするために、各メモリマクロ311の各アドレスにはフラグ格納用ビット311aが用意されている。本実施形態においては、たとえば図5に示すように、通常サイクルでの保持データの書き換えが行われるたびに、必ず、対応するアドレス“n”のフラグ格納用ビット311aが“0”なるフラグ情報によって書き換えられる(Wn“0”)。なお、このフラグ格納用ビット311aには、コード生成処理を行う際に事前に“1”なるフラグ情報が書き込まれる。これにより、保持データの書き込み履歴の管理が容易に可能となる。すなわち、ステートコントローラ323では、各メモリマクロ311のフラグ格納用ビット311aをチェック(比較)することのみによって、保持データの書き換え(ライト動作)が行われたか否かを簡単に認識できる。
図6は、上記した構成における、ECC処理シーケンスを示すフローチャートである。ここでは、各メモリマクロ311に一度ずつアクセスしてECCコードデータの生成などを行うサイクルを1ステートとした場合について示している。なお、このフローチャートにおいては、各ステートの判定、アドレスカウンタ322の制御などは、ステートコントローラ323によって行われる。
まず、シーケンスの最初では、ステートコントローラ323がアドレスカウンタ322の出力に応じてNOPコントローラ315を制御することにより、各メモリマクロ311のあるアドレス“n”のフラグ格納ビット311aのフラグ情報が読み込まれる。そして、すべてのフラグ情報が“1”であるかが調べられる。もし、1つでも“0”のフラグ情報があればコード生成モードへ、すべてのフラグ情報が“1”であればデータ比較/訂正モード(データ訂正ステート状態)へ移行する。
コード生成モードでは、ステートコントローラ323によって各NOPコントローラ315が制御されることにより、まず先に、各メモリマクロ311の、アドレスカウンタ322の出力に応じたアドレス“n”の、すべてのフラグ格納ビット311aに“1”なるフラグ情報が書き込まれる。そして、次のNOP割り込みサイクルにおいて、ステートコントローラ323の制御により、そのアドレス“n”の保持データが読み出される。このとき、すでに保持データが書き換えられており、もし、対応するフラグ格納ビット311aのフラグ情報が“0”になっていた場合には、再度、フラグ情報としての“1”の書き込みが行われる。
すべてのフラグ情報が“1”の状態において、各メモリマクロ311のアドレス“n”から読み出された保持データは、それぞれ、対応する部分ECCコード生成回路313に送られる。これにより、NOPコントローラ315の制御のもと、それぞれ、対応する部分ECCコード生成回路313により、部分ハミングコード行列式の規則にしたがって、部分ECCコードが生成される。各部分ECCコード生成回路313にて生成された部分ECCコードは、信号線SLおよび加算器319,325aを介してMUXされた後、逐次、コードレジスタ324に送られる。
こうして、コードレジスタ324に、すべてのアドレス“n”に対する、部分ECCコードに対応するECCコードデータが蓄えられる。このことは、ステートコントローラ323において、各部分ECCコード生成回路313からのコード生成終了信号により判断される。これにより、コードレジスタ324に蓄えられたECCコードデータが、コード記憶メモリ321のアドレス“n”に書き込まれて、コード生成モードは終了される。
一方、データ比較/訂正モードでは、上記したすべてのフラグ情報が“1”の状態の場合と同様にして、各部分ECCコード生成回路313による部分ECCコードの生成が行われる。すなわち、ステートコントローラ323によって、各メモリマクロ311の、アドレスカウンタ322の出力に応じたアドレス“n”の、すべてのフラグ格納ビット311aに“1”なるフラグ情報が書き込まれていることが確認されると、各NOPコントローラ315によって、それぞれ、アドレス“n”の保持データが読み出される。各メモリマクロ311のアドレス“n”から読み出された保持データは、それぞれ、対応する部分ECCコード生成回路313に送られる。これにより、NOPコントローラ315の制御のもと、それぞれ、対応する部分ECCコード生成回路313により部分ECCコードが生成される。各部分ECCコード生成回路313にて生成された部分ECCコードは、信号線SLおよび加算器319,325aを介して、逐次、コードレジスタ324に送られる。こうして、コードレジスタ324に、すべての部分ECCコードに対応するECCコードデータが蓄えられる。このECCコードデータは、後のシンドローム信号の生成に供される。
また、ステートコントローラ323の制御により、アドレスカウンタ322の出力(アドレス“n”)に応じて、対応するECCコードデータの、コード記憶メモリ321からの読み出しが行われる。コード記憶メモリ321より読み出されたECCコードデータは、加算器325bにて、加算器325aを介して供給される、コードレジスタ324に蓄えられているECCコードデータと比較(加算)され、シンドローム信号となる。そして、ステートコントローラ323において、そのシンドローム信号をもとにECCコードデータのチェックが行われ、シンドローム信号に問題がなければ、データ比較/訂正モードはそのまま終了される(S=0)。
これに対し、シンドローム信号に問題があった場合、次のNOP割り込みサイクルにおいて、再度、メモリマクロ311からの保持データの読み出しが行われる。つまり、コード記憶メモリ321より読み出されたECCコードデータと、コードレジスタ324に蓄えられたECCコードデータとの間に、たとえば一致しないビットが存在すると、それがエラービットとして検出される。このエラービットが検出されると、ステートコントローラ323によって、NOPコントローラ315が制御されることにより、エラービットを含む保持データが、対応するメモリマクロ311のアドレス“n”より読み出される。読み出された保持データは、対応するマルチプレクサ317cに送られる。このマルチプレクサ317cは、上記シンドローム信号をもとに、対応する部分ECCデコード回路314によって制御される。
各部分ECCデコード回路314では、対応するNOPコントローラ315の制御にもとづいて、上記シンドローム信号が、それぞれ部分ハミングコード行列式の規則にしたがってデコードされる。これにより、エラービット検出信号が生成される。そして、このエラービット検出信号が、対応するマルチプレクサ317cに送られることにより、エラービットに対応する保持データのみが反転されて、マルチプレクサ317bに送られる。こうして、各メモリマクロ311に記憶されている全保持データに対し、一括したECC処理が行われる。
このとき、ステートコントローラ323により、入力アドレスADDRまたはアドレスカウンタ322からの内部アドレスにしたがって、対応するアドレスコンパレータ316が制御される。このアドレスコンパレータ316によって、対応するマルチプレクサ317bが制御される。また、このマルチプレクサ317bは、対応するNOPコントローラ315によって制御される。さらに、入力アドレスADDRおよびアドレスカウンタ322からの内部アドレスが供給されるマルチプレクサ317aが、対応するNOPコントローラ315によって制御される。これにより、マルチプレクサ317cからの訂正データは、対応するメモリマクロ311に送られ、上記内部アドレスに応じたアドレスに書き込まれる。つまり、訂正済データによる書き戻しが行われる。こうして、データ比較/訂正モードは終了される。
なお、通常サイクルでのライト動作時においては、対応するNOPコントローラ315が、リード/ライト制御信号R/Wにしたがって制御されるとともに、マルチプレクサ317bが、対応するNOPコントローラ315およびアドレスコンパレータ316によって制御される。また、マルチプレクサ317aが、対応するNOPコントローラ315によって制御される。これにより、マルチプレクサ317bにて入力データData/Inが選択されて、対応するメモリマクロ311に送られ、上記入力アドレスADDRに応じたアドレスに書き込まれる。
同様に、データ比較/訂正モードにおいて、アドレスコンパレータ316での比較により、入力アドレスADDRと内部アドレスとが一致した際には、その訂正動作を中断させるためのデータセレクタ制御信号“0”がマルチプレクサ317bに出力されて、入力データData/Inが選択される。すなわち、上記入力アドレスADDRに応じて、そのアドレスの保持データがすでに書き換えられていると判断された場合には、その訂正動作は中断され、データ比較/訂正モードは終了される。
コード生成モードおよびデータ比較/訂正モードが一通り終了すると、ステートコントローラ323によってアドレスカウンタ322が動作され、再度、次のアドレスによる同様のECC処理シーケンスが繰り返される。このシーケンスを、全アドレスに対して周期的に行うことで、定期的にソフトエラーのチェックを行うことができる。
この1アドレスに対するECC処理シーケンスを、たとえば図7に示すように、100サイクルに1回の頻度で行うと仮定する。このとき、100サイクルの動作のうち、1〜数サイクルのNOPウェイティング状態がアクティブになるだけのため、パワー増加はアクティブ動作(通常サイクル)時に比べて高々数%に過ぎない。また、32ワード×32ビットの8個のメモリマクロ311に対して、100MHz動作をさせた場合、各アドレスに対するECC処理シーケンスは、毎秒30回もの頻度で行われることになる。これをソフトエラー率(SER)に換算すると、SER=2×10-5err/h/Mb(Qcrit=2fC)とした場合には、SER=1となる時間までに5.1×109 回のチェックが可能となる。これは、実にECC回路システムを搭載しない場合と比較して、約9桁も改善することが可能となり、SER改善の効果としては十分である。
図8は、上記した構成における、面積のオーバーヘッドを見積もった際の結果(アドレス空間)を示すものである。本実施形態の構成によれば、ECC回路システムを搭載しない場合と比較して、面積の増加を全体で11.0%程度に抑えることが可能となる。因みに、従来のECC回路システムの場合、コード記憶メモリのみで約22%の面積の増加となる。
上記したように、複数のメモリマクロに対し、メモリマクロごとに部分ECCコード生成/デコード回路を設けるとともに、各メモリマクロに記憶された全保持データを一括して訂正できるようにしている。すなわち、ECCのためのコード生成回路およびデコード回路を、各メモリマクロのビット幅に応じて分割させて配置する一方、コードデータを記憶するコード記憶メモリを共有させ、メモリマクロのNOPウェイティング状態への割り込みを利用して、ECC処理を行うようにしている。これにより、コード生成回路およびデコード回路の総面積をほとんど増加させることなく、配線数(配線領域)を大幅に削減できるようになる。したがって、メモリマクロの通常のメモリ動作にもほとんど影響を与えることなしに、一括したECC処理を施すことができるとともに、ECC回路システムの搭載による、チップ面積の増加を従来に比べて飛躍的に抑えることが可能となるものである。
特に、複数のメモリマクロを個別に制御できるため、コード生成モード時およびデータ比較/訂正モード時に、すべてのメモリマクロの同じアドレスを同時にアクセスする場合にも、従来のユーザーに対するアクセス制約が非常に煩雑になるという欠点を回避でき、メモリアクセスの自由度を格段に向上させることが可能となる。
[第2の実施形態]
図9は、この発明の第2の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300aの構成例(アドレス空間)を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、サイズの異なる(ただし、この実施形態ではワード幅は同一)、複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図9に示すように、全部で18個のメモリ回路部310が用意されている。18個のメモリ回路部310のうち、8個のメモリ回路部310は、容量(メモリ構成)が128kb(32bit−4Kword)のメモリマクロ311- 1aをそれぞれ有して構成されている。他の、8個のメモリ回路部310は、容量が256kb(64bit−4Kword)のメモリマクロ311- 1bをそれぞれ有して構成されている。残りの、2個のメモリ回路部310は、容量が512kb(128bit−4Kword)のメモリマクロ311- 1cをそれぞれ有して構成されている。一方、コード記憶メモリ321としては、1024ビット(32ビット×8+64ビット×8+128ビット×2)のデータに対応する12ビットのECCコードデータを格納でき、かつ、メモリ最長のワード幅である4Kワードのデータに対応できる、4Kワードの容量をもつメモリが用意されている。
このような構成において、各メモリ回路部310では、メモリマクロ311- 1a,311- 1b,311- 1cの全ワードの各データに対応する部分ECCコードが、第1の実施形態にて説明した通りのアクセス方法(コード生成モードおよびデータ比較/訂正モード)によって生成される。
このような構成とした場合にも、第1の実施形態の場合と同様に、メモリマクロのNOPウェイティング状態への割り込みを利用して、ECC処理を行うことにより、メモリマクロの通常のメモリ動作にほとんど影響を与えることなしに、一括したECC処理を施すことができる。しかも、コード生成回路およびデコード回路の総面積をほとんど増加させることなく、配線数(配線領域)を大幅に削減できるようになる。したがって、ECC回路システムの搭載による、チップ面積の増加を従来に比べて飛躍的に抑えることが可能となるものである。
より具体的には、上記した構成において、面積のオーバーヘッドを見積もったところ、ECC回路システムを搭載しない場合と比較して、面積の増加を全体で5.0%程度に抑えることが可能となる。
[第3の実施形態]
図10は、この発明の第3の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300bの基本構成を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、少なくとも一部のメモリマクロのサイズが異なる場合、つまり、ワード幅が同一でない複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図10に示すように、全部で5つのメモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 5 が用意されている。5つのメモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 5 のうち、4つのメモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 は、容量(メモリ構成)が32kb(32bit−1Kword)のメモリマクロ311- 1dを有して構成されている。これに対し、メモリ回路部310- 5 は、容量(メモリ構成)が128kb(64bit−2Kword)のメモリマクロ311- 1aを有して構成されている。一方、コード記憶メモリ321としては、192ビット(32ビット×4+64ビット×1)のデータに対応する10ビットのECCコードデータを格納でき、かつ、メモリ最長のワード幅である2Kワードのデータに対応できる、2Kワードの容量をもつメモリが用意されている。
このような構成において、メモリ回路部310- 5 では、メモリマクロ311- 1aの、0〜2047番目のワードの各データに対応する部分ECCコードが、第1の実施形態にて説明した通りのアクセス方法(コード生成モードおよびデータ比較/訂正モード)によって生成される。同様に、メモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 では、各メモリマクロ311- 1dの、0〜1023番目のワードの各データに対応する部分ECCコードは、第1の実施形態にて説明した通りのアクセス方法によって生成される。しかし、メモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 では、各メモリマクロ311- 1dの、1024〜2047番目のワードのデータに対応する部分ECCコードを生成する場合、つまり、1Kワード以上のアドレス(仮想メモリ空間311- 1d’)が指定されたときには、たとえば図11に示すように、対応するNOPコントローラ315によって、部分ECCコード生成回路313からの出力が全ビット“0”に制御される。これにより、1Kワードの各メモリマクロ311- 1dは、コード記憶メモリ321に対して、1024〜2047番目のワードの全てに“0”が書き込まれている、2Kワードのメモリマクロとして扱うことが可能になる。
すなわち、メモリマクロ311- 1a,311- 1dのワード幅が異なる場合、最大ワード幅(この例の場合、メモリマクロ311- 1aの2Kワード)に合わせて、部分ECCコードをそれぞれに生成する。その際、実際には存在しない仮想メモリ空間311- 1d’に対応するコード記憶メモリ321の該当アドレスには、ECCコードデータとして“0”を書き込む。こうすることにより、メモリマクロ311- 1a,311- 1dのワード幅が異なる場合においても、ECCコードデータの生成(MUX)が可能となる。
なお、部分ECCデコード回路314においても、同様に、1Kワードの各メモリマクロ311- 1dは、NOPコントローラ315の出力により、1Kワード分の仮想メモリ空間311- 1d’を有する、2Kワードの容量をもつメモリとして扱われる(ただし、仮想メモリ空間311- 1d’ではソフトエラーが発生しないため、ECC処理は行われない)。
上記したように、ワード幅が異なるメモリマクロ311- 1a,311- 1dを搭載してなる場合においても、チップ面積の増加を招いたり、通常サイクルのメモリ動作にほとんど影響を与えることなしに、各メモリマクロ311- 1a,311- 1dに記憶される全データに対して、一括してECC処理を施すことが可能である。
なお、上記した第3の実施形態(図11参照)に示した構成においては、たとえば図12に示すように、4つある1Kワードのメモリマクロ311- 1dのうちの、2つのメモリマクロ311- 1dをアドレス空間的に縦積み(縦位置に配置)し、実質的に仮想メモリ空間311- 1d’をなくすようにすることも可能である。この例の場合、たとえば図12に示すように、各メモリ回路部310- 3 ,310- 4 が、それぞれ、1Kワードのメモリマクロ311- 1dを2つずつ備えた構成と等しくなる。こうして、1Kワードのメモリマクロ311- 1dのワード幅を、仮想的に、2Kワードのメモリマクロ311- 1aのワード幅と一致させることもできる。このような構成とした場合には、たとえばマルチプレクサ317aによって、0〜1023番目のワードの各データをアクセスする際と、1024〜2047番目のワードの各データをアクセスする際とで、縦位置にある2つのメモリマクロ311- 1dが択一的に切り換えられる。これにより、縦位置にある2つのメモリマクロ311- 1dを独立させて制御することが可能である。
このような構成とすることにより、さらに、仮想メモリ空間311- 1d’を設けるようにした場合の、コード記憶メモリ321での冗長なメモリ領域が不要になるとともに、ECCコードデータのビット幅も10ビットから9ビットに削減できる。
特に、同じメモリ構成を有するメモリマクロ311- 1dの各部分ECCコード生成回路313が、それぞれ同じ行列成分に応じた規則にしたがって部分ECCコードを生成する場合においては、1Kワードのメモリマクロ311- 1dにそれぞれ必要であった部分ECCコード生成回路313を削減(この例の場合、4つを2つに半減)でき、チップ面積をより減少させることが可能である。
なお、アドレス空間的に縦位置に配置されるメモリマクロとしては、同時に搭載されるメモリマクロの最大ワード幅に応じ、たとえば、1Kwordのメモリマクロと64Kwordのメモリマクロとが同時に搭載される場合には、1Kwordのメモリマクロを64個まで配置することが可能である。
[第4の実施形態]
図13は、この発明の第4の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300cの構成例(アドレス空間)を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、同じサイズの複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図13に示すように、複数(この例では、128個)のメモリ回路部310が用意されている。各メモリ回路部310は、容量(メモリ構成)が256ビット(8bit−32word)のメモリマクロ311- 1eを、それぞれ、複数(この例では、8個ずつ)有して構成されている。すなわち、各メモリ回路部310においては、8つのメモリマクロ311- 1eが、アドレス空間的に縦位置に配置されている。このような構成とした場合には、たとえばマルチプレクサ317aによって、それぞれのメモリマクロ311- 1eをアクセスする際に択一的に切り換えることにより、縦位置にある8つのメモリマクロ311- 1eを独立させて制御することが可能である。一方、コード記憶メモリ321としては、1024ビット(8ビット×128)のデータに対応する12ビットのECCコードデータを格納でき、かつ、メモリ総長のワード幅である256ワードのデータに対応できる、256ワードの容量をもつメモリが用意されている。
このような構成とした場合にも、第1の実施形態の場合と同様に、メモリマクロのNOPウェイティング状態への割り込みを利用して、ECC処理を行うことにより、メモリマクロの通常のメモリ動作にほとんど影響を与えることなしに、一括したECC処理を施すことができる。しかも、コード生成回路およびデコード回路の総面積をほとんど増加させることなく、配線数(配線領域)を大幅に削減できるようになる。したがって、ECC回路システムの搭載による、チップ面積の増加を従来に比べて飛躍的に抑えることが可能となるものである。
より具体的には、上記した構成において、面積のオーバーヘッドを見積もったところ、ECC回路システムを搭載しない場合と比較して、面積の増加を全体で17.7%程度に抑えることが可能となる。因みに、従来のECC回路システムの場合、コード記憶メモリのみで約63%の面積の増加となる。
[第5の実施形態]
図14は、この発明の第5の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300dの構成例(アドレス空間)を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、異なるサイズの複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図14に示すように、全体で11個のメモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 ,310- 5 が用意されている。11個のメモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 ,310- 5 のうち、2個のメモリ回路部310- 1 は、容量(メモリ構成)が1kb(8bit−8K/64word)の複数(この例の場合、8Kワード分で、64個)のメモリマクロ311- 1fをそれぞれ有して構成されている。各メモリマクロ311- 1fは、アドレス空間的に縦位置に配置されている。他の、2個のメモリ回路部310- 2 は、容量(メモリ構成)が4kb(16bit−8K/64word)の複数(この例の場合、8Kワード分で、32個)のメモリマクロ311- 1gをそれぞれ有して構成されている。各メモリマクロ311- 1gは、アドレス空間的に縦位置に配置されている。他の、1個のメモリ回路部310- 3 は、容量(メモリ構成)が4kb(32bit−8K/64word)の複数(この例の場合、8Kワード分で、64個)のメモリマクロ311- 1hを有して構成されている。各メモリマクロ311- 1hは、アドレス空間的に縦位置に配置されている。他の、2個のメモリ回路部310- 4 は、容量(メモリ構成)が128kb(32bit−8K/64word)の複数(この例の場合、8Kワード分で、2個)のメモリマクロ311- 1iをそれぞれ有して構成されている。各メモリマクロ311- 1iは、アドレス空間的に縦位置に配置されている。残りの、4個のメモリ回路部310- 5 は、容量(メモリ構成)が512kb(64bit−8K/64word)のメモリマクロ311- 1jを1つずつ有して構成されている。一方、コード記憶メモリ321としては、400ビット((1kb×128+4kb×64+4kb×64+128kb×4+512kb×4)/8Kワード)のデータに対応する11ビットのECCコードデータを格納でき、かつ、メモリ総長のワード幅である8Kワードのデータに対応できる、8Kワードの容量をもつメモリが用意されている。
このような構成において、各メモリ回路部310- 1 ,310- 2 ,310- 3 ,310- 4 では、たとえばマルチプレクサ317aによって、それぞれのメモリマクロ311- 1f,311- 1g,311- 1h,311- 1iをアクセスする際に択一的に切り換えることにより、縦位置にある複数のメモリマクロ311- 1f,311- 1g,311- 1h,311- 1iを独立させて制御することが可能である。そして、メモリマクロ311- 1f,311- 1g,311- 1h,311- 1i,311- 1jの全ワードの各データに対応する部分ECCコードが、第1の実施形態にて説明した通りのアクセス方法(コード生成モードおよびデータ比較/訂正モード)によって生成される。
このような構成とした場合にも、第1の実施形態の場合と同様に、メモリマクロのNOPウェイティング状態への割り込みを利用して、ECC処理を行うことにより、メモリマクロの通常のメモリ動作にほとんど影響を与えることなしに、一括したECC処理を施すことができる。しかも、コード生成回路およびデコード回路の総面積をほとんど増加させることなく、配線数(配線領域)を大幅に削減できるようになる。したがって、ECC回路システムの搭載による、チップ面積の増加を従来に比べて飛躍的に抑えることが可能となるものである。
より具体的には、上記した構成において、面積のオーバーヘッドを見積もったところ、ECC回路システムを搭載しない場合と比較して、面積の増加を全体で6.8%程度に抑えることが可能となる。
図15は、上記した第5の実施形態において、アドレス空間的に縦位置に配置することが可能な多数のメモリマクロがチップ上に散在している場合を例に示すものである。この例の場合、図12に示した実施形態にしたがえば、たとえば64個(図面では、便宜上16個しか示していない)のメモリマクロ311- 1fに対し、部分ECCコード生成回路313などは1組でよい。しかし、実際のチップ上でのメモリマクロ311- 1fの分布は、必ずしも、メモリマクロ311- 1f同士が隣接して配置されるとは限らない。そのため、部分ECCコード生成回路313とメモリマクロ311- 1fとが大幅に離れて配置されるような場合には、配線遅延によってサイクルタイムが大幅に悪化する可能性がある(同図(a)参照)。
そこで、アドレス空間的に縦位置に配置することが可能な、同じサイズを有する多数のメモリマクロ311- 1fがチップ上に散在している場合においては、たとえば64個のメモリマクロ311- 1fで共有される部分ECCコード生成回路313などを複数組(この例では、4組)用意し、互いにコロニーを形成するように近接させて配置することが可能な16個(図面では、便宜上4個)のメモリマクロ311- 1fで1組の部分ECCコード生成回路313などを共有させることで、配線遅延を緩和することができる(同図(b)参照)。ただし、複数組の部分ECCコード生成回路313などを用意する場合であっても、実際にアクセスされるワードは1つであり、64個中で選択されるメモリマクロ311- 1fは唯一となるため、生成される部分ECCコードに衝突が起こることはない。
なお、接続に特別な方法は必要なく、他のメモリマクロ用の部分ECCコード生成回路などと同様の方法でよい。また、メモリマクロ311- 1fに限らず、他のメモリマクロの場合も同様である。
[第6の実施形態]
図16は、この発明の第6の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300eの基本構成を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、アクセスタイム差などを考慮しつつ、少なくとも一部のメモリマクロのサイズが異なる複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図16に示すように、複数のメモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- n が用意されている。複数のメモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- n のうち、たとえば、メモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・は、アクセスタイム(Tacc)が2nsであるメモリマクロ311- 1kをそれぞれ有して構成されている。これに対し、たとえば最終段のメモリ回路部310- n は、アクセスタイムが4nsであるメモリマクロ311- 1mを有して構成されている。
ここで、複数のメモリ回路を備える集積回路装置においては、メモリ構成などに起因し、各メモリ回路間でアクセスタイムに差があるのが一般的である。通常、最もアクセスタイムが遅いメモリマクロの出力から、部分ECCコード生成回路を通じて、ECCコード記憶部のコードレジスタに至るまでのパスが、そのECCメモリ回路におけるワーストパスになる。本実施形態の例だと、メモリマクロ311- 1mの出力から、部分ECCコード生成回路313を通じて、ECCコード記憶部320のコードレジスタ324に至るパスが、本ECCメモリ回路300eにおけるワーストパスになる。このワーストパスにより、システム全体のサイクルタイム(tcyc)が律速される。
このワーストパスによってサイクルタイムが律速されるのを避けるために、本実施形態では、たとえば図16に示すように、時間がかかるパスの各所にパイプライン接続を接離するためのデータレジスタ330が挿入されている。ここでは、その代表例として、メモリ回路部310- n のメモリマクロ311- 1mの出力の直後、および、メモリ回路部310- n との間を結ぶ、長い配線による配線遅延が生じやすい信号線SL,SL’上などに、それぞれ、データレジスタ330が設けられている。特に、メモリ回路部310- n との間を結ぶ、ステートコントローラ323の出力が供給される信号線上およびアドレスカウンタ322の出力が供給される信号線上に、それぞれ、データレジスタ330を設けるようにした場合には、制御のための信号線を一緒に切り離すことにより、コードレジスタ324にとっては、NOP割り込みサイクルが1サイクル分だけ遅れてきたのと同義となる。すなわち、メモリ構成に応じてアクセスタイムが大きく異なる場合のメモリ間スキューに対しては、第1の実施形態にて説明した通りのアクセス方法(コード生成モードおよびデータ比較/訂正モード)によってECC処理を行う際に、サイクルタイム(この例では、5ns)に収まりそうもないメモリ回路部310- n のパスだけを切り離すことにより、たとえレイテンシが増えたとしても、システム全体としてはメモリマクロ311- 1mのNOP割り込みサイクルが1サイクル分だけ遅れてくるのと同義であり、これによるパフォーマンスの劣化はほとんどない。
なお、アクセスタイムが大きいメモリマクロ311- 1mに対応する部分ECCコード生成回路313の、ゲートの段数が少なくなるように、各メモリマクロ311- 1k,311- 1mのアクセスタイムに合わせて、部分ハミングコード行列式を選択(XOR数を調整)することも可能である。
次に、図17を参照して、本実施形態にかかる集積回路装置(ECCメモリ回路300e)の動作について、さらに詳しく説明する。なお、ここでは、たとえば図18(a)に示すように、メモリマクロ311- 1mから出力される保持データ(Data)とNOPコントローラ315から出力される信号(この例では、ECC処理実行信号(ECC_on))とを部分ECCコード生成回路313の入力とし、この部分ECCコード生成回路313の出力である部分ECCコード(Code)をECCコード記憶部320のコードレジスタ324に転送し、このコードレジスタ324の出力(Code_reg)と上記部分ECCコード生成回路313の次の出力(Code)とを加算器325aにより加算したものをコード記憶メモリ321の入力とする場合を、通常時の動作、つまり、データレジスタ330を追加していない場合の動作として説明する(ただし、説明を簡単化するため、他のメモリマクロ311- 1kからの保持データに対応する部分ECCコードを加算するための加算器などは省略している)。
まず、通常時には、たとえば図17(a)に示すように、NOPコントローラ315からのECC_on信号(ハイレベル:Hi)を受けた部分ECCコード生成回路313において、クロック信号CLKのCLK1のタイミング(Hi)で出力されたData(D1)を元にCode(C1)が生成される。このCode(C1)は、同サイクル内で、コードレジスタ324に送られた後、コードレジスタ324からはクロック信号CLKのCLK2のタイミング(Hi)で出力される。以上が、通常時の動作である。
ところが、メモリマクロ311- 1mのアクセスタイム(図17(a)中に(A)で示す)が十分に遅い場合または部分ECCコード生成回路313からコードレジスタ324までの配線遅延(図17(a)中に(B)で示す)が十分に大きい場合、クロック信号CLKの同じCLK1のタイミング(同サイクル)内で、コードレジスタ324へのCode(C1)の転送が間に合わなくなる可能性がある。つまり、アクセスタイムが十分に遅い場合には、たとえば図17(b)に示すように、クロック信号CLKのCLK1のタイミングで、メモリマクロ311- 1mからのData(D1)が出力されるものの、このData(D1)の出力はクロック信号CLKのCLK1のタイミングの後半でようやく開始される(図17(b)中の(A)’参照)。
そこで、メモリマクロ311- 1mのアクセスタイムが十分に遅い場合には、たとえば図18(b)に示すように、部分ECCコード生成回路313とメモリマクロ311- 1mとの間に、データレジスタ330を挿入する。また、この例では、部分ECCコード生成回路313とNOPコントローラ315との間にも、データレジスタ330を挿入する。
このデータレジスタ330の挿入時、つまり、アクセスタイムが十分に遅い場合には、たとえば図17(b)に示すように、メモリマクロ311- 1mからのData(D1)が、クロック信号CLKの次のCLK2のタイミングで、データレジスタ330内に一時的に保持されるとともに、そのCLK2のタイミング(同サイクル内)で、このレジスタ330内のData’(D1)が部分ECCコード生成回路313に出力される。同様に、NOPコントローラ315からのECC_on(Hi)も、データレジスタ330で1サイクル分だけ遅らされた後、ECC_on’として部分ECCコード生成回路313に出力される。これにより、クロック信号CLKのCLK2のタイミングで、部分ECCコードの生成が行われて、Code(C1)が出力される。このCode(C1)は、同サイクル内で、コードレジスタ324に送られた後、コードレジスタ324からはクロック信号CLKの次のCLK3のタイミング(Hi)で出力される。
一方、部分ECCコード生成回路313とコードレジスタ324との間の配線遅延が十分に大きい場合(図17(c)中の(B)’参照)には、たとえば図18(c)に示すように、部分ECCコード生成回路313とコードレジスタ324との間に、データレジスタ330を挿入する。
このデータレジスタ330の挿入時、つまり、配線遅延が十分に大きい場合には、たとえば図17(c)に示すように、NOPコントローラ315からのECC_on信号(Hi)を受けた部分ECCコード生成回路313において、クロック信号CLKのCLK1のタイミング(Hi)で出力されたData(D1)を元にCode(C1)が生成される。このCode(C1)は、同サイクル内で、データレジスタ330に送られて一時的に保持される。データレジスタ330からは、Code’(C1)が、クロック信号CLKの次のCLK2のタイミング(Hi)でコードレジスタ324に出力された後、このコードレジスタ324からはクロック信号CLKの次のCLK3のタイミング(Hi)で出力される。
このように、データレジスタ330を追加するようにした場合、部分ECCコード(Code,Code’)がコードレジスタ324に到達するのに必要なサイクル数は増えるものの、特に大きなデメリットとはなりえない。なぜならば、データレジスタ330を追加していない場合の通常のECCメモリ回路において、100サイクル中にNOP割り込みサイクルが10回起こると仮定し、そのNOP割り込みサイクルのうちの最初の1回目(たとえば、8サイクル目に発生)をECC処理に利用するとした場合、通常のECCメモリ回路では9サイクル目に部分ECCコードが出力される。これに対し、データレジスタ330を1つ追加した本実施形態のECCメモリ回路300eの場合は、10サイクル目に部分ECCコードが出力されるだけで、残りの90サイクルは次の周期の待ち時間に費やされるため、次のサイクルに影響を及ぼすことはほとんどない。
本実施形態のように、信号線をパイプライン化することで、共有することが可能なメモリマクロのサイズおよびレイアウトによる制約を排除できる。
[第7の実施形態]
図19は、この発明の第7の実施形態にしたがった、集積回路装置(半導体チップ)におけるECCメモリ回路300fの基本構成を示すものである。ここでは、第1の実施形態で示した構成の半導体集積回路において、フラグ情報を用意せずに、複数のメモリマクロに記憶されたデータを一括して訂正できるように構成した場合について説明する。なお、第1の実施形態と同一部分には同一符号を付し、その詳しい説明は割愛する。
本実施形態の場合、たとえば図19に示すように、8つのメモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 8 が用意されている。各メモリ回路部310- 1 ,310- 2 ,310- 3 ,・・・,310- 8 は、それぞれ、異なるサイズまたは同じサイズのメモリマクロ311を有して構成されている。ただし、メモリマクロ311の各アドレスには、フラグ記憶部であるフラグ格納用ビットは設けられていない。つまり、メモリマクロ311の各アドレスにフラグ格納用ビットを追加せずにシステムを構築した本実施形態の集積回路装置においては、ライト動作が行われた際に、アドレスごとのライト更新履歴管理が不可能となる。
図20は、上記した構成における、ECC処理シーケンスを示すフローチャートである。まず、シーケンスの最初(ECC処理開始初期)では、保持データに対応したECCコードデータが生成されていない。そのため、アドレス“0”の保持データを読み出した後、コード生成モードに入る。
コード生成モードでは、ステートコントローラ323によって各NOPコントローラ315が制御されることにより、まず先に、各メモリマクロ311の、アドレスカウンタ322の出力に応じたアドレス“0”の保持データが読み出される。そして、次のNOP割り込みサイクルにおいて、ステートコントローラ323の制御により、各メモリマクロ311のアドレス“0”から読み出された保持データは、それぞれ、対応する部分ECCコード生成回路313に送られる。これにより、NOPコントローラ315の制御のもと、それぞれ、対応する部分ECCコード生成回路313により、部分ハミングコード行列式の規則にしたがって、部分ECCコードが生成される。各部分ECCコード生成回路313にて生成された部分ECCコードは、信号線SLおよび加算器319,325aを介してMUXされた後、逐次、コードレジスタ324に送られる。
こうして、コードレジスタ324に、すべてのアドレス“0”に対する、部分ECCコードに対応するECCコードデータが蓄えられる。このことは、ステートコントローラ323において、各部分ECCコード生成回路313からのコード生成終了信号により判断される。これにより、コードレジスタ324に蓄えられたECCコードデータが、コード記憶メモリ321のアドレス“0”に書き込まれる。
第1の実施形態に示したアクセス方法(図6参照)とは異なり、上記の処理を、すべてのアドレス“0”〜について繰り返し実行する。そして、全アドレスの保持データに対応するECCコードデータの生成が終了すると、コード生成モードは終了され、ステートコントローラ323の制御により、データ比較/訂正モードに移行する。
データ比較/訂正モードでは、第1の実施形態に示したアクセス方法とほぼ同様の方法により、一連の処理が行われる。ただし、これらの一連の処理の間、各NOPコントローラ315は対応するメモリマクロ311に対するライト動作を監視し、もし、いずれかのメモリマクロ311に対してライト動作が実行された場合には、フラグ情報に代えて、ステートコントローラ323のステップ状態をリセットさせることにより、アドレス“0”に対する部分ECCコードの生成(コード生成モード)から再開するように制御される。これにより、各メモリマクロ311にフラグ情報を用いずとも、各メモリマクロ311に記憶されている全保持データに対し、一括したECC処理が可能な集積回路装置(ECCメモリ回路300f)を実現することが可能となる。
本実施形態においては、メモリマクロのアドレス数が比較的少ない装置およびデータの書き込み頻度が少ない装置、あるいは、電源オン状態において、NOP/STBY状態が長時間連続するような、その多くの時間を待機状態が占める装置に用いて、特に有効である。
詳述したように、本発明の実施形態によれば、通常のメモリ動作にほとんど影響を与えることなしに、複数のメモリマクロに記憶されたデータを一括してECC処理することができ、面積の増加を最小限に抑制し得るとともに、メモリマクロのサイズに依存したり、レイアウトによる制約を受けることなく、高い自由度をもってソフトエラー対策を施すことが可能となるものである。
なお、上記した各実施形態においては、いずれも1チップ化されてなる集積回路装置に限らず、たとえば図21に示すように、CPU200、データ格納用のメモリマクロ311、および、部分ECCコード生成/デコード回路312などの複数の半導体回路部品を、同一の印刷回路基板(PCB)101上に集積してなる大規模な構成の集積回路システムにも同様に適用できる。しかも、半導体基板100上および印刷回路基板101上に搭載されるCPU200としては、複数のメモリ回路部310nに対して共通に配置する場合に限らず、たとえば、メモリ回路部310nごとに配置する構成とすることも可能である。
また、上記した実施形態において、同じメモリ構成を有する複数のメモリマクロにそれぞれ対応し、同じハミングコード行列式に応じた規則にしたがって部分ECCコードを生成する複数の部分ECCコード生成回路にあっては、メモリマクロに対応する部分ECCコード生成回路によりそれぞれ部分ECCコードを生成する場合に限らず、いずれかの部分ECCコード生成回路により選択的に部分ECCコードを生成するように構成することも可能である。
また、上記した各実施形態においては、コードレジスタを介して、ECCコードデータのコード記憶メモリへの格納を行うように構成したが、これに限らず、たとえば複数の加算器より出力される最終の加算値をECCコードデータとし、これをコード記憶メモリに直に書き込むように構成してもよい。
また、上記した実施形態において、たとえばNOPコントローラのそれぞれを、複数のメモリ回路の総アドレス数と同数のアドレス制御が可能な構成とし、対応するメモリ回路以外のメモリ回路をも選択的に制御できるようにすることも可能である。特に、たとえば図22に示すように、1つのNOPコントローラ315を、すべてのメモリマクロ311,311,…の総アドレス数と同数のアドレス制御が可能な構成とし、すべてのメモリマクロ311,311,…を1つのNOPコントローラ315により選択的に制御できるように構成することも可能である。
また、上記した実施形態においては、部分ECCコード生成回路313よりそれぞれ出力されるエラー訂正コードとは異なる、コード生成終了信号とフラグ情報(for ECC contorol)との排他的論理和算値によってコード記憶メモリ321などを制御するようにしたが、たとえば図23に示すように、積算器(論理積回路)340により各NOPコントローラ315の出力信号(コード生成終了信号およびフラグ情報)の論理積値を求め、これをもとにステートコントローラ323によって、コード記憶メモリ321およびコードレジスタ324を制御するように構成することもできる。
さらに、保持データの書き換えにともなうECCコードデータの生成動作においては、たとえば図24に示すように、ECCコードデータの生成対象となるアドレスの保持データが、直前のライトサイクルにより書き換えられた場合(Macro3の4サイクル目のWn)、このサイクルで書き換えられた保持データをメモリスルーさせ、部分ECCコード生成回路にて部分ECCコードに変換した後に、コードレジスタに転送させるようにすることも可能である(ただし、フラグ情報としては実際に生成対象アドレスの保持データの書き換えを行った際(数サイクル後のWn)に“0”書き込み)。この場合、NOP割り込みサイクルを待たずに、コード転送が可能となるため、ECCコード生成処理の効率をより向上できる。
その他、本願発明は、上記(各)実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記(各)実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。たとえば、(各)実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題(の少なくとも1つ)が解決でき、発明の効果の欄で述べられている効果(の少なくとも1つ)が得られる場合には、その構成要件が削除された構成が発明として抽出され得る。
100…半導体基板、101…印刷回路基板、200…CPU、300…ECCメモリ回路、310,310n…メモリ回路部、311…メモリマクロ、311a…フラグ格納用ビット、313…部分ECCコード生成回路、314…部分ECCデコード回路、315…NOPコントローラ、316…アドレスコンパレータ、317c…マルチプレクサ、319…加算器、320,320’…ECCコード記憶部、321…コード記憶メモリ、322…アドレスカウンタ、323…ステートコントローラ、324…コードレジスタ、330…データレジスタ、340…積算器、SL,SL’…信号線。