(57)【要約】  複数の回路情報と、論理回路の構成に失敗していない前記回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報とを予め記憶する記憶素子と、起動の際、または、前記複数の回路情報のいずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子から前記起動制御用回路情報を読み出して前記起動制御用論理回路を構成し、構成した前記起動制御用論理回路に前記論理回路の構成に失敗していない前記回路情報を選択させ、前記起動制御用論理回路に選択される前記回路情報を前記記憶素子から読み出して前記回路情報に応じた前記論理回路の構成を行う集積回路と、を備えることを特徴とする集積回路システム。
2018173357.tif 000002
【特許請求の範囲】
【請求項１】
複数の回路情報と、論理回路の構成に失敗していない前記回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報とを予め記憶する記憶素子と、
起動の際、または、前記複数の回路情報のいずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子から前記起動制御用回路情報を読み出して前記起動制御用論理回路を構成し、構成した前記起動制御用論理回路に前記論理回路の構成に失敗していない前記回路情報を選択させ、前記起動制御用論理回路に選択される前記回路情報を前記記憶素子から読み出して前記回路情報に応じた前記論理回路の構成を行う集積回路と、
を備えることを特徴とする集積回路システム。
【請求項２】
前記記憶素子は、
前記論理回路の構成に失敗した前記回路情報に関する情報である起動履歴情報を記憶し、
前記起動制御用論理回路は、
前記起動履歴情報を参照して、前記論理回路の構成に失敗していない前記回路情報を選択する
ことを特徴とする請求項１に記載の集積回路システム。
【請求項３】
前記複数の回路情報は、第１の回路情報と第２の回路情報とを有し、
前記起動履歴情報は、直前に前記集積回路が前記記憶素子から読み出した前記回路情報を示す情報であり、
前記記憶素子は、
前記第１の回路情報と、前記第２の回路情報のいずれを最初に起動するかを示す起動面情報を記憶し、
前記集積回路は、
前記起動履歴情報が示す前記回路情報が、前記論理回路の構成に成功したか否かを示す情報を記憶する記憶部を備えており、
前記起動制御用論理回路は、
前記起動面情報と、前記起動履歴情報と、前記記憶部が記憶する情報とに基づいて、前記起動面情報が示す前記回路情報により前記論理回路の構成を行い、前記起動面情報が示す一方の前記回路情報が前記論理回路の構成に失敗した場合に、他方の前記回路情報を選択して前記論理回路の構成を行い、前記他方の回路情報が前記論理回路の構成に失敗した場合、処理を終了する
ことを特徴とする請求項２に記載の集積回路システム。
【請求項４】
前記起動制御用回路情報は、
前記記憶素子の記憶領域の先頭に記憶されており、
前記集積回路は、
前記起動の際、または、前記いずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子の先頭に記憶されている情報から読み出すことにより、前記記憶素子から前記起動制御用回路情報を読み出して前記起動制御用論理回路を構成する
ことを特徴とする請求項１から３のいずれか１項に記載の集積回路システム。
【請求項５】
複数の回路情報を記憶する記憶素子と、前記記憶素子から前記回路情報を読み出して前記回路情報に応じた論理回路の構成を行う集積回路とを備える集積回路システムにおける起動制御方法であって、
前記論理回路の構成に失敗していない前記回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報を前記記憶素子に記憶させ、
起動の際、または、前記複数の回路情報のいずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子の前記起動制御用回路情報に基づいて、前記集積回路に前記起動制御用論理回路を構成し、
構成した前記起動制御用論理回路が、前記論理回路の構成に失敗していない前記回路情報を選択し、前記起動制御用論理回路が選択した前記回路情報に基づいて、前記集積回路に前記論理回路の構成を行う
ことを特徴とする集積回路システムの起動制御方法。
【請求項６】
複数の回路情報を記憶する記憶素子に接続され、前記回路情報に応じた論理回路を構成する集積回路に、
起動の際、または、前記複数の回路情報のいずれかの回路情報による論理回路の構成が失敗した際、起動制御用論理回路を構成させ、前記起動制御用論理回路に前記論理回路の構成に失敗していない前記回路情報を選択させ、
前記起動制御用論理回路が選択する前記回路情報を前記記憶素子から読み出させて、前記回路情報に応じた前記論理回路の構成を行わせる
ことを実行させるための起動制御用回路情報である起動制御用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路システム、集積回路システムの起動制御方法、及び起動制御用プログラムに関する。
【背景技術】
【０００２】
ＦＰＧＡ（Field Programmable Gate Array）等のプログラマブルデバイスの大容量化に伴い、コンフィグレーションデータのデータサイズも増大している。そのため、昨今、ビットストリームデータであるコンフィグレーションデータのビットエラーレートを無視することができなくなりつつある。更に、デバイスプロセスの微細化が進み、消費電力、性能、コストなどの恩恵を受けられるようになってきている一方で、宇宙線によるソフトエラーの影響を受けやすくなってきている。【０００３】
そのため、ハードウェア障害でないのにも関わらず、プログラマデバイスが正常に起動しない現象が発生するようになった。これにより、現象が発生する度にハードウェア改修を実施しなければならず、余計な工数や費用が発生すること増えている。また、正常に起動しない場合、プログラマブルデバイスがスタックしてしまう。これにより、システムがダウンしてしまい、運用中の利用者に対しても迷惑をかけてしまう。したがって、フェールセーフの観点からも、これらの問題の解決が望まれている。【０００４】
ＦＰＧＡ等の揮発性のプログラマブルデバイスにおいて、回路情報を書き換える際の課題に着目した技術が提案されている（例えば、特許文献１、特許文献２参照）。特に、特許文献１に記載の技術では、上記の問題の解決を図っている。特許文献１に記載の技術では、回路情報をＦＰＧＡに読み込んで論理回路を構成する処理（以下、コンフィグレーション処理ともいう）を行う際、種々の要因からコンフィグレーション処理に失敗した場合でも、ＦＰＧＡのスタックを防止する冗長機能を提供している。【０００５】
特許文献１に記載の技術は、例えば、図１０に示されるようなＦＰＧＡを含む構成であり、図１１及び図１２に示すような処理を行うシステムである。図１０において、インターフェース２０１は、Ｃｏｎｆｉｇ Ｉ／Ｆである。インターフェース２０２は、ＯｒｉｇｉｎａｌＩ／Ｆである。また、符号２０３は、信号線である。当該システムでは、ＦＰＧＡ１０２が、ＰＬＤ１０１を経由してフラッシュメモリ１００から読み込んだ回路情報にソフトエラーが発生したと判定した場合（図１１：ステップＳ３、Ｔｒｕｅ）、ＰＬＤ１０１にコンフィグレーションＮＧの通知を行う（図１１：ステップＳ７）。ソフトエラーの発生原因としては、前述したように、回路情報に含まれるビットストリーム（２進数の０と１の情報）のあるビットが反転するといった異常や、宇宙線による影響を受けた異常等がある。【０００６】
ＰＬＤ１０１は、ＦＰＧＡ１０２からコンフィグレーションＮＧの通知を受信すると（図１２：ステップＳ２２、Ｔｒｕｅ）、フラッシュメモリ１００の起動面情報を参照し、起動面情報の値の反転値が示す他の回路情報をフラッシュメモリ１００から読み出す（図１２：ステップＳ２３）。ＰＬＤ１０１は、読み出した他の回路情報をＦＰＧＡ１０２に送信する（図１２：ステップＳ２５）。これにより、例えば、回路情報として、回路情報Ａと回路情報Ｂの２つの回路情報が存在する場合であって、回路情報Ａでのコンフィグレーション処理に失敗した場合、回路情報Ｂでのコンフィグレーション処理を行うことが可能となる。回路情報Ａによるコンフィグレーション処理に失敗して回路情報Ｂにおいて成功した場合、ソフトエラーとして検出される。一方、回路情報Ａと回路情報Ｂの双方でコンフィグレーション処理に失敗した場合、ハードウェア障害として検出される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第６０３２３６０号公報
【特許文献２】特開２００９−１８２４３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載の技術では、ＦＰＧＡ１０２が回路情報Ａと回路情報Ｂのいずれでコンフィグレーション処理を行ったかという情報や、ＦＰＧＡ１０２がコンフィグレーション処理に成功したか失敗したかといった情報を、ＰＬＤ１０１において判定している。このため、特許文献１に記載の技術では、ＦＰＧＡ１０２のコンフィグレーション処理を行うために、ＰＬＤ１０１という制御用デバイスが別に必要な構成となっている。【０００９】
しかしながら、このような別の制御用デバイスを必要とすることは、実際の装置開発において、制御用デバイスの部品コストが発生する。このため、装置原価率が悪くなるという問題がある。【００１０】
また、実装基板上に制御用デバイスのための実装領域を確保する必要がある。このため、基板設計において、制御用デバイスの配置を検討する等の新たな作業が発生してしまい、また、小型化を阻害してしまうという問題がある。【００１１】
本発明は、上記課題を解決する集積回路システム、集積回路システムの起動制御方法、及び起動制御用プログラムを提供する。
【課題を解決するための手段】
【００１２】
上記問題を解決するために、本発明の一態様は、複数の回路情報と、論理回路の構成に失敗していない前記回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報とを予め記憶する記憶素子と、起動の際、または、前記複数の回路情報のいずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子から前記起動制御用回路情報を読み出して前記起動制御用論理回路を構成し、構成した前記起動制御用論理回路に前記論理回路の構成に失敗していない前記回路情報を選択させ、前記起動制御用論理回路に選択される前記回路情報を前記記憶素子から読み出して前記回路情報に応じた前記論理回路の構成を行う集積回路と、を備えることを特徴とする集積回路システムである。【００１３】
また、本発明の一態様は、複数の回路情報を記憶する記憶素子と、前記記憶素子から前記回路情報を読み出して前記回路情報に応じた論理回路の構成を行う集積回路とを備える集積回路システムにおける起動制御方法であって、前記論理回路の構成に失敗していない前記回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報を前記記憶素子に記憶させ、起動の際、または、前記複数の回路情報のいずれかの前記回路情報による前記論理回路の構成が失敗した際、前記記憶素子の前記起動制御用回路情報に基づいて、前記集積回路に前記起動制御用論理回路を構成し、構成した前記起動制御用論理回路が、前記論理回路の構成に失敗していない前記回路情報を選択し、前記起動制御用論理回路が選択した前記回路情報に基づいて、前記集積回路に前記論理回路の構成を行うことを特徴とする集積回路システムの起動制御方法である。【００１４】
また、本発明の一態様は、複数の回路情報を記憶する記憶素子に接続され、前記回路情報に応じた論理回路を構成する集積回路に、起動の際、または、前記複数の回路情報のいずれかの回路情報による論理回路の構成が失敗した際、起動制御用論理回路を構成させ、前記起動制御用論理回路に前記論理回路の構成に失敗していない前記回路情報を選択させ、前記起動制御用論理回路が選択する前記回路情報を前記記憶素子から読み出させて、前記回路情報に応じた前記論理回路の構成を行わせることを実行させるための起動制御用回路情報である起動制御用プログラムである。
【発明の効果】
【００１５】
この発明によれば、プログラマブルな集積回路において、起動に失敗した場合、別の制御用デバイスを用いずに、失敗していない他の回路情報で起動することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】一実施形態による集積回路システム１と、集積回路システム１に接続される機器の接続関係を示すブロック図である。
【図２】同実施形態によるフラッシュメモリのデータの配置例を示す図である。
【図３】同実施形態によるフラッシュメモリが５１２Ｍｂｉｔである場合のデータの配置例を示す図である。
【図４】同実施形態のＦＰＧＡによるコンフィグレーション処理を示すフローチャートである。
【図５】同実施形態のＦＰＧＡにおいて構成される起動制御用論理回路による起動制御処理を示すフローチャートである。
【図６】同実施形態において第１コンフィグレーションデータと第２コンフィグレーションデータとを起動していく処理の全体の流れを示すフローチャート（その１）である。
【図７】同実施形態において第１コンフィグレーションデータと第２コンフィグレーションデータとを起動していく処理の全体の流れを示すフローチャート（その２）である。
【図８】同実施形態における起動制御用コンフィグレーションデータのコンフィグレーション処理を示すフローチャートである。
【図９】同実施形態における第１コンフィグレーションデータと第２コンフィグレーションデータとの起動のパターンを示す図である。
【図１０】ＰＬＤを用いてＦＰＧＡのコンフィグレーションデータを切り替えるシステムの構成を示すブロック図である。
【図１１】ＰＬＤを用いてＦＰＧＡのコンフィグレーションデータを切り替えるシステムによる処理の流れを示すフローチャート（その１）である。
【図１２】ＰＬＤを用いてＦＰＧＡのコンフィグレーションデータを切り替えるシステムによる処理の流れを示すフローチャート（その２）である。
【図１３】集積回路システムの最少構成を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態について図面を参照して説明する。図１は、一実施形態による集積回路システム１、及び集積回路システム１に接続するＣＰＵ（Central Processing Unit）３とＪＴＡＧ(Joint Test Action Group)  Ｃｏｎｎｅｃｔｏｒ５、並びにＣＰＵ３とＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５に接続するＰＣ（Personal Computer）４の構成を示すブロック図である。集積回路システム１は、フラッシュメモリ１０とＦＰＧＡ２０を備える。
【００１８】
フラッシュメモリ１０は、ＦＰＧＡ２０と接続線２により接続されている。接続線２としては、例えば、ＱＳＰＩ(Quad Serial Peripheral Interface)等の、ＦＰＧＡ２０とフラッシュメモリ１０間を接続する汎用シリアルインタフェースの仕様のものが適用される。
【００１９】
フラッシュメモリ１０は、データの消去、書き込みを行うことができ、電源の供給がなくなっても記憶している情報を維持することができる不揮発性の半導体メモリである。図２は、フラッシュメモリのデータの配置例を示す図である。フラッシュメモリ１０は、図２に示すようにデータが配置されている。フラッシュメモリ１０は、第２コンフィグレーションデータ１２、第１コンフィグレーションデータ１１、起動面情報１３、起動履歴情報１４、起動制御用コンフィグレーションデータ１５を記憶する。
【００２０】
第１コンフィグレーションデータ１１、第２コンフィグレーションデータ１２、起動制御用コンフィグレーションデータ１５は、ＦＰＧＡ２０より読み込まれて、コンフィグレーション処理を経て起動されることで論理回路を構成する回路情報である。例えば、第１コンフィグレーションデータ１１及び第２コンフィグレーションデータ１２は、ＦＰＧＡ２０の利用者が何らかの用途に応じて実際に運用したい論理回路を構成する回路情報である。起動制御用コンフィグレーションデータ１５は、起動制御用論理回路を構成する回路情報である。
【００２１】
起動面情報１３は、第１コンフィグレーションデータ１１を起動するか、または第２コンフィグレーションデータ１２を起動するかを示す情報である。ＣＰＵ３によって当該情報がフラッシュメモリ１０の起動面情報１３に書き込まれる。起動履歴情報１４には、直前にＦＰＧＡ２０によってコンフィグレーション処理が行われた回路情報を示す情報が、ＦＰＧＡ２０によって書き込まれる。すなわち、起動履歴情報１４には、第１コンフィグレーションデータ１１か、第２コンフィグレーションデータ１２のいずれかの回路情報を示す情報が書き込まれる。なお、フラッシュメモリ１０の各データ領域１１〜１５の大きさは、フラッシュメモリ１０がＮブロック有している場合、起動面情報１３及び起動履歴情報１４が、それぞれ１ブロックである。また、起動制御用コンフィグレーションデータ１５がｋブロックであり、第１コンフィグレーションデータ１１及び第２コンフィグレーションデータ１２が、それぞれ（Ｎ−２−ｋ）／２ブロックである。
【００２２】
図１に戻り、ＣＰＵ３には、バージョンアップ等に伴ってＦＰＧＡ２０の論理回路を更新する際に、ＦＰＧＡ２０に読み込ませる回路情報の切り替えを行うソフトウェア制御部などが実装される。ＣＰＵ３は、ＰＣ４からの指示信号を受けて、ＦＰＧＡ２０を介して接続線２を通じてフラッシュメモリ１０の起動面情報１３に起動させる回路情報を示す情報を書き込む。これにより、回路情報の切り替えが行われる。
【００２３】
ＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５は、ＦＰＧＡ２０のＪＴＡＧ回路２９に接続され、ＰＣ４からの指示信号を受けて、ＦＰＧＡ２０のテストやデバッグ等を行う。ＰＣ４は、ＣＰＵ３と、ＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５に接続され、ユーザの操作を受けて、ＣＰＵ３やＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５に指示信号を出力する。
【００２４】
ＦＰＧＡ２０は、回路情報を読み込むことにより、読み込んだ回路情報に応じた論理回路を構成するプログラマブルな集積回路である。ＦＰＧＡ２０は、第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、エラーカウンタレジスタ２４、制御部２５、コンフィグレーションメモリ２６、プログラマブル素子２７、Ｉ／Ｏ回路２８、及びＪＴＡＧ回路２９を備える。ＦＰＧＡ２０において、第１ステータスレジスタ２１には、コンフィグレーション処理に成功した場合、制御部２５によって「ＮＯＲＭＡＬ」を示す値「０ｘ０」が書き込まれる。一方、コンフィグレーション処理が失敗した場合、第１ステータスレジスタ２１には、制御部２５によって「ＥＲＲＯＲ」を示す値「０ｘ１」が書き込まれる。また、第１ステータスレジスタ２１には、制御部２５によってクリアされる場合、「ＮＯＲＭＡＬ」を示す値「０ｘ０」が書き込まれる。
【００２５】
第２ステータスレジスタ２２は、起動制御用論理回路３５が、自らに対してＦＰＧＡリコンフィグ指示の処理を開始した場合に、当該起動制御用論理回路３５によってアサートされる。起動制御用論理回路３５は、起動制御用コンフィグレーションデータ１５がＦＰＧＡ２０において起動されることで構成される。アサートとは、例えば、「０ｘ１」の値が書き込まれることである。
【００２６】
コンフィグレーションアドレスレジスタ２３には、フラッシュメモリ１０において回路情報が記憶されているスタートアドレスが、制御部２５、または起動制御用論理回路３５によって書き込まれる。ＦＰＧＡ２０のコンフィグレーション処理は、コンフィグレーションアドレスレジスタ２３に記憶されているフラッシュメモリ１０のアドレス値から回路情報を読み出すことによって開始される。エラーカウンタレジスタ２４には、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理が失敗した回数が制御部２５によって書き込まれる。
【００２７】
制御部２５は、ＦＰＧＡ２０が備える上記の各レジスタ、すなわち第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、エラーカウンタレジスタ２４をＦＰＧＡ２０が起動される際に初期化する。また、制御部２５は、各レジスタに対して情報や値の書き込みを行ったり、読み出しを行ったりする。また、制御部２５は、各レジスタに記憶される情報や値を読み出し、読み出した情報や値に基づいて判定処理を行う。また、制御部２５は、コンフィグレーションアドレスレジスタ２３に記憶されているアドレス値をスタートアドレスとしてフラッシュメモリ１０から回路情報を読み出す。そして、制御部２５は、読み出した回路情報をコンフィグレーションメモリ２６に書き込む。また、制御部２５は、コンフィグレーションメモリ２６に書き込まれた回路情報に対してコンフィグレーション処理を開始する。なお、制御部２５は、例えば、ＦＰＧＡ２０において、これらの処理を行うハードウェアとして予め構築されている論理回路である。
【００２８】
コンフィグレーションメモリ２６には、制御部２５がフラッシュメモリ１０から読み出した回路情報が制御部２５によって書き込まれる。プログラマブル素子２７は、コンフィグレーションメモリ２６に記憶されている回路情報に応じた論理回路となる素子である。例えば、プログラマブル素子２７は、第１コンフィグレーションデータ１１の場合、第１論理回路３１となり、第２コンフィグレーションデータ１２の場合、第２論理回路３２となる。また、プログラマブル素子２７は、起動制御用コンフィグレーションデータ１５の場合、起動制御用論理回路３５となる。
【００２９】
Ｉ／Ｏ回路２８は、ＦＰＧＡ２０に接続する外部回路との間で信号の送受信を行う。ＪＴＡＧ回路２９は、ＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５に接続される。ＪＴＡＧ回路２９は、ＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ５を通じてＰＣ４から指示信号を受信すると、ＦＰＧＡ２０のテストやデバッグ、例えば、回路情報にしたがってプログラマブル素子２７に構築された論理回路のテスト等を行う。
【００３０】
図３は、フラッシュメモリ１０が、例えば、５１２Ｍｂｉｔのフラッシュメモリである場合のデータの配置の一例を示す図である。起動制御用コンフィグレーションデータ１５は、アドレス値「０ｘ０００００００〜０ｘ０ＥＤＦＦＦＦ」の領域に書き込まれる。起動履歴情報１４は、アドレス値「０ｘ０ＥＥ００００」の領域に書き込まれる。例えば、第１コンフィグレーションデータ１１でコンフィグレーション処理が行われた場合、起動履歴情報１４として値「０ｘ０」が書き込まれる。一方、第２コンフィグレーションデータ１２でコンフィグレーション処理が行われた場合、起動履歴情報１４として値「０ｘ１」が書き込まれる。
【００３１】
起動面情報１３は、アドレス値「０ｘ０ＥＦ００００」の領域に書き込まれる。例えば、第１コンフィグレーションデータ１１が指定される場合、起動面情報１３として値「０ｘ０」が書き込まれる。一方、第２コンフィグレーションデータ１２が指定される場合、起動面情報１３として値「０ｘ１」が書き込まれる。第１コンフィグレーションデータ１１は、アドレス値「０ｘ０Ｆ０００００〜０ｘ２７７ＦＦＦＦ」の領域に書き込まれる。第２コンフィグレーションデータ１２は、アドレス値「０ｘ２７８００００〜０ｘ３ＦＦＦＦＦＦ」の領域に書き込まれる。例えば、第１コンフィグレーションデータ１１をＦＰＧＡ２０で起動する場合、スタートアドレス値「０ｘ０Ｆ０００００」が、コンフィグレーションアドレスレジスタ２３に書き込まれる。コンフィグレーションアドレスレジスタ２３は、クリアされると、値「０ｘ０００００００」が記憶される。このため、コンフィグレーションアドレスレジスタ２３がクリアされた状態でＦＰＧＡ２０が起動されると、起動制御用コンフィグレーションデータ１５が選択される。
【００３２】
（コンフィグレーション処理）
図４及び図５を参照しつつ、集積回路システム１の処理について説明する。図４は、制御部２５により行われるコンフィグレーション処理を示している図である。図４のコンフィグレーション処理を経て、ＦＰＧＡ２０のプログラマブル素子２７が起動制御用論理回路３５となった場合に、当該起動制御用論理回路３５によって、図５に示す起動制御処理が行われる。
【００３３】
図４は、ＦＰＧＡ２０におけるコンフィグレーション処理を示すフローチャートである。最初にＦＰＧＡ２０が起動すると、パワーオンリセットの処理となり、ＦＰＧＡ２０の初期化が行われる。このとき、各レジスタ、すなわち第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、及びエラーカウンタレジスタ２４も初期化される。
【００３４】
制御部２５は、コンフィグレーションアドレスレジスタ２３に記憶されているアドレス値に基づいて、フラッシュメモリ１０から回路情報を読み出す。制御部２５は、読み出した回路情報をコンフィグレーションメモリ２６に書き込み、コンフィグレーション処理（ＦＰＧＡコンフィグレーション処理）を開始する（ステップＳａ１）。制御部２５は、コンフィグレーション処理が正常に行われているか否かを判定する（ステップＳａ２）。
【００３５】
制御部２５は、例えば、コンフィグレーション処理においてソフトエラーの発生を検出した場合に、コンフィグレーション処理が正常に行われなかったと判定する。コンフィグレーション処理が正常に行われなかったと判定した場合（ステップＳａ２、Ｎｏ）、制御部２５は、第１ステータスレジスタ２１に「ＥＲＲＯＲ」を示す値「０ｘ１」を書き込み、コンフィグレーションアドレスレジスタ２３をクリアする（ステップＳａ３）。
【００３６】
制御部２５は、第２ステータスレジスタ２２が、アサートしているか否か、すなわち第２ステータスレジスタ２２に値「０ｘ１」が記憶されているか否かを判定する（ステップＳａ４）。制御部２５は、第２ステータスレジスタ２２が、アサートしていると判定した場合（ステップＳａ４、Ｙｅｓ）、第２ステータスレジスタ２２をクリアする、すなわち第２ステータスレジスタに「０ｘ０」を書き込む。制御部２５は、ステップＳａ１に戻る（ステップＳａ５）。
【００３７】
一方、制御部２５は、第２ステータスレジスタ２２が、アサートしていないと判定した場合（ステップＳａ４、Ｎｏ）、予め内部の記憶領域に記憶されているｎの値を参照する。制御部２５は、エラーカウンタレジスタ２４に記憶されているコンフィグレーション処理が失敗した回数を示す値が、ｎ未満であるか否かを判定する（ステップＳａ６）。制御部２５は、エラーカウンタレジスタ２４に記憶されている値がｎ未満であると判定した場合（ステップＳａ６、Ｙｅｓ）、エラーカウンタレジスタ２４が記憶する値に１を加えて、エラーカウンタレジスタ２４に書き込む。制御部２５は、ステップＳａ１に戻る（ステップＳａ７）。
【００３８】
一方、制御部２５は、エラーカウンタレジスタ２４に記憶されている値がｎ未満でないと判定した場合（ステップＳａ６、Ｎｏ）、ハードウェア障害が発生したとして、コンフィグレーション処理を停止して終了する（ステップＳａ８）。
【００３９】
ステップＳａ２に戻り、制御部２５は、コンフィグレーション処理が正常に行われたと判定した場合（ステップＳａ２、Ｙｅｓ）、エラーカウンタレジスタ２４をクリアする（ステップＳａ１１）。すなわち、制御部２５は、エラーカウンタレジスタ２４に値「０」を書き込んで記憶させる。制御部２５は、コンフィグレーションアドレスレジスタ２３をクリアする（ステップＳａ１２）。すなわち、制御部２５は、コンフィグレーションアドレスレジスタ２３に値「０ｘ０００００００」を書き込んで記憶させる。制御部２５は、第２ステータスレジスタ２２が、アサートしているか否か、すなわち第２ステータスレジスタ２２に「０ｘ１」が記憶されているか否かを判定する（ステップＳａ１３）。
【００４０】
制御部２５は、第２ステータスレジスタ２２が、アサートしていると判定した場合（ステップＳａ１３、Ｙｅｓ）、第１ステータスレジスタ２１及び第２ステータスレジスタ２２をクリアする（ステップＳａ１４）。すなわち、制御部２５は、第１ステータスレジスタ２１に「ＮＯＲＭＡＬ」を示す値「０ｘ０」を書き込んで記憶させる。また、制御部２５は、第２ステータスレジスタに値「０ｘ０」を書き込む。制御部２５は、コンフィグレーション処理が正常に行われた第１コンフィグレーションデータ１１、または第２コンフィグレーションデータ１２を起動してプログラマブル素子２７を、第１論理回路３１または第２論理回路３２として構成し、処理を終了する（ステップＳａ１５）。第１論理回路３１として構成されるか、第２論理回路３２として構成されるかは、ステップＳａ１６における起動制御用コンフィグレーションデータ起動の処理（ＦＰＧＡ起動）により選択される。
【００４１】
一方、制御部２５は、第２ステータスレジスタ２２がアサートしていないと判定した場合（ステップＳａ１３、Ｎｏ）、コンフィグレーション処理が正常に行われた起動制御用コンフィグレーションデータ１５を起動する（ステップＳａ１６）。起動制御用コンフィグレーションデータ１５を起動することによって、構成される起動制御用論理回路３５による起動制御処理（図５）が開始される（ステップＳａ１７）。
【００４２】
（起動制御処理）
次に、図５を参照しつつ、起動制御用コンフィグレーションデータ１５を起動することによって構成される起動制御用論理回路３５が行う起動制御処理について説明する。図５は、ＦＰＧＡ２０において構成される起動制御用論理回路３５による起動制御処理を示すフローチャートである。
起動制御用論理回路３５は、フラッシュメモリ１０から起動面情報１３に記憶されている値を読み出す（ステップＳｂ１）。起動制御用論理回路３５は、フラッシュメモリ１０から起動履歴情報１４に記憶されている値を読み出す（ステップＳｂ２）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値を読み出す（ステップＳｂ３）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であるか「ＥＲＲＯＲ」であるかを判定する（ステップＳｂ４）。
【００４３】
起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であると判定した場合（ステップＳｂ４、ＮＯＲＭＡＬ）、起動面情報１３から読み出した値が示す回路情報のスタートアドレスをコンフィグレーションアドレスレジスタ２３に書き込む（ステップＳｂ５）。すなわち、起動制御用論理回路３５は、第１コンフィグレーションデータ１１、または第２コンフィグレーションデータ１２のスタートアドレスをコンフィグレーションアドレスレジスタ２３に書き込む。
【００４４】
起動制御用論理回路３５は、フラッシュメモリ１０の起動履歴情報１４を初期化し（ステップＳｂ６）、起動履歴情報１４に起動面情報１３に記憶されている値を書き込む（ステップＳｂ７）。これにより、起動履歴情報１４に記憶されている値と、起動面情報１３に記憶されている値とが同一の値となる。起動制御用論理回路３５は、第２ステータスレジスタ２２をアサートする。すなわち、起動制御用論理回路３５は、第２ステータスレジスタ２２に値「０ｘ１」を書き込む。また、起動制御用論理回路３５は、ＦＰＧＡリコンフィグ指示の処理、すなわちＦＰＧＡ２０の再初期化を行う（ステップＳｂ８）。これにより、図４のフローチャートにおいて、制御部２５が、ステップＳａ１からの処理を開始する。
【００４５】
一方、起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＥＲＲＯＲ」であると判定した場合（ステップＳｂ４、ＥＲＲＯＲ）、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一であるか否かを判定する（ステップＳｂ１０）。起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一ではないと判定した場合（ステップＳｂ１０、Ｎｏ）、ハードウェア障害として起動制御処理を終了する（ステップＳｂ１１）。すなわち、起動制御用論理回路３５は、コンフィグレーション処理を停止する。
【００４６】
一方、起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一であると判定した場合（ステップＳｂ１０、Ｙｅｓ）、フラッシュメモリ１０の起動面情報１３に記憶されている値を読み出す。起動制御用論理回路３５は、起動面情報１３から読み出した値の反転値が示す回路情報のスタートアドレスをコンフィグレーションアドレスレジスタ２３に書き込む（ステップＳｂ１２）。例えば、起動面情報１３に値「０ｘ０」が書き込まれている場合は、起動制御用論理回路３５は、その反転値である値「０ｘ１」が示す第２コンフィグレーションデータ１２のスタートアドレスを、コンフィグレーションアドレスレジスタ２３に書き込む。これに対して、例えば、起動面情報１３に値「０ｘ１」が書き込まれている場合は、起動制御用論理回路３５は、その反転値である値「０ｘ０」が示す第１コンフィグレーションデータ１１のスタートアドレスを、コンフィグレーションアドレスレジスタ２３に書き込む。
【００４７】
起動制御用論理回路３５は、フラッシュメモリ１０の起動履歴情報１４を初期化し（ステップＳｂ１３）、起動履歴情報１４に起動面情報１３に記憶されている値の反転値を書き込む（ステップＳｂ１４）。これにより、起動履歴情報１４に記憶されている値と、起動面情報１３に記憶されている値とが異なる値となる。起動制御用論理回路３５は、処理をステップＳｂ８に進め、第２ステータスレジスタ２２をアサートする。すなわち、起動制御用論理回路３５は、第２ステータスレジスタ２２に「０ｘ１」を書き込む。また、起動制御用論理回路３５は、ＦＰＧＡリコンフィグ指示の処理、すなわちＦＰＧＡ２０の再初期化を行う（ステップＳｂ８）。これにより、図４のフローチャートにおいて、制御部２５が、ステップＳａ１からの処理を開始する。
【００４８】
（具体的な処理の例）
図４及び図５により示したコンフィグレーション処理及び起動制御用論理回路３５により行われる起動制御処理によって、第１コンフィグレーションデータ１１と第２コンフィグレーションデータ１２が起動される流れについて図６から図８を参照しつつ説明する。図６及び図７は、第１コンフィグレーションデータと第２コンフィグレーションデータとを起動していく処理の全体の流れを示すフローチャートである。図８は、起動制御用コンフィグレーションデータのコンフィグレーション処理を示すフローチャートである。
前提として、フラッシュメモリ１０の起動面情報１３には、第１コンフィグレーションデータ１１を示す値「０ｘ０」が、ＣＰＵ３によって予め書き込まれているものとする。
【００４９】
ＦＰＧＡ２０が起動されると、図６のステップＳｃ１に示すように、図８の起動制御用コンフィグレーションデータのコンフィグレーション処理が行われる。図８に示す起動制御用コンフィグレーションデータのコンフィグレーション処理について、図４のフローチャートの処理を参照しつつ説明する。
ＦＰＧＡ２０が起動すると、ＦＰＧＡ２０の初期化が行われる。このとき、各レジスタ、すなわち第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、及びエラーカウンタレジスタ２４も初期化される。初期化されることで、第１ステータスレジスタ２１には「ＮＯＲＭＡＬ」を示す値「０ｘ０」が記憶され、第２ステータスレジスタ２２には値「０ｘ０」が記憶される。初期化されることで、コンフィグレーションアドレスレジスタ２３には、アドレス値「０ｘ０００００００」が記憶され、エラーカウンタレジスタ２４には値「０」が記憶される。
【００５０】
制御部２５が、コンフィグレーションアドレスレジスタ２３を参照して、スタートアドレスを値「０ｘ０００００００」とするフラッシュメモリ１０の領域から回路情報を読み出す。図３に示すように、当該領域には、起動制御用コンフィグレーションデータ１５が記憶されている。制御部２５は、起動制御用コンフィグレーションデータ１５をフラッシュメモリ１０から読み出してコンフィグレーションメモリ２６に書き込む。制御部２５は、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理を開始する（図４：ステップＳａ１、図６：ステップＳｃ１、図８：ステップＳｄ１）。
【００５１】
制御部２５は、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理において、例えば、ソフトエラーが発生しているか否かを判定する。これにより、制御部２５は、コンフィグレーション処理が正常に行われているか否かを判定する（図４：ステップＳａ２、図８：ステップＳｄ２）。
【００５２】
制御部２５は、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理が正常に行われたと判定した場合（図４：ステップＳａ２、Ｙｅｓ、図８：ステップＳｄ２、エラー無）、エラーカウンタレジスタ２４をクリアし（図４：ステップＳａ１１）、コンフィグレーションアドレスレジスタ２３をクリアする（図４：ステップＳａ１２）。制御部２５は、第２ステータスレジスタ２２が、アサートしているか否かを判定する（図４：ステップＳａ１３）。ここでは、第２ステータスレジスタ２２は、初期化された状態のままであるため、アサートしていない。このため、制御部２５は、第２ステータスレジスタ２２が、アサートしていないと判定する（図４：ステップＳａ１３、Ｎｏ）。制御部２５は、起動制御用コンフィグレーションデータ１５を起動する（図４：ステップＳａ１６、図８：ステップＳｄ３）。
【００５３】
一方、制御部２５は、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理が正常に行われなかったと判定した場合（図４：ステップＳａ２、Ｎｏ、図８：ステップＳｄ２、エラー有）、第１ステータスレジスタ２１に「ＥＲＲＯＲ」を示す値「０ｘ１」を書き込む。また、制御部２５は、コンフィグレーションアドレスレジスタ２３をクリアする。ここでは、コンフィグレーションアドレスレジスタ２３は、値「０ｘ０００００００」を記憶している。このため、クリアされても、同一値である「０ｘ０００００００」を記憶することになる（図４：ステップＳａ３）。
【００５４】
制御部２５は、第２ステータスレジスタ２２が、アサートしているか否かを判定する（図４：ステップＳａ４）。ここでは、第２ステータスレジスタ２２は、初期化された状態のままであるため、アサートしていない。このため、制御部２５は、第２ステータスレジスタ２２が、アサートしていないと判定する（図４：ステップＳａ４、Ｎｏ）。制御部２５は、エラーカウンタレジスタ２４に記憶されている値が、予め定められるｎ未満であるか否かを判定する（図４：ステップＳａ６）。すなわち、ステップＳａ６の判定は、ｎ回連続して起動制御用コンフィグレーションデータ１５のコンフィグレーション処理を失敗しているか否かを判定している（図８：ステップＳｄ４）。
【００５５】
制御部２５は、エラーカウンタレジスタ２４に記憶されている値が、予め定められるｎ未満であると判定した場合（図４：ステップＳａ６、Ｙｅｓ、図８：ステップＳｄ４、Ｎｏ）、次の処理を行う。すなわち、制御部２５は、エラーカウンタレジスタ２４に記憶されている値に１を加算し、加算した値をエラーカウンタレジスタ２４に書き込んで記憶させる（ステップＳａ７）。その後、制御部２５は、処理を図４においてはステップＳａ１に戻し、図８においてはステップＳｄ１に戻す。そして、制御部２５は、起動制御用コンフィグレーションデータ１５のコンフィグレーション処理を再び行う。
【００５６】
一方、制御部２５は、エラーカウンタレジスタ２４に記憶されている値が、予め定められるｎ未満でないと判定した場合、すなわち、ｎ回連続して起動制御用コンフィグレーションデータ１５のコンフィグレーション処理に失敗した場合（図４：ステップＳａ６、Ｎｏ、図８：ステップＳｄ４、Ｙｅｓ）、制御部２５は、ハードウェア障害が発生したと判定する。制御部２５は、コンフィグレーション処理を停止する（図４：ステップＳａ８、図８：ステップＳｄ５）。
【００５７】
図４のステップＳａ１６、図８のステップＳｄ３において、制御部２５が、起動制御用コンフィグレーションデータ１５を起動すると、起動制御用論理回路３５が構成される。そして、起動制御用論理回路３５によって、図５に示す起動制御処理が開始される（図４：ステップＳａ１７、図６：ステップＳｃ２）。図５のフローチャートを参照しながら起動制御処理を説明する。
【００５８】
起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＦ００００」を参照して、起動面情報１３に記憶されている値を読み出す（図５：ステップＳｂ１）。起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＥ００００」を参照して、起動履歴情報１４に記憶されている値を読み出す（図５：ステップＳｂ２）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値を読み出す（図５：ステップＳｂ３）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であるか「ＥＲＲＯＲ」であるかを判定する（図５：ステップＳｂ４）。ここでは、第１ステータスレジスタ２１に「ＮＯＲＭＡＬ」が記憶されている。このため、起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であると判定する（図５：ステップＳｂ４、ＮＯＲＭＡＬ）。
【００５９】
ステップＳｂ１において、起動制御用論理回路３５は、起動面情報１３から値「０ｘ０」を読み出しており、当該値「０ｘ０」は、第１コンフィグレーションデータ１１を示している。このため、起動制御用論理回路３５は、第１コンフィグレーションデータ１１のスタートアドレス「０ｘ０Ｆ０００００」をコンフィグレーションアドレスレジスタ２３に書き込む（図５：ステップＳｂ５）。
【００６０】
起動制御用論理回路３５は、フラッシュメモリ１０の起動履歴情報１４を初期化し（図５：ステップＳｂ６）、起動履歴情報１４に起動面情報１３に記憶されている値、すなわち値「０ｘ０」を書き込む（図５：ステップＳｂ７）。これにより、起動履歴情報１４に記憶されている値と、起動面情報１３に記憶されている値とが第１コンフィグレーションデータ１１を示す値「０ｘ０」となる。起動制御用論理回路３５は、第２ステータスレジスタ２２をアサートする。すなわち、起動制御用論理回路３５は、第２ステータスレジスタ２２に値「０ｘ１」を書き込む。起動制御用論理回路３５は、ＦＰＧＡリコンフィグ指示の処理、すなわちＦＰＧＡ２０の再初期化を行う（図５：ステップＳｂ８）。
【００６１】
図６に戻り、ＦＰＧＡ２０がＦＰＧＡリコンフィグ指示による再初期化（ＦＰＧＡ再初期化）が行われる（図６：ステップＳｃ３）。ここで、ＦＰＧＡリコンフィグ指示は、外部のＣＰＵ３や、ＣＰＵ３に実装されるソフトウェア制御部、ファームウェア制御部などから出力される指示命令ではない。ＦＰＧＡリコンフィグ指示は、上述したように、起動制御用コンフィグレーションデータ１５が起動されて構築された起動制御用論理回路３５が出力する指示命令である。このとき、各レジスタ、すなわち第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、及びエラーカウンタレジスタ２４に記憶されている値は、保持されている。
【００６２】
制御部２５によって、第１コンフィグレーションデータ１１のコンフィグレーション処理が開始される。制御部２５が、コンフィグレーションアドレスレジスタ２３を参照して、スタートアドレスをアドレス値「０ｘ０Ｆ０００００」とするフラッシュメモリ１０の領域から回路情報を読み出す。図３に示すように、当該領域には、第１コンフィグレーションデータ１１が記憶されている。制御部２５は、第１コンフィグレーションデータ１１をフラッシュメモリ１０から読み出してコンフィグレーションメモリ２６に書き込む。制御部２５は、第１コンフィグレーションデータ１１のコンフィグレーション処理を開始する（図４：ステップＳａ１、図６：ステップＳｃ４）。
【００６３】
制御部２５は、第１コンフィグレーションデータ１１のコンフィグレーション処理において、例えば、ソフトエラーが発生しているか否かを判定する。これにより、制御部２５は、コンフィグレーション処理が正常に行われているか否かを判定する（図４：ステップＳａ２、図６：ステップＳｃ５）。
【００６４】
制御部２５は、第１コンフィグレーションデータ１１のコンフィグレーション処理が正常に行われたと判定した場合（図４：ステップＳａ２、Ｙｅｓ、図６：ステップＳｃ５、エラー無）、エラーカウンタレジスタ２４をクリアし（図４：ステップＳａ１１）、コンフィグレーションアドレスレジスタ２３をクリアする（図４：ステップＳａ１２）。制御部２５は、第２ステータスレジスタ２２が、アサートしているか否かを判定する（図４：ステップＳａ１３）。ここでは、ステップＳｃ２の起動制御処理におけるステップＳｂ８の処理を経ているため、第２ステータスレジスタ２２は、アサートしている。そのため、制御部２５は、第２ステータスレジスタ２２が、アサートしていると判定する（図４：ステップＳａ１３、Ｙｅｓ）。
【００６５】
制御部２５は、第１ステータスレジスタ２１に「ＮＯＲＭＡＬ」を示す値「０ｘ０」を書き込んでクリアし、第２ステータスレジスタ２２に値「０ｘ０」を書き込んでクリアする（図４：ステップＳａ１４、図６：ステップＳｃ６）。制御部２５は、第１コンフィグレーションデータ１１の全てのデータのコンフィグレーション処理を行った後、ユーザモードに切り替えて、第１コンフィグレーションデータ１１を起動し、第１論理回路３１を構成する（図４：ステップＳａ１６、図６：ステップＳｃ７）。そして、制御部２５は処理を終了する。この場合、利用者が本来予定していた起動面情報１３において指定した第１コンフィグレーションデータ１１によって起動された第１論理回路３１が運用されている。このため、正常運用状態に該当する。
【００６６】
一方、例えば、ソフトエラーが発生していることにより、第１コンフィグレーションデータ１１のコンフィグレーション処理が正常に行われなかったと判定した場合（図４：ステップＳａ２、Ｎｏ、図６：ステップＳｃ５、エラー有）を説明する。この場合、制御部２５は、第１ステータスレジスタ２１に「ＥＲＲＯＲ」を示す値「０ｘ１」を書き込む。また、制御部２５は、コンフィグレーションアドレスレジスタ２３に値「０ｘ０００００００」を書き込むことでクリアする（図４：ステップＳａ３、図６：ステップＳｃ８）。
【００６７】
制御部２５は、第２ステータスレジスタ２２が、アサートしているか否か、すなわち第２ステータスレジスタ２２に値「０ｘ１」が記憶されているか否かを判定する（図４：ステップＳａ４）。ここでは、ステップＳｃ２の起動制御処理におけるステップＳｂ８の処理を経ているため、第２ステータスレジスタ２２は、アサートしている。そのため、制御部２５は、第２ステータスレジスタ２２が、アサートされていると判定し（図４：ステップＳａ４、Ｙｅｓ）、第２ステータスレジスタ２２をクリアする。すなわち、制御部２５は第２ステータスレジスタに値「０ｘ０」を書き込んで、ステップＳａ１に戻る（図４：ステップＳａ５、図６：ステップＳｃ９）。
【００６８】
図７のステップＳｃ１０に進み、再び、ステップＳｃ１と同じく図８に示す起動制御用コンフィグレーションデータのコンフィグレーション処理が行われる。起動制御用コンフィグレーションデータ１５が起動されて起動制御用論理回路３５が構成されると、図５に示す起動制御処理が起動制御用論理回路３５によって開始される（図７：ステップＳｃ１１）。図５のフローチャートを参照しながら起動制御処理を説明する。
【００６９】
ステップＳｃ１１が開始される段階で、第１ステータスレジスタ２１には、「ＥＲＲＯＲ」を示す値「０ｘ１」が記憶されている。また、フラッシュメモリ１０の起動面情報１３には、第１コンフィグレーションデータ１１を示す値「０ｘ０」が記憶されている。また、起動履歴情報には、第１コンフィグレーションデータ１１を示す値「０ｘ０」が記憶されている。
【００７０】
起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＦ００００」を参照して、起動面情報１３に記憶されている値を読み出す（図５：ステップＳｂ１）。ここでは、起動面情報１３として、第１コンフィグレーションデータ１１を示す値「０ｘ０」を読み出す。起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＥ００００」を参照して、起動履歴情報１４に記憶されている値を読み出す（図５：ステップＳｂ２）。ここでは、起動制御用論理回路３５は、起動履歴情報１４として、第１コンフィグレーションデータ１１を示す値「０ｘ０」を読み出す。
【００７１】
起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値を読み出す（図５：ステップＳｂ３）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であるか「ＥＲＲＯＲ」であるかを判定する（図５：ステップＳｂ４）。ここでは、「ＥＲＲＯＲ」が記憶されている。このため、起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＥＲＲＯＲ」であると判定する（図５：ステップＳｂ４、ＥＲＲＯＲ）。
【００７２】
起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一であるか否かを判定する（図５：ステップＳｂ１０）。ここでは、起動面情報１３の値と、起動履歴情報１４の値とが同一の「０ｘ０」である。このため、起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一であると判定する（図５：ステップＳｂ１０、Ｙｅｓ）。
【００７３】
起動制御用論理回路３５は、起動面情報１３から読み出した値の反転値である値「０ｘ１」が示す回路情報、すなわち第２コンフィグレーションデータ１２のスタートアドレス値「０ｘ２７８００００」をコンフィグレーションアドレスレジスタ２３に書き込む（図５：ステップＳｂ１２）。起動制御用論理回路３５は、フラッシュメモリ１０の起動履歴情報１４を初期化し（図５：ステップＳｂ１３）、起動履歴情報１４に起動面情報１３に記憶されている値の反転値である値「０ｘ１」を書き込む（図５：ステップＳｂ１４）。これにより、起動履歴情報１４に記憶されている値は、値「０ｘ１」となり、起動面情報１３に記憶されている値は、値「０ｘ０」となる。
【００７４】
起動制御用論理回路３５は、処理をステップＳｂ８に進める。起動制御用論理回路３５は、第２ステータスレジスタ２２をアサートする。すなわち、起動制御用論理回路３５は、第２ステータスレジスタ２２に値「０ｘ１」を書き込む。起動制御用論理回路３５は、ＦＰＧＡリコンフィグ指示の処理、すなわちＦＰＧＡ２０の再初期化を行う（図５：ステップＳｂ８）。
【００７５】
図５の起動制御処理（ステップＳｃ１１）の後、図７に戻り、ＦＰＧＡ２０がＦＰＧＡリコンフィグ指示による再初期化が行われる（図７：ステップＳｃ１２）。このとき、各レジスタ、すなわち第１ステータスレジスタ２１、第２ステータスレジスタ２２、コンフィグレーションアドレスレジスタ２３、及びエラーカウンタレジスタ２４に記憶されている値は、保持されている。すなわち、第１ステータスレジスタ２１は、「ＥＲＲＯＲ」を示す値「０ｘ１」を記憶する。第２ステータスレジスタ２２は、アサートを示す値「０ｘ１」を記憶している。コンフィグレーションアドレスレジスタ２３は、第２コンフィグレーションデータ１２のスタートアドレスである値「０ｘ２７８００００」を記憶している。エラーカウンタレジスタ２４は、値「０」を記憶している。
【００７６】
制御部２５によって、第２コンフィグレーションデータ１２のコンフィグレーション処理が開始される。制御部２５が、コンフィグレーションアドレスレジスタ２３を参照して、スタートアドレスをアドレス値「０ｘ２７８００００」とするフラッシュメモリ１０の領域から回路情報を読み出す。図３に示すように、当該領域には、第２コンフィグレーションデータ１２が記憶されている。制御部２５は、第２コンフィグレーションデータ１２をフラッシュメモリ１０から読み出してコンフィグレーションメモリ２６に書き込む。制御部２５は、第２コンフィグレーションデータ１２のコンフィグレーション処理を開始する（図４：ステップＳａ１、図７：ステップＳｃ１３）。
【００７７】
制御部２５は、第２コンフィグレーションデータ１２のコンフィグレーション処理において、例えば、ソフトエラーが発生しているか否かを判定する。これにより、制御部２５は、コンフィグレーション処理が正常に行われているか否かを判定する（図４：ステップＳａ２、図７：ステップＳｃ１４）。
【００７８】
制御部２５は、第２コンフィグレーションデータ１２のコンフィグレーション処理が正常に行われたと判定した場合（図４：ステップＳａ２、Ｙｅｓ、図７：ステップＳｃ１４、エラー無）、エラーカウンタレジスタ２４をクリアし（図４：ステップＳａ１１）、コンフィグレーションアドレスレジスタ２３をクリアする（図４：ステップＳａ１２）。制御部２５は、第２ステータスレジスタ２２が、アサートしているか否かを判定する（図４：ステップＳａ１３）。ここでは、ステップＳｃ１１の起動制御処理におけるステップＳｂ８の処理を経ているため、第２ステータスレジスタ２２は、アサートしている。そのため、制御部２５は、第２ステータスレジスタ２２が、アサートしていると判定する（図４：ステップＳａ１３、Ｙｅｓ）。
【００７９】
制御部２５は、第１ステータスレジスタ２１に「ＮＯＲＭＡＬ」を示す値「０ｘ０」を書き込んでクリアし、第２ステータスレジスタ２２に値「０ｘ０」を書き込んでクリアする（図４：ステップＳａ１４、図７：ステップＳｃ１５）。制御部２５は、第２コンフィグレーションデータ１２の全てのデータのコンフィグレーション処理を行った後、ユーザモードに切り替えて、第２コンフィグレーションデータ１２を起動し、第２論理回路３２を構成する（図４：ステップＳａ１６、図７：ステップＳｃ１６）。そして、制御部２５は処理を終了する。この場合、利用者が本来予定していた起動面情報１３において指定した第１コンフィグレーションデータ１１の起動に失敗、すなわち第１論理回路３１の構成に失敗している。そして、第２コンフィグレーションデータ１２によって構成された第２論理回路３２が運用されている。このため、擬正常運用状態に該当する。
【００８０】
一方、制御部２５は、例えば、ソフトエラーが発生していることにより、第２コンフィグレーションデータ１２のコンフィグレーション処理が正常に行われなかったと判定した場合（図４：ステップＳａ２、Ｎｏ、図７：ステップＳｃ１４、エラー有）の処理を説明する。この場合、制御部２５は、第１ステータスレジスタ２１に「ＥＲＲＯＲ」を示す値「０ｘ１」を書き込む。また、制御部２５は、コンフィグレーションアドレスレジスタ２３に値「０ｘ０００００００」を書き込んでクリアする（図４：ステップＳａ３、図６：ステップＳｃ１７）。
【００８１】
制御部２５は、第２ステータスレジスタ２２が、アサートしているか否か、すなわち第２ステータスレジスタ２２に値「０ｘ１」が記憶されているか否かを判定する（図４：ステップＳａ４）。ここでは、ステップＳｃ２の起動制御処理におけるステップＳｂ８の処理を経ているため、第２ステータスレジスタ２２は、アサートしている。そのため、制御部２５は、第２ステータスレジスタ２２が、アサートされていると判定し（図４：ステップＳａ４、Ｙｅｓ）、第２ステータスレジスタ２２をクリアする。すなわち、制御部２５は第２ステータスレジスタに値「０ｘ０」を書き込んで、ステップＳａ１に戻る（図４：ステップＳａ５、図７：ステップＳｃ１８）。
【００８２】
再び、ステップＳｃ１及びステップＳｃ１０と同じく図８に示す起動制御用コンフィグレーションデータのコンフィグレーション処理が行われる（図７：ステップＳｃ１９）。起動制御用コンフィグレーションデータ１５が起動されて起動制御用論理回路３５が構成されると、図５に示す起動制御処理が起動制御用論理回路３５によって開始される（図７：ステップＳｃ２０）。図５のフローチャートを参照しながら起動制御処理（ステップＳｃ２０）を説明する。
【００８３】
ステップＳｃ２０が開始される段階で、第１ステータスレジスタ２１には、「ＥＲＲＯＲ」を示す値「０ｘ１」が記憶されている。また、フラッシュメモリ１０の起動面情報１３には、第１コンフィグレーションデータ１１を示す値「０ｘ０」が記憶されている。また、起動履歴情報には、第２コンフィグレーションデータ１２を示す値「０ｘ１」が記憶されている。
【００８４】
起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＦ００００」を参照して、起動面情報１３に記憶されている値を読み出す（図５：ステップＳｂ１）。ここでは、起動面情報１３として、第１コンフィグレーションデータ１１を示す値「０ｘ０」を読み出す。起動制御用論理回路３５は、フラッシュメモリ１０のアドレス値「０ｘ０ＥＥ００００」を参照して、起動履歴情報１４に記憶されている値を読み出す（図５：ステップＳｂ２）。ここでは、起動制御用論理回路３５は、起動履歴情報１４として、第１コンフィグレーションデータ１１を示す値「０ｘ１」を読み出す。
【００８５】
起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値を読み出す（図５：ステップＳｂ３）。起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＮＯＲＭＡＬ」であるか「ＥＲＲＯＲ」であるかを判定する（図５：ステップＳｂ４）。ここでは、「ＥＲＲＯＲ」が記憶されている。このため、起動制御用論理回路３５は、第１ステータスレジスタ２１に記憶されている値が、「ＥＲＲＯＲ」であると判定する（図５：ステップＳｂ４、ＥＲＲＯＲ）。
【００８６】
起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一であるか否かを判定する（図５：ステップＳｂ１０）。ここでは、起動面情報１３の値と、起動履歴情報１４の値とは異なる。このため、起動制御用論理回路３５は、起動面情報１３から読み出した値と、起動履歴情報１４から読み出した値とが同一でないと判定し（図５：ステップＳｂ１０、Ｎｏ）、ハードウェア障害として起動制御処理を終了する（ステップＳｂ１１）。この場合、利用者が本来予定していた起動面情報１３において指定した第１コンフィグレーションデータ１１による第１論理回路３１の構成に失敗している。そして、代わりに起動した第２コンフィグレーションデータ１２による第２論理回路３２の構成にも失敗している。このため、異常終了状態に該当する。
【００８７】
なお、上記の実施形態において、図６及び図７では、起動面情報１３に第１コンフィグレーションデータ１１を示す値「０ｘ０」を指定した場合の処理について説明した。ただし、この実施の形態に限られない。起動面情報１３に第２コンフィグレーションデータ１２を示す値「０ｘ１」を指定した場合、第２コンフィグレーションデータ１２の起動が先に行われる。そして、第２コンフィグレーションデータ１２による第２論理回路３２の構成に失敗した場合、第１コンフィグレーションデータの起動が行われる。さらに、第１コンフィグレーションデータ１１による第１論理回路３１の構成にも失敗した場合、異常終了する。
上記の実施形態で説明してきた処理をまとめると、図９の表に示すような関係で示される。図９の表において、パターン１、３、５、７が、図６から図８を参照して説明したパターンに該当する。パターン２、４、６、８が、起動面情報１３に第２コンフィグレーションデータ１２を示す値を指定した場合のパターンに該当する。
【００８８】
上記の実施形態で説明してきたとおり、フラッシュメモリ１０は、第１コンフィグレーションデータ１１と、第２コンフィグレーションデータ１２と、起動制御用コンフィグレーションデータ１５とを記憶している。起動制御用コンフィグレーションデータ１５として、第１コンフィグレーションデータ１１または第２コンフィグレーションデータ１２のいずれか一方による論理回路の構成が失敗した際に、失敗していない他方のコンフィグレーションデータが選択される。ＦＰＧＡ２０は、起動の際、または、いずれかの回路情報による論理回路の構成が失敗した際、フラッシュメモリ１０から起動制御用コンフィグレーションデータ１５を読み出す。ＦＰＧＡ２０は、読み出した起動制御用コンフィグレーションデータ１５に応じた起動制御用論理回路３５を構成する。ＦＰＧＡ２０は、構成した起動制御用論理回路３５によって選択される論理回路の構成に失敗していない第１コンフィグレーションデータ１１または第２コンフィグレーションデータ１２のいずれかをフラッシュメモリ１０から読み出し、読み出したコンフィグレーションデータに応じた論理回路の構成を行う。これにより、ＦＰＧＡ２０において、第１コンフィグレーションデータ１１または第２コンフィグレーションデータ１２のいずれかのコンフィグレーションデータで論理回路の構成に失敗した場合、別のＰＬＤ等の制御用デバイスを用いずに、失敗していない他のコンフィグレーションデータで起動することが可能となる。
【００８９】
また、上記の実施形態の構成により、諸々の要因からコンフィグレーション処理に失敗した場合でも、他のコンフィグレーションデータを起動させることができる。このため、ＦＰＧＡ２０を含むシステムがスタックしないような冗長機能を提供することが可能となる。これにより、本実施形態による集積回路システム１では、装置原価率と実装面積を改善することが可能となる。また、本実施形態の構成により、特許文献１に示す技術が有する効果を有しつつ、ＢＯＭ（Bill of Materials）コストと実装面積の削減を行うことができる。これにより、装置開発におけるコストや実装面積の目標達成に貢献することを可能としている。
【００９０】
また、上述したように、図４に示す処理は、第１コンフィグレーションデータ１１や第２コンフィグレーションデータ１２等の実際に利用される論理回路を構成する回路情報を起動するために備えられているＦＰＧＡ２０の機能を用いて実現されている。フラッシュメモリ１０の記憶領域の最初、すなわちアドレス値「０ｘ０００００００」の領域に起動制御用コンフィグレーションデータ１５を記憶させておく。これにより、ＦＰＧＡ２０が起動される際、コンフィグレーションアドレスレジスタ２３が初期化されることで、コンフィグレーションアドレスレジスタ２３は、起動制御用コンフィグレーションデータ１５のスタートアドレスである値「０ｘ０００００００」を記憶する。これにより、ＦＰＧＡ２０の起動時には、必ず起動制御用コンフィグレーションデータ１５のコンフィグレーション処理から開始されることになる。また、いずれかのコンフィグレーションデータで論理回路の構成に失敗した場合、図４のステップＳａ３において、コンフィグレーションアドレスレジスタ２３はクリアされ、値「０ｘ０００００００」となる。これにより、再び起動制御用コンフィグレーションデータ１５のコンフィグレーション処理から開始されることになる。これにより、起動制御用コンフィグレーションデータ１５に、第１コンフィグレーションデータ１１または第２コンフィグレーションデータ１２のいずれか一方による論理回路の構成が失敗した際に、失敗していない他方のコンフィグレーションデータにより起動を行う処理を定義しておけば、別のＰＬＤ等の制御用デバイスを用いずに、失敗していない他のコンフィグレーションデータで起動することが可能となる。
【００９１】
なお、図３のフラッシュメモリ１０における配置は、一例であり、当該実施の形態に限られない。例えば、起動制御用コンフィグレーションデータ１５を、フラッシュメモリ１０のアドレス値「０ｘ０００００００」をスタートアドレスとして記憶させておかなくてもよい。起動制御用コンフィグレーションデータ１５は、フラッシュメモリ１０の他の記憶領域に記憶されていてもよい。ただし、その場合、例えば、ＦＰＧＡ２０が最初に起動した場合、ステップＳａ１の処理の前にコンフィグレーションアドレスレジスタ２３に起動制御用コンフィグレーションデータ１５のスタートアドレス（他の記憶領域のアドレス）を書き込む処理が行われる。また、ステップＳａ３において、コンフィグレーションアドレスレジスタ２３をクリアする代わりに、起動制御用コンフィグレーションデータ１５の当該スタートアドレスを書き込む処理が行われる。
【００９２】
また、上記の実施形態において、フラッシュメモリ１０が、複数のフラッシュメモリから構成されていてもよい。この場合、第１コンフィグレーションデータ１１や第２コンフィグレーションデータ１２等が異なるフラッシュメモリに記憶されていてもよい。
【００９３】
また、上記の実施形態において、第１コンフィグレーションデータ１１と、第２コンフィグレーションデータ１２という２つのコンフィグレーションデータによる処理について説明した。ただし、起動制御用コンフィグレーションデータ１５以外の、利用者が運用に使う第１コンフィグレーションデータ１１や第２コンフィグレーションデータ１２のコンフィグレーションデータは、複数であってもよい。その場合、起動面情報１３には、複数のコンフィグレーションデータを指定できるように構成される。また、起動履歴情報１４には、直前に起動に失敗したコンフィグレーションデータの履歴のみではなく、過去に起動に失敗したコンフィグレーションデータの履歴等も残される。また、図５に示す処理では、過去に起動に失敗したコンフィグレーションデータの履歴を記憶する起動履歴情報１４を参照して、起動に失敗していないコンフィグレーションデータが、順に切り替えて用いられる処理が行なわれる。
【００９４】
また、上記の実施形態では、ＦＰＧＡ２０を対象として説明しているが、ＦＰＧＡ２０以外の揮発性プログラマブルデバイスに適用されてもよい。
【００９５】
ＦＰＧＡ２０は、前述した起動制御用回路情報に相当する起動制御用プログラムをフラッシュメモリ１０から読み出して、コンフィグレーションメモリ２６に記憶させて起動することで、起動制御回路を備える装置として機能する。起動制御用プログラムは、コンピュータ読み取り可能な記録媒体に記録されてもよい。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置である。起動制御用プログラムは、電気通信回線を介して送信されてもよい。
【００９６】
図１３は集積回路システムの最少構成を示す図である。
集積回路システムは、少なくとも記憶素子と、集積回路とを備えればよい。
記憶素子（フラッシュメモリ１０）は、複数の回路情報と、論理回路の構成に失敗していない回路情報を選択する起動制御用論理回路の構成に用いられる起動制御用回路情報とを予め記憶する。
集積回路（ＦＰＧＡ２０）は、起動の際、または、前記複数の回路情報のいずれかの回路情報による論理回路の構成が失敗した際、記憶素子から起動制御用回路情報を読み出して起動制御用論理回路を構成する。そして集積回路は、構成した起動制御用論理回路に論理回路の構成に失敗していない回路情報を選択させる。集積回路は、起動制御用論理回路に選択される回路情報を記憶素子から読み出して回路情報に応じた論理回路の構成を行う。
【００９７】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００９８】
この出願は、２０１７年３月２１日に日本出願された特願２０１７−０５５０２５号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００９９】
この発明によれば、プログラマブルな集積回路において、起動に失敗した場合、別の制御用デバイスを用いずに、失敗していない他の回路情報で起動することが可能となる。
【符号の説明】
【０１００】
１  集積回路システム
２  接続線
３  ＣＰＵ
４  ＰＣ
５  ＪＴＡＧ  Ｃｏｎｎｅｃｔｏｒ
１０  フラッシュメモリ
２０  ＦＰＧＡ
２１  第１ステータスレジスタ
２２  第２ステータスレジスタ
２３  コンフィグレーションアドレスレジスタ
２４  エラーカウンタレジスタ
２５  制御部
２６  コンフィグレーションメモリ
２７  プログラマブル素子
２８  Ｉ／Ｏ回路
２９  ＪＴＡＧ回路
３１  第１論理回路
３２  第２論理回路
３５  起動制御用論理回路
【図１】
2018173357.tif 000003
【図２】
2018173357.tif 000004
【図３】
2018173357.tif 000005
【図４】
2018173357.tif 000006
【図５】
2018173357.tif 000007
【図６】
2018173357.tif 000008
【図７】
2018173357.tif 000009
【図８】
2018173357.tif 000010
【図９】
2018173357.tif 000011
【図１０】
2018173357.tif 000012
【図１１】
2018173357.tif 000013
【図１２】
2018173357.tif 000014
【図１３】
2018173357.tif 000015
【国際調査報告】
2018173357.tif 000016
2018173357.tif 000017