(57)【要約】【課題】チップ面積の増大を抑えるためにメモリを冗長化することなく、故障時においても動作継続できるマイクロコントローラを提供する。【解決手段】本マイクロコントローラは、並列に同一の処理を実行する３個以上のプロセッサと記憶装置とを備える。記憶装置は、冗長化されていない記憶領域を持つメモリマットとアドレス選択部とデータ出力部と故障救済部とを有する。アドレス選択部は、プロセッサがアクセスの際にそれぞれ発行する３個以上のアドレスに基づいて、メモリマットの記憶領域を選択する。データ出力部は、アドレス選択部によって選択されたメモリマットの記憶領域からデータを読み出す。故障救済部は、メモリマットとアドレス選択部とデータ出力とで発生した所定数以下の故障を訂正またはマスクする。【選択図】図１
2015222467.tif 000002
【特許請求の範囲】
【請求項１】
３個以上のプロセッサと記憶装置とを備え、
前記３個以上のプロセッサは並列に同一の処理を実行可能であり、
前記記憶装置は、前記プロセッサがアクセスの際に発行するアドレスに対応し冗長化されていない記憶領域を持つメモリマットと、前記３個以上のプロセッサがアクセスの際にそれぞれ発行する３個以上のアドレスに基づいて、前記メモリマットの記憶領域を選択するアドレス選択部と、前記アドレス選択部によって選択された前記メモリマットの記憶領域からデータを読み出すデータ出力部と、前記メモリマットと前記アドレス選択部と前記データ出力とで発生した所定数以下の故障を訂正またはマスクする故障救済部とを有する、
マイクロコントローラ。
【請求項２】
請求項１において、前記メモリマットは１ワード当たりＷビットでＬワードの記憶領域で構成され（ＷとＬはそれぞれ自然数）、前記アドレス選択部は、それぞれが入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するｉ個のアドレスデコーダと（ｉは自然数）、前記ｉ個のアドレスデコーダから入力される前記選択信号が入力され、前記メモリマットのＬワードの中から１ワードを選択する多数決論理回路とを有する、
マイクロコントローラ。
【請求項３】
請求項２において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、１ビット誤り訂正と２ビット誤り検出を行う、
マイクロコントローラ。
【請求項４】
請求項２において、前記マイクロコントローラは、前記３個以上のプロセッサとして、第１と第２と第３の３個のプロセッサを備え、前記第１と第２と第３の３個のプロセッサは、前記記憶装置をアクセスするために、それぞれ第１と第２と第３アドレスを発行し、
前記マイクロコントローラは、前記第１アドレスと前記第２アドレスを比較する第１比較器と、前記第２アドレスと前記第３アドレスを比較する第２比較器と、前記第１アドレスと前記第３アドレスとがそれぞれ入力され、前記第１比較器と前記第２比較器の比較結果に基づいて、前記第１アドレスと前記第３アドレスのうちのいずれか一方を、対応するアドレスデコーダに供給する、ｉ個のセレクタを有し、
前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しいことを示すときには前記第１アドレスを対応するアドレスデコーダに供給し、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しくないことを示し前記第２比較器の比較結果が前記第２アドレスと前記第３アドレスとが等しいことを示すときには前記第３アドレスを対応するアドレスデコーダに供給する回路である、
マイクロコントローラ。
【請求項５】
請求項２において、前記マイクロコントローラは、前記３個以上のプロセッサとして、第１と第２と第３と第４の４個のプロセッサを備え、前記第１と第２と第３と第４の４個のプロセッサは、前記記憶装置をアクセスするために、それぞれ第１と第２と第３と第４アドレスを発行し、
前記マイクロコントローラは、前記第１アドレスと前記第２アドレスを比較する第１比較器と、前記第３アドレスと前記第４アドレスを比較する第２比較器と、前記第１アドレスと前記第３アドレスとがそれぞれ入力され、前記第１比較器と前記第２比較器の比較結果に基づいて、前記第１アドレスと前記第３アドレスのうちのいずれか一方を、対応するアドレスデコーダに供給する、ｉ個のセレクタを有し、
前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しいことを示すときには前記第１アドレスを対応するアドレスデコーダに供給し、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しくないことを示し前記第２比較器の比較結果が前記第３アドレスと前記第４アドレスとが等しいことを示すときには前記第３アドレスを対応するアドレスデコーダに供給する回路である、
マイクロコントローラ。
【請求項６】
請求項２において、前記ｉ個のアドレスデコーダのそれぞれは、ロウデコーダとカラムデコーダとを有する、
マイクロコントローラ。
【請求項７】
請求項１において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、ｂビットを１シンボルとするリードソロモン符号のｃシンボルの符号語に対する誤り訂正を実行可能であり（ｂとｃはそれぞれ自然数）、
前記メモリマットは、１ワード当たりＷビットでＬワードの記憶領域で構成され（ＷとＬはそれぞれ自然数）、それぞれが１ワード当たりｂビット以下のビット数でＬワードの複数の部分メモリマットに分割され、
前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダを、前記複数の部分メモリマットのそれぞれに対応付けて備える、
マイクロコントローラ。
【請求項８】
請求項７において、前記故障救済部は、前記複数の部分メモリマットのうち、１ワード当たりのビット数がｂビット未満である部分メモリマットから読み出されるデータに対して、予め値が規定される１ビットまたは複数のビットを補い、前記複数の部分メモリマットの数がｃ未満のときには、前記複数の部分メモリマットから読み出されるデータに対して、不足のシンボル数の予め値が規定されるデータを補って、前記誤り訂正を実行する、
マイクロコントローラ。
【請求項９】
請求項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、４ビットを１シンボルとするリードソロモン符号の１０シンボルの符号語に対する誤り訂正を実行可能であり、
前記メモリマットは、１ワード当たり３２ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり４ビットでＬワードの１０個の部分メモリマットに分割され、
前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダを、前記１０個の部分メモリマットのそれぞれに対応付けて備える、
マイクロコントローラ。
【請求項１０】
請求項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、５ビットを１シンボルとするリードソロモン符号の１５シンボルの符号語に対する誤り訂正を実行可能であり、
前記メモリマットは、１ワード当たり６４ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり５ビットでＬワードの１４個の部分メモリマットと１ワード当たり４ビットでＬワードの１個の部分メモリマットとに分割され、
前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダを、前記１５個の部分メモリマットのそれぞれに対応付けて備える、
マイクロコントローラ。
【請求項１１】
請求項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、５ビットを１シンボルとするリードソロモン符号の１８シンボルの符号語に対する誤り訂正を実行可能であり、
前記メモリマットは、１ワード当たり６４ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり４ビットでＬワードの１８個の部分メモリマットに分割され、
前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダを、前記１８個の部分メモリマットのそれぞれに対応付けて備える、
マイクロコントローラ。
【請求項１２】
請求項１おいて、前記３個以上のプロセッサと、前記記憶装置とが、単一半導体基板上に構成される、
マイクロコントローラ。
【請求項１３】
請求項１に記載されるマイクロコントローラが搭載される、
電子制御装置。
【請求項１４】
３個以上のプロセッサと、データ系故障マスク機能とアドレス系故障マスク機能とを備えたメモリとを同一チップ内に有する、マイクロコントローラであって、
前記データ系故障マスク機能は、前記プロセッサから前記メモリにデータを書き込む経路上の配線または回路または前記メモリから前記プロセッサにデータを読み出す経路上の配線または回路に、所定数以下の故障が発生したときに、当該故障の影響を前記マイクロコントローラの全体動作に及ばないようにマスクする機能であり、
前記アドレス系故障マスク機能は、前記プロセッサが前記メモリにアクセスする際に出力するアドレスの経路上の配線または回路に、所定数以下の故障が発生したときに、当該故障の影響を前記マイクロコントローラの全体動作に及ばないようにマスクする機能である、
マイクロコントローラ。
【請求項１５】
請求項１４において、前記データ系故障マスク機能が１ビット誤り訂正、２ビット誤り検出符号である、
マイクロコントローラ。
【請求項１６】
請求項１４において、前記メモリは、前記アドレス系故障マスク機能のために、冗長化されたアドレスデコーダと、前記冗長化されたアドレスデコーダの出力の多数決結果により選択されるメモリセルとを有する、
マイクロコントローラ。
【請求項１７】
請求項１４において、前記メモリは、前記アドレス系故障マスク機能のために、ビットスライスでのブロックに分割されたメモリセルと、前記ブロックのそれぞれに対応するアドレスデコーダと、ブロック単位の誤りを検出する符号を用いた誤り訂正回路とを有する、
マイクロコントローラ。
【請求項１８】
請求項１７において、前記ブロック単位の誤りを検出する符号がリードソロモン符号である、
マイクロコントローラ。
【請求項１９】
請求項１７において、前記誤り訂正回路を前記プロセッサごとに有する、
マイクロコントローラ。
【請求項２０】
請求項１４に記載されるマイクロコントローラが搭載される、
電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコントローラ及びそれを用いた電子制御装置に関し、特に故障が発生しても動作を継続することができる、信頼性の高い電子制御装置に好適に利用できるものである。
【背景技術】
【０００２】
制御の自動化が進み、電子制御装置の安全性、信頼性への要求が高まってきている。電子制御装置には、その安全性を確保するために、異常発生時に直ちにその異常を検出して動作を停止することが求められてきた。情報を処理するプロセッサに関しては、異常発生時に直ちにその異常を検出して動作を停止するために、プロセッサを２重化し、２個のプロセッサの出力を比較する手法が古くからとられている。近年では半導体プロセスの微細化に伴い、１チップに複数のプロセッサを実装できるようになり、上記２重化したプロセッサにプロセッサの動作に不可欠なメモリを付加して１チップ化した、チップ内冗長によるセーフティマイコンが、主として自動車制御用に実用化されている。
【０００３】
また近年においては、異常発生時に直ちにその異常を検出して動作を停止するだけでなく、さらには故障時においても動作を継続することが求められている。
【０００４】
近年の技術動向として、半導体プロセスの微細化が進み、さらに多くのプロセッサを１チップに実装可能となり、故障時においても動作を継続するために必要な数のプロセッサを１チップに実装できるようになってきている。以上述べた技術を単純に適用して故障時においても動作継続できるようにするためには、２重化したプロセッサとメモリから構成されるセーフティマイコンを２組、１チップに実装することである。
【０００５】
一方、メモリの故障対策には、誤り訂正（ＥＣＣ：Error Correction Code）が適用されている。例えば、１ビット誤り訂正、２ビット誤り検出（ＳＥＣＤＥＤ：Single Error Correction, Double Error Detection）符号が用いられる。この符号はその名の通り、１ビットの誤りであれば訂正して動作を継続することができ、２ビットの誤りが生じたときに初めて動作を停止するシステムに適する。
【０００６】
特許文献１には、１枚の汎用メモリモジュールのみで高度なエラー訂正を実現するメモリシステムが開示されている。ｎビット入出力を有するｍ個の半導体メモリチップを備え、ｎビット×ｌのデータにｎビット×（ｍ−ｌ）の誤り訂正符号を付加して、当該ｍ個の半導体メモリにｎビットずつ格納する（ｌ，ｍ，ｎは自然数）。誤り訂正能力は、ｎビット単位で１ヵ所に発生した誤りが訂正可能、２ヵ所に発生した誤りは検出可能とされる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−１７７９６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以上述べた従来技術の単なる拡張では、１チップ化のメリットについての更なる考慮が必要である。すなわち、単純に従来のセーフティマイコン２組を実装する場合には、故障分離の見地からは、別チップ構成の方が優れており、１チップに実装したときに同等以上の故障分離を実現するためには、レイアウトの工夫など面積的なオーバーヘッドと、それを実現するための開発費のオーバーヘッドとを伴うことになる。即ち、故障時においても動作継続できるようにするための冗長資源を１チップに実装することによるメリット、特にコスト削減、すなわちチップ面積削減を行う必要があるという課題がある。
【０００９】
しかし、プロセッサが使用するメモリのチップ面積に占める割合は、大きくなる傾向にある。論理回路に比べて半導体プロセスの微細化の進行が緩やかである上、プロセッサが使用するメモリ容量が増大する傾向にあるためである。したがって、多数のプロセッサを１チップに実装したときに、メモリも同様に冗長化することは、チップ面積、即ちコストの観点から許されない。
【００１０】
そこで、故障時においても動作継続できるようにするためには、１チップに、冗長化された複数のプロセッサと、誤り訂正可能なメモリとを搭載する。メモリには例えばＳＥＣＤＥＤや特許文献１に記載される誤り訂正を適用する。
【００１１】
しかし、通常のＳＥＣＤＥＤでは、データに発生した誤りは訂正することができるが、例えばアドレスデコーダなどのアドレス系に発生した故障は、訂正することができないので、アドレス系に単一故障点を持つことになる。ここで、単一故障点（Single Point of Failure）とは、１ヵ所の故障に起因してシステム全体の誤動作に波及するような故障個所を言い、単一故障点は故障時において動作継続を行う上での障害となる。そこで、通常のＳＥＣＤＥＤに代えて、特許文献１に記載される誤り訂正（S8ECD8ED）を適用することについて、本発明者が検討した結果、以下のような新たな課題があることがわかった。すなわち、メモリ制御部２０が単一故障点となる。また、アドレスバスもＤＩＭＭ内の配線によっており単一故障点となる。
【００１２】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
一実施の形態によれば、下記の通りである。
【００１４】
すなわち、一実施の形態に係るマイクロコントローラは、並列に同一の処理を実行する３個以上のプロセッサと記憶装置とを備える。記憶装置は、冗長化されていない記憶領域を持つメモリマットとアドレス選択部とデータ出力部と故障救済部とを有する。アドレス選択部は、プロセッサがアクセスの際にそれぞれ発行する３個以上のアドレスに基づいて、メモリマットの記憶領域を選択する。データ出力部は、アドレス選択部によって選択されたメモリマットの記憶領域からデータを読み出す。故障救済部は、メモリマットとアドレス選択部とデータ出力とで発生した所定数以下の故障を訂正またはマスクする。
【発明の効果】
【００１５】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１６】
すなわち、チップ面積の増大を抑えるためにメモリを冗長化することなく、故障時においても動作継続できるマイクロコントローラを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、本願の代表的な実施の形態に係るマイクロコントローラの構成例を示すブロック図である。
【図２】図２は、冗長化された４個のプロセッサによるマイクロコントローラの構成例を示すブロック図である。
【図３】図３は、図２の実施例におけるセレクタ２００の選択方式を示す説明図である。
【図４】図４は、冗長化された３個のプロセッサによるマイクロコントローラの構成例を示すブロック図である。
【図５】図５は、図４の実施例におけるセレクタ２００の選択方式の一例を示す説明図である。
【図６】図６は、図４の実施例におけるセレクタ２００の選択方式の別の例を示す説明図である。
【図７】図７は、冗長化されたｎ個のプロセッサの間で多数決を採るによるマイクロコントローラの構成例を示すブロック図である。
【図８】図８は、メモリ２００の構成例を示すブロック図である。
【図９】図９は、メモリ２００において冗長化したアドレスデコーダの多数決を採る構成例を示すブロック図である。
【図１０】図１０は、図７の実施例に好適な冗長化したアドレスデコーダの多数決を採る、メモリ２００の構成例を示すブロック図である。
【図１１】図１１は、図１０の実施例における冗長化したアドレスデコーダと多数決回路の構成例を示すブロック図である。
【図１２】図１２は、図１０の実施例における冗長化したアドレスデコーダと多数決回路のチップ内レイアウトの例を示す模式図である。
【図１３】図１３は、図１０の実施例における冗長化したアドレスデコーダと多数決回路の別の構成例を示すブロック図である。
【図１４】図１４は、実施例２のメモリ２００の構成例を示すブロック図である。
【図１５】図１５は、実施例２のメモリ２００の別の構成例を示すブロック図である。
【図１６】図１６は、実施例２のマイクロコントローラ１００のチップ内レイアウトの例を示す模式図である。
【図１７】図１７は、３２ビット幅のメモリ２００におけるリードソロモン符号の構成パラメータとオーバーヘッドの関係を示す説明図である。
【図１８】図１８は、６４ビット幅のメモリ２００におけるリードソロモン符号の構成パラメータとオーバーヘッドの関係を示す説明図である。
【図１９】図１９は、１２８ビット幅のメモリ２００におけるリードソロモン符号の構成パラメータとオーバーヘッドの関係を示す説明図である。
【図２０】図２０は、ブロック分割された３２ビット幅のメモリ２００の構成例である。
【図２１】図２１は、ブロック分割された６４ビット幅のメモリ２００の構成例である。
【図２２】図２２は、パーシャルライトを可能とするブロック分割された６４ビット幅のメモリ２００の構成例である。
【図２３】図２３は、実施例２のメモリ２００の誤り訂正動作を説明するための説明図である。
【発明を実施するための形態】
【００１８】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１９】
〔１〕＜アドレス系故障マスクを有する高信頼マイコン＞
本願において開示される代表的な実施の形態は、３個以上のプロセッサ（１０１−１〜１０１−ｎ）と記憶装置（２００）とを備える、マイクロコントローラ（１００）であって、以下のように構成される。
【００２０】
前記３個以上のプロセッサは並列に同一の処理を実行可能である。
【００２１】
前記記憶装置は、メモリマット（２０３）と、アドレス選択部（３０１）と、データ出力部（３０１）と、故障救済部（３０１、３０２）とを有する。前記メモリマットは、前記プロセッサがアクセスの際に発行するアドレスに対応し冗長化されていない記憶領域を持つ。前記アドレス選択部は、前記３個以上のプロセッサがアクセスの際にそれぞれ発行する３個以上のアドレスに基づいて、前記メモリマットの記憶領域を選択する。前記データ出力部は、前記アドレス選択部によって選択された前記メモリマットの記憶領域からデータを読み出す。前記故障救済部は、前記メモリマットと前記アドレス選択部と前記データ出力とで発生した所定数以下の故障を訂正またはマスクする。
【００２２】
これにより、メモリマットを冗長化することなく、したがってチップ面積の増大を抑えながら、故障時においても動作継続できるマイクロコントローラを提供することができる。本マイクロコントローラは、同一の処理を並行して実行するプロセッサを３個以上備えるので、プロセッサに故障が発生しても、その故障個所が所定数以下であれば、多数決などによりその故障をマスクして動作を継続することができる。また、冗長化されていないメモリマットを含む記憶装置全体のうちどこで故障が発生しても、その故障個所が所定数以下であれば、故障救済部によって訂正またはマスクされるので、マイクロコントローラはその動作を継続することができる。
【００２３】
〔２〕＜アドレスデコーダの冗長化＞
項１において、前記メモリマットは１ワード当たりＷビットでＬワードの記憶領域で構成される（ＷとＬはそれぞれ自然数）。前記アドレス選択部は、それぞれが入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するｉ個のアドレスデコーダ（２０１−１〜２０１−ｉ）と（ｉは自然数）、前記ｉ個のアドレスデコーダから入力される前記選択信号が入力され、前記メモリマットのＬワードの中から１ワードを選択する多数決論理回路（２０６−１〜２０６−Ｌ）とを有する。
【００２４】
これにより、メモリのアドレス系であるアドレス選択部に故障が発生しても、その故障をマスクして動作継続できる（アドレス系故障マスク機能を備える）マイクロコントローラを提供することができる。
【００２５】
〔３〕＜データ系故障マスク機能（ＳＥＣＤＥＤ）＞
項２において、前記故障救済部（２１０、２１０ａ、２１０ｂ）は、前記メモリマットから読み出されるデータに対して、１ビット誤り訂正と２ビット誤り検出を行う。
【００２６】
これにより、ＳＥＣＤＥＤによるデータ系故障マスク機能を備え、データ系に故障が発生しても、その故障をマスクして動作継続できるマイクロコントローラを提供することができる。
【００２７】
〔４〕＜３プロセッサ＞
項２または項３において、前記マイクロコントローラは、前記３個以上のプロセッサとして、第１と第２と第３の３個のプロセッサ（１０１−１〜１０１−３）を備え、前記第１と第２と第３の３個のプロセッサは、前記記憶装置をアクセスするために、それぞれ第１と第２と第３アドレスを発行する。
【００２８】
前記マイクロコントローラは、前記第１アドレスと前記第２アドレスを比較する第１比較器（１０２−１）と、前記第２アドレスと前記第３アドレスを比較する第２比較器（１０２−２）とを有する。前記マイクロコントローラは、さらに、前記第１アドレスと前記第３アドレスとがそれぞれ入力され、前記第１比較器と前記第２比較器の比較結果に基づいて、前記第１アドレスと前記第３アドレスのうちのいずれか一方を、対応するアドレスデコーダ（２０１−１〜２０１−ｉ）に供給する、ｉ個のセレクタ（２０２−１〜２０２−ｉ）を有する。
【００２９】
前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しいことを示すときには前記第１アドレスを対応するアドレスデコーダに供給する。前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しくないことを示し前記第２比較器の比較結果が前記第２アドレスと前記第３アドレスとが等しいことを示すときには前記第３アドレスを、対応するアドレスデコーダに供給する（図５、６）。
【００３０】
これにより、冗長化された３個のプロセッサを備え、当該３個のプロセッサがそれぞれ発行する３個のアドレスに１個のアドレスに誤りを生じさせる故障が生じたときに、その故障をマスクして動作継続することができ、さらに、３個のアドレスから正常なアドレスを選択するセレクタも冗長化されることにより、単一故障点にならない。
【００３１】
〔５〕＜４プロセッサ＞
項２または項３において、前記マイクロコントローラは、前記３個以上のプロセッサとして、第１と第２と第３と第４の４個のプロセッサ（１０１−１〜１０１−４）を備え、前記第１と第２と第３と第４の４個のプロセッサは、前記記憶装置をアクセスするために、それぞれ第１と第２と第３と第４アドレスを発行する。
【００３２】
前記マイクロコントローラは、前記第１アドレスと前記第２アドレスを比較する第１比較器（１０２−１）と、前記第３アドレスと前記第４アドレスを比較する第２比較器（１０２−２）とを有する。前記マイクロコントローラは、また、前記第１アドレスと前記第３アドレスとがそれぞれ入力され、前記第１比較器と前記第２比較器の比較結果に基づいて、前記第１アドレスと前記第３アドレスのうちのいずれか一方を、対応するアドレスデコーダ（２０１−１〜２０１−ｉ）に供給する、ｉ個のセレクタ（２０２−１〜２０２−ｎ）を有する。
【００３３】
前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しいことを示すときには前記第１アドレスを対応するアドレスデコーダに供給する。前記セレクタは、前記第１比較器の比較結果が前記第１アドレスと前記第２アドレスとが等しくないことを示し前記第２比較器の比較結果が前記第３アドレスと前記第４アドレスとが等しいことを示すときには前記第３アドレスを対応するアドレスデコーダに供給する（図３）。
【００３４】
これにより、冗長化された４個のプロセッサを備え、当該４個のプロセッサがそれぞれ発行する４個のアドレスに１個のアドレスに誤りを生じさせる故障が生じたときに、その故障をマスクして動作継続することができ、さらに、４個のアドレスから正常なアドレスを選択するセレクタも冗長化されることにより、単一故障点にならない。
【００３５】
〔６〕＜ロウデコーダとカラムデコーダ＞
項２において、前記ｉ個のアドレスデコーダのそれぞれは、ロウデコーダ（２０１ｒ−１〜２０１ｒ−ｉ）とカラムデコーダ（２０１ｃ−１〜２０１ｃ−ｉ）とを有する。
【００３６】
これにより、アドレスデコーダの回路規模を小さく抑えることができる。
【００３７】
〔７〕＜メモリマットのリードソロモン符号のブロック単位での分割＞
項１において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、ｂビットを１シンボルとするリードソロモン符号のｃシンボルの符号語に対する誤り訂正を実行可能である（ｂとｃはそれぞれ自然数）。前記メモリマットは、１ワード当たりＷビットでＬワードの記憶領域で構成され（ＷとＬはそれぞれ自然数）、それぞれが１ワード当たりｂビット以下のビット数でＬワードの複数の部分メモリマット（２０３−１〜２０３−ｃ）に分割される。前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダ（２０１−１〜２０１−ｃ）を、前記複数の部分メモリマットのそれぞれに対応付けて備える。
【００３８】
これにより、メモリのアドレス系であるアドレス選択部に故障が発生しても、その故障をマスクして動作継続できる（アドレス系故障マスク機能を備える）マイクロコントローラを提供することができる。
【００３９】
〔８〕＜１シンボルに満たない読み出しデータ＞
項７において、前記故障救済部は、前記複数の部分メモリマットのうち、１ワード当たりのビット数がｂビット未満である部分メモリマットから読み出されるデータに対して、予め値が規定される１ビットまたは複数のビットを補って、前記誤り訂正を実行する。前記複数の部分メモリマットの数がｃ未満のときには、前記故障救済部は、前記複数の部分メモリマットから読み出されるデータに対して、不足のシンボル数の予め値が規定されるデータを補って、前記誤り訂正を実行する。
【００４０】
これにより、メモリマットのブロック分割と誤り訂正符号の符号語に不整合がある場合にも、アドレス系故障マスク機能とデータ系故障マスク機能を備える、マイクロコントローラを提供することができる。
【００４１】
〔９〕＜３２ビット幅メモリ＞
項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、４ビットを１シンボルとするリードソロモン符号の１０シンボルの符号語に対する誤り訂正を実行可能である。前記メモリマットは、１ワード当たり３２ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり４ビットでＬワードの１０個の部分メモリマット（２０３−１〜２０３−８、２０３−Ｃ１，２０３−Ｃ２）に分割される。前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダ（２０１−１〜２０１−８、２０１−Ｃ１，２０１−Ｃ２）を、前記１０個の部分メモリマットのそれぞれに対応付けて備える（図１７、図２０）。
【００４２】
これにより、３２ビット幅のメモリにアドレス系故障マスク機能とデータ系故障マスク機能を備える、マイクロコントローラを提供することができる。
【００４３】
〔１０〕＜６４ビット幅メモリ＞
項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、５ビットを１シンボルとするリードソロモン符号の１５シンボルの符号語に対する誤り訂正を実行可能である。前記メモリマットは、１ワード当たり６４ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり５ビットでＬワードの１４個の部分メモリマット（２０３−１〜２０３−１２、２０３−Ｃ１，２０３−Ｃ２）と１ワード当たり４ビットでＬワードの１個の部分メモリマット（２０３−１３）とに分割される。前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダ（２０１−１〜２０１−１３、２０３−Ｃ１，２０３−Ｃ２）を、前記１５個の部分メモリマットのそれぞれに対応付けて備える（図１８、図２１）。
【００４４】
これにより、６４ビット幅のメモリにアドレス系故障マスク機能とデータ系故障マスク機能を備える、マイクロコントローラを提供することができる。
【００４５】
〔１１〕＜パーシャルライト可能な６４ビット幅メモリ＞
項７において、前記故障救済部は、前記メモリマットから読み出されるデータに対して、５ビットを１シンボルとするリードソロモン符号の１８シンボルの符号語に対する誤り訂正を実行可能である。前記メモリマットは、１ワード当たり６４ビットでＬワードの記憶領域で構成され、それぞれが１ワード当たり４ビットでＬワードの１８個の部分メモリマット（２０３−１〜２０３−１６、２０３−Ｃ１，２０３−Ｃ２）に分割される。前記アドレス選択部は、入力されるアドレスに基づいてＬワードの中から１ワードを選択する選択信号を出力するアドレスデコーダ（２０１−１〜２０１−１６、２０３−Ｃ１，２０３−Ｃ２）を、前記１８個の部分メモリマットのそれぞれに対応付けて備える（図２２）。
【００４６】
これにより、パーシャルライト可能な６４ビット幅のメモリにアドレス系故障マスク機能とデータ系故障マスク機能を備える、マイクロコントローラを提供することができる。
【００４７】
〔１２〕＜単一チップ＞
項１から項１１のうちのいずれか１項において、前記３個以上のプロセッサと、前記記憶装置とが、単一半導体基板上に構成される、マイクロコントローラ（１００）。
【００４８】
これにより、高集積、高信頼のマイクロコントローラＬＳＩを提供することができる。
【００４９】
〔１３〕＜電子制御装置（高信頼システム）＞
項１から項１２のうちのいずれか１項に記載されるマイクロコントローラ（１００）が搭載される、電子制御装置。
【００５０】
これにより、高信頼マイクロコントローラにより高信頼とされる電子制御装置（高信頼システム）を提供することができる。
【００５１】
〔１４〕＜アドレス系故障マスクを有する高信頼マイコン＞
本願において開示される代表的な実施の形態は、３個以上のプロセッサ（１０１−１〜１０１−ｎ）と、データ系故障マスク機能（３０１）とアドレス系故障マスク機能（３０２）とを備えたメモリ（２００）とを同一チップ内に有する、マイクロコントローラ（１００）である。前記データ系故障マスク機能は、前記プロセッサから前記メモリにデータを書き込む経路上の配線または回路または前記メモリから前記プロセッサにデータを読み出す経路上の配線または回路に、所定数以下の故障が発生したときに、当該故障の影響を前記マイクロコントローラの全体動作に及ばないようにマスクする機能である。前記アドレス系故障マスク機能は、前記プロセッサが前記メモリにアクセスする際に出力するアドレスの経路上の配線または回路に、所定数以下の故障が発生したときに、当該故障の影響を前記マイクロコントローラの全体動作に及ばないようにマスクする機能である。
【００５２】
これにより、メモリマットを冗長化することなく、したがってチップ面積の増大を抑えながら、故障時においても動作継続できるマイクロコントローラを提供することができる。本マイクロコントローラは、プロセッサを３個以上備えるので、同一の処理を並行して実行させることができ、プロセッサに故障が発生しても、その故障個所が所定数以下であれば、多数決などによりその故障をマスクして動作を継続することができる。また、冗長化されていないメモリマットを含むメモリへアクセスする経路上のどこで故障が発生しても、その故障個所が所定数以下であれば、その故障の影響が全体に及ばないようにマスクされるので、マイクロコントローラはその動作を継続することができる。
【００５３】
〔１５〕＜ＳＥＣＤＥＤ＞
項１４において、前記データ系故障マスク機能が１ビット誤り訂正、２ビット誤り検出符号である。
【００５４】
これにより、プロセッサメモリの間のデータ系に１ビットの誤りが発生しても、その誤りが訂正されることにより、その故障をマスクして動作を継続することができる。一方２ビットの誤りは検出され、マイクロコントローラに動作を停止させ、或いは、故障解析や復元、復旧動作に移行させることができる。
【００５５】
〔１６〕＜冗長化アドレスデコーダ＋多数決回路＞
項１４において、前記メモリは、前記アドレス系故障マスク機能のために、冗長化されたアドレスデコーダ（２０１−１〜２０１−ｉ）と、前記冗長化されたアドレスデコーダの出力の多数決結果により選択されるメモリセル（２０３）とを有する。
【００５６】
これにより、メモリのアドレス系であるアドレス選択部に故障が発生しても、その故障をマスクして動作継続できる（アドレス系故障マスク機能を備える）マイクロコントローラを提供することができる。
【００５７】
〔１７〕＜ビットスライスによるブロック分割＞
項１４において、前記メモリは、前記アドレス系故障マスク機能のために、ビットスライスでのブロックに分割されたメモリセル（２０３−１〜２０３−ｃ）と、前記ブロックのそれぞれに対応するアドレスデコーダ（２０１−１〜２０１−ｃ）と、ブロック単位の誤りを検出する符号を用いた誤り訂正回路（２１０、２１０ａ、２１０ｂ）とを有する。
【００５８】
これにより、メモリのアドレス系に故障が発生しても、その故障をデータ系故障マスク機能によって訂正・マスクして、動作継続できる（アドレス系故障マスク機能を備える）マイクロコントローラを提供することができる。
【００５９】
〔１８〕＜リードソロモン符号＞
項１７において、前記ブロック単位の誤りを検出する符号がリードソロモン符号である。
【００６０】
これにより、ブロック単位の誤り訂正を、リードソロモン符号による周知の誤り訂正回路によって実装することができる。
【００６１】
〔１９〕＜プロセッサ毎の誤り訂正回路＞
項１７において、前記誤り訂正回路（２１０−１〜２１０−ｎ）を前記プロセッサごとに有する（図１０）。
【００６２】
これにより、誤り訂正回路が冗長化され、単一故障点にならないように実装することができる。
【００６３】
〔２０〕＜電子制御装置（高信頼システム）＞
項１４から項１９のうちのいずれか１項に記載されるマイクロコントローラが搭載される、電子制御装置。
【００６４】
これにより、高信頼マイクロコントローラにより高信頼とされる電子制御装置（高信頼システム）を提供することができる。
【００６５】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００６６】
〔実施例１〕
本願において開示される代表的な実施の形態を図１に示す。マイクロコントローラ１００は、冗長化されたプロセッサ１０１−１〜１０１−ｎと、データ系故障マスク機能３０１とアドレス系故障マスク機能３０２を有するメモリ２００とを含んで構成される。特に制限されないが、マイクロコントローラ１００は、例えば、公知のＣＭＯＳ（Complementary Metal-Oxide-Semiconductor field effect transistor）ＬＳＩ（Large Scale Integrated circuit）の製造技術を用いて、シリコンなどの単一半導体基板上に形成される。マイクロコントローラ１００は、例えば複数のプロセッサ等から成る論理回路チップとメモリチップとに分けて構成され、公知のＳＩＰ（System In Package）やＭＣＭ（Multi-Chip Module）などの技術によって積層等されて実装されても良い。
【００６７】
冗長化されたプロセッサ１０１−１〜１０１−ｎは、同一の処理を並列に実行する。より詳しくは、冗長化されたプロセッサ１０１−１〜１０１−ｎは、同じアドレスから同じ命令を同時に読み出して実行し、同時に同じデータを読み出して、同時に同じ結果を出力する。結果は汎用レジスタやステータスレジスタに反映され、またはメモリに書き込まれる。ここで、「同時」とは基本的には同一のクロックサイクルを指すが、冗長化された各プロセッサで実行される処理の同一性が保証される範囲内で、例えば数サイクルの時差を含んでいてもよい。
【００６８】
メモリ２００は、データ系故障マスク機能３０１とアドレス系故障マスク機能３０２を有する。より具体的には、メモリ２００は、各プロセッサからのアクセス時に指定されるアドレスに対応する単一の記憶領域を持つ、即ち冗長化されていないメモリマットと、メモリマットの記憶領域を選択するアドレス選択部と、アドレス選択部によって選択された記憶領域からデータを読み出すデータ出力部と、さらに故障救済部とを有する。アドレス選択部は、プロセッサ１０１−１〜１０１−ｎが出力するアドレスＡＤＤＲ−１〜ＡＤＤＲ−ｎに基づいて、メモリマットの記憶領域を選択する。
【００６９】
データ出力部は、選択された記憶領域からデータを読み出し、故障救済部は読み出されたデータに対して誤り訂正・誤り検出を行う。メモリマットに格納されているデータには、誤り訂正符号が付加されており、故障救済部はこの誤り訂正符号による誤り訂正能力の範囲の誤りを訂正し、誤り検出能力の範囲の誤りを検出する。例えば、誤り訂正符号をＳＥＣＤＥＤとした場合には、１ビット誤りは訂正され、２ビット誤りが検出され、それ以上の誤りは検出不能となる。故障救済部による、この誤り訂正・誤り検出動作により、メモリ２００のデータ系故障マスク機能３０１が実現される。
【００７０】
故障救済部はさらに、メモリ２００のアドレス系故障マスク機能３０２を実現する。アドレス選択部には、プロセッサ１０１−１〜１０１−ｎが出力するアドレスＡＤＤＲ−１〜ＡＤＤＲ−ｎが入力される。全てのプロセッサ１０１−１〜１０１−ｎが正常に動作していれば、アドレスＡＤＤＲ−１〜ＡＤＤＲ−ｎは全て同一であるが、いずれかのプロセッサに故障が発生すれば、アドレスＡＤＤＲ−１〜ＡＤＤＲ−ｎのうちの１個のアドレスは他のアドレスとは異なる値をとる。このとき、アドレス選択部は、多数決回路などにより、故障によって他のアドレスと異なったアドレスを無視し、正しいアドレスによってメモリマットの記憶領域を選択する。しかし、アドレス選択部自体に故障が発生すると、正しくない記憶領域が選択されることになる。その場合、上記データ系故障マスク機能３０１によっては、その故障を訂正または検出することができない。そこで、故障救済部は、アドレス選択部に発生する故障を救済することができるように構成する。例えば、アドレス選択部を、冗長化された複数のアドレスデコーダと、複数のデコード結果に対する多数決回路とで構成し、アドレスデコーダに発生する故障をマスクする。また別の一例では、メモリマットに格納されるデータの誤り訂正を複数ビット単位での誤り訂正能力を持つブロック符号とし、訂正の単位に対応する複数のビットごとにメモリマットを分割し、分割されたメモリマットそれぞれにアドレスデコーダを設ける。複数のアドレスデコーダのうち、当該誤り訂正符号による訂正能力の範囲内の数のアドレスデコーダに故障が発生しても、その故障によって読み出されたデータに発生した誤りは、上述のデータ系故障マスク機能３０１によって訂正される。結果的に、アドレスデコーダに生じた故障がマスクされる。ここで、ブロック符号とは、複数ビットを単位として誤り訂正、誤り検出を行う能力を持つブロック符号としては、リードソロモン符号が知られている。また本発明が提供するように、プロセッサ１０１−１〜１０１−ｎからアドレスデコーダに至るアドレスＡＤＤＲ−１〜ＡＤＤＲ−ｎの経路、データ部の誤り訂正回路を冗長化した上で、特許文献１に記載されるブロック誤り訂正符号（例えばS8ECD8ED）を適用することも可能である。
【００７１】
これにより、メモリマットを冗長化することなく、したがってチップ面積の増大を抑えながら、故障時においても動作継続できるマイクロコントローラを提供することができる。本マイクロコントローラは、同一の処理を並行して実行するプロセッサを３個以上備えるので、プロセッサに故障が発生しても、その故障個所が所定数以下であれば、多数決などによりその故障をマスクして動作を継続することができる。また、冗長化されていないメモリマットを含む記憶装置全体のうちどこで故障が発生しても、その故障個所が所定数以下であれば、故障救済部によって訂正またはマスクされるので、マイクロコントローラはその動作を継続することができる。
【００７２】
ここで、メモリ２００は、ＲＡＭ（Random Access Memory）であってもＲＯＭ（Read Only Memory）であっても良い。ＲＡＭの場合は、データを書き込む経路上に、誤り訂正のための冗長部（符号部）を生成して付加する符号化回路が設けられ、上記故障救済部は、それに対応する誤り訂正、誤り検出処理を行う。ＲＯＭの場合は、符号化回路は省略され、予め誤り訂正のための冗長部（符号部）が付加されたデータが、書き込まれる。ここで、「データ」とはメモリに格納される値を指すものであって、プロセッサにとっては、狭義のデータ、命令コード、その他如何なる値であっても良い。メモリ２００は、特に制限されないが、プロセッサ１０１−１〜１０１−ｎと、バスを介して接続され、当該バスには他のバスマスタや他のメモリが接続されても良い。また、メモリ２００以外にメモリ２００と同様に、データ系故障マスク機能３０１とアドレス系故障マスク機能３０２を備えるメモリを、さらに備えてもよい。
【００７３】
冗長化されたプロセッサ１０１−１〜１０１−ｎは、プロセッサ自身の故障を検出しマスクして動作を継続するためには３個以上必要であり、冗長化されたプロセッサを４個有する実施例を図２に、冗長化されたプロセッサを３個有する実施例を図４、図７に示す。
【００７４】
図２の実施例に示される、マイクロコントローラ１００は、冗長化された４個のプロセッサ１０１−１〜１０１−４とメモリ２００との間に、比較器１０２−１と１０２−２とセレクタ２０２とを備える。プロセッサ１０１−１と１０１−３のアドレス出力がそれぞれＡＤＤＲ−ａとＡＤＤＲ−ｂとしてセレクタ２０２に入力され、プロセッサ１０１−１と１０１−３のデータ出力がそれぞれＤＡＴＡ−ａとＤＡＴＡ−ｂとしてセレクタ２０２に入力されている。なお、図２及び本願の他の図面に示される信号線はバス表記が省略されているが、アドレスやデータは複数ビットからなるバスである。比較器１０２−１は冗長化されているプロセッサ１０１−１と１０１−２の出力を比較し、比較器１０２−２はプロセッサ１０１−３と１０１−４の出力を比較し、それぞれの比較結果を図示が省略されている信号線等により、セレクタ２０２に出力する。ここで、複数のプロセッサからの出力の比較には、アドレスとデータの比較だけでなく、制御線（例えばメモリに対するリード／ライト信号、イネーブル信号等）の状態の比較やプロセッサ内部のレジスタ等の値の比較が含まれる。セレクタ２０２は、図３に示される選択方法によって選択された、アドレスＡＤＤＲ−ａまたはＡＤＤＲ−ｂをメモリ２００に出力する。データＤＡＴＡ−ａ、ＤＡＴＡ−ｂ及びその他の制御信号などについても同様である。プロセッサ１０１−１と１０１−２の出力が一致するときは、プロセッサ１０１−３と１０１−４の出力の比較結果に関わらずａ側即ちプロセッサ１０１−１と１０１−２の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ１）。プロセッサ１０１−１と１０１−２の出力が不一致で、プロセッサ１０１−３と１０１−４の出力が一致する場合には、プロセッサ１０１−１と１０１−２に故障個所が存在すると判断され、ｂ側即ちプロセッサ１０１−３と１０１−４の出力であるＡＤＤＲ−ｂとＤＡＴＡ−ｂが選択されてメモリ２００に供給される（Ｃａｓｅ２）。プロセッサ１０１−１と１０１−２の出力が不一致で、さらにプロセッサ１０１−３と１０１−４の出力も不一致の場合には、プロセッサ１０１−１〜１０１−４に少なくとも２ヵ所以上の故障個所が存在すると判断され、マイクロコントローラ１００は動作を停止し、その後リセットなどの復旧処理に移行する（Ｃａｓｅ３）。
【００７５】
以上のように、図２の実施例に示されるマイクロコントローラ１００では、冗長化された４個のプロセッサ１０１−１〜１０１−４のうち、少なくとも２個の出力が一致したときには、出力不一致の原因となったプロセッサの故障がマスクされ、一致した出力を正しい出力であるものとして動作を継続することができる。
【００７６】
図４の実施例に示されるマイクロコントローラ１００は、冗長化された３個のプロセッサ１０１−１〜１０１−３とメモリ２００との間に、比較器１０２−１と１０２−２と１０２−３とセレクタ２０２と備える。プロセッサ１０１−１と１０１−３のアドレス出力がそれぞれＡＤＤＲ−ａとＡＤＤＲ−ｂとしてセレクタ２０２に入力され、プロセッサ１０１−１と１０１−３のデータ出力がそれぞれＤＡＴＡ−ａとＤＡＴＡ−ｂとしてセレクタ２０２に入力されている。比較器１０２−１はプロセッサ１０１−１と１０１−２の出力を比較し、比較器１０２−２はプロセッサ１０１−２と１０１−３の出力を比較し、比較器１０２−３はプロセッサ１０１−１と１０１−３の出力を比較し、それぞれの比較結果を図示が省略されている信号線等により、セレクタ２０２に出力する。セレクタ２０２は、図５または図６に示される選択方法によって選択された、アドレスＡＤＤＲ−ａまたはＡＤＤＲ−ｂをメモリ２００に出力する。データＤＡＴＡ−ａ、ＤＡＴＡ−ｂ及びその他の制御信号などについても同様である。
【００７７】
図５に示される選択方法について説明する。プロセッサ１０１−１と１０１−２の出力が一致するときは、プロセッサ１０１−２と１０１−３の出力の比較結果に関わらずａ側即ちプロセッサ１０１−１と１０１−２の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ１）。プロセッサ１０１−１と１０１−２の出力が不一致で、プロセッサ１０１−２と１０１−２の出力が一致する場合には、プロセッサ１０１−１に故障個所が存在すると判断され、ｂ側即ちプロセッサ１０１−２と１０１−３の出力であるＡＤＤＲ−ｂとＤＡＴＡ−ｂが選択されてメモリ２００に供給される（Ｃａｓｅ２）。プロセッサ１０１−１と１０１−２の出力が不一致で、さらにプロセッサ１０１−２と１０１−３の出力も不一致の場合には、プロセッサ１０１−１〜１０１−３に少なくとも２ヵ所以上の故障個所が存在すると判断され、マイクロコントローラ１００は動作を停止し、その後リセットなどの復旧処理に移行する（Ｃａｓｅ３）。
【００７８】
図６に示される選択方法について説明する。３個のプロセッサ１０１−１と１０１−２と１０１−３の間の全ての組合せでの出力の比較結果を利用して、メモリ２００に供給するアドレスとデータ等を選択するので、図５に示される選択方法よりも完全な多数決論理が構成される。
【００７９】
３個のプロセッサ１０１−１と１０１−２と１０１−３の間の全ての組合せでの出力の比較結果が一致の場合には、ａ側即ちプロセッサ１０１−１の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ１）。
【００８０】
プロセッサ１０１−１と１０１−２の出力が不一致、プロセッサ１０１−２と１０１−３の出力が一致、プロセッサ１０１−１と１０１−３の出力が一致の場合には、ｂ側即ちプロセッサ１０１−３の出力であるＡＤＤＲ−ｂとＤＡＴＡ−ｂが選択されてメモリ２００に供給される（Ｃａｓｅ２）。
【００８１】
プロセッサ１０１−１と１０１−２の出力が一致、プロセッサ１０１−２と１０１−３の出力が不一致、プロセッサ１０１−１と１０１−３の出力が一致の場合には、ａ側即ちプロセッサ１０１−１の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ３）。
【００８２】
プロセッサ１０１−１と１０１−２の出力が不一致、プロセッサ１０１−２と１０１−３の出力が不一致、プロセッサ１０１−１と１０１−３の出力が一致の場合には、ａ側即ちプロセッサ１０１−１の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ４）。この場合、プロセッサ１０１−２に故障が発生したものと判断される。
【００８３】
プロセッサ１０１−１と１０１−２の出力が一致、プロセッサ１０１−２と１０１−３の出力が一致、プロセッサ１０１−１と１０１−３の出力が不一致の場合には、ａ側即ちプロセッサ１０１−１の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ５）。
【００８４】
プロセッサ１０１−１と１０１−２の出力が不一致、プロセッサ１０１−２と１０１−３の出力が一致、プロセッサ１０１−１と１０１−３の出力が不一致の場合には、ｂ側即ちプロセッサ１０１−３の出力であるＡＤＤＲ−ｂとＤＡＴＡ−ｂが選択されてメモリ２００に供給される（Ｃａｓｅ６）。この場合、プロセッサ１０１−１に故障が発生したものと判断される。
【００８５】
プロセッサ１０１−１と１０１−２の出力が一致、プロセッサ１０１−２と１０１−３の出力が不一致、プロセッサ１０１−１と１０１−３の出力が不一致の場合には、ａ側即ちプロセッサ１０１−１の出力であるＡＤＤＲ−ａとＤＡＴＡ−ａが選択されてメモリ２００に供給される（Ｃａｓｅ７）。この場合、プロセッサ１０１−３に故障が発生したものと判断される。
【００８６】
３個のプロセッサ１０１−１と１０１−２と１０１−３の間の全ての組合せでの出力の比較結果が不一致の場合には、プロセッサ１０１−１〜１０１−３に少なくとも２ヵ所以上の故障個所が存在すると判断され、マイクロコントローラ１００は動作を停止し、その後リセットなどの復旧処理に移行する（Ｃａｓｅ８）。
【００８７】
３個のプロセッサ１０１−１と１０１−２と１０１−３の間の全ての組合せでの出力の比較結果のうち、１つの組合せのみ不一致を示し、他の２つの組合せが一致を示す場合、即ちＣａｓｅ２、３及び５は、３個のプロセッサ１０１−１〜１０１−３のいずれかの故障とは考えられず、比較器１０２−１〜１０２−３のいずれかの故障と考えられる。
【００８８】
以上のように、図４の実施例に示されるマイクロコントローラ１００では、冗長化された３個のプロセッサ１０１−１〜１０１−３のうち、少なくとも２個の出力が一致したときには、出力不一致の原因となったプロセッサの故障がマスクされ、一致した出力を正しい出力であるものとして動作を継続することができる。
【００８９】
プロセッサの数を一般化してｎ個とした場合、図７の実施例に示されるように、マイクロコントローラ１００は、冗長化されたｎ個のプロセッサ１０１−１〜１０１−ｎとメモリ２００との間に、多数決回路を設けて構成される。ｎの値は任意であるが、マイクロコントローラ１００の安全性についての仕様を、故障個所が１ヵ所の場合はそれをマスクして動作継続させ、２ヵ所以上の場合は動作を停止させるものとすると、冗長化するプロセッサの個数は３個または４個が適切である。さらに、図２と図４に示したように、少なくとも２個の比較器１０２−１と１０２−２を備え、冗長化された３個または４個のプロセッサのうちの２個ずつの出力を、互いに異なる比較器で比較する。互いに異なる比較器で比較される２個のプロセッサの出力（ＡＤＤＲ−ａとＡＤＤＲ−ｂ）を２入力セレクタ２０２に入力し、当該２個の比較器による一致／不一致の比較結果に基づいて、入力されたプロセッサ出力のうちの一方を、メモリ２００に出力する。比較器１０２は、プロセッサ１０１−１〜３または４からメモリ２００への信号の伝搬経路に対して直列に挿入される必要がないので、伝搬遅延に対する影響は小さい。またセレクタ２０２は選択数が最小限の２入力セレクタであるので、伝搬遅延は小さい。即ち、図２と図４に示される実施例では、冗長化された３個または４個のプロセッサを備えるマイクロコントローラ１００において、多数決回路と同等の機能を、極めて高速に実現することができる。
【００９０】
図８にメモリ２００の構成例を示す。アドレスデコーダが冗長化され、アドレスデコーダにアドレスを供給する前述のセレクタ２０２も冗長化されている。図２または図４と同様の回路構成により３個または４個に冗長化されたプロセッサ１０１−１〜１０１−３または１０１−４のアドレス出力を代表する２個のアドレスＡＤＤＲ−ａとＡＤＤＲ−ｂは、冗長化されたｉ個（ｉは自然数）のセレクタ２０２−１〜２０２−ｉにそれぞれ入力される。
【００９１】
アドレスＡＤＤＲ−ａとＡＤＤＲ−ｂは、図３、５、６を引用して前述した選択方法で、セレクタ２０２−１〜２０２−ｉにより選択され、同じ個数で冗長化されたアドレスデコーダ２０１−１〜２０１−ｉに入力される。以上のようにアドレスデコーダ２０１−１〜２０１−ｉに対応してセレクタ２０２−１〜２０２−ｉを個別に設けることにより、セレクタ２０２−１〜２０２−ｉの故障の影響を全てのアドレスデコーダが受けないようにしている。さらに故障分離効果を高めるためには、セレクタ２０２−１〜２０２−ｉ、アドレスデコーダ２０１−１〜２０１−ｉ、そして両者間を結ぶアドレス線の隔離（相互に距離をとること）が有効である。
【００９２】
図２または図４と同様の回路構成により３個または４個に冗長化されたプロセッサ１０１−１〜１０１−３または１０１−４のデータ出力を代表する２個のデータＤＡＴＡ−ａとＤＡＴＡ−ｂは、セレクタ２０２−ｄにより選択され、メモリセル２０３に入力されるライトデータとなる。ここで、メモリセル２０３は、複数のワード線と各ワード線によって選択され、複数のビット線から並列にアクセス（リードまたはライト）可能な、複数の１ビット記憶素子によって構成され、メモリマット、メモリアレイとも呼ばれる。
【００９３】
メモリセル２０３の出力データ（リードデータ）はバッファを経由して、プロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに供給される。なお、データ信号はプロセッサ、メモリ間を双方向に行き来するので、セレクタ２０２−ｄとトライステートバッファからなるデータインターフェース２２０によりライトデータはセレクタ２０２−ｄにより選択され、リードデータは同じデータがプロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに供給される。誤り訂正回路は図８に示すようにメモリセル２０３直近に誤り訂正回路２１０として実装する場合と、プロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに誤り訂正回路２１０−ａ，２１０−ｂとして実装する場合とがある。
【００９４】
ここで、冗長化したセレクタ２０２−１〜２０２−ｉとアドレスデコーダ２０１−１〜２０１−ｉがアドレス系故障マスク機能３０２に相当する。また、誤り訂正回路２１０または誤り訂正回路２１０−ａ，２１０−ｂが、データ系故障マスク機能３０１となり、ブロック単位の誤り訂正符号を用いた場合には、アドレス系故障マスク機能３０２も兼ねる。
【００９５】
図９はアドレス系故障マスク機能３０２としてアドレスデコーダを冗長化し、その出力の多数決を採る構成のメモリ２００の例である。冗長化したアドレスデコーダ２０１−１〜２０１−ｉを有し、その出力を多数決回路２０６−１〜２０６−ｊで多数決を採りその出力でメモリセル２０３を選択する。ここでｊは、メモリセル２０３のワード線の数である。本実施例においてもアドレスデコーダ２０１−１〜２０１−ｉに対応してセレクタ２０２−１〜２０２−ｉを個別に設けることにより、セレクタ２０２−１〜２０２−ｉの故障の影響を全てのアドレスデコーダが受けないようにしている。さらに故障分離効果を高めるためには、セレクタ２０２−１〜２０２−ｉ、アドレスデコーダ２０１−１〜２０１−ｉ、そして両者間を結ぶアドレス線の隔離（相互に距離をとること）が有効である。
【００９６】
ここで、冗長化したセレクタ２０２−１〜２０２−ｉとアドレスデコーダ２０１−１〜２０１−ｉ、多数決回路２０６−１〜２０６−ｊがアドレス系故障マスク機能３０２に相当し、誤り訂正回路２１０または誤り訂正回路２１０−ａ，２１０−ｂが、データ系故障マスク機能３０１に相当する。
【００９７】
したがって、以上述べた本実施例によれば、セレクタ２０２−１〜２０２−ｉのいずれかが故障した場合でもその故障の影響は多数決によりマスクされる。また、データ系の故障は誤り訂正符号によりマスクされる。
【００９８】
以上、図８と図９を引用して、３個または４個に冗長化されたプロセッサ１０１−１〜１０１−３または１０１−４に接続されて好適な、メモリ２００の構成例について説明した。図７に示されるような、プロセッサの冗長化の個数が一般的なｎ個の場合に好適な、メモリ２００の構成例を図１０に示す。
【００９９】
メモリ２００は、プロセッサの冗長化の個数と同数のｎ個に冗長化されたアドレスデコーダ２０１−１〜２０１−ｎを備える。図７に示された多数決回路１０３は省略され、プロセッサ１０１−１〜１０１−ｎのそれぞれのアドレス出力ＡＤＤＲ−１〜ＡＤＤＲ−ｎが、アドレスデコーダ２０１−１〜２０１−ｎに直接入力される。アドレスデコーダ２０１−１〜２０１−ｎの出力は、図９と同じようにｊ個の多数決回路２０６−１〜２０６−ｊで多数決を採りその出力により、メモリセル２０３におけるアクセス対象のワード線を選択する。
【０１００】
メモリセル２０３の出力データ（リードデータ）はバッファを経由して、プロセッサ１０１−１〜１０１−ｎに供給される。データインターフェース２２０には、図８の構成例のセレクタ２０２−ｄに代えて多数決回路１０３−ｄが設けられており、プロセッサ１０１−１〜１０１−ｎから出力されるライトデータＤＡＴＡ−１〜ＤＡＴＡ−ｎが入力され、多数決論理を経てメモリセル２０３に書き込まれる。誤り訂正回路は図８に示されるのと同様に、図１０においてもメモリセル２０３の直近に誤り訂正回路２１０として実装する場合と、プロセッサ１０１−１〜１０１−ｎに接続される誤り訂正回路２１０−１〜２１０−ｎとして実装する場合とがある。
【０１０１】
ここで、冗長化したアドレスデコーダ２０１−１〜２０１−ｎと多数決回路２０６＿１〜２０６＿ｊがアドレス系故障マスク機能３０２に相当する。また、誤り訂正回路２１０または誤り訂正回路２１０−１〜２１０−ｎが、データ系故障マスク機能３０１となる。
【０１０２】
図１１は、図１０の実施例における冗長化したアドレスデコーダ２０１−１〜２０１−ｉと多数決回路２０６−１〜２０６−ｊの構成例を示すブロック図である。冗長化したアドレスデコーダ２０１−１〜２０１−ｉの出力を多数決回路２０６−１〜２０６−ｊで多数決を採りその出力でメモリセル２０３を選択する。なお、アドレスデコーダ２０１−１〜２０１−ｉはアドレス信号をおおむね２分割し、ロウデコーダとカラムデコーダとに分けることによりアドレスデコーダ２０１−１〜２０１−ｉの回路規模を小さくすることができる。
【０１０３】
図１２は、図１０の実施例における冗長化したアドレスデコーダと多数決回路のチップ内レイアウトの例を示す模式図である。マイクロコントローラ１００は、１チップに集積して構成され、ｎ個の冗長化したプロセッサ１０１−１〜１０１−ｎが搭載されている。同じｎ個に冗長化されたアドレスデコーダ２０１−１〜２０１−ｎは、ロウ側とカラム側に２分割され、メモリセル２０３の１辺に沿ってロウデコーダ２０１ｒ−１〜２０１ｒ−ｎが配置され、直交する他の１辺に沿ってカラムデコーダ２０１ｃ−１〜２０１ｃ−ｎが配置される。ロウデコーダ２０１ｒ−１〜２０１ｒ−ｎとメモリセル２０３の間、カラムデコーダ２０１ｃ−１〜２０１ｃ−ｎとメモリセル２０３の間のそれぞれに、多数決回路２０６−１〜２０６−ｊが配置される。先に述べたように、アドレスデコーダ２０１−１〜２０１−ｎをロウデコーダ２０１ｒ−１〜２０１ｒ−ｉとカラムデコーダ２０１ｃ−１〜２０１ｃ−ｉとに分け、それぞれについて多数決回路２０６−１〜２０６−ｊで多数決を採りその出力でメモリセル２０３を選択することで、アドレスデコーダの回路規模とチップ面積を小さくすることができる。
【０１０４】
図１３は、図１０の実施例における冗長化したアドレスデコーダと多数決回路の、図１１とは別の構成例を示すブロック図である。図１１では、冗長化されたｎ個のアドレスデコーダ２０１−１〜２０１−ｎは、全て同じ回路で構成される例を示した。即ち、ｋビットの各アドレスからそれぞれインバータによって正論理と負論理のレーンを形成し、正側か負側のいずれか一方のレーンから入力される論理値を、ＡＮＤゲートによって論理積をとって各デコード出力を生成する。一方、図１３では、冗長化されたｎ個のアドレスデコーダ２０１−１〜２０１−ｎを、必ずしも同じ論理回路で構成しない例が示される。ｋビットの各アドレスからそれぞれインバータによって正論理と負論理のレーンを形成する回路は、図１１と同じであるが、各デコード出力を生成するために、ＡＮＤゲートだけではなく種々の論理ゲートによって論理演算を行う点で異なる。それに伴って、各論理ゲートへは、正論理と負論理の何れのレーンから入力されるべきかが調整される。例えば、アドレスデコーダ２０１−１ではＮＯＲゲート、２０１−２ではＡＮＤゲート、２０１−ｎではＮＡＮＤゲートが使用され、各デコード出力の正論理／負論理の関係は、多数決回路２０６−１〜２０６−ｊの入力端子を正論理入力とするか負論理入力とするかによって調整される。これにより、冗長化したアドレスデコーダ２０１−１〜２０１−ｉの間で同一故障が発生する確率を低減し、冗長化の効果がより向上される。
【０１０５】
〔実施例２〕
実施例１では、アドレス系故障マスク機能３０２の実現形態として、メモリ２００のアドレスデコーダを冗長化した種々の構成例について説明した。本実施例２においては、アドレス系故障マスク機能３０２の別の実現形態として、メモリ２００をビットスライスで分割したブロックごとにアドレスデコーダと、ブロック単位の誤りを訂正・検出する符号を用いた誤り訂正回路とを備え、データ系故障マスク機能３０１とアドレス系故障マスク機能３０２とを合わせて実現する実現形態について説明する。
【０１０６】
図１４は、ブロック単位の誤りをマスクできる誤り訂正符号によりアドレス系の故障をマスクすることができるメモリ２００の構成例である。ブロック単位の誤りをマスクできる誤り訂正符号としてリードソロモン符号を用いることができる。
【０１０７】
リードソロモン符号では、複数ビットで構成されるシンボルが誤り訂正の単位であり、符号語はそれぞれ所定のシンボル数のデータ部と符号部（冗長部）によって構成される。メモリ２００は、それぞれが複数ビットからなる複数ワードからなり、１ワードに１符号語が対応付けられることにより、１ワードの読み出しごとに、誤り訂正・誤り検出が実行される。本実施例では、メモリ２００の１ワードを複数のビット数からなるブロックに分割する。各ブロックのビット数は１シンボルのビット数以下とされる。１ブロックのビット数が１シンボルのビット数より少ないときには、不足のビットに既知の値が補われ、誤り訂正回路はメモリ２００から読み出された１ワードに当該既知の値を追加して誤り訂正を行う。符号語を構成するシンボル数よりもブロック数が少ないときにも同様に、不足のシンボルに既知のビット列が補われ、誤り訂正回路はメモリ２００から読み出された１ワードに当該既知のビット列を追加して誤り訂正を行う。
【０１０８】
メモリ２００は、ブロック毎に分割されたメモリセル２０３−１〜２０３−ｃ（ｃは自然数）と、それぞれに対応するアドレスデコーダ２０１−１〜２０１−ｃとを備える。図８を引用して説明した実施例１と同様に、アドレスデコーダ２０１−１〜２０１−ｃには、それぞれ冗長化されたセレクタ２０２−１〜２０２−ｃが接続されている。また、セレクタ２０２−１〜２０２−ｃには、図２または図４と同様の回路構成により３個または４個に冗長化されたプロセッサ１０１−１〜１０１−３または１０１−４のアドレス出力を代表する２個のアドレスＡＤＤＲ−ａとＡＤＤＲ−ｂが入力される。アドレスデコーダ２０１−１〜２０１−ｃに対応してセレクタ２０２−１〜２０２−ｃを個別に設けることにより、セレクタ２０２が単一故障点とならないように構成される。
【０１０９】
メモリセル２０３−１〜２０３−ｃの出力データ（リードデータ）はバッファを経由して、プロセッサ１０１−１〜１０１−ｎに供給されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに出力される。データ信号はプロセッサとメモリの間を双方向に行き来するので、セレクタ２０２−ｄ−１とトライステートバッファからなるデータインターフェース２２０によりライトデータはセレクタ２０２−ｄ−１により選択され、リードデータは同じデータがプロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに供給される。図１４においても誤り訂正回路は図８と同様にメモリセル２０３−１〜２０３−ｃの直近に誤り訂正回路２１０−１として実装する場合と、プロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに誤り訂正回路２１０−ａ，２１０−ｂとして実装する場合とがある。
【０１１０】
実施例２のメモリ２００の誤り訂正動作を、図２３を引用して説明する。メモリ２００の誤り訂正に利用される誤り訂正符号は、ｃ１シンボルのデータ部とｃ２シンボルの符号部（冗長部）からなるリードソロモン符号の符号語であり、ｃ１＋ｃ２＝ｃである（ｃ１、ｃ２、ｃはそれぞれ自然数）。ＥＣＣの訂正能力は、例えば符号部を２シンボル（ｃ２＝２）とすると、１シンボル誤り訂正、２シンボル誤り検出である。メモリ２００は、Ｌワードであり、１ワード当たりのビット数は１シンボル当たりのビット数ｂと符号語の数ｃの積ｂ×ｃビットである（Ｌ、ｂはそれぞれ自然数）。メモリセルは、１ワードが１シンボルに当たるｂビット毎にｃ個のブロックに分割された、メモリセル２０３−１〜２０３−ｃで構成され、それぞれが対応するアドレスデコーダ２０１−１〜２０１−ｃを備えている。メモリセル２０３−１〜２０３−ｃから並列に読み出される１ワードｂ×ｃビットは、ｃ１シンボルのデータ部とｃ２シンボルの符号部からなるリードソロモン符号の符号語であるので、上述の例（ｃ２＝２）に倣えば、ＥＣＣによって１シンボル誤り訂正２シンボル誤り検出が可能である。
【０１１１】
正常動作時には、ｃ個のアドレスデコーダ２０１−１〜２０１−ｃには、多数決回路１０３等で正しいとされた同一のアドレス値が並列して入力され、ｃ個のメモリセル２０３−１〜２０３−ｃでは同一のワードが選択される。メモリセル２０３−１〜２０３−ｃのいずれか１ヵ所で、データに誤りが発生した場合には、ＥＣＣによって訂正され、いずれか２ヵ所で誤りが発生した場合には、ＥＣＣによって２個（２シンボル）の誤りが発生したことが検出される。１個（１シンボル）の誤りは訂正され、マスクされて動作継続されるので、データ系故障マスク機能３０１として機能する。ｃ個のアドレスデコーダ２０１−１〜２０１−ｃに並列して入力されるアドレスの中の１個のアドレスに故障等によって誤りが発生した場合、または、ｃ個のアドレスデコーダ２０１−１〜２０１−ｃのうちの１個に故障が発生した場合には、ｃ個のメモリセル２０３−１〜２０３−ｃのうち対応するメモリセルでは前記同一の（正しい）ワードとは異なる（誤った）ワードが選択される。ｃ個のメモリセル２０３−１〜２０３−ｃから並列に読み出されるデータには、誤ったワードが選択されたメモリセルから読み出されたデータ（シンボル）に誤りが発生した状態となる。この誤りが１ヵ所（１シンボル）であれば訂正され、２ヵ所であれば誤りが発生したことが検出される。このように、並列入力される複数のアドレスまたはｃ個のアドレスデコーダ２０１−１〜２０１−ｃに発生した１個の誤りは訂正され、マスクされて動作継続されるので、アドレス系故障マスク機能３０２として機能する。
【０１１２】
このように、同じ誤り訂正回路ＥＣＣ（図１４では誤り訂正回路２１０−１または誤り訂正回路２１０−ａと２１０−ｂとして実装される）が、データ系故障マスク機能３０１とアドレス系故障マスク機能３０２の両方の機能の実現に使用される。なお、データ系とアドレス系の両方に故障が発生した場合には、偶然に同じシンボルに誤りとして現れたときには、誤り訂正されマスクされて動作継続されるが、異なる２シンボルに現れたときは、２ヵ所の誤りとして誤り検出され動作停止される。
【０１１３】
図１５は、実施例２のメモリ２００の別の構成例を示すブロック図である。図１４ではデータインターフェース回路２２０が１個だけ設けられているが、図１５に示されるメモリ２００では、セレクタ２０２−ｄ１〜２０１−ｄｃとトライステートバッファからなるデータインターフェース２２０−１〜２２０−ｃがブロック毎に独立して設けられている。図１５において誤り訂正回路は、図８や図１４のようにメモリセル２０３−１〜２０３−ｃの直近に誤り訂正回路２１０−１として実装することはできず、プロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに対してそれぞれ誤り訂正回路２１０−ａ，２１０−ｂとして実装される。他の構成は図１４に示されるメモリ２００と同様であるので、説明を省略する。このように、プロセッサ１０１−１〜１０１−ｎに接続されるデータ出力ＤＡＴＡ−ａ、ＤＡＴＡ−ｂに誤り訂正回路２１０−ａ，２１０−ｂとして実装することにより、単一ブロックであるデータインターフェース２２０に相当する、データインターフェース２２０−１〜２２０−ｃの故障をマスクすることができる。データインターフェース２２０−１〜２２０−ｃのデータ読出し系にあるいずれかのバッファに故障が発生したときは、訂正回路２１０−ａ，２１０−ｂで誤り訂正／誤り検出が行わる。データ書き込み系にある、セレクタ２０２−ｄ１〜２０２−ｄｃのうちのいずれかのセレクタまたはそれに接続されるバッファに故障が発生した場合は、対応するアドレスをもつメモリセルに、誤りが発生したデータが書き込まれるので、そのデータが読み出された時に、誤り訂正回路２１０−ａ，２１０−ｂでその誤りの誤り訂正／誤り検出が行われる。いずれの場合にもデータ系故障マスク機能３０１となる。
【０１１４】
図１６は、実施例２のマイクロコントローラ１００のチップ内レイアウトの例を示す模式図である。マイクロコントローラ１００は、１チップに集積して構成され、ｎ個の冗長化したプロセッサ１０１−１〜１０１−ｎが搭載されている。さらにｃ個に冗長化されたアドレスデコーダ２０１−１〜２０１−ｃとメモリセル２０３−１〜２０３−ｃが配置される。アドレスデコーダ２０１−１〜２０１−ｃはそれぞれロウデコーダ２０１ｒ−１〜２０１ｒ−ｃとカラムデコーダ２０１ｃ−１〜２０１ｃ−ｃに分けられて、メモリセル２０３−１〜２０３−ｃの縦横の辺に沿って配置される。図１２とは異なり、アドレスデコーダとメモリセルの間に多数決回路を備える必要がないので、ライブラリに予め準備され、或いはＲＡＭコンパイラでの合成が可能な、通常のメモリを使用することができる。これにより、図１２に示されるような、アドレスデコーダが冗長化され多数決回路を有するメモリを開発するための工数を必要とせず、開発工数と開発コストを低く抑えることができる。
【０１１５】
図１７〜１９にそれぞれ３２ビット、６４ビット、１２８ビット幅のメモリにおけるリードソロモン符号の符号語を構成する構成パラメータとオーバーヘッドを示す。構成パラメータのｂは１シンボルを構成するビット数で、ｎはそのときのリードソロモン符号のデータ部と冗長部（符号部）とを合わせた符号語の総ビット数（アルゴリズム上の上限）で、ｎ＝ｂ（２ｂ−１）ビットであり、ｎ／ｂ＝２ｂ−１シンボルである。この符号語うち、１シンボル（１Ｓ）誤り訂正には２シンボル分の冗長ビットが必要で、２シンボル（２Ｓ）誤り検出には３シンボル分の冗長ビットが必要であり、残りがデータ部のデータビットとして使用可能である。ｋは１シンボル誤り訂正可能とした場合のデータビット数で、ｋ＝ｂ（２ｂ−３）である。即ち、このときのリードソロモン符号の符号語は、ｋ（＝ｂ（２ｂ−３））ビットのデータ部と２ｂビットの冗長部（符号部）で構成される。ｋがメモリのビット幅（Ｗビットとする）よりも小さい場合には、複数の符号語（データ部＋冗長部）を並列に適用して誤り訂正を行う。並列に適用する符号語の数は、Ｗ／ｋより大きく、Ｗ／ｋに最も近い整数となる。例えばメモリのビット幅（Ｗ）がｋの２倍より大きく３倍よりも小さい時、並列に適用する３個の符号語が適用される。
【０１１６】
「オーバーヘッド」欄の「デコーダ」には、メモリセル２０３−１〜２０３−ｃの分割数ｃに相当する、アドレスデコーダ２０１−１〜２０１−ｃの数ｃが示される。ｂビットのシンボルで構成される符号語のシンボル数（アルゴリズム上の上限）ｎ／ｂ＝２ｂ−１のうち、実際にメモリ２００に書き込まれるデータと、それに対応する冗長ビットが割り当てられるシンボル数である。実際にメモリ２００に書き込まれるデータは、３２ビット、６４ビット、１２８ビットなどであるから、上記データビット数ｋビットがそのビット数よりも多ければ、未使用のビットや未使用のシンボルとなり、０などの予め決められた値として扱われる。
【０１１７】
図１７には、３２ビット幅のメモリにおける符号語の構成パラメータとオーバーヘッドが示されている。３２ビット幅のメモリでは、ｂ＝４のときが冗長ビットのオーバーヘッドが最小となる。ｂ＝４のとき符号語のビット数ｎ＝４（２４−１）＝６０ビット、データビットｋ＝４（２４−３）＝５２ビットであるので、３２ビット幅のデータを記憶するには、５２ビット（１３シンボル）のうち３２ビット（８シンボル）を使用する。このデータに対して１シンボル（１Ｓ）誤り訂正のための冗長ビットとして８ビット（２シンボル）を付加して、メモリが構成される。メモリは、シンボルごとにブロック分割され、８＋２シンボルに対応して１０個のメモリセル２０３−１〜２０３−１０に分割され、１０個のアドレスデコーダ２０１−１〜２０１−１０を備えることとなる。
【０１１８】
ｂが４ビットよりも小さいときには、ｋがメモリのビット幅よりも小さいためにビット幅を分割してリードソロモン符号を適用する必要があり、より多くの冗長ビットが必要となる。例えばｂ＝３の場合には、符号語のビット数ｎ＝３（２３−１）＝２１ビット、データビットｋ＝３（２３−３）＝１５ビットであるので、３２ビット幅のデータを記憶するには、３個の符号語を適用する必要がある。１個の符号語当たり、データビットｋ＝１５ビット（５シンボル）＋冗長ビット６ビット（２シンボル）であるので、３個の符号語ではデータビット４５ビット（１５シンボル）＋冗長ビット１８ビット（６シンボル）となる。このように、ｂ＝３の場合の冗長ビット数１８ビットは、ｂ＝４の場合の冗長ビット数８ビット（２シンボル）よりも多くなってしまう。なお、３２ビット幅のデータを記憶するには、データビット４５ビット（１５シンボル）のうち３３ビット（１１シンボル）を使用するので、実際に使用されるメモリセルは１７個、アドレスデコーダも１７個となる。
【０１１９】
一方、ｂが４ビットよりも大きい場合には、１シンボル誤り訂正には２シンボル、２シンボル誤り検出には３シンボル分の冗長ビットが一律に必要であるが、１シンボル当たりのビット数が増えるので、より多くの冗長ビットが必要となる。１シンボル（１Ｓ）誤り訂正に必要な冗長ビットのビット数は、ｂ＝５、６、７のとき、それぞれ１０、１２、１４と増加する。
【０１２０】
以上のように、３２ビット幅のメモリでは、ｂ＝４のリードソロモン符号を使用すると、冗長ビットのオーバーヘッドを最小となり、最適である。同様にして、６４、１２８ビット幅のメモリでは図１８、図１９に示すようにｂ＝５のときが冗長ビットのオーバーヘッドが最小となる。
【０１２１】
図２０は、ブロック分割された３２ビット幅のメモリ２００の構成例である。上述のように、３２ビット幅のメモリを構成するときには、１シンボルが４ビット（ｂ＝４）のリードソロモン符号を適用するのが最適であり、データビット３２ビット（８シンボル）と冗長ビット８ビット（２シンボル）とに対応する１０個のブロックに分割される。即ちメモリ２００は、１０個のメモリセル２０３−１〜２０３−８と２０３−ｃ１と２０３−ｃ２と、１０個のアドレスデコーダ２０１−１〜２０１−８と２０１−ｃ１と２０１−ｃ２とを備える。メモリセル２０３−１〜２０３−８にデータビット３２ビット（８シンボル）が格納され、メモリセル２０３−ｃ１と２０３−ｃ２に冗長ビット８ビット（２シンボル）が格納される。
【０１２２】
図２１は、ブロック分割された６４ビット幅のメモリ２００の構成例である。６４、１２８ビット幅のメモリでは図２１に示すように５ビットごとの幅のブロックにメモリを分割するのが最適である。上述のように、６４、１２８ビット幅のメモリを構成するときには、１シンボルが５ビット（ｂ＝５）のリードソロモン符号を適用するのが最適であるからである。データビット６４ビット（１３シンボル）と冗長ビット１０ビット（２シンボル）とに対応する１５個のブロックに分割される。即ちメモリ２００は、１５個のメモリセル２０３−１〜２０３−１３と２０３−ｃ１と２０３−ｃ２と、１５個のアドレスデコーダ２０１−１〜２０１−１３と２０１−ｃ１と２０１−ｃ２とを備える。メモリセル２０３−１〜２０３−１２は５ビット幅であり、データビット６０ビット（１２シンボル）が格納され、メモリセル２０３−１３は４ビット幅であり、残りの４ビット（１シンボル）が格納される。メモリセル２０３−ｃ１と２０３−ｃ２は５ビット幅であり、冗長ビット１０ビット（２シンボル）が格納される。メモリセル２０３−１３は、４ビット幅で構成されるが、１ビットの常時０が補われて仮想的に５ビットのシンボルとされ、１シンボルが５ビットで構成されている（ｂ＝５）リードソロモン符号として符号化、復号化が可能である。常時０であるビットは、実際の演算は省略され、演算量や演算回路が削減される。
【０１２３】
図２２は、パーシャルライトを可能とするブロック分割された６４ビット幅のメモリ２００の構成例である。プロセッサからのメモリアクセスには、バイト（８ビット）単位、ワード（１６ビット）単位、ロングワード（３２ビット）単位など、実際のメモリのビット幅よりも小さい単位で実行される、パーシャルライトが含まれている場合がある。パーシャルライトに対応することができるようにメモリを構成するためには、図２２に示されるように、４ビット幅のブロックに分割し、符号部を５ビットごとの幅のブロックで構成するのが最適である。即ちメモリ２００は、１８個のメモリセル２０３−１〜２０３−１６と２０３−ｃ１と２０３−ｃ２と、１８個のアドレスデコーダ２０１−１〜２０１−１６と２０１−ｃ１と２０１−ｃ２とを備える。メモリセル２０３−１〜２０３−１６は４ビット幅であり、データビット６４ビット（１６シンボル）が格納され、メモリセル２０３−ｃ１と２０３−ｃ２は５ビット幅であり、冗長ビット１０ビット（２シンボル）が格納される。各ブロックを４ビット幅とすることにより、パーシャルライトに対応するのに好適な構成となる。なおこの場合、データ部のメモリセルは４ビットでも、常時０である仮想的な１ビットを加えて仮想的に５ビットとして扱えば、１シンボルが５ビットで構成されている場合のリードソロモン符号として符号化、復号化が可能である。なお、常時０であるビットが含まれる分の演算量や回路規模は削減される。
【０１２４】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１２５】
例えば、プロセッサは、如何なるアーキテクチャのプロセッサであってもよく、例えば、ＤＳＰ（Digital Signal Processor）や特に名称を持たない、アクセラレータなどを構成する専用プロセッサでもよい。またさらに、メモリにアクセスする他の主体に変更することも可能である。
【符号の説明】
【０１２６】
１００  マイクロコントローラ
１０１  プロセッサ
１０２  比較器
１０３  多数決回路（プロセッサの出力用）
２０１  アドレスデコーダ
２０２  セレクタ
２０３  メモリセル（メモリマット、メモリアレイ）
２０６  多数決回路（アドレスデコーダの出力用）
２１０  誤り訂正回路
２２０  データインターフェース
３０１  データ系故障マスク機能
３０２  アドレス系故障マスク機能
【図１】
2015222467.tif 000003
【図２】
2015222467.tif 000004
【図３】
2015222467.tif 000005
【図４】
2015222467.tif 000006
【図５】
2015222467.tif 000007
【図６】
2015222467.tif 000008
【図７】
2015222467.tif 000009
【図８】
2015222467.tif 000010
【図９】
2015222467.tif 000011
【図１０】
2015222467.tif 000012
【図１１】
2015222467.tif 000013
【図１２】
2015222467.tif 000014
【図１３】
2015222467.tif 000015
【図１４】
2015222467.tif 000016
【図１５】
2015222467.tif 000017
【図１６】
2015222467.tif 000018
【図１７】
2015222467.tif 000019
【図１８】
2015222467.tif 000020
【図１９】
2015222467.tif 000021
【図２０】
2015222467.tif 000022
【図２１】
2015222467.tif 000023
【図２２】
2015222467.tif 000024
【図２３】
2015222467.tif 000025