(57)【特許請求の範囲】
【請求項１】
ＬＳＩ内部の論理回路をプログラミングすることができる第１の半導体チップと、
前記第１の半導体チップの複数の回路情報が記憶される半導体メモリと、
前記半導体メモリに記憶されている前記回路情報を用いて、前記第１の半導体チップへのコンフィグレーションを制御するにあたり、前記複数の回路情報のいずれかでコンフィグレーションに失敗した場合、前記複数の回路情報のうちの他の回路情報で再コンフィグレーションを行う第２の半導体チップと、
前記複数の回路情報のうち、いずれの回路情報を用いてコンフィグレーションが行われたのかを前記第２の半導体チップから前記第１の半導体チップへ通知するための信号線と
を備えるコンフィグレーション制御システム。
【請求項２】
前記第２の半導体チップが、前記半導体メモリに記憶されている前記回路情報のうち、いずれの回路情報を用いてコンフィグレーションを行ったのかを前記第１の半導体チップへ通知するための信号線を有する
請求項１に記載のコンフィグレーション制御システム。
【請求項３】
前記半導体メモリには、前記コンフィグレーションに用いられた前記回路情報を示す起動面情報と、各回路情報の開始位置及び終了位置を示すアドレス情報とが更に記憶される
請求項１又は２に記載のコンフィグレーション制御システム。
【請求項４】
半導体メモリに記憶されているＬＳＩ内部の論理回路をプログラミングすることができる第１の半導体チップの複数の回路情報を用いて、前記第１の半導体チップへのコンフィグレーションを制御するにあたり、前記複数の回路情報のいずれかでコンフィグレーションに失敗した場合、前記複数の回路情報のうちの他の回路情報で第２の半導体チップが再コンフィグレーションを行う段階と、
前記第１の半導体チップと前記第２の半導体チップとを接続する信号線を介して、前記複数の回路情報のうち、いずれの回路情報を用いてコンフィグレーションが行われたのかを前記第２の半導体チップから前記第１の半導体チップへ通知する段階と
を含むコンフィグレーション制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンフィグレーション制御システム及びコンフィグレーション制御方法に関する。
【背景技術】
【０００２】
ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）は、デジタル機器やネットワーク機器の進歩を支えているデジタル回路を構成するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）の一つである。ＬＳＩは、機器の中で信号処理や制御等を実行する論理ＬＳＩとデータやプログラムを蓄積するメモリに大別される。ＦＰＧＡは、このうちの論理ＬＳＩに分類される。【０００３】
通常の暮らしのなかでは、消費者がＦＰＧＡを目にする機会はほとんどない。しかしながら、電子機器の開発者が試作機を作って完成度を高めていく過程では、必ずと言っていいほどＦＰＧＡを使っている。また、最近では、消費者が購入する製品の中にもＦＰＧＡが搭載されるようになった。【０００４】
ＦＰＧＡは、カスタムＬＳＩであるＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、標準ＬＳＩであるＡＳＳＰ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｓｔａｎｄａｒｄ  Ｐｒｏｄｕｃｔｓ）、マイクロプロセッサ等、他の論理ＬＳＩにはない固有の特徴を持っている。固有の特徴とは、電子回路を自由にプログラミングできるという特徴である。この特徴は、複雑化、大規模化、高コスト化、商品寿命の短期化が進む電子機器の開発トレンドに、ピタリと合っていると言える。【０００５】
マイクロプロセッサの登場で、ソフトウェアを書き換えて機器の機能を自由に変更できるようになった。しかしながら、マイクロプロセッサを用いても、使う演算器の種類やメモリの構成といった、ハードウェアまで変更することはできなかった。ＦＰＧＡを使った場合には、性能向上や消費電力の低減等に向けて、ハードウェアである回路構成を自由に変更できる。ＦＰＧＡの応用は、こうした特徴のために、携帯電話の基地局や半導体製造装置のような最先端の産業機器から、デジタル家電、モバイル機器等、身の周りの機器まで広がっている。【０００６】
このような背景に関連する技術としては、様々なものが知られている（例えば、特許文献１〜３参照。）。【０００７】
例えば、特許文献１には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、メモリと、これらＣＰＵ及びメモリの配下のバスと、このバス上に配置され、ＦＰＧＡのコンフィグレーション制御をなすコンフィグレーション制御手段とを含む情報処理システムが記載されている。より具体的に説明すると、この情報処理システムは、コンフィグレーション制御の開始から終了までの間、ＦＰＧＡをバスから切り離すためのバススイッチを含む。このようにして、この情報処理システムには、コンフィグレーション制御されるＦＰＧＡがシステムバス等を収容している場合、リセット信号をバススイッチのイネーブル信号として使用して、バスからＦＰＧＡを分離し、システムの連続可用性を実現させるという効果がある。【０００８】
また、例えば、特許文献２には、電源投入後の起動時に、第１のメモリ及び第２のメモリに記憶された論理回路データのうちのいずれか一方のメモリの論理回路データを読み出してコンフィグレーションし、論理回路の構成を決定するプログラマブル論理回路の起動保証方法が記載されている。より具体的に説明すると、このプログラマブル論理回路の起動保証方法は、プログラマブル論理回路の起動時において、プログラマブル論理回路が、初期化を行った後に、第１のメモリに記憶された論理回路データを読み出し、コンフィグレーションを行ってこれが完了するまでのプログラマブル論理回路におけるコンフィグレーションの経過時間を監視し、経過時間が設定時間を超えると、第１のメモリが異常であると判断して異常通知信号を発生する。そして、このプログラマブル論理回路の起動保証方法は、異常通知信号を受信すると、第１のメモリを第２のメモリに切り替え、第２のメモリに記憶された論理回路データを用いて再度プログラマブル論理回路に対してコンフィグレーションを行わせる。このようにして、このプログラマブル論理回路の起動保証方法を用いると、コンフィグレーション用の第１のメモリが故障している場合でも、自動的に第２のメモリに切り替えてプログラマブル論理回路のコンフィグレーションを実行できる。【０００９】
また、例えば、特許文献３には、電源投入後に第１のコンフィグレーションＲＯＭ（Ｒｅａｄ  ｏｎｌｙ  Ｍｅｍｏｒｙ）及び第２のコンフィグレーションＲＯＭに記憶された回路情報をＦＰＧＡが読み込んでＦＰＧＡをコンフィグレーションするコンフィグレーション手法が記載されている。より具体的に説明すると、このコンフィグレーション手法は、最初にＦＰＧＡが第１のコンフィグレーションＲＯＭからコンフィグレーションを開始する。そして、このコンフィグレーション手法は、第１のコンフィグレーションＲＯＭからコンフィグレーションしているときに、ＦＰＧＡからコンフィグレーションエラー検出信号が出力された場合は、コンフィグレーション経路を第２のコンフィグレーションＲＯＭに切り替え、第２のコンフィグレーションＲＯＭからコンフィグレーションを開始する。このようにして、このコンフィグレーション手法を用いると、電源を投入してからＦＰＧＡが起動するまでの時間を短縮しつつ、ＦＰＧＡの起動を保証することができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】日本特開２００４−０２１８６７号公報
【特許文献２】日本特開２０１０−０６６９６１号公報
【特許文献３】日本特開２０１２−１９０３６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
プログラマブルデバイスは、デバイスプロセスの微細化が進み、消費電力、性能、コスト等の観点で恩恵を受けられるようになってきた一方で、宇宙線に起因するソフトエラーの影響を受けやすい。【００１２】
そのため、プログラマブルデバイスは、ハードウェア障害でないのにも関わらず、正常に起動しない現象が見られるようになり、そのたびにハードウェア改修を実施しなければならず、余計な工数や費用が発生してしまう。また、ＦＰＧＡがスタックしてシステムダウンした場合には、運用中の顧客にも迷惑をかけてしまうことから、フェールセーフの観点からも問題がある。ソフトエラーとは、地表に到達するα線や中性子線等の宇宙線が原因で起きる現象であり、半導体チップの記憶部データが一時的に書き換えられていたり、フリップフロップの論理値が反転したりすることである。【００１３】
ソフトエラーは、ハードウェアの故障ではなく一過性の不良であるため、再現性がなく解析が困難ではあるが、一般的には、誤り検出訂正回路を実装して、ソフトエラーの検出、訂正を行うことで回避が可能である。ＦＰＧＡは、同様に、コンフィグレーション時にソフトエラーが原因で回路情報であるビットストリームのあるビットが反転してしまうことがある。ＦＰＧＡは、内部にＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）回路のハードＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）を実装し、入力される回路情報の異常を検出する仕組みを有する。しかしながら、ＦＰＧＡを搭載するシステムとしては、回路情報に異常が生じることで以下の問題が発生する。【００１４】
第１の問題は、ＦＰＧＡ側ではＣＲＣ回路を用いて回路情報の異常を検出することはできるが、異常ビットを訂正することができないことである。【００１５】
第２の問題は、第１の問題のために、ハードウェアの故障ではないのにも関わらずＦＰＧＡを起動させることができず、システムとしてスタックしてしまうことである。【００１６】
第３の問題は、第２の問題の状態では、ＣＰＵ等からＦＰＧＡにアクセスすることができないため、システムに実装されているソフトウェアは、ＦＰＧＡのハードウェア故障としか認識することができないことである。【００１７】
第４の問題は、開発フェーズの段階であれば、マニュアルで電源オン／オフやシステムリセット等を行い、コンフィグレーションを再度実施すればよいが、運用中のシステムではマニュアルでの復旧は容易ではないことである。【００１８】
これらのために、ＦＰＧＡを搭載するシステムは、ハードウェア故障としてカテゴライズされてしまうために、顧客の同意を得られないことになる。【００１９】
一方、特許文献１に記載の技術を用いた場合、ＦＰＧＡのコンフィグレーションを行う間、リセット信号に応答してＦＰＧＡを切り離してしまうために、ソフトエラーが発生した場合に、システムダウンすることなくＦＰＧＡを起動させることができない。【００２０】
また、特許文献２に記載の技術を用いた場合、コンフィグレーション時間を測定して、その時間が、ある閾値を超えたことを判断するコンフィグレーション用異常監視回路を備える必要がある。通常、コンフィグレーション時間は、ＦＰＧＡのデバイスの種類に応じて変動するために、使用するＦＰＧＡごとに、コンフィグレーション用異常監視回路をリデザインしなければならず、回路構成が複雑化する。そして、特許文献２に記載の技術を用いると、コンフィグレーション用メインメモリ（第１のメモリ）とコンフィグレーション用サブメモリ（第２のメモリ）の両方が異常を示した場合、無限ループに陥ることになる。【００２１】
そして、特許文献３に記載の技術を用いた場合、電源オン後に最初に読み込む回路情報は、第１のコンフィグレーションＲＯＭに記憶されているデータに限定される。そのため、特許文献３に記載の技術を用いた場合、第１のコンフィグレーションＲＯＭに記憶されているデータでコンフィグレーションに失敗し、第２のコンフィグレーションＲＯＭに記憶されているデータでコンフィグレーションに成功した場合、その後に第１のコンフィグレーションＲＯＭに記憶されているデータを修復する必要がある。また、特許文献３に記載の技術を用いた場合、コンフィグレーションＲＯＭ内のデータを更新する際に、第２のコンフィグレーションＲＯＭに最初に更新データを書き込んでから、第１のコンフィグレーションＲＯＭに更新データを再度書込み直さなければならない。【００２２】
このように、特許文献１〜３に記載の技術を用いると、ソフトエラーが発生した場合に、システムダウンすることなくＦＰＧＡを起動させることができないなどの様々な問題が生じる。【００２３】
本発明の目的は、上述した課題を解決するコンフィグレーション制御システム及びコンフィグレーション制御方法を提供することにある。
【課題を解決するための手段】
【００２４】
上記課題を解決するために、本発明の第１の形態は、コンフィグレーション制御システムであって、ＬＳＩ内部の論理回路をプログラミングすることができる第１の半導体チップと、第１の半導体チップの複数の回路情報が記憶される半導体メモリと、半導体メモリに記憶されている回路情報を用いて、第１の半導体チップへのコンフィグレーションを制御するにあたり、複数の回路情報のいずれかでコンフィグレーションに失敗した場合、複数の回路情報のうちの他の回路情報で再コンフィグレーションを行う第２の半導体チップと、複数の回路情報のうち、いずれの回路情報を用いてコンフィグレーションが行われたのかを第２の半導体チップから第１の半導体チップへ通知するための信号線とを備える。
【００２５】
本発明の第２の形態は、コンフィグレーション制御方法であって、半導体メモリに記憶されているＬＳＩ内部の論理回路をプログラミングすることができる第１の半導体チップの複数の回路情報を用いて、第１の半導体チップへのコンフィグレーションを制御するにあたり、複数の回路情報のいずれかでコンフィグレーションに失敗した場合、複数の回路情報のうちの他の回路情報で第２の半導体チップが再コンフィグレーションを行う段階と、第１の半導体チップと第２の半導体チップとを接続する信号線を介して、複数の回路情報のうち、いずれの回路情報を用いてコンフィグレーションが行われたのかを第２の半導体チップから第１の半導体チップへ通知する段階とを含む。
【００２６】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となり得る。
【発明の効果】
【００２７】
以上の説明から明らかなように、この発明は、ソフトエラーが発生した場合に、システムダウンすることなくＦＰＧＡを起動させることができる。
【図面の簡単な説明】
【００２８】
【図１】一実施形態に係るコンフィグレーション制御システム１００のブロック構成の一例を示す図である。
【図２】コンフィグレーション制御システム１００の基本的なコンフィグレーションシーケンスを説明するフローチャートである。
【図３】フラッシュメモリ１０１のアドレスマップの一例を示す図である。
【図４】図３のフラッシュメモリ１０１のアドレスマップにアドレス値を挿入した図である。
【図５】フラッシュメモリ１０１、１０２のアドレスマップの一例を示す図である。
【図６】図５のフラッシュメモリ１０１、１０２のアドレスマップにアドレス値を挿入した図である。
【図７】ＰＬＤ１０３の状態遷移図である。
【図８】コンフィグレーション制御システム１００の具体的なコンフィグレーションシーケンスを説明するフローチャートである。
【図９】コンフィグレーション制御システム１００の具体的なコンフィグレーションシーケンスを説明するフローチャートである。
【図１０】コンフィグレーション制御システム１００の具体的なコンフィグレーションシーケンスを説明するフローチャートである。
【図１１】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１２】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１３】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１４】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１５】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１６】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１７】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【図１８】コンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。
【発明を実施するための形態】
【００２９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではなく、また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００３０】
図１は、一実施形態に係るコンフィグレーション制御システム１００のブロック構成の一例を示す。コンフィグレーション制御システム１００は、ＦＰＧＡ、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）に回路情報を書き込むシステムである。
【００３１】
コンフィグレーション制御システム１００は、フラッシュメモリ１０１、フラッシュメモリ１０２、ＰＬＤ１０３、ＦＰＧＡ１０４、ＣＰＵ１０５、パソコン１０６、および、ＪＴＡＧ（Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）インターフェース１１０を備える。
【００３２】
フラッシュメモリ１０１及びフラッシュメモリ１０２は、データの消去、書き込みを自由に行うことができ、電源を切っても内容が消えない半導体メモリの一種である。例えば、フラッシュメモリ１０１及びフラッシュメモリ１０２は、ＣＦＩ（Ｃｏｍｍｏｎ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ）を介して、ＰＬＤ１０３に接続されている。そして、フラッシュメモリ１０１及びフラッシュメモリ１０２には、デザイン固有のプログラミングデータを有する、２つの第１回路情報Ａ及び第２回路情報Ｂが記憶される。また、フラッシュメモリ１０１及びフラッシュメモリ１０２は、第１回路情報Ａを記憶するための第１記憶領域（図３、５参照）Ｃ、第２回路情報Ｂを記憶するための第２記憶領域（図３、５参照）Ｄを有する。また、フラッシュメモリ１０１及びフラッシュメモリ１０２は、いずれの回路情報Ａ（Ｂ）でコンフィグレーションを行うかを示す起動面情報を記憶するための起動面情報領域（図３、５参照）Ｅを有する。また、フラッシュメモリ１０１及びフラッシュメモリ１０２は、各回路情報Ａ、Ｂの開始位置を示す開始アドレス値と各回路情報Ａ、Ｂの終了位置を示す終了アドレス値とを記憶するための開始／終了アドレス情報領域（図３、５参照）Ｆを有する。なお、ここでは、各回路情報Ａ、Ｂを起動面として取り扱う。フラッシュメモリ１０１及びフラッシュメモリ１０２は、本発明における「半導体メモリ」の一例である。
【００３３】
ＰＬＤ１０３は、揮発性プログラマブルデバイスであって、フラッシュメモリ１０１及びフラッシュメモリ１０２に記憶されている各回路情報Ａ、Ｂを読み出して、ＦＰＧＡ１０４のコンフィグレーションシーケンスをコントロールする機能を担う。ＰＬＤ１０３は、インターフェースＣｏｎｆｉｇ  Ｉ／Ｆを通じてＦＰＧＡ１０４に接続されている。ＰＬＤ１０３は、フラッシュメモリ１０１及びフラッシュメモリ１０２に記憶されている各回路情報Ａ、Ｂを読み出して、ＦＰＧＡ１０４に対し、それら各回路情報Ａ、Ｂにて実装するコンフィグレーションを行う。そして、ＰＬＤ１０３は、フラッシュメモリ１０１及びフラッシュメモリ１０２に記憶されている各回路情報Ａ、Ｂのうちのいずれの回路情報Ａ（Ｂ）でコンフィグレーションを行ったかをＦＰＧＡ１０４に通知するための信号線１０７を有する。信号線１０７は、１ｂｉｔ信号を転送する信号線であり、ＦＰＧＡ１０４がコンフィグレーションを行っている間は、ＰＬＤ１０３からのレベル信号をＦＰＧＡ１０４に与える。ＰＬＤ１０３は、本発明における「第２の半導体チップ」の一例である。ＰＬＤ１０３は、第１回路情報Ａでコンフィグレーションに失敗した場合、他の第２回路情報Ｂで再コンフィグレーションを行わせるためのリトライシーケンサを有する。
【００３４】
ＦＰＧＡ１０４は、ＰＬＤ１０３から受け取った各回路情報Ａ、Ｂを監視して各回路情報Ａ、Ｂにソフトエラー等に起因するデータ化けが発生していないかの整合性のチェックを実施する。ＦＰＧＡ１０４は、本発明における「第１の半導体チップ」の一例である。ＦＰＧＡ１０４は、ケーブル１０８を通じてＣＰＵ１０５に接続されている。
【００３５】
ＣＰＵ１０５は、バージョンアップ等に伴ってＦＰＧＡ１０４の回路を更新する際に、ＣＰＵ１０５からＦＰＧＡ１０４を経由し、インターフェースＯｒｉｇｉｎａｌ  Ｉ／Ｆを通じてフラッシュメモリ１０１及びフラッシュメモリ１０２に各回路情報Ａ、Ｂを書き込ませる。
【００３６】
パソコン１０６は、ケーブル１０９に接続されたＪＴＡＧインターフェース１１０ならびにケーブル１１１および１１２を介してＰＬＤ１０３、ＦＰＧＡ１０４に接続されている。また、パソコン１０６は、ケーブル１１３を通じてＣＰＵ１０５に接続されている。
【００３７】
図２は、コンフィグレーション制御システム１００の基本的な制御動作を説明するフローチャートである。この場合、コンフィグレーション制御システム１００は、単一のフラッシュメモリ１０１を有し、フラッシュメモリ１０１は、第１記憶領域Ｃに第１回路情報Ａを記憶し、第２記憶領域Ｄに第２回路情報Ｂを記憶することができる。なお、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合、フラッシュメモリ１０１は、第１記憶領域Ｃに第１回路情報Ａを記憶し、フラッシュメモリ１０２は、第２記憶領域Ｄに第２回路情報Ｂを記憶することができる。ＣＰＵ１０５は、制御を開始すると、パワーオンリセットか再コンフィグレーション指示を実行する（ステップＳ１０１）。次に、ＰＬＤ１０３は、フラッシュメモリ１０１に記憶されている２つの回路情報Ａ、Ｂのうち、一方の第１回路情報Ａをリードする（ステップＳ１０２）。続いて、ＰＬＤ１０３は、第１回路情報ＡのリードデータをＦＰＧＡ１０４に送信する（ステップＳ１０３）。そして、ＦＰＧＡ１０４は、受信した第１回路情報Ａのデータに対してソフトエラーの有無をチェックする（ステップＳ１０４）。次に、ＣＰＵ１０５は、ソフトエラーが発生しているか否かを判定する（ステップＳ１０５）。ＦＰＧＡ１０４は、ステップＳ１０５の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、第１回路情報Ａのデータでコンフィグレーションを実施する（ステップＳ１０６）。次に、ＦＰＧＡ１０４は、すべてのデータをコンフィグレーションした後に、ユーザモードに切り替わり、第１回路情報Ａのデータのデザインで起動する（ステップＳ１０７）。そして、ＣＰＵ１０５は、正常運用を行う（ステップＳ１０８）。
【００３８】
ＦＰＧＡ１０４は、ステップＳ１０５の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、第１回路情報ＡのデータでのコンフィグレーションのＮＧ（Ｎｏ  Ｇｏｏｄ）を検出する（ステップＳ１０９）。次に、ＰＬＤ１０３は、フラッシュメモリ１０１に記憶されている２つの回路情報Ａ、Ｂのうち、他方の第２回路情報Ｂをリードする（ステップＳ１１０）。続いて、ＰＬＤ１０３は、第２回路情報ＢのリードデータをＦＰＧＡ１０４に送信する（ステップＳ１１１）。そして、ＦＰＧＡ１０４は、受信した第２回路情報Ｂのデータに対してソフトエラーの有無をチェックする（ステップＳ１１２）。次に、ＣＰＵ１０５は、ソフトエラーが発生しているか否かを判定する（ステップＳ１１３）。ＦＰＧＡ１０４は、ステップＳ１１３の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、第２回路情報Ｂのデータでコンフィグレーションを実施する（ステップＳ１１４）。次に、ＦＰＧＡ１０４は、すべてのデータをコンフィグレーションした後に、ユーザモードに切り替わり、第２回路情報Ｂのデータのデザインで起動する（ステップＳ１１５）。そして、ＣＰＵ１０５は、ソフトエラー検出か正常運用を行う（ステップＳ１１６）。
【００３９】
ＦＰＧＡ１０４は、ステップＳ１１３の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、第２回路情報ＢのデータでのコンフィグレーションのＮＧを検出する（ステップＳ１１７）。すると、ＦＰＧＡ１０４は、スタックしてアクセス不可となる（ステップＳ１１８）。そして、ＣＰＵ１０５は、ハードウェア障害を検出する（ステップＳ１１９）。なお、フラッシュメモリ１０１及びフラッシュメモリ１０２を有するコンフィグレーション制御システム１００の場合も、上記と同様なルーチンを実行することができる。
【００４０】
図３は、フラッシュメモリ１０１のアドレスマップの一例を示す図である。フラッシュメモリ１０１は、第１記憶領域Ｃに第１回路情報Ａを記憶し、第２記憶領域Ｄに第２回路情報Ｂを記憶する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの（Ｎ−２）／２Ｂｌｏｃｋに相当する範囲の第２回路情報Ｂを記憶するための第２記憶領域Ｄを有する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの（Ｎ−２）／２Ｂｌｏｃｋに相当する範囲の第１回路情報Ａを記憶するための第１記憶領域Ｃを有する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の起動面情報領域Ｅを有する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の開始／終了アドレス情報領域Ｆを有する。なお、図３を含め、以下の図４、５、６においては、第１記憶領域Ｃを回路情報Ａ格納領域Ｃと記載し、第２記憶領域Ｄを回路情報Ｂ格納領域Ｄと記載する。
【００４１】
図４は、図３に示したフラッシュメモリ１０１のアドレスマップにアドレス値を挿入した図である。フラッシュメモリ１０１の記憶容量は、１２８Ｍｂｉｔである。第２記憶領域Ｄのアドレス値は、０ｘ７ＦＦＦＦＦから０ｘ４１００００である。第１記憶領域Ｃのアドレス値は、０ｘ４０ＦＦＦＦから０ｘ０２００００である。起動面情報領域Ｅのアドレス値は、０ｘ０１００００であって、図４の例では回路情報ＡでＦＰＧＡ１０４を起動することを示す０ｘ０（０ｘ０：ＣｏｎｆｉｇＡ、０ｘ１：ＣｏｎｆｉｇＢ）が記憶されている。開始／終了アドレス情報領域Ｆのアドレス値は、０ｘ０００００３から０ｘ００００００である。０ｘ０００００３には、０ｘ７Ｆが回路情報Ｂ格納領域Ｄの終了アドレス（ＣｏｎｆｉｇＢ  Ｅｎｄ  Ａｄｄｒｅｓｓ）として記憶されている。０ｘ０００００２には、０ｘ４１が回路情報Ｂ格納領域Ｄの開始アドレス（ＣｏｎｆｉｇＢ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ）として記憶されている。０ｘ０００００１には、０ｘ４０が回路情報Ａ格納領域Ｃの終了アドレス（ＣｏｎｆｉｇＡ  Ｅｎｄ  Ａｄｄｒｅｓｓ）として記憶されている。０ｘ００００００には、０ｘ０２が回路情報Ａ格納領域Ｃの開始アドレス（ＣｏｎｆｉｇＡ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ）として記憶されている。なお、開始／終了アドレス情報領域Ｆに記憶されたアドレス値は、実アドレス値ではなく、下位１６ｂｉｔを省略した値が記憶されている。これは、フラッシュメモリ１０１は、データｂｉｔ幅の最小単位が８ｂｉｔであるために、１ブロック分（０ｘ０１００００）の領域がわかる上位８ｂｉｔのアドレス領域を示す値だけを記憶し、フラッシュメモリ１０１から読み出しを行ったＰＬＤ１０３で下位１６ｂｉｔを補完する（すなわち、開始アドレスの場合には「０ｘ００００」を補完し、終了アドレスの場合には「０ｘＦＦＦＦ」を補完する）ようにしているからである。
【００４２】
図５は、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合におけるアドレスマップの一例を示す図である。フラッシュメモリ１０１は、第１記憶領域Ｃに第１回路情報Ａを記憶し、フラッシュメモリ１０２は、第２記憶領域Ｄに第２回路情報Ｂを記憶する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの（Ｎ−２）Ｂｌｏｃｋに相当する範囲の第１回路情報Ａを記憶するための第１記憶領域Ｃを有する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の起動面情報領域Ｅを有する。フラッシュメモリ１０１は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の第１回路情報Ａ用の開始／終了アドレス情報領域Ｆを有する。フラッシュメモリ１０２には、フラッシュメモリ１０１と同様に、デザイン固有のプログラミングデータを有する、第２回路情報Ｂが記憶される。フラッシュメモリ１０２は、ＮＢｌｏｃｋのうちの（Ｎ−２）Ｂｌｏｃｋに相当する範囲の第２回路情報Ｂを記憶するための第２記憶領域Ｄを有する。フラッシュメモリ１０２は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の未使用領域Ｇを有する。フラッシュメモリ１０２は、ＮＢｌｏｃｋのうちの１Ｂｌｏｃｋに相当する範囲の第２回路情報Ｂ用の開始／終了アドレス情報領域Ｆを有する。フラッシュメモリ１０２は、起動面情報領域Ｅを有さない。
【００４３】
図６は、図５に示したフラッシュメモリ１０１及びフラッシュメモリ１０２のアドレスマップにアドレス値を挿入した図である。フラッシュメモリ１０１及びフラッシュメモリ１０２の記憶容量は、２５６Ｍｂｉｔである。フラッシュメモリ１０１において、第１記憶領域Ｃのアドレス値は、０ｘＦＦＦＦＦＦから０ｘ０２００００である。起動面情報領域Ｅのアドレス値は、０ｘ０１００００であって、図６の例では回路情報ＢでＦＰＧＡ１０４を起動することを示す０ｘ１（０ｘ０：ＣｏｎｆｉｇＡ、０ｘ１：ＣｏｎｆｉｇＢ）が記憶されている。開始／終了アドレス情報領域Ｆのアドレス値は、０ｘ０００００１から０ｘ００００００である。０ｘ０００００１には、０ｘＦＦが回路情報Ａ格納領域Ｃの終了アドレス（ＣｏｎｆｉｇＡ  Ｅｎｄ  Ａｄｄｒｅｓｓ）として記憶されている。０ｘ００００００には、０ｘ０２が回路情報Ａ格納領域Ｃの開始アドレス（ＣｏｎｆｉｇＡ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ）として記憶されている。フラッシュメモリ１０２において、第２記憶領域Ｄのアドレス値は、０ｘＦＦＦＦＦＦから０ｘ０２００００である。未使用領域Ｇのアドレス値は、０ｘ０１ＦＦＦＦから０ｘ０１００００である。開始／終了アドレス情報領域Ｆのアドレス値は、０ｘ０００００１から０ｘ００００００である。０ｘ０００００１には、０ｘＦＦが回路情報Ｂ格納領域Ｄの終了アドレス（ＣｏｎｆｉｇＢ  Ｅｎｄ  Ａｄｄｒｅｓｓ）として記憶されている０ｘ００００００には、０ｘ０２が回路情報Ｂ格納領域Ｄの開始了アドレス（ＣｏｎｆｉｇＢ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ）として記憶されている。なお、この場合も、開始／終了アドレス情報に記憶されたアドレス値は、実アドレス値ではなく、下位１６ｂｉｔを省略した値である。
【００４４】
図７は、ＰＬＤ１０３の状態遷移図である。ＳＴＡＴＥ１は、ＰＬＤ１０３のリセット後の初期状態であり、ＰＬＤ１０３は、ＰＬＤ１０３内の全レジスタを初期状態に戻し、ＦＰＧＡ１０４へ出力するコンフィグレーション開始信号をディスエーブルにし、無条件でＳＴＡＴＥ２に遷移する。
【００４５】
ＳＴＡＴＥ２では、ＳＴＡＴＥ１から遷移してきた場合、ＰＬＤ１０３は、フラッシュメモリ１０１及びフラッシュメモリ１０２の起動面情報をリードする。ＳＴＡＴＥ２では、ＳＴＡＴＥ４から遷移してきた場合、ＰＬＤ１０３は、ＰＬＤ１０３の内部で保持している起動面情報を、二回目のコンフィグレーションを実施するために反転する。なお、このとき、ＳＴＡＴＥ２では、ＰＬＤ１０３は、ＦＰＧＡ１０４へ出力するコンフィグレーション開始信号をイネーブルにし、特定サイクル後にＳＴＡＴＥ３に遷移する。
【００４６】
ＳＴＡＴＥ３では、ＦＰＧＡ１０４がコンフィグレーション可能になる。すなわち、ＳＴＡＴＥ３は、ＰＬＤ１０３がＦＰＧＡ１０４からコンフィグレーション指示信号が来るのを待つ状態である。なお、このとき、ＳＴＡＴＥ３では、ＰＬＤ１０３は、ＦＰＧＡ１０４へ出力するコンフィグレーション開始信号をディスエーブルにし、ＦＰＧＡ１０４からコンフィグレーション指示信号がアサートされるとＳＴＡＴＥ４に遷移する。
【００４７】
ＳＴＡＴＥ４では、ＰＬＤ１０３は、ＦＰＧＡ１０４のコンフィグレーション完了を待つ。ＳＴＡＴＥ４では、ＰＬＤ１０３は、ＦＰＧＡ１０４からコンフィグレーション完了信号がアサートされるとＳＴＡＴＥ５に遷移する。ＳＴＡＴＥ４では、コンフィグレーション中にＦＰＧＡ１０４からコンフィグレーション指示信号がデアサート、すなわち、コンフィグレーションＮＧ状態となると、ＰＬＤ１０３は、ＰＬＤ１０３の内部に有するコンフィグレーションＮＧカウンタをカウントアップして、カウンタ値＝１（一回目のコンフィグレーションＮＧ）の場合、ＰＬＤ１０３はＳＴＡＴＥ２に遷移する。ＳＴＡＴＥ４では、カウンタ値＝２（二回目のコンフィグレーションＮＧ）の場合、ＰＬＤ１０３はＳＴＡＴＥ７に遷移する。
【００４８】
ＳＴＡＴＥ５は、ＦＰＧＡ１０４のコンフィグレーションが完了した状態である。ＳＴＡＴＥ５では、ＦＰＧＡ１０４からのユーザモード切替信号があれば、その信号がアサートされた場合、もしくは、特定サイクル後に、ＰＬＤ１０３はＳＴＡＴＥ６に遷移する。
【００４９】
ＳＴＡＴＥ６は、ＦＰＧＡ１０４のコンフィグレーションが完了し、かつ、ユーザモードへ移行した状態である。ＳＴＡＴＥ６では、ＣＰＵ１０５よりＦＰＧＡ１０４経由で再コンフィグレーション指示信号を受けると、ＰＬＤ１０３はＳＴＡＴＥ１に遷移する。また、ＳＴＡＴＥ６では、ＦＰＧＡ１０４からコンフィグレーション指示信号がデアサートされる（ＦＰＧＡ１０４異常状態）と、ＰＬＤ１０３はＳＴＡＴＥ１に遷移する。
【００５０】
ＳＴＡＴＥ７は、ＦＰＧＡ１０４のコンフィグレーションが異常終了した状態である。ＳＴＡＴＥ７では、ＣＰＵ１０５よりＦＰＧＡ１０４経由で再コンフィグレーション指示信号を受けると、ＰＬＤ１０３はＳＴＡＴＥ１に遷移する。また、ＳＴＡＴＥ７では、ＦＰＧＡ１０４からコンフィグレーション指示信号がデアサートされる（ＦＰＧＡ１０４異常状態）と、ＰＬＤ１０３はＳＴＡＴＥ１に遷移する。
【００５１】
図８から図１０は、コンフィグレーション制御システム１００の具体的なコンフィグレーションシーケンスをそれぞれ説明するフローチャートである。なお、ここでは、コンフィグレーション制御システム１００が単一のフラッシュメモリ１０１を有する場合について説明するが、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合も、同様なルーチンを実行することができる。まず、ＣＰＵ１０５は、コンフィグレンスシーケンスの実行を始める（ステップＳ２０１）。次に、ＣＰＵ１０５は、ＦＰＧＡ１０４が起動しているか否かを判定する（ステップＳ２０２）。ＣＰＵ１０５は、ステップＳ２０２の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、運用中もしくは評価中を想定する（ステップＳ２０３）。そして、ＣＰＵ１０５は、ＦＰＧＡ１０４およびＰＬＤ１０３を順次介して（図面では、ＦＰＧＡ１０４→ＰＬＤ１０３と記載する）、フラッシュメモリ１０１に各回路情報Ａ、Ｂをライト（具体的には、ブロックイレース→ライト、すなわち、ブロックイレースを行ってからライト）する（ステップＳ２０４）。次に、ＣＰＵ１０５は、Ｖｅｒｉｆｙを実施し、書き込まれたデータが正しいかどうかを確認する（ステップＳ２０５）。そして、ＣＰＵ１０５は、フラッシュメモリ１０１の起動面情報領域Ｅに、各回路情報Ａ、ＢのいずれでＦＰＧＡ１０４を起動させるかの情報をライト（ブロックイレース→ライト）する（ステップＳ２０６）。続いて、ＣＰＵ１０５は、ＦＰＧＡ１０４を介して、ＰＬＤ１０３にコンフィグレーションを要求する（ステップＳ２０７）。そして、ＣＰＵ１０５は、電源の安定後に、ＰＬＤ１０３を起動させる（ステップＳ２０８）。
【００５２】
一方、ＣＰＵ１０５は、ステップＳ２０２の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、評価中を想定する（ステップＳ２０９）。そして、ＣＰＵ１０５は、ＪＴＡＧインターフェース１１０より、ＦＰＧＡ１０４およびＰＬＤ１０３を順次介して、フラッシュメモリ１０１に各回路情報Ａ、Ｂをライト（ブロックイレース→ライト）する（ステップＳ２１０）。次に、ＣＰＵ１０５は、ＪＴＡＧインターフェース１１０よりＦＰＧＡ１０４およびＰＬＤ１０３を順次介して、Ｖｅｒｉｆｙを実施し、書き込まれたデータが正しいかどうかを確認する（ステップＳ２１１）。そして、ＣＰＵ１０５は、ＪＴＡＧインターフェース１１０よりＦＰＧＡ１０４およびＰＬＤ１０３を順次介して、フラッシュメモリ１０１の起動面情報領域Ｅに、各回路情報Ａ、ＢのいずれでＦＰＧＡ１０４を起動させるかの情報をライト（ブロックイレース→ライト）する（ステップＳ２１２）。続いて、ＣＰＵ１０５は、Ｐｏｗｅｒ  Ｏｎ  Ｒｅｓｅｔ（電源オンリセット）を実行する（ステップＳ２１３）。そして、ＣＰＵ１０５は、電源の安定後に、ＰＬＤ１０３を起動させる（ステップＳ２０８）。
【００５３】
ステップＳ２０８の後に、ＰＬＤ１０３は、ＦＰＧＡ１０４に対してコンフィグレーション開始信号を送信する（ステップＳ２１４）。次に、ＰＬＤ１０３は、フラッシュメモリ１０１の起動面情報領域Ｅをリードして、各回路情報Ａ、Ｂのいずれでコンフィグレーションを行うかを確認する（ステップＳ２１５）。続いて、ＰＬＤ１０３は、有効なコンフィグレーションデータが記憶されているアドレス情報を、フラッシュメモリ１０１の開始／終了アドレス情報領域Ｆからリードする（ステップＳ２１６）。続いて、ＰＬＤ１０３は、開始／終了アドレスに従い、フラッシュメモリ１０１から有効な回路情報を順次リード及び整形してＦＰＧＡ１０４に送信する（ステップＳ２１７）。そして、ＦＰＧＡ１０４は、受信したデータに対してＣＲＣチェックを実施する（ステップＳ２１８）。続いて、ＣＰＵ１０５は、受信途中にＣＲＣエラーが発生したか否かを判定する（ステップＳ２１９）。
【００５４】
そして、ＦＰＧＡ１０４は、ステップＳ２１９の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、最後のデータを受信した後に、ＰＬＤ１０３に対してコンフィグレーション完了信号を送信する（ステップＳ２２０）。次に、ＦＰＧＡ１０４は、コンフィグレーションの完了に伴い、ユーザモードへ移行する。続いて、ＰＬＤ１０３は、ＦＰＧＡ１０４に対していずれの起動面でコンフィグレーションが完了したのかを新たに追加した信号線１０７で通知する（ステップＳ２２２）。次に、ＰＬＤ１０３は、自身のコンフィグレーションＮＧカウンタをリセット（カウンタ値０）する（ステップＳ２２３）。そして、ＰＬＤ１０３は、ＦＰＧＡ１０４に対してソフトウェアリセットを実施する（ステップＳ２２４）。
【００５５】
この結果、ＦＰＧＡ１０４は、起動完了となる（ステップＳ２２５）。次に、ＦＰＧＡ１０４は、ステップＳ２２２で得た信号を自身の起動情報レジスタに記憶する（ステップＳ２２６）。続いて、ＣＰＵ１０５は、ＦＰＧＡ１０４の起動情報レジスタにリードアクセスする（ステップＳ２２７）。そして、ＦＰＧＡ１０４は、ステップＳ２２６における起動情報レジスタの値をＣＰＵ１０５に通知する（ステップＳ２２８）。次に、ＣＰＵ１０５は、ステップＳ２０６で得た値とステップＳ２２８で得た値とを比較する（ステップＳ２２９）。続いて、ＣＰＵ１０５は、ステップＳ２０６で得た値とステップＳ２２８で得た値とが等しいか否かを判定する（ステップＳ２３０）。
【００５６】
ＦＰＧＡ１０４は、ステップＳ２３０の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、期待した回路情報で起動を行う（ステップＳ２３１）。これに反して、ＦＰＧＡ１０４は、ステップＳ２３０の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、期待していない回路情報で起動を行う（ステップＳ２３２）。そのため、ＣＰＵ１０５は、これ以降の処理は、システム仕様に依存したものとして、例えば、ソフトエラー障害と判断した後に、ステップＳ２０７からのルーチンを再実行する等の処理を行う（ステップＳ２３３）。
【００５７】
一方、ＦＰＧＡ１０４は、ステップＳ２１９の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、ＰＬＤ１０３に対してコンフィグレーションＮＧ信号を送信する（ステップＳ２３４）。次に、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタをカウントアップする（ステップＳ２３５）。そして、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタの値が「２」であるか否かを判定する（ステップＳ２３６）。
【００５８】
ＰＬＤ１０３は、ステップＳ２３６の判定結果が「Ｔ（Ｔｒｕｅ）」の場合、コンフィグレーションの必要がないと判断する。すなわち、ＰＬＤ１０３は、コンフィグレーションを各回路情報Ａ、Ｂで実行済みであると判断する（ステップＳ２３７）。次に、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタをリセット（カウンタ値０）して動作を終了する（ステップＳ２３８）。このため、ＣＰＵ１０５は、ＦＰＧＡ１０４の起動がＮＧであって、ハードウェア故障と判断する（ステップＳ２３９）。
【００５９】
ＰＬＤ１０３は、ステップＳ２３６の判定結果が「Ｆ（Ｆａｌｓｅ）」の場合、起動面情報が示す起動面とは反対の起動面の回路情報で再コンフィグレーションを行う必要があると判断する（ステップＳ２４０）。次に、ＰＬＤ１０３は、起動面情報が示す起動面とは反対の起動面の回路情報のアドレス情報を、フラッシュメモリ１０１の開始／終了アドレス情報領域Ｆからリードする（ステップＳ２４１）。そして、ステップＳ２１７からのルーチンが再び実行される。
【００６０】
図１１及び図１２は、ソフトエラーが発生しない場合のコンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。なお、ここでは、コンフィグレーション制御システム１００が単一のフラッシュメモリ１０１を有する場合について説明するが、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合も、同様なルーチンを実行することができる。まず、ＣＰＵ１０５は、ＦＰＧＡ１０４に対して第１回路情報Ａでの起動指示を与える（ステップＳ３０１）。次に、ＦＰＧＡ１０４は、ＰＬＤ１０３に対して第１回路情報Ａでの起動指示を与える（ステップＳ３０２）。そして、ＰＬＤ１０３は、起動面情報領域Ｅをブロックイレースする（ステップＳ３０３）。このとき、ＰＬＤ１０３は、アドレス値０ｘ０１００００を含む領域をブロックイレースする。また、ＰＬＤ１０３は、起動面情報領域Ｅに０ｘ０をライトする（ステップＳ３０４）。すなわち、ＰＬＤ１０３は、アドレス値０ｘ０１００００に０ｘ０をライトして、第１回路情報Ａをコンフィグレーション対象に設定する。
【００６１】
次に、ＣＰＵ１０５は、ＦＰＧＡ１０４に対してコンフィグレーション指示を行う（ステップＳ３０５）。続いて、ＦＰＧＡ１０４は、ＰＬＤ１０３に対してコンフィグレーション指示を行う（ステップＳ３０６）。そして、ＰＬＤ１０３は、ＦＰＧＡ１０４に対してコンフィグレーション命令を与える（ステップＳ３０７）。また、ＰＬＤ１０３は、フラッシュメモリ１０１のアドレス値０ｘ０１００００にリードアクセスする（ステップＳ３０８）。そして、ＰＬＤ１０３は、起動面情報をリードする（ステップＳ３０９）。そして、ＰＬＤ１０３は、読み出された０ｘ０に従って、第１回路情報Ａをコンフィグレーション対象に設定する。次に、ＰＬＤ１０３は、フラッシュメモリ１０１のアドレス値０ｘ００００００にリードアクセスする（ステップＳ３１０）。すなわち、ＰＬＤ１０３は、第１回路情報Ａの開始アドレス値を照会して、第１回路情報Ａの開始アドレス値０ｘ０２をリードする（ステップＳ３１１）。次に、ＰＬＤ１０３は、アドレス値０ｘ０００００１にリードアクセスする（ステップＳ３１２）。すなわち、ＰＬＤ１０３は、第１回路情報Ａの終了アドレス値を照会して、第１回路情報Ａの終了アドレス値０ｘ４０をリードする（ステップＳ３１３）。次に、ＰＬＤ１０３は、アドレス値０ｘ０２００００にリードアクセスする（ステップＳ３１４）。そして、ＰＬＤ１０３は、第１回路情報Ａの先頭のデータをリードする（ステップＳ３１５）。このとき、ＰＬＤ１０３は、リードした第１回路情報ＡのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、第１回路情報Ａの先頭のデータをＦＰＧＡ１０４に送信する（ステップＳ３１６）。このとき、ＦＰＧＡ１０４は、先頭のデータがＣＲＣチェックに合格するため、先頭のデータの書き込みを行う。
【００６２】
次に、ＰＬＤ１０３は、アドレス値０ｘ０２０００１にリードアクセスする（ステップＳ３１７）。そして、ＰＬＤ１０３は、第１回路情報Ａの２番目のデータをリードする（ステップＳ３１８）。このとき、ＰＬＤ１０３は、リードしたデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、第１回路情報Ａの２番目のデータをＦＰＧＡ１０４に送信する（ステップＳ３１９）。このとき、ＦＰＧＡ１０４は、２番目のデータがＣＲＣチェックに合格するため、２番目のデータの書き込みを行う。
【００６３】
その後、ＰＬＤ１０３は、アドレス値０ｘＸＸＸＸＸＸ（＜０ｘ４１００００）にリードアクセスする（ステップＳ３２０）。そして、ＰＬＤ１０３は、アドレス値０ｘＸＸＸＸＸＸ（＜０ｘ４１００００）のデータをリードする。例えば、ＰＬＤ１０３は、最終的に、第１回路情報Ａの最後のデータをリードする（ステップＳ３２１）。このとき、ＰＬＤ１０３は、リードした第１回路情報ＡのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、リードした第１回路情報Ａの最後のデータをＦＰＧＡ１０４に送信する（ステップＳ３２２）。このとき、ＦＰＧＡ１０４は、最後のデータがＣＲＣチェックに合格するため、最後のデータの書き込みを行う。続いて、ＦＰＧＡ１０４は、ＰＬＤ１０３に対してコンフィグレーションの完了を通知する（ステップＳ３２３）。このとき、ＰＬＤ１０３は、第１回路情報Ａで起動したことを確認する。
【００６４】
次に、ＰＬＤ１０３は、ＦＰＧＡ１０４に対して０ｘ０をレベル信号として通知する（ステップＳ３２４）。このとき、ＦＰＧＡ１０４は、通知された０ｘ０から、第１回路情報Ａで起動したことを認識する。また、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタ値をリセット（カウンタ値０）する。そして、ＰＬＤ１０３は、ＦＰＧＡ１０４に対してソフトウェアリセットを実施する（ステップＳ３２５）。このとき、ＦＰＧＡ１０４は、起動され、起動情報レジスタに０ｘ０を記憶する。
【００６５】
続いて、ＣＰＵ１０５は、ＦＰＧＡ１０４の起動情報レジスタにリードアクセスする（ステップＳ３２６）。そして、ＦＰＧＡ１０４は、０ｘ０をリードして、このデータをＣＰＵ１０５に送信する（ステップＳ３２７）。その結果、ＣＰＵ１０５は、期待した第１回路情報ＡでＦＰＧＡ１０４が起動したことを確認することになる。
【００６６】
図１３から図１５は、最初のコンフィグレーションがＮＧになった場合のコンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。なお、ここでは、コンフィグレーション制御システム１００が単一のフラッシュメモリ１０１を有する場合について説明するが、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合も、同様なルーチンを実行することができる。なお、ステップＳ４０１からステップＳ４２０までは、ステップＳ３０１からステップＳ３２０までと同様なので説明を省略する。ＰＬＤ１０３は、第１回路情報ＡのＫ番目のデータをリードする（ステップＳ４２１）。このとき、ＰＬＤ１０３は、リードした第１回路情報ＡのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、リードした第１回路情報ＡのＫ番目のデータをＦＰＧＡ１０４に送信する（ステップＳ４２２）。このとき、ＦＰＧＡ１０４では、ＣＲＣチェックがＮＧとなる。続いて、ＦＰＧＡ１０４は、ＰＬＤ１０３に対してコンフィグレーションＮＧを通知する（ステップＳ４２３）。このため、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタをカウントアップ（カウンタ値＋１）する。ＣＰＵ１０５は、第２回路情報Ｂでコンフィグレーションする必要があると判断する。
【００６７】
次に、ＰＬＤ１０３は、フラッシュメモリ１０１のアドレス値０ｘ０００００２にリードアクセスする（ステップＳ４２４）。すなわち、ＰＬＤ１０３は、第２回路情報Ｂの開始アドレス値を照会して、第２回路情報Ｂの開始アドレス値０ｘ４１をリードする（ステップＳ４２５）。そして、ＰＬＤ１０３は、アドレス値０ｘ０００００３にリードアクセスする（ステップＳ４２６）。すなわち、ＰＬＤ１０３は、第２回路情報Ｂの終了アドレス値を照会して、第２回路情報Ｂの終了アドレス値をリードする（ステップＳ４２７）。その結果、ＰＬＤ１０３は、第２回路情報Ｂの終了アドレス値０ｘ７Ｆをリードする。次に、ＰＬＤ１０３は、アドレス値０ｘ４１００００にリードアクセスする（ステップＳ４２８）。そして、ＰＬＤ１０３は、第２回路情報Ｂの先頭のデータをリードする（ステップＳ４２９）。このとき、ＰＬＤ１０３は、リードした第２回路情報ＢのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、第２回路情報Ｂの先頭のデータをＦＰＧＡ１０４に送信する（ステップＳ４３０）。このとき、ＦＰＧＡ１０４は、先頭のデータがＣＲＣチェックに合格するため、先頭のデータの書き込みを行う。
【００６８】
次に、ＰＬＤ１０３は、アドレス値０ｘ４１０００１にリードアクセスする（ステップＳ４３１）。そして、ＰＬＤ１０３は、第２回路情報Ｂの２番目のデータをリードする（ステップＳ４３２）。このとき、ＰＬＤ１０３は、リードしたデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、第２回路情報Ｂの２番目のデータをＦＰＧＡ１０４に送信する（ステップＳ４３３）。このとき、ＦＰＧＡ１０４は、２番目のデータがＣＲＣチェックに合格するため、２番目のデータの書き込みを行う。
【００６９】
次に、ＰＬＤ１０３は、アドレス値０ｘＹＹＹＹＹＹにリードアクセスする（ステップＳ４３４）。そして、ＰＬＤ１０３は、アドレス値０ｘＹＹＹＹＹＹ（≦０ｘ７ＦＦＦＦＦ）のデータをリードする。例えば、ＰＬＤ１０３は、最終的に、第２回路情報Ｂの最後のデータをリードする（ステップＳ４３５）。このとき、ＰＬＤ１０３は、リードした第２回路情報ＢのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、リードした第２回路情報Ｂの最後のデータをＦＰＧＡ１０４に送信する（ステップＳ４３６）。このとき、ＦＰＧＡ１０４は、最後のデータがＣＲＣチェックに合格するため、最後のデータの書き込みを行う。続いて、ＦＰＧＡ１０４は、ＰＬＤ１０３に対してコンフィグレーションの完了を通知する（ステップＳ４３７）。このとき、ＰＬＤ１０３は、第２回路情報Ｂで起動したことを確認する。
【００７０】
次に、ＰＬＤ１０３は、ＦＰＧＡ１０４に対して０ｘ１をレベル信号として通知する（ステップＳ４３８）。その結果、ＦＰＧＡ１０４は、通知された０ｘ１から、第２回路情報Ｂで起動したことを認識する。また、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタ値をリセット（カウンタ値０）する。そして、ＰＬＤ１０３は、ＦＰＧＡ１０４に対してソフトウェアリセットを実施する（ステップＳ４３９）。その結果、ＦＰＧＡ１０４は、起動され、起動情報レジスタに０ｘ１を記憶する。
【００７１】
続いて、ＣＰＵ１０５は、ＦＰＧＡ１０４の起動情報レジスタにリードアクセスする（ステップＳ４４０）。そして、ＦＰＧＡ１０４は、０ｘ１をリードしてＣＰＵ１０５に送信する（ステップＳ４４１）。その結果、ＣＰＵ１０５は、期待していない第２回路情報ＢでＦＰＧＡ１０４が起動したことを確認することになる。
【００７２】
図１６から図１８は、二回目のコンフィグレーションもＮＧになった場合のコンフィグレーション制御システム１００の具体的な振る舞いの一例を示す図である。なお、ここでは、コンフィグレーション制御システム１００が単一のフラッシュメモリ１０１を有する場合について説明するが、コンフィグレーション制御システム１００がフラッシュメモリ１０１及びフラッシュメモリ１０２を有する場合も、同様なルーチンを実行することができる。なお、ステップＳ５０１からステップＳ５３３までは、ステップＳ４０１からステップＳ４３３までと同様なので説明を省略する。ＰＬＤ１０３は、第２回路情報Ｂの２番目のデータをＦＰＧＡ１０４に送信する（ステップＳ５３３）。このとき、ＦＰＧＡ１０４は、２番目のデータがＣＲＣチェックに合格するため、２番目のデータの書き込みを行う。
【００７３】
次に、ＰＬＤ１０３は、アドレス値０ｘＹＹＹＹＹＹにリードアクセスする（ステップＳ５３４）。そして、ＰＬＤ１０３は、アドレス値０ｘＹＹＹＹＹＹ（≦０ｘ７ＦＦＦＦＦ）のデータをリードする。そして、ＰＬＤ１０３は、第２回路情報ＢのＭ番目のデータをリードする（ステップＳ５３５）。このとき、ＰＬＤ１０３は、リードした第２回路情報ＢのデータをＣｏｎｆｉｇ  Ｉ／Ｆ用に整形する。そして、ＰＬＤ１０３は、リードした第２回路情報ＢのＭ番目のデータをＦＰＧＡ１０４に送信する（ステップＳ５３６）。このとき、ＦＰＧＡ１０４では、Ｍ番目のデータのＣＲＣチェックがＮＧになる。続いて、ＦＰＧＡ１０４は、ＰＬＤ１０３に対してコンフィグレーションのＮＧを通知する（ステップＳ５３７）。このとき、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタをカウントアップ（カウンタ値＋１＝２）する。また、ＣＰＵ１０５は、第１回路情報Ａ、第２回路情報Ｂのいずれでもコンフィグレーションに失敗したため、これ以上のコンフィグレーションは不要であると判断する。そして、ＰＬＤ１０３は、コンフィグレーションＮＧカウンタ値をリセット（カウンタ値０）する。
【００７４】
そして、ＦＰＧＡ１０４は、スタックする。次に、ＣＰＵ１０５は、ＦＰＧＡ１０４の起動情報レジスタにリードアクセスする（ステップＳ５３８）。しかし、ＦＰＧＡ１０４へのレジスタアクセスはタイムアウトになる（ステップＳ５３９）。このため、ＣＰＵ１０５は、ＦＰＧＡ１０４に起因したハードウェア故障があると判断する。
【００７５】
上述したように、コンフィグレーション制御システム１００は、各回路情報Ａ、Ｂとして同一の回路情報を使用してフラッシュメモリ１０１及びフラッシュメモリ１０２に記憶しているために、一方のデータＡ（Ｂ）でソフトエラーが発生しても、もう一方のデータＢ（Ａ）で正常起動させることができる。そのため、コンフィグレーション制御システム１００は、システムダウンすることなくソフトエラーが発生する前と同一の機能で運用することが可能となり、特に頻繁にパワーオンシーケンスが起こるようなシステムに対して有効に適用できる。
【００７６】
また、コンフィグレーション制御システム１００は、各回路情報Ａ、Ｂとして同一のデータが記憶されていて第１回路情報Ａで運用中にデータのバージョンアップを行いたい場合、フラッシュメモリ１０１及びフラッシュメモリ１０２の第２回路情報Ｂの領域だけにバージョンアップデータを上書きした後、上書きしたデータでコンフィグレーションを行うことになる。この時、上書きしたデータがソフトエラーでコンフィグレーションＮＧになった場合、既存の第１回路情報Ａで再コンフィグレーションを実施することで既存のバージョンに戻してシステムを起動することができる。そのため、コンフィグレーション制御システム１００は、システムダウンせず、ＣＰＵ１０５側より上書きしたデータでコンフィグレーション要求を再度行うことが可能となる。このように、コンフィグレーション制御システム１００は、ＦＰＧＡ１０４のデザインの不具合修正や機能追加等で、回路情報をバージョンアップしたい場合にも有効である。
【００７７】
以上説明したように、コンフィグレーション制御システム１００において、ＰＬＤ１０３は、第１回路情報Ａでコンフィグレーションに失敗した場合、第２回路情報Ｂで再コンフィグレーションを行う。従って、コンフィグレーション制御システム１００は、ソフトエラーが発生した場合に、システムダウンすることなくＦＰＧＡ１０４を起動させることができる。
【００７８】
また、コンフィグレーション制御システム１００において、ＰＬＤ１０３は、フラッシュメモリ１０１及びフラッシュメモリ１０２に記憶されている各回路情報Ａ、Ｂのうちのいずれかでコンフィグレーションを行ったかを通知するための単一の信号線１０７を有するために、複雑な回路構成になることがなく、簡素な回路構成にできる。
【００７９】
そして、コンフィグレーション制御システム１００において、フラッシュメモリ１０１の起動面情報領域Ｅは、起動面情報を記憶でき、フラッシュメモリ１０１及びフラッシュメモリ１０２の開始／終了アドレス情報領域Ｆは、開始／終了アドレス情報を記憶できる。
【００８０】
さらに、コンフィグレーション制御システム１００において、ＰＬＤ１０３は、コンフィグレーションに失敗した場合に、再コンフィグレーションを行うためのリトライシーケンサを有するために、コンフィグレーションの精度を向上できる。
【００８１】
さらにまた、コンフィグレーション制御システム１００において、各回路情報Ａ、Ｂは、同一の回路情報を使用してフラッシュメモリ１０１及びフラッシュメモリ１０２に記憶されているために、一方のデータＡ（Ｂ）でソフトエラーが発生しても、もう一方のデータＢ（Ａ）で正常起動させることができる。従って、コンフィグレーション制御システム１００は、システムダウンすることなくソフトエラーが発生する前と同一の機能で運用することが可能となり、特に頻繁にパワーオンシーケンスが起こるようなシステムに対して有効である。
【００８２】
コンフィグレーション制御方法において、ＰＬＤ１０３は、ソフトエラーが発生した場合に、システムダウンすることなくＦＰＧＡ１０４を起動させることができる。
【００８３】
なお、コンフィグレーション制御システム及びコンフィグレーション制御方法は、前述した一実施形態に限定するものでなく、適宜な変形や改良等が可能である。
【００８４】
この出願は、２０１３年６月１２日に出願された日本出願特願２０１３−１２３４７３号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００８５】
本発明は、例えば、ＦＰＧＡなどの半導体チップを備えたシステムに適用することができる。本発明は、ソフトエラーが発生してもシステムダウンすることなくＦＰＧＡを起動させることができる。
【符号の説明】
【００８６】
１００  コンフィグレーション制御システム
１０１  フラッシュメモリ
１０２  フラッシュメモリ
１０３  ＰＬＤ
１０４  ＦＰＧＡ
１０５  ＣＰＵ
１０６  パソコン
１０７  信号線
１０８  ケーブル
１０９  ケーブル
１１０  ＪＴＡＧインターフェース
１１１  ケーブル
１１２  ケーブル
１１３  ケーブル
Ａ  第１回路情報
Ｂ  第２回路情報
Ｃ  第１記憶領域
Ｄ  第２記憶領域
Ｅ  起動面情報領域
Ｆ  開始／終了アドレス情報領域
【図１】
0006032360.tif 000002
【図２】
0006032360.tif 000003
【図３】
0006032360.tif 000004
【図４】
0006032360.tif 000005
【図５】
0006032360.tif 000006
【図６】
0006032360.tif 000007
【図７】
0006032360.tif 000008
【図８】
0006032360.tif 000009
【図９】
0006032360.tif 000010
【図１０】
0006032360.tif 000011
【図１１】
0006032360.tif 000012
【図１２】
0006032360.tif 000013
【図１３】
0006032360.tif 000014
【図１４】
0006032360.tif 000015
【図１５】
0006032360.tif 000016
【図１６】
0006032360.tif 000017
【図１７】
0006032360.tif 000018
【図１８】
0006032360.tif 000019