インテル® Stratix® 10 SEU (Single Event Upset) 緩和 ユーザーガイド

ID 683602
日付 10/10/2018
Public
ドキュメント目次

3.6. センシティビティー・マップ・ヘッダーのルックアップの実行

次のオプションを インテル® Quartus® Prime開発ソフトウェアで有効にしてから、SMHルックアップの実行にAdvanced SEU Detection Intel® Stratix® 10 FPGA IPを使用してください。
  • エラー検出CRC
  • SEUセンシティビティー・マップ・ファイル (.smh) の生成

センシティビティー・マップ・ファイルのルックアップを インテル® Stratix® 10デバイスに対して実行する場合は、次の手順を実行します。

  1. .smh ファイルヘッダーを読み出して、汎用 .smh 情報を取得します。
    • アドレス = 0
    • ワード0 = SMH_signature
    • ワード1 = (reserved, region_mask_size)
    • ワード2 = sector_info_base_address
  2. 32ビットワードのセクター情報エントリーを3つ読み取ります。
    1. セクター暗号化スキーム32ビットアドレス
    2. セクター .smh データ32ビット・アドレス
    3. 8ビットのセクター .smh タグサイズ(1、2、4、または8ビットにすることができます)
    4. セクターで使用されるASD領域ビットマスクの数である16ビットのASD領域マップサイズ
    • アドレス= sector_info_base_address + (sector_index*3)
    • ワード0 = encoding_scheme_address
    • ワード1 = sector_data_address
    • ワード2 = (reserved, regions_map_size, smh_tag_size)
  3. 次のセクター暗号化スキーム情報を読み出して、エラー位置フレーム・インデックスおよびフレーム内のビット位置を確認します。
    1. セクター暗号化スキームのヘッダー情報の最初の3つのワードを読み出して、暗号化スキームのパラメーターを取得します。
      • アドレス = encoding_scheme_address
      • ワード0 = (reserved, frame_encoding_map_size)
      • ワード1 = frame_info_base_offset
      • ワード2 = frame_encoding_base_offset
    2. 32ビットのフレーム情報文字列でフレーム番号を確認します。
      • アドレス = encoding_scheme_address + frame_info_base_offset + frame_index
      • ワード0 = (frame_encoding_index, frame_data_offset)
    3. ビット位置のフレーム・センシティビティー・データへの16ビット・インデックスを取得します。

      int16* frame_encoding_map = encoding_scheme_address + frame_encoding_base_offset + (frame_encoding_map_size * frame_encoding_index)/4;

      int16 tag_index = frame_encoding_map[bit_position];

  4. セクター .smh データで次のデータを確認し、影響を受けるASD領域を確立します。
    1. frame_data_offset および tag_indexsmh_tag_size ビット長 .smh タグ2

      int8* frame_data = (sector_data_address + 1 + (regions_map_size*region_mask_size+31)/32 + frame_data_offset*smh_tag_size);

      int8 sensitivity_byte = frame_data[tag_index*smh_tag_size/8];

      int8 smh_tag = (sensitivity_byte >> (tag_index*smh_tag_size%8)) & ((0x1<<smh_tag_size)-1);

    2. ゼロのSMHタグは、ビットエラーの位置がどの領域に対してもクリティカルではないことを示します。ゼロ以外のタグは、領域マップ内のインデックスを示します。SMHタグの領域マスクを取得するには次を実行します。

      int32* region_masks = sector_data_address+1;

      int32 region_mask_offset = (smh_tag-1)*region_mask_size;

      int32 region_mask_word = region_masks[region_mask_offset/32];

      int32 region_mask = (region_mask_word >> region_mask_offset%32) & ((0x1<<(region_mask_size)-1);