Intel® Stratix® 10 SEU Mitigation User Guide

ID 683602
Date 12/30/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

4.6. Performing Lookup for Sensitivity Map Header

You must enable the following options in the Intel® Quartus® Prime software before performing SMH lookup using the Advanced SEU Detection Intel® FPGA IP:
  • Error detection CRC
  • Generate SEU sensitivity map file (.smh)

To perform a lookup into the sensitivity map header for Intel® Stratix® 10 devices, perform the following steps:

  1. Read .smh file header to obtain generic .smh information:
    • Address = 0
    • Word 0 = SMH_signature
    • Word 1 = (reserved, region_mask_size)
    • Word 2 = sector_info_base_address
  2. Read three 32-bit words of sector information entry for:
    1. Sector encoding scheme 32-bit address
    2. Sector .smh data 32-bits address
    3. 8 bits of sector .smh tag size (can be 1,2,4, or 8 bits)
    4. 16 bits of ASD region map size that is the number of ASD region bitmasks used by sector
    • Address = sector_info_base_address + (sector_index*3)
    • Word 0 = encoding_scheme_address
    • Word 1 = sector_data_address
    • Word 2 = (reserved, regions_map_size, smh_tag_size)
  3. Read the following sector encoding scheme information for error location frame index and bit position within the frame:
    1. Read the first three words of sector encoding scheme header information to obtain the encoding scheme parameters.
      • Address = encoding_scheme_address
      • Word 0 = (reserved, frame_encoding_map_size)
      • Word 1 = frame_info_base_offset
      • Word 2 = frame_encoding_base_offset
    2. Read the 32-bit frame information string for the frame number.
      • Address = encoding_scheme_address + frame_info_base_offset + frame_index
      • Word 0 = (frame_encoding_index, frame_data_offset)
    3. Get 16-bit index into frame sensitivity data for a bit position.

      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. Read the following data from sector .smh data to establish affected ASD regions:
    1. The smh_tag_size bit length .smh tag for frame_data_offset and tag_index from 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. A zero SMH tag indicates that the bit error location is not critical for any region; a non-zero tag indicates an index in the region map. To get a region mask for SMH tag:

      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);