Built-In Features to View STDF Content

There are a couple of built-in methods from the Reader‘s object to quickly view the STDF content.

  • show_known_records
  • show_header
  • show_structure
  • show_pattern
  • to_atdf

Each of the methods here will output to the standard output stream. Keyword arguments provided to these methods will be passed on to the internal print command. This allow you to route the output to a text file instead of the stdout. For example:

from stdf import Reader
std = Reader(stdf_file='input_file.std')

with open('text_file.txt', mode='wt') as fout:
    std.show_known_records(file=fout)   # print to file instead of stdout

To understand more about the keywords that you can push to print, visit this.

Listing Known STDF Records

The method show_known_records() will not actually read the STDF file, but it will list down STDF records known by this library.

std.show_known_records()

By default, it will show the list of STDF V4.2007 records. It will return the 3-char STDF header (e.g. ‘FAR’) recorded in rec_name, followed by the record fields which are the keys of the body (e.g. ‘CPU TYPE’).

FAR: CPU_TYPE         STDF_VER
ATR: MOD_TIM          CMD_LINE
VUR: UPD_NAM
MIR: SETUP_T          START_T         STAT_NUM        MODE_COD        RTST_COD
     PROT_COD         BURN_TIM        CMOD_COD        LOT_ID          PART_TYP
     NODE_NAM         TSTR_TYP        JOB_NAM         JOB_REV         SBLOT_ID
     OPER_NAM         EXEC_TYP        EXEC_VER        TEST_COD        TST_TEMP
     USER_TXT         AUX_FILE        PKG_TYP         FAMLY_ID        DATE_COD
     FACIL_ID         FLOOR_ID        PROC_ID         OPER_FRQ        SPEC_NAM
     SPEC_VER         FLOW_ID         SETUP_ID        DSGN_REV        ENG_ID
     ROM_COD          SERL_NUM        SUPR_NAM
MRR: FINISH_T         DISP_COD        USR_DESC        EXC_DESC
PCR: HEAD_NUM         SITE_NUM        PART_CNT        RTST_CNT        ABRT_CNT
     GOOD_CNT         FUNC_CNT
HBR: HEAD_NUM         SITE_NUM        HBIN_NUM        HBIN_CNT        HBIN_PF
     HBIN_NAM
SBR: HEAD_NUM         SITE_NUM        SBIN_NUM        SBIN_CNT        SBIN_PF
     SBIN_NAM
PMR: PMR_INDX         CHAN_TYP        CHAN_NAM        PHY_NAM         LOG_NAM
     HEAD_NUM         SITE_NUM
PGR: GRP_INDX         GRP_NAM         INDX_CNT        PMR_INDX
PLR: GRP_CNT          GRP_INDX        GRP_MODE        GRP_RADX        PGM_CHAR
     RTN_CHAR         PGM_CHAL        RTN_CHAL
RDR: NUM_BINS         RTST_BIN
SDR: HEAD_NUM         SITE_GRP        SITE_CNT        SITE_NUM        HAND_TYP
     HAND_ID          CARD_TYP        CARD_ID         LOAD_TYP        LOAD_ID
     DIB_TYP          DIB_ID          CABL_TYP        CABL_ID         CONT_TYP
     CONT_ID          LASR_TYP        LASR_ID         EXTR_TYP        EXTR_ID
PSR: CONT_FLG         PSR_INDX        PSR_NAM         OPT_FLG         TOTP_CNT
     LOCP_CNT         PAT_BGN         PAT_END         PAT_FILE        PAT_FILE
     PAT_LBL          FILE_UID        ATPG_DSC        SRC_ID
NMR: CONT_FLG         NMR_INDX        TOTM_CNT        LOCM_CNT        PMR_INDX
     ATPG_NAM
