UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 40863

13.1 EDK - MicroBlaze プロセッサーおよび LMB コントローラーでの新しいフォルト トレラントおよび ECC の使用方法

説明

MicroBlaze プロセッサーおよび LMB コントローラーで新しいフォルト トレラントおよび ECC を使用するにはどうすればよいでしょうか。

ソリューション


フォルト トレランス

MicroBlaze プロセッサー v8.00.a およびそれ以降のバージョンには、パラメーター C_FAULT_TOLERANT で使用可能になるフォルト トレランス機能があります。これらの機能により、内部ブロック RAM のエラー検出や、LMB ブロック RAM でのエラー検出および修正 (ECC) のサポートが提供されています。フォルト トレランスが有効になっていると、ブロック RAM のソフト エラーはすべて検出および修正され、エラー発生率を著しく抑えることができます。

ブロック RAM の保護だけでなく、FPGA コンフィギュレーション メモリも通常保護する必要があります。このトピックの詳細は、『SEU Strategies for Virtex-5 Devices』 アプリケーション ノート(XAPP864) を参照してください。
http://japan.xilinx.com/support/documentation/application_notes/xapp864.pdf

コンフィギュレーション

MicroBlaze コンフィギュレーションの使用

フォルト トレンランスは MicroBlaze コンフィギュレーション ダイアログ ボックスで有効にすることができます。デフォルト設定を上書きするためパラメーターの左側にある X ボタンをクリックする必要があるので、高度なコンフィギュレーションを使用してこの設定を行う必要があります。



MicroBlaze でフォルト トレランスを有効にした後、システム生成時に、接続されている LMB ブロック RAM Interface Controller で ECC は自動的に有効になります。つまり、フォルト トレランスおよび最小限の ECC サポートを有効にするためには特にほかに何も設定する必要はありません。

推奨できませんが、すべての接続されている LMB ブロック RAM Interface Controller のコンフィギュレーション ダイアログ ボックスで C_ECC を無効にして、LMB BRAM を保護せずに ECC を手動で上書きすることは可能です。この場合、フォルト トレランスが有効なので内部 MicroBlaze ブロック RAM の保護は引き続き有効です。

LMB ブロック RAM Interface Controller のコンフィギュレーション

上記の方法に代わる策として、すべての接続されている LMB ブロック RAM Interface Controller のコンフィギュレーション ダイアログ ボックスで ECC を有効にすることも可能です。この場合、システム生成時に MicroBlaze でフォルト トレランスは自動的に有効になります。つまり、ECC サポートおよび MicroBlaze のフォルト トレランスを有効にするのにほかに何も設定する必要はありません。

ECC はすべてのコントローラーで有効か無効にしておく必要があり、これは DRC で強化されています。

MicroBlaze コンフィギュレーション ダイアログ ボックスで C_FAULT_TOLERANT を無効にして、MicroBlaze でのフォルト トレランス サポートを手動で上書きすることは可能です。しかし、MicroBlaze でブロック RAM が使用されておらず、修正不可能な ECC エラーからのバス例外を処理する必要がない限り、これは推奨できません。

機能

すべての MicroBlaze フォルト トレランス機能の概要は以下のとおりです。各機能の詳細は、『MicroBlaze プロセッサー リファレンス ガイド』 (UG081) の次のセクションを参照してください。
http://japan.xilinx.com/support/documentation/sw_manuals/xilinx13_1/mb_ref_guide.pdf
  • 命令およびデータ キャッシュ保護
  • メモリ管理ユニット保護
  • 分岐ターゲット キャッシュ保護
  • 例外処理

LMB ブロック RAM Interface Controller v3.00.a は LMB ECC インプリメンテーションを提供します。パフォーマンスおよびリソース使用率などの詳細は、『IP Processor LMB BRAM Interface Controller』 (DS452) を参照してください。

命令およびデータ キャッシュ保護

命令およびデータ キャッシュでブロック RAM を保護するには、パリティが使用されます。パリティ エラーが検出されると、対応するキャッシュ ラインが無効になります。これで、キャッシュに外部メモリから正しい値がもう一度読み込まれます。パリティはキャッシュ ヒットが発生するたびにチェックされます。

これはライトスルーにのみ機能し、フォルト トレンランスが有効になっているときはライトバック データ キャッシュは使用できません。これは DRC で強化されています。

キャッシュにあるブロック RAM に新しい値が書き込まれると、パリティも計算され書き込まれます。タグに 1 パリティ ビット、命令キャッシュ データに 1 パリティ ビット、データ キャッシュ ラインの各ワードに 1 パリティ ビットが使用されます。

