AN 539: Test Methodology of Error Detection and Recovery using CRC in Intel FPGA Devices

ID 683075
Date 8/09/2019
Public
Document Table of Contents

1.3.2.2. Unloading the EMR using an External Host

To unload the contents of the EMR using an external host, such as a JTAG port, use the SHIFT_EDERROR_REG JTAG instruction. This JTAG instruction connects the EMR to the JTAG pin in the error detection block between the TDI and TDO pins. You can execute the instruction whenever the CRC_ERROR pin goes high.

You must unload the contents of the EMR before the register is overwritten by the information of the next CRC error.

The following examples show the Jam™ Standard Test and Programming Language (STAPL) Format File (.jam) used to execute the SHIFT_EDERROR_REG JTAG instruction to unload the contents of the EMR.

Example of .jam File to Unload the Contents of the EMR for Arria® II, Stratix® III, and Stratix® IV Devices

ACTION UNLOAD_EMR = EXECUTE;

DATA EMR_DATA;

BOOLEAN out[46];

BOOLEAN in[46]=$3FFFFFFFFFFF;

ENDDATA;

PROCEDURE EXECUTE USES EMR_DATA;

DRSTOP IDLE;

IRSTOP IDLE;

STATE IDLE;

IRSCAN 10, $017;

WAIT IDLE, 10 CYCLES, 1 USEC, IDLE;

DRSCAN 46, in[45..0], CAPTURE out[45..0];

WAIT IDLE, 10 CYCLES, 25 USEC, IDLE;

PRINT " ";

PRINT "Data read out from the EMR Register: ", out[45], out[44], out[43], out[42], out[41], out[40], out[39], out[38], out[37], out[36], out[35], out[34], out[33], out[32], out[31], out[30]," ", out[29], out[28], out[27], out[26], out[25], out[24], out[23], out[22], out[21], out[20], out[19], out[18], out[17], out[16]," ", out[15], out[14], out[13], out[12], out[11], out[10], out[9], out[8], out[7], out[6], out[5]," ", out[4], out[3], out[2]," ", out[1], out[0];

PRINT " ";

PRINT "Syndrome:", out[45], out[44], out[43], out[42], out[41], out[40], out[39], out[38], out[37], out[36], out[35], out[34], out[33], out[32], out[31], out[30];

PRINT "Frame Address:", out[29], out[28], out[27], out[26], out[25], out[24], out[23], out[22], out[21], out[20], out[19], out[18], out[17], out[16];

PRINT "Byte Location:", out[15], out[14], out[13], out[12], out[11], out[10], out[9], out[8], out[7], out[6], out[5];

PRINT "Bit Location:", out[4], out[3], out[2];

PRINT "Error Type:", out[1], out[0];

STATE IDLE;

EXIT 0;

ENDPROC;

Example of .jam File to Unload the Contents of the EMR for Arria® V, Cyclone® V, and Stratix® V Devices

ACTION UNLOAD_EMR = EXECUTE;

DATA EMR_DATA;

BOOLEAN out[67];

BOOLEAN in[67]=$7FFFFFFFFFFFFFFFF;

INTEGER i;

ENDDATA;

PROCEDURE EXECUTE USES EMR_DATA;

DRSTOP IDLE;

IRSTOP IDLE;

STATE IDLE;

IRSCAN 10, $017;

WAIT IDLE, 10 CYCLES, 1 USEC, IDLE;

DRSCAN 67, in[66..0], CAPTURE out[66..0];

WAIT IDLE, 10 CYCLES, 25 USEC, IDLE;

PRINT " ";

PRINT "Data read out from the ";

PRINT "EMR_Register ::", out[66], out[65], out[64], out[63], out[62], out[61], out[60], out[59], out[58], out[57], out[56], out[55], out[54], out[53], out[52], out[51], out[50], out[49], out[48], out[47], out[46], out[45], out[44], out[43], out[42], out[41], out[40], out[39], out[38], out[37], out[36], out[35]," ", out[34], out[33], out[32], out[31], out[30], out[29], out[28], out[27], out[26], out[25], out[24], out[23], out[22], out[21], out[20], out[19]," ", out[18], out[17], out[16], out[15], out[14], out[13], out[12], out[11], out[10], out[9]," ", out[8], out[7]," ", out[6], out[5], out[4]," ", out[3], out[2], out[1], out[0];

'PRINT " ";

PRINT "Syndrome ::", out[66], out[65], out[64], out[63], out[62], out[61], out[60], out[59], out[58], out[57], out[56], out[55], out[54], out[53], out[52], out[51], out[50], out[49], out[48], out[47], out[46], out[45], out[44], out[43], out[42], out[41], out[40], out[39], out[38], out[37], out[36], out[35];

PRINT "Frame Address ::", out[34], out[33], out[32], out[31], out[30], out[29], out[28], out[27], out[26], out[25], out[24], out[23], out[22], out[21], out[20], out[19];

PRINT "Double Word Location ::", out[18], out[17], out[16], out[15], out[14], out[13], out[12], out[11], out[10], out[9];

PRINT "Byte Offset ::", out[8], out[7];

PRINT "Bit Offset ::", out[6], out[5], out[4];

PRINT "Error Type ::", out[3], out[2], out[1], out[0];

STATE IDLE;

EXIT 0;

ENDPROC;