Visible to Intel only — GUID: yxt1505205649047
Ixiasoft
Visible to Intel only — GUID: yxt1505205649047
Ixiasoft
4.6. Performing Lookup for Sensitivity Map Header
- 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:
- 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
- Read three 32-bit words of sector information entry for:
- Sector encoding scheme 32-bit address
- Sector .smh data 32-bits address
- 8 bits of sector .smh tag size (can be 1,2,4, or 8 bits)
- 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)
- Read the following sector encoding scheme information for error location frame index and bit position within the frame:
- 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
- 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)
- 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];
- Read the first three words of sector encoding scheme header information to obtain the encoding scheme parameters.
- Read the following data from sector .smh data to establish affected ASD regions:
- 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);
- 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);
- The smh_tag_size bit length .smh tag for frame_data_offset and tag_index from 2.