(57)【要約】【課題】パリティビット数を削減することができる半導体回路を提供することを課題とする。【解決手段】半導体回路は、各々が、複数の情報ルックアップテーブル（ＬＵＴ０〜ＬＵＴ２）と、複数の情報ルックアップテーブルに記憶されている情報について同じビットアドレス毎のパリティを水平パリティとして記憶する水平パリティルックアップテーブル（ＬＵＴ３）と、複数の情報ルックアップテーブルに記憶されている情報について情報ルックアップテーブル毎のパリティを垂直パリティとして記憶する複数の垂直パリティメモリ（ＰＶ０〜ＰＶ２）と、複数の情報ルックアップテーブルに記憶されている情報と複数の垂直パリティメモリに記憶されている垂直パリティとを基にエラー信号をそれぞれ出力する複数の垂直パリティチェック部（ＣＨ０〜ＣＨ２）とを有する。【選択図】図６
2014143489.tif 000002
【特許請求の範囲】
【請求項１】
各々が、第１のビット数の情報を記憶し、ライトイネーブル信号が有効になると情報を書き込み、アウトプットイネーブル信号が有効になると情報を出力する複数の情報ルックアップテーブルと、
前記第１のビット数の情報を記憶し、ライトイネーブル信号が有効になると情報を書き込み、アウトプットイネーブル信号が有効になると情報を出力し、前記複数の情報ルックアップテーブルに記憶されている情報について同じビットアドレス毎のパリティを水平パリティとして記憶する水平パリティルックアップテーブルと、
前記複数の情報ルックアップテーブルに記憶されている情報について前記情報ルックアップテーブル毎のパリティを垂直パリティとして記憶する複数の垂直パリティメモリと、
前記複数の情報ルックアップテーブルに記憶されている情報と前記複数の垂直パリティメモリに記憶されている垂直パリティとを基にエラー信号をそれぞれ出力する複数の垂直パリティチェック部と
を有することを特徴とする半導体回路。
【請求項２】
さらに、前記複数の情報ルックアップテーブルに記憶されている情報、前記水平パリティルックアップテーブルに記憶されている水平パリティ及び前記複数の垂直パリティチェック部が出力するエラー信号を基に、前記エラー信号を出力した垂直パリティチェック部に対応するルックアップテーブルに記憶されている情報のエラーを訂正するエラー訂正部を有することを特徴とする請求項１記載の半導体回路。
【請求項３】
さらに、前記複数の情報ルックアップテーブルの前記アウトプットイネーブル信号を順次有効にすることにより、前記複数の情報ルックアップテーブルに記憶されている情報を順次出力させるアクセス制御部を有することを特徴とする請求項２記載の半導体回路。
【請求項４】
前記アクセス制御部は、前記エラー信号を出力した垂直パリティチェック部に対応する前記情報ルックアップテーブル又は前記水平パリティルックアップテーブルのアウトプットイネーブル信号を有効にすることにより、前記エラー訂正部により訂正された情報を前記情報ルックアップテーブル又は前記水平パリティルックアップテーブルに書き込むことを特徴とする請求項３記載の半導体回路。
【請求項５】
前記アクセス制御部は、カウンタのカウント値に応じて、前記複数の情報ルックアップテーブルの前記アウトプットイネーブル信号を順次有効にすることを特徴とする請求項３又は４記載の半導体回路。
【請求項６】
前記垂直パリティチェック部が前記エラー信号を出力すると、前記アクセス制御部は前記カウンタのカウントを停止し、次のサイクルで、前記エラー訂正部が前記訂正した情報を出力し、次のサイクルで、前記アクセス制御部は前記カウンタのカウントを再開させることにより、次の前記情報ルックアップテーブルに記憶されている情報を出力させることを特徴とする請求項５記載の半導体回路。
【請求項７】
さらに、前記カウンタのカウント値に応じて、前記複数の情報ルックアップテーブルの出力信号を順次出力する第１のマルチプレクサを有することを特徴とする請求項５又は６記載の半導体回路。
【請求項８】
さらに、アドレス信号に応じて、前記第１のマルチプレクサの出力信号の中のアドレスビットを選択的に出力する第２のマルチプレクサを有することを特徴とする請求項７記載の半導体回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体回路に関する。
【背景技術】
【０００２】
複数の入力信号端子と複数のアンド・ワード線と複数の積項線とをもつ関数発生用アンド・アレイを備えると共に、複数のオア・ワード線と複数のオア出力線とをもつ関数発生用オア・アレイを備えるプログラマブル・ロジツク・アレイ装置が知られている（例えば、特許文献１参照）。その装置は、アンド・アレイとオア・アレイをプログラムして所望の論理回路を構成してなるプログラマブル・ロジツク・アレイに対して、アンド・アレイ上にアンド・ワード・パリテイとオア・アレイ上にオア・ワード・パリテイとを附加する。
【０００３】
また、複数ビットのメモリセルで成る各ワードに対応付けて設けられたワード線を用いて１つのワードを選択し、そのワード中のメモリセルに対してアクセスするようにした、又、誤り検出訂正回路を備えたランダムアクセスメモリが知られている（例えば、特許文献２参照）。第i 軸パリティセレクタは、各ワード毎のメモリセルを対象とし、これら対象となるメモリセルを３次元以上のn 次元配列と仮定し、n 次元のうちの１つの座標軸i の各配列要素パラメータ値毎に、他座標軸j のその配列要素パラメータ値が異なるワードで対象となるメモリセルを選択する。第i 軸パリティ生成回路は、座標軸i の各配列要素パラメータ値毎に第i 軸パリティセレクタにて選択されたメモリセルについて、その座標軸i の配列要素パラメータ値毎にパリティを求める。
【０００４】
また、多数の不揮発性強誘電体メモリセルが多数のメーンセルアレイグループにマッピングされるメーンメモリセルアレイを有する不揮発性強誘電体メモリ装置が知られている（例えば、特許文献３参照）。水平パリティチェックセルアレイは、メーンセルアレイグループの水平パリティをチェックし、多数の水平パリティアレイに格納する。垂直パリティチェックセルアレイは、メーンセルアレイグループの垂直パリティをチェックし、多数の垂直パリティアレイに格納する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特公平２−３５７０号公報
【特許文献２】特開平７−９３９９３号公報
【特許文献３】特開２００６−３０２４８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ソフトエラーは、中性子線などの影響によりメモリの内容が書き換えられてしまうビット反転エラーである。メモリのエラーを検出するために、垂直パリティ及び水平パリティが用いられる。しかし、メモリの数が増えると、垂直パリティ及び水平パリティのビット数が増加し、冗長のビット数が増加してしまう。
【０００７】
本発明の目的は、パリティのビット数を削減することができる半導体回路を提供することである。
【課題を解決するための手段】
【０００８】
半導体回路は、各々が、第１のビット数の情報を記憶し、ライトイネーブル信号が有効になると情報を書き込み、アウトプットイネーブル信号が有効になると情報を出力する複数の情報ルックアップテーブルと、前記第１のビット数の情報を記憶し、ライトイネーブル信号が有効になると情報を書き込み、アウトプットイネーブル信号が有効になると情報を出力し、前記複数の情報ルックアップテーブルに記憶されている情報について同じビットアドレス毎のパリティを水平パリティとして記憶する水平パリティルックアップテーブルと、前記複数の情報ルックアップテーブル及び前記水平パリティルックアップテーブルに記憶されている情報についてルックアップテーブル毎のパリティを垂直パリティとして記憶する複数の垂直パリティメモリと、前記複数の情報ルックアップテーブル及び前記水平パリティルックアップテーブルに記憶されている情報と前記複数の垂直パリティメモリに記憶されている垂直パリティとを基にエラー信号をそれぞれ出力する複数の垂直パリティチェック部とを有する。
【発明の効果】
【０００９】
水平パリティルックアップテーブルを設けることにより、パリティのビット数を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、プログラマブルデバイスの基本論理エレメントの構成例を示す図である。
【図２】図２は、マルチコンテキストＦＰＧＡの基本論理エレメントの構成例を示す図である。
【図３】図３は、基本エレメントの動作例を示すタイミングチャートである。
【図４】図４は、ソフトエラーを防止するための半導体回路の構成例を示す図である。
【図５】図５は、実施形態による半導体回路の構成例を示す図である。
【図６】図６は、実施形態による半導体回路の具体的な構成例を示す図である。
【図７】図７は、図６の垂直パリティチェック部の構成例を示す図である。
【図８】図８は、図６のアクセス制御部の構成例を示す図である。
【図９】図９は、図６のエラー訂正部の構成例を示す図である。
【図１０】図１０は、図９のマスク処理部の構成例を示す図である。
【図１１】図１１は、図６の基本論理エレメントの処理例を示すタイミングチャートである。
【図１２】図１２（Ａ）〜（Ｃ）は、エラー訂正処理の例を示す図である。
【図１３】図１３は、実施形態の効果を説明するための図である。
【発明を実施するための形態】
【００１１】
（参考技術）
図１は、プログラマブルデバイスの基本論理エレメント１０１の構成例を示す図である。プログラマブルデバイスは、例えば、ＦＰＧＡ（field-programmable gate array）等であり、回路の構成情報を書き込むことにより、任意の機能を実現することができる。ルックアップテーブルＬＵＴは、例えばＳＲＡＭ（Static Random Access Memory）であり、４ビットのアドレス信号ＩＮ［０］〜ＩＮ［３］を入力し、アドレス信号ＩＮ［０］〜ＩＮ［３］が示すアドレスに記憶された１ビットの情報（データ）を読み出して出力する。Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫに同期して、ルックアップテーブルＬＵＴの出力信号をラッチし、そのラッチした信号を出力する。マルチプレクサ１０３は、選択信号ＳＥＬに応じて、ルックアップテーブルＬＵＴの出力信号又はＤ型フリップフロップ１０２の出力信号を選択し、その選択した信号を出力信号ＯＵＴとして出力する。ルックアップテーブルＬＵＴは、４ビットのアドレス信号ＩＮ［０］〜ＩＮ［３］を入力することにより、任意の４入力の論理関数を実現可能となる。ＦＰＧＡは、このような基本論理エレメント１０１を多数搭載し、その間を配線部で接続することにより、任意の回路機能を実現する。
【００１２】
図２はマルチコンテキストＦＰＧＡの基本論理エレメント２０１の構成例を示す図であり、図３は基本論理エレメント２０１の動作例を示すタイミングチャートである。信号ＬＵＴ０＿ＯＵＴは、ルックアップテーブルＬＵＴ０の出力信号を示す。信号ＬＵＴ１＿ＯＵＴは、ルックアップテーブルＬＵＴ１の出力信号を示す。信号ＬＵＴ２＿ＯＵＴは、ルックアップテーブルＬＵＴ２の出力信号を示す。信号ＬＵＴ３＿ＯＵＴは、ルックアップテーブルＬＵＴ３の出力信号を示す。信号ＭＵＸ＿ＯＵＴは、マルチプレクサ２０２の出力信号を示す。信号ＤＦＦ＿ＯＵＴは、Ｄ型フリップフロップ１０２の出力信号を示す。図３において、４ビットアドレス信号ＩＮ［３：０］以外の信号は、すべて１ビットの信号である。
【００１３】
時刻ｔ１では、コンテキスト０の処理を行うため、アドレス信号ＩＮ［３：０］として「Ａ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、「Ａ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ０−Ａを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ａを選択して出力する。
【００１４】
次に、時刻ｔ２では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ０−Ａをラッチして出力する。また、コンテキスト１の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｂ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、「Ｂ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ１−Ｂを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｂを選択して出力する。
【００１５】
次に、時刻ｔ３では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ１−Ｂをラッチして出力する。また、コンテキスト２の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｃ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ２は、出力信号ＬＵＴ２＿ＯＵＴとして、「Ｃ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ２−Ｃを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ２の出力信号ＬＵＴ２−Ｃを選択して出力する。
【００１６】
次に、時刻ｔ４では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ２−Ｃをラッチして出力する。また、コンテキスト３の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｄ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ３は、出力信号ＬＵＴ３＿ＯＵＴとして、「Ｄ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ３−Ｄを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ３の出力信号ＬＵＴ３−Ｄを選択して出力する。
【００１７】
次に、時刻ｔ５では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ３−Ｄをラッチして出力する。また、コンテキスト０の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｅ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、「Ｅ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ０−Ｅを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ｅを選択して出力する。
【００１８】
次に、時刻ｔ６では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ０−Ｅをラッチして出力する。また、コンテキスト１の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｆ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、「Ｆ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ１−Ｆを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｆを選択して出力する。
【００１９】
次に、時刻ｔ７では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ１−Ｆをラッチして出力する。また、コンテキスト２の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｇ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ２は、出力信号ＬＵＴ２＿ＯＵＴとして、「Ｇ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ２−Ｇを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ２の出力信号ＬＵＴ２−Ｇを選択して出力する。
【００２０】
次に、時刻ｔ８では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ２−Ｇをラッチして出力する。また、コンテキスト３の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｈ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ３は、出力信号ＬＵＴ３＿ＯＵＴとして、「Ｈ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ３−Ｈを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ３の出力信号ＬＵＴ３−Ｈを選択して出力する。
【００２１】
次に、時刻ｔ９では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ３−Ｈをラッチして出力する。また、コンテキスト０の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｉ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、「Ｉ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ０−Ｉを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ｉを選択して出力する。
【００２２】
次に、時刻ｔ１０では、Ｄ型フリップフロップ１０２は、クロック信号ＣＬＫの立ち上がりエッジに同期して、マルチプレクサ２０２の出力信号ＬＵＴ０−Ｉをラッチして出力する。また、コンテキスト１の処理を行うため、アドレス信号ＩＮ［３：０］として「Ｊ」がルックアップテーブルＬＵＴ０〜ＬＵＴ３に入力される。ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、「Ｊ」のアドレス信号ＩＮ［３：０］に応じた出力信号ＬＵＴ１−Ｊを出力する。マルチプレクサ２０２は、出力信号ＭＵＸ＿ＯＵＴとして、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｊを選択して出力する。
【００２３】
以上のように、マルチプレクサ２０２は、ルックアップテーブルＬＵＴ０〜ＬＵＴ３の出力信号を順次、繰り返し選択して出力する。マルチプレクサ１０３は、選択信号ＳＥＬに応じて、マルチプレクサ２０２の出力信号ＭＵＸ＿ＯＵＴ又はＤ型フリップフロップ１０２の出力信号ＤＦＦ＿ＯＵＴを選択し、その選択した信号を出力信号ＯＵＴとして出力する。４つのコンテキストを１サイクル毎に切り替えて動作させた場合の例を示す。各サイクル毎に対応するコンテキストのルックアップテーブルＬＵＴ０〜ＬＵＴ３の情報を読み出し、マルチプレクサ２０２は対応するコンテキストのルックアップテーブルＬＵＴ０〜ＬＵＴ３の情報を出力する。
【００２４】
複数のルックアップテーブルＬＵＴ０〜ＬＵＴ３に、それぞれ複数の回路情報を記憶させ、マルチプレクサ２０２により選択を行う。大きなサイズの回路を分割し、時分割で実行することにより、実際の半導体チップより大きなサイズの回路を仮想的に動作させることができる。
【００２５】
ソフトエラーは、中性子線などの影響によりメモリの内容が書き換えられてしまうビット反転エラーである。ルックアップテーブルＬＵＴ０〜ＬＵＴ３に回路の構成情報を記憶させるため、ルックアップテーブルＬＵＴ０〜ＬＵＴ３の内容が変わると、回路の動作自体が変わってしまうことになるため、ソフトエラーを防止する必要がある。
【００２６】
図４は、ソフトエラーを防止するための半導体回路の構成例を示す図である。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、それぞれ２次元状の１６ビット情報を記憶する。垂直パリティメモリＰＶ０は、ルックアップテーブルＬＵＴ０の垂直方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す垂直パリティを列毎に記憶する。水平パリティメモリＰＨ０は、ルックアップテーブルＬＵＴ０の水平方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す水平パリティを行毎に記憶する。
【００２７】
垂直パリティメモリＰＶ１は、ルックアップテーブルＬＵＴ１の垂直方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す垂直パリティを列毎に記憶する。水平パリティメモリＰＨ１は、ルックアップテーブルＬＵＴ１の水平方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す水平パリティを行毎に記憶する。
【００２８】
垂直パリティメモリＰＶ２は、ルックアップテーブルＬＵＴ２の垂直方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す垂直パリティを列毎に記憶する。水平パリティメモリＰＨ２は、ルックアップテーブルＬＵＴ２の水平方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す水平パリティを行毎に記憶する。
【００２９】
垂直パリティメモリＰＶ３は、ルックアップテーブルＬＵＴ３の垂直方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す垂直パリティを列毎に記憶する。水平パリティメモリＰＨ３は、ルックアップテーブルＬＵＴ３の水平方向に並ぶ４ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す水平パリティを行毎に記憶する。
【００３０】
この場合、ルックアップテーブルＬＵＴ０〜ＬＵＴ３の数に比例して、パリティのビット数が増加するため、冗長のビット数が大きくなってしまう。そこで、以下、パリティのビット数を削減することができる半導体回路の実施形態を説明する。
【００３１】
（実施形態）
図５は、実施形態による半導体回路の構成例を示す図である。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、それぞれ、第１のビット数（例えば１６ビット）の情報を記憶する。ルックアップテーブルＬＵＴ０〜ＬＵＴ２は、回路構成情報を記憶する情報ルックアップテーブルである。ルックアップテーブルＬＵＴ３は、水平パリティを記憶する水平パリティルックアップテーブルである。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、例えばＳＲＡＭである。
【００３２】
垂直パリティメモリＰＶ０は、ルックアップテーブルＬＵＴ０に記憶されている１６ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す１ビットの垂直パリティを記憶する。垂直パリティメモリＰＶ１は、ルックアップテーブルＬＵＴ１に記憶されている１６ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す１ビットの垂直パリティを記憶する。垂直パリティメモリＰＶ２は、ルックアップテーブルＬＵＴ２に記憶されている１６ビットの中の「１」のビット数が奇数又は偶数のいずれかを示す１ビットの垂直パリティを記憶する。
【００３３】
水平パリティルックアップテーブルＬＵＴ３は、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２に記憶されている情報について同じビットアドレス毎のパリティを水平パリティとして記憶する。例えば、水平パリティルックアップテーブルＬＵＴ３の０番地のアドレスには、情報ルックアップテーブルＬＵＴ０の０番地のアドレスの１ビット情報と、情報ルックアップテーブルＬＵＴ１の０番地のアドレスの１ビット情報と、情報ルックアップテーブルＬＵＴ２の０番地のアドレスの１ビット情報との中の「１」のビット数が奇数又は偶数のいずれかを示す１ビットの水平パリティが記憶される。具体的には、水平パリティルックアップテーブルＬＵＴ３の０番地のアドレスには、情報ルックアップテーブルＬＵＴ０の０番地のアドレスの１ビット情報と、情報ルックアップテーブルＬＵＴ１の０番地のアドレスの１ビット情報と、情報ルックアップテーブルＬＵＴ２の０番地のアドレスの１ビット情報との排他的論理和情報が記憶される。
【００３４】
図６は、本実施形態による半導体回路の具体的な構成例を示す図である。半導体回路は、マルチコンテキストＦＰＧＡの基本論理エレメント６０１を有する。ルックアップテーブルＬＵＴ０〜ＬＵＴ３からは１６ビットすべての情報が読み出され、マルチプレクサ６１２がアドレス信号ＩＮ［３：０］に応じて１ビットを選択する。これは、垂直パリティチェック部ＣＨ０〜ＣＨ３が垂直パリティをチェックする際に、ルックアップテーブルＬＵＴ０〜ＬＵＴ３のすべてのビットが必要となるためである。通常は各クロックサイクルのコンテキストに対応する１つのルックアップテーブルの垂直パリティのチェックのみを行い、エラー発生時には、次のステージで全ルックアップテーブルＬＵＴ０〜ＬＵＴ３の情報を読み出し、エラー訂正部６０８がエラー訂正を行うことにより、メモリアクセスを減らして電力を削減する。
【００３５】
情報ルックアップテーブルＬＵＴ０は、第１のビット数（例えば１６ビット）の回路構成情報を記憶し、ライトイネーブル信号ＬＵＴ０＿ＷＥが有効になると情報を書き込み、アウトプットイネーブル信号ＬＵＴ０＿ＯＥが有効になると情報を出力する。情報ルックアップテーブルＬＵＴ１は、第１のビット数の回路構成情報を記憶し、ライトイネーブル信号ＬＵＴ１＿ＷＥが有効になると情報を書き込み、アウトプットイネーブル信号ＬＵＴ１＿ＯＥが有効になると情報を出力する。情報ルックアップテーブルＬＵＴ３は、第１のビット数の回路構成情報を記憶し、ライトイネーブル信号ＬＵＴ２＿ＷＥが有効になると情報を書き込み、アウトプットイネーブル信号ＬＵＴ２＿ＯＥが有効になると情報を出力する。
【００３６】
水平パリティルックアップテーブルＬＵＴ３は、第１のビット数の情報を記憶し、ライトイネーブル信号ＬＵＴ３＿ＷＥが有効になると情報を書き込み、アウトプットイネーブル信号ＬＵＴ３＿ＯＥが有効になると情報を出力し、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２に記憶されている情報について同じビットアドレス毎のパリティを水平パリティとして予め記憶する。
【００３７】
垂直パリティメモリＰＶ０は、上記のように、情報ルックアップテーブルＬＵＴ０に記憶されている１６ビット情報のパリティを垂直パリティとして予め記憶する。垂直パリティメモリＰＶ１は、上記のように、情報ルックアップテーブルＬＵＴ１に記憶されている１６ビット情報のパリティを垂直パリティとして予め記憶する。垂直パリティメモリＰＶ２は、上記のように、情報ルックアップテーブルＬＵＴ２に記憶されている１６ビット情報のパリティを垂直パリティとして予め記憶する。垂直パリティメモリＰＶ３は、水平パリティルックアップテーブルＬＵＴ３に記憶されている１６ビット情報のパリティを垂直パリティとして予め記憶する。
【００３８】
垂直パリティチェック部ＣＨ０は、情報ルックアップテーブルＬＵＴ０から出力された１６ビット情報の垂直パリティを演算し、その演算された垂直パリティが、垂直パリティメモリＰＶ０に記憶されている垂直パリティと同じである場合には「０」のエラー信号ＬＵＴ０＿ＥＲＲを出力し、異なる場合には「１」のエラー信号ＬＵＴ０＿ＥＲＲを出力する。エラー信号ＬＵＴ０＿ＥＲＲが「１」の場合には、情報ルックアップテーブルＬＵＴ０に記憶されている情報がソフトエラーによりビット反転したことを示す。エラー信号ＬＵＴ０＿ＥＲＲが「０」の場合には、情報ルックアップテーブルＬＵＴ０に記憶されている情報にエラーがないことを示す。
【００３９】
垂直パリティチェック部ＣＨ１は、情報ルックアップテーブルＬＵＴ１から出力された１６ビット情報の垂直パリティを演算し、その演算された垂直パリティが、垂直パリティメモリＰＶ１に記憶されている垂直パリティと同じである場合には「０」のエラー信号ＬＵＴ１＿ＥＲＲを出力し、異なる場合には「１」のエラー信号ＬＵＴ１＿ＥＲＲを出力する。エラー信号ＬＵＴ１＿ＥＲＲが「１」の場合には、情報ルックアップテーブルＬＵＴ１に記憶されている情報がソフトエラーによりビット反転したことを示す。エラー信号ＬＵＴ１＿ＥＲＲが「０」の場合には、情報ルックアップテーブルＬＵＴ１に記憶されている情報にエラーがないことを示す。
【００４０】
垂直パリティチェック部ＣＨ２は、情報ルックアップテーブルＬＵＴ２から出力された１６ビット情報の垂直パリティを演算し、その演算された垂直パリティが、垂直パリティメモリＰＶ２に記憶されている垂直パリティと同じである場合には「０」のエラー信号ＬＵＴ２＿ＥＲＲを出力し、異なる場合には「１」のエラー信号ＬＵＴ２＿ＥＲＲを出力する。エラー信号ＬＵＴ２＿ＥＲＲが「１」の場合には、情報ルックアップテーブルＬＵＴ２に記憶されている情報がソフトエラーによりビット反転したことを示す。エラー信号ＬＵＴ２＿ＥＲＲが「０」の場合には、情報ルックアップテーブルＬＵＴ２に記憶されている情報にエラーがないことを示す。
【００４１】
垂直パリティチェック部ＣＨ３は、水平パリティルックアップテーブルＬＵＴ３から出力された１６ビット情報の垂直パリティを演算し、その演算された垂直パリティが、垂直パリティメモリＰＶ３に記憶されている垂直パリティと同じである場合には「０」のエラー信号ＬＵＴ３＿ＥＲＲを出力し、異なる場合には「１」のエラー信号ＬＵＴ３＿ＥＲＲを出力する。エラー信号ＬＵＴ３＿ＥＲＲが「１」の場合には、水平パリティルックアップテーブルＬＵＴ３に記憶されている情報がソフトエラーによりビット反転したことを示す。エラー信号ＬＵＴ３＿ＥＲＲが「０」の場合には、水平パリティルックアップテーブルＬＵＴ３に記憶されている情報にエラーがないことを示す。
【００４２】
論理和（ＯＲ）回路６０２は、エラー信号ＬＵＴ０＿ＥＲＲ、ＬＵＴ１＿ＥＲＲ及びＬＵＴ２＿ＥＲＲの論理和信号を出力する。Ｄ型フリップフロップ６０３は、クロック信号に同期して、論理和回路６０２の出力信号をラッチし、そのラッチした信号を出力する。
【００４３】
論理和回路６０４は、エラー信号ＬＵＴ０＿ＥＲＲ、ＬＵＴ１＿ＥＲＲ、ＬＵＴ２＿ＥＲＲ及びＬＵＴ３＿ＥＲＲの論理和信号を出力する。Ｄ型フリップフロップ６０５は、クロック信号に同期して、論理和回路６０４の出力信号をラッチし、そのラッチした信号ＥＲＲを出力する。
【００４４】
アクセス制御部６０６は、エラー信号ＬＵＴ０＿ＥＲＲ、ＬＵＴ１＿ＥＲＲ、ＬＵＴ２＿ＥＲＲ、ＬＵＴ３＿ＥＲＲ及びＥＲＲを入力し、アウトプットイネーブル信号ＬＵＴ０＿ＯＥ、ＬＵＴ１＿ＯＥ、ＬＵＴ２＿ＯＥ、ＬＵＴ３＿ＯＥ、ライトイネーブル信号ＬＵＴ０＿ＷＥ、ＬＵＴ１＿ＷＥ、ＬＵＴ２＿ＷＥ、ＬＵＴ３＿ＷＥ、及び２ビットのコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］を出力する。アクセス制御部６０６は、複数の情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２のアウトプットイネーブル信号ＬＵＴ０＿ＯＥ０〜ＬＵＴ２＿ＯＥを順次有効にすることにより、複数の情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２に記憶されている情報を順次出力させる。
【００４５】
第１のマルチプレクサ６０７は、コンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、複数の情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２の各１６ビット出力信号を順次選択して出力する。
【００４６】
エラー訂正部６０８は、複数の情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２に記憶されている情報、水平パリティルックアップテーブルＬＵＴ３に記憶されている水平パリティ及び複数の垂直パリティチェック部ＣＨ０〜ＣＨ３が出力するエラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲを基に、「１」のエラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲを出力した垂直パリティチェック部ＣＨ０〜ＣＨ３に対応するルックアップテーブルＬＵＴ０〜ＬＵＴ３に記憶されている情報のエラーを訂正し、１６ビットの訂正された情報Ｃ＿ＤＡＴＡ［１５：０］を出力する。
【００４７】
アクセス制御部６０６は、「１」のエラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲを出力した垂直パリティチェック部ＣＨ０〜ＣＨ３に対応するルックアップテーブルＬＵＴ０〜ＬＵＴ３に有効のライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥを出力する。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、それぞれ、ライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥが有効になると、１６ビットの訂正された情報Ｃ＿ＤＡＴＡ［１５：０］を書き込む。
【００４８】
マルチプレクサ６０９は、Ｄ型フリップフロップ６０３の出力信号が「０」の場合には第１のマルチプレクサ６０７の１６ビット出力信号を選択して出力し、Ｄ型フリップフロップ６０３の出力信号が「１」の場合にはエラー訂正部６０８の１６ビット出力信号Ｃ＿ＤＡＴＡ［１５：０］を選択して出力する。
【００４９】
４ビットアドレス信号ＩＮ［３：０］は、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２のアドレスを示す。Ｄ型フリップフロップ６１０は、クロック信号に同期して、アドレス信号ＩＮ［３：０］をラッチし、そのラッチした信号を出力する。マルチプレクサ６１１は、選択信号ＳＥＬ１に応じて、アドレス信号ＩＮ［３：０］又はＤ型フリップフロップ６１０の出力信号を選択して出力する。Ｄ型フリップフロップ６１０は、エラー訂正サイクルで、エラーの発生したサイクルのアドレス信号ＩＮ［３：０］を保持する。
【００５０】
第２のマルチプレクサ６１２は、マルチプレクサ６１１が出力するアドレス信号に応じて、マルチプレクサ６０９の１６ビット出力信号の中の１ビットを選択的に出力する。これにより、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２の中のアドレス信号ＩＮ［３：０］が示すアドレスの１ビット情報が出力される。
【００５１】
Ｄ型フリップフロップ６１３は、クロック信号に同期して、マルチプレクサ６１２の出力信号をラッチし、そのラッチした信号を出力する。マルチプレクサ６１４は、選択信号ＳＥＬ２に応じて、マルチプレクサ６１２の出力信号又はＤ型フリップフロップ６１３の出力信号を選択し、出力信号ＯＵＴとして出力する。
【００５２】
通常動作時には、マルチプレクサ６０７は、コンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に従って、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２の出力情報を順次選択して出力する。その際、同時に、垂直パリティチェック部ＣＨ０〜ＣＨ３は、垂直パリティチェックを行う。垂直パリティエラーが発生すると、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２のいずれかのビットにエラーが発生していることになるため、次のサイクルではコンテキスト切替を行わず、エラー訂正部６０８がエラー訂正を行う。
【００５３】
例えば、情報ルックアップテーブルＬＵＴ２でエラーが発生したとすると、訂正サイクルでは、ルックアップテーブルＬＵＴ０、ＬＵＴ１及びＬＵＴ３の情報を読み出し、それらの情報を使って、エラー訂正部６０８で正しいルックアップテーブルＬＵＴ２の情報Ｃ＿ＤＡＴＡ［１５：０］を生成する。エラー訂正は、１ビットエラー訂正が可能である。
【００５４】
図７は、図６の垂直パリティチェック部ＣＨｎ（ｎ＝０〜３）の構成例を示す図である。１６ビット出力信号ＬＵＴｎ＿ＯＵＴ［０］〜ＬＵＴｎ［１５］は、ルックアップテーブルＬＵＴｎの１６ビット出力信号である。
【００５５】
排他的論理和回路７０１は、出力信号ＬＵＴｎ＿ＯＵＴ［０］及びＬＵＴｎ＿ＯＵＴ［１］の排他的論理和信号を出力する。排他的論理和回路７０２は、出力信号ＬＵＴｎ＿ＯＵＴ［２］及びＬＵＴｎ＿ＯＵＴ［３］の排他的論理和信号を出力する。排他的論理和回路７０３は、出力信号ＬＵＴｎ＿ＯＵＴ［４］及びＬＵＴｎ＿ＯＵＴ［５］の排他的論理和信号を出力する。排他的論理和回路７０４は、出力信号ＬＵＴｎ＿ＯＵＴ［６］及びＬＵＴｎ＿ＯＵＴ［７］の排他的論理和信号を出力する。排他的論理和回路７０５は、出力信号ＬＵＴｎ＿ＯＵＴ［８］及びＬＵＴｎ＿ＯＵＴ［９］の排他的論理和信号を出力する。排他的論理和回路７０６は、出力信号ＬＵＴｎ＿ＯＵＴ［１０］及びＬＵＴｎ＿ＯＵＴ［１１］の排他的論理和信号を出力する。排他的論理和回路７０７は、出力信号ＬＵＴｎ＿ＯＵＴ［１２］及びＬＵＴｎ＿ＯＵＴ［１３］の排他的論理和信号を出力する。排他的論理和回路７０８は、出力信号ＬＵＴｎ＿ＯＵＴ［１４］及びＬＵＴｎ＿ＯＵＴ［１５］の排他的論理和信号を出力する。
【００５６】
排他的論理和回路７０９は、排他的論理和回路７０１及び７０２の出力信号の排他的論理和信号を出力する。排他的論理和回路７１０は、排他的論理和回路７０３及び７０４の出力信号の排他的論理和信号を出力する。排他的論理和回路７１１は、排他的論理和回路７０５及び７０６の出力信号の排他的論理和信号を出力する。排他的論理和回路７１２は、排他的論理和回路７０７及び７０８の出力信号の排他的論理和信号を出力する。排他的論理和回路７１３は、排他的論理和回路７０９及び７１０の出力信号の排他的論理和信号を出力する。排他的論理和回路７１４は、排他的論理和回路７１１及び７１２の出力信号の排他的論理和信号を出力する。排他的論理和回路７１５は、排他的論理和回路７１３及び７１４の出力信号の排他的論理和信号を出力する。
【００５７】
排他的論理和回路７１５は、出力信号ＬＵＴｎ＿ＯＵＴ［０］〜ＬＵＴｎ＿ＯＵＴ［１５］の垂直パリティを演算して出力する。垂直パリティは、１６ビット出力信号ＬＵＴｎ＿ＯＵＴ［０］〜ＬＵＴｎ＿ＯＵＴ［１５］の中の「１」のビット数が偶数である場合には「０」になり、奇数である場合には「１」になる。
【００５８】
排他的論理和回路７１６は、図１の垂直パリティメモリＰＶｎの出力信号ＬＵＴｎ＿Ｐ＿Ｖ及び排他的論理和回路７１５の出力信号の排他的論理和信号を、エラー信号ＬＵＴｎ＿ＥＲＲとして出力する。エラー信号ＬＵＴｎ＿ＥＲＲは、図１の垂直パリティメモリＰＶｎの出力信号ＬＵＴｎ＿Ｐ＿Ｖと排他的論理和回路７１５の出力信号が同じ場合には「０」になり、図１の垂直パリティメモリＰＶｎの出力信号ＬＵＴｎ＿Ｐ＿Ｖと排他的論理和回路７１５の出力信号が異なる場合には「１」になる。
【００５９】
図８は、図６のアクセス制御部６０６の構成例を示す図である。ゲート８０１は、エラー信号ＥＲＲが「０」の場合にはクロック信号ＣＬＫを通過させて出力し、エラー信号ＥＲＲが「１」の場合にはクロック信号ＣＬＫを遮断する。ゲート８０２は、エラー信号ＥＲＲが「０」の場合にはクロック信号ＣＬＫを通過させて出力し、エラー信号ＥＲＲが「１」の場合にはクロック信号ＣＬＫを遮断する。
【００６０】
カウンタ８０３は、ゲート８０１の出力信号のパルス数を、０〜２の範囲で巡回してカウントする。カウンタ８０４は、ゲート８０２の出力信号のパルス数を、０〜１５の範囲で巡回してカウントする。
【００６１】
デコーダ８０５は、カウンタ８０３のカウント値をデコードし、マルチプレクサ８１１〜８１３の入力端子に信号を出力する。カウンタ８０３のカウント値が「０」の場合には、マルチプレクサ８１１の入力信号が「１」になり、マルチプレクサ８１２及び８１３の入力信号が「０」になる。カウンタ８０３のカウント値が「１」の場合には、マルチプレクサ８１２の入力信号が「１」になり、マルチプレクサ８１１及び８１３の入力信号が「０」になる。カウンタ８０３のカウント値が「２」の場合には、マルチプレクサ８１３の入力信号が「１」になり、マルチプレクサ８１１及び８１２の入力信号が「０」になる。
【００６２】
論理和回路８０６は、カウンタ８０４の４ビット出力信号の論理和信号を出力する。すなわち、論理和回路８０６は、カウンタ８０４のカウント値が「０」〜「１４」の場合には「０」を出力し、カウンタ８０４のカウント値が「１５」の場合には「１」を出力する。インバータ８０７〜８１０は、それぞれ、エラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲの論理反転信号を出力する。
【００６３】
マルチプレクサ８１１は、エラー信号ＥＲＲが「０」の場合にはデコーダ８０５の出力信号を選択し、エラー信号ＥＲＲが「１」の場合にはインバータ８０７の出力信号を選択し、アウトプットイネーブル信号ＬＵＴ０＿ＯＥを出力する。マルチプレクサ８１２は、エラー信号ＥＲＲが「０」の場合にはデコーダ８０５の出力信号を選択し、エラー信号ＥＲＲが「１」の場合にはインバータ８０８の出力信号を選択し、アウトプットイネーブル信号ＬＵＴ１＿ＯＥを出力する。マルチプレクサ８１３は、エラー信号ＥＲＲが「０」の場合にはデコーダ８０５の出力信号を選択し、エラー信号ＥＲＲが「１」の場合にはインバータ８０９の出力信号を選択し、アウトプットイネーブル信号ＬＵＴ２＿ＯＥを出力する。マルチプレクサ８１４は、エラー信号ＥＲＲが「０」の場合には論理和回路８０６の出力信号を選択し、エラー信号ＥＲＲが「１」の場合にはインバータ８１０の出力信号を選択し、アウトプットイネーブル信号ＬＵＴ３＿ＯＥを出力する。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、それぞれ、アウトプットイネーブル信号ＬＵＴ０＿ＯＥ〜ＬＵＴ３＿ＯＥが「１」の場合に読み出して出力を行う。
【００６４】
カウンタ８０３は、そのカウント値を２ビットのコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］として出力する。アクセス制御部６０６は、エラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲをそのままそれぞれライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥとして出力する。ルックアップテーブルＬＵＴ０〜ＬＵＴ３は、それぞれ、ライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥが「１」の場合に書き込みを行う。
【００６５】
カウンタ８０４は、水平パリティルックアップテーブルＬＵＴ３のアウトプットイネーブル信号ＬＵＴ３＿ＯＥを生成するためのカウンタである。ルックアップテーブルＬＵＴ３に記憶されている水平パリティ自身に誤りがないかチェックするため、定期的にアウトプットイネーブル信号ＬＵＴ３＿ＯＥを「１」にするためである。論理積回路８０６は、カウンタ８０４の４ビット出力信号の論理積をとることで、カウント値のすべてのビットが１になった時だけ、ルックアップテーブルＬＵＴ３は読み出しを行う。つまり、１６サイクルに１回、ルックアップテーブルＬＵＴ３は水平パリティの読み出しを行って水平パリティのチェックを行っている。
【００６６】
図８において、上段の信号例はエラーがない場合の信号例を示し、下段の信号例はエラーがある場合の信号例を示す。まず、上段のエラーがない場合の信号例を説明する。エラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲ及びエラー信号ＥＲＲは、「０」である。例えば、カウンタ８０３は、コンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］として「２」を出力し、論理積回路８０６は「０」を出力する例を示す。その場合、デコーダ８０５は、マルチプレクサ８１１〜８１３にそれぞれ「０」、「０」、「１」を出力する。インバータ８０７〜８１０は、「１」を出力する。ライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥは、「０」となる。アウトプットイネーブル信号ＬＵＴ０＿ＯＥ〜ＬＵＴ３＿ＯＥは、それぞれ「０」、「０」、「１」、「０」となる。これにより、ルックアップテーブルＬＵＴ２の情報のみが読み出される。カウンタ８０３のカウントにより、アウトプットイネーブル信号ＬＵＴ０＿ＯＥ〜ＬＵＴ２＿ＯＥは、順番に繰り返していずれか１つが「１」になり、ルックアップテーブルＬＵＴ０〜ＬＵＴ２の情報が順次読み出される。すなわち、アクセス制御部６０６は、カウンタ８０３のカウント値に応じて、複数の情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２のアウトプットイネーブル信号ＬＵＴ０＿ＯＥ〜ＬＵＴ２＿ＯＥを順次有効にする。
【００６７】
次に、下段のエラーがある場合の信号例を説明する。エラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲがそれぞれ「０」、「０」、「１」、「０」であり、エラー信号ＥＲＲは「１」である。例えば、カウンタ８０３は、コンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］として「２」を出力し、論理積回路８０６は「０」を出力する例を示す。その場合、デコーダ８０５は、マルチプレクサ８１１〜８１３にそれぞれ「０」、「０」、「１」を出力する。インバータ８０７〜８１０は、それぞれ「１」、「１」、「０」、「１」を出力する。アウトプットイネーブル信号ＬＵＴ０＿ＯＥ〜ＬＵＴ３＿ＯＥは、それぞれ「１」、「１」、「０」、「１」となる。これにより、ルックアップテーブルＬＵＴ０、ＬＵＴ１及びＬＵＴ３の情報が読み出され、ルックアップテーブルＬＵＴ２の情報のエラー訂正が行われる。ライトイネーブル信号ＬＵＴ０＿ＷＥ〜ＬＵＴ３＿ＷＥは、それぞれ「０」、「０」、「１」、「０」となり、ルックアップテーブルＬＵＴ２にはエラー訂正された情報が書き込まれる。
【００６８】
図９は、図６のエラー訂正部６０８の構成例を示す図である。出力信号ＬＵＴ０＿ＯＵＴ〜ＬＵＴ３＿ＯＵＴは、それぞれルックアップテーブルＬＵＴ０〜ＬＵＴ３の１６ビット出力信号である。インバータ９００〜９０３は、それぞれエラー信号ＬＵＴ０＿ＥＲＲ〜ＬＵＴ３＿ＥＲＲの論理反転信号を出力する。
【００６９】
マスク処理部９０５は、インバータ９００が「１」を出力する場合には、１６ビット出力信号ＬＵＴ０＿ＯＵＴをそのまま出力し、インバータ９００が「０」を出力する場合には、「０」を出力する。マスク処理部９０６は、インバータ９０１が「１」を出力する場合には、１６ビット出力信号ＬＵＴ１＿ＯＵＴをそのまま出力し、インバータ９０１が「０」を出力する場合には、「０」を出力する。マスク処理部９０７は、インバータ９０２が「１」を出力する場合には、１６ビット出力信号ＬＵＴ２＿ＯＵＴをそのまま出力し、インバータ９０２が「０」を出力する場合には、「０」を出力する。マスク処理部９０８は、インバータ９０３が「１」を出力する場合には、１６ビット出力信号ＬＵＴ３＿ＯＵＴをそのまま出力し、インバータ９０３が「０」を出力する場合には、「０」を出力する。
【００７０】
排他的論理和回路ＥＸ０は、マスク処理部９０５の１６ビット出力信号のうちのビット０の信号と、マスク処理部９０６の１６ビット出力信号のうちのビット０の信号と、マスク処理部９０７の１６ビット出力信号のうちのビット０の信号と、マスク処理部９０８の１６ビット出力信号のうちのビット０の信号と、の排他的論理和信号を、エラー訂正された１ビット情報Ｃ＿ＤＡＴＡ［０］として出力する。
【００７１】
同様に、排他的論理和回路ＥＸ１は、マスク処理部９０５の１６ビット出力信号のうちのビット１の信号と、マスク処理部９０６の１６ビット出力信号のうちのビット１の信号と、マスク処理部９０７の１６ビット出力信号のうちのビット１の信号と、マスク処理部９０８の１６ビット出力信号のうちのビット１の信号と、の排他的論理和信号を、エラー訂正された１ビット情報Ｃ＿ＤＡＴＡ［１］として出力する。同様にして、１６個の排他的論理和回路ＥＸ０〜ＥＸ１５は、マスク処理部９０５〜９０８の各１６ビット出力信号をビット毎に排他的論理和演算し、１６ビットのエラー訂正情報Ｃ＿ＤＡＴＡ［１５：０］を出力する。
【００７２】
以上のように、エラー訂正は、エラーが発生したルックアップテーブル以外のすべてのルックアップテーブルのビット毎の排他的論理和演算を行うことにより求められる。そのため、マスク処理部９０５〜９０８でエラーが発生したルックアップテーブルの出力信号だけ「０」にマスクすることにより、どこにエラーが発生した場合でもすべてのルックアップテーブルの排他的論理和演算を行うだけでエラー訂正結果が得られる。
【００７３】
図１０は、図９のマスク処理部９０５〜９０８の構成例を示す図である。１６個の論理積（ＡＮＤ）回路１００１〜１０１６は、それぞれ、１６ビット出力信号ＬＵＴｎ＿ＯＵＴ［０］〜ＬＵＴｎ＿ＯＵＴ［１５］とインバータ９０ｎ（ｎ＝０〜３）の出力信号とのビット毎の論理積信号を１６ビット出力信号ＬＵＴｎ＿Ｍ［０］〜ＬＵＴｎ＿Ｍ［１５］として出力する。
【００７４】
図１２（Ａ）〜（Ｃ）は、エラー訂正処理の例を示す図である。図１２（Ａ）は、ルックアップテーブルＬＵＴ０〜ＬＵＴ３及び垂直パリティメモリＰＶ０〜ＰＶ３の初期状態を示す図である。図１２（Ｂ）は、その後のソフトエラーにより１ビットエラーが発生した例を示す。例えば、情報ルックアップテーブルＬＵＴ２のビット４がソフトエラーにより「１」から「０」にビット反転した例を示す。垂直パリティチェック部ＣＨ２は、図１２（Ｂ）のルックアップテーブルＬＵＴ２の１６ビット情報の垂直パリティ演算結果１２０１として「１」を演算する。この垂直パリティ演算結果１２０１の「１」は、垂直パリティメモリＰＶ２に記憶されている「０」の垂直パリティとは異なるため、「１」のエラー信号ＬＵＴ２＿ＥＲＲを出力する。その後、エラー訂正部６０８は、エラー訂正処理を行うことにより、図１２（Ｃ）の訂正された情報Ｃ＿ＤＡＴＡ［１５：０］を生成する。訂正された情報Ｃ＿ＤＡＴＡ［１５：０］をルックアップテーブルＬＵＴ２に書き込むことにより、ルックアップテーブルＬＵＴ２のビット４は、「０」から「１」に訂正される。
【００７５】
図１１は、図６の基本論理エレメント６０１の処理例を示すタイミングチャートである。クロック信号ＣＬＫは、図６のＤ型フリップフロップ６０３、６０５、６１０及び６１３で使用されるクロック信号である。出力信号ＬＵＴ０＿ＯＵＴ〜ＬＵＴ３＿ＯＵＴは、それぞれ、ルックアップテーブルＬＵＴ０〜ＬＵＴ３の出力信号である。出力信号ＭＵＸ＿ＯＵＴは、第１のマルチプレクサ６０７の出力信号である。出力信号ＤＦＦ＿ＯＵＴは、Ｄ型フリップフロップ６１３の出力信号である。
【００７６】
時刻ｔ１では、コンテキスト０の処理を行うため、アウトプットイネーブル信号ＬＵＴ０＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、出力信号ＬＵＴ０−Ａを出力する。第１のマルチプレクサ６０７は、「０」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ａを選択して出力する。
【００７７】
次に、時刻ｔ２では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ０−Ａをラッチして出力する。また、コンテキスト１の処理を行うため、アウトプットイネーブル信号ＬＵＴ１＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、出力信号ＬＵＴ１−Ｂを出力する。第１のマルチプレクサ６０７は、「１」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｂを選択して出力する。
【００７８】
次に、時刻ｔ３では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ１−Ｂをラッチして出力する。また、コンテキスト２の処理を行うため、アウトプットイネーブル信号ＬＵＴ２＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ２は、出力信号ＬＵＴ２＿ＯＵＴとして、出力信号ＬＵＴ２−Ｃを出力する。第１のマルチプレクサ６０７は、「２」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ２の出力信号ＬＵＴ２−Ｃを選択して出力する。
【００７９】
次に、時刻ｔ４では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ２−Ｃをラッチして出力する。また、コンテキスト０の処理を行うため、アウトプットイネーブル信号ＬＵＴ０＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、出力信号ＬＵＴ０−Ｄを出力する。第１のマルチプレクサ６０７は、「０」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ｄを選択して出力する。
【００８０】
次に、時刻ｔ５では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ０−Ｄをラッチして出力する。また、コンテキスト１の処理を行うため、アウトプットイネーブル信号ＬＵＴ１＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、出力信号ＬＵＴ１−Ｅを出力する。第１のマルチプレクサ６０７は、「１」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｅを選択して出力する。
【００８１】
次に、時刻ｔ６では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ１−Ｅをラッチして出力する。また、コンテキスト２の処理を行うため、アウトプットイネーブル信号ＬＵＴ２＿ＯＥが「１」になる。ここで、ルックアップテーブルＬＵＴ２にソフトエラーが発生した場合、ルックアップテーブルＬＵＴ２は、出力信号ＬＵＴ２＿ＯＵＴとして、エラーの出力信号ＬＵＴ２−Ｆを出力する。垂直パリティチェック部ＣＨ２は、「１」のエラー信号ＬＵＴ２＿ＥＲＲを出力する。第１のマルチプレクサ６０７は、「２」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ２のエラーの出力信号ＬＵＴ２−Ｆを選択して出力する。
【００８２】
次に、時刻ｔ７では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、エラーの出力信号ＬＵＴ２−Ｆをラッチして出力する。Ｄ型フリップフロップ６０５は、「１」のエラー信号ＥＲＲを出力する。アウトプットイネーブル信号ＬＵＴ０＿ＯＥ、ＬＵＴ１＿ＯＥ及びＬＵＴ３＿ＯＥが「１」になる。ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、出力信号ＬＵＴ０−Ｆを出力する。ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、出力信号ＬＵＴ１−Ｆを出力する。ルックアップテーブルＬＵＴ３は、出力信号ＬＵＴ３＿ＯＵＴとして、水平パリティＨ＿ＰＡＲＩＴＹ−Ｆを出力する。エラー訂正部６０８は、訂正された情報Ｃ＿ＤＡＴＡ［１５：０］として、訂正情報ＬＵＴ２−Ｆを出力する。
【００８３】
次に、時刻ｔ８では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、訂正された出力信号ＬＵＴ２−Ｆをラッチして出力する。また、コンテキスト０の処理を行うため、アウトプットイネーブル信号ＬＵＴ０＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ０は、出力信号ＬＵＴ０＿ＯＵＴとして、出力信号ＬＵＴ０−Ｇを出力する。第１のマルチプレクサ６０７は、「０」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ０の出力信号ＬＵＴ０−Ｇを選択して出力する。
【００８４】
次に、時刻ｔ９では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ０−Ｇをラッチして出力する。また、コンテキスト１の処理を行うため、アウトプットイネーブル信号ＬＵＴ１＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ１は、出力信号ＬＵＴ１＿ＯＵＴとして、出力信号ＬＵＴ１−Ｈを出力する。第１のマルチプレクサ６０７は、「１」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ１の出力信号ＬＵＴ１−Ｈを選択して出力する。
【００８５】
次に、時刻ｔ１０では、Ｄ型フリップフロップ６１３は、クロック信号ＣＬＫの立ち上がりエッジに同期して、出力信号ＬＵＴ１−Ｈをラッチして出力する。また、コンテキスト２の処理を行うため、アウトプットイネーブル信号ＬＵＴ２＿ＯＥが「１」になり、ルックアップテーブルＬＵＴ２は、出力信号ＬＵＴ２＿ＯＵＴとして、出力信号ＬＵＴ２−Ｉを出力する。第１のマルチプレクサ６０７は、「２」のコンテキスト番号ＣＯＮＴ＿ＮＵＭ［１：０］に応じて、ルックアップテーブルＬＵＴ２の出力信号ＬＵＴ２−Ｉを選択して出力する。
【００８６】
以上のように、時刻ｔ６において、垂直パリティチェック部ＣＨ２が「１」のエラー信号ＬＵＴ２＿ＥＲＲを出力すると、アクセス制御部６０６はカウンタ８０３及び８０４のカウントを停止する。その次のサイクルの時刻ｔ７で、エラー訂正部６０８は、訂正した情報Ｃ＿ＤＡＴＡ［１５：０］を出力する。その次のサイクルの時刻ｔ８で、アクセス制御部６０６は、カウンタ８０３及び８０４のカウントを再開させることにより、次の情報ルックアップテーブルＬＵＴ０に記憶されている情報ＬＵＴ０−Ｇを出力させる。
【００８７】
図１３は、本実施形態の効果を説明するための図であり、各情報ルックアップテーブルの数について、図４の参考技術のパリティビット数と図６の本実施形態のパリティビット数を示す。パリティビット数は、垂直パリティ及び水平パリティの合計ビット数を示す。
【００８８】
例えば、図４の参考技術の場合、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ３の数は４であり、垂直パリティビット数は４×４＝１６ビットであり、水平パリティビット数は４×４＝１６ビットであり、合計パリティビット数は１６＋１６＝３２ビットである。
【００８９】
図６の本実施形態の場合、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２の数は３であり、垂直パリティビット数は４ビットであり、水平パリティビット数は１６ビットであり、合計パリティビット数は４＋１６＝２０ビットである。
【００９０】
また、図５の本実施形態の場合、情報ルックアップテーブルＬＵＴ０〜ＬＵＴ２の数は３であり、垂直パリティビット数は３ビットであり、水平パリティビット数は１６ビットであり、合計パリティビット数は３＋１６＝１９ビットである。
【００９１】
本実施形態は、参考技術に比べ、パリティビット数が少なく、冗長ビット数を削減することができる。また、情報ルックアップテーブル数が増えるにしたがって、本実施形態と参考技術のパリティビット数の差は大きくなっていく。
【００９２】
また、図２及び図３の参考技術において、１サイクルでエラー訂正まで行う場合、毎回すべての情報ルックアップテーブルＬＵＴ０〜ＬＵＴ３の情報を読み出しておかないと、エラー訂正ができない。そのため、毎サイクルすべての情報ルックアップテーブルＬＵＴ０〜ＬＵＴ３の情報を読み出すことになり、消費電力が大きくなるという課題がある。
【００９３】
図６及び図１１の本実施形態によれば、エラー発生時以外は毎サイクル、いずれか１個の情報ルックアップテーブルを読み出すので、消費電力を低減することができる。本実施形態は、参考技術に比べて、ルックアップテーブルの読み出し回数についてはほぼ１／４となり、その分の消費電力を削減することができる。
【００９４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９５】
６０１  基本論理エレメント
６０２，６０４  論理和回路
６０３，６０５，６１０，６１３  Ｄ型フリップフロップ
６０６  アクセス制御部
６０７  第１のマルチプレクサ
６０８  エラー訂正部
６０９，６１１，６１４  マルチプレクサ
６１２  第２のマルチプレクサ
ＬＵＴ０〜ＬＵＴ２  情報ルックアップテーブル
ＬＵＴ３  水平パリティルックアップテーブル
ＰＶ０〜ＰＶ３  垂直パリティメモリ
ＣＨ０〜ＣＨ３  垂直パリティチェック部
【図１】
2014143489.tif 000003
【図２】
2014143489.tif 000004
【図３】
2014143489.tif 000005
【図４】
2014143489.tif 000006
【図５】
2014143489.tif 000007
【図６】
2014143489.tif 000008
【図７】
2014143489.tif 000009
【図８】
2014143489.tif 000010
【図９】
2014143489.tif 000011
【図１０】
2014143489.tif 000012
【図１１】
2014143489.tif 000013
【図１２】
2014143489.tif 000014
【図１３】
2014143489.tif 000015