(57)【要約】【課題】ハードウェア故障による部品交換の回数を低減し信頼性を向上させる。【解決手段】入力される回路構成情報に基づいてコンフィギュレーションを行うことで回路構成が変更される論理ブロック部と、少なくとも１つの論理ブロックを含む回路ブロックにてハードウェア故障を検出した場合、故障範囲に応じて論理ブロック部における実装位置を変更する実装位置演算部と、論理ブロック部における実装位置を実装位置演算部に従って変更し論理ブロック部の再コンフィギュレーションを行う制御部とを有する半導体集積回路にて、回路ブロックにてハードウェア故障を検出した場合、実装位置演算部が、回路ブロックを細分化して故障範囲を特定し、故障範囲内の論理ブロックの単位で構成する回路を移動させる正常動作する論理ブロックを決定するようにして、ハードウェア故障が発生しても機能回復できるようにする。【選択図】図２
2017111579.tif 000002
【特許請求の範囲】
【請求項１】
入力される回路構成情報に基づいて回路を構成可能な半導体集積回路であって、
前記回路構成情報に基づいてコンフィギュレーションを行うことで回路構成が変更される論理ブロックを複数有する論理ブロック部と、
少なくとも１つの前記論理ブロックを含む回路ブロックにてハードウェア故障を検出した場合、前記回路ブロックを逐次分割し細分化して故障範囲を特定し、特定した前記故障範囲内の論理ブロックの単位で構成する回路を移動させる正常動作する論理ブロックを決定する実装位置演算部と、
前記実装位置演算部での決定に従って前記論理ブロック部における実装位置を変更し前記論理ブロック部の再コンフィギュレーションを行う制御部とを有することを特徴とする半導体集積回路。
【請求項２】
前記実装位置演算部は、特定した前記故障範囲内の論理ブロックの単位で構成する回路を正常動作する論理ブロックに移動させる際の移動量を複数の方向について求め、求めた複数の方向の移動量に基づいて前記故障範囲内の論理ブロックの単位で構成する回路を移動させる論理ブロックを決定することを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記実装位置演算部は、前記複数の方向の移動量のうち、移動量が最小となる論理ブロックを前記故障範囲内の論理ブロックの単位で構成する回路を移動させる論理ブロックに決定することを特徴とする請求項２記載の半導体集積回路。
【請求項４】
特定した故障範囲を故障履歴として保持する故障履歴管理部を有し、
前記実装位置演算部は、前記故障履歴管理部が保持する故障履歴を参照して、前記故障範囲内の論理ブロックの単位で構成する回路を移動させる論理ブロックを決定することを特徴とする請求項１〜３の何れか１項に記載の半導体集積回路。
【請求項５】
前記実装位置演算部は、前記回路ブロックを分割し細分化した領域を部分的に再コンフィギュレーションし診断用の回路を生成して動作を検証し故障範囲を特定することを特徴とする請求項１〜４の何れか１項に記載の半導体集積回路。
【請求項６】
入力される回路構成情報に基づいて回路を構成可能な半導体集積回路の機能回復方法であって、
回路構成情報に基づいてコンフィギュレーションを行うことで回路構成が変更される論理ブロックを複数有する少なくとも１つの論理ブロックを含む回路ブロックにてハードウェア故障を検出した場合、前記半導体集積回路の実装位置演算部が、前記回路ブロックを逐次分割し細分化して前記論理ブロックの単位で故障範囲を特定し、
前記実装位置演算部が、特定した前記故障範囲内の論理ブロックの単位で構成する回路を移動させる正常動作する論理ブロックを決定し、
前記半導体集積回路の制御部が、前記実装位置演算部での決定に従って前記論理ブロック部における実装位置を変更し前記論理ブロック部の再コンフィギュレーションを行うことを特徴とする半導体集積回路の機能回復方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路及びその機能回復方法に関する。
【背景技術】
【０００２】
ＦＰＧＡ（Field Programmable Gate Array）は、ユーザによりプログラム可能な半導体集積回路である。例えば、ＳＲＡＭ（Static Random Access Memory）ベースのＦＰＧＡは、入力されたコンフィギュレーションデータ（回路構成情報）に基づいてコンフィギュレーションを行うことによって、プログラム可能な回路の構成を変更し各種機能を実現することが可能である。
【０００３】
ＳＲＡＭベースのＦＰＧＡは、コンフィギュレーション後にＳＥＵ（Single Event Upset）が発生して回路が書き換わったりフリップフロップのビットデータが反転したりすることがある。そのため、ＦＰＧＡベンダー各社は、ＦＰＧＡ内部のコンフィギュレーションメモリ（ＣＲＡＭ）に保持されているコンフィギュレーションデータを、専用のハードマクロによって周期的に検証し、エラー発生時には外部端子により通知するようＦＰＧＡを構成している。また、ユーザ回路の対応としては、例えばＲＡＭ（Random Access Memory）やＦＩＦＯ（First-In First-Out）等のオンチップメモリの書き込みデータにＣＲＣ（Cyclic Redundancy Check）の演算結果を一緒に書き込み、読み出し時にＣＲＣ演算を再び行って検証するといった対策を講じている。
【０００４】
前述のようなエラーチェックによって異常を検出した場合、ＦＰＧＡを正常な状態に戻すために再度コンフィギュレーション（再コンフィギュレーション）を行って復旧を試みるのが一般的である。しかし、再コンフィギュレーションを行ってもＦＰＧＡが正常動作しない場合、そのＦＰＧＡはハードウェア故障（デバイス故障）と判断されて新しいＦＰＧＡと部品交換される。
【０００５】
プログラム可能な情報処理装置において、複数の論理構成要素により論理回路として構成された論理処理部に加えて、複数の論理構成要素により論理回路として再構成可能に構成され、通常時には使用されない予備論理処理部を設けておき、論理処理部での障害の発生を検出した場合、障害の発生した論理処理部と同一の論理回路構成になるように予備論理処理部を再構成する技術が提案されている（特許文献１参照）。また、システムが有する複数の回路ブロックのうちの何れかの回路ブロックで故障が発生すると、優先順位の低い回路機能を切り捨てて、システムの機能を故障前の状態に近づけるように残存する回路ブロックを再構成する技術が提案されている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−４４５８１号公報
【特許文献２】特開２００１−３４４９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＦＰＧＡの再コンフィギュレーションを行ってもＦＰＧＡが正常動作しない場合、ハードウェア故障と判断して部品交換を行うことになる。ＦＰＧＡパッケージの多ピン化やピンピッチ（ピン間距離）の縮小化が進んでおり、新しいＦＰＧＡへの部品交換は、プリント基板からの剥離や接合に特殊な設備（Ｘ線装置、ヒートガン、レーザ等）が必要となり難易度が高く、多くの時間も要する。また、ＦＰＧＡを実装するプリント基板自体も高密度化が進んでおり、周辺部品への影響（熱、歪、振動）等を考慮すると部品交換ができないこともある。近年、ＦＰＧＡは高密度化や高性能化に伴って装置の主要部品として使用されるようになり、ＦＰＧＡが故障すると装置の動作への影響が大きい。１つの側面では、本発明の目的は、ハードウェア故障による部品交換の回数を低減し信頼性を向上させることができる半導体集積回路を提供することにある。
【課題を解決するための手段】
【０００８】
半導体集積回路の一態様は、入力される回路構成情報に基づいてコンフィギュレーションを行うことで回路構成が変更される論理ブロックを複数有する論理ブロック部と、少なくとも１つの論理ブロックを含む回路ブロックにてハードウェア故障を検出した場合、故障範囲に応じて論理ブロック部における実装位置を変更する実装位置演算部と、論理ブロック部における実装位置を実装位置演算部に従って変更し論理ブロック部の再コンフィギュレーションを行う制御部とを有する。実装位置演算部は、回路ブロックにてハードウェア故障を検出した場合、回路ブロックを逐次分割し細分化して故障範囲を特定し、特定した故障範囲内の論理ブロックの単位で構成する回路を移動させる正常動作する論理ブロックを決定する。
【発明の効果】
【０００９】
発明の一態様においては、半導体集積回路内の一部の回路でハードウェア故障が発生しても機能回復可能となり、ハードウェア故障による部品交換の回数を低減し信頼性を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態における半導体集積回路の構成例を示す図である。
【図２】本実施形態における半導体集積回路のハードウェア故障発生時の動作シーケンスの一例を示す図である。
【図３】本実施形態における実装位置変換を説明するための図である。
【図４】本実施形態における実装位置変換の一例を示す図である。
【図５】本実施形態における故障範囲特定処理の一例を説明するための図である。
【図６】本実施形態における故障範囲特定処理の他の例を説明するための図である。
【図７】本実施形態における機能回復方法の一例を示す図である。
【図８】本実施形態における機能回復処理の一例を示すフローチャートである。
【図９】本実施形態における機能回復方法の他の例を示す図である。
【図１０】本実施形態における機能回復処理の他の例を示すフローチャートである。
【図１１】本実施形態における機能回復処理のその他の例を示すフローチャートである。
【図１２】本実施形態における故障履歴管理テーブルの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態を図面に基づいて説明する。
【００１２】
図１は、本発明の一実施形態における半導体集積回路の構成例を示す図である。本実施形態における半導体集積回路１０は、入力されるコンフィギュレーションデータ（回路構成情報）に基づいてコンフィギュレーションを行うことによって論理ブロックの回路構成を変更できる、ユーザによりプログラム可能な半導体集積回路であり、例えばＦＰＧＡ（Field Programmable Gate Array）である。半導体集積回路１０は、論理ブロック部１１、コンフィギュレーション制御部１３、修復制御部１５、故障監視部１７、及び故障履歴管理テーブル１９を有する。
【００１３】
論理ブロック部１１は、ルックアップテーブル（ＬＵＴ）やフリップフロップ（ＦＦ）をそれぞれ有し、プログラム可能な回路を実現する論理回路の最小単位としての論理ブロック１２を複数有する。コンフィギュレーションデータ（回路構成情報）に基づいてコンフィギュレーションを行い、論理ブロック１２等を含む論理ブロック部１１の回路の構成を変更することで各種機能を実現することが可能となっている。なお、本実施形態における論理ブロック部１１は、論理ブロック部１１全体に限らず、部分的にコンフィギュレーションを行うことが可能になっている。
【００１４】
コンフィギュレーション制御部１３は、フラッシュメモリ等の不揮発性メモリ２０からコンフィギュレーションデータ（回路構成情報）を読み出し、コンフィギュレーションデータ（回路構成情報）に基づいて論理ブロック部１１における論理ブロック１２の回路構成や接続等を制御する。修復制御部１５は、実装位置演算部１６を有し、半導体集積回路１０においてハードウェア故障を検出した場合に機能回復させるための処理を行う。実装位置演算部１６は、論理ブロック部１１における故障範囲を特定する処理や、特定された故障範囲及び論理ブロック部１１の空き領域（未使用領域）に基づいて回路の実装位置を決めるための演算を行う。
【００１５】
故障監視部１７は、半導体集積回路１０（論理ブロック部１１）における故障を検出するための回路であり、例えばＦＰＧＡベンダーが提供するマクロやユーザが提供するチェック回路等である。故障履歴管理テーブル１９は、検出された故障範囲の履歴を保持するとともに、修復制御部１５の実装位置演算部１６での処理に用いるパラメータ等を保持する。故障履歴管理テーブル１９に保持されている情報は、半導体集積回路１０全体のコンフィギュレーションを行う場合に消失しないように、半導体集積回路１０全体のコンフィギュレーションを行う前に外部に退避させるか、あるいは内部に不揮発性の記憶部を設けて保存するようにする。
【００１６】
図２は、本実施形態における半導体集積回路のハードウェア故障発生時の動作シーケンスの一例を示す図である。まず、通常動作中に故障監視部１７は所定の回路ブロック単位で論理ブロック部１１の正常性チェックを行っており、ある回路ブロックでハードウェア故障を検出すると、修復制御部１５に故障検出を通知する（２０１）。
【００１７】
故障検出の通知を受けた修復制御部１５は、論理ブロック部１１における故障範囲を特定する処理を行うためにスケジューリングを行う（２０２）。スケジューリングでは、修復制御部１５は、故障履歴管理テーブル１９を参照して（２０３）、例えば故障範囲を特定するための分割情報（Ｎ）を取得して繰り返し処理する回数等を決定する。
【００１８】
その後、修復制御部１５は、故障範囲特定処理を開始し、論理ブロック部１１における故障範囲を特定するための診断を開始する（２０４）。故障範囲特定処理では、修復制御部１５は、故障が検出された回路ブロックを（１／Ｎ）に分割して診断用回路を部分的な再コンフィギュレーションにより生成して動作を検証する（２０５）。
【００１９】
故障範囲が特定されるまで、回路ブロックを再分割し部分的な再コンフィギュレーションにより診断用回路を生成する処理を繰り返すが、診断結果を故障履歴管理テーブル１９に書き込むまでの処理をスケジューリング（２０７）が管理している。そして、故障範囲が特定され診断結果が得られると（２０６）、修復制御部１５は、故障履歴管理テーブル１９に保持する故障結果を更新する（２０８）。故障範囲特定処理における内部処理は、故障範囲が特定されるまで回路ブロックの分割及び診断を繰り返し行う。
【００２０】
故障範囲特定処理によって故障範囲が特定されると、修復制御部１５は、故障範囲に実装される予定の回路構成を、故障範囲を避けて実装するための移動量を測定し（２０９）、故障履歴管理テーブル１９に保持する測定結果を更新する（２１０）。続いて、修復制御部１５は、故障範囲を避けて実装予定の回路構成を実装するための実装位置の変換量を示す移動ベクトルを決定する（２１１）。移動ベクトルの決定は故障履歴管理テーブル１９が保持する移動量の測定結果を参照して行われ（２１２）、決定した移動ベクトルは故障履歴管理テーブル１９に保持される（２１３）。
【００２１】
故障範囲を避けて実装するための移動ベクトルが決定すると、修復制御部１５は、コンフィギュレーション制御部１３に再コンフィギュレーションの開始を指示する（２１４）。修復制御部１５からの指示を受けたコンフィギュレーション制御部１３は、メモリ２０からコンフィギュレーションデータ（回路構成情報）を読み出して論理ブロック部１１の再コンフィギュレーションを行う（２１５）。
【００２２】
このとき、論理ブロック部１１の故障箇所に実装される予定の回路については、メモリ２０から読み出されたコンフィギュレーションデータ（回路構成情報）が修復制御部１５に供給されて実装位置が変換される（２１６）。修復制御部１５は、故障履歴管理テーブル１９に保持されている移動ベクトルを参照して（２１７）、故障箇所に実装される予定の回路の実装位置を変換する。そして、実装位置が変換されたコンフィギュレーションデータ（回路構成情報）に基づいて論理ブロック部１１のコンフィギュレーションが行われる（２１８）。
【００２３】
一方、論理ブロック部１１の通常箇所（故障箇所とは異なる箇所）については、メモリ２０から読み出されたコンフィギュレーションデータ（回路構成情報）に基づいて論理ブロック部１１のコンフィギュレーションが行われる（２１９）。そして、再コンフィギュレーションが完了すると、コンフィギュレーション制御部１３が修復制御部１５にコンフィギュレーションの完了を通知し（２２０）、完了通知を受けた修復制御部１５が故障監視部１７に故障監視の開始を指示して（２２１）、通常動作に戻る。
【００２４】
図３及び図４を参照して、本実施形態における半導体集積回路において故障箇所を避けて実装するための実装位置変換について説明する。メモリ２０に記憶されているコンフィギュレーションデータ（回路構成情報）では、例えば図３（Ａ）に示す実装イメージ３００のように実装位置が指定されているものとする。ここで、図３（Ｂ）に示す実際の半導体集積回路３０１のように回路部３０２で故障が検出されている場合、故障が検出された回路部３０２を避けるようにコンフィギュレーションデータ（回路構成情報）における実装位置を変換する。
【００２５】
なお、故障範囲を避けるようなコンフィギュレーションデータ（回路構成情報）を生成してメモリ２０に記憶する方法も考えられるが、故障が検出される度にコンフィギュレーションデータ（回路構成情報）を生成することは効率が悪い。そこで、本実施形態では、メモリ２０に記憶するコンフィギュレーションデータ（回路構成情報）は変えずに、半導体集積回路の内部で実装位置の座標変換を行うようにする。これにより、半導体集積回路において故障が検出されても、容易に故障範囲を避けた実装を実現し機能を回復させることが可能となる。
【００２６】
また、本実施形態では故障した回路を再配置する場合、図４に一例を示すように回路構成は何も変換せずに実装位置の座標を同じだけずらすようにして変換する。図４（Ａ）は故障した回路の実装位置を示しており、図４（Ｂ）は再配置後の実装位置を示している。図４（Ａ）及び図４（Ｂ）に示す例では、回路内の回路要素や信号線は変えずに、各回路要素の実装位置を示すＸ座標を５ずらすようしている。
【００２７】
次に、本実施形態における故障範囲特定処理について説明する。図５は、本実施形態における故障範囲特定処理の一例を説明するための図である。故障監視部１７による回路ブロック単位での論理ブロック部１１の正常性チェックにより、図５（Ａ）に示す回路ブロックＢＬＫ１においてハードウェア故障が検出されたとする。図５（Ａ）において、ハッチングが施されていない論理ブロック（ＬＵＴ／ＦＦ）が未使用の論理ブロックであり、ハッチングが施されている論理ブロック（ＬＵＴ／ＦＦ）が使用している論理ブロックである。また、使用している論理ブロックのうち、×印の論理ブロックがハードウェア故障している論理ブロックである。
【００２８】
回路ブロックＢＬＫ１においてハードウェア故障が検出されると、まず修復制御回路１５は、図５（Ｂ）に示すように回路ブロックＢＬＫ１をブロック５０１とブロック５０２とに左右に分割して故障範囲の特定を行う。修復制御回路１５は、ブロック５０１とブロック５０２とのそれぞれを部分的に再コンフィギュレーションし、論理ブロック１２を診断用回路にして動作を検証する。動作の検証は、例えば診断用回路として論理ブロック１２を読み書き可能なレジスタのような構成にして、正常にデータの読み書きが行えるか否かによって判断すれば良い。なお、診断用回路はこれに限らず、論理ブロック１２の動作が検証できる回路構成であれば良い。図５（Ｂ）に示した例の場合、ブロック５０１において故障が検出される。
【００２９】
ブロック５０１において故障が検出されると、続いて修復制御回路１５は、図５（Ｃ）に示すようにブロック５０１をブロック５１１とブロック５１２とに左右に分割して故障範囲の特定を行う。修復制御回路１５は、図５（Ｂ）に示した例と同様にして、ブロック５１１とブロック５１２とのそれぞれを部分的に再コンフィギュレーションし、論理ブロック１２を診断用回路にして動作を検証する。図５（Ｃ）に示した例の場合、ブロック５１２において故障が検出される。
【００３０】
ブロック５１２において故障が検出されると、続いて修復制御回路１５は、図５（Ｄ）に示すようにブロック５１２をブロック５２１とブロック５２２とに上下に分割して故障範囲の特定を行う。修復制御回路１５は、図５（Ｂ）に示した例と同様にして、ブロック５２１とブロック５２２とのそれぞれを部分的に再コンフィギュレーションし、論理ブロック１２を診断用回路にして動作を検証する。図５（Ｄ）に示した例の場合、ブロック５２１において故障が検出される。
【００３１】
ブロック５２１において故障が検出されると、続いて修復制御回路１５は、図５（Ｅ）に示すようにブロック５２１をブロック５３１とブロック５３２とに上下に分割して故障範囲の特定を行う。修復制御回路１５は、図５（Ｂ）に示した例と同様にして、ブロック５３１とブロック５３２とのそれぞれを部分的に再コンフィギュレーションし、論理ブロック１２を診断用回路にして動作を検証する。図５（Ｅ）に示した例の場合、ブロック５３２において故障が検出される。
【００３２】
ブロック５３２において故障が検出されると、続いて修復制御回路１５は、図５（Ｆ）に示すようにブロック５３２をブロック５４１とブロック５４２とに左右に分割して故障範囲の特定を行う。修復制御回路１５は、図５（Ｂ）に示した例と同様にして、ブロック５４１とブロック５４２とのそれぞれを部分的に再コンフィギュレーションし、論理ブロック１２を診断用回路にして動作を検証する。図５（Ｆ）に示した例の場合、ブロック５４１及びブロック５４２において故障が検出される。
【００３３】
図５（Ｆ）に示した例のように、分割したブロックのすべてで故障が検出されると、故障範囲特定処理を終了する。図５に示す例では、回路ブロックＢＬＫ１内のブロック５４１とブロック５４２とが故障範囲として特定されたこととなる。
【００３４】
なお、図５に示したハードウェア故障が検出された回路ブロックの分割方法は一例であり、これに限定されるものではない。各ブロックを縦方向（上下方向）に分割するか、横方向（左右方向）に分割するかは変更可能であり、回路ブロックを細分化する際の最小単位等も任意である。また、図５においては、故障が検出されたブロックを２分割する例を示したが、分割数も任意である。例えば、図６に示すように、ハードウェア故障が検出された回路ブロックＢＬＫ１を分割せずに、回路ブロックＢＬＫ１全体を再コンフィギュレーションして一括して動作の検証を行うようにしても良い。
【００３５】
次に、本実施形態における機能回復方法について説明する。図７は、本実施形態における半導体集積回路での機能回復方法の一例を示す図である。以下では、図７（Ａ）に示すように、回路ブロックＢＬＫ１内の使用している論理ブロック１２のうち、故障範囲７０１の論理ブロックの回路がハードウェア故障しているものとして説明する。
【００３６】
＜１＞故障した回路の実装位置を単に未使用の論理ブロックに変更する場合
まず、故障範囲７０１の故障した回路の実装位置を未使用の論理ブロックに変更する場合について説明する。これは、使用している論理ブロックのうち、故障していない論理ブロックについては実装位置の変更は行わずに、故障範囲７０１の故障した回路の実装位置を、例えば図７（Ｂ）に示すように未使用の論理ブロックの領域７１１に変更したり、図７（Ｃ）に示すように未使用の論理ブロックの領域７２１に変更したりする場合である。
【００３７】
図８は、図７（Ｂ）及び図７（Ｃ）に示したように故障した回路の実装位置を未使用の論理ブロックに変更することで機能回復させる機能回復処理の例を示すフローチャートである。故障監視部１７により論理ブロック部１１でのハードウェア故障が検出されると、機能回復処理を開始する。
【００３８】
まず、ステップＳ８０１にて、修復制御部１５は、前述した故障範囲特定処理を行い、故障範囲を特定する。故障範囲を特定すると、ステップＳ８０２にて、修復制御部１５は、故障履歴管理テーブル１９に保持する故障範囲の情報を更新するとともに使用可能なリソースを示すリソース情報等を更新する。次に、ステップＳ８０３にて、修復制御部１５は、更新したリソース情報に基づいて、故障した回路を配置可能な領域があるか否かを判断する。
【００３９】
故障した回路を配置可能な領域（リソース）がある、すなわち故障した回路を配置できる未使用の論理ブロックがある（Ｙｅｓ）と判断した場合、ステップＳ８０４にて、修復制御部１５は、故障した回路の実装位置をＸ方向（横方向）に変更する場合の移動量（Ｘ座標移動量）を計算する。Ｘ座標移動量は、故障面積分（図７に示した例では故障範囲７０１）の未使用の論理ブロックが確保できるまで、実装位置のＸ座標を移動させることで求める。
【００４０】
このとき、修復制御部１５は、故障履歴管理テーブル１９を参照し、移動先に故障している論理ブロックがあれば、故障している論理ブロックの先から再びＸ座標の移動を行って移動量を求める。なお、故障した回路の位置から一方の方向にＸ座標を移動させていき、移動可能なＸ座標の末端に達した場合には、故障した回路の位置から他方の方向にＸ座標を移動させていくようにしても良いし、Ｘ座標の始点（他方向側の末端）から一方の方向にＸ座標を移動させていくようにしても良い。
【００４１】
次に、ステップＳ８０５にて、修復制御部１５は、故障した回路の実装位置をＹ方向（縦方向）に変更する場合の移動量（Ｙ座標移動量）を計算する。Ｙ座標移動量は、故障面積分（図７に示した例では故障範囲７０１）の未使用の論理ブロックが確保できるまで、実装位置のＹ座標を移動させることで求める。
【００４２】
このとき、修復制御部１５は、故障履歴管理テーブル１９を参照し、移動先に故障している論理ブロックがあれば、故障している論理ブロックの先から再びＹ座標の移動を行って移動量を求める。なお、故障した回路の位置から一方の方向にＹ座標を移動させていき、移動可能なＹ座標の末端に達した場合には、故障した回路の位置から他方の方向にＹ座標を移動させていくようにしても良いし、Ｙ座標の始点（他方向側の末端）から一方の方向にＹ座標を移動させていくようにしても良い。
【００４３】
以上のようにして、Ｘ座標移動量及びＹ座標移動量を求めた後、ステップＳ８０６にて、修復制御部１５は、求めたＸ座標移動量及びＹ座標移動量に基づいて移動位置を決定する。修復制御部１５は、求めたＸ座標移動量及びＹ座標移動量のうち、移動量が少ない方を故障した回路の移動位置として決定する。これにより、ハードウェア故障が発生しても、少ない変更量で機能を回復させることができる。例えば、図７（Ｂ）及び図７（Ｃ）に示した例であればＸ方向に移動させた場合の移動量が少ないので、修復制御部１５は、Ｘ座標移動量だけＸ方向に移動した位置を故障した回路の実装位置として決定する。
【００４４】
そして、ステップＳ８０７にて、ステップＳ８０６において決定した移動位置に故障した回路の実装位置を変更して再コンフィギュレーションを行い、機能回復処理を終了する。なお、ステップＳ８０３での判断において、故障した回路を配置可能な領域（リソース）がない（Ｎｏ）、すなわち故障した回路を配置するには未使用の論理ブロックが不足していると判断した場合、修復不可（故障交換）であると判定し（Ｓ８０８）、機能回復処理を終了する。
【００４５】
＜２＞故障した回路に加えて故障していない回路の実装位置も変更する場合
次に、より厳密なタイミングが求められる場合など、故障範囲７０１の故障した回路に加えて、故障していない回路の実装位置もあわせて変更する場合について説明する。これは、例えば図９（Ａ）に示すように故障範囲７０１の故障した回路の実装位置を領域９１１に変更するとともに故障していない回路の実装位置を領域９１２に変更したり、図９（Ｂ）に示すように故障範囲７０１の故障した回路の実装位置を領域９２１に変更するとともに故障していない回路の実装位置を領域９２２に変更したりする場合である。
【００４６】
図１０は、図９（Ａ）及び図９（Ｂ）に示したように故障した回路に加えて、故障していない回路の実装位置もあわせて変更することで機能回復させる機能回復処理の例を示すフローチャートである。故障監視部１７により論理ブロック部１１でのハードウェア故障が検出されると、機能回復処理を開始する。
【００４７】
まず、ステップＳ１００１にて、修復制御部１５は、前述した故障範囲特定処理を行い、故障範囲を特定する。故障範囲を特定すると、ステップＳ１００２にて、修復制御部１５は、故障履歴管理テーブル１９に保持する故障範囲の情報を更新するとともに使用可能なリソースを示すリソース情報等を更新する。次に、ステップＳ１００３にて、修復制御部１５は、更新したリソース情報に基づいて、故障した回路を配置可能な領域があるか否かを判断する。
【００４８】
故障した回路を配置可能な領域（リソース）がある（Ｙｅｓ）と判断した場合、ステップＳ１００４にて、修復制御部１５は、故障した回路の実装位置をＸ方向（横方向）に変更する場合の移動量（Ｘ座標移動量）を計算する。Ｘ座標移動量は、故障面積分（図９に示した例では故障範囲７０１）の故障していない論理ブロックが確保できるまで、実装位置のＸ座標を移動させることで求める。なお、移動先の論理ブロックが使用する論理ブロックである場合には、それも合わせて実装位置のＸ座標を移動させる。
【００４９】
このとき、修復制御部１５は、故障履歴管理テーブル１９を参照し、移動先に故障している論理ブロックがあれば、故障している論理ブロックの先から再びＸ座標の移動を行って移動量を求める。なお、故障した回路の位置から一方の方向にＸ座標を移動させていき、移動可能なＸ座標の末端に達した場合には、故障した回路の位置から他方の方向にＸ座標を移動させていくようにしても良いし、Ｘ座標の始点（他方向側の末端）から一方の方向にＸ座標を移動させていくようにしても良い。
【００５０】
次に、ステップＳ１００５にて、修復制御部１５は、故障した回路の実装位置をＹ方向（縦方向）に変更する場合の移動量（Ｙ座標移動量）を計算する。Ｙ座標移動量は、故障面積分（図９に示した例では故障範囲７０１）の故障していない論理ブロックが確保できるまで、実装位置のＹ座標を移動させることで求める。なお、移動先の論理ブロックが使用する論理ブロックである場合には、それも合わせて実装位置のＹ座標を移動させる。
【００５１】
このとき、修復制御部１５は、故障履歴管理テーブル１９を参照し、移動先に故障している論理ブロックがあれば、故障している論理ブロックの先から再びＹ座標の移動を行って移動量を求める。なお、故障した回路の位置から一方の方向にＹ座標を移動させていき、移動可能なＹ座標の末端に達した場合には、故障した回路の位置から他方の方向にＹ座標を移動させていくようにしても良いし、Ｙ座標の始点（他方向側の末端）から一方の方向にＹ座標を移動させていくようにしても良い。
【００５２】
以上のようにして、Ｘ座標移動量及びＹ座標移動量を求めた後、ステップＳ１００６にて、修復制御部１５は、求めたＸ座標移動量及びＹ座標移動量に基づいて移動位置を決定する。ここでは、例えば修復制御部１５は、求めたＸ座標移動量及びＹ座標移動量に応じて実装位置を移動させたとき、正常な回路の総移動量（移動座標×移動数）が少ないものを故障した回路の移動位置として決定する。これにより、ハードウェア故障が発生しても、論理ブロック間の信号配線等を含めて少ない回路変更量でかつタイミング性能の低下を抑制して機能を回復させることができる。例えば、図９（Ａ）及び図９（Ｂ）に示した例であればＸ方向に移動させた場合の総移動量が１２（２×６）であり、Ｙ方向に移動させた場合の総移動量が３０（３×１０）であるので、修復制御部１５は、求めたＸ座標移動量に基づいて変更後の回路の実装位置を決定する。
【００５３】
そして、ステップＳ１００７にて、ステップＳ１００６において決定した移動位置に回路の実装位置を変更して再コンフィギュレーションを行い、機能回復処理を終了する。なお、ステップＳ１００３での判断において、故障した回路を配置可能な領域（リソース）がない（Ｎｏ）と判断した場合、修復不可（故障交換）であると判定し（Ｓ１００８）、機能回復処理を終了する。
【００５４】
なお、図８や図１０に示した例では、Ｘ座標移動量計算を行った後にＹ座標移動量計算を行うようにしているが、Ｘ座標移動量計算及びＹ座標移動量計算を行う順序は任意である。また、ある方向において移動量計算を行う際に、一方の方向に限らず逆の他方の方向（座標におけるプラス方向及びマイナス方向）についてもそれぞれ移動量計算を行うようにしても良く、求めた移動量の内の最小の移動量に基づいて移動位置を決定すれば良い。また、前述した説明では、横方向又は縦方向に実装位置を変更する例を示したが、横方向又は縦方向に限らず、斜め方向に実装位置を変更する場合を含んでも良い。
【００５５】
図１１は、故障した回路の実装位置を任意の方向に変更する場合における機能回復処理の例を示すフローチャートである。故障監視部１７により論理ブロック部１１でのハードウェア故障が検出されると、機能回復処理を開始する。
【００５６】
まず、ステップＳ１１０１にて、修復制御部１５は、前述した故障範囲特定処理を行い、故障範囲を特定する。故障範囲を特定すると、ステップＳ１１０２にて、修復制御部１５は、故障履歴管理テーブル１９に保持する故障範囲の情報を更新するとともに使用可能なリソースを示すリソース情報等を更新する。次に、ステップＳ１１０３にて、修復制御部１５は、更新したリソース情報に基づいて、故障した回路を配置可能な領域があるか否かを判断する。
【００５７】
故障した回路を配置可能な領域（リソース）がある（Ｙｅｓ）と判断した場合、ステップＳ１１０４へ進む。ステップＳ１１０４にて、修復制御部１５は変数ｉを０に初期化する。次に、ステップＳ１１０５にて、修復制御部１５は変数ｉを１インクリメントする。ステップＳ１１０６にて、修復制御部１５は、移動距離が変数ｉに応じた距離となるように、故障した回路の実装位置をＸ方向（横方向）にΔＸ分移動させるとともにＹ方向（縦方向）にΔＹ分移動させる。
【００５８】
次に、ステップＳ１１０７にて、修復制御部１５は、移動距離が変数ｉに応じた距離となるように移動させたときに、故障面積分の空き論理ブロックが確保できる位置があるか否かを判断する。故障面積分の空き論理ブロックが確保できる位置がない（Ｎｏ）と判断した場合、ステップＳ１１０５に戻り、変数ｉを増加、すなわち移動距離を増加させてステップＳ１１０５の処理を再び行う。
【００５９】
一方、ステップＳ１１０７での判断の結果、故障面積分の空き論理ブロックが確保できる位置がある場合（Ｙｅｓ）には、修復制御部１５は、その位置を回路の移動位置として決定する。そして、ステップＳ１１０８にて、決定した移動位置に回路の実装位置を変更して再コンフィギュレーションを行い、機能回復処理を終了する。なお、ステップＳ１１０３での判断において、故障した回路を配置可能な領域（リソース）がない（Ｎｏ）と判断した場合、修復不可（故障交換）であると判定し（Ｓ１１０９）、機能回復処理を終了する。
【００６０】
図１２は、本実施形態における故障履歴管理テーブルの一例を示す図である。本実施形態において故障履歴管理テーブルは、例えば回路ブロック単位での故障履歴を第１の故障履歴として保持し、回路ブロック毎に細分化した詳細領域単位での故障履歴を第２の故障履歴として保持するような階層構造を有している。図１２（Ａ）及び図１２（Ｂ）には、４つの回路ブロックＢＬＫ１１、ＢＬＫ１２、ＢＬＫ２１、ＢＬＫ２２を有し、各回路ブロックを９つの詳細領域に分割した例を示している。なお、各詳細領域は９つの論理ブロックを含む。
【００６１】
図１２（Ａ）に示すように、第１の故障履歴は、４つの回路ブロックＢＬＫ１１、ＢＬＫ１２、ＢＬＫ２１、ＢＬＫ２２における故障の有無を示しており、故障した論理ブロックが含まれる場合が“１”であり、故障した論理ブロックが含まれない場合が“０”であるものとする。また、図１２（Ｂ）に示すように、第２の故障履歴は、回路ブロック毎に９つの詳細領域における故障の有無を示しており、故障した論理ブロックが含まれる場合が“１”であり、故障した論理ブロックが含まれない場合が“０”であるものとする。
【００６２】
図１２（Ｂ）においては、回路ブロックＢＬＫ２２の９つの詳細領域ＢＬＫ２２−１１、ＢＬＫ２２−１２、ＢＬＫ２２−１３、ＢＬＫ２２−２１、ＢＬＫ２２−２２、ＢＬＫ２２−２３、ＢＬＫ２２−３１、ＢＬＫ２２−３２、ＢＬＫ２２−３３の第２の故障履歴を一例として示している。図１２（Ｂ）に示す例では、回路ブロックＢＬＫ２２の詳細領域ＢＬＫ２２−２３に故障した論理ブロックが含まれているので、回路ブロックＢＬＫ２２に対応する第１の故障履歴が“１”となり、詳細領域ＢＬＫ２２−２３に対応する回路ブロックＢＬＫ２２の第２の故障履歴が“１”となっている。
【００６３】
故障履歴管理テーブルをこのような構成とすることで、故障履歴管理テーブルを参照する際に情報として要求する分割単位での故障履歴を参照することができ、効率良く参照することができる。例えば、第１の故障履歴を参照すれば、回路ブロックにおける故障した論理ブロックの有無がわかるので、回路ブロックが故障した論理ブロックを有しないと判定できれば第２の故障履歴を参照することなく、すべての論理ブロックが故障していないことを速やかに判定できることとなる。また、例えば第１の故障履歴のすべてが“１”、すなわちすべての回路ブロックに故障した論理ブロックが含まれる場合、半導体集積回路の寿命として部品交換を行うようにしても良い。
【００６４】
本実施形態によれば、ハードウェア故障が発生した場合、半導体集積回路内で、回路ブロックを細分化していき故障範囲を特定し、特定した故障範囲の論理ブロックを避けるように実装位置を変更して再コンフィギュレーションを行うことにより、ハードウェア故障が発生しても機能回復することが可能となる。したがって、ハードウェア故障による部品交換の回数を低減し信頼性を向上させることができる。
【００６５】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６６】
１０  半導体集積回路
１１  論理ブロック部
１２  論理ブロック
１３  コンフィギュレーション制御部
１５  修復制御部
１６  実装位置演算部
１７  故障監視部
１９  故障履歴管理テーブル
２０  メモリ
【図１】
2017111579.tif 000003
【図２】
2017111579.tif 000004
【図３】
2017111579.tif 000005
【図４】
2017111579.tif 000006
【図５】
2017111579.tif 000007
【図６】
2017111579.tif 000008
【図７】
2017111579.tif 000009
【図８】
2017111579.tif 000010
【図９】
2017111579.tif 000011
【図１０】
2017111579.tif 000012
【図１１】
2017111579.tif 000013
【図１２】
2017111579.tif 000014