Advanced SEU Detection Intel® FPGA IP User Guide

ID 683542
Date 11/11/2024
Public
Document Table of Contents

4.3.4. Performing a Lookup for SMH Revision 3 ( Arria® 10 and Cyclone® 10 GX Devices)

To perform a lookup into the sensitivity map header data using a bit, byte, and frame number from an EMR for Arria® 10, Cyclone® 10 GX devices:
  1. Read the frame information entry's higher two bytes to obtain the frame index in the offset map array:
    • Address = frame_info_base_address + (frame address * 6)
    • Return value = offset_map_array_index
  2. Read the frame information entry's lower four bytes to obtain the frame sensitivity data offset:
    • Address = frame_info_base_address + (frame address * 6) + 2
    • Return value = frame_info_data_offset
  3. Read the frame's offset map information. The return value is 16 bits.
    • Address = offset_map_base_address + offset array for current frame + offset data value for current frame-based double word and frame-based bit

    Where:

    • Offset array for the current frame = offset_map_array_index * offset_map_length
    • Offset data value for the current frame-based double word and frame-based bit = [(double word * 32) + bit] * 2
    • Return value = offset_map_value
  4. Read the 8-bit sensitivity value:
    • Address = sensitivity_data_array_base_address + frame_info_data_offset * sensitivity_data_tag_size + (offset_map_value * sensitivity_data_tag_size / 8)
    • Return value = sensitive_data_word[7:0]
  5. Read the sensitivity data tag. The offset map value provides the sensitive bit index. The return value for the sensitivity tag is sensitivity_data_tag_size bit length. A zero tag indicates that the bit is not critical for any region; a non-zero tag indicates an offset in the region map.

    sensitive_tag = (sensitive_data_word >> tag_shift) & tag_mask

    Where:

    • tag_shift = (offset_map_value * sensitivity_data_tag_size)[2:0]
    • tag_mask = (0x1 << sensitivity_data_tag_size) - 1
  6. Read the region mask for a non-zero sensitivity tag only. The return value for the region mask is 16 bits.
    region_mask = region_map_base_address + (sensitivity_data_tag - 1) * 2