【事件の表示】
　特許第５８０７８８７号発明「プログラマブルロジックデバイスのエラー検証方法，及びプログラマブルロジックデバイスの回路形成方法」の特許異議申立事件について，次のとおり決定する。
【結　論】
　特許第５８０７８８７号の明細書，特許請求の範囲を訂正請求書に添付された訂正明細書，特許請求の範囲のとおり，訂正後の請求項［１−３］及び［４，５］について訂正することを認める。
　特許第５８０７８８７号の請求項１ないし３に係る特許についての特許異議の申立てを却下する。
　特許第５８０７８８７号の請求項４ないし６に係る特許を維持する。
【理　由】
第１　手続の経緯
　特許第５８３３７９９号の請求項１ないし６に係る特許についての出願は，平成２７年５月７日に特許出願され，平成２７年９月１８日にその特許権の設定登録がされ，その後，その特許について，特許異議申立人　石橋　智子により特許異議の申立てがされ，平成２８年６月２０日付けで取消理由が通知され，その指定期間内である平成２８年８月２３日に意見書の提出及び訂正得の請求があり，その訂正の請求に対して特許異議申立人　石橋　智子から平成２８年１０月５日に意見書が提出されたものである。
第２　訂正の適否についての判断
１．訂正の内容
　本件訂正請求による訂正の内容は，以下の（１）（［訂正事項１］ないし［訂正事項６］）及び（２）（［訂正事項７］及び［訂正事項８］）のとおりである。
（１）請求項１ないし３からなる一群の請求項に係る訂正
［訂正事項１］
　特許請求の範囲の請求項１を削除する。
［訂正事項２］
　特許請求の範囲の請求項２を削除する。
［訂正事項３］
　特許請求の範囲の請求項３を削除する。
［訂正事項４］
　明細書の【発明の名称】，段落【０００１】，及び【０００９】にそれぞれ「プログラマブルロジックデバイス，プログラマブルロジックデバイスのエラー検証方法，及びプログラマブルロジックデバイスの回路形成方法」と記載されているのを，「プログラマブルロジックデバイスのエラー検証方法，及びプログラマブルロジックデバイスの回路形成方法」に訂正する。
［訂正事項５］
　明細書の段落【００１０】を削除する。
［訂正事項６］
　明細書の段落【００１３】に「本発明のプログラマブルロジックデバイス，及びそのエラー検証方法によれば」と記載されているのを，「本発明のプログラマブルロジックデバイスのエラー検証方法によれば」に訂正する。
（２）請求項４及び５からなる一群の請求項に係る訂正
［訂正事項７］
　特許請求の範囲の請求項４に「同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路を形成する回路形成ステップ」と記載されているのを，「
ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した，
前記
，
　請求項４の記載を引用する請求項５についても同様に訂正する。
［訂正事項８］
　明細書の段落【００１１】に「また，本発明は，複数の回路ブロックの組み合わせを変えることにより・・・，同じ演算機能を持ち，かつ回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路を形成する回路形成ステップ」と記載されているのを，「本発明は，複数の回路ブロックの組み合わせを変えることにより・・・，
ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，複数のネットリストに対応した，
，
２．訂正の目的の適否，一群の請求項，新規事項の有無，及び特許請求の範囲の拡張・変更の存否
（１）訂正事項１ないし３について
　訂正事項１ないし３は，特許請求の範囲の減縮を目的とするものであって，新規事項の追加に該当せず，一群の請求項ごとに請求された訂正であり，実質上特許請求の範囲を拡張し，又は変更するものではない。
（２）訂正事項４ないし６について
　訂正事項４ないし６は，前記訂正事項１ないし３に係る訂正にともない，特許請求の範囲と明細書（発明の名称を含む。）との整合性を図るための訂正であるから，明瞭でない記載の釈明を目的とするものであって，新規事項の追加に該当せず，実質上特許請求の範囲を拡張し，又は変更するものではない。
（３）訂正事項７について
　訂正事項７に関連する「ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した，同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路を，形成する回路形成ステップ」の具体例として，
　明細書の段落【００２３】には，「演算回路Ｌ１〜Ｌ３は，同じ演算機能を持つが，エラー検知率を向上させるために，回路ブロック９の組み合わせを互いに異なるものにしている。すなわち，演算回路Ｌ１〜Ｌ３は，使用する回路ブロック９の種類や数，回路ブロック９内でのＬＵＴやレジスタの使われ方，これら回路ブロック９の接続状態が演算回路Ｌ１〜Ｌ３では互いに異なったものになっているが，演算回路Ｌ１〜Ｌ３にエラーが発生しない状態では，演算回路Ｌ１〜Ｌ３は，同一の入力データＸの入力に応答して同じ演算結果データＶ１〜Ｖ３を出力するよう構成されている。」と記載され，
　明細書の段落【００３３】には，「回路記述情報２６は，レジスタ転送レベル（Register transfer level, RTL）で抽象化した演算機能の仕様を，ハードウェア記述言語（ＨＤＬ）を用いて記述したものである。」と記載され，
　明細書の段落【００３４】には，「合成パラメータは，ＦＰＧＡ１０に演算回路Ｌ１〜Ｌ３を形成させる際の条件を指定するものであり，この合成パラメータにより回路ブロック９の組み合わせに関する条件を変えることができる。」と記載され，
　明細書の段落【００４９】には，「マッピング手段２４ｄからの構成情報１８は，ＦＰＧＡ１０の構成メモリ１６にロードされる。構成メモリ１６に構成情報１８がロードされると，ＦＰＧＡ１０には演算回路Ｌ１〜Ｌ３及び検証回路２１が形成される。演算回路Ｌ１〜Ｌ３は，同じ演算機能を有しているが，回路ブロック９の組み合わせが互いに異なっている。」と記載され，
　明細書の段落【００５０】には，「構成情報生成装置２４では，パラメータセットＰ１〜Ｐ３（合成パラメータ）が設定されるごとに，その合成パラメータの下で論理合成を行って，同一の演算回路記述情報２６ｂから演算回路Ｌ１〜Ｌ３に対応したネットリストＮ１〜Ｎ３を生成し，そのネットリストＮ１〜Ｎ３を用いて，演算回路構成情報Ｃ１〜Ｃ３を含む構成情報１８を生成する。これにより，演算機能の同一性を担保しつつ回路ブロック９の組み合わせが異なる複数の演算回路Ｌ１〜Ｌ３の構成情報１８を容易に生成することができ，またその構成情報１８を適用してＦＰＧＡ１０に演算機能が同一であり，かつ回路ブロック９の組み合わせ異なる演算回路Ｌ１〜Ｌ３を容易に形成できる。」と記載され，
　これらの記載から，明細書には，「ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した，同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路を，形成する回路形成ステップ」が記載されていることが明らかである。
　そうすると，訂正事項７は，明細書に記載された事項の範囲内において，「回路形成ステップ」を限定したものといえるから，特許請求の範囲の減縮を目的とするものであって，新規事項の追加に該当せず，また，実質上特許請求の範囲を拡張し，又は変更するものでもない。
　そして，これら訂正は，一群の請求項に対して請求されたものである。
（４）訂正事項８について
　訂正事項８は，前記訂正事項７に係る訂正にともない，特許請求の範囲と明細書との整合性を図るための訂正であるから，明瞭でない記載の釈明を目的とするものであって，新規事項の追加に該当せず，実質上特許請求の範囲を拡張し，又は変更するものではない。
（５）小括
　以上のとおりであるから，本件訂正請求による訂正事項１ないし３及び７は，特許法第１２０条の５第２項第１号に掲げる事項を目的とするものであり，訂正事項４ないし６及び８は，同法同条同項第３号に掲げる事項を目的とするものであって，かつ，訂正事項１ないし８は，同条第４項及び同条第９項において準用する同法第１２６条第４項ないし第６項の規定に適合するので，訂正後の請求項［１−３］及び［４，５］について訂正を認める。
第３　特許異議の申立てについて
１．本件発明
　本件訂正請求により訂正された訂正請求項４ないし６に係る発明（以下，それぞれ，「本件発明４」，「本件発明５」及び「本件発明６」という。）は，その特許請求の範囲の請求項４ないし６に記載された次の事項により特定されるとおりのものと認める。
［本件発明４］
「　複数の回路ブロックの組み合わせを変えることにより，演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において，
　ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した，同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路を，形成する回路形成ステップと，
　各前記演算回路でそれぞれ演算を行う演算ステップと，
　各前記演算回路からの演算結果を検証回路で検証する検証ステップと
　を有することを特徴とするプログラマブルロジックデバイスのエラー検証方法。」
［本件発明５］
「　前記回路形成ステップは，
　前記回路ブロックとしてＤＳＰブロックを含んだ前記回路ブロックの組み合わせでなる前記演算回路を少なくとも１つ形成するとともに，前記ＤＳＰブロック以外の前記回路ブロックの組み合わせでなる他の前記演算回路を少なくとも１つ形成することを特徴とする請求項４に記載のプログラマブルロジックデバイスのエラー検証方法。」
［本件発明６］
「　構成情報にしたがって複数の回路ブロックの組み合わせを変えることにより，演算機能が変更可能なプログラマブルロジックデバイスの回路形成方法において，
　前記回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと，
　前記合成パラメータ設定ステップで前記合成パラメータが設定されるごとに，前記合成パラメータの下で論理合成を行い，ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップと，
　前記複数のネットリストから前記構成情報を生成する構成情報生成ステップと，
　前記構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なって接続状態が異なり，それぞれ演算結果を検証回路に出力して検証させる複数の演算回路を前記プログラマブルロジックデバイスに形成する形成ステップと
　を有することを特徴とするプログラマブルロジックデバイスの回路形成方法。」
２．取消理由の概要
　訂正前の請求項１ないし５に係る特許に対して平成２８年６月２９日付けで特許権者に通知した取消理由の要旨は，次のとおりである。
（１）請求項１ないし５に係る発明は，甲第２号証に記載された発明であるから，特許法第２９条第１項第３号に該当し，特許を受けることができないものであるから，請求項１ないし５に係る特許は，取り消されるべきものである。
（２）請求項１ないし５に係る発明は，甲第２号証に記載された発明に基づいて当業者が容易に発明することができたものであり，特許法第２９条第２項の規定により特許を受けることができないものであるから，請求項１ないし５に係る特許は，取り消されるべきものである。
３．甲号証の記載
　甲第２号証（Lucas, A., et al., Evaluating the Effectiveness of a Diversity TMR Scheme under Neutrons, 2013 14th European Conference on Radiation and Its Effects on Components and Systems(RADECS), ２０１３年，インターネット＜URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=arnumber=6937382＞）には，「Evaluating the Effectiveness of a Diversity TMR Scheme under Neutrons」（中性子影響下での多様性ＴＭＲスキームの有効性評価）に関して次の記載がある。
ア　「 Abstract-This paper explores the concept of Design Diversity Redundancy (DDR) applied to SRAM-based FPGAs as a proposal to increase system reliability. Three different implementations of an 8×8 matrix multiplication associated to majority voters were used to build a Diversity Triple Modular Redundancy (DTMR) scheme. The whole architecture was prototyped on a Xilinx Virtex5 FPGA and exposed to a neutron source for approximately 21 hours in order to investigate the occurrence of Single Event Effects. In addition, a fault injection campaign was performed in order to compare simulation and experimental data. Results indicate the ability of the system to tolerate faults. 」（１ページ目左段第１〜１２行）
（［当審仮訳］
　要約−本稿では，システム信頼性の向上策として，ＳＲＡＭベースのＦＰＧＡに適用される設計多様性冗長系のコンセプトについて検討する。多数決回路に接続される，８×８行列乗算の３つの異なる実装を用いて，多様性三重モジュラー冗長系（ＤＴＭＲ）スキームを構成した。アーキテクチャ全体を，Ｘｉｌｉｎｘ社のＶｅｒｔｅｘ５　ＦＰＧＡ上でプロトタイプとして作成し，シングルイベント効果の発生を調査するために，約２１時間の間，中性子源に暴露した。さらに，シミュレーションと実験データとを比較するために，故障注入法を実行した。その結果として，システムの故障に対する耐性が示された。）
イ　「Usually, the techniques employed to deal with SEEs are based on hardware or time redundancy [1]. A very successful example is the Triple Modular Redundancy (TMR). In TMR, the original circuit is triplicated, by adding two extra copies of the original circuit. The three copies of the TMR approach operate in parallel and the output of these copies are delivered to a majority voter. If an error happens in one of the copies, two of them will continue to operate properly and the majority voter can correctly mask the output of the faulty module [1]. It is important mention that TMR cannot correct an error, but mask its incorrect value voting two matching values out of three.」（第１ページ右段第６〜１７行）
（［当審仮訳］
　通常，ＳＥＥ（シングルイベント効果）対策として採用される技術は，ハードウェア又は時間の冗長化[1]によるものである。非常に成功している例として，三重モジュラー冗長系（ＴＭＲ）がある。ＴＭＲでは，オリジナル回路の２つの複製を付加することにより，オリジナル回路が３重化されている。ＴＭＲアプローチにおける３つの複製は，並行して動作し，これら複製の出力は多数決回路に出力される。複製の１つにエラーが発生し，複製の２つが正常に動作を継続すると，多数決回路は，故障したモジュールの出力を正確にマスクすることができる[1]。ＴＭＲはエラーを訂正することはできないが，３つの中から２つの一致する値をもって評決することにより誤った値をマスクする，ということが重要である。）
　
ウ　「II. DTMR Concept and Related Works
The Design Diversity Redundancy (DDR) was first proposed by Elmendorf[6] under the name of N-Version Programming, with the objective of protecting redundant software-based applications against CMFs. Later, Avizienis and Kelly[2] extended the definition of DDR to hardware-based projects.
In DDR, several functionally identical copies of the same system are developed using different algorithms, architectures and technologies. A DTMR system is designed through the association of three diversified copies to a majority voter. Fig.1 illustrates an example of a DMTR system.
Fig.1 Example of a DTMR architecture」（２ページ目左段第１２−２３行，Ｆｉｇ．１）
（［当審仮訳］
ＩＩ．ＤＴＭＲのコンセプト及び関連研究
　設計多様性冗長系（ＤＤＲ）は，ソフトウェアベースの冗長化アプリケーションをＣＭＦ（コモンモード故障）から保護する目的で，「Ｎバージョンプログラミング」という名称により，Elmendorf[6]により初めて提案された。その後，AvizienisとKelly[2]が，ＤＤＲの定義をハードウェアベースのプロジェクトに拡張した。
　ＤＤＲでは，同一システムにおける機能的には同一である複数の複製が，異なるアルゴリズム，アーキテクチャ及び技術を用いて作成される。ＤＴＭＲシステムは，３つの多様化された複製を，多数決回路に接続することにより設計される。図１は，ＤＴＭＲシステムの例を示す。
（…図面省略…）
図１　ＤＴＭＲアーキテクチャの例）
　
エ　「III. Proposed DTMR Case-Study
The case-study circuit implements an 8×8 matrix multiplication operation. The three TMR copies perform the same function, but are implemented in three different architectures: (1) pipelined Finite State Machine (FSM) version, (2) a totally combinational version, and (3) a software-based version embedded in a miniMIPS soft-core. The majority voters are asynchronous and implemented in hardware. A controller interface was developed in order to perform data acquisition, fault detection and data transmission. Fig. 2 illustrates the schematic of the DTMR architecture implemented, showing the three matrix multiplication versions - FSM (1), Combinational (2) and miniMIPS (3), registers to store the results from the modules - Reg -, the majority voters - Voter -, and the Controller Interface. 
Fig.2 Schematic of the DTMR architecture implemented.」（２ページ目右段第１−１５行，Ｆｉｇ．２）
（［当審仮訳］
ＩＩＩ．　提案するＤＴＭＲケーススタディ
　ケーススタディの回路は，８×８行列乗算動作を実行する。３つのＴＭＲの複製は，同一の機能を実行するが，異なるアーキテクチャにより実装され，具体的には，（１）パイプライン型有限状態機械（ＦＳＭ）バージョン，（２）完全組み合わせバージョン，及び，（３）ミニＭＩＰＳソフトコアに埋め込まれるソフトウェアベースのバージョン，である。多数決回路は，非同期式で，ハードウェアで実装される。制御インタフェースは，データ取得，故障検知，及び，データ伝送のために開発された。図２は，実装されるＤＴＭＲアーキテクチャの概略図であり，３つの行列乗算バージョン，つまり，ＦＳＭ（１），組み合わせ（２）及びミニＭＩＰＳと，モジュールからの結果を格納するレジスタＲｅｇと，多数決回路Ｖｏｔｅｒと，制御インタフェースを示す。
（…図面省略…）
図２　実装されるＤＴＭＲアーキテクチャの概略図）
 
