1. はじめに
Altera®(Intel®)SoC FPGA では、下記デバイスに対し ECC 機能を使用することができます。
[Cyclone® V Hard Processor System Technical Reference Manual より引用]
【図 1】 ECC 機能を使用できるペリフェラル
実際に ECC 機能が正常に働くか事前に確認したい場合には、エラー・インジェクションが使用できます。
この記事では、エラー・インジェクションについて説明します。
2. エラー・インジェクションの概要
ECC 符号が付加されたデータを Read した際、正常に ECC 機能が働くか確認したい場合は、エラー・イン ジェクションが適しています。
エラー・インジェクションは、 System Manager が 1bit もしくは 2bit のエラーを意図的にデータへ埋め込む機能です。
この機能を用いることで、正常ではないデータを Read した際の挙動を確認することができます。
3. エラー・インジェクションの設定レジスター
エラー・インジェクションの設定レジスターは、SDRAM とその他のペリフェラルで異なります。
3-1. SDRAM
SDRAM の場合は、SDRAM Controller → ctrlcfg レジスターで設定します。
Single-Bit と Double-Bit のエラー・インジェクションの設定 Bit は下記となります。
- Single-Bit の場合 → Bit [13]: gensbe
- Double-Bit の場合 → Bit [14]: gendbe
参考:
レジスターの詳細については下記資料をご参照ください。
Cyclone® V HPS Memory Map ⇒ SDRAM Controller Address Map ⇒ ctrlcfg
3-2. SDRAM 以外
SDRAM 以外の場合は、System Manager のレジスターで設定します。
System Manager のレジスター内では、SDRAM 以外の各ペリフェラルに対する ECC を設定できるレジスターが設けられています。
参考:
詳細については下記資料をご参照ください。
Cyclone® V Memory Map ⇒ System Manager Module Address Map
各ペリフェラルに対するレジスターについては下記をご参照ください。
[Cyclone® V HPS Memory Map より引用]
【図 2】 SDRAM 以外のモジュールの ECC 設定レジスター
L2 キャッシュを例に説明すると、Single-Bit と Double-Bit の設定箇所は下記となります。
- Single Bit の場合 → Bit [1]: injs
- Double Bit の場合 → Bit [2]: injd
参考:
詳細については下記資料をご参照ください。
Cyclone® V HPS Memory Map ⇒ System Manager ⇒ l2
他のペリフェラルに対しても、Single Bit の場合は injs、Double Bit の場合は injd をキーワードに設定箇所をご確認頂ければと思います。
4. エラー・インジェクションの使い方
エラー・インジェクションは、前述の「3. エラー・インジェクションの設定レジスター」で紹介したレジスターを用いて設定します。
但し、その際設定方法が SDRAM とそれ以外のペリフェラルで異なるので差分を紹介します。
4-1. SDRAM
SDRAM の場合は、エラー・インジェクションのレジスターを High にしている状態で Write すると使用することができます。
イメージとしては【図 3】の通りです。
【図 3】 エラー・インジェクションの設定(SDRAM)
4-2. SDRAM 以外
SDRAM 以外の場合は、エラー・インジェクションのレジスターをトグルさせ、一定時間内に Write することにより使用することができます。
イメージとしては【図 4】の通りです。
【図 4】 エラー・インジェクションの設定(SDRAM 以外)
5. サンプルコード紹介
メーカーから SDRAM 以外のペリフェラルに対する ECC のサンプルコードが公開されています。
SDRAM におけるエラー・インジェクションの設定は、gensbe/gendbe を High 状態で Write を行えば良いのに対し、SDRAM 以外の場合は injs / injd をトグルさせる必要があります。
その為、SDRAM 以外のペリフェラルに対するサンプルコードは有益となりますので紹介します。
参考:
サンプルコードは下記リンクから取得可能です。
Design Example
SoC デザイン例 ⇒ Error correction code
上記サンプルにおいて、L2 キャッシュのエラー・インジェクションの設定箇所を紹介しますので、
ご参考にしてください(【図 5】)。
【図 5】 L2 キャッシュの場合のエラー・インジェクションの設定箇所
6. まとめ
SoC FPGA では、様々なペリフェラルに対し ECC 機能を使用でき、正しく機能するか検証するためにエラー・インジェクションがあります。
エラー・インジェクションの設定方法は、SDRAM とその他のペリフェラルで異なります。
SDRAM の場合は、エラー・インジェクションの設定レジスターを High 状態にし、SDRAM へ Write することで使用できます。
一方、SDRAM 以外の場合は、エラー・インジェクションの設定レジスターをトグルさせた後、一定時間内に Write することで使用できます。
今後 ECC のエラー・インジェクションをご使用になられる場合は、設定方法に気を付けてご使用頂ければと思います。