(57)【要約】【課題】構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供する。【解決手段】本発明のプログラマブル論理集積回路は、構成情報を受けて、構成情報の有するアドレスをスクランブル回路に送り、構成情報をプログラマブルロジックセルアレイに送る、第１の制御回路を有する。さらに、アドレスをスクランブルするスクランブル情報を保存する第１のメモリを有し、スクランブル情報に基づいてアドレスをスクランブルし、スクランブルしたアドレスをプログラマブルロジックセルアレイに送る、スクランブル回路を有する。さらに、スクランブルされたアドレスに基づいて構成情報を書き込み読み出す第２のメモリと、第２のメモリに書き込まれた構成情報に基づいて論理回路を構成するプログラマブルロジックセルとを有する、プログラマブルロジックセルアレイを有する。【選択図】      図１
2017005439.tif 000002
【特許請求の範囲】
【請求項１】
構成情報を受けて、前記構成情報の有するアドレスをスクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送る、第１の制御回路と、
前記アドレスをスクランブルするスクランブル情報を保存する第１のメモリを有し、前記スクランブル情報に基づいて前記アドレスをスクランブルし、スクランブルした前記アドレスを前記プログラマブルロジックセルアレイに送る、前記スクランブル回路と、
スクランブルされた前記アドレスに基づいて前記構成情報を書き込み読み出す第２のメモリと、前記第２のメモリに書き込まれた前記構成情報に基づいて論理回路を構成するプログラマブルロジックセルとを有する、前記プログラマブルロジックセルアレイと、を有するプログラマブル論理集積回路。
【請求項２】
スクランブルされた前記アドレスを逆スクランブルする逆スクランブル回路と比較回路とを有する第１のテスト回路を有し、
前記逆スクランブル回路は、前記逆スクランブルする逆スクランブル情報を記憶する第３のメモリを有し、前記逆スクランブル情報に基づいて、スクランブルされた前記アドレスを逆スクランブルし、
前記比較回路は、スクランブルされる前の前記アドレスと、逆スクランブルされた前記アドレスとを比較し、前記比較した結果が同じであればパス信号を出力する、請求項１記載のプログラマブル論理集積回路。
【請求項３】
誤り検出訂正回路を有する第２のテスト回路を有し、
前記誤り検出訂正回路は、前記比較回路が前記パス信号を出力した場合、前記第２のメモリに書き込まれた前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報を前記プログラマブルロジックセルアレイに送る、請求項２記載のプログラマブル論理集積回路。
【請求項４】
前記第２のテスト回路は第２の制御回路を有し、
前記第２の制御回路は、前記スクランブル回路にテストアドレスを送り、
前記誤り検出訂正回路は、前記比較回路が、前記テストアドレスと、前記スクランブル回路でスクランブルされさらに前記逆スクランブル回路で逆スクランブルされた前記テストアドレスと、を比較して前記パス信号を出力した場合、前記第２のメモリに書き込まれた前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報を前記プログラマブルロジックセルアレイに送る、請求項３記載のプログラマブル論理集積回路。
【請求項５】
前記第１のメモリもしくは前記第３のメモリは、抵抗変化性不揮発メモリを有する、請求項１から４の内の１項記載のプログラマブル論理集積回路。
【請求項６】
前記第１の制御回路と前記スクランブル回路との間にバッファ回路を有し、
前記バッファ回路は、前記アドレスと論理的に等しい値を前記スクランブル回路へ出力するように駆動され、前記第１のテスト回路に前記アドレスを入力する、請求項２から５の内の１項記載のプログラマブル論理集積回路。
【請求項７】
前記バッファ回路の最終段のＰＭＯＳトランジスタとＮＭＯＳトランジスタの駆動能力が等しくない、請求項６記載のプログラマブル論理集積回路。
【請求項８】
第１の製造者の有するスクランブル情報を受けて、前記スクランブル情報をスクランブル回路の有する第１のメモリに保存し、
第２の製造者の有する構成情報を受けて、前記構成情報の有するアドレスを前記スクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送り、
前記第１のメモリに保存された前記スクランブル情報に基づいて、前記アドレスをスクランブルし、スクランブルされた前記アドレスを前記プログラマブルロジックセルアレイに送り、
スクランブルされた前記アドレスに基づいて、前記構成情報を、前記プログラマブルロジックセルアレイの有する第２のメモリに保存し、
前記第２のメモリに保存された前記構成情報に基づいて、前記プログラマブルロジックセルアレイの論理回路を構成する、プログラマブル論理集積回路の構成方法。
【請求項９】
スクランブルされた前記アドレスを逆スクランブルし、
スクランブルされる前の前記アドレスと、逆スクランブルされた前記アドレスとを比較し、前記比較した結果が同じであればパス信号を出力する、請求項８記載のプログラマブル論理集積回路の構成方法。
【請求項１０】
前記パス信号を出力した場合、前記第２のメモリに記憶された前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報をスクランブルされた前記アドレスに基づいて前記第２のメモリに保存する、請求項９記載のプログラマブル論理集積回路の構成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、耐タンパ性を備えたプログラマブル論理集積回路に関する。
【背景技術】
【０００２】
プログラマグル論理集積回路は、構成情報に応じて回路の一部を構成もしくは再構成することが可能な論理集積回路である。よって、プログラマグル論理集積回路は、ハードウェアによる高速な演算能力や、多品種少量な製品開発にかかるコストを、専用設計の集積回路に比べて抑えられるという低価格性や、デバイス完成後に回路を修正できるという設計の自由度などを提供できる。
【０００３】
プログラマブル論理集積回路は、回路の構成情報を保持するために、不揮発性のメモリを備えている。設計者は製品を完成させるためには、所望の回路を実現する構成情報をその不揮発メモリに書き込む必要がある。プログラマブル論理集積回路の設計には、多大な労力とコストがかかる。もし、その構成情報が、不揮発メモリから不正に読み出されたり、製品のサプライチェーン上の悪意のある者により盗まれたりした場合、低価格の類似品やクローンが市場に出回る恐れがある。このことは、設計者の製品の売り上げに悪影響を及ぼすため、設計者は多大な損害を被ることが懸念される。
【０００４】
プログラマブル論理集積回路として、フラッシュメモリと、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性メモリセルとを備えたプログラマブル論理集積回路が広く利用されている。このプログラマブル論理集積回路は、構成情報をフラッシュメモリに書き込んでおき、電源投入時にフラッシュメモリの構成情報をプログラマブルセルアレイ内の揮発性メモリセルに転送し、転送された構成情報に基づいて論理回路を構成する。
【０００５】
図１５は、関連するプログラマブル論理集積回路の構成を示すブロック図である。関連技術のプログラマブル論理集積回路は、プログラマブルロジックセルアレイと、制御回路と、汎用ポートと、構成用ポートとを有する。プログラマブルロジックセルアレイは、メモリ（揮発性メモリセル）とプログラマブルロジックセルとを有する。メモリは、フラッシュメモリ（図示省略）などに格納され構成用ポートから入力される構成情報を記憶する。プログラマブルロジックセルは、メモリの構成情報に基づいて論理回路を構成する。プログラマブルロジックセルアレイは、汎用ポートからの入力データを、構成情報に基づいて構成された論理回路へ入力し、論理演算結果を汎用ポートへ出力する。
【０００６】
制御回路は、構成用ポートから入力される構成情報を含む信号を受け、プログラマブルロジックセルアレイへ制御信号を出力する。制御回路は信号として、メモリのアドレスＡと、メモリの入力データＤと、書き込みイネーブル信号ＷＥと、メモリの出力データＱと、センスイネーブル信号ＳＥとを有する。メモリへの書き込みは、書き込みイネーブル信号ＷＥをハイレベルにすることで、アドレスＡのメモリに入力データＤを書き込む。メモリの読み出しは、センスイネーブル信号ＳＥをハイレベルにすることで、アドレスＡのメモリから出力データＱを読み出す。
【０００７】
図１６は、関連技術のプログラマブル論理集積回路の構成と入力データの入力形式を示すブロック図である。構成情報の入力データの入力形式は、メモリのアドレスＡとそのアドレスに対応した入力データＤが各行に記されている。各行は順次構成用ポートを介してプログラマブル論理集積回路へ入力される。メモリの書き込みは、例えば、まずヘッダー情報を入力することにより、Ｎ個のデータを順次書き込むように制御回路を設定する。次に入力データの第１行目のアドレスＡ０とそのアドレスへ書き込む入力データＤ（Ａ０）を制御回路へ入力する。制御回路は、メモリのアドレスＡ０と、メモリの入力データＤ（Ａ０）をメモリへ出力し、書き込みイネーブル信号ＷＥをハイレベルにすることにより、メモリの書き込みを行う。次に入力データの入力形式の第２行目のアドレスＡ１とそのアドレスへ書き込む入力データＤ（Ａ１）を制御回路へ入力する。制御回路は、メモリのアドレスＡ１と、メモリの入力データＤ（Ａ１）をメモリへ出力し、書き込みイネーブル信号ＷＥをハイレベルにすることにより、メモリの書き込みを行う。このように、順次各行の書き込みをＮ回行うことにより、書き込みを完了する。
【０００８】
図１７は、関連技術のプログラマブル論理集積回路の構成と出力データの出力形式を示すブロック図である。構成情報の出力データの出力形式は、メモリのアドレスＡとそのアドレスに対応した出力データＱが各行に記されている。各行は順次構成用ポートを介してプログラマブル論理集積回路から出力される。メモリの読み出しは、例えば、まずヘッダー情報を入力することにより、Ｎ個のデータを順次読み出すように制御回路を設定する。次にアドレスＡ０を制御回路へ入力する。制御回路は、メモリのアドレスＡ０をメモリへ出力し、センスイネーブル信号ＳＥをハイレベルにすることにより、メモリの読み出しを行う。制御回路は構成ポートを介して、出力データの第１行目として、メモリのアドレスＡ０と読み出したデータＱ（Ａ０）を出力する。次にアドレスＡ１を制御回路へ入力する。制御回路は、メモリのアドレスＡ１をメモリへ出力し、センスイネーブル信号ＳＥをハイレベルにすることにより、メモリの読み出しを行う。制御回路は構成ポートを介して、出力データの第２行目として、メモリのアドレスＡ１と読み出したデータＱ（Ａ１）を出力する。このように、順次各行の読み出しをＮ回行うことにより、読み出しを完了する。
【０００９】
関連技術のプログラマブル論理集積回路は、入力形式に沿って、構成情報を入力データとして入力することにより、所望の回路機能を実現できる。また、出力形式に沿って、メモリの記憶データを出力し、アドレスＡのメモリへ書き込んだデータＤ（Ａ）と、アドレスＡのメモリから読み出したデータＱ（Ａ）を比較することにより、メモリへ意図したデータが正常に書き込まれたかをテストすることが可能である。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特表２００４−５１５００１号公報
【特許文献２】特開２００８−２７３２７号公報
【特許文献３】特開平５−２５９２８１号公報
【非特許文献】
【００１１】
【非特許文献１】Ｓｔｅｐｈｅｎ  Ｍ．Ｔｒｉｍｂｅｒｇｅｒ，ａｎｄ  Ｊａｓｏｎ  Ｊ．Ｍｏｏｒｅ，“ＦＰＧＡ  Ｓｅｃｕｒｉｔｙ：Ｍｏｔｉｖａｔｉｏｎｓ，Ｆｅａｔｕｒｅｓ，ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ，”Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ＩＥＥＥ，Ｖｏｌｕｍｅ  １０２，Ｎｏ．８，ｐｐ．１２４８−１２６５，２０１４．
【非特許文献２】Ｓ．Ｓｋｏｒｏｂｏｇａｔｏｖ，“Ｆｌａｓｈ  Ｍｅｍｏｒｙ‘Ｂｕｍｐｉｎｇ’Ａｔｔａｃｋｓ”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ，ＣＨＥＳ  ２０１０，ｐｐ．１５８−１７２，２０１０．
【発明の概要】
【発明が解決しようとする課題】
【００１２】
フラッシュメモリと揮発性メモリセルとを用いたプログラマブル論理集積回路では、攻撃者が、転送中の電気信号を測定することにより構成情報を盗むことができてしまう。
【００１３】
プログラマブル論理集積回路の耐タンパ性を向上する技術として、特許文献１には構成情報を暗号化する技術が開示されている。この技術は、暗号化した構成情報をフラッシュメモリへ書き込んでおく。電源投入時に、フラッシュメモリの暗号化された構成情報を、プログラマブル論理集積回路上に搭載された復号回路に転送し、複合回路は暗号化された構成情報を復号化し、復号化された構成情報をメモリセルへ書き込む。この技術により、データ転送時に構成情報が盗難されても、データは暗号化されているため、コピーやクローンを作成するためにそのままでは利用できない。
【００１４】
プログラマブル論理集積回路の耐タンパ性を向上する技術として、非特許文献１にはアンチフューズを用いる技術が開示されている。アンチフューズを用いたプログラマブル論理集積回路は、電源投入時のデータ転送が不要である。アンチフューズに記憶された構成情報は電源オフ時もデータを維持でき、電源投入後はそのデータを用いて論理回路を構成できる。
【００１５】
特許文献１や非特許文献１に記載のプログラマブル論理集積回路は、耐タンパ性を向上できるものの、工場でのテストにおいては、意図したデータが正常に書き込まれたかを確認できるようにテスト機能を提供する必要がある。そして、攻撃者は、そのテスト機能を利用して構成情報を読み出す可能性がある。
【００１６】
プログラマブル論理集積回路の耐タンパ性を向上する技術として、設定ビットを設け、その設定ビットの値によりリードバックを防止する方法が考えられる。仮にその設定ビットを書き換え、リードバック防止の設定を解除できた場合、構成情報が読み出される可能性がある。
【００１７】
プログラマブル論理集積回路の耐タンパ性を向上する技術として、データの読み出し結果は外部に出力せず、ベリファイ結果のみを出力する手法が考えられる。しかしながら、非特許文献２に記載の光を用いた故障注入攻撃を用いて、ベリファイのみの手法においても構成情報が読み出されている。
【００１８】
特許文献１には、読み出しデータを再暗号化する耐タンパ技術が開示されている。しかしながら、読み出しデータを再暗号化すると、工場でのテストにかかる時間が増加するためテストコストの増加につながる。工場のテスト時は暗号化せず、出荷後は暗号化するように制御するために、例えば、設定ビットを設けることもできる。しかしながら、攻撃者はその設定ビットを攻撃し、暗号化しない設定に変更後、構成情報を盗む可能性がある。
【００１９】
特許文献２や特許文献３には、アドレススクランブル回路を用いて耐タンパ性を高める技術が開示されている。アドレススクランブル回路はメモリに搭載され、ＣＰＵの論理アドレスを物理アドレスへ変換する。メモリの場合、書き込まれるデータの物理的な位置は重要ではなく、どの位置に書かれてもよい。一方、プログラマブル論理集積回路は、書き込まれる物理的な位置近傍の論理回路を構成するため、書き込まれる位置は変更できない。本アドレススクランブル回路はそのままではプログラマブル論理集積回路に適用できない。
【００２０】
本発明は、上記の課題に鑑みてなされたものであり、その目的は、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することである。
【課題を解決するための手段】
【００２１】
本発明によるプログラマブル論理集積回路は、構成情報を受けて、前記構成情報の有するアドレスをスクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送る、第１の制御回路と、
前記アドレスをスクランブルするスクランブル情報を保存する第１のメモリを有し、前記スクランブル情報に基づいて前記アドレスをスクランブルし、スクランブルした前記アドレスを前記プログラマブルロジックセルアレイに送る、前記スクランブル回路と、
スクランブルされた前記アドレスに基づいて前記構成情報を書き込み読み出す第２のメモリと、前記第２のメモリに書き込まれた前記構成情報に基づいて論理回路を構成するプログラマブルロジックセルとを有する、前記プログラマブルロジックセルアレイと、を有する。
【００２２】
本発明によるプログラマブル論理集積回路の構成方法は、第１の製造者の有するスクランブル情報を受けて、前記スクランブル情報をスクランブル回路の有する第１のメモリに保存し、第２の製造者の有する構成情報を受けて、前記構成情報の有するアドレスを前記スクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送り、前記第１のメモリに保存された前記スクランブル情報に基づいて、前記アドレスをスクランブルし、スクランブルされた前記アドレスを前記プログラマブルロジックセルアレイに送り、スクランブルされた前記アドレスに基づいて、前記構成情報を、前記プログラマブルロジックセルアレイの有する第２のメモリに保存し、前記第２のメモリに保存された前記構成情報に基づいて、前記プログラマブルロジックセルアレイの論理回路を構成する。
【発明の効果】
【００２３】
本発明によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の第１の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。
【図２】本発明の第２の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。
【図３】本発明の第２の実施形態のプログラマブル論理集積回路を構成するスクランブル回路の構成を示すブロック図である。
【図４】本発明の第２の実施形態のプログラマブル論理集積回路を構成するスイッチセルアレイの構成を示すブロック図である。
【図５】本発明の第２の実施形態のプログラマブル論理集積回路を構成するスイッチセルアレイのスイッチセルにスクランブル情報が設定された様子を示すブロック図である。
【図６】本発明の第２の実施形態のプログラマブル論理集積回路の構成と入力データ形式を示すブロック図である。
【図７】本発明の第２の実施形態のプログラマブル論理集積回路の構成と出力データ形式を示すブロック図である。
【図８】本発明の第３の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。
【図９】本発明の第３の実施形態のプログラマブル論理集積回路を構成する第１のテスト回路の構成を示すブロック図である。
【図１０】本発明の第３の実施形態のプログラマブル論理集積回路を構成するスイッチセルアレイの逆スクランブル回路の構成を示すブロック図である。
【図１１】本発明の第４の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。
【図１２】本発明の第４の実施形態のプログラマブル論理集積回路を構成する第２のテスト回路の構成を示すブロック図である。
【図１３】本発明の第４の実施形態のプログラマブル論理集積回路の自己診断テストの手順を示すフローチャートである。
【図１４】本発明の第５の実施形態のプログラマブル論理集積回路のサプライチェーンを示すブロック図である。
【図１５】関連するプログラマブル論理集積回路の構成を示すブロック図である。
【図１６】関連するプログラマブル論理集積回路の構成と入力データの入力形式を示すブロック図である。
【図１７】関連するプログラマブル論理集積回路の構成と出力データの出力形式を示すブロック図である。
【発明を実施するための形態】
【００２５】
以下、図を参照しながら、本発明の実施形態を詳細に説明する。但し、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。
（第１の実施形態）
図１は、本発明の第１の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。本実施形態のプログラマブル論理集積回路１は、構成情報を受けて、前記構成情報の有するアドレスをスクランブル回路１２に送り、前記構成情報をプログラマブルロジックセルアレイ１３に送る、第１の制御回路１１を有する。さらに、前記アドレスをスクランブルするスクランブル情報を保存する第１のメモリ１２１を有し、前記スクランブル情報に基づいて前記アドレスをスクランブルし、スクランブルした前記アドレスを前記プログラマブルロジックセルアレイ１３に送る、前記スクランブル回路１２を有する。さらに、スクランブルされた前記アドレスに基づいて前記構成情報を書き込み読み出す第２のメモリ１３１と、前記第２のメモリに書き込まれた前記構成情報に基づいて論理回路を構成するプログラマブルロジックセル１３２とを有する、前記プログラマブルロジックセルアレイ１３と、を有する。
【００２６】
本実施形態によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
（第２の実施形態）
図２は、本発明の第２の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。本実施形態のプログラマブル論理集積回路２は、第１の制御回路２１と、スクランブル回路２２と、プログラマブルロジックセルアレイ２３と、構成用ポート２４と、汎用ポート２５とを有する。プログラマブルロジックセルアレイ２３は、メモリ２３１（第２のメモリ）とプログラマブルロジックセル２３２とを有する。メモリ２３１は、ＳＲＡＭなどの揮発性メモリとすることができ、構成情報を記憶する。プログラマブルロジックセル２３２は、メモリ２３１の構成情報に基づいて論理回路を構成もしくは再構成する。
【００２７】
プログラマブルロジックセルアレイ２３は、汎用ポート２５からの入力データを、構成情報に基づいて再構成されたプログラマブルロジックセル２３２へ入力し、論理演算結果を汎用ポート２５へ出力する。
【００２８】
第１の制御回路２１は、構成用ポート２４から入力されるメモリのアドレスを有する構成情報を受け、スクランブル回路２２とプログラマブルロジックセルアレイ２３と、信号を送受信する。信号としては、メモリのアドレスＡと、セルスイッチ制御信号と、メモリの入力データＤ（構成情報）と、書き込みイネーブル信号ＷＥと、メモリの出力データＱ（構成情報）と、センスイネーブル信号ＳＥとを有する。
【００２９】
スクランブル回路２２は、アドレスＡをスクランブルし、スクランブルされたアドレスＳＡをプログラマブルロジックセルアレイ２３へ出力する。メモリ２３１への書き込みには、第１の制御回路２１が書き込みイネーブル信号ＷＥをハイレベルにすることで、スクランブルされたアドレスＳＡに、入力データＤを書き込む。メモリ２３１の読み出しには、第１の制御回路２１がセンスイネーブル信号ＳＥをハイレベルにすることで、スクランブルされたアドレスＳＡから、出力データＱを読み出す。
【００３０】
なお、プログラマブル論理集積回路の運用時、メモリ２３１が揮発性メモリの場合、構成情報は、予めフラッシュメモリなどの不揮発メモリに格納されており、構成用ポート２４から入力される。一方、メモリ２３１が不揮発性メモリの場合、構成情報はメモリ２３１に格納しておくことができる。
【００３１】
図３は、プログラマブル論理集積回路２を構成するスクランブル回路２２の構成を示すブロック図である。スクランブル回路２２は、スイッチセルアレイ２２１（第１のメモリ）を有する。スイッチセルアレイ２２１は、アドレスＡを入力とし、スクランブルされたアドレスＳＡを出力とする。スイッチセルアレイ２２１と第１の制御回路２１との間のスイッチセル制御信号としては、スイッチセルのアドレスＡ＿Ｓと、スイッチセルの入力データＤ＿Ｓと、スイッチセルの書き込みイネーブル信号ＷＥ＿Ｓと、スイッチセルの出力データＱ＿Ｓと、スイッチセルの読み出しイネーブル信号ＳＥ＿Ｓとを有する。
【００３２】
図４は、スイッチセルアレイ２２１の構成を示すブロック図である。スイッチセルアレイ２２１は、列方向に延伸しアドレスＡ[0]、Ａ［１］、Ａ［２］、Ａ［３］が入力される配線と、行方向に延伸しスクランブルされたアドレスＳＡ［０］、ＳＡ［１］、ＳＡ［２］、ＳＡ［３］を出力する配線と、各行列の配線の交差する部分に配置されるスイッチセルとを有する。
【００３３】
スイッチセルには、ＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＣＢＲＡＭ（Ｃｏｎｄｕｃｔｉｖｅ  Ｂｒｉｄｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの抵抗変化性不揮発メモリ素子を利用することができる。
【００３４】
ここで、抵抗変化性不揮発メモリ素子は、低抵抗状態と高抵抗状態との２つのいずれかの抵抗状態をとる。ここで、低抵抗状態をオン状態と定義する。また、高抵抗状態をオフ状態と定義する。さらに、抵抗変化性不揮発メモリ素子の状態を、プログラムデータと対応付ける。低抵抗状態を、データ１の状態と定義する。高抵抗状態を、データ０の状態と定義する。抵抗変化性不揮発メモリ素子がオン状態の時、電圧レベルで与えられる信号は抵抗変化性不揮発メモリ素子を通過する。一方、抵抗変化性不揮発メモリ素子がオフ状態の時、信号は抵抗変化性不揮発メモリ素子によって遮断され、通過しない。
【００３５】
尚、スイッチセルには、ＳＲＡＭなどの揮発性メモリ素子とトランジスタとを組み合わせて利用してもよい。そして、別途設けた不揮発性メモリに書き込まれたスクランブル情報を揮発性メモリ素子へロードすることで、スクランブル回路のスイッチセルの状態を設定してもよい。
【００３６】
当業者は、スイッチセルの書き込みや読み出しを容易に実施できる。たとえば、スイッチセルアレイ２２１は、列選択回路、行選択回路、書き込み回路、読み出し回路をさらに設けている（図示省略）。そして、スイッチセルのアドレスＡ＿Ｓに対応したメモリセルを選択するために、選択メモリセルの列を列選択回路が選択し、選択メモリセルの行を行選択回路が選択することができる。さらに、スイッチセルの書き込みイネーブル信号ＷＥ＿Ｓがハイレベルの時、選択されたメモリセルに書き込み回路を利用してデータを書き込むことができる。さらに、スイッチセルのセンスイネーブル信号ＳＥ＿Ｓがハイレベルの時、選択されたメモリセルから読み出し回路を利用してデータを読み出すことができる。
【００３７】
図５は、スイッチセルアレイ２２１のスイッチセルにスクランブル情報が設定された様子を示すブロック図である。図５では、黒色で示したスイッチセルはオン状態を、白色で示したスイッチセルはオフ状態を示す。アドレスＡ［０］が入力される列配線は、オン状態のスイッチセルＳ３０を介して、スクランブルアドレスＳＡ［３］を出力する行配線に接続される。アドレスＡ［１］が入力される列配線は、オン状態のスイッチセルＳ０１を介して、スクランブルアドレスＳＡ［０］を出力する行配線に接続される。アドレスＡ［２］が入力される列配線は、オン状態のスイッチセルＳ２２を介して、スクランブルアドレスＳＡ［２］を出力する行配線に接続される。アドレスＡ［３］が入力される列配線は、オン状態のスイッチセルＳ１３を介して、スクランブルアドレスＳＡ［１］を出力する行配線に接続される。これらによりスイッチセルアレイ２２１は、アドレスをスクランブルすることができる。
【００３８】
なお、図５では、行配線の数と列配線の数とをそれぞれ４本としているが、これには限定されない。
【００３９】
図６は、プログラマブル論理集積回路２の構成と入力データ（構成情報）の形式を示すブロック図である。入力データの形式は、メモリのアドレスと、スクランブルされたアドレスに対応した入力データＤが各行に記されている。各行は順次構成用ポート２４を介して第１の制御回路２４に入力される。
【００４０】
メモリの書き込みは、例えば、まずヘッダー情報を入力することにより、Ｎ個のデータを順次書き込むように第１の制御回路２１を設定する。次に、入力データの第１行目のアドレスＡ０と、アドレスＡ０をスクランブル情報に基づきスクランブルしたアドレスＳＡ０へ書き込む入力データＤ（ＳＡ０）とを、第１の制御回路２１へ入力する。第１の制御回路２１は、メモリのアドレスＡ０をスクランブル回路２２へ出力する。スクランブル回路２２は、アドレスＡ０をスクランブルし、スクランブルアドレスＳＡ０をメモリ２３１へ出力する。さらに、第１の制御回路２１は、入力データＤ（ＳＡ０）をメモリ２３１へ出力し、書き込みイネーブル信号ＷＥをハイレベルにすることにより、メモリ２３１の書き込みを行う。
【００４１】
次に、入力データの第２行目のアドレスＡ１と、アドレスＡ１をスクランブル情報に基づきスクランブルしたアドレスＳＡ１へ書き込む入力データＤ（ＳＡ１）とを、第１の制御回路２１へ入力する。第１の制御回路２１は、メモリのアドレスＡ１をスクランブル回路２２へ出力する。スクランブル回路２２は、アドレスＡ１をスクランブルし、スクランブルアドレスＳＡ１をメモリ２３１へ出力する。さらに、第１の制御回路２１は、入力データＤ（ＳＡ１）をメモリ２３１へ出力し、書き込みイネーブル信号ＷＥをハイレベルにすることにより、メモリ２３１の書き込みを行う。このように、順次各行の書き込みをＮ回行うことにより、書き込みを完了する。
【００４２】
図７は、プログラマブル論理集積回路２の構成と出力データ（構成情報）の形式を示すブロック図である。出力データの形式は、メモリのアドレスＡとスクランブルされたアドレスに対応した出力データＱが各行に記されている。各行は順次構成用ポート２４を介して第１の制御回路２１から出力される。
【００４３】
メモリの読み出しは、例えば、まずヘッダー情報を入力することにより、Ｎ個のデータを順次読み出すように第１の制御回路２１を設定する。次に、アドレスＡ０を第１の制御回路２１へ入力する。第１の制御回路２１は、メモリのアドレスＡ０をスクランブル回路２２へ出力する。スクランブル回路２２は、アドレスＡ０をスクランブルし、スクランブルアドレスＳＡ０をメモリ２３１へ出力する。さらに、第１の制御回路２１は、センスイネーブル信号ＳＥをハイレベルにすることにより、メモリ２３１の読み出しを行う。第１の制御回路２１は、構成ポート２４を介して、出力データの第１行目として、メモリのアドレスＡ０と読み出したデータＱ（ＳＡ０）とを出力する。
【００４４】
次に、第１の制御回路２１は、アドレスＡ１をスクランブル回路２２へ出力し、スクランブル回路２２は、アドレスＡ１をスクランブルし、スクランブルアドレスＳＡ１をメモリ２３１へ出力する。さらに、第１の制御回路２１は、センスイネーブル信号ＳＥをハイレベルにすることにより、メモリ２３１の読み出しを行う。第１の制御回路２１は構成ポート２４を介して、出力データの第２行目として、メモリのアドレスＡ１と読み出したデータＱ（ＳＡ１）とを出力する。このように順次各行の読み出しをＮ回行うことにより、読み出しを完了する。
【００４５】
尚、プログラマブル論理集積回路２は、構成情報を記憶するメモリ２３１が複数のシリアルレジスタから構成されていてもよい。そして、シリアルレジスタを識別するアドレスをスクランブルするように構成してもよい。
【００４６】
尚、プログラマブル論理集積回路２は、入力データの入力形式からアドレス情報が削除され、入力データＤのみから構成されてもよい。この場合は、さらに、第１の制御回路にカウンタを設けて、アドレスを生成してもよい。
【００４７】
尚、プログラマブル論理集積回路２は、出力データの出力形式からアドレス情報が削除され、出力データＱのみから構成されていてもよい。
【００４８】
尚、プログラマブル論理集積回路２は、構成情報を読み出す際に、外部からアドレス情報を入力せず、第１の制御回路にカウンタを設け、アドレスを生成してもよい。
【００４９】
尚、プログラマブル論理集積回路２を構成するスクランブル回路２２は、さらに疑似乱数発生器と、ＸＯＲ回路を備え、アドレスの各ビットと疑似乱数発生器から出力される疑似乱数の各ビットのＸＯＲ論理の結果をスイッチセルアレイ２２１へ出力してもよい。
【００５０】
尚、プログラマブル論理集積回路２を構成するスクランブル回路２２は、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）等の暗号方式と組み合わせて用いてもよい。
【００５１】
以上のように、本実施形態のプログラマブル論理集積回路２は、スクランブル情報に基づいた入力形式に沿って、メモリ２３１の所望のアドレスに構成情報を入力データとして入力することにより、所望の回路機能を実現できる。また、出力形式に沿って、メモリ２３１の記憶データを出力させ、アドレスＡをスクランブルアドレスＳＡのメモリへ書き込んだデータＤ（ＳＡ）と、スクランブルアドレスＳＡのメモリから読み出したデータＱ（ＳＡ）とを比較することができる。これにより、スクランブル情報を知らなくても、データが正常に書き込まれたかをテストすることが可能である。
【００５２】
さらに、スクランブルにかかる時間はスクランブル回路２２の遅延時間のみであり、十分高速である。さらに、スクランブル情報に基づいた入力形式に沿った入力データ、もしくは、出力データを悪意ある者が入手したとしても、スクランブル情報がわからない場合、構成情報の復元やクローンの作成を行うことが困難である。
【００５３】
さらに、スクランブル回路２２が抵抗変化性不揮発メモリから構成される場合、スクランブル情報を電子顕微鏡による観察などの手法を用いても、物理的な形状の変化からは記憶データを読み出すことは困難である。よって、スクランブル情報の耐タンパ性を向上させることができる。さらに、スクランブル回路２２が抵抗変化性不揮発メモリから構成される場合、電源投入時のスクランブル情報のロードが不要であり、ロード時に攻撃者によりデータが書き換えられる可能性を排除できる。さらに、スクランブル回路２２が抵抗変化性不揮発メモリから構成される場合、電荷でデータを記憶するタイプのメモリに比べ、攻撃者が放射線や光などを用いて直接スクランブル情報のデータを反転できる確率は低い。
【００５４】
以上のように、本実施形態によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
（第３の実施形態）
図８は、本発明の第３の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。本実施形態のプログラマブル論理集積回路３は、第１の制御回路３１と、スクランブル回路３２と、プログラマブルロジックセルアレイ３３と、構成用ポート３４と、汎用ポート３５と、第１のテスト回路３６と、バッファ回路３７とを有する。スクランブル回路３２は、スクランブル情報を記憶するスイッチセルアレイ（第１のメモリ）を有する（図示省略）。プログラマブルロジックセルアレイ３３は、メモリ３３１（第２のメモリ）とプログラマブルロジックセル３３２とを有する。メモリ３３１は構成情報を記憶し、プログラマブルロジックセル３３２は、メモリ３３１の構成情報に基づいて論理回路を構成もしくは再構成する。
【００５５】
プログラマブル論理集積回路３は、第２の実施形態のプログラマブル論理集積回路２に加えて、第１のテスト回路３６とバッファ回路３７とを有する。よって、第２の実施形態と説明が重複する部分は、説明を省略する。
【００５６】
第１のテスト回路３６は、アドレスＡとスクランブルされたアドレスＳＡとを入力とし、テスト結果であるＲＥＳＵＬＴ１を出力する。バッファ回路３７は、例えば、２段のインバータ回路から構成され、アドレスＡと論理的に等価な値をスクランブル回路３２に出力するように駆動される。
【００５７】
図９は、第１のテスト回路３６の構成を示すブロック図である。第１のテスト回路３６は、比較回路３６１と、スイッチセルアレイ３６２（第３のメモリ）とを有する。スイッチセルアレイ３６２は、スクランブルアドレスＳＡを入力とし、スクランブルアドレスＳＡを逆スクランブルすることにより元に戻したアドレスＡ’を出力とする。比較回路３６１は、アドレスＡと元に戻されたアドレスＡ’とを比較し、一致していればＲＥＳＵＬＴ１としてパスを、一致していなければＲＥＳＵＬＴ１としてフェイルを出力する。
【００５８】
スイッチセルアレイ３６２は、第１の制御回路３１との間のスイッチセル制御信号として、スイッチセルのアドレスＡ＿ＩＳ、スイッチセルの入力データＤ＿ＩＳ、スイッチセルの書き込みイネーブル信号ＷＥ＿ＩＳ、スイッチセルの出力データＱ＿ＩＳ、スイッチセルの読み出しイネーブル信号ＳＥ＿ＩＳを有する。
【００５９】
図１０は、スイッチセルアレイ３６２の逆スクランブル回路の構成を示すブロック図である。スイッチセルアレイ３６２は、列方向に延伸しアドレスＡ’［０］、Ａ’［１］、Ａ’［２］、Ａ’［３］を出力する配線と、行方向に延伸しスクランブルされたアドレスＳＡ［０］、ＳＡ［１］、ＳＡ［２］、ＳＡ［３］が入力される配線と、各行列の配線の交差する部分に配置されるスイッチセルとを有する。
【００６０】
スイッチセルアレイ３６２は、第２の実施形態のスイッチセルアレイ２２１と同様のスイッチセルを利用できる。すなわち、抵抗変化性不揮発メモリによるスイッチセルを利用できる。図１０では、黒色で示したスイッチセルはオン状態を、白色で示したスイッチセルはオフ状態を示す。アドレスＡ’［０］が出力される列配線は、オン状態のスイッチセルＩＳ３０を介して、スクランブルアドレスＳＡ［３］が入力する行配線に接続される。アドレスＡ’［１］が出力される列配線は、オン状態のスイッチセルＩＳ０１を介して、スクランブルアドレスＳＡ［０］が入力する行配線に接続される。アドレスＡ’［２］が出力される列配線は、オン状態のスイッチセルＩＳ２２を介して、スクランブルアドレスＳＡ［２］が入力する行配線に接続される。アドレスＡ’［３］が出力される列配線は、オン状態のスイッチセルＩＳ１３を介して、スクランブルアドレスＳＡ［１］が入力する行配線に接続される。これによりスイッチセルアレイはスクランブル情報に基づいてスクランブルされたアドレスを、元のアドレスに戻すように逆スクランブルすることができる。
【００６１】
なお、図１０では、行配線の数と列配線の数とをそれぞれ４本としているが、これには限定されない。
【００６２】
ここで、スクランブル回路３２のスイッチセルアレイの正常な状態が図５であり、第１のテスト回路３６の逆スクランブル回路（スイッチセルアレイ３６２）の正常な状態が図１０であるとする。仮に、スクランブル回路３２のスイッチセルＳ００に異常が発生し、導通状態に変化した場合、スクランブルされたアドレスＳＡ［０］は、アドレスＡ［０］とアドレスＡ［１］と接続することになる。アドレスＡ［０］とアドレスＡ［１］が同じ値をとる場合、スクランブルされたアドレスＳＡ［０］は所望の値であり、アドレスＡと元に戻されたアドレスＡ’は同一であり、素子の異常を検出することができない。
【００６３】
アドレスＡ［０］がハイレベル、アドレスＡ［１］がローレベルの場合、アドレスＡ［０］を駆動するバッファ回路３７の最終段のインバータのＰＭＯＳ（Ｐ−Ｃｈａｎｎｅｌ  Ｍｅｔａｌ−Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）と、アドレスＡ［１］を駆動するバッファ回路３７の最終段のインバータのＮＭＯＳ（Ｎ−Ｃｈａｎｎｅｌ  Ｍｅｔａｌ−Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）の駆動能力の大きい方の影響により、スクランブルアドレスＳＡ［０］とＳＡ［３］のレベルが決定する。
【００６４】
ＰＭＯＳの駆動能力が大きく、スクランブルアドレスＳＡ［０］がハイレベルに十分近い場合、比較回路３６１はローレベルのアドレスＡ［１］と、ハイレベルのＡ’［１］を比較し、値が異なることからＲＥＳＵＬＴ１として、フェイル信号を出力する。ＮＭＯＳの駆動能力が大きく、スクランブルアドレスＳＡ［３］がローレベルに十分近い場合、比較回路３６１はハイレベルのアドレスＡ［０］とローレベルのアドレスＡ’［０］を比較し、ＲＥＳＵＬＴ１としてフェイル信号を出力する。
【００６５】
アドレスＡ［０］がローレベル、アドレスＡ［１］がハイレベルの場合、アドレスＡ［０］を駆動するバッファ回路３７の最終段のインバータのＮＭＯＳと、アドレスＡ［１］を駆動するバッファ回路３７の最終段のインバータのＰＭＯＳの駆動能力の大きい方の影響により、スクランブルアドレスＳＡ［０］とＳＡ［３］のレベルが決定する。
【００６６】
ＰＭＯＳの駆動能力が大きく、スクランブルアドレスＳＡ［３］がハイレベルに十分近い場合、比較回路はローレベルのアドレスＡ［０］と、ハイレベルのＡ’［０］を比較し、値が異なることからＲＥＳＵＬＴ１として、フェイル信号を出力する。ＮＭＯＳの駆動能力が大きく、スクランブルアドレスＳＡ［０］がローレベルに十分近い場合、比較回路はハイレベルのアドレスＡ［１］とローレベルのアドレスＡ’［１］を比較し、ＲＥＳＵＬＴ１としてフェイル信号を出力する。
【００６７】
尚、バッファ回路３７の最終段のＰＭＯＳトランジスタとＮＭＯＳトランジスタの駆動能力を等しくないように設計することにより、前述したように信号が衝突した場合にも、レベルが中間の値になることを回避してもよい。
【００６８】
尚、プログラマブル論理構成３であって、さらに電源モニタ回路を備え、バッファ回路３７へ供給される電源の電圧をモニタし、電圧が所定の値より低下した場合にエラーを発生するように構成してもよい。これにより、前述したように信号が衝突した場合、バッファ回路３７に大きな電流が流れ、電源電圧が低下する。電源モニタ回路はこの電圧低下を検知できる。また、攻撃者による故障注入攻撃により、スクランブル回路３２または逆スクランブル回路上の信号線が強制的にハイレベル、または、ローレベルに駆動された場合、バッファ回路３７に大きな電流が流れ、電源電圧が低下する可能性がある。電源モニタ回路はこの電圧低下を検知できる。
【００６９】
尚、図９の第１のテスト回路３６は、Ａ’をロープリチャージした後、逆スクランブルされたスイッチセルの出力に接続し比較を行ってもよい。これにより、スイッチセルアレイ３６２の出力のうちハイインピーダンスの出力が存在した場合、そのハイインピーダンスの出力はローレベルにすることができる。
【００７０】
尚、図３と同様のスクランブル回路３２や図９の第１のテスト回路３６は、読み出し制御信号のうち、出力データＱ＿Ｓ、Ｑ＿ＩＳ、センスイネーブル信号ＳＥ＿Ｑ、ＳＥ＿ＩＱを取り除いてもよい。
【００７１】
尚、スクランブル回路３２は、さらに疑似乱数発生器とＸＯＲ回路とを備え、アドレスの各ビットと疑似乱数発生器から出力される疑似乱数の各ビットのＸＯＲ論理の結果をスイッチセルアレイへ出力する。さらに、第１のテスト回路３６は、さらにＸＯＲ回路を備え、元に戻されたアドレスの各ビットと疑似乱数発生器から出力される疑似乱数の各ビットのＸＯＲ論理の結果とを比較回路３６１へ出力してもよい。
【００７２】
以上のように、本実施形態のプログラマブル論理集積回路３は、スクランブル回路３２のメモリのデータを読み出すことなく、メモリ３３１のデータが正しく設定されているかをスクランブル回路３２の機能面から自己診断できる。また、スクランブル回路３２のメモリの読み出し機能を排除できるため、攻撃者による読み出し不能化の解除や、スクランブル回路３２のメモリの読み出し動作時の故障注入攻撃などを回避でき、スクランブル情報が読み出される可能性を低減できる。
【００７３】
以上のように、本実施形態によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
（第４の実施形態）
図１１は、本発明の第４の実施形態のプログラマブル論理集積回路の構成を示すブロック図である。本実施形態のプログラマブル論理集積回路４は、第１の制御回路４１と、スクランブル回路４２と、プログラマブルロジックセルアレイ４３と、構成用ポート４４と、汎用ポート４５と、第１のテスト回路４６と、第２のテスト回路４７と、バッファ回路４８とを有する。
【００７４】
スクランブル回路４２は、スクランブル情報を記憶するスイッチセルアレイ（第１のメモリ）を有する（図示省略）。プログラマブルロジックセルアレイ４３は、メモリ４３１（第２のメモリ）とプログラマブルロジックセル４３２とを有する。メモリ４３１は構成情報を記憶し、プログラマブルロジックセル４３２は、メモリ４３１の構成情報に基づいて論理回路を構成もしくは再構成する。第１のテスト回路４６は、比較回路（図示省略）と、逆スクランブル情報を記憶するスイッチセルアレイ（第３のメモリ）（図示省略）とを有する。
【００７５】
プログラマブル論理集積回路４は、第３の実施形態のプログラマブル論理集積回路３に加えて、メモリ４３１に書き込まれた構成情報のデータのエラー検出とエラー訂正を行う第２のテスト回路４７を有する。よって、第３の実施形態と説明が重複する部分は、説明を省略する。
【００７６】
図１２は、第２のテスト回路４７の構成を示すブロック図である。第２のテスト回路４７は、第２の制御回路４７１と、エラー検出訂正回路４７２と、選択回路４７３、４７４、４７５、４７６とを有する。第２の制御回路４７１は、アドレスＡ＿Ｔ２と、書き込みイネーブル信号ＷＥ＿Ｔ２と、センスイネーブル信号ＳＥ＿Ｔ２とを出力する。第２の制御回路４７１は、読み出しアドレス用のカウンタを備え、読み出し時、そのカウンタを利用してアドレスを生成することができる。また、第２の制御回路４７１は、書き込み回数をカウントするためのカウンタを備えている。
【００７７】
エラー検出回路４７２は、出力データＱからＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）などの手法を用いてエラー検出をする。エラーを検出しなかった場合には、テスト結果であるＲＥＳＵＬＴ２としてパスを出力し、エラーを検出した場合には、ＲＥＳＵＬＴ２としてフェイルを出力し、データを訂正し正しいデータとして入力データＤ＿Ｔ２を出力する。
【００７８】
自己診断テストイネーブル信号ＢＩＳＴＥは、選択回路４７３、４７４、４７５、４７６に入力する。選択回路４７３は、自己診断テストイネーブル信号ＢＩＳＴＥがローレベルの場合アドレスＡを、ＢＩＳＴＥがハイレベルの場合アドレスＡ＿Ｔ２を選択し、アドレスＡ＿Ｔとして出力する。選択回路４７４は、自己診断テストイネーブル信号ＢＩＳＴＥがローレベルの場合入力データＤを、ＢＩＳＴＥがハイレベルの場合入力データＤ＿Ｔ２を選択し、入力データＤ＿Ｔとして出力する。選択回路４７５は、自己診断テストイネーブル信号ＢＩＳＴＥがローレベルの場合書き込みイネーブル信号ＷＥを、ＢＩＳＴＥがハイレベルの場合書き込みイネーブル信号ＷＥ＿Ｔ２を選択し、書き込みイネーブル信号ＷＥ＿Ｔとして出力する。選択回路４７６は、自己診断テストイネーブル信号ＢＩＳＴＥがローレベルの場合センスイネーブル信号ＳＥを、ＢＩＳＴＥがハイレベルの場合センスイネーブル信号ＳＥ＿Ｔ２を選択し、センスイネーブル信号ＳＥ＿Ｔとして出力する。
【００７９】
図１３は、プログラマブル論理集積回路４の自己診断テストの手順を示すフローチャートである。自己診断テストは、スクランブルされたアドレスでメモリ４３１に構成条件が書き込まれた後に、第１の制御回路４１がスケジューリングすることができる。
【００８０】
自己診断テストが開始すると、まず第２の制御回路４７１の読み出しアドレス用のカウンタを初期化し、最初のアドレスを生成する（Ｓ０１）。スクランブル回路４２は、アドレスをスクランブルし、プログラマブルロジックセルアレイ４３のメモリ４３１と第１のテスト回路４６へ、スクランブルしたアドレスを出力する（Ｓ０２）。
【００８１】
第１の制御回路４１は、センスイネーブル信号をハイレベルにし、プログラマブルロジックセルアレイ４３のメモリ４３１のスクランブルされたアドレスからデータＱを読み出す。さらに、第１のテスト回路４６は、スクランブルされたアドレスを逆スクランブルして元のアドレスへ戻す（Ｓ０３）。さらに、第１のテスト回路４６は、アドレスと逆スクランブルして元に戻されたアドレスとを比較する（Ｓ０４）。両者が一致していれば（Ｓ０４のＹＥＳ）、ＲＥＳＵＬＴ１としてパスを出力し、両者が一致していなければ（Ｓ０４のＮＯ）、ＲＥＳＵＬＴ１としてフェイルを出力する。第１の制御回路４１は、ＲＥＳＵＬＴ１としてフェイルを受け取ると、異常終了１として自己診断テストを終了する。
【００８２】
ＲＥＳＵＬＴ１がパスのとき（Ｓ０４のＹＥＳ）、第２のテスト回路４７のエラー検出訂正回路４７２は、ＥＣＣ等の手法により、読み出したデータＱに誤りがあるか否かを検出する（Ｓ０５）。誤りがない場合（Ｓ０５のＮＯ）、エラー検出訂正回路４７２はＲＥＳＵＬＴ２としてパスを出力する。第２の制御回路４７１は、ＲＥＳＵＬＴ２がパスであることを受けて、第２の制御回路４７１の読み出しアドレス用のカウンタが最後のアドレスになるまで（Ｓ０６のＮＯ）、読み出しアドレス用カウンタをインクリメントして次のアドレスの読み出しを行い（Ｓ０７）、Ｓ０２を繰り返す。
【００８３】
読み出したデータＱに誤りがある場合（Ｓ０５のＹＥＳ）、エラー検出訂正回路４７２は、ＲＥＳＵＬＴ２としてフェイルを出力する。第２の制御回路４７１は、ＲＥＳＵＬＴ２がフェイルであることを受けて、書き込み試行回数をカウントするカウンタを初期化する（Ｓ０８）。エラー検出訂正回路４７４はエラー訂正したデータを出力し、第１の制御回路４１は書き込みイネーブル信号を出力し、プログラマブルロジックセルアレイ４３のメモリ４３１のスクランブルされたアドレスに、エラー訂正したデータの書き込みが行われる（Ｓ０９）。書き込み後、第１の制御回路４１にてセンスイネーブル信号ＳＥがハイレベルにされ、再度読み出しが行われる（Ｓ１０）。
【００８４】
エラー検出訂正回路４７２は、読み出したデータに誤りがあるか否かを検出する（Ｓ１１）。誤りがなければ（Ｓ１１のＮＯ）、最後のアドレスになるまで（Ｓ０６）、読み出しアドレス用カウンタをインクリメントして次のアドレスの読み出しを行う（Ｓ０７）。誤りがある場合（Ｓ１１のＹＥＳ）、あらかじめ設定された最大の書き込み試行回数になるまで（Ｓ１２）、書き込みアドレス用カウンタをインクリメントし（Ｓ１３）、訂正されたデータの書き込み（Ｓ０９）を繰り返す。最大の書き込み試行回数に到達してもデータを正しく書き込めない場合（Ｓ１２のＹＥＳ）、第１の制御回路４１は異常終了２として自己診断テストを終了する。
【００８５】
最後のアドレスまで読み出しが完了した場合（Ｓ０６のＹＥＳ）、第１の制御回路４１は、正常終了として自己診断テストを終了する。
【００８６】
尚、プログラマブル論理集積回路４の自己診断テストは、プログラマブル論理集積回路４が汎用ポート４５を利用してアプリケーション動作をしている間に、間欠的に自己診断テストの一部を実行してもよい。
【００８７】
尚、プログラマブル論理集積回路４の自己診断テストは、ＲＥＳＵＬＴ１がフェイルの場合、フェイルしたアドレスもしくは積算フェイル数をメモリへ記録し、読み出し用カウンタをインクリメントし、自己診断テストを継続してもよい。
【００８８】
尚、プログラマブル論理集積回路４の自己診断テストは、ＲＥＳＵＬＴ１がフェイルの場合、プログラマブル論理集積回路４を利用不可とする方法として、プログラマブルロジックセルアレイ４３のメモリ４３１のセルの消去、スクランブル回路４２のメモリ（スイッチセルアレイ）のセルの消去、第１のテスト回路４６のメモリ（スイッチセルアレイ）のセルの消去を行ってもよい。
【００８９】
尚、プログラマブル論理集積回路４を構成するスクランブル回路４２は、さらに疑似乱数発生器とＸＯＲ回路とを備え、アドレスの各ビットと疑似乱数発生器から出力される疑似乱数の各ビットのＸＯＲ論理の結果をスイッチセルアレイへ出力する。さらに、第２のテスト回路４７は、さらにＸＯＲ回路を備え、元に戻されたアドレスの各ビットと前記疑似乱数発生器から出力される疑似乱数の各ビットのＸＯＲ論理の結果を第１のテスト回路４６の比較回路へ出力し、疑似乱数を自己診断テストの開始の度に更新してもよい。
【００９０】
以上のように、本実施形態のプログラマブル論理集積回路４は、自己診断テストを行うことにより、読み出したデータをプログラマブル論理集積回路４の外部へ出力せずにテストを行うことができ、耐タンパ性が高い自己診断テストを提供できる。さらに、故障注入攻撃により、読み出しデータの特定のビットが反転させられた場合、第２のテスト回路４７はエラー訂正したデータの書き込みシーケンスを開始する。そのため、攻撃者はその書き込みシーケンスに入ったことを検知することにより、故障を注入できたかを判断し、読み出しデータを推測することが可能である。しかしながら、スクランブル情報がわからない場合、そのままではクローンの作成などに利用することはできない。
【００９１】
以上のように、本実施形態によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
（第５の実施形態）
図１４は、第５の実施形態の、第１から第４の実施形態のプログラマブル論理集積回路を構成するサプライチェーンを示すブロック図である。
【００９２】
本実施形態のプログラマブル論理集積回路の構成方法は、第１の製造者の有するスクランブル情報を受けて、前記スクランブル情報をスクランブル回路の有する第１のメモリに保存する。さらに、第２の製造者の有する構成情報を受けて、前記構成情報の有するアドレスを前記スクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送る。さらに、前記第１のメモリに保存された前記スクランブル情報に基づいて、前記アドレスをスクランブルし、スクランブルされた前記アドレスを前記プログラマブルロジックセルアレイに送る。さらに、スクランブルされた前記アドレスに基づいて、前記構成情報を、前記プログラマブルロジックセルアレイの有する第２のメモリに保存し、前記第２のメモリに保存された前記構成情報に基づいて、前記プログラマブルロジックセルアレイの論理回路を構成する。
【００９３】
また、スクランブルされた前記アドレスを逆スクランブルし、スクランブルされる前の前記アドレスと、逆スクランブルされた前記アドレスとを比較し、前記比較した結果が同じであればパス信号を出力する。
【００９４】
また、前記パス信号を出力した場合、前記第２のメモリに記憶された前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報をスクランブルされた前記アドレスに基づいて前記第２のメモリに保存する。
【００９５】
また、前記第１のメモリは、抵抗変化性不揮発メモリを有する。
【００９６】
また、前記第１の製造者と前記第２の製造者とは異なる。
【００９７】
図１４のサプライチェーンには、設計者と、第１の製造者と、第２の製造者とが存在する。設計者は、第１から第４の実施形態のプログラマブル論理集積回路を設計する。設計者は、論理設計支援環境においてスクランブル情報に基づいた入力形式に沿って、構成情報の入力データを作成する。第１の製造者は、スクランブル情報を設計者と共有する。ここで図４のプログラマブル論理集積回路４を参照すると、第１の製造者は、外部からスクランブル情報を、たとえば、制御回路４１に入力する。制御回路４１は、スクランブル情報をスクランブル回路４２のメモリ（スイッチセルアレイ）に書き込む。第１の製造者は、プログラマブル論理集積回路４のウェハの選別試験や、デバイスの組み立て工程後の試験を行う。スクランブル情報が書き込まれたプログラマブル論理集積回路４は、第１の製造者から第２の製造者へ送られる。
【００９８】
第２の製造者は、設計者から受け取った入力データ（構成情報）を、第１の製造者から受け取ったスクランブル情報が書き込まれたプログラマブル論理集積回路４に書き込む。すなわち、第２の製造者は、構成情報を外部から制御回路４１に入力する。制御回路４１は、構成情報の有するアドレスの情報をスクランブル回路４２に入力し、構成情報をプログラマブルロジックセルアレイ４３に入力する。スクランブル回路４２は、スクランブル情報に基づいてアドレスをスクランブルし、プログラマブルロジックセルアレイ４３に入力する。プログラマブルロジックセルアレイ４３は、スクランブルされたアドレスに基づいて、構成情報をメモリ４３１に書き込む。プログラマブルロジックセル４３２は、メモリ４３１に書き込まれた構成情報に基づいて、論理回路を形成する。
【００９９】
第２の製造者は、構成情報の入力後、第１のテスト回路４６や第２のテスト回路４７によるテストや誤り訂正を行う。ここで、第２の製造者は、スクランブル回路４２やメモリ４３１に正常に書き込むことができたかを、スクランブル情報がわからなくともテストすることができる。さらに、第２の製造者は、プログラマブル論理集積回路４が正常に演算処理動作するかなどの機能テストなどを実施し、テストにパスしたプログラマブル論理集積回路４を製品として出荷する。
【０１００】
以上のサプライチェーンにおいて、スクランブル情報と構成情報とを別々の製造者が有することにより、サプライチェーン上の第１の製造者に悪意のあるものが存在しても、スクランブル情報のみでは設計者の構成情報は分からない。さらに、第２の製造者に悪意のあるものが存在し、構成情報の入力データを入手しても、スクランブル情報がわからない場合、構成情報の復元やクローンの作成を行うことはできない。
【０１０１】
以上のように、本実施形態によれば、構成情報が正常に書き込まれているかを容易にテストでき、かつ、構成情報の耐タンパ性の高いプログラマブル論理集積回路を提供することができる。
【０１０２】
本発明は上記実施形態に限定されることなく、特許請求の範囲に記載した発明の範囲内で種々の変形が可能であり、それらも本発明の範囲内に含まれるものである。
【０１０３】
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【０１０４】
付記
（付記１）
構成情報を受けて、前記構成情報の有するアドレスをスクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送る、第１の制御回路と、
前記アドレスをスクランブルするスクランブル情報を保存する第１のメモリを有し、前記スクランブル情報に基づいて前記アドレスをスクランブルし、スクランブルした前記アドレスを前記プログラマブルロジックセルアレイに送る、前記スクランブル回路と、
スクランブルされた前記アドレスに基づいて前記構成情報を書き込み読み出す第２のメモリと、前記第２のメモリに書き込まれた前記構成情報に基づいて論理回路を構成するプログラマブルロジックセルとを有する、前記プログラマブルロジックセルアレイと、を有するプログラマブル論理集積回路。
（付記２）
スクランブルされた前記アドレスを逆スクランブルする逆スクランブル回路と比較回路とを有する第１のテスト回路を有し、
前記逆スクランブル回路は、前記逆スクランブルする逆スクランブル情報を記憶する第３のメモリを有し、前記逆スクランブル情報に基づいて、スクランブルされた前記アドレスを逆スクランブルし、
前記比較回路は、スクランブルされる前の前記アドレスと、逆スクランブルされた前記アドレスとを比較し、前記比較した結果が同じであればパス信号を出力する、付記１記載のプログラマブル論理集積回路。
（付記３）
誤り検出訂正回路を有する第２のテスト回路を有し、
前記誤り検出訂正回路は、前記比較回路が前記パス信号を出力した場合、前記第２のメモリに書き込まれた前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報を前記プログラマブルロジックセルアレイに送る、付記２記載のプログラマブル論理集積回路。
（付記４）
前記第２のテスト回路は第２の制御回路を有し、
前記第２の制御回路は、前記スクランブル回路にテストアドレスを送り、
前記誤り検出訂正回路は、前記比較回路が、前記テストアドレスと、前記スクランブル回路でスクランブルされさらに前記逆スクランブル回路で逆スクランブルされた前記テストアドレスと、を比較して前記パス信号を出力した場合、前記第２のメモリに書き込まれた前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報を前記プログラマブルロジックセルアレイに送る、付記３記載のプログラマブル論理集積回路。
（付記５）
前記第１のメモリもしくは前記第３のメモリは、抵抗変化性不揮発メモリを有する、付記１から４の内の１項記載のプログラマブル論理集積回路。
（付記６）
前記第１の制御回路と前記スクランブル回路との間にバッファ回路を有し、
前記バッファ回路は、前記アドレスと論理的に等しい値を前記スクランブル回路へ出力するように駆動され、前記第１のテスト回路に前記アドレスを入力する、付記２から５の内の１項記載のプログラマブル論理集積回路。
（付記７）
前記バッファ回路の最終段のＰＭＯＳトランジスタとＮＭＯＳトランジスタの駆動能力が等しくない、付記６記載のプログラマブル論理集積回路。
（付記８）
前記バッファ回路へ供給される電源の電圧をモニタし、前記電圧が所定の値より低下した場合にエラーを発生する電源モニタ回路を有する、付記６記載のプログラマブル論理集積回路。
（付記９）
第１の製造者の有するスクランブル情報を受けて、前記スクランブル情報をスクランブル回路の有する第１のメモリに保存し、
第２の製造者の有する構成情報を受けて、前記構成情報の有するアドレスを前記スクランブル回路に送り、前記構成情報をプログラマブルロジックセルアレイに送り、
前記第１のメモリに保存された前記スクランブル情報に基づいて、前記アドレスをスクランブルし、スクランブルされた前記アドレスを前記プログラマブルロジックセルアレイに送り、
スクランブルされた前記アドレスに基づいて、前記構成情報を、前記プログラマブルロジックセルアレイの有する第２のメモリに保存し、
前記第２のメモリに保存された前記構成情報に基づいて、前記プログラマブルロジックセルアレイの論理回路を構成する、プログラマブル論理集積回路の構成方法。
（付記１０）
スクランブルされた前記アドレスを逆スクランブルし、
スクランブルされる前の前記アドレスと、逆スクランブルされた前記アドレスとを比較し、前記比較した結果が同じであればパス信号を出力する、付記９記載のプログラマブル論理集積回路の構成方法。
（付記１１）
前記パス信号を出力した場合、前記第２のメモリに記憶された前記構成情報の誤りを検出し、前記誤りを訂正した前記構成情報をスクランブルされた前記アドレスに基づいて前記第２のメモリに保存する、付記１０記載のプログラマブル論理集積回路の構成方法。
（付記１２）
前記第１のメモリは、抵抗変化性不揮発メモリを有する、付記９から１１の内の１項記載のプログラマブル論理集積回路の構成方法。
（付記１３）
前記第１の製造者と前記第２の製造者とは異なる、付記９から１２の内の１項記載のプログラマブル論理集積回路の構成方法。
【符号の説明】
【０１０５】
１、２、３、４    プログラマブル論理集積回路
１１、２１、３１、４１    第１の制御回路
１２、２２、３２、４２    スクランブル回路
１３、２３、３３、４３    プログラマブルロジックセルアレイ
２４、３４、４４    構成用ポート
２５、３５、４５    汎用ポート
３６、４６    第１のテスト回路
３７、４８    バッファ回路
４７    第２のテスト回路
１２１    第１のメモリ
１３１    第２のメモリ
２２１    スイッチセルアレイ
２３１、３３１、４３１    メモリ
１３２、２３２、３３２、４３２    プログラマブルロジックセル
３６１    比較回路
３６２    スイッチセルアレイ
４７１    第２の制御回路
４７２    エラー検出訂正回路
４７３、４７４、４７５、４７６    選択回路
【図１】
2017005439.tif 000003
【図２】
2017005439.tif 000004
【図３】
2017005439.tif 000005
【図４】
2017005439.tif 000006
【図５】
2017005439.tif 000007
【図６】
2017005439.tif 000008
【図７】
2017005439.tif 000009
【図８】
2017005439.tif 000010
【図９】
2017005439.tif 000011
【図１０】
2017005439.tif 000012
【図１１】
2017005439.tif 000013
【図１２】
2017005439.tif 000014
【図１３】
2017005439.tif 000015
【図１４】
2017005439.tif 000016
【図１５】
2017005439.tif 000017
【図１６】
2017005439.tif 000018
【図１７】
2017005439.tif 000019