インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

10.4.6.1. シングルビット・エラー割り込み

シングルビット・エラー割り込みの生成には、シングルビットError Interrupt Enable (ERRINTEN) レジスターをコンフィグレーションする必要があります。

真のデュアルポート・メモリーの場合は、各メモリーポートのエラーに対して個別の割り込みが生成されます。

ECCコントローラーは、次の場合にシングルビット・エラー割り込みを生成することができます。

  • シングルビット・エラーすべて
  • LUTのオーバーフロー
  • シングルビット・エラー・カウンターの一致

最新のシングルビット・エラーのアドレスは、Single-Bit Error Address (SERRADDRx) レジスターに記録されます。

サブワードアクセスのリードモディファイライト・サイクル中に発生したシングルビット・エラーの場合は、割り込みがトリガーされるほかに、MODSTATレジスターでフラグが設定されます。

Interrupt Status (INSTAT) レジスターは、ECCコントローラーでシングルビット・エラーが保留されていないかを示します。シングルビット・エラー割り込みはすべて、INTSTATレジスターのSingle-bit Error Pendingビットをクリアすることでクリアされます。シングルビット・エラー割り込みの生成は、Error Interrupt Reset (ERRINTENR) レジスターのError Interrupt Resetビットを設定することで無効にすることができます。
注: DMAには、バイトでアクセス可能なメモリーの各バイトレーンに向けた8つの個別のデコーダーがあるため、INSTATレジスターの情報に加え、DECODERSTATレジスターでは、シングルビット・エラーのフラグを設定しているデコーダーが示されます。サポートされている他のECC RAMはすべて、1つのデコーダーのみを保有します。

すべてのシングルビット・エラーでの割り込み

新しいメモリーアドレスのアクセスで発生しているか、またはこれまでと同じメモリーアドレスのアクセスで発生しているかにかかわらず、発生するシングルビット・エラーすべてで割り込みを生成するには、次の作業を行う必要があります。

  • Interrupt Mode (INTMODE) レジスターのINTMODEビットをクリアします。
  • Error Interrupt Enable (ERRINTEN) レジスターのSERRINTENビットを設定し、割り込みを有効にします。

このモードでは、最も頻繁に割り込みが生成されます。よって、この割り込みをすべて処理するには、多くのプロセッサー・サイクル・リソースを消費します。

注: この割り込みコンフィグレーションでは、オーバーフローのデータは記録されません。

LUTオーバーフロー割り込み

LUTテーブルを使用し、2つのタイプの割り込みを生成することができます。

シングルビット・エラーが検出および訂正されるたびに、エラーのアドレスがLUTに記録されます。記録されるそれぞれのアドレスは一意であり、そのRAMバンクのデータワード境界にあります。アドレステーブルの一貫性は、有効ビットによって管理されます。

割り込みは、新しいLUTエントリーごとに生成する、もしくはLUTがオーバーフローした際にのみ生成することができます。次の表は、INTMODEレジスターのINTMODEおよびINTONOVFの値に基づく割り込み結果を説明しています。この表では、Error Interrupt Enable (ERRINTEN) レジスターのSERRINTENビットを設定し、割り込みが有効になっていると想定しています。
注: INTMODEビットがクリアされると、すべてのエラーで割り込みが生成され、オーバーフローのデータは記録されません。LUTでエントリーを記録するには、INTMODEビットを1に設定する必要があります。
表 91.  LUTオーバーフロー割り込みのコンフィグレーション・オプション
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ビットを設定します。