パリティにはスペア ビットを使用することができるため、フォルト トレランスを有効にしてもキャッシュ ブロック RAM の必要な数は増えないケースがほとんどです。リソース利用率、特にブロック RAM の数の増加は、フォルト トレンランスを有効にしたときに MicroBlaze のコンフィギュレーション ダイアログ ボックスで簡単に確認することができます。

メモリ管理ユニット (MMU) の保護

MMU の UTLB (Unified Translation Look-Aside Buffer) でブロック RAM を保護するには、パリティが使用されます、アドレス トランザクション中にパリティ エラーが検出されると、TLB がないという例外が発生し、ソフトウェアによりそのエントリが再度読み込まれます。

TLBHI および TLBLO レジスターを使用して新しい TLB エントリが書き込まれると、パリティが計算されます。 各エントリに 1 パリティ ビットが使用されます。

TLBHI および TLBLO レジスターを使用して UTLB エントリが読み出されると、パリティもチェックされます。このケースでパリティ エラーが検出されると、有効ビットがクリアになりエントリが無効となります。

パリティにはスペア ビットを使用することができるため、フォルト トレランスを有効にしても MMU のブロック RAM のサイズは増加しません。

分岐ターゲット キャッシュの保護

分岐ターゲット キャッシュでブロック RAM を保護するには、パリティが使用されます。分岐ターゲット アドレスが検索されているときパリティ エラーが検出されると、アドレスが無視され、標準分岐になります。

新しい分岐アドレスが分岐ターゲット キャッシュに書き込まれると、パリティが計算されます。各アドレスに 1 パリティ ビットが使用されます。

パリティにはスペア ビットを使用することができるため、フォルト トレランスを有効にしても分岐ターゲット キャッシュのブロック RAM のサイズは増加しません。

例外処理

フォルト トレランスが有効になっていると、LMB ブロック RAM でエラーが発生した場合、LMB ブロック RAM Interface Controller により LMB バスにエラー信号が生成されます。

例外が MicroBlaze で有効になっている場合、マシン ステータス レジスターで EE ビットを設定して、影響を受けるインターフェイスによって、修正不可能なエラー信号は命令バス例外またはデータ バス例外を生成します。

例外処理中にバス例外が発生した場合は、MicroBlaze が停止し、外部エラー信号が設定されます。この動作により、修正不可能なエラーによって破損した命令を実行することができなくなります。

ソフトウェア サポート

スクラブ (中止)

ブロック RAM にビット エラーが累積しないようにするには、ビット エラーを定期的に中止する必要があります。

スタンドアロンの BSP には、LMB ブロック RAM 全体、および特定コンフィギュレーションで使用されている MicroBlaze 内部ブロック RAM すべてを中止する microblaze_scrub() というファンクションがあります。このファンクションは、タイマー割り込みルーチンから定期的に呼び出されます。

この実行方法は次のコードに記述されています。

#include "xparameters.h"
#include "xtmrctr.h" #include "xintc.h"
#include ?mb_interface.h?
#define SCRUB_PERIOD ...

XIntc InterruptController; /* The instance of the Interrupt Controller */
XTmrCtr TimerCounterInst; /* The instance of the Timer Counter */

void MicroBlazeScrubHandler(void *CallBackRef, u8 TmrCtrNumber)
{
/* Perform other timer interrupt processing here */
microblaze_scrub();
}

