(57)【特許請求の範囲】
【請求項１】
ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを行うコンフィグレーション方法であって、
コンフィグレーション回路から前記ＦＰＧＡ回路に、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含むコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントし、
前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行し、
前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定し、
前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力する、コンフィグレーション方法。
【請求項２】
前記コンフィグレーション回路から前記ＦＰＧＡ回路に設定されるコンフィグレーションデータのデータエラーの有無を前記ＦＰＧＡ回路内で検出し、前記データエラーの有無に基づいてコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントする、請求項１記載のコンフィグレーション方法。
【請求項３】
前記上限値を、前記コンフィグレーション回路から、或いは、前記コンフィグレーション回路以外の外部回路から前記ＦＰＧＡ回路に設定する、請求項１又は２記載のコンフィグレーション方法。
【請求項４】
前記コンフィグレーションが成功した時点のコンフィグレーションデータを、前記ＦＰＧＡ回路から前記ＦＰＧＡ回路の次段に接続された他のＦＰＧＡ回路に、前記他のＦＰＧＡ回路のコンフィグレーションデータとして出力する、請求項１乃至３のいずれか１項記載のコンフィグレーション方法。
【請求項５】
ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを前記ＦＰＧＡ回路から行うコンフィグレーション制御回路であって、
コンフィグレーション回路から前記ＦＰＧＡ回路に、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含むコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントするカウンタと、
前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行する主制御部と、
前記主制御部は、前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定し、
前記主制御部が前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力する回路とを備えた、コンフィグレーション制御回路。
【請求項６】
前記コンフィグレーション回路から前記ＦＰＧＡ回路に設定されるコンフィグレーションデータのデータエラーの有無を前記ＦＰＧＡ回路内で検出するエラーチェック回路を更に備え、
前記主制御部は、前記エラーチェック回路で検出されたデータエラーの有無に基づいてコンフィグレーションが失敗した回数を検出して前記カウンタに供給する、請求項５記載のコンフィグレーション制御回路。
【請求項７】
前記主制御部は、前記コンフィグレーションの失敗を検出しないと、前記コンフィグレーションが成功したことを示すステータス信号を前記ＦＰＧＡ回路の外部へ出力する、請求項５又は６記載のコンフィグレーション制御回路。
【請求項８】
前記コンフィグレーションが成功した時点のコンフィグレーションデータを、前記ＦＰＧＡ回路から前記ＦＰＧＡ回路の次段に接続された他のＦＰＧＡ回路に、前記他のＦＰＧＡ回路のコンフィグレーションデータとして出力するＦＰＧＡ内部回路を更に備えた、請求項７記載のコンフィグレーション制御回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンフィグレーション方法及びコンフィグレーション制御回路に係り、特にＦＰＧＡ（Field Programmable Gate Array）回路のクロック周波数やスルーレート等のコンフィグレーションデータをＦＰＧＡ回路の動作開始時に設定するコンフィグレーション方法及びコンフィグレーション制御回路に関する。
【背景技術】
【０００２】
ＦＰＧＡ回路の動作開始時には、一般的には図１又は図２に示す如きコンフィグレーション回路を用いたコンフィグレーションによりコンフィグレーションデータ（又は、ＦＰＧＡ回路データ）を設定する。図１は、１個のＦＰＧＡ回路に対するコンフィグレーション回路の一例を説明する図であり、図２は、複数個のＦＰＧＡ回路に対するコンフィグレーション回路の一例を説明する図である。
【０００３】
図１において、コンフィグレーション回路（又は、ＲＯＭ（Read Only Memory）回路）１−１は、ユーザが指定したＦＰＧＡ回路２のクロック周波数（又は、動作周波数）等のパラメータや回路データを含むコンフィグレーションデータＤＡＴＡを格納するフラッシュメモリ（Flash Memory）で形成されている。
【０００４】
一方、ＦＰＧＡ回路２は、図１に示す如く接続されたコンフィグレーションデータ用メモリ２１、ＦＰＧＡ内部回路２２、入出力（Ｉ／Ｏ：Input/Output）バッファ２３、コンフィグレーション制御回路２４、クロック発生回路２５、及びＩ／Ｏバッファ２６を有する。コンフィグレーション制御回路２４は、ＣＲＣ（Cyclic Redundancy Check）回路２４１、主制御部２４２、及びデコーダ２４３を有する。クロック発生回路２５は、タップ（ＴＡＰ）調整回路２５１及び複数の直列接続されたインバータ回路２５２を有するリングオシレータ（Ring Oscillator）で形成されており、ＦＰＧＡ回路２から出力されるコンフィグレーション用クロック信号ＣＬＫを発生する。
【０００５】
メモリ２１は、ＦＰＧＡ内部回路２２の論理を決定する設定値を格納してこの設定値によりＦＰＧＡ回路２内のリソースの各種設定を決定する。ＦＰＧＡ内部回路２２は、メモリ２１に格納された設定値により設定される論理機能部を形成する。Ｉ／Ｏバッファ２３は、ユーザ回路（図示せず）が使用可能なインタフェースを形成する。コンフィグレーション制御回路２４内において、ＣＲＣ回路２４１は、クロック信号ＣＬＫに同期してコンフィグレーション回路１−１から読み出されてＦＰＧＡ回路２に入力されたコンフィグレーションデータＤＡＴＡから生成したＣＲＣコードとコンフィグレーションデータＤＡＴＡに付加されているＣＲＣコードを比較することでデータエラーを検出して、エラーの有無を示すエラー検出信号を主制御部２４２に通知する。主制御部２４２は、コンフィグレーションデータＤＡＴＡ内のクロック周波数をエラー検出信号が示すデータエラーの有無に応じてデコーダ２４３に供給する。又、主制御部２４２は、データエラーが検出されずコンフィグレーションが成功すると、コンフィグレーションが成功したことを示す成功信号を出力する。一方、主制御部２４２は、データエラーが検出されコンフィグレーションが失敗すると、コンフィグレーションエラーを示すエラー信号を出力する。デコーダ２４３は、クロック周波数の値をデコードし、デコードされた値に基づいてクロック発生回路２５のＴＡＰ調整回路２５１を制御してインバータ回路２５２のＴＡＰを調整することで、クロック発生回路２５が発生するクロック信号ＣＬＫの周波数を設定する。クロック信号ＣＬＫは、コンフィグレーション制御回路２４に供給されると共に、Ｉ／Ｏバッファ２６を介してコンフィグレーション回路１−１に供給される。
【０００６】
図２において、コンフィグレーション回路１−２は、複数のＦＰＧＡ回路（＃１〜＃Ｎ、Ｎは１以上の自然数）２−１〜２−Ｎに対して設けられている。この例では、ＦＰＧＡ回路２−１はマスタとして機能し、ＦＰＧＡ回路２−２〜２−Ｎはスレーブとして機能する。コンフィグレーション回路１−２は、上記コンフィグレーション回路１−１と同様にして、マスタＦＰＧＡ回路２−１にコンフィグレーションデータＤＡＴＡを入力する。マスタＦＰＧＡ回路２−１は、上記ＦＰＧＡ回路２と同様にしてクロック信号ＣＬＫをコンフィグレーション回路１−２に供給する。一方、クロック信号ＣＬＫは、スレーブＦＰＧＡ回路２−２〜２−Ｎへも供給される。又、コンフィグレーション回路１−２からのコンフィグレーションデータＤＡＴＡは、マスタＦＰＧＡ回路２−１を介してＦＰＧＡ回路２−２〜２−Ｎへ順次供給される。尚、説明の便宜上、コンフィグレーションは図１の場合について説明する。
【０００７】
図１の如きコンフィグレーション回路１−１を用いたＦＰＧＡ回路２のコンフィグレーションは、失敗する場合がある。ＦＰＧＡ回路２のコンフィグレーションが失敗する主な原因は、ＦＰＧＡ回路２が実装されたプリント基板（図示せず）上でコンフィグレーションデータＤＡＴＡにノイズが混入したり、信号が鈍ったりすることによる、コンフィグレーションデータＤＡＴＡの転送不良である場合が多い。ＦＰＧＡ回路２のコンフィグレーションが失敗した場合は、コンフィグレーションをそのままエラー終了させる場合が多い。ＦＰＧＡ回路２の再コンフィグレーションを行う場合には、失敗したコンフィグレーションと同一条件下でコンフィグレーションを再実行する。
【０００８】
従来、ＦＰＧＡ回路２のコンフィグレーションは、コンフィグレーション回路１−１からＦＰＧＡ回路２内のクロック発生回路２５へ至る周波数設定パスを設け、ユーザがコンフィグレーション回路１−１のクロック周波数の値を手動で調整することによりＦＰＧＡ回路２のクロック周波数の設定値を手動調整する。この手動調整は、ＦＰＧＡ回路２のコンフィグレーションが成功するまで繰り返し行われ、比較的工数の多い作業である。尚、図１のコンフィグレーション回路１−１では、クロック周波数の手動調整は行えるが、スルーレートの手動調整を行うものではない。
【０００９】
ＦＰＧＡ回路２のコンフィグレーションが成功するように、例えば極端に低いクロック周波数を設定することでコンフィグレーションエラーを回避する方法も考えられるが、このような方法を採用できない理由として、次のような技術背景がある。
【００１０】
つまり、近年のＦＰＧＡ回路の大規模化に伴い、コンフィグレーションデータの量が増加傾向にあり、コンフィグレーションに要する時間が長くなる傾向にある。ＦＰＧＡ回路を有するシステムの立ち上げは、コンフィグレーションに要する時間に影響される。このため、ＦＰＧＡ回路のコンフィグレーションのクロック周波数を比較的高く設定し、コンフィグレーション時間を抑制することが求められる。しかし、クロック周波数を比較的高く設定すると、これに伴いクロック信号のスルーレートも比較的高くし、信号の立ち上りを急峻にする必要がある。
【００１１】
尚、ＦＰＧＡ回路内に素子不良がある場合に、予め用意した複数の配置配線情報を入替えながら、不良素子を利用しない配置配線情報を見つけて素子不良を救済する方法が例えば特許文献１等にて提案されている。しかし、この提案方法では、ＦＰＧＡ回路のコンフィグレーション自体のエラーは想定されていない。
【００１２】
このように、従来の手動調整を用いるＦＰＧＡ回路のコンフィグレーションでは、ＦＰＧＡ回路が実装された基板や周囲温度等の使用環境に合わせてＦＰＧＡ回路のクロック周波数を手動調整するため、クロック周波数の調整に不具合がある度にユーザへの負荷が発生する。つまり、ユーザは、クロック周波数を最適値に合わせるために、クロック周波数の手動調整を繰り返し行う必要がある。又、コンフィグレーション回路が同じであっても、ＦＰＧＡ回路の製品毎にクロック周波数を変えた方が良い場合もあり、クロック周波数の調整コストが製品毎に発生してしまうので、コンフィグレーションに伴う調整コストを低減することは難しい。
【００１３】
又、図２のように複数個のＦＰＧＡ回路２−１〜２−Ｎを接続する場合もあり、ＦＰＧＡ回路２−１〜２−Ｎが実装された基板上の配線によっては、予測しない反射ノイズ等の影響でコンフィグレーションが失敗することもある。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００５−２４３９３７号公報
【特許文献２】特開２０００−１０１４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
従来のＦＰＧＡ回路のコンフィグレーションは、ＦＰＧＡ回路のクロック周波数を手動調整する必要があるため、ユーザへの負荷が比較的大きいという問題があった。
【００１６】
そこで、本発明は、ＦＰＧＡ回路のクロック周波数やスルーレート等のコンフィグレーションデータを自動調整可能なコンフィグレーション方法及びコンフィグレーション制御回路を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一観点によれば、ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを行うコンフィグレーション方法であって、コンフィグレーション回路から前記ＦＰＧＡ回路に、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含むコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントし、前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行し、前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定し、前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力するコンフィグレーション方法が提供される。
【００１８】
本発明の一観点によれば、ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを前記ＦＰＧＡ回路から行うコンフィグレーション制御回路であって、コンフィグレーション回路から前記ＦＰＧＡ回路に、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含むコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントするカウンタと、前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行する主制御部と、前記主制御部は、前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定し、前記主制御部が前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力する回路とを備えたコンフィグレーション制御回路が提供される。
【発明の効果】
【００１９】
開示のコンフィグレーション方法及びコンフィグレーション制御回路によれば、ＦＰＧＡ回路のクロック周波数やスルーレート等のコンフィグレーションデータを自動調整することが可能になる。
【図面の簡単な説明】
【００２０】
【図１】１個のＦＰＧＡ回路に対するコンフィグレーション回路の一例を説明する図である。
【図２】複数個のＦＰＧＡ回路に対するコンフィグレーション回路の一例を説明する図である。
【図３】本発明の第１実施例におけるコンフィグレーション制御回路の一例を説明する図である。
【図４】コンフィグレーション処理を説明するフローチャートである。
【図５】本発明の第２実施例におけるコンフィグレーション制御回路の一例を説明する図である。
【図６】第２実施例におけるコンフィグレーション制御回路の構成を示す図である。
【図７】第２実施例におけるコンフィグレーション成功信号の出力を説明する図である。
【図８】スレーブＦＰＧＡ回路の接続の第１の例を示す図である。
【図９】スレーブＦＰＧＡ回路の接続の第２の例を示す図である。
【発明を実施するための形態】
【００２１】
開示のコンフィグレーション方法及びコンフィグレーション制御回路では、ＦＰＧＡ回路のクロック周波数（又は、動作周波数）やスルーレート等のコンフィグレーションデータを自動調整する。ＦＰＧＡ回路のコンフィグレーションを成功させるための最適なコンフィグレーションデータは、ユーザによる手動調整を必要とすることなく、即ち、ユーザが意識することなく、ＦＰＧＡ回路により自動調整される。このため、コンフィグレーションに伴う調整コストを比較的低く抑えることができる。
【００２２】
以下に、開示のコンフィグレーション方法及びコンフィグレーション制御回路の各実施例を図面と共に説明する。
【実施例】
【００２３】
（第１実施例）
図３は、本発明の第１実施例におけるコンフィグレーション制御回路の一例を説明する図である。本実施例では、１個のＦＰＧＡ回路に対してコンフィグレーション回路が設けられる場合に本発明が適用されている。図３中、太枠で示すブロックは機能ブロックを示し、後述するように、太線のパスにて自動調整を行い、二重線のパスで設定を保存する機能を提供する。
【００２４】
図３において、コンフィグレーション回路（又は、ＲＯＭ（Read Only Memory）回路）５１−１は、ユーザが指定したＦＰＧＡ回路５２のクロック周波数（又は、動作周波数）やスルーレート等のパラメータや回路データを含むコンフィグレーションデータＤＡＴＡ１を格納するフラッシュメモリ（Flash Memory）で形成されている。クロック周波数とは、後述するクロック信号ＣＬＫの周波数であり、スルーレートとは、クロック信号ＣＬＫのスルーレートである。
【００２５】
一方、ＦＰＧＡ回路５２は、図３に示す如く接続された入出力（Ｉ／Ｏ：Input/Output）バッファ６１、コンフィグレーションデータ用メモリ６２、ＦＰＧＡ内部回路６３、Ｉ／Ｏバッファ６４，６５、コンフィグレーション制御回路６６、Ｉ／Ｏバッファ６７、クロック発生回路６８、及びＩ／Ｏバッファ６９を有する。コンフィグレーション制御回路６６は、エラーチェック回路（以下、ＣＲＣ（Cyclic Redundancy Check）回路と言う）６６１、カウンタ６６２、主制御部６６３、スルーレート保持部６６４、デコーダ６６５、クロック周波数保持部６６６、及びデコーダ６６７を有する。主制御部６６３は、転送データ保持部７１、エラー検出回路７２、比較回路７３、及びデコーダ７４を有する。クロック発生回路６８は、タップ（ＴＡＰ）調整回路６８１及び複数の直列接続されたインバータ回路６８２を有するリングオシレータ（Ring Oscillator）で形成されており、ＦＰＧＡ回路５２から出力されるコンフィグレーション用クロック信号ＣＬＫを発生する。
【００２６】
Ｉ／Ｏバッファ６１は、クロック信号ＣＬＫに同期してコンフィグレーション回路５１−１から読み出されてＦＰＧＡ回路５２に入力されたコンフィグレーションデータＤＡＴＡ１をコンフィグレーション制御回路６６に供給する。メモリ６２は、ＦＰＧＡ内部回路６３の論理を決定する設定値を格納してこの設定値によりＦＰＧＡ回路５２内のリソースの各種設定を決定する。ＦＰＧＡ内部回路６３は、メモリ６２に格納された設定値により設定される論理機能部を形成する。Ｉ／Ｏバッファ６４は、ＦＰＧＡ回路５２の出力に後述するように次段（又は、後段）のＦＰＧＡ回路（図示せず）が接続されている場合にＦＰＧＡ回路５２のコンフィグレーションが成功して完了すると、成功した時点のコンフィグレーションデータをコンフィグレーションデータＤＡＴＡ１−１として次段のＦＰＧＡ回路へ出力可能とする。Ｉ／Ｏバッファ６５は、ＦＰＧＡ回路５２に外部のユーザ回路（図示せず）が接続されている場合に、ユーザ回路で使用可能なインタフェースを形成する。
【００２７】
コンフィグレーション制御回路６６内において、ＣＲＣ回路６６１は、クロック信号ＣＬＫに同期してコンフィグレーション回路５１−１から読み出されてＦＰＧＡ回路５２に入力されたコンフィグレーションデータＤＡＴＡ１から生成したＣＲＣコードとコンフィグレーションデータＤＡＴＡ１に付加されているＣＲＣコードを比較することでデータエラーを検出して、エラーの有無を示すエラー検出信号を主制御部６６３内のエラー検出回路７２に通知する。このエラー検出信号は、ＦＰＧＡ回路５２に次段のＦＰＧＡ回路又はユーザ回路が接続されている場合には、次段のＦＰＧＡ回路又はユーザ回路に出力可能である。このエラー検出信号は、ＣＲＣ回路６６１でデータエラーが検出されない場合、次段のＦＰＧＡ回路又はユーザ回路においてコンフィグレーションが成功したことを示すコンフィグレーション成功信号として使用可能である。又、ＣＲＣ回路６６１は、コンフィグレーションデータＤＡＴＡ１を主制御部６６３内の転送データ保持部７１に供給する。カウンタ６６２は、コンフィグレーションエラー（コンフィグレーションの失敗）が発生して繰り返しコンフィグレーションが実行された再実行回数ｎ（ｎは０以上の自然数）をカウントする。
【００２８】
主制御部６６３内において、転送データ保持部７１には、後述するスルーレート保持部６６４に保持されたスルーレートｔ及びクロック周波数保持部６６６に保持されたクロック周波数ｆが供給される。このため、転送データ保持部７１は、コンフィグレーションに成功した時のクロック信号ＣＬＫのクロック周波数ｆやスルーレートｔ等のコンフィグレーションデータを、新たなコンフィグレーションデータＤＡＴＡ２としてＩ／Ｏバッファ６７を介してコンフィグレーション回路５１−１に格納する。つまり、コンフィグレーション制御回路６６によりコンフィグレーションデータＤＡＴＡ１が自動調整され、より最適なコンフィグレーションデータＤＡＴＡ２がコンフィグレーション回路５１−１に自動設定される。この結果、コンフィグレーション回路５１−１に自動設定されたコンフィグレーションデータＤＡＴＡ２は、次回のコンフィグレーション時に使用可能となる。
【００２９】
一方、エラー検出回路７２は、ＣＲＣ回路６６１からのエラー検出信号に基づいてコンフィグレーションエラーの有無を検出し、エラー検出結果を比較回路７３及びカウンタ６６２に通知する。又、エラー検出回路７２は、コンフィグレーションエラーを検出すると、予め設定されているルールに従ってクロック周波数保持部６６６に保持されたクロック周波数ｆ及びスルーレート保持部６６４に保持されたスルーレートｔの値を夫々変更、即ち、自動調整する。例えば、クロック周波数ｆは上記ルールに従って下げられ、スルーレートｔは上記ルールに従って下げられる。更に、エラー検出回路７２は、コンフィグレーションエラーが検出されないと、コンフィグレーションが成功したと判断し、コンフィグレーションデータＤＡＴＡ１内のスルーレートｔをスルーレート保持部６６４に供給すると共に、コンフィグレーションデータＤＡＴＡ１内のクロック周波数ｆをクロック周波数保持部６６６に供給する。デコーダ７４は、コンフィグレーションを繰り返す上限値Ｒを示す設定信号の入力を外部から受け、設定信号をデコードして得られた上限値Ｒを比較回路７３に入力する。つまり、デコーダ７４は、設定信号をＦＰＧＡ回路５２（又は、主制御部６６３）内で参照可能な形式の上限値Ｒにデコードする。比較回路７３は、上限値Ｒと、カウンタ６６２のカウント値（即ち、再実行回数）ｎを比較し、再実行回数ｎが上限値Ｒを超えるとコンフィグレーションの再実行回数ｎが上限値Ｒを超えたコンフィグレーションエラーの発生をエラーステータス信号等により外部へ通知する。
【００３０】
尚、クロック周波数保持部６６６に保持するクロック周波数ｆは、Ｉ／Ｏバッファ６１から供給しても良い。又、コンフィグレーション回路５１−１に格納されているコンフィグレーションデータＤＡＴＡ１に上限値Ｒが含まれる場合には、比較回路７３に供給される上限値Ｒは、Ｉ／Ｏバッファ６１から供給しても良い。
【００３１】
クロック周波数保持部６６６に保持されたクロック周波数ｆは、デコーダ６６７でデコードされ、デコードされた値に基づいてクロック発生回路６８のＴＡＰ調整回路６８１を制御してインバータ回路６８２のＴＡＰを調整することで、クロック発生回路６８が発生するクロック信号ＣＬＫのクロック周波数ｆを設定する。クロック信号ＣＬＫは、コンフィグレーション制御回路６６に供給されると共に、Ｉ／Ｏバッファ６９を介してコンフィグレーション回路５１−１に供給される。スルーレート保持部６６４に保持されたスルーレートｔは、デコーダ６６５でデコードされ、デコードされた値により、スルーレートｔの設定に応じてＩ／Ｏバッファ６９からのクロック信号ＣＬＫのコンフィグレーション回路５１−１への供給タイミングが制御される。
【００３２】
ＦＰＧＡ回路５２の出力に後述するように次段のＦＰＧＡ回路が接続されている場合、次段のＦＰＧＡ回路におけるコンフィグレーションが成功して完了すると、次段のＦＰＧＡ回路から出力されるコンフィグレーション成功信号をコンフィグレーション制御回路６６（又は、主制御部６６３）に入力して、ＦＰＧＡ回路５２において次段のＦＰＧＡ回路におけるコンフィグレーションの成功を認識可能とするようにしても良い。
【００３３】
図４は、ＦＰＧＡ回路５２内で実行されるコンフィグレーション処理を説明するフローチャートである。図４において、ステップＳ１では、コンフィグレーションが失敗したときの再実行回数の上限値Ｒと、再実行回数nの初期値「１」を設定する。上限値Ｒは、ＦＰＧＡ回路５２の外部から設定、或いは、コンフィグレーション回路５１−１から設定される。ステップＳ２では、ＦＰＧＡ回路５２のコンフィグレーション時に用いるクロック周波数ｆを設定し、スデップＳ３では、コンフィグレーション時に用いるスルーレートｔを設定する。クロック周波数ｆ及びスルーレートｔの設定値は、夫々コンフィグレーション回路５１−１に設定された値を用いる。
【００３４】
ステップＳ４では、ＦＰＧＡ回路５２のコンフィグレーションを実行する。コンフィグレーションは、例えばＦＰＧＡ回路５２の動作時に実行される。ステップＳ５では、コンフィグレーションが成功したか否かの判定をコンフィグレーション制御回路６６で行う。コンフィグレーションが成功してステップＳ５の判定結果がＹＥＳであると、ステップＳ１０では、コンフィグレーションが成功したことを示す成功フラグに「１」を立てる。
【００３５】
ステップＳ１１では、クロック周波数ｆとスルーレートｔをクロック周波数保持部６６６及びスルーレート保持部６６４に保持しているか否かを判定する。ステップＳ１１の判定結果がＹＥＳであると、ステップＳ１２では、クロック周波数保持部６６６に保持されたクロック周波数ｆとスルーレート保持部６６４に保持されたスルーレートｔをコンフィグレーション回路５１−１に格納し、処理は終了する。一方、ステップＳ１１の判定結果がＮＯであると、処理はそのまま終了する。
【００３６】
コンフィグレーションが失敗してステップＳ５の判定結果がＮＯであると、ステップＳ６では、ｎ＞Ｒであるか否かを判定する。ステップＳ６の判定結果がＹＥＳであると、ステップＳ７では、コンフィグレーションが失敗したことを示す失敗フラグに「１」を立てて、処理は終了する。一方、ステップＳ６の判定結果がＮＯであると、ステップＳ８では再実行回数nをｎ＝ｎ＋１にインクリメントする。又、ステップＳ９では、クロック周波数ｆ及びスルーレートtの自動調整を行い、処理はステップＳ４へ戻る。従って、ステップＳ９の後は、ステップＳ４でコンフィグレーションを実行し、コンフィグレーションが成功するか、或いは、コンフィグレーションが失敗してコンフィグレーションの再実行回数が上限値Ｒを超えるまで、コンフィグレーションの再実行とコンフィグレーションデータの自動調整を繰り返す。
【００３７】
次に、ステップＳ９での自動調整の例を説明する。第１の例では、コンフィグレーションの失敗の原因として、クロック周波数ｆが高すぎることが考えられるため、クロック周波数ｆを例えば１割下げた値に自動調整する。第２の例では、コンフィグレーションの失敗の原因として、スルーレートｔが高すぎることが考えられるため、スルーレートｔを一定値だけ下げた値に自動調整する。第３の例では、上記第１及び第２の例を組合せたクロック周波数ｆ及びスルーレートｔの自動調整を行う。
【００３８】
本実施例によれば、図３のＦＰＧＡ回路５２のコンフィグレーション制御回路６６内に、主制御部６６３のエラー検出回路７２からクロック発生回路６８及びＩ／Ｏバッファ６９に至るパスを設けることで、クロック周波数ｆ及びスルーレートｔを自動調整してコンフィグレーションを再実行する機構を備える。これにより、コンフィグレーションエラーを回避するためのユーザによるコンフィグレーションデータＤＡＴＡ１の手動調整が不要になり、ユーザへの負荷が大幅に軽減される。
【００３９】
又、図３のコンフィグレーション制御回路６６内に、主制御部６６３、クロック周波数保持部６６６及びスルーレート保持部６６４からＩ／Ｏバッファ６７に至るパスを設け、コンフィグレーション成功時のクロック周波数ｆ及びスルーレートｔをコンフィグレーション回路５１−１に格納して自動設定する機構を備える。これにより、ＦＰＧＡ回路５２の製品毎の調整コストを不要とすることができる。
【００４０】
このように、本実施例によれば、ＦＰＧＡ回路５２自身がコンフィグレーションデータを自動調整してコンフィグレーションを成功させるので、ユーザがコンフィグレーションを成功させるのに最適なクロック周波数及びスルーレートを手動調整して手動設定する必要がなくなる。又、ＦＰＧＡ回路５２において、周囲温度等のＦＰＧＡ回路５２の動作環境の変化により、コンフィグレーションを成功させるのに最適なクロック周波数又はスルーレートが変化しても、ユーザが意識することなく、ＦＰＧＡ回路５２自身でコンフィグレーションデータの自動調整及び自動設定が可能となる。更に、コンフィグレーション成功時の最適なクロック周波数及びスルーレートがコンフィグレーション回路５１−１に自動設定されるので、次回のコンフィグレーション時にこれらの最適なクロック周波数及びスルーレートを使用することで、コンフィグレーションエラーを抑制することができる。
【００４１】
（第２実施例）
図５は、本発明の第２実施例におけるコンフィグレーション制御回路の一例を説明する図である。本実施例では、複数個のＦＰＧＡ回路に対してコンフィグレーション回路が設けられる場合に本発明が適用されている。
【００４２】
図５において、コンフィグレーション回路５１−２は、複数のＦＰＧＡ回路（＃１〜＃Ｎ、Ｎは１以上の自然数）５２−１〜５２−Ｎに対して設けられている。この例では、ＦＰＧＡ回路５２−１はマスタとして機能し、ＦＰＧＡ回路５２−２〜５２−Ｎはスレーブとして機能する。コンフィグレーション回路５１−２は、上記コンフィグレーション回路５１−１と同様にして、マスタＦＰＧＡ回路５２−１にコンフィグレーションデータＤＡＴＡ１を入力する。マスタＦＰＧＡ回路５２−１は、上記ＦＰＧＡ回路５２と同様にしてクロック信号ＣＬＫをコンフィグレーション回路５１−２に供給する。一方、クロック信号ＣＬＫは、スレーブＦＰＧＡ回路５２−２〜５２−Ｎへも供給される。又、コンフィグレーション回路５１−２からのコンフィグレーションデータＤＡＴＡ１は、マスタＦＰＧＡ回路５２−１を介してコンフィグレーションデータＤＡＴＡ１−１，ＤＡＴＡ１−２，...としてＦＰＧＡ回路５２−２〜５２−Ｎへ順次供給される。
【００４３】
図６は、第２実施例におけるコンフィグレーション制御回路の構成を示す図である。図６は、ＦＰＧＡ回路が２個（即ち、Ｎ＝２）の場合の後段のＦＰＧＡ回路５２−２のコンフィグレーション回路の構成を示す。図６において、ＦＰＧＡ回路５２−１は、図３のＦＰＧＡ回路５２と同じ構成を有し、ＦＰＧＡ回路５２−１内で実行されるコンフィグレーション処理も図４のフローチャートと同じであるため、それらの図示及び説明は省略する。図６中、図３と同一部分には同一符号を付し、その説明は省略する。
【００４４】
図６において、ＦＰＧＡ回路５２−２内の梨地で示す回路部分は、ＦＰＧＡ回路５２−１とは異なり未使用となる機能部分を示す。又、ＦＰＧＡ回路５２−２の入出力信号で未使用となるものは、図６において「未使用」と示されている。更に、ＦＰＧＡ回路５２−２内のＩ／Ｏバッファ６９に対するクロック信号ＣＬＫの転送方向は、ＦＰＧＡ回路５２−１内のＩ／Ｏバッファ６９に対するものとは反対方向となる。しかし、ＦＰＧＡ回路５２−２の動作は、梨地で示す回路部分が未使用となり動作しない点を除けば、基本的にはＦＰＧＡ回路５２−１の動作と同様である。ＦＰＧＡ回路５２−２内のＩ／Ｏバッファ６４から出力されるコンフィグレーションデータＤＡＴＡ１−２は、後段のＦＰＧＡ回路５２−３（図示せず）内のＩ／Ｏバッファ６１に供給される。
【００４５】
本実施例では、各スレーブＦＰＧＡ回路５２−２〜５２−Ｎが、マスタＦＰＧＡ回路５２−１から出力されるクロック信号ＣＬＫに同期して動作し、スレーブＦＰＧＡ回路５２−ｉ（ｉは２以上の自然数）にはその前段のＦＰＧＡ回路５２−ｉ−１を通過したコンフィグレーションデータが供給される。図５に示すように、ＦＰＧＡ回路５２−１が出力するコンフィグレーションデータＤＡＴＡ１−１は後段のＦＰＧＡ回路５２−２に供給され、ＦＰＧＡ回路５２−２が出力するコンフィグレーションデータＤＡＴＡ１−２は後段のＦＰＧＡ回路５２−３に供給され、...、ＦＰＧＡ回路５２−Ｎ−１が出力するコンフィグレーションデータＤＡＴＡ１−Ｎ−１は後段のＦＰＧＡ回路５２−Ｎに供給される。
【００４６】
図７は、第２実施例におけるコンフィグレーション成功信号の出力を説明する図である。図７中、図５と同一部分には同一符号を付し、その説明は省略する。図７は、図５において図示を省略したコンフィグレーション成功信号の転送パスを示す。
【００４７】
図７は、コンフィグレーション成功信号がオープンドレイン（Open-Drain）信号である場合を示す。この場合、各ＦＰＧＡ回路５２−１〜５２−Ｎから出力されるコンフィグレーション成功信号は、信号線５３０を介して１段目のＦＰＧＡ回路５２−１内の主制御部６６３に入力される。又、信号線は、プルアップ（Pull-Up）抵抗５３１を介して電源電圧Ｖｃｃに接続されている。ＦＰＧＡ回路５２−１〜５２−Ｎから出力されるコンフィグレーション成功信号（即ち、オープンドレイン信号）が全てハイインピーダンス（High-Z）状態の時、プルアップ抵抗５３１によりハイレベルのコンフィグレーション成功信号が１段目のＦＰＧＡ回路５２−１に入力され、全てのＦＰＧＡ回路５２−１〜５２−Ｎのコンフィグレーションが成功したことを認識することができる。
【００４８】
図５及び図７において、マスタＦＰＧＡ回路５２−１以外のスレーブＦＰＧＡ回路５２−２〜５２−Ｎの部分については、各種接続方法を採用することが可能である。
【００４９】
図８は、スレーブＦＰＧＡ回路の接続の第１の例を示す図である。説明の便宜上、図８はコンフィグレーション回路５１−２、マスタＦＰＧＡ回路５２−１及びスレーブＦＰＧＡ回路５２−２のみを示す。例えば、コンフィグレーション回路５１−２はザイリンクス（Xilinx）社製のＰＲＯＭで形成され、マスタＦＰＧＡ回路５２−１及びスレーブＦＰＧＡ回路５２−２は夫々ザイリンクス（Xilinx）社製のVirtex-5ファミリ（又は、シリーズ）のＦＰＧＡで形成されているので、各端子の説明は省略する。/PROGRAMは、コンフィグレーションを開始を指示する信号である。この例では、マスタＦＰＧＡ回路５２−１及びスレーブＦＰＧＡ回路５２−２を接続してコンフィグレーションデータを転送するデータバス５４１がシリアルバスの場合を示す。
【００５０】
図９は、スレーブＦＰＧＡ回路の接続の第２の例を示す図である。説明の便宜上、図９はコンフィグレーション回路５１−２、マスタＦＰＧＡ回路５２−１、及びスレーブＦＰＧＡ回路５２−２，５２−３のみを示す。例えば、コンフィグレーション回路５１−２はザイリンクス（Xilinx）社製のフラッシュメモリ（Flash Memory）で形成され、マスタＦＰＧＡ回路５２−１及びスレーブＦＰＧＡ回路５２−２，５３−３は夫々ザイリンクス（Xilinx）社製のVirtex-5ファミリ（又は、シリーズ）のＦＰＧＡで形成されているので、各端子の説明は省略する。この例では、マスタＦＰＧＡ回路５２−１及びスレーブＦＰＧＡ回路５２−２，５２−３を接続してコンフィグレーションデータを転送するデータバス５４２がパラレルバスの場合を示す。又、マスタＦＰＧＡ回路５２−１のＣＳＯ＿Ｂ端子から出力されるエラー検出信号がコンフィグレーションが成功したことを示すと、ＣＳ＿Ｂ端子にこのエラー検出信号が入力されるスレーブＦＰＧＡ回路５２−２のコンフィグレーション処理が開始される。
【００５１】
本実施例によれば、ＦＰＧＡ回路５２−１自身がコンフィグレーションデータを自動調整してコンフィグレーションを成功させるので、複数段のＦＰＧＡ回路５２−１〜５２−Ｎが接続されている場合であっても、ユーザがコンフィグレーションを成功させるのに最適なクロック周波数及びスルーレートを手動調整して手動設定する必要がなくなり、上記第１実施例と同様の効果を得ることができる。
【００５２】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを行うコンフィグレーション方法であって、
コンフィグレーション回路から前記ＦＰＧＡ回路にコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントし、
前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行し、
前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する、コンフィグレーション方法。
（付記２）
前記コンフィグレーションデータは、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含み、
前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力する、付記１記載のコンフィグレーション方法。
（付記３）
前記コンフィグレーション回路から前記ＦＰＧＡ回路に設定されるコンフィグレーションデータのデータエラーの有無を前記ＦＰＧＡ回路内で検出し、前記データエラーの有無に基づいてコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントする、付記２記載のコンフィグレーション方法。
（付記４）
前記ＦＰＧＡ回路内で前記コンフィグレーションの失敗が検出されないと、前記コンフィグレーションが成功したことを示すステータス信号を前記ＦＰＧＡ回路の外部へ出力する、付記３記載のコンフィグレーション方法。
（付記５）
前記コンフィグレーションの再実行回数が前記上限値を超えると、前記再実行回数が前記上限値を超えたコンフィグレーションの失敗の発生を示すステータス信号を前記ＦＰＧＡ回路の外部へ出力する、付記２乃至４のいずれか１項記載のコンフィグレーション方法。
（付記６）
前記上限値を、前記コンフィグレーション回路から、或いは、前記コンフィグレーション回路以外の外部回路から前記ＦＰＧＡ回路に設定する、付記２乃至５のいずれか１項記載のコンフィグレーション方法。
（付記７）
前記コンフィグレーションが成功した時点のコンフィグレーションデータを、前記ＦＰＧＡ回路から前記ＦＰＧＡ回路の次段に接続された他のＦＰＧＡ回路に、前記他のＦＰＧＡ回路のコンフィグレーションデータとして出力する、付記２乃至６のいずれか１項記載のコンフィグレーション方法。
（付記８）
前記クロック信号を、前記ＦＰＧＡ回路から前記他のＦＰＧＡ回路に供給する、付記７記載のコンフィグレーション方法。
（付記９）
ＦＰＧＡ（Field Programmable Gate Array）回路のコンフィグレーションを前記ＦＰＧＡ回路から行うコンフィグレーション制御回路であって、
コンフィグレーション回路から前記ＦＰＧＡ回路にコンフィグレーションデータを設定するコンフィグレーションが失敗した回数を前記ＦＰＧＡ回路内でカウントするカウンタと、
前記回数が上限値以下であると前記コンフィグレーションが失敗した時の前記コンフィグレーションデータを予め設定されているルールに従って前記ＦＰＧＡ回路内で調整してコンフィグレーションを再実行する主制御部とを備え、
前記主制御部は、前記コンフィグレーションが成功すると、成功した時点のコンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する、コンフィグレーション制御回路。
（付記１０）
前記コンフィグレーションデータは、前記ＦＰＧＡ回路のクロック信号のクロック周波数又はスルーレートを含み、
前記主制御部が前記コンフィグレーションデータを前記ＦＰＧＡ回路から前記コンフィグレーション回路に設定する際に、設定するコンフィグレーションデータに含まれるクロック周波数を有するクロック信号を前記コンフィグレーション回路に入力する回路を更に備えた、付記９記載のコンフィグレーション制御回路。
（付記１１）
前記コンフィグレーション回路から前記ＦＰＧＡ回路に設定されるコンフィグレーションデータのデータエラーの有無を前記ＦＰＧＡ回路内で検出するエラーチェック回路を更に備え、
前記主制御部は、前記エラーチェック回路で検出されたデータエラーの有無に基づいてコンフィグレーションが失敗した回数を検出して前記カウンタに供給する、付記１０記載のコンフィグレーション制御回路。
（付記１２）
前記主制御部は、前記コンフィグレーションの失敗を検出しないと、前記コンフィグレーションが成功したことを示すステータス信号を前記ＦＰＧＡ回路の外部へ出力する、付記９乃至１１のいずれか１項記載のコンフィグレーション制御回路。
（付記１３）
前記主制御部は、前記コンフィグレーションの再実行回数が前記上限値を超えると、前記再実行回数が前記上限値を超えたコンフィグレーションの失敗の発生を示すステータス信号を前記ＦＰＧＡ回路の外部へ出力する、付記１０乃至１２のいずれか１項記載のコンフィグレーション制御回路。
（付記１４）
前記上限値は、前記コンフィグレーション回路から、或いは、前記コンフィグレーション回路以外の外部回路から前記ＦＰＧＡ回路に設定される、付記１０乃至１３のいずれか１項記載のコンフィグレーション制御回路。
（付記１５）
前記コンフィグレーションが成功した時点のコンフィグレーションデータを、前記ＦＰＧＡ回路から前記ＦＰＧＡ回路の次段に接続された他のＦＰＧＡ回路に、前記他のＦＰＧＡ回路のコンフィグレーションデータとして出力するＦＰＧＡ内部回路を更に備えた、付記１０乃至１４のいずれか１項記載のコンフィグレーション制御回路。
（付記１６）
前記ＦＰＧＡ回路と、前記ＦＰＧＡ回路の後段に順次接続された一又は複数の他のＦＰＧＡ回路とは、コンフィグレーションデータを転送するシリアルバス又はパラレルバスにより接続されている、付記１５記載のコンフィグレーション制御回路。
【００５３】
以上、開示のコンフィグレーション方法及びコンフィグレーション制御回路を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【００５４】
５１−１，５１−２      コンフィグレーション回路
５２，５２−１〜５２−Ｎ      ＦＰＧＡ回路
６２      コンフィグレーションデータ用メモリ
６３      ＦＰＧＡ内部回路
６６      コンフィグレーション制御回路
６８      クロック発生回路
６６１      ＣＲＣ回路
６６２      カウンタ
６６３      主制御部
【図１】
0005609176.tif 000002
【図２】
0005609176.tif 000003
【図３】
0005609176.tif 000004
【図４】
0005609176.tif 000005
【図５】
0005609176.tif 000006
【図６】
0005609176.tif 000007
【図７】
0005609176.tif 000008
【図８】
0005609176.tif 000009
【図９】
0005609176.tif 000010