インテルのみ表示可能 — Ixiasoft
インテルのみ表示可能 — Ixiasoft
10.4.6.1. シングルビット・エラー割り込み
シングルビット・エラー割り込みの生成には、シングルビットError Interrupt Enable (ERRINTEN) レジスターをコンフィグレーションする必要があります。
真のデュアルポート・メモリーの場合は、各メモリーポートのエラーに対して個別の割り込みが生成されます。
ECCコントローラーは、次の場合にシングルビット・エラー割り込みを生成することができます。
- シングルビット・エラーすべて
- LUTのオーバーフロー
- シングルビット・エラー・カウンターの一致
最新のシングルビット・エラーのアドレスは、Single-Bit Error Address (SERRADDRx) レジスターに記録されます。
サブワードアクセスのリードモディファイライト・サイクル中に発生したシングルビット・エラーの場合は、割り込みがトリガーされるほかに、MODSTATレジスターでフラグが設定されます。
すべてのシングルビット・エラーでの割り込み
新しいメモリーアドレスのアクセスで発生しているか、またはこれまでと同じメモリーアドレスのアクセスで発生しているかにかかわらず、発生するシングルビット・エラーすべてで割り込みを生成するには、次の作業を行う必要があります。
- Interrupt Mode (INTMODE) レジスターのINTMODEビットをクリアします。
- Error Interrupt Enable (ERRINTEN) レジスターのSERRINTENビットを設定し、割り込みを有効にします。
このモードでは、最も頻繁に割り込みが生成されます。よって、この割り込みをすべて処理するには、多くのプロセッサー・サイクル・リソースを消費します。
LUTオーバーフロー割り込み
LUTテーブルを使用し、2つのタイプの割り込みを生成することができます。
シングルビット・エラーが検出および訂正されるたびに、エラーのアドレスがLUTに記録されます。記録されるそれぞれのアドレスは一意であり、そのRAMバンクのデータワード境界にあります。アドレステーブルの一貫性は、有効ビットによって管理されます。
INTMODEの値 | INTONOVFの値 | 結果 |
---|---|---|
0 | X = Don't care | すべてのエラーにおいて割り込みが生成されます。オーバーフローのデータは記録されません。 |
1 | 0 | 新しいLUTエントリーごとに割り込みが生成されます。オーバーフロー検出は無効です。 例: 4エントリーのLUTの場合、LUTに入力される一意のアドレスごとに割り込みがアサートされます。 |
1 | 1 | LUTがオーバーフローした場合にのみ割り込みが生成されます。 例: LUTの深さが4の場合、5番目の一意のアドレスが発生した際に割り込みがアサートされます。 |
カウンター一致割り込み
カウンター一致割り込みを使用すると、割り込みフラグが設定される前にキャプチャーされるシングルビット・エラー数のしきい値を設定することができます。
INTMODEレジスターのINTONCMPビットにより、内部カウンターでのカウント、およびSingle-Bit Error Count (SERRCNTREG) レジスターのSERRCNTの値との比較が行えるようになります。内部カウンターは、新しいアドレスで発生しているか、もしくはこれまでと同じアドレスで発生しているかにかかわらず、すべてのシングルビット・エラーでインクリメントします。INTONCMPビットは、INTMODEレジスターのINTMODEビットおよびINTONOVFビットに影響しません。内部カウンターの値がSingle-Bit Error Count (SERRCNTREG) レジスターの値よりも小さい場合、割り込みは生成されません。内部カウンターがSERRCNTREGの値以上になると、シングルビット割り込み要求がアサートされ、Mode Status (MODSTAT) レジスターのCMPFLGxビットが設定されます。また、Interrupt Status (INTSTAT) レジスターのSERRPENxビットが設定されます。一致が発生すると、MODSTATレジスターのCMPFLGxビットがクリアされるまで、エラーがさらに発生した場合でもカウンターはインクリメントしません。
一致が発生した場合、次の3つの方法で処理することが可能です。
- エラーカウンターを再起動せずにリセットします。ECCコントローラーは、カウンターを再起動するまでシングルビット・エラーをカウントしません。CTRLレジスターのCNT_RSTxビットを1に設定すると、カウンターはクリアされます。CMPFLGxビットは設定されたままです。カウンターは、CMPFLGxビットがクリアされるまでインクリメントしません。
- カウンターをリセットして再起動し、比較フラグをクリアします。CTRLレジスターのCNT_RSTxビットを1に設定すると、カウンターはクリアされます。CMPFLGxビットに1を書き込むと、このビットはクリアされます。内部カウンターは0からカウントを開始します。
- カウント値をより高い値に設定し、比較フラグをクリアします。SERRCNTREGの値を最初の比較一致値よりも大きい値に書き込みます。CMPFLGxビットに1を書き込みます。これによりCMPFLGxビットはクリアされますが、内部カウンターはリセットされず、中断した値から新しいSERRCNTREGの値に達するまでカウントを継続します。
割り込みサービスルーチン (ISR) を実行中にカウンターの再開を許可すると、ISRが終了する前にエラーカウンターが再び上限に到達する場合があります。これが発生した場合に、割り込みをクリアしてISRを終了しても、新たなカウンター一致状態は検出されません。この問題を回避するには、ISRを終了する前にMODSTATレジスターのCMPFLGxビットを確認します。CMPFLGxが別のカウンター一致状態を示している場合は、かならずそれを処理します。
シングルビット・エラー割り込みをクリアするには、INTSTATレジスターのSERRPENxビットを設定します。