int main (void)
{
int Status;

/*
* Initialize the timer counter so that it's ready to use,
* specify the device ID that is generated in xparameters.h
*/
Status = XTmrCtr_Initialize(&TimerCounterInst, TMRCTR_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*
* Connect the timer counter to the interrupt subsystem such that
* interrupts can occur.
*/

Status = XIntc_Initialize(&InterruptController, INTC_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*
* Connect a device driver handler that will be called when an interrupt
* for the device occurs, the device driver handler performs the specific
* interrupt processing for the device
*/

Status = XIntc_Connect(&InterruptController, TMRCTR_DEVICE_ID,
(XInterruptHandler)XTmrCtr_InterruptHandler,
(void *) &TimerCounterInst);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*
* Start the interrupt controller such that interrupts are enabled for
* all devices that cause interrupts, specifying real mode so that
* the timer counter can cause interrupts thru the interrupt controller.
*/

Status = XIntc_Start(&InterruptController, XIN_REAL_MODE);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*
* Setup the handler for the timer counter that will be called from the
* interrupt context when the timer expires, specify a pointer to the
* timer counter driver instance as the callback reference so the handler
* is able to access the instance data
*/

XTmrCtr_SetHandler(&TimerCounterInst, MicroBlazeScrubHandler,
&TimerCounterInst);

/*
* Enable the interrupt of the timer counter so interrupts will occur
* and use auto reload mode such that the timer counter will reload
* itself automatically and continue repeatedly, without this option
* it would expire once only
*/

XTmrCtr_SetOptions(&TimerCounterInst, TIMER_CNTR_0,
XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION);

/*
* Set a reset value for the timer counter such that it will expire
* earlier than letting it roll over from 0, the reset value is loaded
* into the timer counter when it is started
*/

XTmrCtr_SetResetValue(TmrCtrInstancePtr, TmrCtrNumber, SCRUB_PERIOD);

/*
* Start the timer counter such that it's incrementing by default,
* then wait for it to timeout a number of times
*/

XTmrCtr_Start(&TimerCounterInst, TIMER_CNTR_0);
...
}


スクラブ レートの計算方法など、スクラブのインプリメント方法の詳細は以下を参照してください。

ブロック RAM ドライバー

LMB ブロック RAM Interface Controller の ECC レジスターにアクセスするためスタンドアロンの BSP ブロック RAM ドライバーは使用され、また、セルフ テストを提供します。

SDK ザイリンクス C プロジェクト「Peripheral Tests」をインプリメントすることで、ブロック RAM を含むセルフ テスト サンプルにより、生成されたシステムで各 LMB ブロック RAM Interface Controller に対し自己テストが実行されます。LMB ブロック RAM Interface Controller で有効になっている ECC 機能によっては、このコードで ECC 機能のすべてのテストが実行されます。

セルフ テスト サンプルは、通常 microblaze_0/libsrc/bram_v3_00_a/src/xbram_selftest.c. にあるスタンドアロンの BSP ブロック RAM ドライバー ソース コードにあります。

スクラブ

スクラブ方法

スクラブはブロック RAM ごとに異なる方法を使用して実行されます。
  • 命令およびデータ キャッシュ : キャッシュにあるすべてのラインは WIC および WDC 命令をそれぞれ使用して周期的に無効になります。これで、外部メモリからキャッシュ ラインが再度読み込まれます。
  • メモリ管理ユニット (MMU) UTLB : UTLB のすべてのエントリは、有効ビットをクリアにして TLBHI レジスターを書き込むことで周期的に無効になります。
  • 分岐ターゲット キャッシュ : 分岐ターゲット キャッシュ全体が、分岐 BRI 4 を同期化することで無効になります。
  • LMB ブロック RAM : メモリのアドレスすべてが周期的に読み出され、書き込まれます。これでそのアドレスの任意のシングル ビット エラーが修正されます。

LMB ブロック RAM Interface Controller からの修正可能なエラーに対し割り込みを追加し、割り込みハンドラーでこのアドレスを中止することも可能ですが、ほとんどの場合、信頼性を若干改善するだけにとどまります。

各 LMB ブロック RAM Interface Controller の Correctable Error First Failing Address レジスターを読み出すことでエラーの発生しているアドレスを判別することができます。割り込みを生成できるようにするには、接続されている LMB ブロック RAM コントローラーで C_ECC_STATUS_REGISTERS を 1 に設定する必要があり、エラーの出ているアドレスを読み出すには、C_CE_FAILING_REGISTERS を 1 に設定する必要があります。

スクラブの頻度の計算

スクラブの周期は、エラー発生率および必要な信頼性のレベルによります。

LMB メモリのスクラブ レートの概算式は次のようになります。


Pw はメモリ ワードの修正不可能なエラーの確立で、BER は 1 シングル メモリ ビットのソフト エラー レート、SR はスクラブ レートです。

ブロック RAM に影響を与える製品デバイス別のソフト エラー レートは、『Device Reliability Report, Fourth Quarter 2010』 (UG116) を参照してください。
http://japan.xilinx.com/support/documentation/user_guides/ug116.pdf

使用例

一般的な使用例は次のとおりです。これらの使用例は『IP Processor LMB Block RAM Interface Controller』 (DS452) からの抜粋です。

Minimal

MicroBlaze でフォルト トレランスが有効になっている場合、ほかのコンフィギュレーションを実行せずに、このシステムが得られます。

エリア制約が厳しく設定されていて、ECC 機能をテストをする必要や、エラーの頻度および場所を分析する必要がない場合、このシステムが適しています。ECC レジスターはインプリメントされません。シングル ビット エラーは MicroBlaze に渡される前に ECC ロジックによって修正されます。修正不可能なエラーによりエラー信号が設定され、MicroBlaze で例外が生成されます。

Small

エラーの頻度を監視する必要があるが、ECC 機能をテストする必要はない場合にこのシステムを使用します。Minimal システムに修正可能なエラー カウンター レジスターを追加して、シングル ビット エラー レートを監視します。エラー レートが高すぎる場合、スクラブ レートを高くして、シングル ビット エラーが修復不可能なダブル ビット エラーになるリスクを抑えます。パラメーターの設定は C_ECC = 1 および C_CE_COUNTER_WIDTH = 10 です。

Typical

このシステムは、エラーの頻度を監視する必要があり、ソフトウェアを使用してシングル ビット エラーをすぐに修正するため割り込みを生成するというもので、一般的な使用例です。ECC 機能のテストはサポートされません。これは、Small システムに Correctable Error First Failing レジスターおよびステータス レジスターを追加したものです。シングル ビット エラーはアクセスのアドレスを Correctable Error First Failing Address レジスターに格納し、ECC ステータス レジスターの CE_STATUS ビットを設定します。割り込みが生成され、MicroBlaze がエラーの発生しているアドレスを読み出し、読み出しの後にそのアドレスでの書き込みが続きます。これでブロック RAM からシングル ビット エラーが削除されるので、シングル ビット エラーが修正不可能なダブル ビット エラーになるリスクを低減しています。パラメーターの設定は、C_ECC= 1、C_CE_COUNTER_WIDTH = 10、C_ECC_STATUS_REGISTER = 1、および C_CE_FAILING_REGISTERS = 1 です。

Full

エラー監視や割り込み生成を含む、フル エラー挿入機能を有効にするため、LMB ブロック RAM Interface Controller で提供されている機能がすべて、このシステムでは使用されます。これは Typical システムに Uncorrectable Error First Failing レジスターおよびフォルト挿入レジスターが追加されたものです。システム デバッグや、フォルト トレランス要件の高いシステムに対し、ECC 機能をフル コントロールできます。パラメーターの設定は、C_ECC = 1、C_CE_COUNTER_WIDTH = 10、C_ECC_STATUS_REGISTER = 1、C_CE_FAILING_REGISTERS = 1、C_UE_FAILING_REGISTERS = 1、および C_FAULT_INJECT = 1 です。

参考資料

各フォルト トレランス機能の詳細は、『MicroBlaze プロセッサー リファレンス ガイド』 (UG081) に記載されています。
http://japan.xilinx.com/support/documentation/sw_manuals/xilinx13_1/mb_ref_guide.pdf
  • 命令キャッシュ保護 : 「MicroBlaze Architecture」、「Instruction Cach」、「nstruction Cache Operation」 を参照してください。
  • データ キャッシュ保護 : 「MicroBlaze Architecture」、「Data Cache」、「Data Cache Operation」 を参照してください。
  • メモリ管理ユニット保護 : 「MicroBlaze Architecture」、「Virtual-Memory Management」、「UTLB Management」 を参照してください。
  • 分岐ターゲット キャッシュ保護 : 「MicroBlaze Architecture」、「Pipeline Architecture」、「Branches」、「Branch Target Cache」を参照してください。
  • ECC 修正不可能なエラーの例外処理 : 「MicroBlaze Architecture」、「Reset, Interrupts, Exceptions, and Break」、「Hardware Exceptions」、「Exception Causes」、「Instruction/Data Bus Exception」を参照してください。
  • 例外処理中の例外に対するエラー停止 : 「MicroBlaze Architecture」、「Reset, Interrupts, Exceptions, and Break」、「Hardware Exceptions」、「Exception Causes」を参照してください。

LMB ECC インプリメンテーションの詳細は 『IP Processor LMB BRAM Interface Controller』 (DS452) に記載されています。内部レジスターへのリファレンス、パフォーマンスおよびリソース使用率に関する情報も記載されています。

ブロック RAM に影響を与える製品デバイス別のソフト エラー レートは、『Device Reliability Report, Fourth Quarter 2010』 (UG116) を参照してください。
http://japan.xilinx.com/support/documentation/user_guides/ug116.pdf

コンフィギュレーション メモリ保護の詳細や、その他の情報については、 『SEU Strategies for Virtex-5 Devices』 (XAPP864) を参照してください。
http://japan.xilinx.com/support/documentation/application_notes/xapp864.pdf

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
39843 EDK 13.x - マスター アンサー N/A N/A
AR# 40863
日付 12/15/2012
ステータス アクティブ
種類 一般
ツール
  • EDK - 13.1
このページをブックマークに追加