(57)【特許請求の範囲】
【請求項１】
複数のロジックブロックと、
第１の方向へ延在する複数の第１の配線と第２の方向へ延在する複数の第２の配線とを接続または切断する、前記第１の配線と前記第２の配線との交点に配置された複数の抵抗変化素子を備え、前記複数のロジックブロックどうしを変更可能に接続する複数のルーティングスイッチブロックと、
前記複数の第２の配線と、前記ルーティングスイッチブロックの外部へ延在する複数の第３の配線とを接続するシフタブロックと、
を有し、
前記複数の抵抗変化素子は、第１の抵抗変化素子と、前記第１の抵抗変化素子で不良が発生したときに使用される冗長素子である第２の抵抗変化素子とを含み、
前記第１の抵抗変化素子と前記第２の抵抗変化素子とが、前記第１の配線と前記第２の配線との交点に交互に配置され、
前記シフタブロックは、１つの前記第３の配線に対して、隣接する２つの第２の配線のいずれか一方を接続するプログラマブル論理集積回路。
【請求項２】
前記シフタブロックは、前記複数の第２の配線と前記複数の第３の配線とを接続または遮断する複数のスイッチ備え、
前記スイッチをオンまたはオフに設定するための接続情報を格納するメモリ素子をさらに有する請求項１に記載のプログラマブル論理集積回路。
【請求項３】
前記第１の抵抗変化素子及び前記第２の抵抗変化素子をオンまたはオフに設定するための書込み手段と、
前記第１の抵抗変化素子及び第２の抵抗変化素子に設定されたオンまたはオフの状態を読み出すための読み出し手段と、
をさらに有する請求項２に記載のプログラマブル論理集積回路。
【請求項４】
前記書込み手段を用いて前記第１の抵抗変化素子をオンまたはオフに設定する書込み動作及び前記読み出し手段を用いて前記第１の抵抗変化素子に設定されたオンまたはオフの状態を読み出す読み出し動作を実行し、
前記書込み動作によって前記第１の抵抗変化素子に設定された第１状態値と、前記読出し動作によって読み出された前記第１の抵抗変化素子の第２状態値とを比較し、前記第１状態値と前記第２状態値とが一致しない書込み不良の有無を判定し、
前記書込み不良の有無に応じて前記接続情報を決定する制御手段をさらに有する請求項３に記載のプログラマブル論理集積回路。
【請求項５】
前記制御手段は、
前記書込み不良が発生した第１の抵抗変化素子と接続される第２の配線を前記第３の配線から切断し、該第２の配線と隣接する配線を前記第３の配線と接続するための前記接続情報を決定する請求項４に記載のプログラマブル論理集積回路。
【請求項６】
前記制御手段は、
前記書込み不良を検出した前記第１の抵抗変化素子がオンからオフへ設定できないオン固定であるか、オフからオンへ設定できないオフ固定であるかを判定し、前記接続情報を前記オン固定または前記オフ固定に応じて変更する請求項４または５に記載のプログラマブル論理集積回路。
【請求項７】
前記書込み動作の回数を計数するカウンタを備え、
前記制御手段は、
前記書込み動作の回数が予め設定された所定回数を超えた場合、前記第２の抵抗変化素子を通常使用する抵抗変化素子とする請求項１から６のいずれか１項に記載のプログラマブル論理集積回路。
【請求項８】
前記第１の方向を列方向とし、前記第２の方向を行方向としたとき、
前記第１の抵抗変化素子は、偶数行偶数列または奇数行奇数列に配置され、
前記第２の抵抗変化素子は、偶数行奇数列または奇数行偶数列に配置された請求項１から７のいずれか１項に記載のプログラマブル論理集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は抵抗変化素子を備えたプログラマブル論理集積回路に関する。
【背景技術】
【０００２】
一般に、半導体集積回路は、半導体基板に形成された多数のトランジスタと、半導体基板の上層に形成された、各トランジスタを接続するための配線層とを備える。通常、各トランジスタを接続するための配線パターンは半導体集積回路の設計段階で決められており、半導体集積回路の製造後にトランジスタどうしの接続を変更することはできない。
【０００３】
一方、ＦＰＧＡ（Field Programmable Gate Array）等のプログラマブル論理集積回路は、製造後であっても内部に備える複数の論理演算回路（ロジックブロック）の接続が変更可能な構成である。そのため、ユーザは、複数のロジックブロックを任意に組み合わせることで、プログラマブル論理集積回路内に所望の論理回路を形成できる。所望の論理回路を形成するために必要な情報（構成情報）はプログラマブル論理集積回路が備えるメモリ素子で保存される。構成情報を記憶するメモリ素子には、ＳＲＡＭ（Static Random Access Memory）セル、アンチフューズ、フローティングゲートＭＯＳトランジスタ等が用いられる。
【０００４】
これらのメモリ素子やロジックブロックどうしを変更可能に接続するスイッチは、通常、多数のトランジスタから成るロジックブロックと同層に形成されるため、大きな面積オーバヘッド要因となる。そのため、プログラマブル論理集積回路のチップ面積が大きくなり、製造コストが上昇する。また、メモリ素子やスイッチのレイアウト面積が大きくなることで、チップ面積に占めるロジックブロックの割合が低下する。
【０００５】
そこで、レイアウト面積の増大を抑制しつつ製造後のロジックブロックどうしの接続を変更可能にするスイッチとして、配線層に形成可能な抵抗変化素子を用いたプログラマブル論理集積回路が提案されている。例えば、特許文献１及び２に記載されたプログラマブル論理集積回路は、第１の配線層と、その上部に形成される第２の配線層との間に、金属イオンを含有する固体電解質材料から成る抵抗変化素子が配置された構成である。抵抗変化素子は、その両端に順方向あるいは逆方向にバイアス電圧を印加することで抵抗値を変化させることが可能であり、低抵抗状態（オン状態）と高抵抗状態（オフ状態）との比が１０の５乗あるいはそれ以上となる。すなわち、当該抵抗変化素子は、第１の配線と第２の配線とを電気的に接続または切断するスイッチとして機能する。
【０００６】
背景技術のプログラマブル論理集積回路における配線の接続及び切断には、メモリ素子であるＳＲＡＭセルと、スイッチ機能を備えた１つのトランジスタとを有するスイッチセルとが利用されている。一方、抵抗変化素子は、メモリ機能とスイッチ機能の両方を備えているため、一つの抵抗変化素子でスイッチセルを実現できる。
【０００７】
特許文献１によれば、第１の配線群と、該第１の配線群と交差する第２の配線群との各交点に抵抗変化素子を配置することで、第１の配線群の任意の配線と第２の配線群の任意の配線とを接続または切断できるクロスバスイッチをコンパクトなサイズで実現できる。その結果、チップ面積の大幅な縮小やロジックブロックの使用効率の改善によるプログラマブル論理集積回路の性能向上が期待できる。また、抵抗変化素子のオンまたはオフの状態は、プログラマブル論理集積回路に対する電源供給が停止しても保持されるため、電源を投入する度に構成情報をロードする手間を省くことができる利点もある。
【０００８】
ところで、プログラマブル論理集積回路を含む半導体集積回路では、製造時に発生するトランジスタや配線の不良に備えて冗長回路を設けることが生産収率を向上させるために非常に有効であることが知られている。例えば、特許文献３や特許文献４には、冗長回路を備えておき、不良が発生した回路（不良回路）を該冗長回路に置き換える技術が開示されている。
【０００９】
出荷前の選別テストで不良回路が検出された場合、冗長回路により該不良回路を迂回するルートを形成して出荷するのが一般的である。これにより、出荷したプログラマブル論理集積回路に不良回路が含まれていても、該プログラマブル論理集積回路のユーザは不良回路を意識することなく所望の論理回路を構成できる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第４３５６５４２号明細書
【特許文献２】国際公開第２０１２／０４３５０２号パンフレット
【特許文献３】米国特許第４８９９０６７号明細書
【特許文献４】特開２０１４−９３７８２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述した抵抗変化素子を備えるプログラマブル論理集積回路では、出荷後に該抵抗変化素子のオンまたはオフの状態を変更することで、新たな不良（故障）が発生する可能性がある。抵抗変化素子のオンまたはオフの状態は、プログラマブル論理集積回路へ構成情報を書込むことで変更される。
【００１２】
抵抗変化素子で発生する故障は、オン状態からオフ状態へ設定できないオフ故障（オン固定）と、オフ状態からオン状態へ設定できないオン故障（オフ固定）とが代表的である。これらの故障は、プログラマブル論理集積回路の製造メーカが保証する構成情報の書き換え回数（保証更新回数）よりもオンまたはオフの状態を変更できる回数が少ない抵抗変化素子が存在し、出荷後に顕在化するケースが考えられる。あるいは、耐電圧が通常よりも低い抵抗変化素子が存在し、構成情報の書込み時に該抵抗変化素子が破壊されて顕在化するケースが考えられる。不良となった抵抗変化素子は、構成情報の再書込みを行っても、そのオンまたはオフの状態を変更できないため、ユーザは所望の論理回路を実現できなくなる。その場合、不良となった抵抗変化素子を含むプログラマブル論理集積回路は、代替品と交換する必要があるため、プログラマブル論理集積回路のコストが増大する要因となる。
【００１３】
したがって、出荷後に抵抗変化素子で不良が発生しても、ユーザが設計した論理回路を問題なく形成できる、該不良が発生した抵抗変化素子を含むプログラマブル論理集積回路を救済するための技術が望まれる。
【００１４】
本発明は上述したような背景技術が有する課題を解決するためになされたものであり、出荷後に抵抗変化素子で不良が発生しても救済が可能なプログラマブル論理集積回路を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成するため本発明のプログラマブル論理集積回路は、複数のロジックブロックと、
第１の方向へ延在する複数の第１の配線と第２の方向へ延在する複数の第２の配線とを接続または切断する、前記第１の配線と前記第２の配線との交点に配置された複数の抵抗変化素子を備え、前記複数のロジックブロックどうしを変更可能に接続する複数のルーティングスイッチブロックと、
前記複数の第２の配線と、前記ルーティングスイッチブロックの外部へ延在する複数の第３の配線とを接続するシフタブロックと、
を有し、
前記複数の抵抗変化素子は、第１の抵抗変化素子と、前記第１の抵抗変化素子で不良が発生したときに使用される冗長素子である第２の抵抗変化素子とを含み、
前記第１の抵抗変化素子と前記第２の抵抗変化素子とが、前記第１の配線と前記第２の配線との交点に交互に配置され、
前記シフタブロックは、１つの前記第３の配線に対して、隣接する２つの第２の配線のいずれか一方を接続する構成である。
【発明の効果】
【００１６】
本発明によれば、出荷後に抵抗変化素子で不良が発生しても救済が可能なプログラマブル論理集積回路が得られる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施の形態のプログラマブル論理集積回路が備えるクロスバスイッチの一構成例を示す模式図である。
【図２】図１に示したクロスバスイッチが備える抵抗変化素子の状態を変更するための書込み手段の一構成例を示す模式図である。
【図３】図１に示したクロスバスイッチが備える抵抗変化素子の状態を読み出すための読み出し手段の一構成例を示す模式図である。
【図４】本発明のプログラマブル論理集積回路の一構成例を示すブロック図である。
【図５】図４に示したコントローラの一構成例を示すブロック図である。
【図６】第１の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。
【図７】第２の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。
【図８】第２の実施の形態のプログラマブル論理集積回路で用いる、不良素子のアドレスとシフタブロックが備える各スイッチの状態との一関係例を示す真理値表である。
【図９】シフタブロックが備える各スイッチにＮＭＯＳトランジスタを用いる場合の一構成例を示す模式図である。
【図１０】不良素子のアドレスと、図９に示したシフタブロックが備える各抵抗変化素子の状態との一関係例を示す真理値表である。
【図１１】シフタブロックが備える各スイッチに抵抗変化素子を用いる場合の一構成例を示す模式図である。
【図１２】第３の実施の形態のプログラマブル論理集積回路が備えるクロスバスイッチの一構成例を示す模式図である。
【図１３】第３の実施の形態のプログラマブル論理集積回路が備えるクロスバスイッチの一構成例を示す模式図である。
【図１４】第３の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。
【図１５】第３の実施の形態のプログラマブル論理集積回路で用いる、不良素子のアドレスとシフタブロックが備える各スイッチの状態との一関係例を示す真理値表である。
【図１６】第３の実施の形態のプログラマブル論理集積回路で用いる、不良素子のアドレスとシフタブロックが備える各スイッチの状態との一関係例を示す真理値表である。
【図１７】抵抗変化素子を用いたスイッチの構成例を示す回路図である。
【発明を実施するための形態】
【００１８】
次に本発明について図面を用いて説明する。
（第１の実施の形態）
図１は、第１の実施の形態のプログラマブル論理集積回路が備えるクロスバスイッチの一構成例を示す模式図である。
【００１９】
図１に示すように、第１の実施の形態のクロスバスイッチは、第１の方向へ延在する複数の第１の配線ｉｎ０〜ｉｎ３と、第２の方向へ延在する複数の第２の配線ａ〜ｄ、ｒとを備え、第１の配線ｉｎ０〜ｉｎ３と第２の配線ａ〜ｄ、ｒとが互いの交点に配置された抵抗変化素子によって接続または切断される構成である。第２の配線ａ〜ｄ、ｒのうち、配線ｒは冗長配線である。クロスバスイッチはルーティングスイッチブロックとも呼ばれる。図１では、各抵抗変化素子が四角形のシンボルで示されている。
【００２０】
第１の配線ｉｎ０〜ｉｎ３と第２の配線ａ〜ｄ、ｒとは、それらの交点に配置された抵抗変化素子がオフ状態のときは電気的に切断され、オン状態のときは電気的に接続される。さらに、第２の配線ａ〜ｄ、ｒには、当該クロスバスイッチの外部へ延在する第３の配線ｏｕｔ０〜ｏｕｔ３と、スイッチＳ０〜Ｓ７を備えたシフタブロック１１を介して接続される。
【００２１】
図１は、第１の配線及び第３の配線として、それぞれ４本の配線を備え、第２配線として、冗長配線ｒを含めて５本の配線を備える構成例を示しているが、第１の配線、第２の配線及び第３の配線は図１に示した本数に限定されるものではない。実際のクロスバスイッチ１１は、第１の方向を列方向とし、第２の方向を行方向としたとき、数十行数十列程度の回路規模となる。
【００２２】
本実施形態では、四角形のシンボル内が斜線で示される抵抗変化素子をグループＡと定義し、黒塗りで示される抵抗変化素子をグループＢと定義する。グループＡ及びＢの抵抗変化素子は、後述する図２、図３、図９、図１１、図１２及び図１３でも同様のシンボルで示される。
【００２３】
グループＡは通常使用する抵抗変化素子であり、グループＢはグループＡの抵抗変化素子で不良が発生したときに使用する冗長素子である。本実施形態のプログラマブル論理集積回路は、工場出荷時、グループＡ及びグループＢの各抵抗変化素子が全てオフに設定されているものとする。
【００２４】
グループＡの抵抗変化素子（第１の抵抗変化素子）とグループＢの抵抗変化素子（第２の抵抗変化素子）とは、第１の配線ｉｎ０〜ｉｎ３と第２の配線ａ〜ｄ、ｒとの交点に交互に配置される。例えば、第１の方向を列方向とし、第２の方向を行方向としたとき、グループＡの抵抗変化素子は偶数行偶数列または奇数行奇数列に配置され、グループＢの抵抗変化素子は偶数行奇数列または奇数行偶数列に配置される。
【００２５】
また、本実施形態のクロスバスイッチでは、第１方向で隣接するグループＡの抵抗変化素子とグループＢの抵抗変化素子とに同じアドレス（Ｘ，Ｙ）が付与される。そのため、１つの第３の配線には隣接する２つの第２の配線のいずれか一方が接続される。例えば、第３の配線ｏｕｔ０には隣接する第２の配線ａまたはｂが接続され、第３の配線ｏｕｔ１には隣接する第２の配線ｂまたはｃが接続され、第３の配線ｏｕｔ２には隣接する第２の配線ｃまたはｄが接続され、第３の配線ｏｕｔ３には隣接する第２の配線ｄまたはｒ（冗長配線）が接続される。但し、同じアドレスの抵抗変化素子が同時に使用されることはなく、グループＡまたはグループＢのいずれか一方の抵抗変化素子が使用される。
【００２６】
本実施形態のプログラマブル論理集積回路は、工場出荷時、シフタブロックが備えるスイッチＳ０〜Ｓ７が、グループＡの抵抗変化素子を選択するように設定されている。すなわち、スイッチＳ０、Ｓ２、Ｓ４及びＳ６がオンに設定され、スイッチＳ１、Ｓ３、Ｓ５及びＳ７がオフに設定されている。その場合、シフタブロックは、第３の配線ｏｕｔ０と第２の配線ａとを接続し、第３の配線ｏｕｔ１と第２の配線ｂとを接続し、第３の配線ｏｕｔ２と第２の配線ｃとを接続し、第３の配線ｏｕｔ３と第２の配線ｄとを接続する。
【００２７】
次に、図１に示したクロスバスイッチが備える各抵抗変化素子をオンまたはオフの状態に設定（または変更）するための書込み方法について図２を用いて説明する。
【００２８】
図２は、図１に示したクロスバスイッチが備える抵抗変化素子の状態を設定するための書込み手段の一構成例を示す模式図である。図２は、図１に示したクロスバスイッチが備える各抵抗変化素子をオンまたはオフに設定するために必要な回路（書込み手段）の構成例のみを示している。
【００２９】
図２に示すように、クロスバスイッチが備える各抵抗変化素子に対する状態の設定時、Ｙデコーダ（第１のデコーダ）３により複数の第１の配線ｉｎ０〜ｉｎ３からいずれか１つが選択され、選択された配線がＹ書込みドライバ４２に接続される。また、Ｘデコーダ（第２のデコーダ）２により複数の第３の配線ｏｕｔ０〜ｏｕｔ３からいずれか１つが選択され、選択された配線がＸ書込みドライバ４１に接続される。
【００３０】
Ｘ書込みドライバ４１は、Ｘデコーダ２で選択された第３の配線、並びにシフタブロック１１を介して該第３の配線と接続される第２の配線に所定の電圧を印加する。Ｙ書込みドライバ４２は、Ｙデコーダ３で選択された第１の配線に所定の電圧を印加する。このとき、Ｘデコーダ２で選択された第３の配線に接続される第２の配線と、Ｙデコーダ３で選択された第１の配線との交点に配置された抵抗変化素子の両端に所定の書込み電圧が印加される。Ｘデコーダ２、Ｙデコーダ３、Ｘ書込みドライバ４１及びＹ書込みドライバの動作は、後述するコントローラ５によって制御される。
【００３１】
抵抗変化素子をオフからオンへ設定するセット動作では、該抵抗変化素子に順方向の書込み電圧が印加される。一方、抵抗変化素子をオンからオフへ設定するリセット動作では、該抵抗変化素子に逆方向の書込み電圧が印加される。
【００３２】
ここで、シフタブロックが備えるスイッチＳ０、Ｓ２、Ｓ４及びＳ６がオンであり、スイッチＳ１、Ｓ３、Ｓ５及びＳ７がオフである場合を考える。
【００３３】
例えば、抵抗変化素子（０，０）の状態を設定する場合、Ｙデコーダ３は、ＷＹ０＝“Ｈ”,ＷＹ１＝ＷＹ２＝ＷＹ３＝“Ｌ”を出力する。また、Ｘデコーダ２は、ＷＸ０＝“Ｈ”,ＷＸ１＝“Ｌ”を出力する。このとき、ＷＸＡ０＝“Ｈ”，ＷＸＢ０＝ＷＸＡ１＝ＷＸＢ１＝“Ｌ”となる。
【００３４】
ここでは、シフタブロック１１のスイッチＳ０がオンであり、スイッチＳ１がオフであるため、グループＡの抵抗変化素子（０，０）が選択されてＹ書込みドライバ４２とＸ書込みドライバ４１とにより当該抵抗変化素子の両端に書込み電圧が印加される。
【００３５】
同様に、抵抗変化素子（０，１）の状態を設定する場合、Ｙデコーダ３は、ＷＹ１＝“Ｈ”,ＷＹ０＝ＷＹ２＝ＷＹ３＝“Ｌ”を出力し、Ｘデコーダ２は、ＷＸ０＝“Ｈ”,ＷＸ１＝“Ｌ”を出力する。このとき、ＷＸＢ０＝“Ｈ”，ＷＸＡ０＝ＷＸＡ１＝ＷＸＢ１＝“Ｌ”となる。
【００３６】
ここでは、シフタブロック１１のスイッチＳ２がオンであり、スイッチＳ３がオフであるため、グループＡの抵抗変化素子（０，１）が選択される。すなわち、クロスバスイッチが備えるスイッチＳ０、Ｓ２、Ｓ４、Ｓ６がオンのときはグループＡの抵抗変化素子が選択されて書込み電圧が印加される。
【００３７】
一方、シフタブロック１１のスイッチＳ０をオフし、スイッチＳ１をオンにすると、Ｘアドレス＝０のグループＢの抵抗変化素子が選択される。例えば、グループＢの抵抗変化素子（０，０）の状態を設定する場合、Ｙデコーダは、ＷＹ０＝“Ｈ”,ＷＹ１＝ＷＹ２＝ＷＹ３＝“Ｌ”を出力し、Ｘデコーダは、ＷＸ０＝“Ｈ”,ＷＸ１＝“Ｌ”を出力する。このとき、ＷＸＡ０＝“Ｈ”，ＷＸＢ０＝ＷＸＡ１＝ＷＸＢ１＝“Ｌ”となり、グループＢの抵抗変化素子（０，０）が選択される。
【００３８】
グループＢの抵抗変化素子（０，１）の状態を設定する場合は、スイッチＳ２をオフし、スイッチＳ３をオンする。この場合、Ｙデコーダ３は、ＷＹ１＝“Ｈ”,ＷＹ０＝ＷＹ２＝ＷＹ３＝“Ｌ”を出力し、Ｘデコーダ２は、ＷＸ０＝“Ｈ”,ＷＸ１＝“Ｌ”を出力する。
【００３９】
このように、グループＡまたはグループＢの切り替えは、Ｙデコーダ３、Ｘデコーダ２、Ｙ書込みドライバ４２及びＸ書込みドライバ４１の動作を全く変えずに、シフタブロック１が備えるスイッチＳ０〜Ｓ７で制御できる。
【００４０】
次に、図１に示したクロスバスイッチが備える各抵抗変化素子のオンまたはオフの状態を読み出すための読み出し方法について図３を用いて説明する。
【００４１】
図３は、図１に示したクロスバスイッチが備える抵抗変化素子の状態を読み出すための読み出し手段の一構成例を示す模式図である。図３は、図１に示したクロスバスイッチが備える各抵抗変化素子のオンまたはオフの状態を読み出すために必要な回路（読み出し手段）の構成例のみが示されている。
【００４２】
抵抗変化素子のオンまたはオフの状態は、読出し対象となる抵抗変化素子の両端に、センスアンプ４３によって予め設定された読み出し電圧を印加し、そのときに該抵抗変化素子に流れる電流の大きさ、または電流の有無を該センスアンプ４３で検出することで判定する。
【００４３】
具体的な読み出し方法について、グループＡの抵抗変化素子（０，０）の状態を読み出す場合を例にして説明する。
【００４４】
抵抗変化素子（０，０）の状態を読み出すとき、センスアンプ４３は、配線ＳＡＩＮに所定の読み出し電圧Ｖｃを供給する。読み出し電圧Ｖｃは、書込み電圧よりも十分に低く、かつ抵抗変化素子がオン状態であるときに該抵抗変化素子に流れる電流が検出できる電圧であればよく、例えば１Ｖ程度に設定すればよい。
【００４５】
抵抗変化素子（０，０）の状態を読み出す場合、Ｙデコーダ３は、ＲＤＹ０＝“Ｈ”、ＲＤＹ１＝ＲＤＹ２＝ＲＤＹ３＝“Ｌ”を出力する。Ｘデコーダ２は、ＲＤＸ０＝“Ｈ”、ＲＤＸ１＝“Ｌ”を出力し、ＲＤＸＡ０＝“Ｈ”、ＲＤＸＢ０＝ＲＤＸＡ１＝ＲＤＸＢ１＝“Ｌ”となる。このとき、第１の配線ｉｎ０が配線ＳＡＩＮと接続され、第１の配線ｉｎ１〜ｉｎ３は高インピーダンス状態となる。また、第３の配線ｏｕｔ０が接地され、第３の配線ｏｕｔ１〜ｏｕｔ３は高インピーダンス状態となる。
【００４６】
ここでは、シフタブロック１１のスイッチＳ０がオンであり、スイッチＳ１がオフであるため、グループＡの抵抗変化素子（０，０）が選択されて、該抵抗変化素子（０、０）の両端に読み出し電圧Ｖｃが印加される。センスアンプ４３は、配線ＳＡＩＮに流れる電流を検出し、該電流が所定のしきい値以上であれば抵抗変化素子（０、０）がオンであると判定し、該電流が所定のしきい値よりも小さければ抵抗変化素子（０、０）がオフであると判定する。
【００４７】
図４は、本発明のプログラマブル論理集積回路の一構成例を示すブロック図である。
【００４８】
図４に示すように、本発明のプログラマブル論理集積回路は、プログラマブルロジックセルアレイ１、Ｘデコーダ２、Ｙデコーダ３、センスアンプ書込みドライバ４及びコントローラ５を備える。センスアンプ書込みドライバ４には、図２及び３に示したＸ書込みドライバ４１及びＹ書込みドライバ４２、並びにセンスアンプ４３が含まれる。コントローラ５は、専用Ｉ／Ｏ（Input/Output）を介して外部装置とデータの送受信が可能であり、プログラマブルロジックセルアレイ１は汎用Ｉ／Ｏを介して外部装置とデータの送受信が可能である。
【００４９】
プログラマブルロジックセルアレイ１は、不図示の複数のロジックブロック、複数のクロスバスイッチ及び複数のシフタブロック１１を備え、各ロジックブロックがクロスバスイッチを介して接続される構成である。クロスバスイッチはシフタブロック１１を介してＸデコーダ２とそれぞれ接続される。プログラマブルロジックセルアレイ１は、外部から入力されるコンフィグレーションデータに基づいて、クロスバスイッチにより複数のロジックブロックの接続を変更することで任意の論理回路を形成する。コンフィグレーションデータにはクロスバスイッチが備える各抵抗変化素子をオンまたはオフに設定するための書込みデータが含まれる。
【００５０】
コントローラ５は、専用Ｉ／Ｏを介して外部からアドレス情報及びコンフィグレーションデータを含む構成情報を受け取り、プログラマブルロジックセルアレイ１に対するコンフィグレーションデータの書込み動作を制御する。また、コントローラ５は、プログラマブルロジックセルアレイ１が備える各抵抗変化素子の状態を読出し、コンフィグレーションデータが正しく書き込まれているか否かを判定する。さらに、コントローラ５は、プログラマブルロジックセルアレイ１に正しいコンフィグレーションデータを書込むことができない書込み不良を検出すると、不良が発生した抵抗変化素子を冗長素子へ置き換えるために、シフタブロック１１が備える各スイッチを制御する。
【００５１】
図５は、図４に示したコントローラの一構成例を示すブロック図である。
【００５２】
図５に示すように、コントローラ５は、外部インターフェース（Ｉ／Ｆ）回路５１、演算手段５２、記憶手段５３、アドレスバッファ５４及びデータバッファ５５を備え、それらが内部バス５６で接続された構成である。コントローラ５は、例えばＣＰＵ（Central Processing Unit）及びメモリを備えた情報処理用のＩＣ（Integrated Circuit）で実現される。
【００５３】
外部Ｉ／Ｆ回路５１は、専用Ｉ／Ｏとの通信を制御することで外部装置とデータを送受信するためのインターフェース回路である。
【００５４】
演算手段５２は、記憶手段５３に格納されたプログラムにしたがって処理を実行することで、プログラマブル論理集積回路全体の動作を制御する。また、演算手段５２は、記憶手段５３に格納されたプログラムにしたがって処理を実行することで、プログラマブルロジックセルアレイ１に対する書込み動作や読出し動作、不良素子の検出動作、不良素子を冗長素子へ置き換えるための救済動作等を制御する。
【００５５】
記憶手段５３には、演算手段５２による上記各種制御動作のための処理で必要なプログラム、演算手段５２が処理するデータや処理後のデータ等が格納される。また、記憶手段５３には、シフタブロック１１が備える各スイッチのオンまたはオフの状態設定値（接続情報）が格納される。この接続情報を保存するためのメモリ素子はシフタブロック１１に備えていてもよい。なお、該接続情報は不揮発性のメモリ素子（抵抗変化素子等）で保存されることが望ましい。
【００５６】
アドレスバッファ５４は、外部から入力される構成情報のうち、上記アドレス情報を格納する専用バッファである。データバッファ５５は、外部から入力される構成情報のうち、コンフィグレーションデータ、並びにプログラマブルロジックセルアレイ１が備える各抵抗変化素子の状態の読出し結果を格納する専用バッファである。
【００５７】
図６は、第１の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。図６は、説明を簡単にするため、プログラマブル論理集積回路に、図１に示した２行×４列のクロスバスイッチを備える構成を想定した処理例を示している。上述したように、実際のクロスバスイッチは、第１の方向を列方向とし、第２の方向を行方向としたとき、数十行数十列程度の回路規模となる。
【００５８】
第１の実施の形態では、クロスバスイッチが備えるグループＡの抵抗変化素子でオフ固定の不良が発生した場合に、該クロスバスイッチで使用する抵抗変化素子をグループＢの抵抗変化素子に置き換える処理例を説明する。
【００５９】
図６に示すように、シフタブロック１１が備える各スイッチは、工場出荷時の状態である、スイッチＳ０，Ｓ２，Ｓ４及びＳ６がオンであり、スイッチＳ１，Ｓ３，Ｓ５及びＳ７がオフであるものとする（ステップＡ１）。このとき、クロスバスイッチではグループＡが選択されている。
【００６０】
コントローラ５は、外部Ｉ／Ｆ回路５１により外部装置からコンフィグレーション命令を受信すると（ステップＡ２）、まずＸ＝０を選択し（ステップＡ３）、続いてＹ＝０を選択し（ステッＡ４）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を設定する書込み動作を実行する（ステップＡ５）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＡ６）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＡ７）、ステップＡ５の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)に対する書込み動作を実行する。ステップＡ５〜Ａ７の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２）、(０，３)に対する書込み動作が完了すると、コントローラ５は、抵抗変化素子(０，０)、（０，１）、（０，２）、（０，３）の状態の読出し動作へ移行する。
【００６１】
読出し動作時、コントローラ５は、まずＹ＝０を選択し（ステップＡ８）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を読み出す（ステップＡ９）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＡ１０）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＡ１１）、ステップＡ９の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)の状態を読み出す。ステップＡ９〜Ａ１１の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２），（０，３）の状態の読み出しが完了すると、コントローラ５は、選択行Ｘ＝０の書込みデータである期待値（第１状態値）と読出したデータ（抵抗値：第２状態値）とを比較する（ステップＡ１２）。そして、第１状態値と第２状態値とが一致しない書込み不良の有無、すなわち所望のコンフィグレーションデータが正しく書き込まれているか否かを判定する。
【００６２】
プログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれている場合（ステップＡ１３）、コントローラ５は、Ｘアドレス＝１であるか否かを判定し（ステップＡ１４）、Ｘアドレス＝１である場合は処理を終了する。Ｘアドレス＝１でない場合、コントローラ５は、Ｘアドレスを１だけインクリメントし（ステップＡ１５）、ステップＡ４の処理へ戻ってステップＡ１４までの処理を繰り返し、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）に対する書込み動作及び読出し動作を実行する。そして、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）にコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。
【００６３】
ステップＡ１３の処理でプログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれていない場合、コントローラ５は、Ｘアドレスを初期値（Ｘ＝０）に戻し（ステップＡ１６）、Ｙアドレスを初期値（Ｙ＝０）に戻し（ステップＡ１７）、オン状態の抵抗変化素子をオフ状態に設定するリセット動作を開始する。リセット動作は、書き込み不良が発生した抵抗変化素子（不良素子）のアドレスまで順次実行する（ステップＡ１８〜Ａ２２）。
【００６４】
不良素子のアドレスまでリセット動作を実行すると、コントローラ５は、シフタブロック１１が備えるスイッチＳ０、Ｓ２、Ｓ４及びＳ６をオフにし、スイッチＳ１、Ｓ３、Ｓ５及びＳ７をオンにして、第２の配線ｂと第３の配線ｏｕｔ０とを接続し、第２の配線ｃと第３の配線ｏｕｔ１とを接続し、第２の配線ｄと第３の配線ｏｕｔ２とを接続し、第２の配線ｒと第３の配線ｏｕｔ３とを接続する（ステップＡ２３）。このとき、クロスバスイッチではグループＢが選択される。このとき、コントローラ５は、設定変更後のスイッチＳ０〜Ｓ７の状態を示す上記状態設定値（接続情報）をシフタブロック１１が備えるメモリ素子または記憶手段５３で保存する。
【００６５】
コントローラ５は、シフタブロック１１の各スイッチの設定が完了すると、ステップＡ３の処理へ戻ってＸ，Ｙアドレスを初期値に戻し、グループＢの抵抗変化素子(０，０)、（０，１）、（０，２）、（０，３）、(１，０)、（１，１）、（１，２）、（１，３）に対して、上記と同様に書込み動作及び読出し動作を実行する。そして、プログラマブルロジックセルアレイ１が備えるグループＢの各抵抗変化素子に所望のコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。グループＢにコンフィグレーションデータが正しく書き込まれていない場合、プログラマブル論理集積回路の救済が不能であるため、コントローラ５は、例えば専用Ｉ／Ｏを介して外部装置へ救済不能を示す情報を送信する。
【００６６】
本実施形態のプログラマブル論理集積回路では、クロスバスイッチに、通常使用するグループＡの抵抗変化素子と、その冗長素子であるグループＢの抵抗変化素子とを備える。また、グループＡの抵抗変化素子でオフ固定の不良が発生すると、コントローラ５により、シフタブロック１１が備える各スイッチを用いてクロスバスイッチで使用する抵抗変化素子をグループＢへ置き換える。そのため、コンフィグレーションデータ等を変更することなく自律的に不良個所が修復される。したがって、出荷後に抵抗変化素子で不良が発生しても救済が可能なプログラマブル論理集積回路が得られる。
【００６７】
また、冗長素子であるグループＢの抵抗変化素子は、グループＡで不良が発生するまで一度も書込み動作が実施されていないため、正常な抵抗変化素子であることが期待できる。そのため、出荷後に抵抗変化素子で不良が発生しても、高い確率で該不良が救済される。
【００６８】
さらに、通常使用するグループＡの抵抗変化素子から冗長素子（グループＢ）へ切り替えるには、シフタブロック１１の設定値を１ビット変更するだけで済む。したがって、不良が発生したグループＡの抵抗変化素子を簡易に冗長素子へ置き換えることができる。
（第２の実施の形態）
上述した第１の実施の形態では、クロスバスイッチが備えるグループＡの抵抗変化素子でオフ固定が発生した場合の対処方法について説明した。第２の実施の形態は、グループＡの抵抗変化素子でオン固定が発生した場合の対処方法について説明する。
【００６９】
抵抗変化素子でオン固定が発生した場合、該抵抗変化素子が接続される行配線と列配線とは常に短絡状態となる。すなわち、抵抗変化素子でオン固定が発生した場合は配線単位で置き換える必要がある。
【００７０】
図７は、第２の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。プログラマブル論理集積回路の構成は第１の実施の形態と同様であるため、その説明は省略する。図７は、第１の実施の形態と同様に、プログラマブル論理集積回路に、図１に示した２行×４列のクロスバスイッチを備える構成を想定した処理を示している。
【００７１】
図７に示すように、シフタブロック１１が備える各スイッチは、工場出荷時の状態である、スイッチＳ０，Ｓ２，Ｓ４及びＳ６がオンであり、スイッチＳ１，Ｓ３，Ｓ５及びＳ７がオフであるものとする（ステップＢ１）。このとき、クロスバスイッチではグループＡが選択されている。
【００７２】
コントローラ５は、外部Ｉ／Ｆ回路５１により外部装置からコンフィグレーション命令を受信すると（ステップＢ２）、まずＸ＝０を選択し（ステップＢ３）、続いてＹ＝０を選択し（ステッＢ４）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を設定する書込み動作を実行する（ステップＢ５）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＢ６）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＢ７）、ステップＢ５の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)に対する書込み動作を実行する。ステップＢ５〜Ｂ７の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２）、(０，３)に対する書込み動作が完了すると、コントローラ５は、抵抗変化素子(０，０)、（０，１）、（０，２）、（０，３）の状態の読出し動作へ移行する。
【００７３】
読出し動作時、コントローラ５は、まずＹ＝０を選択し（ステップＢ８）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を読み出す（ステップＢ９）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＢ１０）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＢ１１）、ステップＢ９の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)の状態を読み出す。ステップＢ９〜Ｂ１１の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２），（０，３）の状態の読み出しが完了すると、コントローラ５は、選択行Ｘ＝０の書込みデータである期待値（第１状態値）と読出したデータ（抵抗値：第２状態値）とを比較する（ステップＢ１２）。そして、第１状態値と第２状態値とが一致しない書込み不良の有無、すなわち所望のコンフィグレーションデータが正しく書き込まれているか否かを判定する。
【００７４】
プログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれている場合（ステップＢ１３）、コントローラ５は、Ｘアドレス＝１であるか否かを判定し（ステップＢ１４）、Ｘアドレス＝１である場合は処理を終了する。Ｘアドレス＝１でない場合、コントローラ５は、Ｘアドレスを１だけインクリメントし（ステップＢ１５）、ステップＢ４の処理へ戻ってステップＢ１４までの処理を繰り返し、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）に対する書込み動作及び読出し動作を実行する。そして、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）にコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。
【００７５】
ステップＢ１３の処理でプログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれていない場合、コントローラ５は、Ｙアドレスを初期値（Ｙ＝０）に戻し（ステップＢ１６）、選択行Ｘ＝０（または１）の抵抗変化素子をオフ状態にするリセット動作を開始する。リセット動作は、書き込み不良が発生した抵抗変化素子（不良素子）が接続される選択行Ｘ＝０（または１）の全ての抵抗変化素子に対して実行する（ステップＢ１７〜Ｂ１９）。
【００７６】
選択行Ｘ＝０（または１）の全ての抵抗変化素子に対するリセット動作が完了すると、コントローラ５は、不良素子を冗長素子へ置き換えるためにシフタブロックが備える各スイッチのオンまたはオフ状態を設定する。
【００７７】
上述したように、抵抗変化素子でオン固定が発生した場合、配線単位で置き換える必要がある。例えば、第２の配線ａに接続される抵抗変化素子でオン固定が発生した場合、第３の配線ｏｕｔ０に接続する第２の配線をａからｂへ切り替える。その場合、コントローラ５は、第２の配線ａと第３の配線ｏｕｔ０とを接続するスイッチＳ０をオフにし、第２の配線ｂと第３の配線ｏｕｔ０とを接続するスイッチＳ１をオンにする。さらに、コントローラ５は、スイッチＳ２、Ｓ４及びＳ６をオフにし、スイッチＳ３、Ｓ５及びＳ７をオンにして、第２の配線ｃ、ｄ、ｒと第３の配線ｏｕｔ１、ｏｕｔ２、ｏｕｔ３とを接続する。
【００７８】
図８は、第２の実施の形態のプログラマブル論理集積回路で用いる、不良素子のアドレスとシフタブロックが備える各スイッチの状態との一関係例を示す真理値表である。
【００７９】
図８に示すように、例えば抵抗変化素子（０，０）が不良素子であった場合、コントローラ５は、スイッチＳ０、Ｓ２、Ｓ４及びＳ６をオフにし、スイッチＳ１、Ｓ３、Ｓ５及びＳ７をオンにする。また、例えば、抵抗変化素子（１，２）が不良素子であった場合、コントローラ５は、スイッチＳ１、Ｓ３、Ｓ４及びＳ６をオフにし、スイッチＳ０、Ｓ２、Ｓ５及びＳ７をオンにする。抵抗変化素子（０，１）、（０，２）、（０，３）、(１，０)、（１，１）または（１，３）が不良素子であった場合、図８を参照してシフタブロックが備える各スイッチのオンまたはオフを設定すればよい。
【００８０】
コントローラ５によるシフタブロック１１の各スイッチの設定が完了すると、クロスバスイッチではグループＢが選択される。このとき、コントローラ５は、設定変更後のスイッチＳ０〜Ｓ７の状態を示す上記状態設定値（接続情報）をシフタブロック１１が備えるメモリ素子または記憶手段５３で保存する。
【００８１】
コントローラ５は、シフタブロック１１の各スイッチの設定が完了すると、ステップＢ４の処理へ戻ってＹアドレスを初期値（Ｙ＝０）に戻し、選択行Ｘ＝０（または１）のグループＢの抵抗変化素子に対して、上記と同様に書込み動作及び読出し動作を実行する。そして、選択行Ｘ＝０（または１）のグループＢの各抵抗変化素子にコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。選択行Ｘ＝０（または１）のグループＢにコンフィグレーションデータが正しく書き込まれていない場合、プログラマブル論理集積回路の救済が不能であるため、コントローラ５は、例えば専用Ｉ／Ｏを介して外部装置へ救済不能を示す情報を送信する。
【００８２】
本実施形態によれば、クロスバスイッチが備えるグループＡの抵抗変化素子でオン固定が発生した場合でも、第１の実施の形態と同様に、コントローラ５により、シフタブロック１１が備える各スイッチを用いて、クロスバスイッチで使用する抵抗変化素子をグループＢへ置き換える。そのため、コンフィグレーションデータ等を変更することなく自律的に不良個所が修復される。したがって、出荷後に抵抗変化素子で不良が発生しても救済が可能なプログラマブル論理集積回路が得られる。
【００８３】
また、冗長素子であるグループＢの抵抗変化素子は、グループＡで不良が発生するまで一度も書込み動作が実施されていないため、正常な抵抗変化素子であることが期待できる。そのため、出荷後に抵抗変化素子で不良が発生しても、高い確率で該不良が救済される。
【００８４】
さらに、通常使用するグループＡの抵抗変化素子から冗長素子（グループＢ）へ切り替えるには、シフタブロック１１の設定値を１ビット変更するだけで済む。したがって、不良が発生したグループＡの抵抗変化素子を簡易に冗長素子へ置き換えることができる。
【００８５】
なお、シフタブロック１１が備える各スイッチＳ０〜Ｓ７は、例えばＮＭＯＳトランジスタを用いることができる。図９は、シフタブロックが備える各スイッチにＮＭＯＳトランジスタを用いる場合の構成例を示している。
【００８６】
図９に示すように、シフタブロック１１が備える各スイッチにＮＭＯＳトランジスタを用いる場合、スイッチＳ０〜Ｓ７のゲート端子は抵抗変化素子を介してプルアップ端子Ｈｉｇｈとプルダウン端子Ｌｏｗとにそれぞれ接続する。
【００８７】
例えば、スイッチＳ０をオンにする場合は、プルアップ端子Ｈｉｇｈに接続する抵抗変化素子ｓ０１をオンにし、プルダウン端子Ｌｏｗに接続する抵抗変化素子ｓ００をオフにする。
【００８８】
図１０は、不良素子のアドレスと、図９に示したシフタブロックが備える各抵抗変化素子の状態との一関係例を示す真理値表である。
【００８９】
図１０に示すように、例えばクロスバスイッチの抵抗変化素子（１，２）が不良であった場合、抵抗変化素子ｓ００、ｓ１１、ｓ２０、ｓ３１、ｓ４１、ｓ５０、ｓ６１及びｓ７０をオフに設定し、抵抗変化素子ｓ０１、ｓ１０、ｓ２１、ｓ３０、ｓ４０、ｓ５１、ｓ６０及びｓ７１をオンに設定する。抵抗変化素子（０，０）、（０，１）、（０，２）、（０，３）、(１，０)、（１，１）または（１，３）が不良であった場合も、同様に図１０を参照してシフタブロックの各抵抗変化素子のオン／オフを設定すればよい。
【００９０】
また、シフタブロックが備える各スイッチＳ０〜Ｓ７には、抵抗変化素子を用いることも可能である。
【００９１】
図１１は、シフタブロックが備える各スイッチに抵抗変化素子を用いる場合の一構成例を示す模式図である。シフタブロックが備える各スイッチに抵抗変化素子を用いる場合、不良素子のアドレスに対して設定する各抵抗変化素子の状態は、図８に示した真理値表を用いればよい。
【００９２】
なお、図９に示したシフタブロック１１が備える各スイッチＳ０〜Ｓ７にＮＭＯＳトランジスタを用いる構成及び図１１に示したシフタブロック１１が備える各スイッチＳ０〜Ｓ７に抵抗変化素子を用いる構成は、上述した第１の実施の形態、並びに後述する第３の実施の形態のプログラマブル論理集積回路にも適用可能である。
（第３の実施の形態）
図１２及び図１３は、第３の実施の形態のプログラマブル論理集積回路が備えるクロスバスイッチの一構成例を示す模式図である。
【００９３】
第３の実施の形態のプログラマブル論理集積回路は、シフタブロックの構成が第１及び第２の実施の形態と異なる。第３の実施の形態では、グループＡの抵抗変化素子でオン固定が発生した場合とオフ固定が発生した場合とで異なる真理値表を用いてプログラマブル論理集積回路を救済する。また、第３の実施の形態では、グループＡの抵抗変化素子でオン固定が発生した場合とオフ固定が発生した場合とで、冗長素子であるグループＢの抵抗変化素子に付与するアドレスが異なる。図１２はオフ固定の救済に用いるグループＢの抵抗変化素子のアドレスを示し、図１３はオン固定の救済に用いるグループＢの抵抗変化素子のアドレスを示している。コントローラ５は、抵抗変化素子の不良を検出すると、該不良がオン固定であるかオフ固定であるかを判定し、図１２または図１３に基づいて各抵抗変化素子に付与するアドレスを選択する。プログラマブル論理集積回路のその他の構成は第１の実施の形態と同様であるため、その説明は省略する。
【００９４】
図１４は、第３の実施の形態のコントローラによる処理手順の一例を示すフローチャートである。
【００９５】
図１４に示すように、シフタブロック１１が備える各スイッチは、工場出荷時の状態である、スイッチＳ０，Ｓ２，Ｓ４及びＳ６がオンであり、スイッチＳ１，Ｓ３，Ｓ５及びＳ７がオフであるものとする（ステップＣ１）。このとき、クロスバスイッチではグループＡが選択されている。
【００９６】
コントローラ５は、外部Ｉ／Ｆ回路５１により外部装置からコンフィグレーション命令を受信すると（ステップＣ２）、まずＸ＝０を選択し（ステップＣ３）、続いてＹ＝０を選択し（ステッＣ４）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を設定する書込み動作を実行する（ステップＣ５）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＣ６）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＣ７）、ステップＣ５の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)に対する書込み動作を実行する。ステップＣ５〜Ｃ７の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２）、(０，３)に対する書込み動作が完了すると、コントローラ５は、抵抗変化素子(０，０)、（０，１）、（０，２）、（０，３）の状態の読出し動作へ移行する。
【００９７】
読出し動作時、コントローラ５は、まずＹ＝０を選択し（ステップＣ８）、選択行Ｘ＝０の抵抗変化素子(０，０)の状態を読み出す（ステップＣ９）。次に、コントローラ５は、Ｙ＝３であるか否かを判定し（ステップＣ１０）、Ｙ＝３でない場合はＹアドレスを１だけインクリメントし（ステップＣ１１）、ステップＣ９の処理へ戻って、選択行Ｘ＝０の抵抗変化素子(０，１)の状態を読み出す。ステップＣ９〜Ｃ１１の処理を繰り返し、選択行Ｘ＝０の抵抗変化素子（０，２），（０，３）の状態の読み出しが完了すると、コントローラ５は、選択行Ｘ＝０の書込みデータである期待値（第１状態値）と読出したデータ（抵抗値：第２状態値）とを比較する（ステップＣ１２）。そして、第１状態値と第２状態値とが一致しない書込み不良の有無、すなわち所望のコンフィグレーションデータが正しく書き込まれているか否かを判定する。
【００９８】
プログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれている場合（ステップＣ１３）、コントローラ５は、Ｘアドレス＝１であるか否かを判定し（ステップＣ１４）、Ｘアドレス＝１である場合は処理を終了する。Ｘアドレス＝１でない場合、コントローラ５は、Ｘアドレスを１だけインクリメントし（ステップＣ１５）、ステップＣ４の処理へ戻ってステップＣ１４までの処理を繰り返し、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）に対する書込み動作及び読出し動作を実行する。そして、抵抗変化素子(１，０)、（１，１）、（１，２）、（１，３）にコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。
【００９９】
ステップＣ１３の処理でプログラマブルロジックセルアレイ１にコンフィグレーションデータが正しく書き込まれていない場合、コントローラ５は、不良素子がオン固定であるか否かを判定する（ステップＣ１６）。不良素子がオン固定でない場合、すなわちオフ固定である場合、コントローラ５は、Ｙアドレスを初期値（Ｙ＝０）に戻し（ステップＣ１７）、選択行Ｘ＝０（または１）の抵抗変化素子をオフ状態にするリセット動作を開始する。リセット動作は、書き込み不良が発生した抵抗変化素子（不良素子）が接続される選択行Ｘ＝０（または１）の全ての抵抗変化素子に対して実行する（ステップＣ１８〜Ｃ２０）。
【０１００】
選択行Ｘ＝０（または１）の全ての抵抗変化素子に対するリセット動作が完了すると、コントローラ５は、不良素子を冗長素子へ置き換えるためにシフタブロックが備える各スイッチのオンまたはオフ状態を設定する。このとき、コントローラ５は、図１５に示す真理値表にしたがってシフタブロック１１が備える各スイッチを設定する（ステップＣ２１）。
【０１０１】
図１５に示すように、例えば抵抗変化素子（０，０）が不良素子であった場合、コントローラ５は、オフ固定の不良素子と接続される第２の配線ａと第３の配線ｏｕｔ０とを接続するスイッチＳ０をオフし、第２の配線ｂと第３の配線ｏｕｔ０とを接続するスイッチＳ１をオンし、第２の配線ａと第３の配線ｏｕｔ１とを接続するスイッチＳ２をオンにする。スイッチＳ３〜Ｓ９のオン／オフは変更しなくてよい。
【０１０２】
一方、ステップＣ１６の処理で不良素子がオン固定である場合、コントローラ５は、Ｙアドレスを初期値（Ｙ＝０）に戻し（ステップＣ２２）、選択行Ｘ＝０（または１）の抵抗変化素子をオフ状態にするリセット動作を開始する。リセット動作は、書き込み不良が発生した抵抗変化素子（不良素子）が接続される選択行Ｘ＝０（または１）の全ての抵抗変化素子に対して実行する（ステップＣ２３〜Ｃ２５）。
【０１０３】
選択行Ｘ＝０（または１）の全ての抵抗変化素子に対するリセット動作が完了すると、コントローラ５は、不良素子を冗長素子へ置き換えるためにシフタブロックが備える各スイッチのオンまたはオフ状態を設定する。このとき、コントローラ５は、図１６に示す真理値表にしたがってシフタブロック１１が備える各スイッチを設定する（ステップＣ２６）。
【０１０４】
図１６に示すように、例えば抵抗変化素子（０，０）が不良素子であった場合、コントローラ５は、オン固定の不良素子と接続される第２の配線ａと第３の配線ｏｕｔ０とを接続するスイッチＳ０をオフし、第２の配線ｂと第３の配線ｏｕｔ０とを接続するスイッチＳ１をオンにする。また、スイッチＳ３、Ｓ５、Ｓ８をオフにし、スイッチＳ４、Ｓ６、Ｓ９をオンにして、第２の配線ｃと第３の配線ｏｕｔ１とを接続し、第２の配線ｄと第３の配線ｏｕｔ２とを接続し、第２の配線ｒと第３の配線ｏｕｔ３とを接続する。スイッチＳ２及びＳ７はオフで維持する。
【０１０５】
コントローラ５によるシフタブロック１１の各スイッチの設定が完了すると、クロスバスイッチではグループＢが選択される。このとき、コントローラ５は、設定変更後のスイッチＳ０〜Ｓ７の状態を示す上記状態設定値（接続情報）をシフタブロック１１が備えるメモリ素子または記憶手段５３で保存する。
【０１０６】
コントローラ５は、シフタブロック１１の各スイッチの設定が完了すると、ステップＣ４の処理へ戻ってＹアドレスを初期値（Ｙ＝０）に戻し、選択行Ｘ＝０（または１）のグループＢの抵抗変化素子に対して、上記と同様に書込み動作及び読出し動作を実行する。そして、選択行Ｘ＝０（または１）のグループＢの各抵抗変化素子にコンフィグレーションデータが正しく書き込まれている場合は処理を終了する。選択行Ｘ＝０（または１）のグループＢにコンフィグレーションデータが正しく書き込まれていない場合、プログラマブル論理集積回路の救済が不能であるため、コントローラ５は、例えば専用Ｉ／Ｏを介して外部装置へ救済不能を示す情報を送信する。
【０１０７】
本実施形態によれば、クロスバスイッチが備える抵抗変化素子でオン固定またはオフ固定が発生した場合でも、第１及び第２の実施の形態と同様に、コントローラ５により、シフタブロック１１が備える各スイッチを用いて、クロスバスイッチで使用する抵抗変化素子をグループＢへ置き換える。そのため、コンフィグレーションデータ等を変更することなく自律的に不良個所が修復される。したがって、出荷後に抵抗変化素子で不良が発生しても救済が可能なプログラマブル論理集積回路が得られる。
【０１０８】
また、冗長素子であるグループＢの抵抗変化素子は、グループＡで不良が発生するまで一度も書込み動作が実施されていないため、正常な抵抗変化素子であることが期待できる。そのため、出荷後に抵抗変化素子で不良が発生しても、高い確率で該不良が救済される。
【０１０９】
さらに、通常使用するグループＡの抵抗変化素子から冗長素子（グループＢ）へ切り替えるには、シフタブロック１１の設定値を１ビット変更するだけで済む。したがって、不良が発生したグループＡの抵抗変化素子を簡易に冗長素子へ置き換えることができる。
【０１１０】
なお、上記第１の実施の形態〜第３の実施の形態では、コンフィグレーションデータの書込み不良が発生した場合に、シフタブロック１１の設定を変更して冗長素子へ切り替える例を示した。しかしながら、冗長素子へ切り替える条件は、書込み不良が発生したときに限定されるものではない。例えば、書込み動作回数を計数するカウンタを備え、コントローラ５は、書込み動作回数が予め設定された所定回数を超えた場合は、書込み不良が発生していなくても一斉に冗長素子へ切り替えてもよい。すなわち、グループＢの抵抗変化素子を通常使用する抵抗変化素子としてもよい。その場合、書込み不良の発生を事前に予防することができる。プログラマブル論理集積回路は常時電源が供給されると限らないため、上記カウンタは不揮発性回路であることが望ましい。例えば、カウント値を格納する抵抗変化素子を備え、電源投入時に該抵抗変化素子に格納されたカウント値から計数を開始するカウンタを備えてもよい。また、カウンタが備える抵抗変化素子で書込み不良が発生する可能性もあるため、該カウンタにはパリティビットを含む誤り訂正機能を備えていてもよい。誤り訂正機能には、カウント値の１ビットあたり３個以上の抵抗変化素子を備えた、多数決論理を用いて訂正する機能を備えていてもよい。
【０１１１】
また、図１、図２、図３、図９、図１１、図１２及び図１３において、四角形のシンボルで示した各抵抗変化素子は、２つの配線を電気的に接続または切断するスイッチとして機能する、抵抗変化素子を備えた構成であれば、どのような回路を用いてもよい。例えば、スイッチは、図１７（ａ）に示すように抵抗変化素子のみで構成されていてもよく、図１７（ｂ）に示すように２つの抵抗変化素子と１つのトランジスタとで構成されていてもよい。
【０１１２】
上述したように、本発明のプログラマブル論理集積回路は、クロスバスイッチに通常使用するグループＡの抵抗変化素子と冗長素子であるグループＢの抵抗変化素子とを備えている。したがって、グループＡ及びグループＢの抵抗変化素子に対して上記更新保証回数を個別に設定できる場合、構成情報の書き換え回数を実質的に更新保証回数の２倍になることが期待できる。
（付記１）
複数のロジックブロックと、
第１の方向へ延在する複数の第１の配線と第２の方向へ延在する複数の第２の配線とを接続または切断する、前記第１の配線と前記第２の配線との交点に配置された複数の抵抗変化素子を備え、前記複数のロジックブロックどうしを変更可能に接続する複数のルーティングスイッチブロックと、
を有し、
前記複数の抵抗変化素子は、通常使用される抵抗変化素子である第１の抵抗変化素子と、前記第１の抵抗変化素子で不良が発生したときに使用される冗長素子である第２の抵抗変化素子とを含み、
前記第１の抵抗変化素子と前記第２の抵抗変化素子とが、前記第１の配線と前記第２の配線との交点に交互に配置されたプログラマブル論理集積回路。
（付記２）
前記複数の第２の配線と、前記ルーティングスイッチブロックの外部へ延在する複数の第３の配線とを接続するシフタブロックを有し、
前記シフタブロックは、
１つの前記第３の配線に対して、隣接する２つの第２の配線のいずれか一方を接続する付記１に記載のプログラマブル論理集積回路。
（付記３）
前記シフタブロックは、前記複数の第２の配線と前記複数の第３の配線とを接続または遮断する複数のスイッチ備え、
前記スイッチをオンまたはオフに設定するための接続情報を格納するメモリ素子をさらに有する付記２に記載のプログラマブル論理集積回路。
（付記４）
前記第１の抵抗変化素子及び前記第２の抵抗変化素子をオンまたはオフに設定するための書込み手段と、
前記第１の抵抗変化素子及び第２の抵抗変化素子に設定されたオンまたはオフの状態を読み出すための読み出し手段と、
をさらに有する付記３に記載のプログラマブル論理集積回路。
（付記５）
前記書込み手段を用いて前記第１の抵抗変化素子をオンまたはオフに設定する書込み動作及び前記読み出し手段を用いて前記第１の抵抗変化素子に設定されたオンまたはオフの状態を読み出す読み出し動作を実行し、
前記書込み動作によって前記第１の抵抗変化素子に設定された第１状態値と、前記読出し動作によって読み出された前記第１の抵抗変化素子の第２状態値とを比較し、前記第１状態値と前記第２状態値とが一致しない書込み不良の有無を判定し、
前記書込み不良の有無に応じて前記接続情報を決定する制御手段をさらに有する付記４に記載のプログラマブル論理集積回路。
（付記６）
前記制御手段は、
前記書込み不良が発生した第１の抵抗変化素子と接続される第２の配線を前記第３の配線から切断し、該第２の配線と隣接する配線を前記第３の配線と接続するための前記接続情報を決定する付記５に記載のプログラマブル論理集積回路。
（付記７）
前記制御手段は、
前記書込み不良を検出した前記第１の抵抗変化素子がオンからオフへ設定できないオン固定であるか、オフからオンへ設定できないオフ固定であるかを判定し、前記接続情報を前記オン固定または前記オフ固定に応じて変更する付記５または６に記載のプログラマブル論理集積回路。
（付記８）
前記書込み動作の回数を計数するカウンタを備え、
前記書込み動作の回数が予め設定された所定回数を超えた場合、前記第２の抵抗変化素子を通常使用する抵抗変化素子とする付記１から７のいずれか１項に記載のプログラマブル論理集積回路。
（付記９）
前記第１の方向を列方向とし、前記第２の方向を行方向としたとき、
前記第１の抵抗変化素子は、偶数行偶数列または奇数行奇数列に配置され、
前記第２の抵抗変化素子は、偶数行奇数列または奇数行偶数列に配置された付記１から８のいずれか１項に記載のプログラマブル論理集積回路。
（付記１０）
前記制御手段は、
前記書込み不良を検出した前記第１の抵抗変化素子が前記オフ固定であるとき、前記ルーティングスイッチブロックで使用する抵抗変化素子を前記第１の抵抗変化素子から前記第２の抵抗変化素子へ全て置き換えるように前記接続情報を変更する付記５から９のいずれか１項に記載のプログラマブル論理集積回路。
（付記１１）
前記制御手段は、
前記書込み不良を検出すると、該書込み不良が発生した前記第１の抵抗変化素子をオフするリセット動作を実行し、
前記シフタブロックが備えるスイッチの設定を変更した後、前記第１の抵抗変化素子に設定したオンまたはオフの状態を前記第２の抵抗変化素子に再度設定する付記５に記載のプログラマブル論理集積回路。
（付記１２）
前記制御手段は、
プログラムにしたがって処理を実行する演算手段と、
前記プログラムが格納される記憶手段と、
を有し、
前記演算手段は、前記プログラムにしたがって処理を実行することで前記書込み手段及び前記読み出し手段の機能を実現する請求項５から１１のいずれか１項に記載のプログラマブル論理集積回路。
【符号の説明】
【０１１３】
１    プログラマブルロジックセルアレイ
２    Ｘデコーダ
３    Ｙデコーダ
４    センスアンプ書込みドライバ
５    コントローラ
１１    シフタブロック
４１    Ｘ書込みドライバ
４２    Ｙ書込みドライバ
４３    センスアンプ
５１    外部Ｉ／Ｆ回路
５２    演算手段
５３    記憶手段
５４    アドレスバッファ
５５    データバッファ
５６    内部バス
ｉｎ０〜ｉｎ３    第１の配線
ａ〜ｄ、ｒ    第２の配線
ｏｕｔ０〜ｏｕｔ３    第３の配線
【図１】
0006485225.tif 000002
【図２】
0006485225.tif 000003
【図３】
0006485225.tif 000004
【図４】
0006485225.tif 000005
【図５】
0006485225.tif 000006
【図６】
0006485225.tif 000007
【図７】
0006485225.tif 000008
【図８】
0006485225.tif 000009
【図９】
0006485225.tif 000010
【図１０】
0006485225.tif 000011
【図１１】
0006485225.tif 000012
【図１２】
0006485225.tif 000013
【図１３】
0006485225.tif 000014
【図１４】
0006485225.tif 000015
【図１５】
0006485225.tif 000016
【図１６】
0006485225.tif 000017
【図１７】
0006485225.tif 000018