(57)【特許請求の範囲】
【請求項１】
ソフトエラーを緩和するためのシステムであって、
プログラマブルロジックおよび相互接続リソースと、設定メモリとを含むプログラマブル集積回路を備え、
前記プログラマブルロジックおよび相互接続リソースは、前記設定メモリに記憶された設定データに応じてユーザ設計を実行し、
前記システムは、
前記プログラマブル集積回路に結合される不揮発性メモリをさらに備え、
前記不揮発性メモリは、前記ユーザ設計のための前記設定データを記憶し、
前記ユーザ設計は、三重冗長ソフトエラーマネジメント回路を含み、
前記三重冗長ソフトエラーマネジメント回路は、
エラー検出コードを用いて前記設定メモリ内の複数の記憶ビットのうちの破損した１つにおける前記ソフトエラーを繰り返しチェックするチェック回路を有し、
各記憶ビットは、前記ユーザ設計の複数のコードブロックのうちの１つのコードブロックの部分を実行し、
前記三重冗長ソフトエラーマネジメント回路は、
状態レジスタをさらに有し、
前記状態レジスタは、前記プログラマブル集積回路において実行される複数のコードブロックのうちの１つのコードブロックがクリティカルデータ上で動作しているか否かを示し、
前記三重冗長ソフトエラーマネジメント回路は、
前記チェック回路に結合される分類回路をさらに有し、
前記分類回路は、前記状態レジスタの状態と、各記憶ビットに対して前記状態レジスタの可能な状態に対するそれぞれのクリティカリティクラスを特定するマップとを用いて、前記チェック回路に応答して前記破損した記憶ビットの前記クリティカリティクラスを決定するように構成され、
前記三重冗長ソフトエラーマネジメント回路は、
前記クリティカリティクラスに関連した複数の緩和技術を開始するための、前記分類回路に結合される訂正回路をさらに有し、
前記訂正回路は、前記分類回路によって決定された前記クリティカリティクラスに関連した前記緩和技術を開始するように構成される、システム。
【請求項２】
第１の前記緩和技術は、冗長なロジックへのフェイルオーバーを実行することを含み、
第２の前記緩和技術は、前記設定メモリを再初期化することを含み、
第３の前記緩和技術は、前記破損した記憶ビットを訂正することを含む、請求項１に記載のシステム。
【請求項３】
前記訂正回路は、前記破損した記憶ビットに対して前記マップにおいて特定された前記クリティカリティクラスに関連する前記緩和技術に応答して前記破損した記憶ビットを訂正するようにさらに構成され、
前記訂正回路は、エラー訂正コードである前記エラー検出コードを用いて前記破損した記憶ビットを訂正するようにさらに構成される、請求項１または２に記載のシステム。
【請求項４】
前記マップは、前記設定メモリ内に記憶される、請求項１または２に記載のシステム。
【請求項５】
前記マップは、前記不揮発性メモリ内に記憶される、請求項１または２に記載のシステム。
【請求項６】
前記チェック回路は、エラー検出および訂正コードを用いて前記記憶ビットを読み取るとともにチェックすることによって前記ソフトエラーを繰り返しチェックする、請求項１または２に記載のシステム。
【請求項７】
設定メモリを含む集積回路におけるソフトエラーを緩和する方法であって、
設計記述から前記集積回路の仕様を統合するステップと、
各プラグマがコードブロックの１つのクリティカリティクラスを宣言する、前記設計記述における前記コードブロックに関連するプラグマに対して、前記統合された仕様における前記クリティカリティクラスを保存するステップと、
前記統合された仕様からマップを生成するステップとを含み、
前記マップは、前記設定メモリにおける複数の記憶ビットのうちの各記憶ビットの前記クリティカリティクラスが、前記記憶ビットが統合される前記コードブロックの前記クリティカリティクラスであると特定し、
前記方法は、
エラー検出コードを用いて前記設定メモリ内の前記複数の記憶ビットの破損した１つにおける前記ソフトエラーを繰り返しチェックするステップと、
各記憶ビットに対する複数のクリティカリティクラスの１つを特定する前記生成されたマップを用いて前記破損した記憶ビットのクリティカリティクラスを決定するステップと、
複数の緩和技術の１つを開始するステップとをさらに含み、
開始された前記緩和技術は、前記破損した記憶ビットの前記クリティカリティクラスに関連する、方法。
【請求項８】
第１の前記緩和技術は、冗長なロジックへのフェイルオーバーを実行することを含み、
第２の前記緩和技術は、前記設定メモリを再初期化することを含み、
第３の前記緩和技術は、前記破損した記憶ビットを訂正することを含む、請求項７に記載の方法。
【請求項９】
第４の前記緩和技術は、前記ソフトエラーの通知を送信するとともに、前記破損した記憶ビットを訂正することを含み、
第５の前記緩和技術は、前記ソフトエラーの通知を送信し、そうでなければ前記破損した記憶ビットを無視することを含む、請求項８に記載の方法。
【請求項１０】
前記マップは、前記記憶ビットの１つおよび複数の状態の１つの各組み合わせに対するそれぞれの前記クリティカリティクラスの１つを特定し、
前記設定するステップは、前記破損した記憶ビットおよび前記状態レジスタの状態の前記組み合わせに対して前記マップにおいて特定されたそれぞれの前記クリティカリティクラスを決定するステップを含み、
前記開始するステップは、それぞれの前記クリティカリティクラスの各々に関連した前記緩和技術を開始するステップを含む、請求項７〜９のいずれか１項に記載の方法。
【請求項１１】
前記マップは、前記集積回路の外部のメモリに記憶される、請求項７〜９のいずれか１項に記載の方法。
【請求項１２】
前記マップは、前記集積回路内のメモリに記憶される、請求項７〜９のいずれか１項に記載の方法。
【請求項１３】
前記繰り返しチェックするステップは、エラー検出および訂正コードを用いて前記記憶ビットを繰り返し読み取るとともにチェックするステップを含む、請求項７〜９のいずれか１項に記載の方法。
【請求項１４】
通信製品であって、
設定メモリを有する集積回路と、
前記集積回路に結合され、エラー検出コードを用いて設定メモリ内の複数の記憶ビットの破損した１つにおけるソフトエラーを繰り返しチェックするチェック回路とを備え、
各記憶ビットは、前記ユーザ設計の複数のコードブロックのうちの１つのコードブロックの部分を実行し、
前記通信製品は、
状態レジスタをさらに備え、
前記状態レジスタは、前記プログラマブル集積回路において実行される複数のコードブロックのうちの１つのコードブロックがクリティカルデータ上で動作しているか否かを示し、
前記通信製品は、
前記チェック回路に結合される分類回路をさらに備え、
前記分類回路は、前記状態レジスタと、各記憶ビットに対して前記状態レジスタの可能な状態に対するそれぞれのクリティカリティクラスを特定するマップとを用いて、前記チェック回路に応答して前記破損した記憶ビットの前記クリティカリティクラスを決定するように構成され、
前記通信製品は、
前記クリティカリティクラスに関連した複数の緩和技術を開始するための、前記分類回路に結合される訂正回路をさらに備え、
前記訂正回路は、前記分類回路によって決定された前記クリティカリティクラスに関連した前記緩和技術を開始するように構成される、通信製品。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
１つ以上の実施の形態は、一般に、集積回路におけるソフトエラーに関し、より特定的には、集積回路の記憶におけるソフトエラーの緩和に関する。
【背景技術】
【０００２】
背景
集積回路の記憶ノードにおけるソフトエラーは、集積回路の状態の持続的な破損を引き起こす。集積回路の不適切な動作を防止するためには、ソフトエラーが検出され、分離され、訂正されるべきである。ソフトエラーの検出後に、集積回路は、ソフトエラーを分離および訂正するためにリセットまたは再設定され得る。しかしながら、集積回路のリセットは、全システム復帰にかなりの時間を必要とし得る。
【０００３】
ある用途においては、高い利用可能性が必要とされる。たとえば、通信用途においては、多くの場合、９９．９９９％の利用可能性、または１年当りおよそ５分のダウン時間が必要とされる。いくつかの集積回路については、ソフトエラーは、許容されるダウン時間を超える量のシステムリセット時間を生じさせる。一般的に、ソフトエラーからの復帰の間のダウン時間を制限することが要求される。
【０００４】
本発明の１つ以上の実施の形態は、上記問題の１つ以上に対処し得る。
【発明の概要】
【課題を解決するための手段】
【０００５】
要約
ソフトエラーを緩和するためのシステムは、プログラマブルロジックおよび相互接続リソースと、設定メモリとを含むプログラマブル集積回路を備え、プログラマブルロジックおよび相互接続リソースは、設定メモリに記憶された設定データに応じてユーザ設計を実行し、システムは、プログラマブル集積回路に結合される不揮発性メモリをさらに備える。不揮発性メモリは、ユーザ設計のための設定データを記憶する。ユーザ設計は、三重冗長ソフトエラーマネジメント回路を含み、三重冗長ソフトエラーマネジメント回路は、エラー検出コードを用いて設定メモリ内の複数の記憶ビットのうちの破損した１つにおけるソフトエラーを繰り返しチェックするチェック回路と、チェック回路に結合される分類回路とを有し、分類回路は、各記憶ビットに対して複数のクリティカリティクラスのうちの１つを特定するマップを用いて、チェック回路に応答して破損した記憶ビットのクリティカリティクラスを決定するように構成され、三重冗長ソフトエラーマネジメント回路は、クリティカリティクラスに関連した複数の緩和技術を開始するための、分類回路に結合される訂正回路をさらに有し、訂正回路は、分類回路によって決定されたクリティカリティクラスに関連した緩和技術を開始するように構成される。
【０００６】
いくつかの実施の形態においては、第１の緩和技術は、冗長なロジックへのフェイルオーバーを実行することを含み、第２の緩和技術は、設定メモリを再初期化することを含み、第３の緩和技術は、破損した記憶ビットを訂正することを含む。
【０００７】
マップは、記憶ビットの１つおよび複数の状態の１つの各組み合わせに対するクリティカリティクラスのそれぞれの１つを特定し得る。分類回路は、破損した記憶ビットおよび分類回路の状態レジスタの状態の組み合わせに対してマップにおいて特定されるそれぞれのクリティカリティクラスを決定するようにさらに構成され得る。訂正回路は、それぞれのクリティカリティクラスの各々に関連した緩和技術を開始するようにさらに構成され得る。
【０００８】
訂正回路は、破損した記憶ビットに対してマップにおいて特定されたクリティカリティクラスに関連する緩和技術に応答して破損した記憶ビットを訂正するようにさらに構成され得る。訂正回路は、エラー訂正コードであるエラー検出コードを用いて破損した記憶ビットを訂正するようにさらに構成され得る。
【０００９】
マップは、たとえば、設定メモリ内、または不揮発性メモリ内に記憶され得る。チェック回路は、エラー検出および訂正コードを用いて記憶ビットを読み取るとともにチェックすることによってソフトエラーを繰り返しチェックし得る。
【００１０】
もう１つの実施の形態においては、設定メモリを含む集積回路におけるソフトエラーを緩和する方法は、エラー検出コードを用いて設定メモリ内の複数の記憶ビットの破損した１つにおけるソフトエラーを繰り返しチェックするステップと、各記憶ビットに対する複数のクリティカリティクラスの１つを特定する記憶されたマップを用いて破損した記憶ビットのクリティカリティクラスを決定するステップと、複数の緩和技術の１つを開始するステップとを含み、開始された緩和技術は、破損した記憶ビットのクリティカリティクラスに関連する。
【００１１】
第１の緩和技術は、冗長なロジックへのフェイルオーバーを実行することを含み得るとともに、第２の緩和技術は、設定メモリを再初期化することを含み得るとともに、第３の緩和技術は、破損した記憶ビットを訂正することを含み得る。第４の緩和技術は、ソフトエラーの通知を送信するとともに、破損した記憶ビットを訂正することを含み得るとともに、第５の緩和技術は、ソフトエラーの通知を送信し、そうでなければ破損した記憶ビットを無視することを含み得る。
【００１２】
マップは、記憶ビットの１つおよび複数の状態の１つの各組み合わせに対するそれぞれのクリティカリティクラスの１つを特定し得る。設定するステップは、破損した記憶ビットおよび状態レジスタの状態の組み合わせに対してマップにおいて特定されたそれぞれのクリティカリティクラスを決定するステップを含み得る。開始するステップは、それぞれのクリティカリティクラスの各々に関連した緩和技術を開始するステップを含み得る。
【００１３】
マップは、集積回路の外部のメモリ、または集積回路内のメモリに記憶され得る。チェック回路は、エラー検出および訂正コードを用いて記憶ビットを読み取るとともにチェックすることによってソフトエラーを繰り返しチェックし得る。
【００１４】
さらにもう１つの実施の形態においては、通信製品は、設定メモリを有する集積回路と、集積回路に結合され、エラー検出コードを用いて設定メモリ内の複数の記憶ビットの破損した１つにおけるソフトエラーを繰り返しチェックするチェック回路と、チェック回路に結合される分類回路とを備え、分類回路は、各記憶ビットに対して複数のクリティカリティクラスの１つを特定するマップを用いて、チェック回路に応答して破損した記憶ビットのクリティカリティクラスを決定するように構成され、通信製品は、クリティカリティクラスに関連した複数の緩和技術を開始するための、分類回路に結合される訂正回路をさらに備える。訂正回路は、分類回路によって決定されたクリティカリティクラスに関連した緩和技術を開始するように構成される。
【００１５】
もう１つの実施の形態においては、方法は、集積回路におけるソフトエラーを緩和するために提供される。マップは、メモリに記憶され、上記マップは、集積回路における各記憶ビットに対するクリティカリティクラスを特定する。緩和技術は、各クリティカリティクラスに関連する。ソフトエラーは、記憶ビットの破損した１つにおいて検出される。破損した記憶ビットに対してマップにおいて特定されたクリティカリティクラスに関連する緩和技術が実行される。
【００１６】
もう１つの実施の形態においては、方法は、プログラマブル集積回路の設定メモリにおけるソフトエラーを緩和するために提供される。クリティカリティクラスは、ユーザ設計の設計記述（design description）の各コードブロックに対して指定される。緩和技術は、各クリティカリティクラスに関連する。仕様（specification）は、設計記述から統合（synthesized）される。統合された仕様は、プログラマブル集積回路のプログラマブルロジックおよび相互接続リソースにおけるユーザ設計の実行を特定する。仕様は、各コードブロックのクリティカリティクラスが、実行においてコードブロックを実行するプログラマブルロジックおよび相互接続リソースのサブセットのクリティカリティクラスであることを特定する。マップは、仕様から生成される。設定メモリの記憶ビットは、プログラマブルロジックおよび相互接続リソースを構成する。マップは、各コードブロックを実行するサブセットのクリティカリティクラスが、サブセットにおいてプログラマブルロジックおよび相互接続リソースを構成する各記憶ビットのクリティカリティクラスであることを特定する。上記マップは、記憶される。ソフトエラーは、記憶ビットの破損した１つにおいて検出される。破損した記憶ビットに対してマップにおいて特定されたクリティカリティクラスに関連する緩和技術が実行される。
【００１７】
さらにもう１つの実施の形態においては、ソフトエラーを緩和するためのシステムが提供される。システムは、プログラマブル集積回路と、不揮発性メモリとを備える。プログラマブル集積回路は、プログラマブルロジックおよび相互接続リソースと、設定メモリとを含む。プログラマブルロジックおよび相互接続リソースは、設定メモリに記憶された設定データに応じてユーザ設計を実行する。不揮発性メモリは、ユーザ設計のための設定データを記憶する。ユーザ設計は、三重冗長ソフトエラーマネジメント回路を含む。上記ソフトエラーマネジメント回路は、チェック回路と、分類回路と、訂正回路とを有する。チェック回路は、エラー検出コードを用いて設定メモリ内の複数の記憶ビットのうちの破損した１つにおけるソフトエラーを繰り返しチェックする。分類回路は、各記憶ビットに対して複数のクリティカリティクラスのうちの１つを特定するマップを用いて、チェック回路に応答して破損した記憶ビットのクリティカリティクラスを決定する。訂正回路は、クリティカリティクラスに関連した緩和技術を開始し、上記訂正回路は、破損した記憶ビットに対してマップにおいて特定されたクリティカリティクラスに関連した緩和技術を開始する。
【００１８】
様々な他の実施の形態が以下の詳細な説明および特許請求の範囲に記載されていることが理解されるであろう。
【００１９】
開示された実施の形態の様々な局面および利点は、以下の詳細な説明の検討および図面への参照によって明らかになるであろう。
【図面の簡単な説明】
【００２０】
【図１】集積回路におけるソフトエラーを緩和するためのプロセスのフローチャートである。
【図２】ソフトエラーを緩和するように構成可能なプログラマブル集積回路の一例のブロック図である。
【図３】プログラマブル集積回路の設定メモリにおけるソフトエラーを緩和するためのシステムのブロック図である。
【発明を実施するための形態】
【００２１】
詳細な説明
図１は、集積回路におけるソフトエラーを緩和するためのプロセスのフローチャートである。あり得るソフトエラーは、クリティカリティクラスに分離され、検出された各ソフトエラーのクリティカリティクラスに基づいて適当な緩和技術が選択されるとともに実行される。いくつかの検出されたソフトエラーは、集積回路の全リセットよりも厳しくない緩和技術で扱われるので、複数のソフトエラーの緩和に必要とされるダウン時間が低減される。
【００２２】
１つの実施の形態においては、ブロック１０２〜１１６の１つ以上のプロセスは、所望の動作を実行するように特別に適合されたソフトウェアを実行する１つ以上のプロセッサによって実行される。ブロック１０２，１０６は、任意的である。なぜなら、クリティカリティクラスは、ブロック１０４の統合前にブロック１０２において、またはブロック１０４の統合後にブロック１０６において、指定され得るからである。図１に示される他のブロックは、いくつかの実施の形態においても任意的であり得る。図１は、単なる１つの例示的な実施の形態を詳細に説明することが意図される。
【００２３】
ブロック１０２においては、クリティカリティクラスは、ユーザ設計の設計記述の各コードブロックに対して指定される。１つの実施の形態においては、回路設計者は、ハードウェア記述言語で設計記述を特定し、回路設計者は、たとえばプラグマ（pragmas）などの１つ以上の指令を設計記述に挿入して、各コードブロックのクリティカリティクラスを宣言する。「プラグマ」という用語は、明細書の以下の部分において用いられ、一般に指令を指すことが意図される。１つの実施の形態においては、設計記述は、ブロックのインスタンスの階層を含み、プラグマは、階層における個別のインスタンスへのクリティカリティクラスを割り当て得る。各コードブロックは、階層におけるコードブロックを含む第１のインスタンスのクリティカリティクラス、またはそのような包括的なインスタンスがない場合のデフォルトクリティカリティクラスを有する。もう１つの例においては、プラグマは、ブロックのインスタンスの全てが同一のクリティカリティクラスを有するように、階層におけるブロックのクリティカリティクラスを特定する。さらにもう１つの例においては、プラグマは、各コードブロックの範囲を明示的に特定するコメントであり、コードブロックは、後続の設計記述のクリティカリティクラスを特定する開始コメントとともに始まるコードブロック、および任意の終了コードブロックのクリティカリティクラスを再開する終了コメントとともに終わるコードブロックを有する。この例においては、プラグマは、設計記述における単一のステートメントの細かさ（granularity）でコードブロックを特定する。
【００２４】
ブロック１０４において、集積回路の仕様は、設計記述から統合される。１つの実施の形態においては、仕様は、ユーザ設計を実行する基本ゲート（elementary gate）のネットリストを特定する。もう１つの実施の形態においては、仕様は、集積回路における基本ゲートの配置、および基本ゲート間の相互接続のルーティングを追加的に特定する。プログラマブル集積回路におけるユーザ設計の１つの実行例について、仕様は、各基本ゲートを実行する具体的なプログラマブルロジックリソース、および実行された基本ゲート間の相互接続を実行する具体的なプログラマブル相互接続リソースを特定する。
【００２５】
ブロック１０２にてクリティカリティクラスを特定する実施の形態においては、クリティカリティクラスは、ブロック１０４にて統合される仕様に保存される。１つの例においては、各記憶ビットは、記憶ビットが実行を助けるコードブロックのクリティカリティクラスを受け継ぐ。したがって、仕様は、記憶ビットが統合されるコードブロックのクリティカリティクラスである、各記憶ビットのクリティカリティクラスを特定する。１つの実施の形態においては、異なるクリティカリティクラスを有する複数のコードブロックによって規定される記憶ビットは、これらのコードブロックに対する最も厳しいクリティカリティクラスが割り当てられる。プログラマブル集積回路におけるユーザ設計の実行例について、各プログラマブルロジックおよび相互接続リソースは、プログラマブルリソースが実行を助けるコードブロックのクリティカリティクラスを受け継ぐ。さらに、各設定記憶ビットは、プログラマブルリソースを設定し、設定ビットのクリティカリティクラスは、プログラマブルリソースのクリティカリティクラスである。
【００２６】
ブロック１０６において、統合された仕様は部分に分けられ、各部分は、クリティカリティクラスが割り当てられる。１つの実施の形態においては、統合されたネットリストにおける各基本ゲートは、クリティカリティクラスが割り当てられる。もう１つの実施の形態においては、ネットリストのグラフィック描画は様々な部分にグラフィカルに分けられ、クリティカリティクラスの１つは各部分へ割り当てられる。プログラマブル集積回路において実行されるユーザ設計のためのさらにもう１つの実施の形態においては、グラフィカルレイアウトは、プログラマブル集積回路のプログラマブルロジックおよび相互接続リソースにおいて実行されるユーザ設計を表わし、グラフィカルレイアウトは、各々にクリティカリティクラスが割り当てられる部分にグラフィカルに分けられる。
【００２７】
ある実施の形態においては、ブロック１０２にて指定されたクリティカリティクラスは、ブロック１０６にて修正される。したがって、任意的なブロック１０２，１０６は、相互排他的ではない。１つの実施の形態においては、ブロック１０４の統合は、ブロック１０２にて指定されたコードブロックを、ブロック１０６にて修正され得る対応する部分にマッピングする。もう１つの実施の形態においては、ブロック１０６の部分は、プログラマブル集積回路のプログラマブルロジックおよび相互接続リソースであり、各個別のプログラマブルリソースのクリティカリティクラスは、ブロック１０６にて特定または修正され得る。
【００２８】
１つの実施の形態においては、クリティカリティクラスは、記憶ビットのグループまたはフレームへ割り当てられる。あるプログラマブル相互接続回路においてユーザ設計を実行するためには、設定データのフレームは、プログラマブル集積回路の設定メモリを設定し、設定データの各フレームは、設定メモリにおける記憶ビットの対応するフレームを初期化する。各フレームにおける記憶ビットは、異なるクリティカリティクラスを有し得るが、記憶ビットのフレームの全体のクリティカリティクラスは、フレームにおける個別の記憶ビットの最も厳しいクリティカリティクラスである。フレームにおけるある記憶ビットは、必要であるよりも厳しいクリティカリティクラスが割り当てられ得るが、クリティカリティクラスを特定するデータは、劇的に低減される。なぜなら、記憶ビットごとに１つのクリティカリティクラスが特定される代わりに、フレームごとに１つのクリティカリティクラスが特定されるからである。したがって、任意的なブロック１０８において、各フレームに対してクリティカリティクラスが決定され、このクリティカリティクラスは、フレームにおける記憶ビットが統合されるコードブロックのクリティカリティクラスの厳しい１つである。
【００２９】
いくつかの記憶ビットに必要であるよりも厳しいクリティカリティクラスを与えることのインパクトを低減するために、仕様は、ブロック１０４にて統合されて、異なる設定フレームに対するプログラマブルリソースにおいて異なるクリティカリティクラスでコードブロックを優先的に実行し得る。異なるクリティカリティクラスを有するコードブロックが、単一の設定フレームにおいて一緒にまとめられなければならないときは、まとめられたクリティカリティクラスは、優先的に類似する厳しさを有する。
【００３０】
ブロック１１０にて、マップは、統合された仕様から生成され、マップは、集積回路における各記憶ビットのクリティカリティクラスを特定する。１つの実施の形態においては、マップは、各記憶ビットのクリティカリティクラスが、記憶ビットが統合されるコードブロックのクリティカリティクラスであることを特定する。もう１つの実施の形態においては、各記憶ビットのクリティカリティクラスは、ブロック１０８にて決定されたように、記憶ビットを含むフレームのクリティカリティクラスである。
【００３１】
ブロック１１２にて、マップは、集積回路内のメモリまたは集積回路外のメモリのようなメモリに記憶される。１つの実施の形態においては、テーブルは、記憶ビットのアドレスによってインデックスを付けられて記憶され、テーブルは、記憶ビットのアドレスにて各記憶ビットのクリティカリティクラスを含む。プログラマブル集積回路におけるユーザ設計の実行例について、各設定記憶ビットに対するアドレスは、設定記憶ビットを含むフレームのアドレスを含む。
【００３２】
ブロック１１４にて、ソフトエラーは、破損した記憶ビットにおいて検出され、アドレスは、破損した記憶ビットに対して決定される。１つの実施の形態においては、チェッカは、記憶ビットのグループまたはフレームを繰り返し読み取るとともに、エラー検出コードを用いてそれらをチェックし、チェッカは、破損した記憶ビットを含むグループまたはフレームのアドレスを、場合によっては、フレームにおいて破損した具体的な記憶ビットのオフセットアドレスを決定する。
【００３３】
ブロック１１６にて、記憶されたマップにおいて破損した記憶ビットに対して特定されたクリティカリティクラスと関連する緩和技術が実行される。１つの実施の形態においては、マップは、記憶ビットのアドレスによってインデックスを付されたテーブルであり、クリティカリティクラスは、破損した記憶ビットのアドレスにてテーブルから読み取られる。
【００３４】
記憶ビットは、各記憶ビットの破損の結果の厳しさに従って、様々なクリティカリティクラスへ分類される。各緩和技術は、各クリティカリティクラスと関連する。１つの実施の形態においては、緩和技術は、ソフトエラーの通知を送信すること、またはソフトエラーを特定する情報の記録を取ることである。そのような緩和技術は、冗長なロジックへのフェイルオーバーを実行し、続いて破損した記憶ビットを訂正するもの、いくつかまたは全ての記憶ビットをバックアップ状態から再初期化するもの、破損した記憶ビットを訂正して、集積回路をリセットするもの、破損した記憶ビットを訂正して、破損した記憶ビットを生成するコードブロックに対応する集積回路の一部をリセットするもの、またはいかなるリセットも行うことなく破損した記憶ビットを訂正するもののような様々なエラー訂正技術と組み合わせられ得る。記憶ビットの破損がいかなる有害な結果も引き起こさない場合は、緩和技術は、破損した記憶ビットを完全に無視し得る、または単にこのソフトエラーを特定する情報の記録を取り得る。破損した記憶ビットの訂正は、１つの実施の形態におけるエラー検出および訂正コードを用いて遂行される。
【００３５】
図２は、ソフトエラーを緩和するように構成可能なプログラマブル集積回路の一例のブロック図である。先に説明されたように、ソフトエラーを緩和するためのシステムは、プログラマブル集積回路のプログラマブルロジックおよび相互接続リソースにおいて実行され得る。
【００３６】
ＦＰＧＡは、１つの配列の中にいくつかの異なるタイプのプログラマブルロジックブロックを含み得る。たとえば、図２は、多数の異なるプログラマブルタイル（programmable tile）を含むＦＰＧＡ構造（２００）を説明する。多数の異なるプログラマブルタイルは、マルチギガビットトランシーバ（multi-gigabit transceiver：ＭＧＴ）２０１と、コンフィギュラブルロジックブロック（configurable logic block：ＣＬＢ）２０２と、ランダムアクセスメモリブロック（random access memory block：ＢＲＡＭ）２０３と、入出力ブロック（input/output block：ＩＯＢ）２０４と、設定およびクロッキングロジック（CONFIG/CLOCK）２０５と、デジタルシグナルプロセッシングブロック（digital signal processing block：ＤＳＰ）２０６と、たとえばクロックポートなどの特別な入出力ブロック（specialized input/output block：Ｉ／Ｏ）２０７と、デジタルクロックマネージャ、アナログ−デジタルコンバータ、システムモニタリングロジックなどのような他のプログラマブルロジック２０８とを含む。いくつかのＦＰＧＡは、専用のプロセッサブロック（dedicated processor block：ＰＲＯＣ）、内部再設定ポート、および外部再設定ポート（図示せず）も含む。
【００３７】
いくつかのＦＰＧＡにおいては、各プログラマブルタイルは、各隣接するタイルにおいて対応する相互接続要素への、および対応する相互接続要素からの標準化された接続を有するプログラマブル相互接続要素（programmable interconnect element：ＩＮＴ）２１１を含む。したがって、総合すれば、プログラマブル相互接続要素は、図示されたＦＰＧＡに対するプログラマブル相互接続構造を実現する。図２の上部に含まれる例によって示されるように、プログラマブル相互接続要素ＩＮＴ２１１は、同一のタイル内のプログラマブルロジック要素への、およびプログラマブルロジック要素からの接続も含む。
【００３８】
たとえば、ＣＬＢ２０２は、単一のプログラマブル相互接続要素ＩＮＴ２１１をユーザロジックに加えて実行するようにプログラムされ得るコンフィギュラブルロジック要素（configurable logic element：ＣＬＥ）２１２を含み得る。ＢＲＡＭ２０３は、１つ以上のプログラマブル相互接続要素に加えて、ＢＲＡＭロジック要素（BRAM logic element：ＢＲＬ）２１３を含み得る。典型的には、タイルに含まれる相互接続要素の数は、タイルの高さに従う。図示された実施の形態においては、ＢＲＡＭタイルは、５つのＣＬＢと同一の高さを有するが、他の数（たとえば、４つ）も用いられ得る。ＤＳＰタイル２０６は、適当な数のプログラマブル相互接続要素に加えて、ＤＳＰロジック要素（DSP logic element：ＤＳＰＬ）２１４を含み得る。ＩＯＢ２０４は、たとえば、プログラマブル相互接続要素ＩＮＴ２１１の１つのインスタンスに加えて、入出力ロジック要素（input/output logic element：ＩＯＬ）２１５の２つのインスタンスを含み得る。当業者に明らかなように、たとえばＩ／Ｏロジック要素２１５へ接続される実際のＩ／Ｏパッドは、様々な図示されたロジックブロックの上に積層された金属を用いて製造され、典型的には、入出力ロジック要素２１５の領域に限定されない。
【００３９】
図示された実施の形態においては、ダイの中心の近くのコラム状の領域（図２において影で示される）は、設定、クロック、および他の制御ロジックのために用いられる。このコラム状の領域から伸びる水平な領域２０９は、ＦＰＧＡの幅に亘ってクロック信号および設定信号を分配するように用いられる。
【００４０】
図２に説明される構造を利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を作る通常のコラム状の構造を分断する追加的なロジックブロックを含む。追加的なロジックブロックは、プログラマブルブロックおよび／または専用のロジックとされ得る。たとえば、図２に示されるプロセッサブロック（processor block：ＰＲＯＣ）２１０は、ＣＬＢおよびＢＲＡＭのいくつかのコラムに及ぶ。
【００４１】
図２は単に例示的なＦＰＧＡ構造を説明することが意図されることに留意すべきである。コラムにおけるロジックブロックの数、コラムの相対幅、コラムの数および順序、コラムに含まれるロジックブロックのタイプ、ロジックブロックの相対サイズ、および図２の上部に含まれる相互接続／ロジックの実行例は、単に例示的である。たとえば、実際のＦＰＧＡにおいては、ＣＬＢの１つよりも多い隣接するコラムは、典型的には、ＣＬＢが現れるところのどこにでも含まれ、ユーザロジックの効果的な実行を容易にする。
【００４２】
図３は、プログラマブル集積回路３０２の設定メモリにおけるソフトエラーを緩和するためのシステムのブロック図である。プログラマブル集積回路３０２は、不揮発性メモリ３０６からの設定データ３０４を持つユーザ設計を実行するように構成される。
【００４３】
プログラマブル集積回路３０２は、プログラマブルロジックリソース３０８，３１０〜３１２，３１４，３１６〜３１８と、プログラマブル相互接続リソース３２０，３２２〜３２４，３２６，３２８〜３３０と含む。プログラマブルリソース３０８，３１０〜３１２，３２０，３２２〜３２４は、設定メモリのフレーム３３２内の記憶ビットによって設定される。同様に、プログラマブルリソース３１４，３１６〜３１８，３２６，３２８〜３３０は、設定メモリフレーム（configuration memory frame：ＣＭＦ）３３４内の記憶ビットによって設定される。ユーザ設計を実行するプログラマブル集積回路３０２の設定の間に、設定メモリフレーム３３２〜３３４は、不揮発性メモリ３０６に記憶された設定データ３０４の対応するフレームを有する設定ポート３３６を介して初期化される。
【００４４】
不揮発性メモリ３０６は、ユーザ設計のための設定データ３０４を記憶する。設定データ３０４は、ソフトエラーマネージャ３３８およびユーザ設計のコードブロック３４０〜３４２を実行するための設定データを含む。関連するコードブロック３４０〜３４２は、クリティカリティクラスを指定される。コードブロック３４０を実行するプログラマブルリソース３０８，３１０〜３１２，３１４，３１６〜３１８，３２０，３２２〜３２４，３２６，３２８〜３３０のサブセットは、コードブロック３４０の指定されたクリティカリティクラス有し、プログラマブルリソースのこのサブセットを設定する設定メモリフレーム３３２〜３３４からの記憶ビットも、コードブロック３４０の指定されたクリティカリティクラスを有する。同様に、プログラマブルリソース３０８，３１０〜３１２，３１４，３１６〜３１８，３２０，３２２〜３２４，３２６，３２８〜３３０を設定して、コードブロック３４２を実行する設定メモリフレーム３３２〜３３４内の記憶ビットは、コードブロック３４２の指定されたクリティカリティクラスを有する。
【００４５】
１つの実施の形態においては、設定データ３０４において特定されたソフトエラーマネージャ３３８は、厳しいクリティカリティクラスを有し、関連する緩和技術は、設定データ３０４を有するプログラマブル集積回路３０２の再設定を含み、続いて、プログラマブル集積回路３０２がリセットされる。もう１つの実施の形態においては、設定データ３０４において特定されたソフトエラーマネージャ３３８は、プログラマブルリソース３０８，３１０〜３１２，３１４，３１６〜３１８，３２０，３２２〜３２４，３２６，３２８〜３３０を設定してソフトエラーマネージャ３３８を実行する、設定メモリフレーム３３２〜３３４内の記憶ビットを破損するソフトエラーからの深刻な結果を防止するための三層冗長である。三重冗長ソフトエラーマネージャ３３８は、投票回路（voting circuit）および３つのコピー、または設定データ３０４において特定される回路３４４，３４６，３４８のような各ロジック回路のインスタンスを含む。回路の１つのインスタンスの出力は回路の他の２つのインスタンスの出力に一致しないが、他の２つのインスタンスの出力が一致するときに、投票回路は、一致する２つのインスタンスから一致する出力を選ぶ。したがって、回路の１つのインスタンスへ限定されるフェイルは、３重冗長ソフトエラーマネージャに影響しない。さらに、投票回路は、ソフトエラーマネージャを冗長投票回路における多数のフェイルによって影響されないように保持する冗長投票回路とされ得る。
【００４６】
設定データ３０４において特定されるソフトエラーマネージャ３３８は、１つの実施の形態におけるチェック回路３４４、分類回路３４６、および訂正回路３４８のための設定データを含む。設定データ３０４において特定されるチェック回路３４４は、エラー検出コードを用いて設定メモリフレーム３３２，３３４内の記憶ビットを破損するソフトエラーを繰り返しチェックする。設定データ３０４において特定される分類回路３４６は、各記憶ビットに対するクリティカリティクラスを特定するマップテーブル３５０または３５２を用いて破損した記憶ビットのクリティカリティクラスを決定する。設定データ３０４において特定される訂正回路３４８は、マップテーブル３５０または３５２において破損した記憶ビットに対して特定されたクリティカリティクラスに関連する緩和技術を選択するとともに開始する。特定の訂正回路３４８は、たとえば、エラー訂正コードを用いて破損した記憶ビットを訂正する。１つの実施の形態においては、エラー訂正コードは、特定のチェック回路３４４のエラー検出コードでもある。
【００４７】
１つの実施の形態においては、プログラマブル集積回路３０２は、設定メモリフレーム３３２〜３３４の破損をチェックする専用のプログラマブルチェッカロジックリソース（programmable checker logic resource：ＣＣ）３５４を含む。この実施の形態においては、設定データ３０４は、専用のチェッカリソース３５４における特定のチェック回路３４４を実行するための設定データを含む。この設定データは、設定メモリフレーム３３２〜３３４に亘る周期的な冗長チェックの期待値を含み、またはエラー検出コードを用いた設定メモリフレーム３３２〜３３４の連続的なチェックを可能とする。設定メモリフレーム３３２〜３３４の各々は、プログラマブルリソース３０８，３１０〜３１２，３１４，３１６〜３１８，３２０，３２２〜３２４，３２６，３２８〜３３０を設定しない追加的な記憶ビットを含み、これらの追加的な記憶ビットは、エラー検出コードのチェックビットを記憶するために専用とされ得る。その設定に従って、チェッカリソース３５４は、周期的な冗長チェックおよび／またはエラー検出コードを用いて設定メモリフレーム３３２〜３３４を連続的にチェックし得る。
【００４８】
専用のプログラマブルチェッカリソース３５４を有するこの実施の形態においては、特定の分類回路３４６および特定の訂正回路３４８は、プログラマブルリソース３０８，３１０〜３１２，３１４，３１６〜３１８，３２０，３２２〜３２４，３２６，３２８〜３３０のサブセットにおいて実行される。特定の分類回路３４６および特定の訂正回路３４８を実行するための設定メモリフレーム３３２〜３３４の部分の破損のインパクトを制限するために、特定の分類回路３４６および特定の訂正回路３４８は、三重冗長回路とされ得る。
【００４９】
１つの実施の形態においては、プログラマブル集積回路３０２における特定の分類回路３４６の実行は、不揮発性メモリ３０６内のマップテーブル３５２にアクセスして、特定のチェック回路３４４によって検出されたソフトエラーのクリティカリティクラスを決定する。特定の分類回路３４６は、特定のチェック回路３４４からの破損した記憶ビットのアドレスを用いてマップテーブル３５２にインデックスを付する。マップテーブル３５２は、設定メモリフレーム３３２〜３３４に対する各マスク３５６〜３５８を含む。ソフトエラーの検出時に、特定のチェック回路３４４は、破損した記憶ビットに対するフレームアドレス、およびフレーム内の破損した記憶ビットのオフセットアドレス、またはフレーム内のどの記憶ビットが破損したのかを示すベクトルを提供する。特定の分類回路３４６は、マップテーブル３５２からフレームアドレスに対するマスクを読み取る。特定の分類回路３４６がこのマスクのオフセットアドレスにてクリティカリティクラスを選択するか、または特定の分類回路３４６がベクトルでこのマスクをマスクして、クリティカリティクラスを決定する。２つのクリティカリティクラスを有する例について、特定の分類回路３４６は、非ゼロマスキング結果に対して厳しいクリティカリティクラスを選択し、ゼロのマスキング結果に対して他のクリティカリティクラスを選択する。特定の訂正回路３４８は、選択されたクリティカリティクラスに関連する緩和技術を実行する。
【００５０】
もう１つの実施の形態においては、マップテーブルは、ソフトエラーを緩和するためのシステム内のもう１つのメモリ（図示せず）において記憶される。
【００５１】
さらにもう１つの実施の形態においては、マップテーブル３５０は、ユーザ設計のための設定データ３０４内に記憶される。ユーザ設計の実行の仕様は、ユーザ設計の設計記述から統合される。ユーザ設計の設計記述は、マップテーブルを特定し、マップテーブルに対する初期化されていない内容を特定するソフトエラーマネージャを含む。統合された仕様は、図２の１つ以上のＢＲＡＭ２０３のようなプログラマブル集積回路３０２の１つ以上のメモリにおいて初期化されていないマップテーブルを実行する。マップテーブルに含まれるクリティカリティクラスは、統合された仕様から生成される。設定データ３０４は、統合された仕様からも生成され、これは、生成されたクリティカリティクラスをマップテーブル３５０に統合することを含む。したがって、プログラマブル集積回路３２０が設定データ３０４で設定されるときに、プログラマブル集積回路３０２のあるメモリは、マップテーブル３５０から指定されたクリティカリティクラスで初期化される。
【００５２】
設定メモリフレーム３３２〜３３４内の記憶ビットは、各記憶ビットの破損の結果の厳しさに従って、様々なクリティカリティクラスへ分類される。各緩和技術は、各クリティカリティクラスに関連する。１つの実施の形態においては、緩和技術は、ソフトエラーの通知を送信すること、またはソフトエラーを特定する情報の記録を取ることである。また、そのような緩和技術は、プログラマブルリソース３０８，３１０，３１２，３１４，３１６，３１８，３２０，３２２，３２４，３２６，３２８〜３３０を再設定するために設定メモリフレーム３３２〜３３４を再初期化し、それから、プログラマブル集積回路３０２をリセットすること、破損した記憶ビットに対応するコードブロックに対するプログラマブルロジックおよび相互接続リソースを設定する各設定メモリフレーム３３２〜３３４を再初期化し、それから、プログラマブル集積回路をリセットすること、破損した記憶ビットを訂正して、破損した記憶ビットに対応するコードブロックに対するプログラマブルロジックおよび相互接続リソースをリセットすること、および破損した記憶ビットを単に訂正することのような様々な訂正技術と組み合わせられ得る。
【００５３】
１つの実施の形態においては、分類回路３４６に対する設定データ３０４は、プログラマブルリソース３０８，３１０，３１２，３１４，３１６，３１８，３２０，３２２，３２４，３２６，３２８〜３３０における特定の分類回路３４６とともに実行される状態レジスタ３６０を含む。代替的には、コードブロック３４０は、状態レジスタを含む。１つの実施の形態においては、コードブロック３４２は、通常は、厳しいクリティカリティクラスを有し、状態レジスタ３６０は、コードブロック３４２がクリティカルデータ上で動作しないときを示す。特定のチェック回路３４４がソフトエラーを検出したときに、特定の分類回路３４６は、状態レジスタ３６０の現在の値が与えられるソフトエラーに対する適当なクリティカリティクラスを決定する。
【００５４】
１つの実施の形態においては、マップテーブル３５０または３５２は、メモリフレーム３３２〜３３４内の記憶ビット設定の１つおよび状態レジスタ３６０の各可能な状態の各組み合わせに対する各クリティカリティクラスを特定する。分類回路は、破損した記憶ビットおよび状態レジスタ３６０の現在の状態の組み合わせに対してマップテーブル３５０または３５２における特定のクリティカリティクラスを決定する。たとえば、破損した記憶ビットがクリティカルデータ上で現在動作しているプログラマブルリソースを設定することを、状態レジスタ３６０の現在の状態が示す場合、分類回路は、クリティカリティクラスが厳しいと決定する。破損した記憶ビットがアイドルまたはクリティカルデータ上で現在動作していないプログラマブルリソースを設定することを、状態レジスタ３６０の現在の状態が示す場合、分類回路は、クリティカリティクラスが厳しくないと決定する。１つの実施の形態においては、破損した記憶ビットのアドレスは、マップテーブル３５２におけるマスク３５６〜３５８のうちの１つを選択し、状態レジスタ３６０の現在の値は、選択されたマスクに埋め込まれた適当なクリティカリティクラスを選択する。
【００５５】
１つの実施の形態には、１つよりも多い状態レジスタがある。１つの例において、マップテーブル３５０または３５２は、メモリフレーム３３２〜３３４内の設定内の各記憶ビットに対する識別値を含み、識別値は、状態レジスタ３６０または他の状態レジスタを選択する。プラグマは、各コードブロック３４０〜３４２に関連する状態レジスタ、および状態レジスタの可能な値に対するクリティカリティクラスを特定する。特定のチェック回路３４４がソフトエラーを検出したときに、特定の分類回路３４６は、ソフトエラーによって影響されるコードブロックの現在の動作状態に対する適当なクリティカリティクラスを決定し得る。
【００５６】
本発明の実施の形態は、集積回路におけるソフトエラーを緩和するための様々な方法およびシステムに利用可能であると考えられる。他の局面および実施の形態は、明細書の考慮および本明細書に開示された実施の形態の実行から当業者に明らかになるであろう。実施の形態は、ソフトウェアを実行するように構成された１つ以上のプロセッサとして、特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）として、またはプログラマブル論理回路（programmable logic device）上のロジックとして実行され得る。明細書および説明された実施の形態は、単なる例示であると考慮され、本発明の本当の範囲は、以下の特許請求の範囲によって示されることが意図される。
【図１】
0005486139.tif 000002
【図２】
0005486139.tif 000003
【図３】
0005486139.tif 000004