(57)【要約】【課題】アドレス，データの何れの側に誤りが発生したのかを特定できる半導体装置を提供する。【解決手段】誤り検出回路４は、ＣＰＵ２がメモリ３からデータを読み出す際に、メモリ３へのアクセスアドレス及び読み出しデータを検出対象ビット列として誤り検出を行う。その際に、検出対象ビットの全ビットに対応するデータ値が同一である第１検出データとの論理演算結果について付与されるデータを第１検出符号とし、アドレスビット列，データビット列の何れか一方の全ビットに対応するデータ値と、且つ他方の全ビットに対応するデータ値とが異なる第２検出データとの論理演算結果につき付与されるデータを第２検出符号として用いる。メモリ３にはＣＰＵ２がメモリ３にデータを書き込む際に第１及び第２検出符号も書き込まれ、メモリ３からデータを読み出す際に第１及び第２検出符号もメモリ３より読み出される。誤り検出回路４は、第１及び第２検出データを保持して誤り検出を行う。【選択図】図１
2016170679.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（２）と、
このＣＰＵによってデータの書き込み及び読み出しが行われるメモリ（３）と、
前記ＣＰＵが前記メモリからデータを読み出す際に、前記メモリへのアクセスアドレス及び読み出しデータについて誤り検出を行う誤り検出手段（４，１２）と、
前記アクセスアドレス及び前記読み出しデータからなるビット列である検出対象ビット列と、前記検出対象ビット列における全てのビットに対応するデータ値が同一である第１検出データとの論理演算結果について付与されるデータを第１検出符号とし、
前記検出対象ビット列の前記アクセスアドレス側ビット列であるアドレスビット列と、前記読み出しデータ側ビットであるデータビット列との何れか一方の全てのビットに対応するデータ値と、且つ他方の全てのビットに対応するデータ値とが異なる第２検出データとの論理演算結果について付与されるデータを第２検出符号とすると、
前記ＣＰＵが前記メモリにデータを書き込む際に、前記ＣＰＵにより前記第１及び第２検出符号が書き込まれ、前記ＣＰＵが前記メモリからデータを読み出す際に、前記ＣＰＵにより前記第１及び第２検出符号が読み出される検出符号記憶手段（３，１３）とを備え、
前記誤り検出手段は、第１及び第２検出データを保持し、
（１）前記ＣＰＵが前記メモリにデータを書き込む際に前記第１及び第２検出符号を生成し、
（２）前記ＣＰＵが前記メモリからデータを読み出す際に、読み出された検出対象ビット列から新たに第１検出符号を生成すると、前記第１検出符号と、その時点に前記検出符号記憶手段より読み出された第１検出符号とを比較し、
（３）双方の符号の値が異なると、前記読み出された検出対象ビット列から新たに第２検出符号を生成し、前記第２検出符号と、その時点に前記検出符号記憶手段より読み出された第２検出符号とを比較し、
（４）双方の符号の値が一致した場合と異なった場合とについて、前記第２検出データのデータ値に応じて、前記検出対象ビット列における何れかのビット列側の誤りを検出することを特徴とする半導体装置。
【請求項２】
前記検出符号記憶手段には、同じデータ値が連続する同一値ビット列の数が、前記第２検出データよりも１つ以上多い高次検出データを保持し、前記高次検出データを用いて、前記アドレスビット列内又は前記データビット列内において誤りがある部分を検出することを特徴とする請求項１記載の半導体装置。
【請求項３】
前記第１検出データは、前記検出対象ビットにおける全てのビットに対応するデータ値が「１」であり、
前記第１検出符号は、前記検出対象ビットと前記第１検出データとの論理積を求めた結果について付与されるパリティデータであり、
前記第２検出データは、前記アドレスビット列，前記データビット列の何れか一方の全てのビットに対応するデータ値が「１」で、且つ他方の全てのビットに対応するデータ値が「０」であり、
前記第２検出符号は、前記検出対象ビットと前記第２検出データとの論理積を求めた結果について付与されるパリティデータであることを特徴とする請求項１又は２記載の半導体装置。
【請求項４】
前記ＣＰＵが前記メモリにデータを書き込む際に、前記書き込みデータについて誤り検出符号を生成し、
前記ＣＰＵが前記メモリからデータを読み出す際に、前記読み出しデータに対応する誤り検出符号に基づいて、前記データの誤り検出及び訂正を行う誤り検出訂正手段（２２）と、
前記誤り検出符号が書き込まれる検出符号記憶手段（３，１３）とを備え、
前記誤り検出訂正手段は、前記誤り検出手段により前記読み出しデータからなるビット列に誤りが検出されたことを条件として、前記ビット列の誤り検出及び訂正を行うことを特徴とする請求項１から３の何れか一項に記載の半導体装置。
【請求項５】
前記検出符号記憶手段（１３）は、前記メモリと異なるデバイスである検出符号メモリであることを特徴とする請求項１から４の何れか一項に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵと、ＣＰＵによってデータの書き込み及び読み出しが行われるメモリとを備えてなる半導体装置に関する。
【背景技術】
【０００２】
例えばＲＡＭのような揮発性メモリやフラッシュメモリのような不揮発性メモリについては、記憶されているデータの信頼性を向上させる目的で、誤り検出符号や誤り訂正符号等を用いて誤り検出や誤り訂正が行われている。同様に、ＣＰＵ等がメモリにアクセスを行う際に出力するアドレスについても、例えばノイズの影響やバスの断線等によりアドレス値が不正確になる可能性が有ることから、誤り検出を行う技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２８２７６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に開示されている技術では、メモリへのアクセスアドレスとメモリへの書き込みデータとを合わせたビット列に対し、一括してパリティビットを付加している。したがって、そのパリティビットを用いて誤りが検出されたとしても、アドレス，データの何れの側に誤りが発生したのかを特定できないという問題がある。
【０００５】
本発明は上記事情に鑑みてなされたものであり、その目的は、アドレス，データの何れの側に誤りが発生したのかを特定できる半導体装置を提供することにある。
【課題を解決するための手段】
【０００６】
請求項１記載の半導体装置によれば、誤り検出手段は、ＣＰＵがメモリからデータを読み出す際に、メモリへのアクセスアドレス及び読み出しデータについて誤り検出を行う。ここで、前記アクセスアドレス及び前記読み出しデータからなるビット列である検出対象ビット列と、前記検出対象ビット列における全てのビットに対応するデータ値が同一である第１検出データとの論理演算結果について付与されるデータを第１検出符号とし、前記検出対象ビット列におけるアドレスビット列，データビット列の何れか一方の全てのビットに対応するデータ値と、且つ他方の全てのビットに対応するデータ値とが異なる第２検出データとの論理演算結果について付与されるデータを第２検出符号とする。
【０００７】
検出符号記憶手段には、ＣＰＵがメモリにデータを書き込む際に第１及び第２検出符号も書き込まれ、ＣＰＵがメモリからデータを読み出す際に第１及び第２検出符号も検出符号記憶手段より読み出される。そして、誤り検出手段は、第１及び第２検出データを保持し、以下のように誤り検出を行う。
（１）ＣＰＵがメモリにデータを書き込む際に第１及び第２検出符号を生成し、
（２）ＣＰＵがメモリからデータを読み出す際に、読み出された検出対象ビット列から新たに第１検出符号を生成すると、その第１検出符号と、その時点に検出符号記憶手段より読み出された第１検出符号とを比較する。
【０００８】
（３）その比較の結果、双方の符号の値が異なると、読み出された検出対象ビット列から新たに第２検出符号を生成し、その第２検出符号と、その時点に検出符号記憶手段より読み出された第２検出符号とを比較する。
（４）その比較の結果、双方の符号の値が一致した場合と異なった場合とについて、第２検出データのデータ値に応じて、検出対象ビット列における何れかのビット列側の誤りを検出する。
【０００９】
すなわち、書き込み時の検出対象ビット列に対し、第１及び第２検出データを用いて第１及び第２検出符号を生成し、メモリからデータを読み出した際の検出対象ビット列について生成した第１及び第２検出符号と比較することで、検出対象ビット列におけるアドレスビット列，データビット列の何れの側に誤りが発生したか判別することが可能になる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態であり、マイクロコンピュータの構成を示す機能ブロック図
【図２】誤り検出回路の構成を示す図
【図３】検出対象ビット列のフォーマット及び誤り検出の具体例を説明する図
【図４】誤り検出回路の動作を示すフローチャート
【図５】第２実施形態であり、符号長が「４」となる場合を説明する図
【図６】誤り検出の各手法を比較した図
【図７】第３実施形態であり、誤り検出回路の構成を示す図
【図８】第４実施形態であり、マイクロコンピュータの構成を示す機能ブロック図
【図９】メモリ・バス診断部の構成を示す図
【図１０】メモリに記憶されるデータのフォーマットを示す図
【図１１】誤り検出回路の動作を示すフローチャート
【発明を実施するための形態】
【００１１】
（第１実施形態）
以下、第１実施形態について説明する。図１に示すように、本実施形態のマイクロコンピュータ１（半導体装置）は、ＣＰＵ２とメモリ３（検出符号記憶手段）との間に誤り検出回路４（誤り検出手段）が配置されており、これらはアドレスバス５及びデータバス６を介して接続されている。図２に示すように、誤り検出回路４は、第１検出符号生成部７，第２検出符号生成部８，第１検出符号比較部９，第２検出符号比較部１０及び検出結果記憶部１１を備えている。
【００１２】
第１検出符号生成部７及び第２検出符号生成部８には、ＣＰＵ２が出力するライト信号ＷＲ及びリード信号ＲＤが入力されている。第１検出符号生成部７は第１検出データを保持しており、第２検出符号生成部８は第２検出データを保持している（第１及び第２検出データについては後述する）。第１検出符号生成部７は、ＣＰＵ２がメモリ３にデータの書き込みを行う際に、メモリ３へのアクセスアドレスと書き込みデータとを合わせたビット列である検出対象ビット列と第１検出データとの論理演算を行うことで、１ビットの第１検出符号を生成する。
【００１３】
また、第２検出符号生成部８は、同じくＣＰＵ２がメモリ３にデータの書き込みを行う際に、前記検出対象ビット列と第２検出データとの論理演算を行うことで、１ビットの第２検出符号を生成する。生成された第１及び第２検出符号は、書き込みデータと共にメモリ３に書き込まれる。以上の処理が、図４に示すフローチャートにおいて、ステップＳ１〜Ｓ３に対応する。
【００１４】
また、第１検出符号生成部７及び第２検出符号生成部８は、ＣＰＵ２がメモリ３よりデータを読み出す際にも、検出対象ビット列と第１及び第２検出データとの論理演算を行うことで、１ビットの第１及び第２検出符号を生成（復号）する。そして、読み出し時に生成された第１及び第２検出符号は、それぞれ第１検出符号比較部９，第２検出符号比較部１０に入力される（図４；Ｓ４，Ｓ５）。
【００１５】
第１検出符号比較部９及び第２検出符号比較部１０には、リード信号ＲＤが入力されている。そして、第１検出符号比較部９及び第２検出符号比較部１０は、メモリ３より検出対象ビット列と共に読み出された第１及び第２検出符号と、その際に第１及び第２検出符号生成部７及び８により生成された第１及び第２検出符号とを比較して、比較結果を検出結果記憶部１１に書き込んで記憶させる。
【００１６】
図３に示すように、例えばアドレス１６ビット，データ１６ビットの３２ビットである場合に、データ１６ビットのうち２ビット；ビット３０，３１を第１，第２検出符号の格納領域に割り当てる。したがって、データビット列は１４ビットとなり、検出対象ビット列は３０ビットとなる。この場合、第１検出データは、ビット０〜２９のデータ値が全て「１」となるデータとする。また、第２検出データは、アドレスビット列に対応するビット０〜１５のデータ値が全て「１」で、データビット列に対応するビット１６〜２９のデータ値が全て「０」となるデータとする。
【００１７】
そして、第１及び第２検出符号生成部７及び８が生成する第１及び第２検出符号は、例えば検出対象ビット列と、第１及び第２検出データとの論理積を演算した結果についての偶数パリティビットとする。図３に示す検出対象ビット列の具体例について第１検出符号を得ると「０」となり、第２検出符号を得ると「１」となる。したがってこの場合、ビット３０に「０」が格納され、ビット３１に「１」が格納される。
【００１８】
そして、図３に示すように、検出対象ビット列を読み出した際に、書き込み時に「１」であった第１１ビットが「０」に変化したとする。この時に、検出対象ビット列と第１検出データとの論理積を演算して第１検出符号を得ると「１」となり、書き込み時に生成して記憶させた第１検出符号の値と異なる。したがって、第１検出符号比較部９は、双方の第１検出符号を比較することで検出対象ビット列に誤りが発生したことを検出できる。
【００１９】
以下は、図４に示すフローチャートを参照して説明する。上述のように、ステップＳ５において、第１及び第２検出符号生成部７及び８が第１及び第２検出符号を生成すると、第１検出符号比較部９が、生成された第１検出符号とメモリ３より検出対象ビット列と共に読み出された第１検出符号とを比較する（Ｓ６）。ここで、双方の符号が一致すれば（ＹＥＳ）検出対象ビット列に誤りは無いので、その結果を検出結果記憶部１１に書き込んで記憶させる（Ｓ９）。
【００２０】
一方、ステップＳ６において双方の符号が一致しなければ（ＮＯ）、図３で説明したように検出対象ビット列に誤りがあるので、第２検出符号比較部９が、生成された第２検出符号とメモリ３より読み出された第２検出符号とを比較する（Ｓ７）。ここで、双方の符号が一致すれば（ＹＥＳ）、検出対象ビット列において、第２検出符号のデータ値が「０」に対応するビット列側，すなわち、データビット列側に誤りがあることになる。したがって、その結果を検出結果記憶部１１に書き込んで記憶させる（Ｓ１０）。
【００２１】
また、ステップＳ７において双方の符号が一致しなければ（ＮＯ）、検出対象ビット列において、第２検出符号のデータ値が「１」に対応するビット列側，すなわち、アドレスビット列側に誤りがあることになる。したがって、その結果を検出結果記憶部１１に書き込んで記憶させる（Ｓ８）。
【００２２】
第２検出符号を用いた誤り検出について、図３に示す具体例で説明すると、検出対象ビット列を読み出した際に、書き込み時に「１」であった第１１ビットが「０」に変化した検出対象ビット列について、第２検出データとの論理積を演算して第２検出符号を得ると「０」となり、書き込み時に生成して記憶させた第２検出符号の値「１」と異なる。したがって、第２検出符号のデータ値が「１」に対応するビット列側，すなわち、第１１ビットが属するアドレスビット列側に誤りがあることが検出できる。
【００２３】
以上のように本実施形態によれば、誤り検出回路４は、ＣＰＵ２がメモリ３からデータを読み出す際に、メモリ３へのアクセスアドレス及び読み出しデータを検出対象ビット列として誤り検出を行う。その際に、検出対象ビット列の全ビットに対応するデータ値が同一である第１検出データとの論理演算結果について付与されるデータを第１検出符号とし、アドレスビット列，データビット列の何れか一方の全ビットに対応するデータ値と、且つ他方の全ビットに対応するデータ値とが異なる第２検出データとの論理演算結果について付与されるデータを第２検出符号として用いる。
【００２４】
メモリ３には、ＣＰＵ２がメモリ３にデータを書き込む際に第１及び第２検出符号も書き込まれ、ＣＰＵ２がメモリ３からデータを読み出す際に第１及び第２検出符号もメモリ３より読み出される。そして、誤り検出回路４は、第１及び第２検出データを保持して上述したように誤り検出を行う。
【００２５】
具体的には、第１検出データは、検出対象ビットの全ビットに対応するデータ値が「１」で、第１検出符号には、検出対象ビットと第１検出データとの論理積を求めた結果につき付与される偶数パリティデータを用いた。また、第２検出データは、アドレスビット列の全ビットに対応するデータ値が「１」で、データビット列の全ビットに対応するデータ値が「０」で、第２検出符号には、検出対象ビットと第２検出データとの論理積を求めた結果につき付与される偶数パリティデータを用いた。これにより、検出対象ビット列におけるアドレスビット列，データビット列の何れの側に誤りが発生したか判別することが可能になる。
【００２６】
（第２実施形態）
以下、第１実施形態と同一部分には同一符号を付して説明を省略し、異なる部分について説明する。第１実施形態は、誤り検出の符号長が「２」の場合であるが、第２実施形態は、第１〜第４検出データ及び第１〜第４検出符号を用いて符号長が「４」となる場合を示す。図５に示すように、アドレスビット列を１６ビット，データビット列を１２ビットとして、ビット２８〜ビット３１に第１〜第４検出符号を格納する。
【００２７】
第３（第３以上を「高次」とする）検出データは、アドレスビット列側に対応するビット０〜７のデータ値が「１」で、ビット８〜１５のデータ値が「０」，データビット列側に対応するビット１６〜２１のデータ値が「０」で、ビット２〜２７のデータ値が「１」である。また、第４検出データの各データ値は、以下のようになっている。
データ値
・ビット０〜３        １
・ビット４〜１１      ０
・ビット１２〜１８    １
・ビット１９〜２４    ０
・ビット２５〜２７    １
そして、第１，第２検出データと同様に、第３，第４検出データを用いて検出対象ビット列との論理積演算を行うことで、第３，第４検出符号を得る。
【００２８】
第３，第４検出データを用いることで、アドレスビット列，データビット列の何れの部分（領域）に誤りが発生したかを検出できる。例えば第１実施形態と同様に、検出対象ビット列の第１１ビットが「１」から「０」に変化した場合、読み出し時に検出対象ビット列と第３検出データとの論理積演算を行って第３検出データを求め、読み出された第３検出データと比較すれば両者は「一致」する。その結果より、アドレスビット列ビット８〜１５に誤りが発生したことが判別できる。
【００２９】
各領域についての誤り検出は、以下のように行われる。以下に示す「×」は不一致，「○」は一致を示す。
検出符号→        第１  第２  第３  第４
・ビット０〜３          ×    ×    ×    ×
・ビット４〜７          ×    ×    ×    ○
・ビット８〜１１        ×    ×    ○    ○
・ビット１２〜１５      ×    ×    ○    ×
・ビット１６〜１８      ×    ○    ○    ×
・ビット１９〜２１      ×    ○    ○    ○
・ビット２２〜２４      ×    ○    ×    ○
・ビット２５〜２７      ×    ○    ×    ×
つまり、第４検出データまで使用すれば、誤りが発生したビットを８つの領域の何れかに特定できる。このように使用する検出データの次数を高めていけば、最終的に誤りが発生したビットを１ビット毎に特定可能である。
【００３０】
ここで、図６に示すように、８ビットのデータについて、誤りが発生した１ビットを特定するのに必要な符号長を比較すると、パリティでは８ビット、ＥＣＣ（Error Checker and Corrector）では６ビット、本実施形態では３ビットである（但し、第１検出符号を除いている）。したがって、他の手法よりも少ないビット数で特定が可能である。尚、同図中に示す第３検出符号については、データの上位側を「１」，下位側を「０」とするように入れ替えても良い。
【００３１】
以上のように第２実施形態によれば、第３，第４検出データのように高次の検出データを用いることで、アドレスビット列内又はデータビット列内において誤りがある部分を検出することが可能になる。
【００３２】
（第３実施形態）
図７に示すように、第３実施形態の誤り検出回路１２は、符号ビット記憶部１３（検出符号記憶手段，検出符号メモリ）を備えており、例えば第１実施形態に適用すると、第１及び第２検出符号は符号ビット記憶部１３に書き込まれて記憶される。したがって、メモリ３にはデータを１６ビットで記憶させることが可能になる。
【００３３】
（第４実施形態）
図８に示すように、第４実施形態のマイクロコンピュータ２１は、第１実施形態の構成にＥＣＣ２２（誤り検出訂正手段）を加えたもので、ＥＣＣ２２は、誤り検出回路４と共にメモリ・バス診断部２３を構成している。図９に示すように、ＥＣＣ２２は、ＥＣＣ符号化部２４，ＥＣＣ復号化部２５及び検出結果記憶部２６を備えている。ＥＣＣ符号化部２４は、誤り検出回路４と同様に、ＣＰＵ２がメモリ３にデータの書き込みを行う際に、その書き込みデータについて所定の論理演算を行いＥＣＣ符号（誤り検出符号）を生成する。生成されたＥＣＣ符号はメモリ３に書き込まれて記憶される。
【００３４】
ＥＣＣ復号化部２５は、ＣＰＵ２がメモリ３よりデータを読み出した際に、その読み出しデータについてＥＣＣ符号化部２４が行ったものと同じ論理演算を行い、ＥＣＣ符号を生成（復号）する。そして、メモリ３より同時に読み出されたＥＣＣ符号と比較することで、例えば１ビットの誤り訂正と、２ビット以上の誤り検出とを行う。その検出結果は、検出結果記憶部２６に書き込まれて記憶される。
【００３５】
図１０に示すように、第１及び第２検出符号は、メモリ３に記憶されるアドレスビット列と、ＥＣＣ符号を含むデータビット列とが誤り検出の対象であり、ＥＣＣ符号は、データビット列のみが誤り検出・訂正の対象となる。
【００３６】
次に、第４実施形態の作用について説明する。図１１に示すように、ＥＣＣ２２は、ステップＳ２及びＳ３の実行時に、メモリ３への書き込みデータについてＥＣＣ符号を生成する（Ｓ１１）。また、ステップＳ８及びＳ９の実行後に、第１及び第２検出符号を用いた結果データビット列に誤りがあれば（Ｓ１２：ＹＥＳ）、データビット列よりＥＣＣ符号を復号して（Ｓ１３）誤り検出・訂正を行い、その結果を、検出結果記憶部２６に記憶する（Ｓ１４）。
【００３７】
以上のように第４実施形態によれば、ＥＣＣ２２は、ＣＰＵ２がメモリ３にデータを書き込む際に、その書き込みデータについてＥＣＣ符号を生成し、ＣＰＵ２がメモリ３からデータを読み出す際に、その読み出しデータに対応するＥＣＣ符号に基づいて、データビット列の誤り検出及び訂正を行う。そして、ＥＣＣ２２は、誤り検出及び訂正を、誤り訂正回路８により、データビット列に誤りが検出されたことを条件として実行する。したがって、メモリ３に記憶されるデータの信頼性を更に向上させることができる。
【００３８】
本発明は上記した、又は図面に記載した実施形態にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
第２検出データは、アドレスビット列側のデータ値を「０」にして、データビット列側のデータ値を「１」にしても良い。
第１，第２及び第３以上の高次検出符号には、奇数パリティを用いても良いし、その他の誤り検出符号を用いても良い。
第５以上の高次検出符号を用いても良い。
【００３９】
アドレス及びデータのビット数は、個別の設計に応じて適宜変更すれば良い。
誤り検出手段の機能を、ソフトウェアで実現しても良い。
第３実施形態を、第２実施形態に適用しても良い。
第３実施形態において、符号ビット記憶部１３を誤り検出回路１２の外部に配置しても良い。
第２及び第３実施形態に、第４実施形態のＥＣＣ２２を加えても良い。
【符号の説明】
【００４０】
図面中、１はマイクロコンピュータ（半導体装置）、２はＣＰＵ、３はメモリ（検出符号記憶手段）、４は誤り検出回路（誤り検出手段）を示す。
【図１】
2016170679.tif 000003
【図２】
2016170679.tif 000004
【図３】
2016170679.tif 000005
【図４】
2016170679.tif 000006
【図５】
2016170679.tif 000007
【図６】
2016170679.tif 000008
【図７】
2016170679.tif 000009
【図８】
2016170679.tif 000010
【図９】
2016170679.tif 000011
【図１０】
2016170679.tif 000012
【図１１】
2016170679.tif 000013