オ　「The whole system is prototyped in a Virtex5 FPGA, part XC5VLX110T, from Xilinx [5]. This device consists in a SRAM-based FPGA built on a 65-nm process and has a nominal core voltage of 1.0 V. Beyond the tradicional programmable Look-Up Tables (LUTs), this device also has dedicated Digital Signal Processing (DSP) blocks, model DSP48E [5].
In details the three matrix multiplications are implemented as follows:
A. Software-Based Version
The software version was embedded in a soft-core miniMIPS [12], based on the MIPS architecture. The application was developed in C programming language and it was used the gcc 2.3 cross-compiler to compile it into the miniMIPS' machine language.
The microprocessor runs at 25 MHz and the application takes 232 μs to perform the multiplication operation. This version occupies 7.4% of the slices available in the Virtex5 FPGA. 6.25% of the DPS blocks were also used.
B. Combinational Version
The combinational version was described in VHDL and runs at 25 MHz. The operation takes 255 ns to be completed. This version occupies 15.94% of the slices available in the Virtex5 FPGA. 
 C. FSM Version 
 The FSM version was also implemented in VHDL and consists in a 4-stage pipelined finite state machine. This version also runs at 25 MHz. The operation takes 20.8 μs to be performed. This version occupies 2.3% of the slices available in the Virtex5 FPGA.
The majority voters were described in VHDL and consists in the equation:
voted result = (result0 AND result1) or (result0 AND result2) or (result1 AND result2) (2)」（２ページ目右段下から６行目−３ページ目左段３１行）
（［当審仮訳］
　システム全体は，Ｘｉｌｉｎｘ社[5]のＶｉｒｔｅｘ５　ＦＰＧＡのパートＸＣ５ＶＬＸ１１０Ｔによりプロトタイプとして製作される。このデバイスは，６５−ｎｍプロセス上で構築されるＳＲＡＭベースのＦＰＧＡであり，名目コア電圧は１．０Ｖである。従来のプログラム可能なルックアップテーブル（ＬＵＴｓ）だけでなく，このデバイスは，ディジタル信号処理（ＤＳＰ）ブロックとしてモデルＤＳＰ４８Ｅ[5]を備える。
　詳細には，３つの行列乗算は次のように実装される：
Ａ．ソフトウェアベースバージョン
　ソフトウェアバージョンは，ＭＩＰＳアーキテクチャに基づいて，ソフトコアであるミニＭＩＰＳ[12]に埋め込まれる。アプリケーションは，Ｃ言語により作成され，ｇｃｃ２．３クロスコンパイラによりミニＭＩＰＳの機械語にコンパイルされた。
　マイクロプロセッサは，２５ＭＨｚで作動し，アプリケーションは，２３２マイクロ秒で乗算動作を実行する。このバージョンは，Ｖｉｒｔｅｘ５　ＦＰＧＡにおいて利用可能なスライスの７．４％を使用し，ＤＳＰブロックの６．２５％も使用する。
Ｂ．組み合わせバージョン
　組み合わせバージョンは，ＶＨＤＬにより記述され，２５ＭＨｚで作動する。動作完了には２５５ナノ秒を要する。このバージョンは，Ｖｉｒｔｅｘ５　ＦＰＧＡにおいて利用可能なスライスの１５．９４％を使用する。
Ｃ．ＦＳＭバージョン
　ＦＳＭバージョンも，ＶＨＤＬにより実装され，４段のパイプライン型の有限状態機械である。このバージョンも２５ＭＨｚで作動する。動作完了には２０．８マイクロ秒を要する。このバージョンは，Ｖｉｒｔｅｘ５　ＦＰＧＡにおいて利用可能なスライスの２．３％を使用する。
　多数決回路は，ＶＨＤＬで記述され，以下の数式からなる：（…数式省略…））
　
　以下，前記アないしオの摘記事項並びにこの分野における技術常識を考慮しつつ，甲第２号証に記載された技術事項について検討する。
 （ア）前記ア，ウ，エより，甲第２号証には，「ＤＴＭＲシステム」が記載されており，前記オより，当該「ＤＴＭＲシステム」の全体は，Ｘｉｌｉｎｘ社のＶｉｒｔｅｘ５　ＦＰＧＡのパートＸＣ５ＶＬＸ１１０Ｔ，すなわちＦＰＧＡ上に実装されている。
