UID226150
威望32
金钱216126
交易诚信度0
主题14
帖子899
注册时间2006-2-3
最后登录2013-3-31
高级会员
   
交易诚信度0
注册时间2006-2-3
|
这段程序debug 不过去了
原帖由 fomomo 于 2006-11-27 20:29 发表
观音jj啊,肯定能帮到你
int Do_So_Burst (int dut_num, int kid_num, int tn, /*int dn,*/ int ecrmode, int vcc_level,
int pattern, int topology, int ers_row, int ers_col, int rd_row,
int rd_col, int sotype, int btype,int bwrap,int speed)
{
int status, dut_status;
int dut_mask;
int dut_list;
int kid_mask;
int conf1_data, conf2_data;
int sowrd, vcc_level1, socnt;
int bst_length, cr0_ws, cr1_ws;
int wr_dgrp,word_num;
int clk_delay, nclock, nlatency;
char pattern_name[42], banknum_label[42], rownum_label[42], xaddr_label[42],
yaddr_label[42], ystep_label[42],clkdly_label[42];
char set_label[42], erase_xaddr_label[42], erase_yaddr_label[42];
dut_mask = SER_TEST_MASK;
dut_list = MULTI_DUT_PLIST;
kid_mask = SER_KID_MASK;
status = PASS;
dut_status = PASS;
PowerUp (dut_mask, kid_mask, vcc_level);
Setup_Timing_Sync(dut_mask, speed);
Setup_ECR_Burst();
if(topology)
Setup_Scramble(ENABLE_SCRAMBLE);
else
Setup_Scramble(DISABLE_SCRAMBLE);
if((sotype == 1)||(sotype ==2))
bst_length = BURST_CONT;
else if(sotype == 3)
bst_length = BURST_LENGTH_8;
else if(sotype == 4)
bst_length = BURST_LENGTH_16;
else
bst_length = 0;
word_num = 16;
if (btype == BURST_LENGTH_8)
word_num = 8;
else if(btype == BURST_LENGTH_16)
word_num = 16;
else if(btype == BURST_LENGTH_32)
word_num = 32;
Setup_Timing_Conf(dut_mask);
switch (speed)
{
case TIMING_54MHZ:
cr0_ws = 0x2000;
cr1_ws = 0x0000;
break;
case TIMING_66MHZ:
cr0_ws = 0x2800;
cr1_ws = 0x0000;
break;
case TIMING_80MHZ:
cr0_ws = 0x0000;
cr1_ws = 0x0001;
break;
case TIMING_108MHZ:
cr0_ws = 0x2000;
cr1_ws = 0x0001;
break;
case TIMING_120MHZ:
cr0_ws = 0x1000;
cr1_ws = 0x0001;
break;
default:
break;
}
Set_Conf_Reg(btype, bwrap, OP_MODE_LEGACY, RDY_MODE_WITH_CLK,
RDY_POL_HIGH, SYNC_RD, cr0_ws, cr1_ws, ODRV_FULL,&wr_dgrp, &clk_delay,
&nclock, &conf1_data, &conf2_data, &nlatency);
sprintf(pattern_name,"%s_BURST_LEN%d_WS%d",(bwrap==BURST_NO_WRAP)? "NOWRAP":"WRAP", word_num, nclock);
printdl(dlog, LOG_DETAILS, "conf_data1 = 0x%x, conf_data2=%x\n", conf1_data, conf2_data);
load_vlf(_SET_CONFDATA1, conf1_data);
load_vlf(_SET_CONFDATA2, conf2_data);
testnum(tn + 1);
RUN_APG(_SET_CONFIG_REGISTER);
load_vlf(_READ_CONFDATA1, conf1_data);
load_vlf(_READ_CONFDATA2, conf2_data);
testnum(tn + 2);
RUN_APG(_READ_CONFIG_REGISTER);
dut_status = check_pin_errors(io_pins, 0x04);
if(dut_status)
{
status |= 1 << dut_num;
printdl(dlog, LOG_DETAILS, "Failed at reading config register!\n");
}
printdl(dlog, LOG_DETAILS, "Set config %s\n", (dut_status==0)? "Pass" : "Fail" );
//@ ////////////////////////////////////////////////////////////////////////////////////////
//@ vcc_level=VCC_MIN;
//@ Select_Pattern(pattern);
//@ Setup_Timing_Burst(dut_mask, speed);
//@ for(vcc_loop=1;vcc_loop<=2;vcc_loop++)
//@ {
//@ if (vcc_loop==1) vcc_level=VCC_MIN;
//@ if (vcc_loop==2) vcc_level=VCC_MAX;
//@
//@ Set_Levels_Vt(dut_mask, vcc_level, 0, vcc_level, vcc_level/2, vcc_level/2);
//@
//@ load_vlf_offset(pattern_name, 1, 0); //Read one row only
//@ load_vlf_offset(pattern_name, 2, 128-word_num); //@@@@@
//@ load_vlf_offset(pattern_name, 3, nclock-3 );
//@ load_vlf_offset(pattern_name, 4, 15/*MAX_BANK*/);
//@ load_vlf_offset(pattern_name, 5, 1); //For func test, skip icc test
//@ RUN_APG(pattern_name);
//@
//@ //printdl(dlog, LOG_DETAILS, "pattern %s run %d us\n", pattern_name, (end_time-start_time));
//@
//@ dut_status = check_pin_errors(io_pins, 0x04);
//@
//@ if(dut_status)
//@ {
//@ status |= 1 << dut_num;
//@ printdl(dlog, LOG_DETAILS, "Failed Linear Burst : vcc=%4d mV, speed=%d, nclock=%d, bst_length=%d, bst_wrap=%d\n\n",
//@ vcc_level, speed, nclock, btype, bwrap);
//@ }
//@ else
//@ printdl(dlog, LOG_DETAILS, "Pass wrap Burst : vcc=%4d mV, speed=%d, bst_length=%d, bst_wrap=%d\n\n",
//@ vcc_level, speed, btype, bwrap);
//@
//@ }
////////////////////////////////////////////////////////////////////////////////////////////
for(socnt=0; socnt<2; socnt++)
{
if(socnt==0)
vcc_level1 = VCC_MIN;
else
vcc_level1 = VCC_MAX;
Set_Levels_Vt(dut_mask, vcc_level1, 0, vcc_level1, vcc_level1/2, vcc_level1/2 );
Setup_Timing_So_Burst(dut_mask, speed); //
Setup_ECR (ecrmode);
Select_Pattern(pattern);
load_vlf(_SO_ERASE_XADDR, ers_row);
load_vlf(_SO_ERASE_YADDR, ers_col);
testnum(tn+3);
RUN_APG(_SO_ERASE); //erase
load_vlf(_READ_ONE_WORD_XADDR, ers_row);
load_vlf(_READ_ONE_WORD_YADDR, ers_row);
testnum(tn+4);
RUN_APG(_READ_ONE_WORD); //polling
if(sotype == 1)
{
strcpy(banknum_label, pattern_name);
strcpy(rownum_label, pattern_name);
strcpy(xaddr_label,pattern_name);
strcpy(yaddr_label,pattern_name);
strcpy(ystep_label,pattern_name);
strcat(banknum_label, "_BNK_NUM");
strcat(rownum_label, "_ROW_NUM");
strcat(xaddr_label,"_XADDR");
strcat(yaddr_label,"_YADDR");
strcat(ystep_label,"_YADDR_STEP");
load_vlf(xaddr_label, rd_row); //x
load_vlf(yaddr_label, rd_col); //y
load_vlf(ystep_label, 0x100); //y step
testnum(tn + 5);
RUN_APG(pattern_name);
dut_status = check_pin_errors(io_pins, 0x04);
if(dut_status)
status |= 1 << dut_num;
}
else if(sotype == 2)
{
testnum(tn + 5);
RUN_APG(pattern_name);
dut_status = check_pin_errors(io_pins, 0x04);
if(dut_status)
status |= 1 << dut_num;
}
else if(sotype == 3)
{
Set_Levels_Vt(dut_mask, vcc_level, 0, vcc_level, vcc_level/2, vcc_level/2);
load_vlf_offset(pattern_name, 1, 0X3ffe); //Read one row only
load_vlf_offset(pattern_name, 2, 128-word_num); //@@@@@
load_vlf_offset(pattern_name, 3, nclock-3 );
load_vlf_offset(pattern_name, 4, 15/*MAX_BANK*/);
load_vlf_offset(pattern_name, 5, 1); //For func test, skip icc test
RUN_APG(pattern_name);
// sprintf(pattern_name,"_BURST_WRAP_AROUND_8WORDS");
testnum(tn + 5);
RUN_APG(pattern_name);
dut_status = check_pin_errors(io_pins, 0x04);
if(dut_status)
status |= 1 << dut_num;
}
else if(sotype == 4)
{
testnum(tn + 5);
RUN_APG(pattern_name);
dut_status = check_pin_errors(io_pins, 0x04);
if(dut_status)
status |= 1 << dut_num;
}
}
RUN_APG(_RESET_DUT);
Setup_ECR (DISABLE);
Setup_Scramble(DISABLE_SCRAMBLE);
DeviceSpecificPowerDown();
return (status);
}
/*--------------------------------------------------
Function: So_Wrap8_Brst1
Description:
Last modified: Agilent
Sep 07, 2006
----------------------------------------------------*/
int So_Wrap8_Brst1 (int tseq, /*int dnum,*/ char *desc, int ecrmode, int vcc_level, int pattern,int btype,int bwrap)
{
int dut_status, kid_num;
StartTest(tseq, desc, LOG_DETAILS);
Do_For_Each_Alive_DUT
{
Matrix_Connect_Single (dut_count, MATRIX_FLASH);
dut_status = PASS;
for ( kid_num = 0; kid_num < KID_PER_MCP; kid_num ++)
dut_status |= Do_So_Burst (dut_count, kid_num, tn, /*dnum*100,*/ ecrmode, vcc_level, pattern, TOPOLOGY_OFF,
0x0200, 0x000, 0x000, 0x080, SO_WRAP8, btype,bwrap,TIMING_54MHZ);
Add_DUT_Status (dut_status);
}
EndTest();
}
int So_Wrap8_Brst2 (int tseq, /*int dnum,*/ char *desc, int ecrmode, int vcc_level, int pattern,int btype,int bwrap)
{
int dut_status, kid_num;
StartTest(tseq, desc, LOG_DETAILS);
Do_For_Each_Alive_DUT
{
Matrix_Connect_Single (dut_count, MATRIX_FLASH);
dut_status = PASS;
for ( kid_num = 0; kid_num < KID_PER_MCP; kid_num ++)
dut_status |= Do_So_Burst (dut_count, kid_num, tn, /*dnum*100,*/ ecrmode, vcc_level, pattern, TOPOLOGY_OFF,
0x0200, 0x080, 0x000, 0x000, SO_WRAP8, btype,bwrap,TIMING_54MHZ);
Add_DUT_Status (dut_status);
}
EndTest();
} |
|