(57)【要約】【課題】プログラマブルロジックデバイスのコンフィギュレーションを信頼性をもって確実に行うことができるコンフィギュレーション装置を提供する。【解決手段】シリアルフラッシュメモリ４０２に、同じコンフィギュレーションデータがブロックデータに分けて複数個格納される。コンフィギュレーション制御装置４０１は、複数個のコンフィギュレーションデータからその一つを選択し、選択されたコンフィギュレーションデータをプログラマブルロジックデバイス４００に設定する。そのとき、ブロックデータにエラーが検出された場合、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのないブロックデータが読み出され、エラーが検出されたブロックデータが、そのエラーのないブロックデータに置き換えられて、エラーのないコンフィギュレーションデータがプログラマブルロジックデバイスに設定される。【選択図】図１
2007265056.tif 000002
【特許請求の範囲】
【請求項１】
外部からコンフィギュレーションデータを設定してプログラマブルロジックデバイスをコンフィギュレーションするコンフィギュレーション装置であって、
同じコンフィギュレーションデータを複数個格納するメモリと、
前記複数個のコンフィギュレーションデータからコンフィギュレーションデータを読み出し、該読み出されたコンフィギュレーションデータをプログラマブルロジックデバイスに設定する制御装置とを有し、
前記制御装置は、読み出されたコンフィギュレーションデータにエラーが検出された場合、前記メモリからエラーのない他のコンフィギュレーションデータを読み出し、該エラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定することを特徴とするプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項２】
前記制御装置は、エラーが検出されたコンフィギュレーションデータを、エラーのない他のコンフィギュレーションデータに書き換え、メモリに格納されているデータを修復することを特徴とする請求項１に記載のプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項３】
外部からコンフィギュレーションデータを設定してプログラマブルロジックデバイスをコンフィギュレーションするコンフィギュレーション装置であって、
同じコンフィギュレーションデータをブロックデータに分けて複数個格納するメモリと、
前記複数個のコンフィギュレーションデータからコンフィギュレーションデータを読み出し、該読み出されたコンフィギュレーションデータをプログラマブルロジックデバイスに設定する制御装置とを有し、
前記制御装置は、読み出されたコンフィギュレーションデータのブロックデータにエラーが検出された場合、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのないブロックデータを読み出し、該エラーが検出されたブロックデータを、エラーのないブロックデータに置き換えて、エラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定することを特徴とするプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項４】
前記制御装置は、エラーが検出されたコンフィギュレーションデータのブロックデータを、エラーのない他のコンフィギュレーションデータのブロックデータに書き換え、メモリに格納されているデータを修復することを特徴とする請求項３に記載のプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項５】
前記コンフィギュレーションデータが暗号化コードで暗号化されたアドレスに格納され、前記制御装置は、該暗号化コードを取得して、暗号化されたアドレスにアクセスしてコンフィギュレーションデータを読み出すことを特徴とする請求項１から４のいずれか１項に記載のプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項６】
前記コンフィギュレーションデータをメモリに格納するとき、格納ごとに異なる暗号化コードが用いられることを特徴とする請求項５に記載のプログラマブルロジックデバイスのコンフィギュレーション装置。
【請求項７】
前記制御装置は、エラーが発生した場合、エラー情報をユーザーに対して通知することを特徴とする請求項１から６のいずれか１項に記載のプログラマブルロジックデバイスのコンフィギュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部からコンフィギュレーションデータを設定して所定の論理動作を可能にするプログラマブルロジックデバイスをコンフィギュレーションするコンフィギュレーション装置に関する。
【背景技術】
【０００２】
図５は、従来のプログラマブルロジックデバイスをコンフィギュレーションする一構成例を示すブロック図で、外部からコンフィギュレーションデータ２００（図６）が設定されて所望の論理動作が可能になるプログラマブルロジックデバイス１００と、前記プログラマブルロジックデバイス１００のコンフィギュレーションを行うコンフィギュレーション制御回路１０１と、前記コンフィギュレーションデータ２００を格納したシリアルフラッシュメモリ１０２と、外部からコンフィギュレーションデータ２００をシリアルフラッシュメモリ１０２へ書き込むＣＰＵ１０３が設けられる。
【０００３】
図６は、従来の前記コンフィギュレーションデータ２００の読み出しの対象となるシリアルフラッシュメモリ１０２のメモリマップである。
【０００４】
図７は、コンフィギュレーション制御回路１０１がプログラマブルロジックデバイス１００にコンフィギュレーションデータ２００を設定する時のフローチャートである。
【０００５】
従来のプログラマブルロジックデバイス１００のコンフィギュレーションは、図７に示す通り、最初に電源がオンになると、プログラマブルロジックデバイス１００内のコンフィギュレーションメモリが消去され、コンフィギュレーションメモリ消去が完了するとＩＮＩＴ信号（初期化終了信号）をアサートする（ステップ３０１）。
【０００６】
次にコンフィギュレーション制御回路１０１が、ＣＣＬＫ信号（クロック信号）の立ち上がりエッジ毎にシリアルフラッシュメモリ１０２にＳＤ信号（送出データ信号）として信号を送出し、ＲＥＡＤアクセスすると（ステップ３０２）、シリアルフラッシュメモリ１０２は図６に示すメモリマップに格納されているプログラマブルロジックデバイス１００用のコンフィギュレーションデータ２００をＲＤ信号（読み出しデータ信号）として順に読み出し（ステップ３０３）、コンフィギュレーション制御回路１０１は、この信号をプログラマブルロジックデバイス１００へＤＩＮ信号（データ入力信号）として転送する（ステップ３０４）。
【０００７】
このプログラマブルロジックデバイス１００でコンフィギュレーションデータ２００の読み込みが正常に終了したと判断されると、ＤＯＮＥ信号（終了信号）がアサートされ（ステップ３０５）、コンフィギュレーション制御回路１０１はコンフィギュレーションを終了させるが（ステップ３０７）、コンフィギュレーション実行中にプログラマブルロジックデバイス１００でコンフィギュレーションデータにエラーが発生すると全てのコンフィギュレーションデータ２００を読み込んでもＤＯＮＥ信号がアサートされず、コンフィギュレーションは異常終了となる（ステップ３０６）。
【０００８】
このような従来のプログラマブルロジックデバイスのコンフィギュレーションの例としては、下記の引用文献１などがあげられる。
【特許文献１】特開２００１−３０６４０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来のプログラマブルロジックデバイスのコンフィギュレーションは、プログラマブルロジックデバイス１００一つに対してシリアルフラッシュメモリ１０２に格納されているコンフィギュレーションデータ２００も一つであったため、シリアルフラッシュメモリ１０２へのコンフィギュレーションデータ２００の書き込みが失敗した場合や、すでに格納されているコンフィギュレーションデータ２００に何らかの原因によりビット化け等が発生した場合、電源オンによりコンフィギュレーションを実行すると、プログラマブルロジックデバイス１００でコンフィギュレーションデータエラーが発生し、全てのコンフィギュレーションデータ２００を読み込んでもＤＯＮＥ信号がアサートにならず、コンフィギュレーションは異常終了となっていたために、そのプログラマブルロジックデバイス１００を使用している回路は正常動作せず、フィールドではシステム停止等の障害が発生してしまうという問題があった。
【００１０】
また、コンフィギュレーションデータ２００は汎用的であるため、シリアルフラッシュメモリ１０２に格納されたデータを分析すると、プログラマブルロジックデバイス１００が動作中にどのような回路を形成して機能しているかが簡単に読み取れてしまい、容易に設計データの秘密が漏れてしまうという問題もあった。
【００１１】
本発明は、このような問題点を解決するためになされたもので、プログラマブルロジックデバイスのコンフィギュレーションを信頼性をもって確実に行うことができるプログラマブルロジックデバイスのコンフィギュレーション装置を提供することを課題とする。
【課題を解決するための手段】
【００１２】
本発明は、
外部からコンフィギュレーションデータを設定してプログラマブルロジックデバイスをコンフィギュレーションするコンフィギュレーション装置であって、
同じコンフィギュレーションデータを複数個格納するメモリと、
前記複数個のコンフィギュレーションデータからコンフィギュレーションデータを読み出し、該読み出されたコンフィギュレーションデータをプログラマブルロジックデバイスに設定する制御装置とを有し、
前記制御装置は、読み出されたコンフィギュレーションデータにエラーが検出された場合、前記メモリからエラーのない他のコンフィギュレーションデータを読み出し、該エラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定することを特徴とする。
【００１３】
また、本発明は、
外部からコンフィギュレーションデータを設定してプログラマブルロジックデバイスをコンフィギュレーションするコンフィギュレーション装置であって、
同じコンフィギュレーションデータをブロックデータに分けて複数個格納するメモリと、
前記複数個のコンフィギュレーションデータからコンフィギュレーションデータを読み出し、該読み出されたコンフィギュレーションデータをプログラマブルロジックデバイスに設定する制御装置とを有し、
前記制御装置は、読み出されたコンフィギュレーションデータのブロックデータにエラーが検出された場合、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのないブロックデータを読み出し、該エラーが検出されたブロックデータを、エラーのないブロックデータに置き換えて、エラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定することを特徴とする。
【発明の効果】
【００１４】
本発明によれば以下の効果が得られる。
【００１５】
プログラマブルロジックデバイスに設定するコンフィギュレーションデータにエラーが発生した場合であっても、メモリに同じコンフィギュレーションデータを複数個格納させているため、エラーが発生したコンフィギュレーションデータとは異なるエラーのないコンフィギュレーションデータに切り替え、プログラマブルロジックデバイスに該エラーのないコンフィギュレーションデータを設定できるので、コンフィギュレーションが異常終了することを最小限に抑えることができ、プログラマブルロジックデバイスを使用するシステムの信頼性を大幅に向上できる。
【００１６】
また、コンフィギュレーションデータをブロックデータに分け、そのブロックデータにエラーが発生したかどうかを検出するため、エラーが発生した場合でも、他のコンフィギュレーションデータのエラーのない同じブロックデータに置き換えて、エラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定するようにしたので、たとえ複数個のコンフィギュレーションデータでエラーが発生したとしても、全ての同じブロックデータにエラーが発生していない限り、正常にコンフィギュレーションを終了させることができる。
【００１７】
また、本発明では、メモリに格納されているコンフィギュレーションデータにエラーが発生した場合でも、エラーのあるコンフィギュレーションデータを他のエラーのない正常なコンフィギュレーションデータで書き換えたり、あるいはエラーのあるブロックデータを他のエラーのない正常なコンフィギュレーションデータからブロックデータ単位で書き換え、自動修復するようにしたので、メモリに格納されているコンフィギュレーションデータを常に正常状態に保つことができ、さらにシステムの信頼性を向上できる。
【００１８】
また、エラーが発生した場合、従来では、全コンフィギュレーションデータを再度プログラマブルロジックデバイスに設定するようにしていたので、エラーが発生するとコンフィギュレーションにかなりの時間を費やしていたが、本発明ではエラーが発生した場合、コンフィギュレーションデータをブロックデータ単位でエラーのないブロックデータに置き換えて、全体としてエラーのないコンフィギュレーションデータをプログラマブルロジックデバイスに設定できるので、エラー発生時のコンフィギュレーション時間を大幅に短縮することができる。
【００１９】
また、エラーが発生した場合、従来では、メモリに格納されているコンフィギュレーションデータを全て書き換える必要があったため、シリアルフラッシュメモリのデータの書き換えにかなりの時間を費やしていたが、本発明ではエラーが発生した場合、シリアルフラッシュメモリに格納されているコンフィギュレーションデータの中でエラーが発生したブロックデータのみを書き換えるようにしているので、メモリのコンフィギュレーションデータを書き換え、メモリに格納されているデータを修復する時間を大幅に短縮することができる。
【００２０】
また、コンフィギュレーションデータをメモリに格納するごとに毎回異なる暗号化コードを設定し、その暗号化コードで暗号化されたアドレスに、コンフィギュレーションデータを格納するようにしているので、メモリに格納されているデータの分析が困難になり、セキュリティーを大幅に向上することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面に示す実施例に基づいて本発明を詳細に説明する。
【実施例】
【００２２】
図１は、本発明の一実施例を示すコンフィギュレーション装置のブロック図である。図１において、４００は、コンフィギュレーションデータが設定され所定の論理動作を行うプログラマブルロジックデバイス、４０１は、コンフィギュレーションデータをプログラマブルロジックデバイスに設定するコンフィギュレーション制御装置で、コンフィギュレーション制御装置４０１は、制御回路４０１ａ、コマンド生成回路４０１ｂ、アドレス生成回路４０１ｃ、パラレル／シリアル変換回路４０１ｄ、４０１ｊ、エラー検出回路４０１ｅ、ＤＩＮ信号禁止用ＡＮＤ回路４０１ｆ、ＣＣＬＫ信号禁止用ＡＮＤ回路４０１ｇ、シリアル／パラレル変換回路４０１ｈ、ＦＩＦＯ回路４０１ｉ、レジスタ回路４０１ｋ、暗号化回路４０１ｍ、選択回路４０１ｎ、チェックビット付加回路４０１ｏから構成される。
【００２３】
４０２は、プログラマブルロジックデバイス４００に設定されるコンフィギュレーションデータを複数個格納するシリアルフラッシュメモリとして構成されたメモリで、複数個のコンフィギュレーションデータは、後述するようにすべて同じコンフィギュレーションデータとなっている。
【００２４】
４０３はクロック源でクロック信号ＣＬＫを出力する。４０５ａはコンフィギュレーションが完了したことを通知するＤＯＮＥ信号（終了信号）、４０５ｂはプログラマブルロジックデバイス４００がコンフィギュレーションデータを受信できるようになったことを通知するＩＮＩＴ信号（初期化終了信号）、４０５ｃはプログラマブルロジックデバイス４００に設定するコンフィギュレーションデータのＤＩＮ信号（データ入力信号）、４０５ｄ及び４０６ｄは基準となるクロックのＣＣＬＫ信号（クロック信号）、４０６ａはシリアルフラッシュメモリ４０２を制御するコマンドとアドレス情報及び書き込み時のデータをシリアルに変換したＳＤ信号（送出データ信号）、４０６ｂはシリアルフラッシュメモリ４０２を選択したことを通知するＣＳ信号（チップセレクト信号）、４０６ｃはメモリに格納されているデータのＲＤ信号（読み出しデータ信号）である。
【００２５】
４０４はコンフィギュレーションデータをシリアルフラッシュメモリ４０２へ書き込みを行うＣＰＵで、４０７ａはＣＰＵ４０４からコンフィギュレーション制御装置４０１に送出するデータ信号である。
【００２６】
図２は、シリアルフラッシュメモリ４０２に格納されたデータを示すメモリマップである。図示した例では、コンフィギュレーションデータ（１）５００、コンフィギュレーションデータ（２）５０１．．．．．コンフィギュレーションデータ（ｎ）５０２が格納されており、これらの格納された各コンフィギュレーションデータ（１）〜（ｎ）は全て同じ内容のコンフィギュレーションデータである。
【００２７】
図３は、コンフィギュレーション時コンフィギュレーション制御装置４０１が実行するフローチャートであり、図４は、外部のＣＰＵ４０４からシリアルフラッシュメモリ４０２にコンフィギュレーションデータを書込む時のフローチャートである。
【００２８】
まず、本発明では、図４の流れに沿って、外部のＣＰＵ４０４からシリアルフラッシュメモリ４０２にコンフィギュレーションデータが書き込まれる。このとき、セキュリティを高めるために、書き込みアドレスが暗号化され、暗号化されたアドレスに書き込みが行われる。この暗号化のために、ステップ７００で処理が開始された後、ステップ７０１において、暗号化コードが決定される。この暗号化コードは、ＣＰＵ４０４がコンフィギュレーションデータを格納するごとに毎回違う暗号化コードに設定され、たとえば、暗号化コードとしては、書き込みアドレスを所定アドレスオフセットさせる、あるいは書き込みアドレスの最下位ビットと最上位ビットを入れ替えるなどの暗号化コードが考えられる。
【００２９】
ステップ７０２では、ｄａｔａ信号４０７ａとしてＣＰＵ４０４から送出されてくる暗号化コードをコンフィギュレーション制御装置４０１のレジスタ回路４０１ｋに書き込む。
【００３０】
ステップ７０３では、ＣＰＵ４０４からコンフィギュレーション制御装置４０１のレジスタ回路４０１ｋに書き込まれた暗号化コードをシリアルフラッシュメモリ４０２の予め決められた領域に格納するとともに、ステップ７０４で、暗号化コードを暗号化回路４０１ｍに設定する。
【００３１】
ステップ７０５では、コンフィギュレーションデータがシリアルフラッシュメモリ４０２に書き込まれる。この書き込みアドレスは、暗号化回路４０１ｍで今回の書き込み時に（ステップ７０１）設定される暗号化コードで暗号化され、たとえば、書き込みアドレスの最下位ビットと最上位ビットを入れ替えるような暗号化コードが用いられる。この暗号化されたアドレス信号はパラレル／シリアル変換回路４０１ｄでシリアル化される。また、コンフィギュレーションデータも、ＣＰＵ４０４からｄａｔａ信号としてレジスタ回路４０１ｋ、選択回路４０１ｎ、チェックビット付加回路４０１ｏを介してパラレル／シリアル変換回路４０１ｄでシリアル化され、シリアルフラッシュメモリ４０２の暗号化されたアドレスにコンフィギュレーションデータがブロック単位で順次書き込まれる。
【００３２】
ステップ７０６では、ＣＰＵ４０４から最後のデータを受信したかどうかが判断される。ＹＥＳならステップ７０７へ進み終了。ＮＯならステップ７０５へ戻る。
【００３３】
シリアルフラッシュメモリ４０２に書き込まれるコンフィギュレーションデータは、図２に示したように、複数個（ｍ個）のブロックデータに分けられブロック単位で書き込まれる。本発明では、同じコンフィギュレーションデータが複数個（ｎ個）書き込まれる。これが、図２でコンフィギュレーションデータ（１）、（２）．．．．．（ｎ）として図示されている。各コンフィギュレーションデータが同じであることは、各コンフィギュレーションデータがブロックデータ単位でみて同じであることを意味し、たとえば、コンフィギュレーションデータ（１）、（２）．．．．．（ｎ）の各ｋ（ｋ＝１〜ｍ）番目のブロックデータはそれぞれ同じデータとなっている。
【００３４】
各コンフィギュレーションデータ（１）、（２）．．．．．（ｎ）の先頭アドレスＡ１、Ａ２、．．．．．Ａｎは、それぞれ上述した暗号化コードで暗号化されたアドレスである。ただし、図２では、データの格納状況を示すため、アドレスＡ１、Ａ２、．．．．．Ａｎは、暗号化されていないアドレスで示されている。
【００３５】
図４のステップ７０６での判断は、図２でコンフィギュレーションデータ（１）、（２）．．．．．（ｎ）の最後のブロックデータ（ｍ番目）が書き込まれたかどうかの判断となる。
【００３６】
なお、図２で４０２ａは、暗号化コードを示し、この暗号化コードは、コンフィギュレーションデータを、図４に沿って格納するごとに毎回違う暗号化コードが設定されるので、シリアルフラッシュメモリが異なるごとに異なる暗号化コードとなり、また同じシリアルフラッシュメモリでも、初期化して次に書き込むときは、前回とは異なる暗号化コードが用いられる。
【００３７】
次に、このようにしてシリアルフラッシュメモリ４０２に書き込まれたコンフィギュレーションデータをプログラマブルロジックデバイス４００に設定し、プログラマブルロジックデバイス４００をコンフィギュレーションする流れを、図３を参照して説明する。
【００３８】
まず、電源をオンにして（ステップ６００）、ステップ６０１において、プログラマブルロジックデバイス４００内のコンフィギュレーションメモリが消去されたことを示すＩＮＩＴ信号（初期化終了信号）４０５ｂがアサートになったか否かが制御回路４０１ａにより検出される。ＩＮＩＴ信号４０５ｂがアサートになると、ステップ６０２に移行する。
【００３９】
ステップ６０２では、制御回路４０１ａが、暗号化コード４０２ａが格納されている暗号化コード格納アドレスをアドレス生成回路４０１ｃに送出する。コマンド生成回路４０１ｂは読み出しコマンドをパラレル／シリアル変換回路４０１ｄに出力し、アドレス生成回路４０１ｃは暗号化コード格納アドレスを暗号化回路４０１ｍに送出する。このとき暗号化回路４０１ｍは未設定状態にあり、この状態では、アドレスはまだ暗号化されず、暗号化されていないアドレスがパラレル／シリアル変換回路４０１ｄに出力される。パラレル／シリアル変換回路４０１ｄは、読み出しコマンドと、暗号化コード格納アドレスを、それぞれシリアルデータに変換し、ＳＤ信号（送出データ信号）４０６ａとしてシリアルフラッシュメモリ４０２に送出する。シリアルフラッシュメモリ４０２には、制御回路４０１ａからＣＳ信号（チップセレクト信号）４０６ｂが送出されるので、暗号化コード４０２ａが格納されているアドレスにＲＥＡＤアクセスが行われ、暗号化コード４０２ａがＲＤ信号（読み出しデータ信号）として読み出される。
【００４０】
ステップ６０３では、ステップ６０２でＲＤ信号として読み出された暗号化コードを、シリアル／パラレル変換回路４０１ｈ、ＦＩＦＯ回路４０１ｉを介して暗号化回路４０１ｍに設定する。この暗号化コードにより、以後のシリアルフラッシュメモリ４０２のＲＥＡＤアクセス時のアドレスは、図４のコンフィギュレーションデータ書き込み時のアドレスと同じ暗号化コードで暗号化される。
【００４１】
ステップ６０４では、シリアルフラッシュメモリ４０２からコンフィギュレーションデータが順次読み出される。このために、コマンド生成回路４０１ｂは、読み出しコマンドを生成し、アドレス生成回路は、コンフィギュレーションデータ（１）が格納されているアドレスＡ１を生成する。このとき、生成されたアドレスＡ１は、暗号化回路４０１ｍにより上述した暗号化コードで暗号化される。パラレル／シリアル変換回路４０１ｄは、読み出しコマンドと暗号化されたアドレスＡ１をシリアルデータに変換し、ＳＤ信号４０６ａとしてＣＳ信号４０６ｂと共にシリアルフラッシュメモリ４０２に対して送出する。
【００４２】
シリアルフラッシュメモリ４０２がＳＤ信号４０６ａ及びＣＳ信号４０６ｂを受信すると、暗号化されたアドレスＡ１に格納されているコンフィギュレーションデータ（１）５００にＲＥＡＤアクセスが行われ、そのコンフィギュレーションデータがＲＤ信号４０６ｃとして読み出される。
【００４３】
ステップ６０５では、シリアルフラッシュメモリ４０２からＲＤ信号４０６ｃとして読み出されたコンフィギュレーションデータ（１）５００が、シリアル／パラレル変換回路４０１ｈで、ブロック単位毎にパラレル信号に変換され、ＦＩＦＯ回路４０１ｉに書き込まれると共にエラー検出回路４０１ｅでブロック単位でビット化けなどのエラーが発生したか否かが検出される。
【００４４】
エラーが発生していない場合はステップ６０６に進み、ＤＩＮ信号禁止用ＡＮＤ回路４０１ｆ及びＣＣＬＫ信号禁止用ＡＮＤ回路４０１ｇを開放とし、コンフィギュレーション制御装置４０１はＦＩＦＯ回路４０１ｉからコンフィギュレーションデータを順次読み出し、シリアルのＤＩＮ信号（入力データ信号）４０５ｃとしてプログラマブルロジックデバイス４００に送出する。プログラマブルロジックデバイス４００は、このようにして読み出されたコンフィギュレーションデータをＣＣＬＫ信号（クロック信号）４０５ｄに同期して取り込んでロードし、プログラマブルロジックデバイス４００にコンフィギュレーションデータ（１）５００がブロック単位で設定され、ＤＯＮＥ信号がアサートされる（ステップ６０９のＹＥＳ）。
【００４５】
一方、エラーが発生した場合はステップ６０７に進み、ＤＩＮ信号禁止用ＡＮＤ回路４０１ｆ及びＣＣＬＫ信号禁止用ＡＮＤ回路４０１ｇを禁止とし、プログラマブルロジックデバイス４００に送出するシリアルのＤＩＮ信号４０５ｃ及びＣＣＬＫ信号４０５ｄを停止させ、コンフィギュレーションを一時中断させる。ＦＩＦＯ回路４０１ｉでは、エラーが発生したブロックのコンフィギュレーションデータをリセットする。
【００４６】
ステップ６０８では、制御回路４０１ａはエラー検出回路４０１ｅからの信号に基づき、エラーが発生したブロックデータのアドレス検出を行い、その情報を記憶する。図２のシリアルフラッシュメモリマップに示す他のコンフィギュレーションデータ（２）５０１のブロックデータで、エラーが発生したコンフィギュレーションデータ（１）のブロックデータに対応するブロックデータのアドレスがアドレス生成回路４０１ｃで生成されるとともに、その情報が記憶される。例えば、コンフィギュレーションデータ（１）をロード中に、ブロックデータＢＬＯＣＫ（１−３）にエラーが発生した場合には、コンフィギュレーションデータ（２）のブロックデータＢＬＯＣＫ（２−３）のアドレスを生成して、該アドレスに格納されているブロックデータＢＬＯＣＫ（２−３）を読み出す（ステップ６０４）。この読み出されたブロックデータＢＬＯＣＫ（２−３）が、エラー検出回路４０１ｅでエラーがあるかどうかが検出され（ステップ６０５）、エラーがなければ、エラーが検出されたブロックデータＢＬＯＣＫ（１−３）が、このエラーのないブロックデータＢＬＯＣＫ（２−３）に置き換えられる。
【００４７】
一方、ブロックデータＢＬＯＣＫ（２−３）にも、エラーが検出されたときは、他のコンフィギュレーションデータ（ｎ）（ｎ＝３、．．．．．）のブロックデータＢＬＯＣＫ（ｎ−３）が格納されているアドレスを生成して、該ブロックデータを読み出し、それにエラーがない場合は、エラーが検出されたブロックデータＢＬＯＣＫ（１−３）が、エラーのないブロックデータＢＬＯＣＫ（ｎ−３）に置き換えられて、プログラマブルロジックデバイス４００にロードされ、設定される。
【００４８】
その後、コンフィギュレーションデータ（ｎ）のブロックデータＢＬＯＣＫ（ｎ−３）の後のブロックデータが順次プログラマブルロジックデバイス４００にロードされていく。このロードの過程で、コンフィギュレーションデータ（ｎ）の他のブロックデータにもエラーが検出された場合には、上記と同様にして、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのないブロックデータに置き換えられる。
【００４９】
このように、ロードしようとしているコンフィギュレーションデータのブロックデータにエラーが検出された場合には、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのない正常なブロックデータが読み出され、エラーが検出されたブロックデータが、エラーのないブロックデータに置き換えられ、エラーのないコンフィギュレーションデータがプログラマブルロジックデバイスに設定される。
【００５０】
ステップ６０９では、プログラマブルロジックデバイス４００が必要な回路規模だけコンフィギュレーションデータを正常に受信すると、コンフィギュレーション制御装置４０１に対してＤＯＮＥ信号（終了信号）４０５ａをアサートする。この時コンフィギュレーション制御装置４０１は制御回路４０１ａでＤＯＮＥ信号４０５ａがアサートされたことを確認する。
【００５１】
ステップ６１１では、制御回路４０１ａでエラー発生の履歴を読み出し、その情報をユーザーに対して通知する。
【００５２】
ステップ６１２では、制御回路４０１ａでエラー発生の履歴を読み出し、エラーの発生したブロックデータの有無を判断する。
【００５３】
エラーが発生したブロックデータがない場合、ステップ６１８に進みコンフィギュレーション制御装置４０１はコンフィギュレーションを終了する。
【００５４】
一方、エラーが発生したブロックデータがある場合、コンフィギュレーション制御装置４０１は、ステップ６１３以降の処理を行い、シリアルフラッシュメモリ４０２を自動修復する。
【００５５】
ステップ６１３では、アドレス生成回路４０１ｃが制御回路４０１ａの履歴にあるエラーが発生したブロックデータのアドレス情報を受信し、図２のシリアルフラッシュメモリマップに示すコンフィギュレーションデータ（１）５００、コンフィギュレーションデータ（２）５０１、．．．．．コンフィギュレーションデータ（ｎ）５０２の中から正常に取得できた同一ブロックデータのアドレスを生成し、そのアドレスにＲＥＡＤアクセスする。
【００５６】
ステップ６１４では、図２のシリアルフラッシュメモリマップに示す通り、ＲＥＡＤアクセスされたブロックデータが読み出される。
【００５７】
ステップ６１５では、シリアルフラッシュメモリ４０２から読み出したブロックデータをシリアル／パラレル変換回路４０１ｈでパラレル信号に変換し、ＦＩＦＯ回路４０１ｉに書き込む。
【００５８】
ステップ６１６では、コマンド生成回路４０１ｂで制御回路４０１ａからの信号により書き込み用のコマンド情報が生成され、エラーの発生したブロックデータのアドレスにＷＲＩＴＥアクセスが行われ、エラーの発生したブロックデータが、エラーのない正常なブロックデータに書き換えられる。例えば、コンフィギュレーションデータ（２）のブロックデータＢＬＯＣＫ（２−２）でエラーが検出された場合には、このブロックデータが、コンフィギュレーションデータ（１）のブロックデータＢＬＯＣＫ（１−２）が正常として、その正常なブロックデータで書き換えられる。
【００５９】
ステップ６１７では、書き込み動作が正常に終了した場合、該当するブロックのエラー発生履歴をリセットし、ステップ６１２へ進む。そして、すべてのエラーのあるブロックデータを、正常な他のブロックデータで書き換え、シリアルフラッシュメモリ４０２を自動修復する。
【００６０】
このようにして、シリアルフラッシュメモリに格納されているコンフィギュレーションデータにブロック単位でエラーが発生した場合でも、エラーのあるブロックデータが、他のコンフィギュレーションデータの対応する正常なブロックデータで書き換えられるので、シリアルフラッシュメモリに格納されているコンフィギュレーションデータは常に正常状態になっており、システムの信頼性が向上する。
【００６１】
なお、上述した実施例では、ブロックデータにエラーが検出された場合には、エラーが検出されたブロックデータに対応する他のコンフィギュレーションデータのブロックデータでエラーのないブロックデータを読み出し、エラーが検出されたブロックデータを、エラーのないブロックデータに置き換えて、コンフィギュレーションデータをプログラマブルロジックデバイスにロードしたが、コンフィギュレーションデータのブロックデータにエラーがある場合には、他のブロックデータも異常であることが多い。したがって、ブロックデータの一つにエラーがある場合、そのコンフィギュレーションデータ全体を破棄して、他のコンフィギュレーションデータを読み込むようにしてもよい。たとえば、コンフィギュレーションデータ（１）のいずれか一つのブロックデータにエラーが検出された場合、プログラマブルロジックデバイス４００にすでにロードされているコンフィギュレーションデータ（１）を消去し、コンフィギュレーションデータ（ｎ）（ｎ＝２、．．．．．）からエラーのないコンフィギュレーションデータをシリアルフラッシュメモリ４０２から読み出し、そのエラーのないコンフィギュレーションデータをプログラマブルロジックデバイス４００に設定するようにしてもよい。
【００６２】
このとき、シリアルフラッシュメモリ４０２の自動修復は、エラーが検出されたコンフィギュレーションデータ全体を、エラーのない他のコンフィギュレーションデータで書き換えて行うようにする。
【００６３】
なお、上述した実施例では、コンフィギュレーションデータを複数個格納するメモリをシリアルフラッシュメモリで説明しているが、汎用フラッシュメモリを使用しその機能を実現しても良い。
【００６４】
また、エラーの検出方法はＣＲＣ、パリティチェック、チェックサム等で実現可能である。
【図面の簡単な説明】
【００６５】
【図１】本発明のコンフィギュレーション装置の構成を示すブロック図である。
【図２】コンフィギュレーションデータをメモリに格納したときのマップを示す説明図である。
【図３】コンフィギュレーションデータをシリアルフラッシュメモリから読み出し、プログラマブルロジックデバイスに設定する流れを説明するフローチャートである。
【図４】コンフィギュレーションデータをシリアルフラッシュメモリに書き込む流れを示すフローチャートである。
【図５】従来のコンフィギュレーション装置の構成を示すブロック図である。
【図６】従来のコンフィギュレーションデータのメモリ格納状態を示す説明図である。
【図７】従来のコンフィギュレーションデータをプログラマブルロジックデバイスに設定する流れを説明するフローチャートである。
【符号の説明】
【００６６】
４００  プログラマブルロジックデバイス
４０１  コンフィギュレーション制御装置
４０２  シリアルフラッシュメモリ
４０３  クロック源
【図１】
2007265056.tif 000003
【図２】
2007265056.tif 000004
【図３】
2007265056.tif 000005
【図４】
2007265056.tif 000006
【図５】
2007265056.tif 000007
【図６】
2007265056.tif 000008
【図７】
2007265056.tif 000009