CNR: CHN_NUM          BIT_POS         CELL_NAM
SSR: SSR_NAM          CHN_CNT         CHN_LIST
CDR: CONT_FLG         CDR_INDX        CHN_NAM         CHN_LEN         SIN_PIN
     SOUT_PIN         MSTR_CNT        M_CLKS          SLAV_CNT        S_CLKS
     INV_VAL          LST_CNT         CELL_LST
WIR: HEAD_NUM         SITE_GRP        START_T         WAFER_ID
WRR: HEAD_NUM         SITE_GRP        FINISH_T        PART_CNT        RTST_CNT
     ABRT_CNT         GOOD_CNT        FUNC_CNT        WAFER_ID        FABWF_ID
     FRAME_ID         MASK_ID         USR_DESC        EXC_DESC
WCR: WAFR_SIZ         DIE_HT          DIE_WID         WF_UNITS        WF_FLAT
     CENTER_X         CENTER_Y        POS_X           POS_Y
PIR: HEAD_NUM         SITE_NUM
PRR: HEAD_NUM         SITE_NUM        PART_FLG        NUM_TEST        HARD_BIN
     SOFT_BIN         X_COORD         Y_COORD         TEST_T          PART_ID
     PART_TXT         PART_FIX
TSR: HEAD_NUM         SITE_NUM        TEST_TYP        TEST_NUM        EXEC_CNT
     FAIL_CNT         ALRM_CNT        TEST_NAM        SEQ_NAME        TEST_LBL
     OPT_FLAG         TEST_TIM        TEST_MIN        TEST_MAX        TST_SUMS
     TST_SQRS
PTR: TEST_NUM         HEAD_NUM        SITE_NUM        TEST_FLG        PARM_FLG
     RESULT           TEST_TXT        ALARM_ID        OPT_FLAG        RES_SCAL
     LLM_SCAL         HLM_SCAL        LO_LIMIT        HI_LIMIT        UNITS
     C_RESFMT         C_LLMFMT        C_HLMFMT        LO_SPEC         HI_SPEC
MPR: TEST_NUM         HEAD_NUM        SITE_NUM        TEST_FLG        PARM_FLG
     RTN_ICNT         RSLT_CNT        RTN_STAT        RTN_RSLT        TEST_TXT
     ALARM_ID         OPT_FLAG        RES_SCAL        LLM_SCAL        HLM_SCAL
     LO_LIMIT         HI_LIMIT        START_IN        INCR_IN         RTN_INDX
     UNITS            UNITS_IN        C_RESFMT        C_LLMFMT        C_HLMFMT
     LO_SPEC          HI_SPEC
FTR: TEST_NUM         HEAD_NUM        SITE_NUM        TEST_FLG        OPT_FLAG
     CYCL_CNT         REL_VADR        REPT_CNT        NUM_FAIL        XFAIL_AD
     YFAIL_AD         VECT_OFF        RTN_ICNT        PGM_ICNT        RTN_INDX
     RTN_STAT         PGM_INDX        PGM_STAT        FAIL_PIN        VECT_NAM
     TIME_SET         OP_CODE         TEST_TXT        ALARM_ID        PROG_TXT
     RSLT_TXT         PATG_NUM        SPIN_MAP
STR: HEAD_NUM         SITE_NUM        TEST_TYP        TEST_NUM        EXEC_CNT
     FAIL_CNT         ALRM_CNT        TEST_NAM        SEQ_NAME        TEST_LBL
     OPT_FLAG         TEST_TIM        TEST_MIN        TEST_MAX        TST_SUMS
     TST_SQRS
BPS: SEQ_NAME
EPS:
GDR: GEN_DATA
DTR: TEXT_DAT

Accessing STDF Header Content

The method show_header() will return the file’s header records.

std.show_header()

Output example:

