(57)【特許請求の範囲】
【請求項１】
複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスにおいて、
同じ前記演算機能を持ち、かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路が形成され、
各前記演算回路は、それぞれ演算結果を検証回路に出力して検証させることを特徴とするプログラマブルロジックデバイス。
【請求項２】
複数の前記演算回路のうちの少なくとも１つの前記演算回路は、前記回路ブロックとしてＤＳＰブロックを含んだ前記回路ブロックの組み合わせにより形成され、他の少なくとも１つの前記演算回路は、前記ＤＳＰブロック以外の前記回路ブロックの組み合わせにより形成されることを特徴とする請求項１に記載のプログラマブルロジックデバイス。
【請求項３】
前記検証回路は、前記回路ブロックの組み合わせにより形成されることを特徴とする請求項１または２に記載のプログラマブルロジックデバイス。
【請求項４】
複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において、
同じ前記演算機能を持ち、かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路を形成する回路形成ステップと、
各前記演算回路でそれぞれ演算を行う演算ステップと、
各前記演算回路からの演算結果を検証回路で検証する検証ステップと
を有することを特徴とするプログラマブルロジックデバイスのエラー検証方法。
【請求項５】
前記回路形成ステップは、
前記回路ブロックとしてＤＳＰブロックを含んだ前記回路ブロックの組み合わせでなる前記演算回路を少なくとも１つ形成するとともに、前記ＤＳＰブロック以外の前記回路ブロックの組み合わせでなる他の前記演算回路を少なくとも１つ形成することを特徴とする請求項４に記載のプログラマブルロジックデバイスのエラー検証方法。
【請求項６】
構成情報にしたがって複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスの回路形成方法において、
前記回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと、
前記合成パラメータ設定ステップで前記合成パラメータが設定されるごとに、前記合成パラメータの下で論理合成を行い、ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップと、
前記複数のネットリストから前記構成情報を生成する構成情報生成ステップと、
前記構成情報をプログラマブルロジックデバイスに書き込み、前記複数のネットリストに対応した同じ前記演算機能を持ち、かつ前記回路ブロックの組み合わせが異なって接続状態が異なり、それぞれ演算結果を検証回路に出力して検証させる複数の演算回路を前記プログラマブルロジックデバイスに形成する形成ステップと
を有することを特徴とするプログラマブルロジックデバイスの回路形成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックデバイス、プログラマブルロジックデバイスのエラー検証方法、及びプログラマブルロジックデバイスの回路形成方法に関するものである。
【背景技術】
【０００２】
近年において、プログラマブルロジックデバイス、特にＦＰＧＡ（Field Programmable Gate Array）は、制御や通信の分野で多く使われるようになってきた。ＦＰＧＡは、ＦＰＧＡ内の構成メモリに構成情報をロードすることにより、基本論理ブロック（ＣＬＢ（Configurable Logic Block）、ＬＥ（Logic Element）等とも称される）等の回路ブロックを組み合わせることによって演算回路を形成する。演算回路としては、単純な数値演算を行うものからＣＰＵ（Central Processing Unit）に相当する機能を有するものまで様々なものを実現可能である（例えば、特許文献１参照）。
【０００３】
ＦＰＧＡでは、演算機能を実現する１つ１つの演算が回路ブロックに対応しており、当該回路ブロックの組み合わせが変更されることにより様々な演算機能が実現されている。このため、ＦＰＧＡでは、演算機能の演算数の増大にともなって、演算回路に使用される回路ブロックの数も多くなる。この結果、ＦＰＧＡでは、回路ブロックの数が多い複雑な演算回路が形成されると、当該演算回路に使用する回路ブロックの数の増加に伴い、演算回路に使用される回路ブロック内のＡＮＤゲートやＯＲゲートなどの回路素子の数も多くなる。
【０００４】
ここで、これらＡＮＤゲートやＯＲゲートなどの回路素子は、大気中の荷電粒子等の影響を受けて誤作動することもある。そして、例えば演算回路に組み込まれた回路素子が誤作動した場合には、当該演算回路の演算結果がエラーとなる。そのため、ＦＰＧＡでは、演算回路に使用する回路素子の数が多くなると、当該回路素子の数が多くなる分、大気中の荷電粒子等の影響を受ける確率も高くなり、エラーが発生する恐れが高くなるという問題がある。
【０００５】
また、上記のようなＦＰＧＡでは、例えばＦＰＧＡを駆動するクロックの変動や、ＦＰＧＡの電源の電圧変動、ＦＰＧＡ自体の温度変動に対するロバスト性が、回路ブロック間を接続する配線の状態（接続状態）によって左右されることが知られており、演算回路を構成する回路ブロック間の接続状態によっては、エラーが発生し易くなるという問題もある。
【０００６】
そこで、従来では、同じ種類の回路ブロックを組み合わせて同じ演算処理を行う演算回路を２重、３重にＦＰＧＡ内に設け、このように冗長化された各演算回路で同時に同じ演算を行って、各演算回路の演算結果を比較し、いずれかの演算回路で回路ブロックが誤作動しているか否か、すなわち演算結果にエラーがあるか否かを検証するエラー検証方法を行うことが考えられている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−０９９６２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、従来のエラー検証方法では、同じ種類の回路ブロックを組み合わせて同じ演算処理を行う複数の演算回路で、演算回路を冗長化している。このため、ＦＰＧＡ自体の温度変動や、ＦＰＧＡの電源の電圧変動、ＦＰＧＡを駆動するクロックの変動など、ＦＰＧＡ全体で共通する要因（以下、共通要因と呼ぶ）に起因したエラーが生じた場合、ＦＰＧＡの各演算回路から得られる演算結果にエラーが発生しているにもかかわらず、同じ演算結果が得られてしまい、エラーの発生を検知することができない場合もあるという問題があった。そのため、従来のエラー検証方法では、エラー検知率が十分に高いとはいえなかった。
【０００９】
本発明は、上記事情に鑑みてなされたものであり、従来よりもエラー検知率を向上させることができるプログラマブルロジックデバイス、プログラマブルロジックデバイスのエラー検証方法、及びプログラマブルロジックデバイスの回路形成方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスにおいて、同じ演算機能を持ち、かつ回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路が形成され、各演算回路は、それぞれ演算結果を検証回路に出力して検証させるものである。
【００１１】
また、本発明は、複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において、同じ演算機能を持ち、かつ回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路を形成する回路形成ステップと、各演算回路でそれぞれ演算を行う演算ステップと、各演算回路からの演算結果を検証回路で検証する検証ステップとを有するものである。
【００１２】
さらに、本発明は、構成情報にしたがって複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスの回路形成方法において、回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと、合成パラメータ設定ステップで合成パラメータが設定されるごとに、合成パラメータの下で論理合成を行い、ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップと、複数のネットリストから構成情報を生成する構成情報生成ステップと、構成情報をプログラマブルロジックデバイスに書き込み、複数のネットリストに対応した同じ演算機能を持ち、かつ前記回路ブロックの組み合わせが異なって接続状態が異なり、それぞれ演算結果を検証回路に出力して検証させる複数の演算回路を前記プログラマブルロジックデバイスに形成する形成ステップとを有するものである。
【発明の効果】
【００１３】
本発明のプログラマブルロジックデバイス、及びそのエラー検証方法によれば、回路ブロックの組み合わせに応じて、温度変動や電圧変動、クロック変動の共通要因に対する各演算回路での動作状況が異なるため、各演算回路で発生するエラーの発生状態も異なってくることから、従来の単に冗長化した複数の演算回路から得られる演算結果を比較する場合に比べ、各演算回路から得られた演算結果を比較する際に、共通要因に起因したエラーをも検知でき、かくして、従来よりもエラー検知率を向上させることができる。
【００１４】
また、本発明のプログラマブルロジックデバイスの回路形成方法によれば、複数のネットリストから生成された構成情報をプログラマブルロジックデバイスに適用することによって、同じ演算機能を持ち、かつ回路ブロックの組み合わせが異なる複数の演算回路をそのプログラマブルロジックデバイスに形成できる。これにより、上述した構成情報が適用されたプログラマブルロジックデバイスでは、回路ブロックの組み合わせに応じて、温度変動や電圧変動、クロック変動の共通要因に対する各演算回路での動作状況が異なるため、各演算回路で発生するエラーの発生状態も異なってくることから、従来の単に冗長化した複数の演算回路から得られる演算結果を比較する場合に比べ、各演算回路から得られた演算結果を比較する際に、共通要因に起因したエラーをも検知でき、かくして、従来よりもエラー検知率を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】ＦＰＧＡの概略を示す説明図である。
【図２】ＦＰＧＡに形成した回路の構成を示すブロック図である。
【図３】構成情報生成装置の概略を示すブロック図である。
【図４】検証例と比較例における動作周波数とエラー発生率との関係を示すグラフである。
【図５】検証例と比較例における動作周波数とエラー検知率との関係を示すグラフである。
【図６】検証例と比較例における動作周波数と演算結果の不一致距離との関係を示すグラフである。
【発明を実施するための形態】
【００１６】
図１に本実施形態に用いるＦＰＧＡ（Field Programmable Gate Array）１０を示す。本実施形態では、プログラマブルロジックデバイス（ＰＬＤ）の一例として、一般的なＦＰＧＡ１０に本発明を適用した場合について説明する。ＦＰＧＡ１０は、例えば通信処理機能や、暗号化処理機能、画像処理機能等のような演算機能の変更が可能なデバイスである。ＦＰＧＡ１０には、演算処理の対象となる信号の種類や演算処理の内容に合わせて所望の演算機能を実現するため、基本論理ブロック１１、ＤＳＰブロック１２、ブロックＲＡＭ１３、ＩＯブロック（Input/Output Block）１４、ＰＬＬブロック１５等が回路ブロック９（回路要素）として設けられている。また、回路ブロック９の他に、ＦＰＧＡ１０には、構成メモリ１６や、回路ブロック９の間を繋ぐ配線リソース（図示省略）が設けられている。
【００１７】
基本論理ブロック１１は、ＦＰＧＡ１０を構成する基本的な回路ブロックであり、ＣＬＢ（Configurable Logic Block）、ロジックエレメント（Logic Element）、ロジックセル（Logic Cell）等とも称されるものである。基本論理ブロック１１は、種々の構成のものがあるが、一般的にはＬＵＴ（Lookup table）とレジスタ（フリップフロップ）を基本要素とする複数の基本回路（スライス等と称される場合もある）から構成されている。
【００１８】
ＤＳＰブロック１２は、基本論理ブロック１１の組み合わせではなく、乗算や積和演算等の演算を高速に処理するためにハードウェア（ハードマクロ）として予め組み込まれている回路ブロック９であり、ＤＳＰスライス１２等と称される場合もある。このＤＳＰブロック１２は、高速な乗算器と加算器を基本要素として構成されている。ブロックＲＡＭ１３は、一般的なメモリとして利用可能な回路ブロック９である。ブロックＲＡＭ１３は、例えば他の回路ブロック９から出力される演算途中のデータを一時的に保持する際に利用される。ＩＯブロック１４は、ＦＰＧＡ１０の入力機能及び出力機能を提供する回路ブロック９である。ＰＬＬブロック１５は、回路ブロック９の動作に必要なクロックを発生する。配線リソースは、回路ブロック９同士を接続する配線及び配線上に設けられたパストランジスタで構成されている。
【００１９】
構成メモリ１６には、構成情報１８がロード（書き込み）される。構成情報１８は、回路ブロック９の動作や、配線リソースによる回路ブロック９間の接続等を定義するものであり、コンフィギュレーション・データ、ビットストリーム等と称されるものである。ＦＰＧＡ１０には、この構成情報１８にしたがって、所望する演算回路が形成される。すなわち、ＦＰＧＡ１０は、構成情報１８にしたがって複数の回路ブロック９の組み合わせが変更され、これにより演算機能が変更可能なデバイスとなっている。
【００２０】
ＦＰＧＡ１０は、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが異なる複数の演算回路を形成させる構成情報１８が構成メモリ１６にロードされることにより、当該構成情報１８にしたがって、図２に示すように、例えば演算回路Ｌ１〜Ｌ３と検証回路２１とが形成される。なお、この例では、３個の演算回路Ｌ１〜Ｌ３の場合について説明するが、演算回路は２個以上あればよい。また、構成情報１８は、外部のコンピュータから構成メモリ１６にロードしたり、構成情報１８が予め書き込まれた不揮発性メモリから自動的にロードしたりしてもよい。
【００２１】
図２に示すように、この例におけるＦＰＧＡ１０には、ｐ（ｐ≧１）ビットの入力データＸ（ｘ１〜ｘｐ）が入力される。例えば機器（図示省略）の動作を制御する制御システムにＦＰＧＡ１０が設けられ、機器の動作を監視するセンサ（図示省略）からの検出値等が入力データＸとしてＦＰＧＡ１０に入力される場合について以下に説明する。なお、入力データＸは、１つの値を表すものに限定されない。例えば、複数の検出値をまとめて入力データＸとしてもよい、この場合には複数の検出値のビット数の合計がｐビットとなる。また、入力データＸは、例えばコンピュータ等で生成された１組あるいは複数組の数値、ネットワークを介して受信したデータ、各種機器の駆動を制御するタイミング信号等であってもよい。
【００２２】
上述の入力データＸは、ＦＰＧＡ１０内で演算回路Ｌ１〜Ｌ３にそれぞれ入力される。演算回路Ｌ１は、入力データＸが入力されると、所定の演算を行って、ｑ（ｑ≧１）ビットの演算結果データＶ１（ｖ１１〜ｖ１ｑ）を出力する。演算回路Ｌ２、Ｌ３についても同じであり、入力データＸが入力されると、所定の演算を行って、演算結果データＶ２（ｖ２１〜ｖ２ｑ）、Ｖ３（ｖ３１〜ｖ３ｑ）を出力する。
【００２３】
演算回路Ｌ１〜Ｌ３は、同じ演算機能を持つが、エラー検知率を向上させるために、回路ブロック９の組み合わせを互いに異なるものにしている。すなわち、演算回路Ｌ１〜Ｌ３は、使用する回路ブロック９の種類や数、回路ブロック９内でのＬＵＴやレジスタの使われ方、これら回路ブロック９の接続状態が演算回路Ｌ１〜Ｌ３では互いに異なったものになっているが、演算回路Ｌ１〜Ｌ３にエラーが発生しない状態では、演算回路Ｌ１〜Ｌ３は、同一の入力データＸの入力に応答して同じ演算結果データＶ１〜Ｖ３を出力するよう構成されている。
【００２４】
上記のように演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせを互いに異なるものにすることによって、演算回路Ｌ１〜Ｌ３が同時にエラーを発生させる可能性を低くするとともに、また演算回路Ｌ１〜Ｌ３が同時にエラーを発生させても各演算結果データＶ１〜Ｖ３が同じになる可能性を極めて低くしている。
【００２５】
例えば、演算回路Ｌ１、Ｌ３は、組み合わされる複数の回路ブロックの中に少なくとも１つ以上のＤＳＰブロック１２が含まれた回路構成を有している。一方、演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９が組み合わされた回路構成（例えば、ＬＵＴを含む基本論理ブロック１１を主体とした回路構成）を有している。また、演算回路Ｌ１と演算回路Ｌ２とは、例えば演算中のデータを保持するメモリ（以下、データ保持メモリ）として、ブロックＲＡＭ１３を使用するのに対して、演算回路Ｌ３は、基本論理ブロック１１のフリップフロップを利用したいわゆる分散ＲＡＭを使用する回路ブロック９の組み合わせである。このようにして、演算回路Ｌ１〜Ｌ３は、種類の異なる回路ブロック９を用い、相互に回路ブロック９の組み合わせが異なるものになっており、多様性のあるものとなっている。
【００２６】
演算回路Ｌ１、Ｌ３のようにＤＳＰブロック１２を使用した場合には、演算回路Ｌ２のようにＤＳＰブロック１２を使用しない場合に比べて、使用される基本論理ブロック１１の個数を大幅に少なくさせることもでき、回路ブロック９間を接続した配線の長さも含め演算回路を形成する回路ブロック１１の組み合わせを大きく異ならせることができる。すなわち、演算回路Ｌ１、Ｌ３と演算回路Ｌ２とは、論理的な演算機能は同じであるが、ゲートレベルにおける動作（信号処理の物理的プロセスや、物性レベルの素子内部の振る舞い等）が大きく異なり、ＦＰＧＡ１０の温度変動や電圧変動、クロック変動などの共通要因がゲートレベルにおける動作に与える影響も大きく異なってくる。このため、ＦＰＧＡ１０では、上記共通要因に対する演算回路Ｌ１、Ｌ３と演算回路Ｌ２とのゲートレベルにおける動作状況が大きく異なるため、エラー発生時の演算結果データの不一致の程度も大きくなることが期待できる。したがって、ＤＳＰブロック１２の使用の有無によって回路ブロック１１の組み合わせを異なったものとすることは、エラーの発生を演算結果データの不一致によって検知する際に非常に有利である。
【００２７】
この実施の形態の場合、ＦＰＧＡ１０には、複数の回路ブロック９が組み合わされることにより検証回路２１が形成されている。演算回路Ｌ１〜Ｌ３は、演算結果データＶ１〜Ｖ３を検証回路２１に送る。検証回路２１は、演算結果データＶ１〜Ｖ３を検証し、その検証結果として検証データＲを生成する。また、検証回路２１は、演算結果データＶ１〜Ｖ３のうちエラーがないと推測すると、演算結果データとして出力データＹ（ｙ１〜ｙｑ）を生成する。この検証回路２１は、検証データＲと出力データＹとを制御システムのシステムコントローラ（図示省略）に出力する。
【００２８】
上記検証回路２１は、例えば多数決方式によって出力データＹを決定する。すなわち、演算結果データＶ１〜Ｖ３の値を比較して一致、不一致を判定し、同じ値となっている演算結果データの個数が最も多い演算結果データを正常値とし、その正常値を出力データＹとして出力する。
【００２９】
ＦＰＧＡ１０は、例えば演算回路Ｌ１〜Ｌ３のいずれもがエラーを発生していないときには、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が全て一致する。また、演算回路Ｌ１〜Ｌ３のうち例えば演算回路Ｌ１だけにエラーが発生しているときには、演算回路Ｌ２,Ｌ３から得られる演算結果データＶ２、Ｖ３と、演算回路Ｌ１から得られる演算結果データＶ１とが異なるものとなる。また、演算回路Ｌ１〜Ｌ３のうち例えば演算回路Ｌ２，Ｌ３にだけエラーが発生しているとき、演算回路Ｌ２,Ｌ３から得られる演算結果データＶ２、Ｖ３と、演算回路Ｌ１から得られる演算結果データＶ１とが異なるものとなる。
【００３０】
さらに、ＦＰＧＡ１０は、前述のように演算回路Ｌ１〜Ｌ３を回路ブロックの組み合わせが互いに異なる回路構成とすることによって、温度変動や電圧変動、クロック変動の共通要因でエラーが発生しても、当該共通要因に対する各演算回路Ｌ１〜Ｌ３での動作状況が異なるので、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が互いに異なるものとなる。
【００３１】
これにより、ＦＰＧＡ１０では、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が全て一致するときＦＰＧＡ１０にエラーが発生していないと判断でき、一方、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が不一致のときＦＰＧＡ１０にエラーが発生していると判断し得る。
【００３２】
検証データＲは、エラーの発生状況や出力データＹの確からしさの判断の指標となる情報である。この例では、検証データＲは、演算結果データＶ１〜Ｖ３に対応した個別検証データＲ１〜Ｒ３を含んでいる。個別検証データＲ１〜Ｒ３は、例えば出力データＹを正常値としたときに、対応する演算結果データＶ１〜Ｖ３の誤りビットの個数、何ビット目が誤りビットになっているか、出力データＹに示される値と演算結果データとの差等の情報を有したものとなっている。システムコントローラは、このような個別検証データＲ１〜Ｒ３を含む検証データＲにより、正常値と不一致となっている演算結果データの個数や不一致の演算結果データ中のビット数、エラーが発生したと推測される演算回路がいずれか、不一致となっている演算結果データの値と正常値との差や、その差の最大値、最小値、幅等の情報を取得できる。
【００３３】
図３において、ＦＰＧＡ１０にロードされる構成情報１８は、構成情報生成装置２４によって生成される。この構成情報生成装置２４は、回路記述情報２６から構成情報１８を生成する。回路記述情報２６は、レジスタ転送レベル（Register transfer level, RTL）で抽象化した演算機能の仕様を、ハードウェア記述言語（ＨＤＬ）を用いて記述したものである。この例においては、回路記述情報２６は、検証回路２１に対応して記述された検証回路記述情報２６ａと、演算回路記述情報２６ｂとがあり、複数の演算回路Ｌ１〜Ｌ３（図２）に対しては１つの演算回路記述情報２６ｂを共通に使用している。なお、産業用アプリケーションとして使われているＦＢＤ（ファンクション ブロック ダイアグラム：Function Block Diagram）言語等を用いて記述され、抽象度をより高くした動作レベル（behavioral level）のハードウェア記述情報に高位合成を行って、レジスタ転送レベルの回路記述情報２６を生成してもよい。
【００３４】
構成情報生成装置２４は、論理合成手段２４ａ、合成パラメータ設定手段２４ｂ、結合手段２４ｃ、及びマッピング手段２４ｄを備えている。例えば、論理合成手段２４ａ、結合手段２４ｃ、及びマッピング手段２４ｄは、論理合成ツール等として知られているアプリケーションプログラムをコンピュータにインストールすることで実現される。合成パラメータ設定手段２４ｂは、論理合成ツールの論理合成に関する合成パラメータを変更するように構成されている。合成パラメータは、ＦＰＧＡ１０に演算回路Ｌ１〜Ｌ３を形成させる際の条件を指定するものであり、この合成パラメータにより回路ブロック９の組み合わせに関する条件を変えることができる。
【００３５】
論理合成手段２４ａは、回路記述情報２６からネットリストを生成する論理合成を行う。ネットリストは、回路ブロック９間を接続する配線等を記述したものである。合成パラメータ設定手段２４ｂは、論理合成手段２４ａが論理合成する際に、パラメータセットＰ０〜Ｐ３を設定する。パラメータセットＰ０は、検証回路２１について回路ブロック９の組み合わせが最適になるように設定された複数の合成パラメータを１セットにしたものである。このパラメータセットＰ０は、検証回路記述情報２６ａから検証回路２１のネットリストＮ０を生成する際に使用される。
【００３６】
また、パラメータセットＰ１〜Ｐ３は、いずれも演算回路記述情報２６ｂを回路ブロック９の組み合わせに具現化する際の複数の合成パラメータを１セットにしたものである。これらパラメータセットＰ１〜Ｐ３は、上述のように回路ブロック９の組み合わせが互いに異なる演算回路Ｌ１〜Ｌ３を、同一の演算回路記述情報２６ｂから生成されるようにするために、いくつかの合成パラメータの設定が異なったものになっている。
【００３７】
この例においては、パラメータセットＰ１〜Ｐ３は、ＤＳＰブロック１２の使用に関する合成パラメータ（以下、ＤＳＰパラメータという）と、データ保持メモリに関する合成パラメータ（以下、メモリパラメータという）とを含んでおり、これらの設定値の組み合わせが互いに異なるものになっている。
【００３８】
パラメータセットＰ１は、演算回路Ｌ１のネットリストＮ１を生成するためのものである。このパラメータセットＰ１のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値になっている。また、パラメータセットＰ１のメモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。パラメータセットＰ２は、演算回路Ｌ２のネットリストＮ２を生成するためのものである。このパラメータセットＰ２のＤＳＰパラメータは、ＤＳＰブロック１２を使用しない設定値であり、またメモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。さらに、パラメータセットＰ３は、演算回路Ｌ３のネットリストＮ３を生成するためのものである。このパラメータセットＰ３のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値であり、またメモリパラメータは、データ保持メモリとして分散ＲＡＭを使用する設定値になっている。
【００３９】
上記のように合成パラメータ設定手段２４ｂは、演算回路Ｌ１〜Ｌ３についての論理合成の際に、パラメータセットＰ１〜Ｐ３を論理合成手段２４ａに設定することによって、演算回路Ｌ１〜Ｌ３を形成する回路ブロック９（ＦＰＧＡのリソース）の組み合わせに関する条件を与え、演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせを互いに異なるものとして、演算回路Ｌ１〜Ｌ３に多様性を付与する。
【００４０】
論理合成手段２４ａは、合成パラメータセットＰ０の下で論理合成を行うことによって、検証回路記述情報２６ａからネットリストＮ０を生成する。また、論理合成手段２４ａは、合成パラメータセットＰ１〜Ｐ３の下で、演算回路記述情報２６ｂを用いた論理合成をそれぞれ行うことによって、ネットリストＮ１〜Ｎ３を生成する。
【００４１】
なお、演算回路Ｌ１〜Ｌ３は、回路ブロック９の組み合わせが互いに異なっているため、演算回路Ｌ１〜Ｌ３の相互間で、同じタイミングで入力データＸを入力しても、演算結果データＶ１〜Ｖ３の出力タイミングが異なる場合がある。このような場合には、検証回路２１に対する演算結果データＶ１〜Ｖ３の入力タイミングが同時になるように、例えば遅延回路を形成すればよい。
【００４２】
結合手段２４ｃは、論理合成手段２４ａから得られる４個のネットリストＮ０〜Ｎ３を１つのネットリストに結合する。この結合の際には、結合手段２４ｃによって、ネットリストＮ１〜Ｎ３に示される３組の出力端子を、ネットリストＮ０の３組の入力端子に接続したネットリストを生成する。
【００４３】
マッピング手段２４ｄは、結合手段２４ｃからのネットリストにしたがい、ネットリストに示される接続をＦＰＧＡ１０の回路ブロック９や入出力ピンに割り当てるいわゆるマッピング（配置配線）を行う。このマッピング手段２４ｄは、マッピングした情報を構成情報１８としてＦＰＧＡ１０の構成メモリ１６に出力する。構成情報１８には、検証回路２１を形成するための検証回路構成情報Ｃ０と、演算回路Ｌ１〜Ｌ３を形成するための演算回路構成情報Ｃ１〜Ｃ３とが含まれる。
【００４４】
次に上記構成の作用について説明する。まず、検証回路記述情報２６ａと、演算回路Ｌ１〜Ｌ３に共通な演算回路記述情報２６ｂとを用意し、これらに基づいて構成情報生成装置２４で構成情報１８を生成する。例えば、合成パラメータ設定手段２４ｂは、最初に論理合成手段２４ａにパラメータセットＰ０を設定する。この後に、論理合成手段２４ａは、検証回路記述情報２６ａを読み込み、パラメータセットＰ０の下で論理合成を行い、検証回路記述情報２６ａからネットリストＮ０を生成する。
【００４５】
ネットリストＮ０の生成後、合成パラメータ設定手段２４ｂは、論理合成手段２４ａにパラメータセットＰ１を設定する。この後、論理合成手段２４ａは、演算回路記述情報２６ｂを読み込み、パラメータセットＰ１の下で論理合成を行って、演算回路記述情報２６ｂからネットリストＮ１を生成する。このときに、パラメータセットＰ１のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値であり、メモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ１の下で、ＤＳＰブロック１２を最大限使用し、かつデータ保持メモリとしてブロックＲＡＭ１３を使用するする回路ブロック９の組み合わせのネットリストＮ１に変換される。
【００４６】
ネットリストＮ１の生成後、論理合成手段２４ａには、合成パラメータ設定手段２４ｂによってパラメータセットＰ２が設定される。この後、論理合成手段２４ａは、演算回路記述情報２６ｂを読み込み、パラメータセットＰ２の下で論理合成を行って、この演算回路記述情報２６ｂからネットリストＮ２を生成する。パラメータセットＰ２の場合は、ＤＳＰパラメータがＤＳＰブロック１２を使用しない設定値であり、メモリパラメータがデータ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ２の下で、ＤＳＰブロック１２を使用せず、かつデータ保持メモリとしてブロックＲＡＭ１３を使用する回路ブロック９の組み合わせのネットリストＮ２に変換される。
【００４７】
さらに、ネットリストＮ２の生成後、論理合成手段２４ａには、合成パラメータ設定手段２４ｂによってパラメータセットＰ３が設定される。この後、論理合成手段２４ａは、演算回路記述情報２６ｂが論理合成手段２４ａに読み込み、パラメータセットＰ３の下、演算回路記述情報２６ｂからネットリストＮ３を生成する。この場合には、ＤＳＰパラメータがＤＳＰブロック１２を最大限使用する設定値になっており、メモリパラメータがデータ保持メモリとして分散ＲＡＭを使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ３の下、ＤＳＰブロック１２を最大限使用し、かつデータ保持メモリとして分散ＲＡＭを使用する回路ブロック９の組み合わせのネットリストＮ３に変換される。
【００４８】
上記のようにして、ネットリストＮ０〜Ｎ３が生成されると、これらネットリストＮ０〜Ｎ３が、結合手段２４ｃで結合されて１つのネットリストにされる。続いて、結合手段２４ｃから得られるネットリストは、マッピング手段２４ｄによってマッピングされて、構成情報１８として出力される。
【００４９】
マッピング手段２４ｄからの構成情報１８は、ＦＰＧＡ１０の構成メモリ１６にロードされる。構成メモリ１６に構成情報１８がロードされると、ＦＰＧＡ１０には演算回路Ｌ１〜Ｌ３及び検証回路２１が形成される。演算回路Ｌ１〜Ｌ３は、同じ演算機能を有しているが、回路ブロック９の組み合わせが互いに異なっている。上述のように、演算回路Ｌ１、Ｌ３は、ＤＳＰブロック１２を最大限使用する回路ブロック９の組み合わせであるのに対し、演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９の組み合わせになっている。また、演算回路Ｌ１、Ｌ２は、データ保持メモリとして、ブロックＲＡＭ１３を使用するのに対して、演算回路Ｌ３は、データ保持メモリとして分散ＲＡＭを使用する回路ブロック９の組み合わせになっている。
【００５０】
上記のように、構成情報生成装置２４では、パラメータセットＰ１〜Ｐ３（合成パラメータ）が設定されるごとに、その合成パラメータの下で論理合成を行って、同一の演算回路記述情報２６ｂから演算回路Ｌ１〜Ｌ３に対応したネットリストＮ１〜Ｎ３を生成し、そのネットリストＮ１〜Ｎ３を用いて、演算回路構成情報Ｃ１〜Ｃ３を含む構成情報１８を生成する。これにより、演算機能の同一性を担保しつつ回路ブロック９の組み合わせが異なる複数の演算回路Ｌ１〜Ｌ３の構成情報１８を容易に生成することができ、またその構成情報１８を適用してＦＰＧＡ１０に演算機能が同一であり、かつ回路ブロック９の組み合わせ異なる演算回路Ｌ１〜Ｌ３を容易に形成できる。
【００５１】
上記のように演算回路Ｌ１〜Ｌ３及び検証回路２１が形成されたＦＰＧＡ１０では、入力データＸが入力されると、この入力データＸが演算回路Ｌ１〜Ｌ３にそれぞれ入力される。演算回路Ｌ１に入力データＸが入力されると、この演算回路Ｌ１は、入力データＸに対して演算を行い、その結果得られた演算結果データＶ１を検証回路２１に出力する。同様に、演算回路Ｌ２、Ｌ３は、入力データＸに対して演算をそれぞれ行い、その結果得られた各演算結果データＶ２、Ｖ３を検証回路２１に出力する。このときに、演算回路Ｌ１〜Ｌ３が行う演算は、いずれも演算回路記述情報２６ｂにより示される特定の演算機能を実現するものである。このようにして、ＦＰＧＡ１０では、１つの入力データＸに対して複数の演算結果データＶ１〜Ｖ３を生成し、これら演算結果データＶ１〜Ｖ３を検証回路２１に入力する。
【００５２】
検証回路２１は、上記のようにして演算結果データＶ１〜Ｖ３が入力されるごとに演算結果データＶ１〜Ｖ３を比較する。そして、検証回路２１は、演算結果データＶ１〜Ｖ３が全て一致している場合、そのうちのいずれか１つの演算結果データを出力データＹとしてシステムコントローラに出力する。また、検証回路２１は、演算結果データＶ１〜Ｖ３が出力データＹとの間で各ビットに相違がなく、同じデータであることを示す個別検証データＲ１〜Ｒ３を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲもシステムコントローラに出力する。
【００５３】
一方、演算結果データＶ１〜Ｖ３のうち２つだけが一致する場合、検証回路２１は、一致する２つの演算結果データの一方を出力データＹとしてシステムコントローラに出力する。例えば、演算結果データＶ１、Ｖ３が一致し、これらと演算結果データＶ２が一致しない場合には、演算結果データＶ１、Ｖ３のうちの一方が出力データＹとして検証回路２１からシステムコントローラに出力される。この際、検証回路２１は、演算結果データＶ１、Ｖ３が出力データＹと同じデータであることを示す個別検証データＲ１、Ｒ３を生成するとともに、演算結果データＶ２が出力データＹと相違し、相違するビット等を示す情報を有する個別検証データＲ２を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲをシステムコントローラに出力する。
【００５４】
なお、演算結果データＶ１〜Ｖ３の全てが一致しない場合、検証回路２１は、例えば規定値を出力データＹとしてシステムコントローラに出力する。また、この場合、検証回路２１は、演算結果データＶ１〜Ｖ３がいずれもが一致しないこと等を示す個別検証データＲ１〜Ｒ３を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲをシステムコントローラに出力する。
【００５５】
ところで、従来のＦＰＧＡでは、同じ演算機能を持ち、かつ同じ回路ブロックの組み合わせで構成された複数の演算回路を形成してエラー検証を行っているため、これら複数の演算回路に共通する温度変動や電圧変動、クロック変動の共通要因に起因して各演算回路にエラーが発生している場合、共通要因に対する各演算回路の動作状況が同じになってしまうので、各演算回路で発生するエラーの発生状態も同じものとなる。このため、従来のＦＰＧＡのエラー検証方法では、各演算回路が同じ演算結果データを生成することから、それら演算結果データが全て一致してしまい、エラーが発生したことを検知することが困難であった。
【００５６】
しかしながら、本実施形態のＦＰＧＡ１０では、上記のように演算回路Ｌ１〜Ｌ３が同じ演算機能を持つものの、演算回路Ｌ１〜Ｌ３を構成する回路ブロック９の組み合わせが互いに異なっていることから、共通要因に対する各演算回路Ｌ１〜Ｌ３の動作状況が異なり、各演算回路Ｌ１〜Ｌ３で発生するエラーの発生状態も異なるものとなる。これにより、ＦＰＧＡ１０では、例えば演算回路Ｌ１〜Ｌ３に共通する共通要因で何らかの理由でエラーが発生しているときでも、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成する可能性が低くなり、演算結果データＶ１〜Ｖ３が不一致になる可能性が非常に高くなる。したがって、ＦＰＧＡ１０では、演算結果データＶ１〜Ｖ３が不一致であるとの検証回路２１の判断結果を基にエラーを検知できる。
【００５７】
因みに、ＦＰＧＡ１０では、共通要因によって、上記のように全ての演算回路Ｌ１〜Ｌ３でエラーが発生することもあれば、演算回路Ｌ１〜Ｌ３を構成する回路ブロック９の組み合わせが互いに異なっていることから、演算回路Ｌ１〜Ｌ３のうちの１つまたは２つの演算回路でエラーが発生し、他の演算回路ではエラーが発生しないこともある。このような場合でも、ＦＰＧＡ１０では、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成することがないため、演算結果データＶ１〜Ｖ３の不一致が生じ、この結果を基に検証回路２１によってエラーを検知できる。
【００５８】
演算回路Ｌ１〜Ｌ３でエラーが生じる要因は様々であり、共通要因以外の要因によってもエラーが発生することもある。しかしながら、ＦＰＧＡ１０の演算回路Ｌ１〜Ｌ３は、上記のように回路ブロック９の組み合わせが互いに異なっていることから、各演算回路Ｌ１〜Ｌ３が同時にエラーを発生させたとしても、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成する可能性が低くなる。したがって、ＦＰＧＡ１０では、演算結果データＶ１〜Ｖ３が不一致であるとの検証回路２１の判断結果を基にエラーを検知できる。
【００５９】
以上のようにして、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが異なる多様性を有する複数の演算回路Ｌ１〜Ｌ３からの演算結果データＶ１〜Ｖ３に基づいたエラー検知率は、従来の同じ演算機能を持ち、かつ同じ回路ブロック９の組み合わせた複数の演算回路によって冗長性を持たせた場合よりも高くなる。
【００６０】
なお、上述した実施形態においては、３つの演算回路Ｌ１〜Ｌ３を形成した場合について述べたが、本発明はこれに限らず、少なくとも２つ以上の演算回路を形成できれば、その他種々の数の演算回路を形成するようにしてもよい。
【００６１】
また、上記に説明した複数の演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせが互いに異なるものとするための態様は、一例であり上記のものに限定されない。例えば演算回路が２個の場合には、上記の演算回路Ｌ１と演算回路Ｌ２との関係のように、ＤＳＰブロック１２の使用の有無だけが異なるようにしてもよい。また、複数の演算回路Ｌ１〜Ｌ３のそれぞれに使用されるＤＳＰブロック１２の個数や、演算回路Ｌ１〜Ｌ３を形成する回路ブロック９の全数に対するＤＳＰブロック１２の個数の比率が異なるようにしてもよい。ＤＳＰブロック１２に限らず、例えば乗算器等の特定のハードマクロの使用の有無、その個数や比率等が異なるようにしてもよい。
【００６２】
また、上記実施形態では、検証回路２１をＦＰＧＡ１０に形成しているが、ＦＰＧＡ１０に検証回路２１を形成せずに、ＦＰＧＡ１０からは各演算回路Ｌ１〜Ｌ３の演算結果データをそのまま外部の機器に出力するように構成してもよい。この場合、外部の機器において検証回路２１と同様な検証を行えばよい。検証回路２１において、出力データＹを決定する手法は一例である。例えば最も大きな値の演算結果データを出力データＹとしてもよい（高値選択）。逆に、小さな値の演算結果データを出力データＹとしてもよい（低値選択）。また、各演算結果データの平均値や中間値を出力データＹとしたり、一定数例えば過半数を超えた演算結果データの値を出力データＹとしたりしてもよい（条件付き多数決）。さらに、各演算結果データの値の分布を算出し、特定の偏差の範囲外を排除したうちの演算結果データから、高値選択、低値選択、平均値、中間値、多数決、条件付き多数決等を行ってもよい。また、出力データＹを決定する際に、上記手法を組み合わせてもよい。なお、条件付き多数決の場合に、一定数を超えた演算結果データがない場合には、規定値を出力データＹとして出力することができる。
【００６３】
また、各演算結果データの対応するビット同士で多数決、条件付き多数決等を行って、選択されたビット値を出力データＹのビットに割り当ててもよい。また、各演算結果データの対応するビット同士で多数決、条件付き多数決等を行って得られる基準ビット列を生成し、基準ビット列と各演算結果データのビット列の対応するビット同士を比較し、最も違いの少ない演算結果データを出力データＹとしてもよい。
【００６４】
［検証］
次に、本発明のＦＰＧＡ１０におけるエラーの検知率の向上について、ＦＰＧＡのシミュレーションツール（アプリケーションプログラム）により検証試験を行った。この検証試験では、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが互いに異なる２つの演算回路Ｌ１、Ｌ２をＦＰＧＡ１０に形成したＦＰＧＡについてのタイミングシミュレーションを検証例とし、得られた演算結果データＶ１、Ｖ２を基にエラーの検知率について検証した。
【００６５】
また、この検証例では、プラント制御装置に搭載され、ＩＥＣ−６１１３１に準拠した制御記述言語であるＦＢＤ言語で記述された乗算関数の動作記述情報を高位合成して、Verilog HDLによる演算回路記述情報を生成した。この生成した１つの演算回路記述情報を基に、異なる２セットのパラメータセットを用いて論理合成を行い、２つの演算回路Ｌ１、Ｌ２に対応するネットリストＮ１、Ｎ２をそれぞれ生成した。ネットリストＮ１、Ｎ２を１つのネットリストに結合し、そのネットリストを基にマッピングして構成情報１８を得た。検証例では、この構成情報１８と、シミュレートするＦＰＧＡ１０の伝搬遅延情報等とを用いて、シミュレーションツール上にてタイミングシミュレーションを行った。論理合成からマッピングまでの処理、及びタイミングシミュレーションは、ISE(登録商標)14.7（XilinX社製）を用いた。また、ＦＰＧＡ１０としては、XC7K325T-2(Kintex-7、Xilinx社製）を想定してタイミングシミュレーションを行った。
【００６６】
検証例における演算回路Ｌ１、Ｌ２が行う演算は、２つの入力値（整数）を乗算するものである。２つの入力値は、乱数で発生させ、これら２つの入力値を１つの入力データＸとして演算回路Ｌ１、Ｌ２にそれぞれ入力した。また、演算回路Ｌ１、Ｌ２から得られる演算結果データＶ１、Ｖ２は、それぞれ３２ビットとした。
【００６７】
ネットリストＮ１を生成する論理合成では、ＤＳＰブロック１２を最大限使用する設定値のＤＳＰパラメータを用い、ネットリストＮ２を生成する論理合成では、ＤＳＰブロック１２を使用しない設定値のＤＳＰパラメータを用いた。なお、ＤＳＰパラメータ以外の合成パラメータについては、特に設定を行わずにネットリストＮ１、Ｎ２を生成した。これにより、検証例の演算回路Ｌ１はＤＳＰブロック１２が最大限使用された回路構成とした。一方、検証例の演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９が組み合わされた回路構成とした。ここで、検証例とした演算回路Ｌ１、Ｌ２の回路ブロック９の使用状態を表１に示す。なお、表１には、別の検証例として、同じ合成パラメータの設定で演算回路Ｌ１、Ｌ２が比例積分演算を行うように構成した場合における回路ブロック９の使用状態を参考に示す。
【００６８】
【表１】
0005807887.tif 000002
【００６９】
表１の「PHYSICAL PARAMETER OF FPGA」の欄の各項目の意味は次の通りである。
[Slice Logic Utilization]
（１）Number of Slice Registers:スライス中の使用するレジスタの個数
（２）Number used as Flip Flops: （１）のレジスタのうちフリップフロップとして使用する個数
（３）Number of Slice LUTs:スライス中の使用するＬＵＴの個数
（４）Number used as logic:（３）のうち論理関数を実現するために使用したＬＵＴの個数（ＬＵＴは、Ｏ６出力とＯ５出力とを有する）
（５）Number using O6 output only:（４）のうちＯ６出力のみを使用したＬＵＴの個数（６）Number using O5 output only:（４）のうちＯ５出力のみを使用したＬＵＴの個数
（７）Number using O5 and O6:（４）のうちＯ６出力とＯ５出力の双方を使用したＬＵＴの個数
（８）Number used exclusive as route-thrus:（３）のうちルートスルーとして（入力をレジスタ等に接続する配線の目的ためだけに）使用するＬＵＴの個数
（９）Number with same-slice carry load：（８）のうちキャリー信号線（接続先が同一スライス内）とされるＬＵＴの個数
[Slice Logic Distribution]
（１０）Number of occupied Slices: 演算回路に使用したスライスの個数
（１１）Number of LUT Flip Flop pairs used:（１０）のスライスに含まれるＬＵＴとフリップフロップのペアのうち実際に使われた個数
（１２）Number with an unused Flip Flop:（１１）のペアのうちフリップフロップが使われない個数
（１３）Number with an unused LUT: （１１）のペアのうちＬＵＴが使われない個数
（１４）Number of fully used LUT-FF pairs: （１１）のペアのうちＬＵＴとフリップフロップの双方が使われた個数
[Specific Feature Utilization]
（１５）Number of DSP48E1s：ＤＳＰブロック１２の使用個数
（１６）Average Fanout of Non-Clock Nets：クロック以外の配線の平均ファンアウト（1本の信号線が平均何本に分岐しているか）
【００７０】
なお、「スライス」は、上述の基本構成ブロックを構成する基本回路であり、ＬＵＴとレジスタ（フリップフロップ）を基本要素とするものである。
【００７１】
検証試験では、現実の環境におけるエラーの発生状況が、ＦＰＧＡ１０の動作周波数が変動した状況に似ているものと仮定した。具体的には、温度変動や電圧変動の各回路ブロック９間における信号の伝搬遅延が発生する状態と同様な状態を、シミュレーション上でＦＰＧＡ１０の動作周波数を変化させることで発生させた。このため、検証例のタイミングシミュレーションでは、動作周波数を１６０ＭＨｚから２５８ＭＨｚまで２ＭＨｚずつ変化させ、各動作周波数において、演算回路Ｌ１、Ｌ２で乗算演算を実行した。
【００７２】
各々の動作周波数では、１００００個の入力データＸを入力し、演算回路Ｌ１、Ｌ２のそれぞれで１００００回の乗算演算を実行した。１個の入力データＸに対して演算回路Ｌ１、Ｌ２から出力される演算結果データＶ１、Ｖ２を、シミュレーションツールとは別のプログラムで取り込み、エラーの発生状況等を検証した。
【００７３】
上記の検証例におけるエラー発生率と動作周波数との関係を図４に示す。図４のグラフの横軸は、ＦＰＧＡ１０の動作周波数であり、縦軸は、エラー発生率である。入力データＸの１回の入力について、演算結果データＶ１、Ｖ２の少なくとも一方が誤った値となったときを１回としてエラー発生回数をカウントし、エラー発生率は、動作周波数ごとの入力データＸの入力回数（１万回）に対するエラー発生回数の割合（％）とした。演算結果データＶ１、Ｖ２が誤った値となっているか否かは、別途計算された真値と演算結果データＶ１、Ｖ２とを比較することによって判別した。
【００７４】
また、図５には、演算結果データＶ１、Ｖ２が不一致によるエラー検知率を示す。図５のグラフの横軸は、ＦＰＧＡ１０の動作周波数であり、縦軸は、エラー検知率である。入力データＸの１回の入力について、演算結果データＶ１、Ｖ２が不一致になったときを１回としてエラー検知回数をカウントし、エラー検知率は、動作周波数ごとの入力データＸの入力回数（１万回）に対するエラー検知回数の割合（％）とした。なお、図５では、後述する比較例１でエラーを検知した１７８ＭＨｚ以上の動作周波数での検証結果について示した。
【００７５】
さらに、図６には、演算結果データＶ１、Ｖ２の違いの距離（以下、不一致距離という）を示す。不一致距離（Ｄ）は、次の式（１）に示されるように、動作周波数ごとに、３２ビットで正規化したエラービットの合計を当該動作周波数におけるエラー検知回数で除したものであり、百分率で示される。この不一致距離は、演算結果データＶ１、Ｖ２の違いが大きいときにその値が大きくなる。
【００７６】
【数１】
0005807887.tif 000003
【００７７】
上記式（１）中の値Ｅ（i，ｆ）は、動作周波数ｆにおけるi番目の入力データＸについて、演算結果データＶ１、Ｖ２の間で不一致となるビット数である。また、Ｓ（ｆ）は、動作周波数ｆにおけるエラー検知回数である。
【００７８】
さらに、この検証試験では、検証例と比較するために、ＤＳＰブロック１２が最大限使用された演算回路Ｌ１を２個形成したＦＰＧＡについてのタイミングシミュレーションを比較例１とし、さらに、ＤＳＰブロック１２以外の回路ブロックを組み合わせた演算回路Ｌ２を２個形成したＦＰＧＡについてのタイミングシミュレーションを比較例２とした。これら比較例１および比較例２のＦＰＧＡにそれぞれ演算回路Ｌ１、Ｌ２を形成する各構成情報は、検証例と同様にしてそれぞれ生成した。そして、比較例１及び比較例２についても、検証例と同様にシミュレーションツール上にてタイミングシミュレーションを行った。それら比較例１及び比較例２の検証結果についても図４〜図６に併せて示す。
【００７９】
図４に示すように、ＤＳＰブロック１２を使用した演算回路Ｌ１を２個形成した比較例１では、１７６ＭＨｚよりも上の動作周波数で、エラー発生率がほぼ１００％になった。ＤＳＰブロック１２を使用しない演算回路Ｌ２を２個形成した比較例２では、動作周波数が２０４ＭＨｚからエラーが発生し、動作周波数の上昇とともにエラーの発生率が１００％に近づくように上昇した。このことから、エラーの発生状況は回路ブロック９の組み合わせによって互いに異なることがわかる。なお、本発明を適用した検証例では、１７８ＭＨｚよりも上の動作周波数でエラー発生率がほぼ１００％となり、比較例１と同様なエラーの発生状況となった。
【００８０】
上記から比較例１では、１７８ＭＨｚ以上の動作周波数のとき、２個の演算回路Ｌ１のうち少なくとも一方から出力された演算結果データが誤った値となっていることが分かる。しかしながら、図５に示されるように、比較例１では、１７８ＭＨｚ以上のいくつかの動作周波数でエラーを検知しているが、その他の動作周波数ではエラーを検知していない。この理由として、比較例１では、同じ回路ブロック９の組み合わせでなる２個の演算回路Ｌ１を用いていることから、２個の演算回路Ｌ１でそれぞれ同じエラーが発生してしまい、それぞれ出力される演算結果データが全く同じとなり、その結果、エラーとして検知できないためである。比較例２では、エラー検知率がほぼ１００％であるが、２１８ＭＨｚよりも上の動作周波数では、１〜２％程度のエラー検知率の低下が見られた。
【００８１】
これらに対して本発明による検証例のエラー検知率は、すべての動作周波数において１００％となった。すなわち、比較例１及び比較例２のように回路ブロック９の組み合わせが同じ複数の演算回路が冗長化した構成よりも、本発明の検証例のように、回路ブロック９の組み合わせが異なる複数の演算回路Ｌ１、Ｌ２、すなわち多様性を持った複数の演算回路を形成した構成とすることにより、一段と確実にエラーを検知でき、かくして、エラーの検知率が向上することが確認できた。また、図６に示すように、検証例における不一致距離は、比較例１及び比較例２よりも３倍以上大きいことが確認できた。すなわち、比較例１及び比較例２のように同じ回路構成を有する複数の演算回路によって冗長化した構成を形成するよりも、本発明の検証例のように、互いに回路ブロックの組み合わせが異なる多様性を持った複数の演算回路を形成するほうが、エラーの検知能力が高いことが示された。
【符号の説明】
【００８２】
１０  ＦＰＧＡ（プログラマブルロジックデバイス）
１１  基本論理ブロック
１２  ＤＳＰブロック
２１  検証回路
Ｌ１〜Ｌ３  演算回路
【要約】
【課題】プログラマブルロジックデバイスにおけるエラー検知率を向上させる。
【解決手段】ＦＰＧＡ１０の構成メモリに構成情報をロードすることによって、演算回路Ｌ１〜Ｌ３と検証回路２１とを形成する。演算回路Ｌ１〜Ｌ３は、同じ演算機能を有しているが、回路ブロックの組み合わせが互いに異なっている。演算回路Ｌ１、Ｌ３は、ＤＳＰブロックを最大限使用する回路ブロックの組み合わせであり、演算回路Ｌ２は、ＤＳＰブロック以外の回路ブロックの組み合わせになっている。また、演算回路Ｌ１、Ｌ２は、データ保持メモリとして、ブロックＲＡＭを使用し、演算回路Ｌ３は、データ保持メモリとして分散ＲＡＭを使用する。各演算回路Ｌ１〜Ｌ３は、入力データＸがそれぞれ入力され、演算結果データＶ１〜Ｖ３を出力する。検証回路２１は、演算結果データＶ１〜Ｖ３を比較してエラーの有無を検証する。
【選択図】図２【図１】
0005807887.tif 000004
【図２】
0005807887.tif 000005
【図３】
0005807887.tif 000006
【図４】
0005807887.tif 000007
【図５】
0005807887.tif 000008
【図６】
0005807887.tif 000009