(57)【要約】  ＦＰＧＡのＣＲＡＭへのソフトエラーの影響を評価するシミュレーション方法に関する。FPGA内部に機能を集積するには、ＦＰＧＡへ集積したい回路結線情報(ネットリスト)を元に、FPGAの構成メモリ(コンフィギュレーションメモリ：CRAM)へのビット列(ビットストリーム)へ変換することで実現される。その際、FPGAで機能を実現するためのRTLから変換されたネットリストと、FPGAへ格納されるCRAMのデータ列(ビットストリーム)とは、1対1対応しているということを利用し、CRAMの内のビット情報の反転(故障注入)を回路へマッピング実施する。この事実を用いて、CRAMの各ビットの反転による影響を論理的なシミュレーションにより確認する手段を設けることで課題が解決される。さらに、シミュレーションの結果を、別途ユーザが設定する想定される危険側故障出力の期待値と比較する手段を設ける。
2017009956.tif 000002
【特許請求の範囲】
【請求項１】
論理回路情報をCRAMによって保持するFPGAについて、想定されるエラーを評価するシミュレータであって、
処理装置、記憶装置、入力装置、および、出力装置を備え、
前記記憶装置は、前記FPGAに形成すべき回路結線情報であるネットリストと前記CRAMに格納されるビット列であるビットストリームの１対１の対応情報を格納し、
前記入力装置は、評価対象となる前記ネットリストに対応する前記ビットストリームの入力を受付け、
前記処理装置は、エラー挿入ツールと期待値比較ツールを備え、
前記エラー挿入ツールは、
前記入力されたビットストリームに対して変更を加える手段と、
前記対応情報を参照し、前記ビットストリームの変更を前記評価対象となるネットリストに反映して故障挿入ネットリストを生成する手段を備え、
前記期待値比較ツールは、
前記故障挿入ネットリストに所定の入力を適用して論理的なシミュレーションを実施する手段と、
前記シミュレーションの出力結果を出力期待値と比較する手段を備える、
ことを特徴とするシミュレータ。
【請求項２】
前記出力期待値は、
真値および予め設定した危険側故障出力値を含む、
ことを特徴とする請求項１記載のシミュレータ。
【請求項３】
前記期待値比較ツールは、
前記シミュレーションごとに、前記危険側故障出力値と一致した出力結果を故障モード一覧リストとして出力する、
ことを特徴とする請求項２記載のシミュレータ。
【請求項４】
危険側故障率計算ツールを備え、
前記危険側故障率計算ツールは、
前記FPGAの実負荷接続および物理配置データと、前記故障挿入ネットリストと、前記故障モード一覧リストとを入力とし、
前記故障挿入ネットリストの故障箇所の物理配置情報を、前記実負荷接続および物理配置データと対応付けることにより特定して故障確率を推定し、
前記故障モード一覧リストの内容と対応付けて出力する
ことを特徴とする請求項３記載のシミュレータ。
【請求項５】
前記入力装置は、
前記エラー挿入ツールに対して、前記ビットストリームの指定個所の変更またはランダムな変更を指示する手段を有する、
請求項１記載のシミュレータ。
【請求項６】
前記出力手段は、
前記対応情報の出力を禁止する機能を備え、
シミュレーション結果を表示する際には、
前記ネットリストを基に作成した前記FPGAの論理接続状態を示す解析結果情報と、該解析結果情報中の前記ビットストリームに対する変更が影響する部分を特定する情報を表示することを特徴とする、
請求項１記載のシミュレータ。
【請求項７】
論理回路情報を、コンフィギュレーションメモリ（CRAM)と呼ばれる書き換え可能な記憶手段によって保持する、フィールドプログラマブルなLSI（FPGA)の設計支援システムにおいて、
処理装置、記憶装置、入力装置、および、出力装置を備え、
前記入力装置は、
該CRAMに格納する、第一の論理接続情報に対応する第一のビット情報の入力を受付け、
前記処理装置は、
該第一のビット情報の一部のビットを反転書き換えして、第二のビット情報を生成する第１の手段と、
該第二のビット情報を、該第一のビット情報と一対一対応している該第一の論理接続情報が変更されたことに対応させて、第二の論理接続情報に変換する第２の手段と、
該第二の論理接続情報を用いて論理的および回路的なシミュレーションを実行する第３の手段を有することを特徴とする、
半導体回路装置の設計支援システム。
【請求項８】
前記第３の手段は、
該第二の論理接続情報への一乃至複数の入力と、該複数の入力のそれぞれに対応する該シミュレーションの出力結果を、別途定める該入力に対応する出力期待値と比較する手段を持ち、
該出力期待値は、
該第一の論理接続情報でのシミュレーション時に得られる正しい結果と、該第二のビット情報生成にあたり予め故障原因を想定した1乃至複数の故障時の出力結果とで構成される期待値表として定義されて前記記憶装置に格納され、
該出力期待値と比較する手段は、
該シミュレーションの出力結果と該出力期待値とで一致検索を実施し、該期待値表に記載のいずれかの期待値と一致する場合には、該入力および該期待値を関連付けて、前記出力手段に故障モード一覧として表示する検証手段を有することを特徴とする、
請求項７記載の半導体回路装置の設計支援システム。
【請求項９】
さらに、該故障モード一覧にて表現された各々の故障に対して、ＬＳＩの配線情報、物理的な配置情報、製造プロセス上の欠陥情報、および、その他のＬＳＩの故障計算に必要な情報を元に、各故障モードに対応する故障確率を算出する手段を有する、
請求項８記載の半導体回路装置の設計支援システム。
【請求項１０】
論理回路情報をCRAMによって保持するFPGAについて、想定されるエラーを評価する半導体回路装置の設計支援方法であって、
処理装置、記憶装置、入力装置、および、出力装置を用い、
前記記憶装置は、
前記FPGAに形成すべき回路結線情報であるネットリストと前記CRAMに格納されるビット列であるビットストリームの１対１の対応情報を格納し、
前記入力装置は、
評価対象となる前記ネットリストに対応する前記ビットストリームの入力を受付け、
前記処理装置は、
前記入力されたビットストリームに対して変更を加える第１のステップと、
前記対応情報を参照し、前記ビットストリームの変更が反映された故障挿入ネットリストを生成する第２のステップと、
前記故障挿入ネットリストに所定の入力を適用して論理的なシミュレーションを実施する第３のステップと、
を実行する半導体回路装置の設計支援方法。
【請求項１１】
さらに、前記シミュレーションの出力結果を出力期待値と比較する第４のステップ、
を実行する請求項１０記載の半導体回路装置の設計支援方法。
【請求項１２】
前記評価対象となる前記ネットリストと該ネットリストに対応する前記ビットストリームは、前記FPGAで構成される回路の一部分に対応した部分情報であり、
前記第１〜第４のステップにおいて、前記部分情報について処理を行う、
請求項１１記載の半導体回路装置の設計支援方法。
【請求項１３】
前記回路の一部分は、
前記FPGAで実現するべき機能に応じて前記FPGAで構成される回路構成を分割した一部分、あるいは、前記機能を実現する上での安全コンセプトに基づいて分割した一部分である、
請求項１２記載の半導体回路装置の設計支援方法。
【請求項１４】
前記回路の一部分は、
前記FPGAで構成される回路構成のうちユーザの使用する論理に関係する回路に係る部分である、
請求項１２記載の半導体回路装置の設計支援方法。
【請求項１５】
前記回路の一部分は、
機能ブロック間の分離をＦＰＧＡ上で実施する際に、
Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ（ＬＵＴ）の出力に設けられているＦｌｉｐ  Ｆｌｏｐ（ＦＦ）の出力部で分離された前記機能ブロック、あるいは、
ＬＵＴの出力に設けられているＦＦの出力部、および、スイッチ回路部の出力部とで分離された前記機能ブロック、あるいは、
ＬＵＴの出力に設けられているＦＦの出力部、および、スイッチ回路部の出力部とで分離し、そのＦＦ出力部とスイッチ部との間に一乃至複数のＬＵＴおよびＦＦを設けることで分離された前記機能ブロックである、
請求項１２記載の半導体回路装置の設計支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＦＰＧＡ（field-programmable gate array）にかかり、特に産業用途向けの高信頼・高安全なシステムを構築するSRAM（Static Random Access Memory）ベースのFPGA論理実装および評価技術に関する。
【背景技術】
【０００２】
デバイスの微細化に伴い、ASIC（application specific integrated circuit）の製造コストが増加し、FPGAでの代替が望まれている。その際、Static Random Access Memory （SRAM）ベースのFPGAでは、ソフトエラーにより論理の構成が変化してしまうファームエラーが問題である。特に交通、金融、医療等の高信頼性が要求される産業応用に対して、SRAMベースFPGAを活用する上では、高信頼化や高可用化・高安全化の技術が必要とされている。【０００３】
このような状況の元、ＦＰＧＡベンダからは、ソフトエラーの耐性向上技術が開発されている(非特許文献１、２)。これらは主に、ＦＰＧＡのコンフィギュレーションメモリ（ＣＲＡＭ）の記憶内容について、ＣＲＣ：Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋを実施するものや、ＣＲＡＭのエラーを訂正する技術である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Altera AN-539-2014.12.15 “Test Methodology of Error Detection and Recovery using CRC in Altera FPGA Devices”， http://www.altera.com/literature/an/an539.pdf
【非特許文献２】Soft Error Mitigation Controllerhttp://www.xilinx.com/support/documentation/ip_documentation/sem/v4_1/pg036_sem.pdf
【非特許文献３】Functional Safety: International Electrotechnical Commission、http://www.iec.ch/functionalsafety/（国際標準IEC61508第二版）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
産業用途へ電子部品を適用する例が年々高まり、このような状況に対応すべく、国際標準IEC61508が制定され、2010年に第二版が発行されている(非特許文献３)。この規格書によると、LSIを安全関連系に適用するための方針が記載されている。【０００６】
重要な指標として、安全度水準（Safety Integrity Level: SIL）、連続動作モードにおける安全機能が危険側へ失敗する平均確率（Average Frequency of a dangerous failure of the safety function :PFH [単位：1/時間]）、安全側失敗確率（Safe Failure Fraction : SFF）、ハードウエアフォールトトレラント（HFT）が挙げられる。  SILは4段階にて定義され、最も低いのがSIL1、最も高いのがSIL4である。各SILに応じて、PFHが定義されており、IEC61508の第一章において、
SIL4： 10＾-9 ≦ PFH ＜ 10＾-8
SIL3： 10＾-8 ≦ PFH ＜ 10＾-7
SIL2： 10＾-7 ≦ PFH ＜ 10＾-6
SIL1： 10＾-6 ≦ PFH ＜ 10＾-5
と定義されている。【０００７】
本規格書の第2章において、ハードウエア設計に関する指針が提示されており、対応するSILレベルに応じて、SFFとHFTの関係が記載されている。例として、SIL3レベルの装置設計の場合を考える。SFF  ＜  60% のときは、ハードウエアの冗長度（HFT）を上げても要求は満たせないが、60％  ≦  SFF  ＜  90%  であれば、3重化相当（HFT=2）を組み合わせることで、SIL３対応の可能性が示され、90％  ≦  SFF  ＜  99%  であれば、2重化相当（HFT=1）を組み合わせることで、SIL３対応の可能性が示され、99％  ≦  SFF であれば、1重化相当（HFT=0）でも、SIL３対応の可能性が示されている。ただし、HFT＝N はN＋1 多重化相当という定義である。【０００８】
このように、目標とするSILに対応して、SFFの導出が重要であり、しかも、その値が正確に求められ、しかも、高い値であることが確認できれば、ハードウエア多重度を低くすることができ、低コスト化につながる。【０００９】
FPGAをこのような安全性の高い装置へ適用するに当たり課題に直面する。特に、FPGAはLSIで実現させたい機能をコンフィギュレーションメモリ(以後CRAMと呼ぶ)に集積するが、一般に、FPGAは供給ベンダが内部構造の詳細を秘匿としながらユーザに提供されるため、詳細な実装の構造をユーザ側で判断することが困難である。そのため、SFFの計算自体が非常に難しい。【００１０】
しかも、SRAM型のCRAMは、不揮発素子型のCRAMと異なりソフトエラー頻度が非常に多いという特徴がある。近年、ソフトエラーに対する安全性の影響評価が重要視されるようになり、SRAM型FPGA各ベンダにより、様々なソフトエラーの耐性向上技術が開発されユーザへ提供されるようになってきた。しかしながら、我々の検討の結果、CRAMのソフトエラー率を低減するだけでは、安全規格対応への適応が困難であるとの結論に至った。【００１１】
具体的には、CRAMのソフトエラーの発生状態をユーザが記述した論理的接続状況と関連させて把握し、その故障率および、その発生した故障が危険側であるか安全側であるか、また、その故障は診断機能で検出できるか否かを算出することが必要になる。FPGAを高安全対応のアプリケーションに適用するためには、構成回路の安全性に対する評価を定量的に実施しなくてはならない。しかしながら、現状は、コンフィグレーションメモリのソフトエラーについて、その影響について定量評価することが困難である。
【課題を解決するための手段】
【００１２】
本発明の一側面は、論理回路情報をCRAMによって保持するFPGAについて、想定されるエラーを評価するシミュレータである。当該シミュレータは、処理装置、記憶装置、入力装置、および、出力装置を備えた情報処理装置で構成することができる。記憶装置は、FPGAに形成すべき回路結線情報であるネットリストと前記CRAMに格納されるビット列であるビットストリームの１対１の対応情報を格納しておく。入力装置は、評価対象となるネットリストに対応するビットストリームの入力を受付ける。処理装置は、エラー挿入ツールと期待値比較ツールを備える。エラー挿入ツールは、入力されたビットストリームに対して変更を加える手段と、対応情報を参照し、ビットストリームの変更を前記評価対象となるネットリストに反映して故障挿入ネットリストを生成する手段を備える。期待値比較ツールは、故障挿入ネットリストに所定の入力を適用して論理的なシミュレーションを実施する手段と、シミュレーションの出力結果を出力期待値と比較する手段を備える。【００１３】
具体的な例においては、出力期待値は、真値および予め設定した危険側故障出力値を含んでもよい。【００１４】
他の具体的な例においては、期待値比較ツールは、シミュレーションごとに、危険側故障出力値と一致した出力結果を故障モード一覧リストとして出力する。【００１５】
他の具体的な例においては、入力装置は、エラー挿入ツールに対して、ビットストリームの指定個所の変更またはランダムな変更を指示する手段を有する。【００１６】
本発明の他の一側面は、論理回路情報を、コンフィギュレーションメモリ（CRAM)と呼ばれる書き換え可能な記憶手段によって保持する、フィールドプログラマブルなLSI（FPGA)の設計支援システムである。このシステムは、処理装置、記憶装置、入力装置、および、出力装置を備える。入力装置は、CRAMに格納する、第一の論理接続情報に対応する第一のビット情報の入力を受付ける。処理装置は、第一のビット情報の一部のビットを反転書き換えして、第二のビット情報を生成する第１の手段と、第二のビット情報を、該第一のビット情報と一対一対応している該第一の論理接続情報が変更されたことに対応させて、第二の論理接続情報に変換する第２の手段と、第二の論理接続情報を用いて論理的および回路的なシミュレーションを実行する第３の手段を有する。【００１７】
さらに具体的な構成例では、第３の手段は、第二の論理接続情報への一乃至複数の入力と、複数の入力のそれぞれに対応するシミュレーションの出力結果を、別途定める該入力に対応する出力期待値と比較する手段を持つ。出力期待値は、第一の論理接続情報でのシミュレーション時に得られる正しい結果と、第二のビット情報生成にあたり予め故障原因を想定した1乃至複数の故障時の出力結果とで構成される期待値表として定義されて記憶装置に格納されている。出力期待値と比較する手段は、シミュレーションの出力結果と該出力期待値とで一致検索を実施し、該期待値表に記載のいずれかの期待値と一致する場合には、入力および期待値を関連付けて、出力手段に故障モード一覧として表示する検証手段を有する。【００１８】
本発明のさらに他の一側面は、論理回路情報をCRAMによって保持するFPGAについて、想定されるエラーを評価する半導体回路装置の設計支援方法であって、処理装置、記憶装置、入力装置、および、出力装置を用いる方法である。記憶装置は、FPGAに形成すべき回路結線情報であるネットリストと前記CRAMに格納されるビット列であるビットストリームの１対１の対応情報を格納する。入力装置は、評価対象となるネットリストに対応する前記ビットストリームの入力を受付ける。前記処理装置は、入力されたビットストリームに対して変更を加える第１のステップと、対応情報を参照し、ビットストリームの変更が反映された故障挿入ネットリストを生成する第２のステップと、故障挿入ネットリストに所定の入力を適用して論理的なシミュレーションを実施する第３のステップと、を実行する。【００１９】
本発明のさらに具体的な構成では、シミュレーションの出力結果を出力期待値と比較する第４のステップを実行する。
【発明の効果】
【００２０】
FPGA設計における高効率なCRAMエラーインジェクション評価方法を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本願実施例のツールおよびデータの関係を示す論理ブロック図。
【図２】（A）LUTの構成および真理値表の関係、（B）一例として設計した論理回路例、（C）故障挿入シミュレーション時に変更された論理回路例の概念図。
【図３】エラー挿入によるCRAMビットへの故障注入から論理接続情報(ネットリスト)への変換を示す流れ図。
【図４】エラー挿入後の期待値評価の方法を示す実施例の論理ブロック図。
【図５】設計フローを示す実施例を示す流れ図。
【図６】本実施例をIEC61508の設計フローに関連付けた実施例の流れ図。
【図７】階層設計および設計データの階層化を説明する概念図。
【図８】FPGAチップに機能を集積する概念図。
【図９】図８記載の分離部分の実施例を示す概念図。
【図１０】CRAMのビット構成およびエラーインジェクションを説明する概念図。
【図１１】実施例でのGUI（Graphic User Interface）の一実施例を示す平面図。
【図１２】GUI上で表現する回路変更情報の実施例。（A）エラーモード、CRAM bit 、エラー箇所のそれぞれを提示する実施例、（B）エラーモードとエラー箇所提示を示す平面図。
【図１３】配線スイッチ部のCRAM構成を示し永久故障をCRAMソフトエラーで代替表現する実施例概念図。
【図１４】実施例７のツールおよびデータの関係を示す論理ブロック図。
【図１５】実施例７の処理フローを示す流れ図。
【図１６】ネットリストからRTLへの変換方法について説明する概念図。
【発明を実施するための形態】
【００２２】
以下図に従い、本発明の実施例について説明を加える。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００２３】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
【００２４】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００２５】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００２６】
一般にロジックLSIの機能論理の設計は、ターゲットのLSIで実現したい機能の仕様を明確にした後に、その機能を実現するための論理仕様を作成し、論理記述言語(たとえばVerilog HDL（Hardware Description Language） やVHDL)を用いて設計する。この論理回路はRTL(Register Transfer Level)と呼ばれる手法にて記述される。
【００２７】
一般的に、RTLからLSIへの集積は以下の手順で実施される。すなわち、RTLの論理接続情報を実際のLSIに集積されるトランジスタの物理的な配置を考慮していわゆるネットリストへ変換し、さらに、各信号線のタイミング制約を考慮して静的タイミング解析シミュレーション（STA）を実施しその配置を最適化した後に、LSIへの集積を実現する。FPGAにおいてもほぼ同様の手続きで実施され、このRTLを設計後、論理合成を実施し、信号線のタイミングを調整しながら、FPGAのCRAMへ格納するデータへの変換を実施する。この変換をCRAMへのマッピングと以後呼ぶ。
【００２８】
CRAMへのマッピングについては、FPGA内部に集積された基本論理回路および配線接続スイッチの構成の物理的な配置を考慮し、論理記述情報から変換されたトランジスタレベル結線情報(ネットリスト)を元に、FPGAの構成メモリ(コンフィギュレーションメモリ：CRAM)のビット列(ビットストリーム)へ変換することで実現される。FPGAのCRAMへこのビットストリームを格納することによって、所望の動作をターゲットとするFPGAで実現できることになる。
【００２９】
ここで重要な点は、RTLからネットリストへの変換、および、そのネットリストを用いた各種シミュレーションは、サーバ等の装置で実施され、最終結果のビットストリームのみがFPGAへ格納され、ユーザが所望する動作が実現されることである。すなわち、FPGAで機能を実現するためのRTLから変換されたネットリストと、FPGAへ格納されるCRAMのデータ列(ビットストリーム)とは、1対1対応しているということである。したがって、CRAMの各ビットは回路へのマッピングは原理的に可能である。その際、FPGAの内部構成を秘匿とするために、CRAMのビットストリームを、暗号化等を施して格納する場合でも、もともとのネットリストとビットストリームとの対応は、必ず一対一対応となる。
【００３０】
この事実を利用すれば、CRAMのビットストリームの一部が変更された情報を、ネットリストへ反映させることは可能である。よって、CRAMの各ビットの反転による影響を論理的なシミュレーションにより確認する手段を設けることで課題が解決される。
【００３１】
さらに、シミュレーションの結果を、別途ユーザが設定する想定される危険側故障出力の期待値と比較することで、エラー状態が危険側となる状態について抜き出すことができるので、考慮すべき危険側のエラーモード種類を隈なく列挙させることが可能になる。
【００３２】
本技術は、回路ネットリストとFPGAのコンフィギュレーションメモリの対応が重要であり、FPGA設計ツールに統合化される形で運用されると望ましい。
【００３３】
以下、具体的に実施例を説明する。
【実施例１】
【００３４】
図１を用いて、本願発明の具体的な実施例の全体構成について説明する。本実施例は、FPGA論理実装ツールと、FPGA故障モード評価ツールと、FPGA故障確率計算ツールからなるFPGA設計支援ツールで実現されることが望ましい形態であろう。【００３５】
具体的なシステム構成は、処理装置、記憶装置、入出力装置を備えたサーバ等のハードウェアを、ソフトウェアによる情報処理で利用する形態とすることができる。【００３６】
FPGA論理実装ツール（１００）は、既存のFPGA論理実装ツールであり、本実施例は、これらの従来知られているツール群に付加される形態になるものと考えられる。そのため、本実施例の特徴的な点は、エラーインジェクション評価ツール（１０１）を設けることである。【００３７】
FPGA論理実装ツール（１００）は、論理合成ツール（１１０）および物理配置ツール（１１１）で構成され、その他、図示しないが、タイミング解析ツールなどを含んで構成される。論理合成ツール（１１０）は、設計データであるRTLを入力とし、ゲートレベルの接続情報である、いわゆるネットリスト（１２０）を出力する。このネットリスト（１２０）の生成には、タイミング解析などを経て、所望の動作速度が得られる配置に設計される。このネットリスト（１２０）は、物理配置ツールにより、FPGA内部のLUTやスイッチの制御をつかさどる、いわゆる構成メモリ（Configuration Memory：CRAM）へ格納するための、ビット列(以降、ビットストリーム（１２１）)へ変換される。【００３８】
本実施例では、この、ネットリスト（１２０）およびビットストリーム（１２１）を利用し、後述するCRAMのビットストリームの一部に対してエラーを恣意的に発生させた際の影響度合いをシミュレーションにより評価する手段を持っていることが特徴である。【００３９】
エラーインジェクション評価ツール（１０１）は、CRAMのビットストリームの一部に恣意的なビット反転エラーを発生させるエラー挿入ツール（１１２）と、その影響を評価するSIM/期待値比較ツール（１１３）と、危険側故障率計算ツール（１１４）とで構成される。【００４０】
エラー挿入ツール（１１２）は、設計されたネットリスト（１２０）と、ビットストリーム（１２１）と、ネットリストｖｓビットストリーム対応情報（テーブル）（１２２）とを入力とする。ネットリストｖｓビットストリーム対応テーブル（１２２）には、ネットリストとビットストリームの対応が一対一に格納されている。このような情報はFPGAの設計あるいは製造業者が保有しており、ここから提供を受けることができる。シミュレーションの実施者にFPGAの内部接続構造を秘匿したい場合は、対応テーブル（１２２）は出力についてアクセス制限をかけてブラックボックス化することが好ましい。ネットリストとビットストリームの対応については、後に図２で原理を説明する。【００４１】
エラー挿入ツール（１１２）は、ビットストリーム（１２１）の一部にビット反転操作を実施して、恣意的にエラーを挿入した後、ネットリストｖｓビットストリーム対応テーブル（１２２）を利用して、エラー挿入結果をネットリスト（１２０）に対して変更する。そのネットリスト（１２０）の変更結果として、ビットストリーム上の故障が反映された、故障挿入ネットリスト（１２４）が得られる。あるいは、ネットリストｖｓビットストリーム対応テーブル（１２２）を利用して、エラーを挿入したビットストリームから、それに対応したネットリストを生成する。【００４２】
このようなエラー挿入ツール（１１２）は、FPGAにおいて、配線の断線、ショート、あるいはCRAMへの放射線の影響等を模擬することができる。想定する故障の状況に応じて、エラー挿入の方式を変えてもよい。【００４３】
SIM/期待値比較ツール（１１３）は、エラー挿入ツール（１１２）が生成した故障挿入ネットリスト（１２４）と、エラー挿入の影響をユーザが評価するために作成したSIM入力（１３１）とを用いて論理的なシミュレーションを実施した際の出力結果を、ユーザが定義する出力期待値（１３２）と比較することで故障モードを評価するツールである。【００４４】
出力期待値（１３２）は図４で後述するように、ある入力に対する、エラーの発生していない状態の演算結果としての真値と、エラーが発生した際の複数の危険側故障値により構成されている。SIM/期待値比較ツール（１１３）は、故障挿入ネットリスト（１２４）とSIM入力（１３１）を用いて、故障挿入された状態のシミュレーションが実施可能である。【００４５】
このシミュレーション自体は、既存の論理的なシミュレーションの手法を活用して実施することができ、シミュレーション結果としての動作波形図を出力することができる。出力結果はデータベース（１２５）に蓄積し分析に用いることができる。また、この実施例では、最も興味があることとして、ユーザが想定した出力期待値（１３２）の中の、危険側故障のいずれかに一致するかの判定を作成することによるエラー挿入の影響評価が実施できることである。【００４６】
ユーザとして確認したいことは、エラーの挿入によりそのエラーが重篤な状況を引き起こすかどうか、および、その故障が想定していた、いずれの故障モードに該当するのかを確認することでもあるので、サマリが作成される機能は有用である。【００４７】
また、この期待値比較は、ネットリストの詳細情報を開示困難な形とする場合でも、確認が容易な評価手法になる。したがって、本実施例では、その評価の結果として、ソフトエラー挿入によって引き起こされる故障モード一覧リスト（１２６）を出力することが特徴である。【００４８】
故障モード一覧リスト（１２６）には、対象となる回路（機能ブロック）について、起こりうるエラーが網羅できるので、この結果を表示装置に表示する等して、回路設計に反映することができる。故障モード一覧リスト（１２６）の最もシンプルな形態は、入力と、その入力に対応して機能ブロックAから出力された出力のうち、危険側故障を示す出力期待値データ（１３２）と一致した出力のリストである。【００４９】
この他、故障モード一覧リスト（１２６）としては、出力期待値（１３２）の危険側故障値と、それに対応するビットストリーム、ネットリスト、あるいは、当該故障に関する付加情報（例えば故障内容や影響の説明、重要度レベル、故障対応方法、故障種別その他）の組合せが考えられる。【００５０】
あるいは、危険側故障の出力期待値データ（１３２）を用いず、出力期待値（１３２）の真値と合致しないすべての出力と、それに対応するビットストリーム、ネットリスト、付加情報の組合せ等を故障モード一覧リストとしてもよい。もっとも、この場合には、重要性の低い故障までリストアップされるデメリットがある。【００５１】
この段階では、故障確率は求めることはできないが、ソフトエラー挿入によって引き起こされる、想定される故障モードは、原理的にすべて挙げることができるので、故障モードの検証ツールとして活用できる。したがって、このツールだけでも高安全化の検証ができる効果がある。【００５２】
さらに、本実施例においては、危険側故障率計算ツール（１１４）を設けている。この危険側故障率計算ツール（１１４）は、FPGAの物理配置ツールから出力された実負荷接続/物理配置データ（１２３）と、故障挿入ネットリスト（１２４）と、FPGA故障モード一覧リスト（１２６）とを入力し、危険側故障率（１２７）を出力する。【００５３】
危険側故障率計算ツール（１１４）は、故障挿入ネットリストの故障箇所の物理配置情報を実負荷接続/物理配置データ（１２３）と対応付けることにより特定し、たとえば、配線のマイグレーションによる断線やショートの確率や、配線長やスイッチ回路やLUT等の論理回路の使用状況、さらには、FPGAに搭載されるハードワイヤードの回路の故障率を加味して、注目する故障モードにおけるCRAMのソフトエラーによる機能の故障確率を求められることが特徴である。【００５４】
図１には、特に限定してこなかったが、ひとつのソフトエラー挿入に対して、故障挿入ネットリストがひとつ対応し、複数のSIM入力とその入力に応じた想定される複数の出力期待値とのSIM実行および故障モードを出力しているかのごとく表現した。しかしながら、この評価は、複数のエラーを順次挿入して複数の故障ネットリストを作成し、故障モード一覧リストには、それら各々の複数の故障ネットリストに応じた形で、対応する複数のデータを格納できるように実現してもよい。
【実施例２】
【００５５】
次に、本実施例の目的をより明確にするために、具体的なCRAMへのエラー挿入の影響について述べる。ここでは、一例として4入力のルックアップテーブル（LUT）の場合について述べる。4入力のLUTは、周知の通り、入力が4つで出力が1つの論理回路を表現することが可能である。それぞれを、入力I0、I1、I2、I3、出力O1とすると、入力は2^4=16通りの組み合わせが可能である。したがって、16ビットのメモリがあれば、入力I0，I1，I2，I3の値に応じて切り替えることで、ひとつの出力値が決められる。【００５６】
図２を用いて具体的に示す。図２（A）に示すように、I0〜I3の各入力信号と、出力信号Oとの間に真理値表の関係がある場合、この出力信号との対応がCRAMに入力される。ルックアップテーブルは、図２（A）の右に一例が示されるように、CRAMの出力が、この場合では、4段のトーナメント型のセレクタ列に入力されており、各段のセレクタはここに図示したようにI0〜I3の値によって選択される。この図では、この真理値表の出力Oに相当する欄に記載した、上から下への一連のビット列が、対応するLUT回路を構成するCRAMのビットに対応する。これは、回路構成の名前の由来でもあるが、いわゆる論理の真理値表と一致しており、CRAMのデータはそのまま出力信号になる。【００５７】
ここで示したCRAMの入力例を論理回路図で示したものが、図２（B）である。AND回路とOR回路にて構成されている。この回路を記述するCRAMのビットは、“0001000100011111”とあらわされる。これは、図2（A）の真理値表の出力O、すなわち、CRAMの値の上から下へのビット列に等しい。【００５８】
このような対応がある中で、CRAMへのエラーインジェクションを説明する。CRAMのあるビット、この例では、先頭から3ビット目のビットが変化した場合について説明する。ここでは、CRAMのビットは、3ビット目が”０“から”１”へ変更され、結果的にCRAMのビット列が“0011000100011111”に変化させる操作をさす。図２（A）の中で、E.I.(エラーインジェクション)と記載したことに対応する。この状況は回路図で表すと、図２（C）の状態になる。図２（B）の回路と図２（C）の回路は、論理的にまったく異なっている。本実施例では、このように、CRAMの1ビットがソフトエラーによって変更されてしまった際の、回路動作に及ぼす影響を定量的に評価することが目的になる。【００５９】
図３を用いてエラーインジェクションシミュレーションの実施方法について説明する。まず、ユーザが実現したい機能を反映させた論理接続情報A(ネットリストA)を準備する（S301）。ネットリストAはFPGAで構成したい、目的とする回路であり、本シミュレーションでの評価対象となる。後述するようにこれは、FPGAの一部分の機能を切り出したものでもよい。【００６０】
次にネットリストAを用いて、CRAMビットストリームAを生成させる（S302）。【００６１】
その後、このCRAMビットストリームAに対して、一部のCRAMビットを反転させる処理、すなわち、エラーインジェクションを実施してCRAMのビットストリームBを生成する（S303）。後述するように、CRAMビットの反転個所は目的に応じて選択することができる。【００６２】
その後、このCRAMビットストリームBに対応する論理接続情報B(ネットリストB)を生成する（S304）。ビットストリームBから論理接続情報Bを生成する際には、既述のようにネットリストとビットストリームの対応が一対一に対応付けられている情報を利用すればよい。エラーインジェクションシミュレーションは、このネットリストBに対してユーザ指定の入力データを用いて実施される。【００６３】
図４と図１を用いて、SIM期待値比較ツール（１１３）で実行される、エラー挿入後の期待値評価の方法について述べる。ここでは、論理的な接続条件の確認を念頭に置いた設計について述べる。評価対象のブロックを機能ブロックA（４０１）とする。この機能ブロックAは、設計当初のネットリストAから生成されたビットストリームAで構成されているとする。このビットストリームAに、エラー挿入ツール（１１２）はエラーインジェクションを、図３で説明した手順で実施する。ここでは、機能ブロックAはすでに、ビットストリームBに変換され、ネットリストもネットリストBに変換されているものとする。ネットリストBにはエラーが含まれているという設定である。この状況で論理的なシミュレーションを実施する。【００６４】
シミュレーションに当たっては、まず、この機能ブロックをテストするための、入力データの準備が必要になる。ここでは、それがｎaビットの入力データビット列（１３１）で表現されると考える。すなわち、機能ブロックAの入力はｎa本の入力信号があることになる。評価に当たっては、このｎaビットの信号を複数（０〜ＮＴＰ）準備した、いわゆるテストベクタで構成されている。これは、機能ブロックを検証する上で検証のカバレッジを向上させる目的がある。これらの入力データは図１のSIM入力（１３１）として準備される。【００６５】
本実施例では、そのテストベクタのひとつの入力パタンに対して、ネットリストB の状態での機能ブロックAの動作シミュレーションを実施する。ここでは、機能ブロックAの出力はｎｂビットと仮定する。【００６６】
このシミュレーションに先立ち、ユーザは、あらかじめ決めておいたデータ、すなわち、機能ブロックにエラーが存在しない状態の出力値(真値)と、エラーが生じた際に危険側になってしまう状況を再現する出力値とを出力期待値データ（１３２）として準備する。ここでは、誤った動作により誤った信号が出力される場合である。例えばそのような出力を故障時の出力期待値データ(＃e０〜＃eｎ)として準備する。なお、エラーの内容によっては、そもそも回路として動作せず出力がない場合がある。出力がない場合は、安全側の故障の場合と危険側であるが潜在化した故障の場合とがある。特に後者の割合を定量的に減らすことが機能安全では重要である。本実施例を用いて故障モードを定量的に適切に確認するためには、後述するような機能サブブロックにさらに分割した階層化設計による評価部の最適化や、適切な内部状態の診断回路を設けることで、潜在故障を効率的に検出できるようにすると、より効果がある。【００６７】
このシミュレーションでは、一例としてシミュレーションの結果の値と上記データとを出力期待値比較手段（４０２）で比較する。その結果、危険側故障となる場合(危険側故障)を抽出し、その危険側故障に一致する場合をまとめて、危険側故障モード一覧リスト（１２６）として出力する機能を有している。出力結果としての危険側故障は、＃e０、＃e1、・・・、＃eｎ、と ｎ＋１ 通りのパタンで構成されてもよい。出力としてのデータは、入力パタン番号（＃I0〜＃NNTP）に対応する入力と、その入力パタン番号に対応したシミュレーション結果に対応する出力結果との期待値比較評価をまとめることができればよい。【００６８】
入力テストベクタが複数の入力パタン数NTPで構成されている場合は、各々について実施する。また、テスト用の入力テストベクタは、総当り（２＾（ｎa））である必要はなく、あらかじめ、安全コンセプト等で検討した危険側の可能性をあぶりだす最小限の構成で実施することも可能である。【００６９】
ブロックAへの入力信号本数の増減などの、機能ブロックAの動作を検証するための、通常の論理シミュレーションでは想定外の入力は、別に検証するように切り分けると都合がよい。たとえば、ブロックAの前段の故障として対応するように、問題を切り分ける。機能ブロックAの可能な入力種を制限することで、検査項目数の増大を防ぐことができる。【００７０】
また、別の実施の形態としては、出力信号のみの比較にとどまらず、機能ブロックの内部ネット情報に対する期待値比較も可能である。上述したように、危険側の潜在障を定量的に減らす上で、階層化設計による評価部の最適化や、適切な内部状態の診断回路を設けることが効果的であるが、本実施例は実機評価ではなくシミュレーション評価もできることが特長であるので、内部の全信号の結線について、原理的にすべてのノードの指定して信号線の遷移動作を確認することが可能である。したがって、ツール内に内部信号の遷移をモニタする機能や、より効果的に故障状態を検出するためのツール上に存在させる診断回路（比較器等の機能を有した情報処理）を設けることで、より効果的な検証が可能になる。いずれの場合でも、このシミュレーションを実施するために必要な、ツールが使用可能な計算機メモリ格納領域を計算機およびツール内に設け、このメモリ内でデータを蓄積し、比較評価を実施すればよい。【００７１】
さらに、このような評価においては、ＦＰＧＡの実機が不要であるので、いわゆるクラウドでも評価が可能である。そのように実施することで、計算資源をふんだんに活用できるので、処理の高速化が可能である。その場合、ＦＰＧＡに接続する計算機へ、設計完了後にＦＰＧＡのＣＲＡＭにロードするためのビットストリームデータをダウンロードし、その計算機からＦＰＧＡへデータ転送すればよい。【００７２】
なお、この機能ブロックＡは、後述する機能サブブロックとして扱うことも可能である。機能ブロックを細分化させることで、検討するテストパタン数を削減できる効果がある。【００７３】
図５で、設計フローについて説明する。エラーインジェクションを想定した設計フローの一実施例である。まず、FPGAで実現させたい論理仕様を策定する（５０１）。FPGAへ搭載する論理は、安全性を考慮して、安全系機能ブロックと安全非関連機能ブロック等に分類して設計される（５０２）。各機能ブロックは、さらにサブブロックへ分割されて設計される場合もある（５０３）。安全関連系については、必要に応じて診断機能を追加する（５０４）。一連の検討が進んだ後、論理設計が実施される（５０５）。論理設計が完了した段階で、論理検証（５０６）が実施される。その後、ゲートレベルのネットリストが生成され（５０７）、タイミング検証が実施され（５０８）、タイミング違反がクリティカルでないことを確認してCRAMのビットデータが生成される（５０９）。本実施例は、CRAMのビットデータが生成された後に、エラーインジェクションシミュレーションによる検証（５１０）を実施する。【００７４】
エラーインジェクションシミュレーションにおいては、検証すべきネットリストと該ネットリストに対応するビットストリームの入力を受付ける際に、それらのデータは上記のようにブロックあるいはサブブロック化されている。すなわち、シミュレーションは、FPGAで実現するべき機能に応じて分割され、あるいは、それらの機能を実現する上での安全コンセプトに基づいて分割されたデータにより実行される。【００７５】
図６は、IEC61508で規定されている設計フローに本実施例を組み込む例を示している。IEC61508では、設計・検証のフローを図５に示すようなV字型のフローで設計することを規定している。すなわち、テスト仕様（Ｓ６００）と並行し、設計のフェーズと検証のフェーズに分けて実施される。【００７６】
まず設計フェーズであるが、FPGAの要件仕様を確定（Ｓ６０１）後、FPGAへ集積する回路アーキテクチャの仕様を決定する（Ｓ６０２）。その後、論理モジュールの機能設計（Ｓ６０３）と集積設計（Ｓ６０４）を実施し、論理合成を実施する（Ｓ６０５）。合成された論理について、FPGA上にマッピングするために、配置配線の合成を実施する（Ｓ６０６）。【００７７】
一方、検証のフェーズは、まず、配置配線の合成結果を用いて、各種信号線のタイミング制約の検証を実施する（Ｓ６０７）。その後、ゲートレベルのネットリストを用いて、実際の負荷を想定したシミュレーションを実施する（Ｓ６０８）。その後、FPGAのCRAMへ格納するビットストリームに変換する（Ｓ６０９）。【００７８】
本実施例では、この段階で、CRAMに発生するエラーの状況をエラーインジェクションシミュレーション（Ｓ６１０）により実施し、検証する。最後に、FPGA集積の要件仕様と照らし合わせて、妥当性の確認を実施する（Ｓ６１１）。
【実施例３】
【００７９】
図７を用いて本願発明の別の実施例を説明する。この実施例は、安全関連系の機能ブロックを階層化して設計する際の実施例となる。上記の実施例では、サブブロックへの分割を想定していたものの、それらのサブブロックを個別に設計する詳細について述べていなかった。本実施例では、サブブロックの階層での独立的な設計を念頭に置いた実施例となる。【００８０】
安全関連系全体機能ブロックを設計する際、それらを設計上の機能や運用管理上の診断回路の付加を考慮して、適切なブロックに分けて設計することが望ましい場合がある。このような状況に対応するために、安全関連系全体機能ブロックを機能サブブロックに分割し、それぞれに対して診断機能(回路)を追加する。この診断回路としては、ロックステップ対応や、パリティ付加、ECC付加等の診断手法を講じればよい。この際、これらの診断機能つきの機能サブブロックを、それぞれ独立性を保ちながら機能サブブロックネットリストを生成する。独立性を保つということは、たとえば、診断つきの機能ブロックA‘を実装する部分に、診断つきの機能ブロックB’の回路の一部が実装時含めて混在しないようにすることを指す。【００８１】
機能サブブロックのネットリストは、それぞれ、機能サブブロックのビットストリームに変換されて、エラーインジェクション評価が各機能サブブロック単位で実施できることが特徴である。【００８２】
図８に、図７の方法で設計した、FPGA８０１の機能サブブロックA’８０２、 機能サブブロックB’８０３、 機能サブブロックC’８０４のFPGA実装の一実施形態を、示す。機能サブブロックA’、 機能サブブロックB’、 機能サブブロックC’間は物理的にも分離されている。【００８３】
また、各機能ブロックは、用途機能に応じて大きなブロックに分割されている。例えば、重要部分８０５と非重要部分８０６である。このように区分することにより、重要部分８０５のブロックのみをシミュレーション対象とすることが容易となる。また、これらの機能ブロック間は分離部分８０７で分離されている。具体的な、分離方法としては、図９に示すような分離方法が考えられる。【００８４】
図９Aは、機能サブブロックLと機能サブブロックRとの物理的分離を示す一実施形態である。機能サブブロック間の分離をフリップフロップFFの出口（出力）で設定することが特徴である。機能サブブロックLにここに図示したLUTとFFが含まれ、スイッチおよび配線は機能サブブロックRに属する。このようにすると、機能ブロックの出力値の評価として、FFのデータで比較ができることになるので、検証の際の比較が容易になる。【００８５】
図９Bは、図９Aと同様に、機能サブブロックからの出力部であるFFにて分離する。さらに、スイッチ（SW）部と配線部を別の領域として分離して、LUTの入力からとする中間領域を設けることが特徴になる。これにより、スイッチSW部分は、別途、LSI設計時のレイアウト情報、回路結線情報（スケマティク）、結線の確認手段（LVS）等の技術を活用することにより、SIMと切り離して、CRAMのビット反転の影響を検討することができる。この場合は、シミュレーションによる確認の手間が省けるので、時間的な効率が上がる効果がある。このときの、確認方法としては、機能ブロック間の相互接続が発生するか、誤接続先がオープンかドライバでドライブされているかは結線情報でわかるので、入力テストベクタを考える規模が小さくできる。【００８６】
図９Cは、図９A、図９Bと同様に、機能サブブロックからの出力でFFにての分離とともに、図９Bと同様にスイッチ（SW）部と機能サブブロックRのLUT入力部を分離し中間領域を構成する際、その中間領域内に、さらに、LUTやFFを含むことが特徴になる。このLUTやFFは複数段で構成されてもよい。これにより、明らかに、機能サブブロックLと機能サブブロックRの分離領域について、自由度が持たせられる構成ができるとともに、この中間部分に対する検証を実施することで、検証の効率が向上する。【００８７】
以上のように、機能ブロック間の分離をＦＰＧＡ上で実施する際に、Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ（ＬＵＴ）の出力に設けられているＦｌｉｐ  Ｆｌｏｐ（ＦＦ）の出力部で分離することは有効な手法である。
【実施例４】
【００８８】
図１０は、CRAMのビット列を概念的に示したものである。CRAMのビットストリーム１００１は、FPGA内のCRAMへ格納するためのビットの列によって表現される。本実施例のエラーインジェクションシミュレーションは、FPGAのCRAMの任意の位置に、エラー発生のシミュレーションが可能である。ただし、実際の評価に当たっては、ユーザが使用している領域に限って検証できればよい。したがって、FPGAの設計上、ユーザが使用していないビットが明らかになる場合は、エラーインジェクションによりシミュレーションを実施する上では、ユーザの使用ビットにのみエラーを発生させて評価することが効果的である。【００８９】
図１０では、ｘと記載された位置１１０２にエラーが発生した（ビットが反転している）という想定であり、この条件は、危険側故障の対応したエラーモードe＃ｍに対応していることが紐付けられるようになっている。【００９０】
なお、FPGA回路では、集積されているすべてのLUTやスイッチがユーザで使用されているとは限らず、一部はユーザが使用していない非使用ビットになっている。エラーインジェクションを効率的に実施するために、CRAMのビットに対して、ユーザ回路に影響を与える重要ビットとユーザ回路に影響を与えない非重要ビットに分類すると効果的である。この図にはその状況も説明している。【００９１】
この図に示す非重要ビットは、実際にユーザ回路に割り当てられていない非使用ビットとともに、実際にはユーザは使用していないが、ユーザ回路が使用する論理と直接的あるいは間接的に関連性が高い未使用のLUTおよびスイッチを除いた回路部分として定義される。また、重要ビットとは、ユーザが使用しているCRAMビットとともに、ユーザ回路に関連性の高いLUTおよびSWに関するCRAMビットで構成される。本実施例では、ユーザが使用しているCRAMのビットについてソフトエラーが発生した際にその影響を調べることが重要であるので、ユーザ使用ビットに関連する、重要ビットにのみエラーを発生させて、その影響を検証することが検証効率化の観点で重要になる。
【実施例５】
【００９２】
図１１は本願発明の実施の形態としての、設計ツールのGUIに関する実施例である。解析結果を回路に実装する実装ボタン１００１と、CRAMのエラーインジェクションを実施するための、エラー挿入ボタン１１０２と、そのエラー挿入の状態でのシミュレーションを実行するためのボタン１１０３と、ユーザが指定した故障モードとの比較を実施する解析ボタン１１０４とを備えている。このボタンは、機械的なボタンであっても、電磁的な画像表示装置にて表現された、アプリケーションソフトウエアで示される選択項目の形であってもよい。【００９３】
挿入するエラーはビットストリームの任意のビットを変更する方法が考えられる。また、任意の回数ランダムにビットを変更する方法でもよい。【００９４】
さらに、この評価に際しては、回路図１１０５や、FPGAへの実装状態図１１０６、論理的なシミュレーションの出力結果（波形図）１１０７、および、解析サマリ１１０８が表示されることが望ましい。解析サマリ１１０８には、先に述べた危険側故障モード一覧リスト１２６に基づいた内容が表示される。【００９５】
図１２には解析結果表示例を示す。回路の変更の影響を示すものとしては、図１２（Ａ）の解析結果表示例１に示すように、エラーモードe#mや、CRAMのビット情報の変化と回路変化の状態を示せるようになっていることが考えられる。この例では、図２に記載の例で説明している。このようにすることで、CRAMのビットストリームに挿入した、エラーの影響について、回路の変更の影響がわかるので、解析が容易になる。【００９６】
また、別の実施例では、図１２（Ｂ）の解析結果表示例２に示すように、エラーモードe#mと、CRAMのエラーインジェクションの結果のエラー箇所のみを表示することでも可能である。ここでe#mはユーザ指定の危険側故障モードである。FPGAの内部接続構造を秘匿としたい場合は、CRAMのビット反転の情報は使用者に開示しないように構成してもよい。この場合、CRAMのビット反転の情報と回路変更の情報を直接対応付けることが困難になるので、その場合は、エラー箇所とユーザが指定した危険側の故障モードや、故障モードに含まれる付加情報がわかる形で表示すればよい。【００９７】
FPGAの内部構造を秘匿とするために、物理的なCRAMのビット情報と回路接続情報を対応付けたくない場合は、CRAMの物理的な配置を、ユーザに開示するために、便宜的に、１対1対応変換を実施したビット列を用いて、そのビット列でのエラー挿入と、故障回路の対応を示すことでもよい。つまり、CRAMのビット列をユーザに開示可能なビット列に変換することで、FPGA内部構造を秘匿としながら、図１２の解析結果表示例１に示すような、エラーの表示および評価が実施できる。【００９８】
これは、危険側故障のモードが過不足無くユーザ設計者が確認できることが重要であるため、FPGA内のCRAMの全体にエラーが挿入されて、それが回路にどう反映するかが定量的に見出せればよいからである。本実施例によれば、FPGAのチップ内の詳細な構造は開示することは必要ない。【００９９】
ユーザがFPGAを使用するに際して、想定するエラーを確認するために、使用するCRAMの全ビットに対して反転操作が可能なことと、その結果の論理接続情報への変換後のSIMおよび変更箇所の提示等ができることが重要である。
【実施例６】
【０１００】
これまで、FPGAのCRAMのソフトエラーの影響の評価を主に述べてきたが、LSI設計に当たっては、LSIのハード的な故障、いわゆる、永久故障についても評価できることが望ましい。FPGAであれば、配線部分をプログラマブルにできるので、永久故障の一部をソフトエラーとして代替表現できれば、その永久故障の影響をあらかじめ評価することができる。【０１０１】
図１３は、その一例である。FPGAは、平面内に配置された回路ブロックを結ぶために、単純な例では、縦方向（この図では、N、S方向）および横方向（この図ではE，W方向）への2つの方向の結線を自由に接続するために、6つのスイッチ（ここでは、N型MOSFETで表現した）であらわされる。【０１０２】
たとえば、E，W方向の接続を表現するためには、接続時は図13の（A）に示したように、CB0=“０”、CB１=“０”、CB２=“１”、CB３=“−”、CB４=“０”、CB５=“０”とすればよい。ここで、“−”は“０” か“１”のいずれでもよいということを示している。一方で、非接続時は図13の（B）に示したように、CB0=“０”、CB１=“０”、CB２=“０”、CB３=“−”、CB４=“０”、CB５=“０”とすればよい。【０１０３】
これは、配線W-Eに対してマイグレーション等による接続と非接続の影響を、CRAMのビット反転で表現できることになり、エラーモードの影響をシミュレーションで確認できることになる。このような方法で、安全確保上、必要な配線や素子の故障の影響があらかじめシミュレーションで確認できるようになると、安全性を確保するためのさまざまな回路的な工夫に対する評価が定量的にできるようになり、安全用途へのFPGAの活用機会を増やすことができる。【０１０４】
上記説明した本実施例によれば、FPGAのCRAMのビット反転によるいわゆるソフトエラーの影響を評価するために、挿入したCRAMのビット反転を故障挿入回路ネットリストに変換し、その影響としての故障モード一覧リストを出力することで、想定される故障モードを原理的にすべて挙げられることができるので、故障モードの検証のためのツールとして活用できる。また、故障挿入ネットリストの故障箇所のFPGA上の物理配置情報を実負荷接続/物理配置データと対応付けることにより、配線のマイグレーションによる断線やショートの確率等を加味して、注目する故障モードにおけるCRAMのソフトエラーによる機能の故障確率を求められることできる効果がある。これにより、FPGAを高安全化応用へ適用するための検証が実現できる効果がある。【０１０５】
これにより、安全側故障確率（ＳＦＦ）が定量的に求められるので、安全性水準を満たすためのハードウエア冗長性を低減することが可能になり、低コスト化に寄与することができる。【０１０６】
実施例中、シミュレーションを実行する構成は、コンピュータのハードウェアをソフトウェアで制御することで実現できる。また、ソフトウエアで構成した機能と同等の機能は、FPGA、ASICなどのハードウエアでも実現できる。そのような態様も本願発明の範囲に含まれる。
【実施例７】
【０１０７】
実施例１乃至６では、エラーインジェクションを実施後に論理的なシミュレーションを実施する方法について述べた。これは、半導体の設計において、設計した回路の動作を確認するために網羅的に入力信号の切り替えパタンを用意して、すべての動作において所望の動作が実現しているかを確認する、いわゆるダイナミック検証と呼ばれる手法である。【０１０８】
一方で、設計データの接続関係等を数学的なモデルとして捉え数学的な一致検証を実施する、いわゆる、形式検証と呼ばれる手法もある。本実施例では、後者の形式検証へ適用するための実施の形態について述べる。形式検証においては、いわゆるゲートレベルネットリストと呼ばれるLSI内に集積されるトランジスタ等の素子間を物理的に結線するよりも抽象的な、RTLレベルで実施されることが望ましい。【０１０９】
本実施例では、エラーインジェクションの結果のRTLについて形式検証を実施する例について述べる。形式検証を容易化するためには、RTL記述ファイルへのエラーインジェクション結果の反映が必要になる。以下で、エラーインジェクション結果の反映方法について図14を用いて説明する。【０１１０】
図１４は実施例７の検証システムのツールおよびデータの関係を示す論理ブロック図である。図1の構成に追加して、RTL処理部（1401）、RTL ｖｓ ネットリスト対応テーブル（1402）、RTL変換ツール（1403）、SIM/期待値比較および形式検証エラー評価ツール（1404）、故障挿入RTL（1405）、形式検証結果（1406）、アサーション記述ファイル（1407）の構成を備える。また、論理合成ツール（110）は後述のように、図１の例に比べて機能が拡張されている。【０１１１】
RTL vs ネットリスト対応テーブル（1402）は、論理合成ツール（110）がネットリストを生成する際に、RTLからネットリストへの変換における結線情報等の対応を記述したテーブルである。【０１１２】
RTL変換ツール（1403）は、故障挿入ネットリスト（124）とユーザ定義データであるRTL（130）と、RTL ｖｓ ネットリスト対応テーブル（1402）を入力とし、エラー挿入後のRTLを変換・生成するツールである。【０１１３】
SIM/期待値比較および形式検証エラー評価ツール（1404）は、図１のSIM/期待値比較ツール（113）を、形式検証を実施できるように機能拡張したツールである。【０１１４】
故障挿入RTL（1405）は、RTL変換ツール（1403）の出力結果である。形式検証結果（1406）は、SIM/期待値比較および形式検証エラー評価ツール（1404）の出力結果である。また、ユーザ定義データである、アサーション記述ファイル（1407）を有する。
1
ここでは、SIM/期待値比較および形式検証エラー評価ツール（1404）を便宜的に一つのブロックで示したが、このツールは必ずしも、ひとつのツールである必要はなく、SIMツール、期待値比較ツール、形式検証ツール、エラー評価ツールとして複数のツールにて構成される形でも構わない。【０１１５】
図１の実施例と異なり、本実施例では、RTL（130）でのSIMや評価・検証が必要になるので、RTL（130）とネットリスト（120）との紐付けができるような仕組みとして、RTL vs ネットリスト対応テーブル（1402）等が入っている。ネットリスト（120）からRTL（130）への変換に際しては、RTL内の論理記述および端子等を階層的に個々の情報を特定するために、それぞれに固有の記号や番号を割り当てる等の処理をRTL情報に追記することが必要になる。これは、後々ネットリストからの変更の際に、変更箇所のみの変換を実施する上で必要な手続きを効率化するためである。このような付加情報の抽出およびRTL内の記述が完全に一意となるようなリネーム等の処理をRTL処理部（1401）で実施する。【０１１６】
RTL（130）は通常、モジュール単位で設計され、クロックの接続や処理する論理演算の情報が記述される。RTL vs ネットリスト対応テーブル（1402）は、モジュール名、論理演算式クロック接続情報等を階層的に保持する機能を持ち、論理合成ツール（110）はRTLのモジュール構成や論理接続情報に対応した一対一対応が容易となるような命名ルール等で対応付けられたネットリスト（120）を生成する。【０１１７】
もちろん、論理合成ツール（110）は、論理圧縮やタイミング調整等で全く一対一対応とならない場合もあるが、その場合は、対応する最小の論理単位で対応付ければよい。この最小の論理単位は、RTLのモジュール単位でもよいが、モジュール内をさらに細かい単位に分割してもよい。このように、論理合成の結果、論理圧縮等によりRTLとは一対一対応にならない場合でも、対応する範囲を制限することで、RTL（130）とネットリスト（120）の対応を保持することが可能である。それゆえ、RTL vs ネットリスト対応テーブル（1402）は、論理合成ツール（110）が生成することが望ましい。【０１１８】
RTL記述のモジュールに対して、ネットリスト記述のモジュールが対応している。さらにそのネットリストに対応してCRAMのアドレスマップが対応しているので、CRAMのビット反転操作を実施したアドレスから、変更モジュールを特定し、ネットリストvs （CRAM）ビットストリーム対応テーブル（122）より、結線変更箇所を特定すれば、RTLの変更箇所が特定できることになる。【０１１９】
RTL vs ネットリスト対応テーブル（1402）は、エラーインジェクション評価ツール（101）内のRTL変換ツール（1403）に入力される。RTL変換ツール（1403）は、故障挿入ネットリスト（124）からエラーインジェクションにより変更された部分に対応するネットリスト部分をRTLへ変換する機能を持つ。ネットリストは、通常、コメント文の記述が可能である。エラー挿入ツール（112）は、故障ネットリストを生成する際、該当するエラー挿入箇所について、エラー挿入箇所の開始部と終了部をコメント形式で追加して置くことが望ましい。RTL変換ツール（1403）は、入力された故障ネットリストから、上記のコメント文を検索し、エラー挿入箇所を抽出して、その部分のRTLを変更すればよいからである。これにより、必要最小限のデータの変換が実施される。【０１２０】
RTL変換ツール（1403）は、ユーザが設計したRTL（130）と、RTL vs ネットリスト対応テーブル（1402）と、故障挿入ネットリスト（124）を入力とし、故障挿入RTL（1405）を出力する。この変換に際しては、ネットリストからの一括変換も可能であるが、エラー挿入箇所のみの変換および、元のRTL（130）からの差分更新型で定義することが望ましい。これにより、たとえば、System Verilog でRTLが記述されていた場合、アサーション記述等が含まれる形で記述されたまま保持されることになるので、エラーインジェクション後の形式検証時の検証効率や工数削減率が高まる効果がある。また、エラーインジェクションの結果であることを明示するために、故障挿入のRTLについて、変更開始箇所および変更終了箇所にコメント文を記述することが望ましい。これにより、変更箇所に、アサーション記述ファイル等を利用して、再検証する際の確認が容易になるばかりでなく、RTLの可読性を向上させる上でも効果がある。【０１２１】
図１５は、本実施例を実施する処理フローを示す。図３に記載の変換フローと比較して、RTLレベルの論理接続情報への変換を実施するフローが追加される。これにより、ネットリストからRTLへの変換が実施できることを示している。【０１２２】
本実施例では、FPGAに実装したCRAMの構成情報ビット情報を故意にビット反転させ、その影響を評価する。一般的なFPGAの設計フローと異なり、CRAMビットストリームからネットリストへの変換、および、ネットリストからRTLへの変換手段を有することが特長である。【０１２３】
まず、ユーザが実現したい機能を反映させた回路設計情報（RTL A）を用意する（S1501）。次に、RTL Aから論理合成を経て論理接続情報A(ネットリストA)を生成する（S1502）。回路設計情報（RTL A）はFPGAで構成したい、目的とする回路であり、本評価の対象データとなる。これは、FPGAの一部分の機能を切り出したものでもよい。【０１２４】
次にネットリストAを用いて、CRAMビットストリームAを生成させる（S1503）。その後、このCRAMビットストリームAに対して、一部のCRAMビットを反転させる処理、すなわち、エラーインジェクションを実施してCRAMのビットストリームBを生成する（S1504）。後述するように、CRAMビットの反転個所は目的に応じて選択することができる。【０１２５】
その後、このCRAMビットストリームBに対応する論理接続情報B(ネットリストB)を生成する（S1505）。ビットストリームBから論理接続情報Bを生成する際には、既述のようにネットリストとビットストリームの対応が一対一に対応付けられている情報を利用すればよい。最後に、論理接続情報B(ネットリストB)から回路設計情報（RTL B）を生成する（S1506）。エラーインジェクションの形式検証は、このRTL Bに対してユーザ指定のアサーションデータを用いて実施される。【０１２６】
図１６は、ネットリストからRTLへの変換方法について説明する概念図である。図２に記載のCRAMビット反転の影響を評価するという例を用いて、ネットリストからRTLへの変換方法について説明している。RTL Aは図２（B）の回路を記述するVerilog HDLのコードである。図１５に記載のフローで、CRAMのビット反転の結果、その影響をネットリストに反映した回路が図２（ｃ）である場合のRTL記述は、図１５のRTL Bに記載の記述になる。【０１２７】
エラーインジェクションの結果、ネットリストが変更されるが、その際、新しく生成された素子名およびネット名は、ツールが自動生成したことがわかるように、マーキングを実施（たとえば、識別字ｘをつけ、素子名はandx01、ネット名はnetx01等）とすると差異が明確化できる。ネットリストからRTLへの変換に際しては、この識別字を頼りに検索し、RTLの対応するモジュールの論理式へ変換を実施すればよい。なお、変更されたRTLは変更開始箇所および変更終了箇所にコメント文を挿入すれば、変更箇所が明確化する。【０１２８】
本実施例では、この変更されたRTLに関して形式検証、たとえば、プロパティ検証を実施する例について説明する。【０１２９】
プロパティ検証の一例としては、RTL Aで記述される以下の論理式において、
assign o =  (I0 & I1 | I2 & I3)    ・・・  式（１）
式（１）が満たされていることを確認するために、アサーションと呼ばれる記述を実施し、式（１）が成立していることを数学的に確認することが知られている。一例としては、RTL Aについて、式（１）が成立することを確認するために、以下のアサーション記述を実施したとする。
assert property (I0 == 0 & I1 == 0 & I2 == 0 & I3 == 0 |-> o == 0)・・・式 （２）
このように記述すると、式（１）の取りうる条件で、入力I0〜I3のすべてが０の場合に出力oが０になることを、モデル構造から判定し確認と検証することができる。式（１）の場合、上記入力の場合は出力が0になることが検証できる。
一方、エラーインジェクション後のRTLに対しては、論理式が
assign o = (((I0 & I1) | I1) | ~(I2 | I3)) | I2 & I3)  ・・・式（３）
となるので、式（２）のプロパティ検証を実施すると、出力oの値が１となるので、式（２）は成立せず、エラーが出力される。【０１３０】
この例では、CRAMへのエラー注入に対してはLUTレベルで発生しているという比較的簡単な回路での説明であるが、より複雑な、モジュール単位もしくは、複数のモジュールにまたがる論理式の変更が生じる場合であっても、また、複数サイクルにわたって影響が伝播する場合であっても、適切なアサーション文の記述ができれば、原理的にエラーの発見は可能である。【０１３１】
安全設計で重要となるのは、危険側潜在故障の確率であり、エラー評価ツールは、この危険側潜在故障のモードを検出することが重要になる。危険側潜在故障は、FPGAへ実装される診断回路では検出できない故障のうち、ゆくゆくは、他の故障と複合化して危険状態に遷移してしまう故障モードである。そのため、考えられる危険側故障モードを再現するようなアサーション記述を実施することで、エラーインジェクションの影響が危険側か安全側かの判定が可能になる。エラーインジェクション評価を形式検証と組み合わせることで、考えられる危険側故障モードの確認が効率化できる効果がある。【０１３２】
＜付記＞
本願明細書には以下の発明が開示されている。すなわち；
論理回路情報をCRAMによって保持するFPGAについて、想定されるエラーを評価するシミュレータであって、処理装置、記憶装置、入力装置、および、出力装置を備え、
前記記憶装置は、前記FPGAに形成すべき回路設計情報（RTL）と、回路結線情報であるネットリストとの対応情報を格納し、また、ネットリストと前記CRAMに格納されるビット列であるビットストリームの１対１の対応情報を格納し、
前記入力装置は、評価対象となる前記ネットリストに対応する前記ビットストリームの入力を受付け、
前記処理装置は、エラー挿入ツールと期待値比較ツールと、形式検証評価ツールを備え、
前記エラー挿入ツールは、
前記入力されたビットストリームに対して変更を加える手段と、
前記対応情報を参照し、前記ビットストリームの変更を前記評価対象となるネットリストに反映して故障挿入ネットリストを生成する手段と、
前記故障挿入ネットリストから故障挿入RTLを生成する手段と、
故障挿入RTLへの形式検証評価をするための形式検証評価情報を入力手段とを備え、
前記期待値比較ツールは、
前記故障挿入ネットリストに所定の入力を適用して論理的なシミュレーションを実施する手段と、
前記シミュレーションの出力結果を出力期待値と比較する手段と、
前記形式検証評価ツールは前記故障挿入RTLに対して形式検証評価情報を用いて形式検証を実施し、その結果を保持する手段を備える
ことを特徴とするシミュレータ、である。【０１３３】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【産業上の利用可能性】
【０１３４】
FPGA等のエラー評価や設計支援の分野に適用可能である。
【符号の説明】
【０１３５】
ＦＰＧＡ・・・Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、
ＣＲＡＭ・・・Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｍｅｍｏｒｙ、ＬＵＴ・・・Ｌｏｏｋ  Ｕｐ  Ｔａｂｅｌ、ＳＥＬ・・・Ｓｅｌｅｃｔｏｒ、ＳＷ・・・Ｓｗｉｔｃｈ、ＦＦ・・・Ｆｌｉｐ  Ｆｌｏｐ、ＧＵＩ…Ｇｒａｐｈｉｃ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ、ＣＢ…ＣＲＡＭ Ｂｉｔ、
【図１】
2017009956.tif 000003
【図２】
2017009956.tif 000004
【図３】
2017009956.tif 000005
【図４】
2017009956.tif 000006
【図５】
2017009956.tif 000007
【図６】
2017009956.tif 000008
【図７】
2017009956.tif 000009
【図８】
2017009956.tif 000010
【図９】
2017009956.tif 000011
【図１０】
2017009956.tif 000012
【図１１】
2017009956.tif 000013
【図１２】
2017009956.tif 000014
【図１３】
2017009956.tif 000015
【図１４】
2017009956.tif 000016
【図１５】
2017009956.tif 000017
【図１６】
2017009956.tif 000018
【国際調査報告】
2017009956.tif 000019
2017009956.tif 000020
2017009956.tif 000021