MTM(multifunctional trimming module) -Dynamic Adjustment and Re-trim Solution TE: Vince Wei/Jerry Gao We always need to trim the fuse to adjust some parameter to a target value when chip probing(CP) . The processes of a common trimming module (CTM) are as following:
The common trimming module is widely used for its easy development. But it has some limitation because the wafer can’t be re-trimed/re-test and the trim table is a theoretic result then it always did not match the actual adjustment. A multifunctional trimming module (MTM) is developed for ASL-1000 tester to meet the especial demand. The new characteristics of the MTM are as following: 1) Dynamic adjustment. The trim table is updated dynamic according the actual adjustment. 2) Re-trim function. The wafer can be retested after trimming and also can re-trim to another target value. 3) Multi-site compatible. The program for single site and multi-site is the same. 4) Connection alarm. Alarm When the trimming source(LZB) connected abnormally to avoid a wrong trimming. 5) Modular code. All code encapsulated into a class and easily to debug .
{ //min_cond,max_cond,fuse0,fuse1,fuse2,adjust_target,-1 {0.400f, 0.570f, 1,1,1, 48, -1},//when 0.4<ilim<0.57 trim f0,f1,f2 {0.570f, 0.630f, 0,1,1, 36, -1},//when 0.57<ilim<0.63 trim f1,f2 {0.630f, 0.690f, 1,0,1, 24, -1}, {0.690f, 0.775f, 0,0,1, 12, -1}, {0.775f, 0.880f, 0,0,0, 0, -1},//when 0.775<ilim<0.88 no trim {0.880f, 1.000f, 1,0,0, -12, -1}, {1.000f, 1.200f, 0,1,0, -24, -1}, {1.200f, 1.500f, 1,1,0, -36, -1}, END_TRIM_TABLE, };
tr_cfg.para_type=P_ILIM; tr_cfg.trim_vclamp=6.4f;//trim voltage clamp tr_cfg.trim_iclamp=0.8f;//trim current clamp tr_cfg.trim_v=5.0f;//trim voltage tr_cfg.trim_i=0.5f;//trim current tr_cfg.trim_delay=10;//trim time tr_cfg.meas_delay=5;//measure time tr_cfg.target_value=0.825f;// anticipant value after trim tr_cfg.total_adj_num=16;//for dynamic adjust tr_cfg.b_auto_adj=true;//dynamic adjust activate tr_cfg.b_cond_mode=PCT;//percentage mode tr_cfg.fuse_mask=0x00;//0: all fuses activate FOR_EACH_SITE tr_cfg.value_bf_trim[site]=tr_val_store[tr_cfg.para_type][TR_BEFORE][site]; tr_cfg.trim_cond=p_fuse_cond; tr_cfg.update_adj(tr_adj_store[tr_cfg.para_type][PREVIOUS]);//dynamic update ////////////////////////////set LZB channel////////////////////////////////////////////////// if(CSC_MAX_SITE>0) { tr_cfg.trim_channel[0][0]=LZB_MUX_OUT_10; tr_cfg.trim_channel[1][0]=LZB_MUX_OUT_11; tr_cfg.trim_channel[2][0]=LZB_MUX_OUT_12; } if(CSC_MAX_SITE>1) { tr_cfg.trim_channel[0][0]=LZB_MUX_OUT_20; tr_cfg.trim_channel[1][0]=LZB_MUX_OUT_21; tr_cfg.trim_channel[2][0]=LZB_MUX_OUT_28; }
tr_cfg.measure_fuse();//measure resistors of the fuses tr_cfg.check_fuse_connection();//check the connection between LZB and fuse tr_cfg.get_value_no_trim();//calculate the value just like that the fuse is intact tr_cfg.get_trim_flag();//get trim_flag for trimming according to the trim table tr_cfg.store_adj(tr_adj_store[tr_cfg.para_type][CURRENT]);//store for dynamic update tr_cfg.trim_fuse();//trim fuse system_init();
tr_cfg.fuse_meas_oct : display the fuse status before trimming tr_cfg.fuse_connection_oct : display the LZB connection tr_cfg.trim_flag_oct : display the fuses which need trimming tr_cfg.trim_achieve_oct: display trimming result. tr_cfg.adjust_target: display the theoretic adjustment |