Intel® Stratix® 10 SEU Mitigation User Guide

ID 683602
Date 2/20/2024
Public
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);