　また，ＦＰＧＡにおいて，ブロック（「スライス」とも称されるもの）の種類，数，配置，接続関係等，ブロックの組み合わせを変えることにより，演算機能が変更可能であることは，本件特許の出願日における技術常識である。
　してみれば，甲第２号証には，「複数のブロックの組み合わせを変えることにより，演算機能が変更可能なＦＰＧＡ」が記載されているといえる。
（イ）前記ウより，甲第２号証に記載の「ＤＴＭＲシステム」は，機能的には同一であるが，異なるアーキテクチャを有する３つの複製と，多数決回路からなっている。また，前記エより，複製の例として，行列乗算動作を行う回路，すなわち，演算回路が記載されている。さらに，前記オより，３つの複製すなわち３つの演算回路のうち，ソフトウェアベースバージョンは，Ｖｉｒｔｅｘ５のスライス（ブロック）とＤＳＰブロックとの組み合わせで構成され，残りの組み合わせバージョンとＦＳＭバージョンとは，Ｖｉｒｔｅｘ５のスライス（ブロック）のみの組み合わせで構成されている。
　そうすると，甲第２号証には，「同じ演算機能を持ち，かつ，ブロックの組み合わせが異なる３つの演算回路が形成」されることが記載されているといえる。
　
（ウ）前記アないしエ（特にエ）より，３つの演算回路は，それぞれの演算結果を多数決回路に出力し，多数決回路は，誤った演算結果をマスクして正しい演算結果を出力している。
　そうすると，甲第２号証には，「３つの演算回路は，それぞれの演算結果を多数決回路に出力し，多数決回路は，誤った演算結果をマスクして正しい演算結果を出力すること」が記載されているといえる。
（エ）前記オより，ＤＴＭＲシステムの３つの演算回路及び多数決回路は，プログラミング言語であるＣ言語又はハードウェア記述言語であるＶＨＤＬにより実装されることを把握することができる。そして，演算を行う前に，演算回路を実装，すなわち，演算回路を形成しなければならないことは自明である。
　そして，前記（ア）ないし（ウ）での検討を踏まえると，甲第２号証には，３つの演算回路の演算結果の検証を行う方法，すなわち，「検証方法」が記載されているといえる。
　したがって，上記（ア）ないし（エ）より，甲第２号証には，以下の発明（以下，「引用発明」という。）が記載されているものと認める。
「　複数のブロックの組み合わせを変えることにより，演算機能が変更可能なＦＰＧＡにおける検証方法において，
　同じ演算機能を持ち，かつ，ブロックの組み合わせが異なる３つの演算回路が形成されること，
　３つの演算回路は，それぞれの演算結果を多数決回路に出力し，多数決回路は，誤った演算結果をマスクして正しい演算結果を出力することを特徴とするＦＰＧＡの検証方法。」
４．判断
（１）特許法第２９条第１項第３号及び同法同条第２項について
　本件発明４と引用発明とを対比する。
　引用発明の「ＦＰＧＡ」は，構成情報（プログラム）に基づいて再構成可能なデバイスの一種であることは本願の出願時における技術常識であり，かつ，明細書の段落【００１６】に「本実施形態では，プログラマブルロジックデバイス（ＰＬＤ）の一例として，一般的なＦＰＧＡ１０に本発明を適用した場合について説明する。」と記載されていることからしても，本件発明４の「プログラマブルロジックデバイス」に含まれるものである。また，引用発明の「ブロック」は，ハードウェアである「ＦＰＧＡ」を構成する回路であることは自明であるから，本件発明４の「回路ブロック」に相当する。そうすると，引用発明の「複数のブロックの組み合わせを変えることにより，演算機能が変更可能なＦＰＧＡ」は，本件発明４の「複数の回路ブロックの組み合わせを変えることにより，演算機能が変更可能なプログラマブルロジックデバイス」に相当する。
　引用発明の「検証方法」は，３つの演算回路から出力される演算結果を検証するものであり，演算結果のエラーの有無を検証することと等しいから，本件発明４の「エラー検証方法」に相当する。
　引用発明の「３つの演算回路」は，本件発明４の「複数の演算回路」に含まれるものである。また，引用発明において，ブロックの組み合わせが異なれば，接続状態，すなわち，ブロック間の接続の状態が何らかの形で異なることは自明である。また，引用発明の「演算回路が形成される」は，本件発明４の「演算回路を，形成する回路形成ステップ」といい得るものである。
　よって，引用発明の「同じ演算機能を持ち，かつ，ブロックの組み合わせが異なる３つの演算回路が形成される」ことは，後述する相違点を除いて，本件発明４の「同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路を，形成する回路形成ステップ」に相当する。
　引用発明において，３つの演算回路は，それぞれが演算を行うことによりそれぞれの演算結果を多数決回路に出力していることは自明である。また，引用発明において，「多数決回路」は，３つの演算回路が出力する演算結果のうち，誤った演算結果をマスクして正しい演算結果を出力しているから，全体としてみれば，３つの演算回路が出力する演算結果のうちどれが正しいかを検証するものであり，本件発明４の「検証回路」に相当する。
　よって，引用発明の「３つの演算回路は，それぞれの演算結果を多数決回路に出力し，多数決回路は，誤った演算結果をマスクして正しい演算結果を出力する」は，本件発明４の「各前記演算回路でそれぞれ演算を行う演算ステップと，各前記演算回路からの演算結果を検証回路で検証する検証ステップ」に相当する。
　以上より，本件発明４と引用発明とは，以下の点で一致ないし相違する。
［一致点］
「　複数の回路ブロックの組み合わせを変えることにより，演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において，
　同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路を，形成する回路形成ステップと，
　各前記演算回路でそれぞれ演算を行う演算ステップと，
　各前記演算回路からの演算結果を検証回路で検証する検証ステップと
　を有することを特徴とするプログラマブルロジックデバイスのエラー検証方法。」
［相違点］
　本件発明４は，「複数の演算回路」が，「ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した」ものとなるように形成されるのに対し，引用発明においては，どのように形成されるのかについて具体的に特定していない点。
　そして，上記相違点は，本願の出願時における技術常識を参酌しても，当業者にとって自明ないし容易に想到し得るものではなく，当該相違点に係る事項により，本件発明４は，同一の演算回路記述情報から，回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路を確実に形成することができるという顕著な効果を奏するものといえる。
　よって，本件発明４は，引用発明と同一ではなく，また，引用発明に基づいて当業者が容易に発明をすることができたものではない。
　本件発明４の技術的特徴をすべて有する本件発明５についても同様である。
（２）特許異議申立人の意見について
　特許異議申立人　石橋　智子は，平成２８年１０月５日付けの意見書において，
ア　「訂正後の請求項４に係る発明は，例えば，複数の演算回路が対応する各々の合成パラメータと共に記述された回路全体の演算回路記述情報に対して１度だけ論理合成行う，といった段落【００５０】に記載の効果を奏することができない実施形態が含まれます。」と主張し，本件発明４は，特許法第３６条第６項第１号に規定する要件を満たしておらず，取り消されるべきである旨，及び，
イ　本件発明４は，甲第２号証及び甲第３号証に記載の発明により当業者が容易に発明をすることができたものであるから，特許法第２９条第２項の規定により取り消されるべきものである旨，
主張する。
（ア）主張アについて
　本願の課題は，明細書の段落【０００６】及び【０００８】に記載されているように，「同じ種類の回路ブロックを組み合わせて同じ演算処理を行う複数の演算回路」は，ＦＰＧＡ全体で共通する要因が起因したエラーが生じた場合には，エラーの発生を検知することができない場合がある，ということであり，その課題を解決する手段は，明細書の段落【００１０】に記載されているように，「複数の回路ブロックの組み合わせを変えること」である。
　そして，訂正後の請求項４に係る発明が，明細書の段落【００２３】，【００３３】，【００３４】，【００４９】及び【００５０】等に記載した事項を上位概念化したものであって，上記の課題は解決できることは明らかである。よって，訂正後の請求項４に係る発明が，発明の詳細な説明に記載したものではないということはできない。
　よって，前記主張アは，採用することができない。
（イ）主張イについて
　甲第３号証（中村一博，高木一義，「ＥＤＡツールを用いた論理回路設計」，名古屋大学工学部情報工学コース　学生実験用指導書（２０１２年度・第３．１０版，２０１２年８月２９日［最終更新日」）には，次の記載がある。
カ　「１．３．３　論理合成
　ハードウェア記述言語で記述した機能を，記憶素子や論理ゲート等の回路素子に置き換え，機能レベルの記述からゲートレベルの記述に変換する。
　出力であるゲートレベルの記述は，ネットリストと呼ばれる。論理回路図と等価なテキスト表現であり，実際のゲート等の部品間の接続を記述したものである。
（…中略…）
　論理合成においては，回路全体の面積，動作速度，消費電力などのパラメータを設計者がきめ細やかに指定できる。条件を変えて合成することにより，要求を満たす回路が実現可能かどうかを模索する工程が繰り返される。例えば，回路面積の上限を制約条件として，動作速度を最適化するなどの指定をするのが一般的である。（以下省略）」（第３ページ）
キ　「１．３．７　ＦＰＧＡを用いたプロトタイピング
　（…中略…）
　ＦＰＧＡは，設計者がその場でプログラムすることが可能な論理素子であり，多くのものは機能の書き換えを何度も行うことができる。ＦＰＧＡは，機能を書き換え可能な論理ブロックと，組み換え可能な論理ブロック間の配線から成る。ＦＰＧＡ向けの回路設計では，ＬＳＩの設計と同様，ハードウェア記述言語やネットリストを入力とし，各社のＦＰＧＡそれぞれに専用のマッピングツールを用いて回路がＦＰＧＡの構成データに変換される。（以下省略）」（第４ページ）
ク　「３．３　論理合成径Ｄｅｓｉｇｎ　Ｃｏｍｐｉｌｅｒによる論理合成
（…中略…）
３．制約条件の指定　回路の遅延時間や面積（回路規模）の制約を与える。（以下省略）」
ケ　「１．コンパイル　端末上で「quartus_sh --flow compile プロジェクト名」とし，論理合成，ＦＰＧＡマッピングを行う。コンパイルにより，ストリーム・アウト・ファイル「プロジェクト名.sof」が得られる。
２．ダウンロード　ＤＥ２ボードの電源をＯｎした後，端末上で「quartus_pgm プロジェクト名.cdf」とし，ＦＰＧＡへのダウンロードを行う。（以下省略）」
　前記カないしケより，甲第３号証には，以下の発明（以下，「甲３発明」という。）が記載されているものと認める。
「　ハードウェア記述言語で記述した機能から，最適化のための制約条件として，回路全体の面積，動作速度，消費電力などのパラメータを適用して論理合成を行うことにより，ネットリストを生成し，ネットリストから生成した構成データをＦＰＧＡにダウンロードして，演算回路を形成すること。」
　上記「４．判断」の「（１）特許法第２９条第１項第３号及び同法同条第２項について」の項の［相違点］が，甲３発明により当業者が容易に克服し得るかどうかについて検討する。
　まず，甲３発明に係る「パラメータ」は，最適化のための制約条件であるから，「回路ブロックの組み合わせに関する条件」ではない。すなわち，甲３発明は，最適化した一の回路を生成することを目的とするものであって，「回路ブロックの組み合わせ」を異ならせる複数の回路を生成することを目的とするものではない。よって，制約条件である「パラメータ」として，複数の異なる「パラメータ」を用いて生成される複数の「ネットリスト」に含まれる「回路ブロックの組み合わせ」が異なるとは限らない。
　また，甲第２号証は，上記「３．甲号証の記載」の項の「オ」にあるように，３つの演算回路のうち，「Ｂ．組み合わせバージョン」及び「Ｃ．ＦＳＭバージョン」については，「ＶＨＤＬ」すなわち「ハードウェア記述言語」により記述されることを前提としているものの，「Ａ．ソフトウェアベースバージョン」は，「Ｃ言語」により記述されることを前提としている。よって，引用発明は，「ハードウェア記述言語で記述された同一の演算回路記述情報」から複数の異なる回路を生成するという技術思想を欠いている。よって，「ハードウェア記述言語」から「構成データ」を生成する甲３発明を甲第２号証に記載された発明に適用しようとしても，甲第２号証の「Ｂ．組み合わせバージョン」及び「Ｃ．ＦＳＭバージョン」に対しては適用できるものの，「Ａ．ソフトウェアベースバージョン」に対しては適用することができないから，本件発明４を想到することができない。
　よって，当業者といえども，引用発明に，甲３発明を適用する動機付けがないか，又は，動機付けがあったとしても，本件発明４に係る前記「相違点」を容易に想到することはできない。
　したがって，本件発明４は，甲第２号証及び甲第３号証に記載された発明に基づいて当業者が容易に発明をすることができたものとはいえない。
　なお，異議申立てをすることができる期間経過後に提出された甲第４号証は，参酌することはできない。
　よって，前記主張イは，採用することができない。
（２）取消理由通知において採用しなかった特許異議申立理由について
　特許異議申立人　石橋　智子は，訂正前の特許請求の範囲に関し，特許異議申立書において，請求項１及び４に係る発明は，甲第１号証又は甲第２号証に記載された発明であるから，特許法第２９条第１項第３号に該当し，請求項２，３及び５に係る発明は，甲第２号証に記載された発明であるから，特許法第２９条第１項第３号に該当し，請求項１ないし５に係る発明は，甲第１号証又は甲第２号証に記載された発明に基づいて当業者が容易に発明をすることができたものであり，請求項６に係る発明は，甲第１号証及び甲第３号証に記載された発明に基づいて又は甲第２号証及び甲第３号証に記載された発明に基づいて当業者が容易に発明することができたものであるから，特許法第２９条第２項の規定により取り消されるべきである旨，主張している。
　よって，取消理由通知において採用しなかった特許異議申立理由（ただし，訂正により削除された請求項１ないし３に対するものを除く。），すなわち，本件発明４が，甲第１号証に記載された発明であり特許法第２９条第１項第３号に該当するかどうか，本件発明４ないし６が，甲第１号証又は甲第１号証及び甲第３号証に記載された発明に基づいて当業者が容易に発明することができたものであるかどうか，さらに，本件発明６が，甲第２号証及び甲第３号証に記載された発明に基づいて当業者が容易に発明することができたものであるかどうかについて，検討する。
ア　甲第１号証を主引例とする特許異議申立理由について
　甲第１号証（Rizwan A. Ashraf他，「Design-For-Diversity for Improved Fault-Tolerance of TMR Systems on FPGAs」，2011 International Conference on Reconfigurable Computing and FPGAsの予稿集，p.99-104）には，本件発明４及び５に係る「同じ前記演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の前記演算回路」及び，本件発明６に係る「同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なって接続状態が異なり，それぞれ演算結果を検証回路に出力して検証させる複数の演算回路」は，記載されていない。
　仮に，記載されていることが自明であるとしても，甲第１号証には，本件発明４及び５に係る「ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し，前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み，前記複数のネットリストに対応した，…複数の演算回路を，形成する」こと，及び，本件発明６に係る「前記回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと，前記合成パラメータ設定ステップで前記合成パラメータが設定されるごとに，前記合成パラメータの下で論理合成を行い，ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップ」は記載されておらず，本件発明との相違点となる。
　そして，前記各本件発明に係る前記各相違点は，前記「（１）特許法第２９条第１項第３号及び同法同条第２項について」の項で述べた理由と同様の理由により，甲第３号証に記載された発明をもってしても，当業者が容易に想到することができたものではない。
　したがって，本件発明４は，甲第１発明と同一ではなく，本件発明４及び５は，甲第１発明に基づいて当業者が容易に発明をすることができたものではなく，また，本件発明６は，甲第１発明及び甲第３発明に基づいて当業者が容易に発明をすることができたものではない。
イ　甲第２号証を主引例とする特許異議申立理由について
　本件発明６は，本件発明４の「ハードウェア記述言語で記述された同一の演算回路記述情報から，前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち，かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し」を，「前記回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと，前記合成パラメータ設定ステップで前記合成パラメータが設定されるごとに，前記合成パラメータの下で論理合成を行い，ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップ」に限定したものであるから，本件発明４と引用発明との相違点は，本件発明６と引用発明との相違点に含まれることが明らかである。
　そして，本件発明４と引用発明との相違点は，甲３発明をもってしても当業者が容易に克服し得たものとはいえない以上，前記相違点を含む本件発明６と引用発明との相違点も，甲３発明をもってしても当業者が容易に克服し得たものとはいえないことは明らかである。
　したがって，本件発明６は，甲第２号証及び甲第３号証に記載された発明に基づいて当業者が容易に発明することができたものではない。
　以上のとおり，特許異議申立人の主張は，いずれも理由がない。　
第４　むすび
　以上のとおりであるから，取消理由通知に記載した取消理由及び特許異議申立理由書に記載した特許異議申立理由によっては，本件請求項４ないし６に係る特許を取り消すことはできない。
　また，他に請求項４ないし６に係る特許を取り消すべき理由を発見しない。
　よって，結論のとおり決定する。
【異議決定日】
平成２８年１０月２８日（２０１６．１０．２８）
【訂正の要旨】
審決（決定）の【理由】欄参照。
（５４）【発明の名称】
プ
　【技術分野】
　【０００１】
　本発明は、
プ
　【背景技術】
　【０００２】
　近年において、プログラマブルロジックデバイス、特にＦＰＧＡ（Ｆｉｅｌｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｇａｔｅ　Ａｒｒａｙ）は、制御や通信の分野で多く使われるようになってきた。ＦＰＧＡは、ＦＰＧＡ内の構成メモリに構成情報をロードすることにより、基本論理ブロック（ＣＬＢ（Ｃｏｎｆｉｇｕｒａｂｌｅ　Ｌｏｇｉｃ　Ｂｌｏｃｋ）、ＬＥ（Ｌｏｇｉｃ　Ｅｌｅｍｅｎｔ）等とも称される）等の回路ブロックを組み合わせることによって演算回路を形成する。演算回路としては、単純な数値演算を行うものからＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）に相当する機能を有するものまで様々なものを実現可能である（例えば、特許文献１参照）。
　【０００３】
　ＦＰＧＡでは、演算機能を実現する１つ１つの演算が回路ブロックに対応しており、当該回路ブロックの組み合わせが変更されることにより様々な演算機能が実現されている。このため、ＦＰＧＡでは、演算機能の演算数の増大にともなって、演算回路に使用される回路ブロックの数も多くなる。この結果、ＦＰＧＡでは、回路ブロックの数が多い複雑な演算回路が形成されると、当該演算回路に使用する回路ブロックの数の増加に伴い、演算回路に使用される回路ブロック内のＡＮＤゲートやＯＲゲートなどの回路素子の数も多くなる。
　【０００４】
　ここで、これらＡＮＤゲートやＯＲゲートなどの回路素子は、大気中の荷電粒子等の影響を受けて誤作動することもある。そして、例えば演算回路に組み込まれた回路素子が誤作動した場合には、当該演算回路の演算結果がエラーとなる。そのため、ＦＰＧＡでは、演算回路に使用する回路素子の数が多くなると、当該回路素子の数が多くなる分、大気中の荷電粒子等の影響を受ける確率も高くなり、エラーが発生する恐れが高くなるという問題がある。
　【０００５】
　また、上記のようなＦＰＧＡでは、例えばＦＰＧＡを駆動するクロックの変動や、ＦＰＧＡの電源の電圧変動、ＦＰＧＡ自体の温度変動に対するロバスト性が、回路ブロック間を接続する配線の状態（接続状態）によって左右されることが知られており、演算回路を構成する回路ブロック間の接続状態によっては、エラーが発生し易くなるという問題もある。
　【０００６】
　そこで、従来では、同じ種類の回路ブロックを組み合わせて同じ演算処理を行う演算回路を２重、３重にＦＰＧＡ内に設け、このように冗長化された各演算回路で同時に同じ演算を行って、各演算回路の演算結果を比較し、いずれかの演算回路で回路ブロックが誤作動しているか否か、すなわち演算結果にエラーがあるか否かを検証するエラー検証方法を行うことが考えられている。
　【先行技術文献】
　【特許文献】
　【０００７】
　【特許文献１】特開２００１−０９９６２７号公報
　【発明の概要】
　【発明が解決しようとする課題】
　【０００８】
　ところで、従来のエラー検証方法では、同じ種類の回路ブロックを組み合わせて同じ演算処理を行う複数の演算回路で、演算回路を冗長化している。このため、ＦＰＧＡ自体の温度変動や、ＦＰＧＡの電源の電圧変動、ＦＰＧＡを駆動するクロックの変動など、ＦＰＧＡ全体で共通する要因（以下、共通要因と呼ぶ）に起因したエラーが生じた場合、ＦＰＧＡの各演算回路から得られる演算結果にエラーが発生しているにもかかわらず、同じ演算結果が得られてしまい、エラーの発生を検知することができない場合もあるという問題があった。そのため、従来のエラー検証方法では、エラー検知率が十分に高いとはいえなかった。
　【０００９】
　本発明は、上記事情に鑑みてなされたものであり、従来よりもエラー検知率を向上させることができる
プ
　【課題を解決するための手段】
　【００１０】（削除）
　【００１１】
　また、本発明は、複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において、
ハードウェア記述言語で記述された同一の演算回路記述情報から、回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち、かつ回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し、複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み、複数のネットリストに対応した、
、
　【００１２】
　さらに、本発明は、構成情報にしたがって複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスの回路形成方法において、回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと、合成パラメータ設定ステップで合成パラメータが設定されるごとに、合成パラメータの下で論理合成を行い、ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップと、複数のネットリストから構成情報を生成する構成情報生成ステップと、構成情報をプログラマブルロジックデバイスに書き込み、複数のネットリストに対応した同じ演算機能を持ち、かつ前記回路ブロックの組み合わせが異なって接続状態が異なり、それぞれ演算結果を検証回路に出力して検証させる複数の演算回路を前記プログラマブルロジックデバイスに形成する形成ステップとを有するものである。
　【発明の効果】
　【００１３】
　本発明のプログラマブルロジックデバイス
の
　【００１４】
　また、本発明のプログラマブルロジックデバイスの回路形成方法によれば、複数のネットリストから生成された構成情報をプログラマブルロジックデバイスに適用することによって、同じ演算機能を持ち、かつ回路ブロックの組み合わせが異なる複数の演算回路をそのプログラマブルロジックデバイスに形成できる。これにより、上述した構成情報が適用されたプログラマブルロジックデバイスでは、回路ブロックの組み合わせに応じて、温度変動や電圧変動、クロック変動の共通要因に対する各演算回路での動作状況が異なるため、各演算回路で発生するエラーの発生状態も異なってくることから、従来の単に冗長化した複数の演算回路から得られる演算結果を比較する場合に比べ、各演算回路から得られた演算結果を比較する際に、共通要因に起因したエラーをも検知でき、かくして、従来よりもエラー検知率を向上させることができる。
　【図面の簡単な説明】
　【００１５】
　【図１】　ＦＰＧＡの概略を示す説明図である。
　【図２】　ＦＰＧＡに形成した回路の構成を示すブロック図である。
　【図３】　構成情報生成装置の概略を示すブロック図である。
　【図４】　検証例と比較例における動作周波数とエラー発生率との関係を示すグラフである。
　【図５】　検証例と比較例における動作周波数とエラー検知率との関係を示すグラフである。
　【図６】　検証例と比較例における動作周波数と演算結果の不一致距離との関係を示すグラフである。
　【発明を実施するための形態】
　【００１６】
　図１に本実施形態に用いるＦＰＧＡ（Ｆｉｅｌｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｇａｔｅ　Ａｒｒａｙ）１０を示す。本実施形態では、プログラマブルロジックデバイス（ＰＬＤ）の一例として、一般的なＦＰＧＡ１０に本発明を適用した場合について説明する。ＦＰＧＡ１０は、例えば通信処理機能や、暗号化処理機能、画像処理機能等のような演算機能の変更が可能なデバイスである。ＦＰＧＡ１０には、演算処理の対象となる信号の種類や演算処理の内容に合わせて所望の演算機能を実現するため、基本論理ブロック１１、ＤＳＰブロック１２、ブロックＲＡＭ１３、ＩＯブロック（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ　Ｂｌｏｃｋ）１４、ＰＬＬブロック１５等が回路ブロック９（回路要素）として設けられている。また、回路ブロック９の他に、ＦＰＧＡ１０には、構成メモリ１６や、回路ブロック９の間を繋ぐ配線リソース（図示省略）が設けられている。
　【００１７】
　基本論理ブロック１１は、ＦＰＧＡ１０を構成する基本的な回路ブロックであり、ＣＬＢ（Ｃｏｎｆｉｇｕｒａｂｌｅ　Ｌｏｇｉｃ　Ｂｌｏｃｋ）、ロジックエレメント（Ｌｏｇｉｃ　Ｅｌｅｍｅｎｔ）、ロジックセル（Ｌｏｇｉｃ　Ｃｅｌｌ）等とも称されるものである。基本論理ブロック１１は、種々の構成のものがあるが、一般的にはＬＵＴ（Ｌｏｏｋｕｐ　ｔａｂｌｅ）とレジスタ（フリップフロップ）を基本要素とする複数の基本回路（スライス等と称される場合もある）から構成されている。
　【００１８】
　ＤＳＰブロック１２は、基本論理ブロック１１の組み合わせではなく、乗算や積和演算等の演算を高速に処理するためにハードウェア（ハードマクロ）として予め組み込まれている回路ブロック９であり、ＤＳＰスライス１２等と称される場合もある。このＤＳＰブロック１２は、高速な乗算器と加算器を基本要素として構成されている。ブロックＲＡＭ１３は、一般的なメモリとして利用可能な回路ブロック９である。ブロックＲＡＭ１３は、例えば他の回路ブロック９から出力される演算途中のデータを一時的に保持する際に利用される。ＩＯブロック１４は、ＦＰＧＡ１０の入力機能及び出力機能を提供する回路ブロック９である。ＰＬＬブロック１５は、回路ブロック９の動作に必要なクロックを発生する。配線リソースは、回路ブロック９同士を接続する配線及び配線上に設けられたパストランジスタで構成されている。
　【００１９】
　構成メモリ１６には、構成情報１８がロード（書き込み）される。構成情報１８は、回路ブロック９の動作や、配線リソースによる回路ブロック９間の接続等を定義するものであり、コンフィギュレーション・データ、ビットストリーム等と称されるものである。ＦＰＧＡ１０には、この構成情報１８にしたがって、所望する演算回路が形成される。すなわち、ＦＰＧＡ１０は、構成情報１８にしたがって複数の回路ブロック９の組み合わせが変更され、これにより演算機能が変更可能なデバイスとなっている。
　【００２０】
　ＦＰＧＡ１０は、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが異なる複数の演算回路を形成させる構成情報１８が構成メモリ１６にロードされることにより、当該構成情報１８にしたがって、図２に示すように、例えば演算回路Ｌ１〜Ｌ３と検証回路２１とが形成される。なお、この例では、３個の演算回路Ｌ１〜Ｌ３の場合について説明するが、演算回路は２個以上あればよい。また、構成情報１８は、外部のコンピュータから構成メモリ１６にロードしたり、構成情報１８が予め書き込まれた不揮発性メモリから自動的にロードしたりしてもよい。
　【００２１】
　図２に示すように、この例におけるＦＰＧＡ１０には、ｐ（ｐ≧１）ビットの入力データＸ（ｘ１〜ｘｐ）が入力される。例えば機器（図示省略）の動作を制御する制御システムにＦＰＧＡ１０が設けられ、機器の動作を監視するセンサ（図示省略）からの検出値等が入力データＸとしてＦＰＧＡ１０に入力される場合について以下に説明する。なお、入力データＸは、１つの値を表すものに限定されない。例えば、複数の検出値をまとめて入力データＸとしてもよい、この場合には複数の検出値のビット数の合計がｐビットとなる。また、入力データＸは、例えばコンピュータ等で生成された１組あるいは複数組の数値、ネットワークを介して受信したデータ、各種機器の駆動を制御するタイミング信号等であってもよい。
　【００２２】
　上述の入力データＸは、ＦＰＧＡ１０内で演算回路Ｌ１〜Ｌ３にそれぞれ入力される。演算回路Ｌ１は、入力データＸが入力されると、所定の演算を行って、ｑ（ｑ≧１）ビットの演算結果データＶ１（ｖ１１〜ｖ１ｑ）を出力する。演算回路Ｌ２、Ｌ３についても同じであり、入力データＸが入力されると、所定の演算を行って、演算結果データＶ２（ｖ２１〜ｖ２ｑ）、Ｖ３（ｖ３１〜ｖ３ｑ）を出力する。
　【００２３】
　演算回路Ｌ１〜Ｌ３は、同じ演算機能を持つが、エラー検知率を向上させるために、回路ブロック９の組み合わせを互いに異なるものにしている。すなわち、演算回路Ｌ１〜Ｌ３は、使用する回路ブロック９の種類や数、回路ブロック９内でのＬＵＴやレジスタの使われ方、これら回路ブロック９の接続状態が演算回路Ｌ１〜Ｌ３では互いに異なったものになっているが、演算回路Ｌ１〜Ｌ３にエラーが発生しない状態では、演算回路Ｌ１〜Ｌ３は、同一の入力データＸの入力に応答して同じ演算結果データＶ１〜Ｖ３を出力するよう構成されている。
　【００２４】
　上記のように演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせを互いに異なるものにすることによって、演算回路Ｌ１〜Ｌ３が同時にエラーを発生させる可能性を低くするとともに、また演算回路Ｌ１〜Ｌ３が同時にエラーを発生させても各演算結果データＶ１〜Ｖ３が同じになる可能性を極めて低くしている。
　【００２５】
　例えば、演算回路Ｌ１、Ｌ３は、組み合わされる複数の回路ブロックの中に少なくとも１つ以上のＤＳＰブロック１２が含まれた回路構成を有している。一方、演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９が組み合わされた回路構成（例えば、ＬＵＴを含む基本論理ブロック１１を主体とした回路構成）を有している。また、演算回路Ｌ１と演算回路Ｌ２とは、例えば演算中のデータを保持するメモリ（以下、データ保持メモリ）として、ブロックＲＡＭ１３を使用するのに対して、演算回路Ｌ３は、基本論理ブロック１１のフリップフロップを利用したいわゆる分散ＲＡＭを使用する回路ブロック９の組み合わせである。このようにして、演算回路Ｌ１〜Ｌ３は、種類の異なる回路ブロック９を用い、相互に回路ブロック９の組み合わせが異なるものになっており、多様性のあるものとなっている。
　【００２６】
　演算回路Ｌ１、Ｌ３のようにＤＳＰブロック１２を使用した場合には、演算回路Ｌ２のようにＤＳＰブロック１２を使用しない場合に比べて、使用される基本論理ブロック１１の個数を大幅に少なくさせることもでき、回路ブロック９間を接続した配線の長さも含め演算回路を形成する回路ブロック１１の組み合わせを大きく異ならせることができる。すなわち、演算回路Ｌ１、Ｌ３と演算回路Ｌ２とは、論理的な演算機能は同じであるが、ゲートレベルにおける動作（信号処理の物理的プロセスや、物性レベルの素子内部の振る舞い等）が大きく異なり、ＦＰＧＡ１０の温度変動や電圧変動、クロック変動などの共通要因がゲートレベルにおける動作に与える影響も大きく異なってくる。このため、ＦＰＧＡ１０では、上記共通要因に対する演算回路Ｌ１、Ｌ３と演算回路Ｌ２とのゲートレベルにおける動作状況が大きく異なるため、エラー発生時の演算結果データの不一致の程度も大きくなることが期待できる。したがって、ＤＳＰブロック１２の使用の有無によって回路ブロック１１の組み合わせを異なったものとすることは、エラーの発生を演算結果データの不一致によって検知する際に非常に有利である。
　【００２７】
　この実施の形態の場合、ＦＰＧＡ１０には、複数の回路ブロック９が組み合わされることにより検証回路２１が形成されている。演算回路Ｌ１〜Ｌ３は、演算結果データＶ１〜Ｖ３を検証回路２１に送る。検証回路２１は、演算結果データＶ１〜Ｖ３を検証し、その検証結果として検証データＲを生成する。また、検証回路２１は、演算結果データＶ１〜Ｖ３のうちエラーがないと推測すると、演算結果データとして出力データＹ（ｙ１〜ｙｑ）を生成する。この検証回路２１は、検証データＲと出力データＹとを制御システムのシステムコントローラ（図示省略）に出力する。
　【００２８】
　上記検証回路２１は、例えば多数決方式によって出力データＹを決定する。すなわち、演算結果データＶ１〜Ｖ３の値を比較して一致、不一致を判定し、同じ値となっている演算結果データの個数が最も多い演算結果データを正常値とし、その正常値を出力データＹとして出力する。
　【００２９】
　ＦＰＧＡ１０は、例えば演算回路Ｌ１〜Ｌ３のいずれもがエラーを発生していないときには、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が全て一致する。また、演算回路Ｌ１〜Ｌ３のうち例えば演算回路Ｌ１だけにエラーが発生しているときには、演算回路Ｌ２，Ｌ３から得られる演算結果データＶ２、Ｖ３と、演算回路Ｌ１から得られる演算結果データＶ１とが異なるものとなる。また、演算回路Ｌ１〜Ｌ３のうち例えば演算回路Ｌ２，Ｌ３にだけエラーが発生しているとき、演算回路Ｌ２，Ｌ３から得られる演算結果データＶ２、Ｖ３と、演算回路Ｌ１から得られる演算結果データＶ１とが異なるものとなる。
　【００３０】
　さらに、ＦＰＧＡ１０は、前述のように演算回路Ｌ１〜Ｌ３を回路ブロックの組み合わせが互いに異なる回路構成とすることによって、温度変動や電圧変動、クロック変動の共通要因でエラーが発生しても、当該共通要因に対する各演算回路Ｌ１〜Ｌ３での動作状況が異なるので、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が互いに異なるものとなる。
　【００３１】
　これにより、ＦＰＧＡ１０では、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が全て一致するときＦＰＧＡ１０にエラーが発生していないと判断でき、一方、演算回路Ｌ１〜Ｌ３から得られる各演算結果データＶ１〜Ｖ３が不一致のときＦＰＧＡ１０にエラーが発生していると判断し得る。
　【００３２】
　検証データＲは、エラーの発生状況や出力データＹの確からしさの判断の指標となる情報である。この例では、検証データＲは、演算結果データＶ１〜Ｖ３に対応した個別検証データＲ１〜Ｒ３を含んでいる。個別検証データＲ１〜Ｒ３は、例えば出力データＹを正常値としたときに、対応する演算結果データＶ１〜Ｖ３の誤りビットの個数、何ビット目が誤りビットになっているか、出力データＹに示される値と演算結果データとの差等の情報を有したものとなっている。システムコントローラは、このような個別検証データＲ１〜Ｒ３を含む検証データＲにより、正常値と不一致となっている演算結果データの個数や不一致の演算結果データ中のビット数、エラーが発生したと推測される演算回路がいずれか、不一致となっている演算結果データの値と正常値との差や、その差の最大値、最小値、幅等の情報を取得できる。
　【００３３】
　図３において、ＦＰＧＡ１０にロードされる構成情報１８は、構成情報生成装置２４によって生成される。この構成情報生成装置２４は、回路記述情報２６から構成情報１８を生成する。回路記述情報２６は、レジスタ転送レベル（Ｒｅｇｉｓｔｅｒ　ｔｒａｎｓｆｅｒ　ｌｅｖｅｌ，ＲＴＬ）で抽象化した演算機能の仕様を、ハードウェア記述言語（ＨＤＬ）を用いて記述したものである。この例においては、回路記述情報２６は、検証回路２１に対応して記述された検証回路記述情報２６ａと、演算回路記述情報２６ｂとがあり、複数の演算回路Ｌ１〜Ｌ３（図２）に対しては１つの演算回路記述情報２６ｂを共通に使用している。なお、産業用アプリケーションとして使われているＦＢＤ（ファンクション　ブロック　ダイアグラム：Ｆｕｎｃｔｉｏｎ　Ｂｌｏｃｋ　Ｄｉａｇｒａｍ）言語等を用いて記述され、抽象度をより高くした動作レベル（ｂｅｈａｖｉｏｒａｌ　ｌｅｖｅｌ）のハードウェア記述情報に高位合成を行って、レジスタ転送レベルの回路記述情報２６を生成してもよい。
　【００３４】
　構成情報生成装置２４は、論理合成手段２４ａ、合成パラメータ設定手段２４ｂ、結合手段２４ｃ、及びマッピング手段２４ｄを備えている。例えば、論理合成手段２４ａ、結合手段２４ｃ、及びマッピング手段２４ｄは、論理合成ツール等として知られているアプリケーションプログラムをコンピュータにインストールすることで実現される。合成パラメータ設定手段２４ｂは、論理合成ツールの論理合成に関する合成パラメータを変更するように構成されている。合成パラメータは、ＦＰＧＡ１０に演算回路Ｌ１〜Ｌ３を形成させる際の条件を指定するものであり、この合成パラメータにより回路ブロック９の組み合わせに関する条件を変えることができる。
　【００３５】
　論理合成手段２４ａは、回路記述情報２６からネットリストを生成する論理合成を行う。ネットリストは、回路ブロック９間を接続する配線等を記述したものである。合成パラメータ設定手段２４ｂは、論理合成手段２４ａが論理合成する際に、パラメータセットＰ０〜Ｐ３を設定する。パラメータセットＰ０は、検証回路２１について回路ブロック９の組み合わせが最適になるように設定された複数の合成パラメータを１セットにしたものである。このパラメータセットＰ０は、検証回路記述情報２６ａから検証回路２１のネットリストＮ０を生成する際に使用される。
　【００３６】
　また、パラメータセットＰ１〜Ｐ３は、いずれも演算回路記述情報２６ｂを回路ブロック９の組み合わせに具現化する際の複数の合成パラメータを１セットにしたものである。これらパラメータセットＰ１〜Ｐ３は、上述のように回路ブロック９の組み合わせが互いに異なる演算回路Ｌ１〜Ｌ３を、同一の演算回路記述情報２６ｂから生成されるようにするために、いくつかの合成パラメータの設定が異なったものになっている。
　【００３７】
　この例においては、パラメータセットＰ１〜Ｐ３は、ＤＳＰブロック１２の使用に関する合成パラメータ（以下、ＤＳＰパラメータという）と、データ保持メモリに関する合成パラメータ（以下、メモリパラメータという）とを含んでおり、これらの設定値の組み合わせが互いに異なるものになっている。
　【００３８】
　パラメータセットＰ１は、演算回路Ｌ１のネットリストＮ１を生成するためのものである。このパラメータセットＰ１のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値になっている。また、パラメータセットＰ１のメモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。パラメータセットＰ２は、演算回路Ｌ２のネットリストＮ２を生成するためのものである。このパラメータセットＰ２のＤＳＰパラメータは、ＤＳＰブロック１２を使用しない設定値であり、またメモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。さらに、パラメータセットＰ３は、演算回路Ｌ３のネットリストＮ３を生成するためのものである。このパラメータセットＰ３のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値であり、またメモリパラメータは、データ保持メモリとして分散ＲＡＭを使用する設定値になっている。
　【００３９】
　上記のように合成パラメータ設定手段２４ｂは、演算回路Ｌ１〜Ｌ３についての論理合成の際に、パラメータセットＰ１〜Ｐ３を論理合成手段２４ａに設定することによって、演算回路Ｌ１〜Ｌ３を形成する回路ブロック９（ＦＰＧＡのリソース）の組み合わせに関する条件を与え、演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせを互いに異なるものとして、演算回路Ｌ１〜Ｌ３に多様性を付与する。
　【００４０】
　論理合成手段２４ａは、合成パラメータセットＰ０の下で論理合成を行うことによって、検証回路記述情報２６ａからネットリストＮ０を生成する。また、論理合成手段２４ａは、合成パラメータセットＰ１〜Ｐ３の下で、演算回路記述情報２６ｂを用いた論理合成をそれぞれ行うことによって、ネットリストＮ１〜Ｎ３を生成する。
　【００４１】
　なお、演算回路Ｌ１〜Ｌ３は、回路ブロック９の組み合わせが互いに異なっているため、演算回路Ｌ１〜Ｌ３の相互間で、同じタイミングで入力データＸを入力しても、演算結果データＶ１〜Ｖ３の出力タイミングが異なる場合がある。このような場合には、検証回路２１に対する演算結果データＶ１〜Ｖ３の入力タイミングが同時になるように、例えば遅延回路を形成すればよい。
　【００４２】
　結合手段２４ｃは、論理合成手段２４ａから得られる４個のネットリストＮ０〜Ｎ３を１つのネットリストに結合する。この結合の際には、結合手段２４ｃによって、ネットリストＮ１〜Ｎ３に示される３組の出力端子を、ネットリストＮ０の３組の入力端子に接続したネットリストを生成する。
　【００４３】
　マッピング手段２４ｄは、結合手段２４ｃからのネットリストにしたがい、ネットリストに示される接続をＦＰＧＡ１０の回路ブロック９や入出力ピンに割り当てるいわゆるマッピング（配置配線）を行う。このマッピング手段２４ｄは、マッピングした情報を構成情報１８としてＦＰＧＡ１０の構成メモリ１６に出力する。構成情報１８には、検証回路２１を形成するための検証回路構成情報Ｃ０と、演算回路Ｌ１〜Ｌ３を形成するための演算回路構成情報Ｃ１〜Ｃ３とが含まれる。
　【００４４】
　次に上記構成の作用について説明する。まず、検証回路記述情報２６ａと、演算回路Ｌ１〜Ｌ３に共通な演算回路記述情報２６ｂとを用意し、これらに基づいて構成情報生成装置２４で構成情報１８を生成する。例えば、合成パラメータ設定手段２４ｂは、最初に論理合成手段２４ａにパラメータセットＰ０を設定する。この後に、論理合成手段２４ａは、検証回路記述情報２６ａを読み込み、パラメータセットＰ０の下で論理合成を行い、検証回路記述情報２６ａからネットリストＮ０を生成する。
　【００４５】
　ネットリストＮ０の生成後、合成パラメータ設定手段２４ｂは、論理合成手段２４ａにパラメータセットＰ１を設定する。この後、論理合成手段２４ａは、演算回路記述情報２６ｂを読み込み、パラメータセットＰ１の下で論理合成を行って、演算回路記述情報２６ｂからネットリストＮ１を生成する。このときに、パラメータセットＰ１のＤＳＰパラメータは、ＤＳＰブロック１２を最大限使用する設定値であり、メモリパラメータは、データ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ１の下で、ＤＳＰブロック１２を最大限使用し、かつデータ保持メモリとしてブロックＲＡＭ１３を使用するする回路ブロック９の組み合わせのネットリストＮ１に変換される。
　【００４６】
　ネットリストＮ１の生成後、論理合成手段２４ａには、合成パラメータ設定手段２４ｂによってパラメータセットＰ２が設定される。この後、論理合成手段２４ａは、演算回路記述情報２６ｂを読み込み、パラメータセットＰ２の下で論理合成を行って、この演算回路記述情報２６ｂからネットリストＮ２を生成する。パラメータセットＰ２の場合は、ＤＳＰパラメータがＤＳＰブロック１２を使用しない設定値であり、メモリパラメータがデータ保持メモリとしてブロックＲＡＭ１３を使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ２の下で、ＤＳＰブロック１２を使用せず、かつデータ保持メモリとしてブロックＲＡＭ１３を使用する回路ブロック９の組み合わせのネットリストＮ２に変換される。
　【００４７】
　さらに、ネットリストＮ２の生成後、論理合成手段２４ａには、合成パラメータ設定手段２４ｂによってパラメータセットＰ３が設定される。この後、論理合成手段２４ａは、演算回路記述情報２６ｂが論理合成手段２４ａに読み込み、パラメータセットＰ３の下、演算回路記述情報２６ｂからネットリストＮ３を生成する。この場合には、ＤＳＰパラメータがＤＳＰブロック１２を最大限使用する設定値になっており、メモリパラメータがデータ保持メモリとして分散ＲＡＭを使用する設定値になっている。したがって、所定の演算機能を実現させる演算回路記述情報２６ｂは、パラメータセットＰ３の下、ＤＳＰブロック１２を最大限使用し、かつデータ保持メモリとして分散ＲＡＭを使用する回路ブロック９の組み合わせのネットリストＮ３に変換される。
　【００４８】
　上記のようにして、ネットリストＮ０〜Ｎ３が生成されると、これらネットリストＮ０〜Ｎ３が、結合手段２４ｃで結合されて１つのネットリストにされる。続いて、結合手段２４ｃから得られるネットリストは、マッピング手段２４ｄによってマッピングされて、構成情報１８として出力される。
　【００４９】
　マッピング手段２４ｄからの構成情報１８は、ＦＰＧＡ１０の構成メモリ１６にロードされる。構成メモリ１６に構成情報１８がロードされると、ＦＰＧＡ１０には演算回路Ｌ１〜Ｌ３及び検証回路２１が形成される。演算回路Ｌ１〜Ｌ３は、同じ演算機能を有しているが、回路ブロック９の組み合わせが互いに異なっている。上述のように、演算回路Ｌ１、Ｌ３は、ＤＳＰブロック１２を最大限使用する回路ブロック９の組み合わせであるのに対し、演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９の組み合わせになっている。また、演算回路Ｌ１、Ｌ２は、データ保持メモリとして、ブロックＲＡＭ１３を使用するのに対して、演算回路Ｌ３は、データ保持メモリとして分散ＲＡＭを使用する回路ブロック９の組み合わせになっている。
　【００５０】
　上記のように、構成情報生成装置２４では、パラメータセットＰ１〜Ｐ３（合成パラメータ）が設定されるごとに、その合成パラメータの下で論理合成を行って、同一の演算回路記述情報２６ｂから演算回路Ｌ１〜Ｌ３に対応したネットリストＮ１〜Ｎ３を生成し、そのネットリストＮ１〜Ｎ３を用いて、演算回路構成情報Ｃ１〜Ｃ３を含む構成情報１８を生成する。これにより、演算機能の同一性を担保しつつ回路ブロック９の組み合わせが異なる複数の演算回路Ｌ１〜Ｌ３の構成情報１８を容易に生成することができ、またその構成情報１８を適用してＦＰＧＡ１０に演算機能が同一であり、かつ回路ブロック９の組み合わせ異なる演算回路Ｌ１〜Ｌ３を容易に形成できる。
　【００５１】
　上記のように演算回路Ｌ１〜Ｌ３及び検証回路２１が形成されたＦＰＧＡ１０では、入力データＸが入力されると、この入力データＸが演算回路Ｌ１〜Ｌ３にそれぞれ入力される。演算回路Ｌ１に入力データＸが入力されると、この演算回路Ｌ１は、入力データＸに対して演算を行い、その結果得られた演算結果データＶ１を検証回路２１に出力する。同様に、演算回路Ｌ２、Ｌ３は、入力データＸに対して演算をそれぞれ行い、その結果得られた各演算結果データＶ２、Ｖ３を検証回路２１に出力する。このときに、演算回路Ｌ１〜Ｌ３が行う演算は、いずれも演算回路記述情報２６ｂにより示される特定の演算機能を実現するものである。このようにして、ＦＰＧＡ１０では、１つの入力データＸに対して複数の演算結果データＶ１〜Ｖ３を生成し、これら演算結果データＶ１〜Ｖ３を検証回路２１に入力する。
　【００５２】
　検証回路２１は、上記のようにして演算結果データＶ１〜Ｖ３が入力されるごとに演算結果データＶ１〜Ｖ３を比較する。そして、検証回路２１は、演算結果データＶ１〜Ｖ３が全て一致している場合、そのうちのいずれか１つの演算結果データを出力データＹとしてシステムコントローラに出力する。また、検証回路２１は、演算結果データＶ１〜Ｖ３が出力データＹとの間で各ビットに相違がなく、同じデータであることを示す個別検証データＲ１〜Ｒ３を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲもシステムコントローラに出力する。
　【００５３】
　一方、演算結果データＶ１〜Ｖ３のうち２つだけが一致する場合、検証回路２１は、一致する２つの演算結果データの一方を出力データＹとしてシステムコントローラに出力する。例えば、演算結果データＶ１、Ｖ３が一致し、これらと演算結果データＶ２が一致しない場合には、演算結果データＶ１、Ｖ３のうちの一方が出力データＹとして検証回路２１からシステムコントローラに出力される。この際、検証回路２１は、演算結果データＶ１、Ｖ３が出力データＹと同じデータであることを示す個別検証データＲ１、Ｒ３を生成するとともに、演算結果データＶ２が出力データＹと相違し、相違するビット等を示す情報を有する個別検証データＲ２を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲをシステムコントローラに出力する。
　【００５４】
　なお、演算結果データＶ１〜Ｖ３の全てが一致しない場合、検証回路２１は、例えば規定値を出力データＹとしてシステムコントローラに出力する。また、この場合、検証回路２１は、演算結果データＶ１〜Ｖ３がいずれもが一致しないこと等を示す個別検証データＲ１〜Ｒ３を生成し、これら個別検証データＲ１〜Ｒ３を含んだ検証データＲをシステムコントローラに出力する。
　【００５５】
　ところで、従来のＦＰＧＡでは、同じ演算機能を持ち、かつ同じ回路ブロックの組み合わせで構成された複数の演算回路を形成してエラー検証を行っているため、これら複数の演算回路に共通する温度変動や電圧変動、クロック変動の共通要因に起因して各演算回路にエラーが発生している場合、共通要因に対する各演算回路の動作状況が同じになってしまうので、各演算回路で発生するエラーの発生状態も同じものとなる。このため、従来のＦＰＧＡのエラー検証方法では、各演算回路が同じ演算結果データを生成することから、それら演算結果データが全て一致してしまい、エラーが発生したことを検知することが困難であった。
　【００５６】
　しかしながら、本実施形態のＦＰＧＡ１０では、上記のように演算回路Ｌ１〜Ｌ３が同じ演算機能を持つものの、演算回路Ｌ１〜Ｌ３を構成する回路ブロック９の組み合わせが互いに異なっていることから、共通要因に対する各演算回路Ｌ１〜Ｌ３の動作状況が異なり、各演算回路Ｌ１〜Ｌ３で発生するエラーの発生状態も異なるものとなる。これにより、ＦＰＧＡ１０では、例えば演算回路Ｌ１〜Ｌ３に共通する共通要因で何らかの理由でエラーが発生しているときでも、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成する可能性が低くなり、演算結果データＶ１〜Ｖ３が不一致になる可能性が非常に高くなる。したがって、ＦＰＧＡ１０では、演算結果データＶ１〜Ｖ３が不一致であるとの検証回路２１の判断結果を基にエラーを検知できる。
　【００５７】
　因みに、ＦＰＧＡ１０では、共通要因によって、上記のように全ての演算回路Ｌ１〜Ｌ３でエラーが発生することもあれば、演算回路Ｌ１〜Ｌ３を構成する回路ブロック９の組み合わせが互いに異なっていることから、演算回路Ｌ１〜Ｌ３のうちの１つまたは２つの演算回路でエラーが発生し、他の演算回路ではエラーが発生しないこともある。このような場合でも、ＦＰＧＡ１０では、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成することがないため、演算結果データＶ１〜Ｖ３の不一致が生じ、この結果を基に検証回路２１によってエラーを検知できる。
　【００５８】
　演算回路Ｌ１〜Ｌ３でエラーが生じる要因は様々であり、共通要因以外の要因によってもエラーが発生することもある。しかしながら、ＦＰＧＡ１０の演算回路Ｌ１〜Ｌ３は、上記のように回路ブロック９の組み合わせが互いに異なっていることから、各演算回路Ｌ１〜Ｌ３が同時にエラーを発生させたとしても、演算回路Ｌ１〜Ｌ３が同時に同じ演算結果データＶ１〜Ｖ３を生成する可能性が低くなる。したがって、ＦＰＧＡ１０では、演算結果データＶ１〜Ｖ３が不一致であるとの検証回路２１の判断結果を基にエラーを検知できる。
　【００５９】
　以上のようにして、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが異なる多様性を有する複数の演算回路Ｌ１〜Ｌ３からの演算結果データＶ１〜Ｖ３に基づいたエラー検知率は、従来の同じ演算機能を持ち、かつ同じ回路ブロック９の組み合わせた複数の演算回路によって冗長性を持たせた場合よりも高くなる。
　【００６０】
　なお、上述した実施形態においては、３つの演算回路Ｌ１〜Ｌ３を形成した場合について述べたが、本発明はこれに限らず、少なくとも２つ以上の演算回路を形成できれば、その他種々の数の演算回路を形成するようにしてもよい。
　【００６１】
　また、上記に説明した複数の演算回路Ｌ１〜Ｌ３の回路ブロック９の組み合わせが互いに異なるものとするための態様は、一例であり上記のものに限定されない。例えば演算回路が２個の場合には、上記の演算回路Ｌ１と演算回路Ｌ２との関係のように、ＤＳＰブロック１２の使用の有無だけが異なるようにしてもよい。また、複数の演算回路Ｌ１〜Ｌ３のそれぞれに使用されるＤＳＰブロック１２の個数や、演算回路Ｌ１〜Ｌ３を形成する回路ブロック９の全数に対するＤＳＰブロック１２の個数の比率が異なるようにしてもよい。ＤＳＰブロック１２に限らず、例えば乗算器等の特定のハードマクロの使用の有無、その個数や比率等が異なるようにしてもよい。
　【００６２】
　また、上記実施形態では、検証回路２１をＦＰＧＡ１０に形成しているが、ＦＰＧＡ１０に検証回路２１を形成せずに、ＦＰＧＡ１０からは各演算回路Ｌ１〜Ｌ３の演算結果データをそのまま外部の機器に出力するように構成してもよい。この場合、外部の機器において検証回路２１と同様な検証を行えばよい。検証回路２１において、出力データＹを決定する手法は一例である。例えば最も大きな値の演算結果データを出力データＹとしてもよい（高値選択）。逆に、小さな値の演算結果データを出力データＹとしてもよい（低値選択）。また、各演算結果データの平均値や中間値を出力データＹとしたり、一定数例えば過半数を超えた演算結果データの値を出力データＹとしたりしてもよい（条件付き多数決）。さらに、各演算結果データの値の分布を算出し、特定の偏差の範囲外を排除したうちの演算結果データから、高値選択、低値選択、平均値、中間値、多数決、条件付き多数決等を行ってもよい。また、出力データＹを決定する際に、上記手法を組み合わせてもよい。なお、条件付き多数決の場合に、一定数を超えた演算結果データがない場合には、規定値を出力データＹとして出力することができる。
　【００６３】
　また、各演算結果データの対応するビット同士で多数決、条件付き多数決等を行って、選択されたビット値を出力データＹのビットに割り当ててもよい。また、各演算結果データの対応するビット同士で多数決、条件付き多数決等を行って得られる基準ビット列を生成し、基準ビット列と各演算結果データのビット列の対応するビット同士を比較し、最も違いの少ない演算結果データを出力データＹとしてもよい。
　【００６４】
［検証］
　次に、本発明のＦＰＧＡ１０におけるエラーの検知率の向上について、ＦＰＧＡのシミュレーションツール（アプリケーションプログラム）により検証試験を行った。この検証試験では、同じ演算機能を持ち、かつ回路ブロック９の組み合わせが互いに異なる２つの演算回路Ｌ１、Ｌ２をＦＰＧＡ１０に形成したＦＰＧＡについてのタイミングシミュレーションを検証例とし、得られた演算結果データＶ１、Ｖ２を基にエラーの検知率について検証した。
　【００６５】
　また、この検証例では、プラント制御装置に搭載され、ＩＥＣ−６１１３１に準拠した制御記述言語であるＦＢＤ言語で記述された乗算関数の動作記述情報を高位合成して、Ｖｅｒｉｌｏｇ　ＨＤＬによる演算回路記述情報を生成した。この生成した１つの演算回路記述情報を基に、異なる２セットのパラメータセットを用いて論理合成を行い、２つの演算回路Ｌ１、Ｌ２に対応するネットリストＮ１、Ｎ２をそれぞれ生成した。ネットリストＮ１、Ｎ２を１つのネットリストに結合し、そのネットリストを基にマッピングして構成情報１８を得た。検証例では、この構成情報１８と、シミュレートするＦＰＧＡ１０の伝搬遅延情報等とを用いて、シミュレーションツール上にてタイミングシミュレーションを行った。論理合成からマッピングまでの処理、及びタイミングシミュレーションは、ＩＳＥ（登録商標）１４．７（ＸｉｌｉｎＸ社製）を用いた。また、ＦＰＧＡ１０としては、ＸＣ７Ｋ３２５Ｔ−２（Ｋｉｎｔｅｘ−７、Ｘｉｌｉｎｘ社製）を想定してタイミングシミュレーションを行った。
　【００６６】
　検証例における演算回路Ｌ１、Ｌ２が行う演算は、２つの入力値（整数）を乗算するものである。２つの入力値は、乱数で発生させ、これら２つの入力値を１つの入力データＸとして演算回路Ｌ１、Ｌ２にそれぞれ入力した。また、演算回路Ｌ１、Ｌ２から得られる演算結果データＶ１、Ｖ２は、それぞれ３２ビットとした。
　【００６７】
　ネットリストＮ１を生成する論理合成では、ＤＳＰブロック１２を最大限使用する設定値のＤＳＰパラメータを用い、ネットリストＮ２を生成する論理合成では、ＤＳＰブロック１２を使用しない設定値のＤＳＰパラメータを用いた。なお、ＤＳＰパラメータ以外の合成パラメータについては、特に設定を行わずにネットリストＮ１、Ｎ２を生成した。これにより、検証例の演算回路Ｌ１はＤＳＰブロック１２が最大限使用された回路構成とした。一方、検証例の演算回路Ｌ２は、ＤＳＰブロック１２以外の回路ブロック９が組み合わされた回路構成とした。ここで、検証例とした演算回路Ｌ１、Ｌ２の回路ブロック９の使用状態を表１に示す。なお、表１には、別の検証例として、同じ合成パラメータの設定で演算回路Ｌ１、Ｌ２が比例積分演算を行うように構成した場合における回路ブロック９の使用状態を参考に示す。
　【００６８】
　【表１】
　【００６９】
　表１の「ＰＨＹＳＩＣＡＬ　ＰＡＲＡＭＥＴＥＲ　ＯＦ　ＦＰＧＡ」の欄の各項目の意味は次の通りである。
　［Ｓｌｉｃｅ　Ｌｏｇｉｃ　Ｕｔｉｌｉｚａｔｉｏｎ］
　（１）Ｎｕｍｂｅｒ　ｏｆ　Ｓｌｉｃｅ　Ｒｅｇｉｓｔｅｒｓ：スライス中の使用するレジスタの個数
　（２）Ｎｕｍｂｅｒ　ｕｓｅｄ　ａｓ　Ｆｌｉｐ　Ｆｌｏｐｓ：（１）のレジスタのうちフリップフロップとして使用する個数
　（３）Ｎｕｍｂｅｒ　ｏｆ　Ｓｌｉｃｅ　ＬＵＴｓ：スライス中の使用するＬＵＴの個数
　（４）Ｎｕｍｂｅｒ　ｕｓｅｄ　ａｓ　ｌｏｇｉｃ：（３）のうち論理関数を実現するために使用したＬＵＴの個数（ＬＵＴは、Ｏ６出力とＯ５出力とを有する）
　（５）Ｎｕｍｂｅｒ　ｕｓｉｎｇ　Ｏ６　ｏｕｔｐｕｔ　ｏｎｌｙ：（４）のうちＯ６出力のみを使用したＬＵＴの個数
　（６）Ｎｕｍｂｅｒ　ｕｓｉｎｇ　Ｏ５　ｏｕｔｐｕｔ　ｏｎｌｙ：（４）のうちＯ５出力のみを使用したＬＵＴの個数
　（７）Ｎｕｍｂｅｒ　ｕｓｉｎｇ　Ｏ５　ａｎｄ　Ｏ６：（４）のうちＯ６出力とＯ５出力の双方を使用したＬＵＴの個数
　（８）Ｎｕｍｂｅｒ　ｕｓｅｄ　ｅｘｃｌｕｓｉｖｅ　ａｓ　ｒｏｕｔｅ−ｔｈｒｕｓ：（３）のうちルートスルーとして（入力をレジスタ等に接続する配線の目的ためだけに）使用するＬＵＴの個数
　（９）Ｎｕｍｂｅｒ　ｗｉｔｈ　ｓａｍｅ−ｓｌｉｃｅ　ｃａｒｒｙ　ｌｏａｄ：（８）のうちキャリー信号線（接続先が同一スライス内）とされるＬＵＴの個数
　［Ｓｌｉｃｅ　Ｌｏｇｉｃ　Ｄｉｓｔｒｉｂｕｔｉｏｎ］
　（１０）Ｎｕｍｂｅｒ　ｏｆ　ｏｃｃｕｐｉｅｄ　Ｓｌｉｃｅｓ：演算回路に使用したスライスの個数
　（１１）Ｎｕｍｂｅｒ　ｏｆ　ＬＵＴ　Ｆｌｉｐ　Ｆｌｏｐ　ｐａｉｒｓ　ｕｓｅｄ：（１０）のスライスに含まれるＬＵＴとフリップフロップのペアのうち実際に使われた個数
　（１２）Ｎｕｍｂｅｒ　ｗｉｔｈ　ａｎ　ｕｎｕｓｅｄ　Ｆｌｉｐ　Ｆｌｏｐ：（１１）のペアのうちフリップフロップが使われない個数
　（１３）Ｎｕｍｂｅｒ　ｗｉｔｈ　ａｎ　ｕｎｕｓｅｄ　ＬＵＴ：（１１）のペアのうちＬＵＴが使われない個数
　（１４）Ｎｕｍｂｅｒ　ｏｆ　ｆｕｌｌｙ　ｕｓｅｄ　ＬＵＴ−ＦＦ　ｐａｉｒｓ：（１１）のペアのうちＬＵＴとフリップフロップの双方が使われた個数
　［Ｓｐｅｃｉｆｉｃ　Ｆｅａｔｕｒｅ　Ｕｔｉｌｉｚａｔｉｏｎ］
　（１５）Ｎｕｍｂｅｒ　ｏｆ　ＤＳＰ４８Ｅ１ｓ：ＤＳＰブロック１２の使用個数
　（１６）Ａｖｅｒａｇｅ　Ｆａｎｏｕｔ　ｏｆ　Ｎｏｎ−Ｃｌｏｃｋ　Ｎｅｔｓ：クロック以外の配線の平均ファンアウト（１本の信号線が平均何本に分岐しているか）
　【００７０】
　なお、「スライス」は、上述の基本構成ブロックを構成する基本回路であり、ＬＵＴとレジスタ（フリップフロップ）を基本要素とするものである。
　【００７１】
　検証試験では、現実の環境におけるエラーの発生状況が、ＦＰＧＡ１０の動作周波数が変動した状況に似ているものと仮定した。具体的には、温度変動や電圧変動の各回路ブロック９間における信号の伝搬遅延が発生する状態と同様な状態を、シミュレーション上でＦＰＧＡ１０の動作周波数を変化させることで発生させた。このため、検証例のタイミングシミュレーションでは、動作周波数を１６０ＭＨｚから２５８ＭＨｚまで２ＭＨｚずつ変化させ、各動作周波数において、演算回路Ｌ１、Ｌ２で乗算演算を実行した。
　【００７２】
　各々の動作周波数では、１００００個の入力データＸを入力し、演算回路Ｌ１、Ｌ２のそれぞれで１００００回の乗算演算を実行した。１個の入力データＸに対して演算回路Ｌ１、Ｌ２から出力される演算結果データＶ１、Ｖ２を、シミュレーションツールとは別のプログラムで取り込み、エラーの発生状況等を検証した。
　【００７３】
　上記の検証例におけるエラー発生率と動作周波数との関係を図４に示す。図４のグラフの横軸は、ＦＰＧＡ１０の動作周波数であり、縦軸は、エラー発生率である。入力データＸの１回の入力について、演算結果データＶ１、Ｖ２の少なくとも一方が誤った値となったときを１回としてエラー発生回数をカウントし、エラー発生率は、動作周波数ごとの入力データＸの入力回数（１万回）に対するエラー発生回数の割合（％）とした。演算結果データＶ１、Ｖ２が誤った値となっているか否かは、別途計算された真値と演算結果データＶ１、Ｖ２とを比較することによって判別した。
　【００７４】
　また、図５には、演算結果データＶ１、Ｖ２が不一致によるエラー検知率を示す。図５のグラフの横軸は、ＦＰＧＡ１０の動作周波数であり、縦軸は、エラー検知率である。入力データＸの１回の入力について、演算結果データＶ１、Ｖ２が不一致になったときを１回としてエラー検知回数をカウントし、エラー検知率は、動作周波数ごとの入力データＸの入力回数（１万回）に対するエラー検知回数の割合（％）とした。なお、図５では、後述する比較例１でエラーを検知した１７８ＭＨｚ以上の動作周波数での検証結果について示した。
　【００７５】
　さらに、図６には、演算結果データＶ１、Ｖ２の違いの距離（以下、不一致距離という）を示す。不一致距離（Ｄ）は、次の式（１）に示されるように、動作周波数ごとに、３２ビットで正規化したエラービットの合計を当該動作周波数におけるエラー検知回数で除したものであり、百分率で示される。この不一致距離は、演算結果データＶ１、Ｖ２の違いが大きいときにその値が大きくなる。
　【００７６】
　【数１】
　【００７７】
　上記式（１）中の値Ｅ（ｉ，ｆ）は、動作周波数ｆにおけるｉ番目の入力データＸについて、演算結果データＶ１、Ｖ２の間で不一致となるビット数である。また、Ｓ（ｆ）は、動作周波数ｆにおけるエラー検知回数である。
　【００７８】
　さらに、この検証試験では、検証例と比較するために、ＤＳＰブロック１２が最大限使用された演算回路Ｌ１を２個形成したＦＰＧＡについてのタイミングシミュレーションを比較例１とし、さらに、ＤＳＰブロック１２以外の回路ブロックを組み合わせた演算回路Ｌ２を２個形成したＦＰＧＡについてのタイミングシミュレーションを比較例２とした。これら比較例１および比較例２のＦＰＧＡにそれぞれ演算回路Ｌ１、Ｌ２を形成する各構成情報は、検証例と同様にしてそれぞれ生成した。そして、比較例１及び比較例２についても、検証例と同様にシミュレーションツール上にてタイミングシミュレーションを行った。それら比較例１及び比較例２の検証結果についても図４〜図６に併せて示す。
　【００７９】
　図４に示すように、ＤＳＰブロック１２を使用した演算回路Ｌ１を２個形成した比較例１では、１７６ＭＨｚよりも上の動作周波数で、エラー発生率がほぼ１００％になった。ＤＳＰブロック１２を使用しない演算回路Ｌ２を２個形成した比較例２では、動作周波数が２０４ＭＨｚからエラーが発生し、動作周波数の上昇とともにエラーの発生率が１００％に近づくように上昇した。このことから、エラーの発生状況は回路ブロック９の組み合わせによって互いに異なることがわかる。なお、本発明を適用した検証例では、１７８ＭＨｚよりも上の動作周波数でエラー発生率がほぼ１００％となり、比較例１と同様なエラーの発生状況となった。
　【００８０】
　上記から比較例１では、１７８ＭＨｚ以上の動作周波数のとき、２個の演算回路Ｌ１のうち少なくとも一方から出力された演算結果データが誤った値となっていることが分かる。しかしながら、図５に示されるように、比較例１では、１７８ＭＨｚ以上のいくつかの動作周波数でエラーを検知しているが、その他の動作周波数ではエラーを検知していない。この理由として、比較例１では、同じ回路ブロック９の組み合わせでなる２個の演算回路Ｌ１を用いていることから、２個の演算回路Ｌ１でそれぞれ同じエラーが発生してしまい、それぞれ出力される演算結果データが全く同じとなり、その結果、エラーとして検知できないためである。比較例２では、エラー検知率がほぼ１００％であるが、２１８ＭＨｚよりも上の動作周波数では、１〜２％程度のエラー検知率の低下が見られた。
　【００８１】
　これらに対して本発明による検証例のエラー検知率は、すべての動作周波数において１００％となった。すなわち、比較例１及び比較例２のように回路ブロック９の組み合わせが同じ複数の演算回路が冗長化した構成よりも、本発明の検証例のように、回路ブロック９の組み合わせが異なる複数の演算回路Ｌ１、Ｌ２、すなわち多様性を持った複数の演算回路を形成した構成とすることにより、一段と確実にエラーを検知でき、かくして、エラーの検知率が向上することが確認できた。また、図６に示すように、検証例における不一致距離は、比較例１及び比較例２よりも３倍以上大きいことが確認できた。すなわち、比較例１及び比較例２のように同じ回路構成を有する複数の演算回路によって冗長化した構成を形成するよりも、本発明の検証例のように、互いに回路ブロックの組み合わせが異なる多様性を持った複数の演算回路を形成するほうが、エラーの検知能力が高いことが示された。
　【符号の説明】
　【００８２】
　１０　ＦＰＧＡ（プログラマブルロジックデバイス）
　１１　基本論理ブロック
　１２　ＤＳＰブロック
　２１　検証回路
　Ｌ１〜Ｌ３　演算回路
（５７）【特許請求の範囲】
　【請求項１】
（削除）
　【請求項２】
（削除）
　【請求項３】
（削除）
　【請求項４】
　複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスのエラー検証方法において、
　
ハードウェア記述言語で記述された同一の演算回路記述情報から、前記回路ブロックの組み合わせに関する条件が異なる複数の合成パラメータをそれぞれ適用して論理合成を行うことにより同じ演算機能を持ち、かつ前記回路ブロックの組み合わせが異なり接続状態が異なる複数の演算回路に対応した複数のネットリストを生成し、前記複数のネットリストから生成した構成情報をプログラマブルロジックデバイスに書き込み、前記複数のネットリストに対応した、
前記
、
　各前記演算回路でそれぞれ演算を行う演算ステップと、
　各前記演算回路からの演算結果を検証回路で検証する検証ステップと
　を有することを特徴とするプログラマブルロジックデバイスのエラー検証方法。
　【請求項５】
　前記回路形成ステップは、
　前記回路ブロックとしてＤＳＰブロックを含んだ前記回路ブロックの組み合わせでなる前記演算回路を少なくとも１つ形成するとともに、前記ＤＳＰブロック以外の前記回路ブロックの組み合わせでなる他の前記演算回路を少なくとも１つ形成することを特徴とする請求項４に記載のプログラマブルロジックデバイスのエラー検証方法。
　【請求項６】
　構成情報にしたがって複数の回路ブロックの組み合わせを変えることにより、演算機能が変更可能なプログラマブルロジックデバイスの回路形成方法において、
　前記回路ブロックの組み合わせに関する条件が異なる合成パラメータを順次設定する合成パラメータ設定ステップと、
　前記合成パラメータ設定ステップで前記合成パラメータが設定されるごとに、前記合成パラメータの下で論理合成を行い、ハードウェア記述言語で記述された同一の演算回路記述情報から複数の演算回路に対応した複数のネットリストを生成する論理合成ステップと、
　前記複数のネットリストから前記構成情報を生成する構成情報生成ステップと、
　前記構成情報をプログラマブルロジックデバイスに書き込み、前記複数のネットリストに対応した同じ前記演算機能を持ち、かつ前記回路ブロックの組み合わせが異なって接続状態が異なり、それぞれ演算結果を検証回路に出力して検証させる複数の演算回路を前記プログラマブルロジックデバイスに形成する形成ステップと
　を有することを特徴とするプログラマブルロジックデバイスの回路形成方法。