>>>
FAR: STDF_VER = 4
FAR: CPU_TYPE = 2
VUR: UPD_NAM =
MIR: TSTR_TYP = Jaguar
MIR: MODE_COD = P
MIR: PART_TYP = MPN-1234-5678
MIR: AUX_FILE = 0
MIR: DATE_COD = 0
MIR: RTST_COD =
MIR: JOB_REV = JOB099
MIR: NODE_NAM = TESTER001
MIR: OPER_NAM = your_name
MIR: USER_TXT = 0
MIR: FAMLY_ID = 0
MIR: PKG_TYP = 0
MIR: JOB_NAM = custom_job_name
MIR: SBLOT_ID = 0
MIR: STAT_NUM = 1
MIR: EXEC_TYP = IG-XL
MIR: PROT_COD =
MIR: EXEC_VER = 8.10.30_uflx
MIR: FACIL_ID = YOUR_FACIL
MIR: LOT_ID = ABC1234.XYZ
MIR: START_T = 1431565397
MIR: SETUP_T = 1431565385
MIR: TEST_COD = PRN
MIR: TST_TEMP = 25C
MIR: BURN_TIM = 65535
MIR: CMOD_COD =
SDR: HEAD_NUM = 1
SDR: SITE_CNT = 2
SDR: SITE_NUM = [0, 1]
SDR: SITE_GRP = 255

Actual STDF Records

Every STDF files always starts with ‘FAR’ record and ends with ‘MRR’. In between, there are plenty of optional records that might or might not exist. show_structure() is useful to get a quick look of what records available in the file.

std.show_structure()

will return something like this.

FAR :1x
MIR :1x
SDR :1x
PMR :1x
PGR :1x
PLR :1x
PIR :8x  BPS :1x  PTR/MPR/FTR/PSR/STR/DTR :100x  EPS :1x  PRR :8x
PIR :8x  BPS :1x  PTR/MPR/FTR/PSR/STR/DTR :100x  EPS :1x  PRR :8x
PIR :8x  BPS :1x  PTR/MPR/FTR/PSR/STR/DTR :100x  EPS :1x  PRR :8x
PIR :8x  BPS :1x  PTR/MPR/FTR/PSR/STR/DTR :100x  EPS :1x  PRR :8x
PIR :8x  BPS :1x  PTR/MPR/FTR/PSR/STR/DTR :100x  EPS :1x  PRR :8x
TSR :1x
HBR :1x
SBR :1x
PCR :1x

the :nx that follows record name indicates how many consecutive occurrences appeared in the file. For example, FAR :1x means that the record FAR appeared only once. PIR :8x means that there’s 8 consecutive PIR records found before BPS record is found.

PTR/MPR/FTR/PSR/STR/DTR :100x indicates that between BPS and EPS, there are 100 occurrences of other records, and any of these 100 records can be a PTR, MPR, FTR, ... , DTR.

Visualizing Each STDF Records

This is an experimental function meant to visualize the STDF file better. Calling the following method:

std.show_pattern()

will print out something like this.

FAR**MIR**************************************SDR********************PMR*******.
................................................................................
..............................................................................PG
R****...............................PLR********PIR**.......BPS*PTR**************
******..........................................................................
................................................................................
................................................................................
DTR*........PTR********************.............................................
................................................................................
................................................................................
..................................................EPSPRR************.......HBR**
****........SBR******........PCR*******........MRR****

For every STDF records (FAR, MIR, SDR, etc) has its own unique fields. Each unique field is represented as *. This means, FAR** shows what there are 2 fields belong to FAR, and MRR**** shows that there are 4 fields for MRR. Note that EPS has zero field.

Each . represent repetition of the record before it. PIR**....... (7 dots) means that there are total 8 consecutive PIR records, each with 2 fields represented by *.

Converting STDF to ATDF Format

When it is easier to convert the whole binary STDF file to ASCII to process it further, run this.

with open('textfile.txt', mode='wt') as f:
    stdf.to_atdf(file=f)

Running it without file=f option will write the converted ASCII to your output data stream, which might give a problem given the typical size of an STDF file.

Visit this ATDF spec to see a more detailed ATDF format.