1000 ! RE-SAVE "SP_MUX_M"
1001 !*************************************************
1002 !*
1003 !* FILE       :  SP_MUX_M
1004 !* DESCRIPTION:  Program for DC Drain Avalanche
1005 !*                       Hot Carrier Induced
1006 !*                       Degradation Test
1007 !* AUTHOR     :  Narito Nakazawa, YHP
1008 !* CREATED    :  10/01/1994
1009 !* MODIFIED   :  09/20/1995  Tomohiko Matsui, YHP
1010 !* PRODUCT    :  HP E5250A
1011 !* REVISION   :  Rev.A.01.00
1012 !*
1013 !*   (c) Copyright 1994, 1995 Hewlett-Packard Co,
1014 !*              All rights reserved.
1015 !*
1016 !*
1017 !*  Customer shall have the personal, non-
1018 !* transferable rights to use, copy or modify
1019 !* this SAMPLE PROGRAM for Customer's internal
1020 !* operations.  Customer shall use the SAMPLE
1021 !* PROGRAM solely and exclusively for its own
1022 !* purpose and shall not license, lease, market
1023 !* or distribute the SAMPLE PROGRAM or modification
1024 !* or any part thereof.
1025 !*
1026 !*  HP shall not be liable for the quality,
1027 !* performance or behavior of the SAMPLE PROGRAM.
1028 !* HP especially disclaims that the operation of
1029 !* the SAMPLE PROGRAM shall be uninterrupted or
1030 !* error free.  This SAMPLE PROGRAM is provided
1031 !* AS IS.
1032 !*
1033 !*  HP DISCLAIMS THE IMPLIED WARRANTIES OF
1034 !* MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1035 !* PURPOSE.
1036 !*
1037 !*  HP shall not be liable for any infringement
1038 !* of any patent, trademark, copyright or other
1039 !* proprietary rights by the SAMPLE PROGRAM or
1040 !* its use.  HP does not warrant that the SAMPLE
1041 !* PROGRAM is free from infringements or such
1042 !* rights of third parties.  However, HP will not
1043 !* knowingly infringe or deliver a software that
1044 !* infringes the patent, trademark, copyright or
1045 !* other proprietary right of a third party.
1046 !*
1047 !*************************************************
1048  COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1049  COM /File_name1/ Param_file$[12],Str_file$[12]
1050  COM /File_name2/ Idvd_file$[12],Ibvg_file$[12]
1051  COM /File_name3/ Igleak_file$[12],Idleak_file$[12],Isleak_file$[12]
1052  COM /File_name4/ Idlin_data$[4],Gmmax_data$[4],Vtext_data$[4],Vtci_data$[4],Dir$[30]
1053  COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(1:30)
1054  COM /Meas_info2/ INTEGER Gate(1:24),Drain(1:24),Bulk(1:24)
1055  COM /Meas_info3/ INTEGER Result(1:24),No_of_devices,Invalid(1:24)
1056  COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1057  COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1058  COM /Meas_data1/ Vtci_init(1:24),Vtci_shift(1:24,1:30),Idlin_init(1:24),Idlin_shift(1:24,1:30)
1059  COM /Meas_data2/ Gmmax_init(1:24),Gmmax_shift(1:24,1:30),Vtext_init(1:24),Vtext_shift(1:24,1:30)
1060  COM /Meas_data3/ Igleak(1:24),Idleak(1:24),Isleak(1:24)
1061  COM /Device_spec/ REAL Igleak_max,Idleak_max,Isleak_max
1062  COM /Err/ Err_num(1:6),Err_message$(1:6)[50]
1063  !
1064  INTEGER Show_device,Show_param,Save_at_last,Last_test(1:30),I
1065  !
1066  ! ---------- HP-IB Setup -------------------------------------------------
1067  INTEGER Hpib_addr,Swm_sc,Swm_addr,Bias_flag,Slotno(1:4,1:2),Str_flag
1068  INTEGER Smu_iv_assign(1:4),Dut_smu_assign(1:4),Dut_iv_assign(1:4)
1069  !
1070  Hpib_sc=7                ! HP 415X HP-IB Select Code
1071  Hpib_addr=17             ! HP 415X HP-IB Address
1072  !
1073  ON ERROR GOTO Error_end
1074  ASSIGN @Hp415x TO Hpib_sc*100+Hpib_addr
1075  ASSIGN @Form_off TO Hpib_sc*100+Hpib_addr;FORMAT OFF
1076  !
1077  Swm_sc=7                 ! HP E5250A HP-IB Select Code
1078  Swm_addr=22              ! HP E5250A HP-IB Address
1079  Swm=Swm_sc*100+Swm_addr
1080  ASSIGN @Hp5250 TO Swm
1081  OFF ERROR 
1082  !
1083  ! ---------- Input Parameters --------------------------------------------
1084  !
1085  No_of_devices=24         ! Number of test devices
1086  Meas_points=13           ! Number of times to repeat measurements
1087  REDIM Meas_str_time(1:Meas_points)
1088  REDIM Last_test(No_of_devices)
1089  !
1090  ! ---------- Limits for leakage tests ------------------------------------
1091  Igleak_max=2.E-10        ! Maximum gate leakage current
1092  Idleak_max=1.E-8         ! Maximum drain leakage current
1093  !
1094  ! ---- Drain stress voltage should be determined by Id-Vd characteristics
1095  Vdstr=5                  ! Drain stress voltage
1096  Vgstr=2.5                ! Gate stress voltage
1097  Vdd=5                    ! Drain nominal voltage
1098  Vbb=0                    ! Bulk nominal voltage
1099  !
1100  ! ---------- Device geometries -------------------------------------------
1101  Gate_length=1.E-6        ! Gate length
1102  Gate_width=1.E-5         ! Gate width
1103  !
1104  ! ---------- Pin assignment to determine stress bias condition -----------
1105  Drain_str=1              ! Channel no of drain (Stress)
1106  Gate_str=1               ! Channel no of gate (Stress)
1107  Bulk_str=1               ! Channel no of bulk (Stress)
1108  !
1109  ! ********** SMU - IV port Assign    ******************************
1110  !
1111 Smu_iv:!  SMU1  SMU2  SMU3  SMU4  ! SMU number
1112  DATA      1,     2,    3,    4   ! IV port number
1113  !
1114  RESTORE Smu_iv
1115  READ Smu_iv_assign(*)
1116  !
1117  ! ********** SMU  - DUT pin  Assign  ******************************
1118  !
1119 Dut_smu:! Gate   NotUse Drain  Sub   ! DUT pin
1120  DATA       1,     2,     3,     4,  ! SMU number
1121  !
1122  RESTORE Dut_smu
1123  READ Dut_smu_assign(*)
1124  !
1125  ! ********** DUT - IV port Assign    ******************************
1126  !
1127  FOR I=1 TO 4
1128    Dut_iv_assign(I)=Smu_iv_assign(Dut_smu_assign(I))
1129  NEXT I
1130  !
1131  ! ---------- Channel no  for forcing stresses and interim measurements
1132  !
1133 Pin_assign: !
1134  ! Device No. - Output channel No.
1135  !     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1136  !  Drain(*) data     Outport channel no
1137  DATA  1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
1138  !  Gate(*) data      Outport channel no
1139  DATA  1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
1140  !  Bulk(*) data      Outport channel no
1141  DATA  1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
1142  RESTORE Pin_assign
1143  READ Drain(*)
1144  READ Gate(*)
1145  READ Bulk(*)
1146  !
1147  ! ---------- Definition of measurement and stress setup files ------------
1148  !
1149  Ibvg_file$="IBVG.MES"     ! Ib-Vg measurement to determine Vgstr
1150  Igleak_file$="IGLEAK.MES" ! Ig - time measurement to check gate leakage
1151  Idleak_file$="IDLEAK.MES" ! Id - time measurement to check drain leakage
1152  !
1153  Param_file$="PARAM.MES"   ! Idlin/Gmmax/Vtext/Vtci measurement setup file
1154  !
1155  ! ---------- File name to save ASCII data --------------------------------
1156  Dir$="test_data/"         ! File save directory
1157  Idlin_data$="ID"          ! Idlin shift data file name
1158  Gmmax_data$="GM"          ! Gmmax shift data file name
1159  Vtext_data$="VTE"         ! Vtext shift data file name
1160  Vtci_data$="VTI"          ! Vtci shift data file name
1161  !
1162  ! ---------- Stress duration setup ---------------------------------------
1163 Str_time: !                ! Stress duration data
1164  DATA      10,     20,     50
1165  DATA     100,    200,    500
1166  DATA    1000,   2000,   5000
1167  DATA   10000,  20000,  50000
1168  DATA  100000
1169  RESTORE Str_time
1170  READ Meas_str_time(*)
1171  !
1172  ! ---------- Setup for drawing / saving data in main menu ----------------
1173  Show_device=0    ! 0:Draw graphs of all devices, Specify device No.
1174  Show_param=0     ! 0:Draw graphs of all params
1175                   ! 1:Idlin, 2:Gmmax, 3:Vtext, 4:Vtci, -1:No graphs
1176  Save_at_last=1   ! 0:Save ASCII data files after each interim test
1177                   ! 1:Save all ASCII data files after completing whole test
1178  !
1179  !///////////////// Main /////////////////////////////
1180  !
1181  DISP "Enter directory name for saving data. (default : test_data)";
1182  INPUT Tmp_dir_str$
1183  IF Tmp_dir_str$<>"" THEN 
1184    Dir$=Tmp_dir_str$&"/"
1185  END IF
1186  ON ERROR GOTO End_create_dir
1187  CREATE DIR Dir$
1188  OFF ERROR 
1189 End_create_dir:  !
1190  !
1191  DISP "Initial setting start ..."
1192  CALL Initial_setting             ! Initial setting
1193  DISP "Initial setting completed"
1194  !
1195  DISP "HP 415X initialize start ..."
1196  CALL Init_hp415x                 ! Initialize HP 415X
1197  DISP "HP 415X initialize ccmpleted"
1198  DISP "HP E5250A initialize start ..."
1199  CALL Init_hp5250                 ! Initialize HP E5250A
1200  CALL Setconfig5250               ! Initial setting E5255
1201  DISP "HP E5250A initialize ccmpleted"
1202  !
1203  ON INTR Hpib_sc CALL Err_check   ! Enables HP-IB interrupt
1204  ENABLE INTR Hpib_sc;2
1205  !
1206  ! --------- Determine Stress Bias Condition ---------
1207  Bias_flag=0                      ! 1=Bias on   0=Bias off
1208  Str_flag=1                       ! Test check stress
1209  DISP "Determine Stress Bias Condition start ..."
1210  CALL Str_define5250(Bias_flag,Str_flag,Dut_iv_assign(*))    ! Determine DC stress condition
1211  DISP "Determine Stress Bias Condition completed"
1212  !
1213  Str_flag=0                       ! Normal measurement
1214  !
1215  DISP "Connect HCI degradation test devices and press [Continue]."
1216  PAUSE
1217  DISP 
1218  !
1219  ! --- Select Test Device/Initial Characterization ---
1220  Present=0
1221  !
1222  Bias_flag=0
1223  !
1224  FOR Device=1 TO No_of_devices       ! change start pointer
1225    CALL Connect5250(Bias_flag,Str_flag,Dut_iv_assign(*))       ! Connect test device
1226    DISP "DEVICE No.=";Device;" check ..."
1227    CALL Device_check                 ! Select test device
1228    IF Invalid(Device)=0 THEN         ! In case of valid device
1229      DISP "DEVICE No.=";Device;" initial characterization ..."
1230      CALL Param_meas                 ! Initial characterization
1231    ELSE                              ! In case of invalid device
1232      DISP "DEVICE No.=";Device;" invalid data record ..."
1233      CALL Record_iddata(Present,0)   ! Record Idlin_shift data
1234      CALL Record_gmdata(Present,0)   ! Record Gmmax_shift data
1235      CALL Record_vtedata(Present,0)  ! Record Vtext_shift data
1236      CALL Record_vtidata(Present,0)  ! Record Vtci_shift data
1237    END IF
1238    CALL Clear5250                    ! Disconnect test device
1239  NEXT Device
1240  DISP "Device check completed"
1241  !
1242  ! --------- Stress/Interim Characterization ---------
1243  FOR Present=1 TO Meas_points        ! Start stress/measurement cycles
1244    FOR Device=1 TO No_of_devices     ! Connect all test devices
1245      IF Invalid(Device)=0 AND Result(Device)=0 THEN   ! Valid and not exceed Tdc
1246        Bias_flag=1
1247        CALL Connect5250(Bias_flag,Str_flag,Dut_iv_assign(*))   ! Connect test device in parallel
1248      END IF
1249    NEXT Device
1250    !
1251    ! ------------------ Stress -----------------------
1252    CALL Stress               ! Inclement stress time and force stress
1253    CALL Clear5250            ! Disconnect all test devices
1254    DISP "BIAS Stress up : present=";Present
1255    !
1256    ! ------------------ HP 415X calibration ----------
1257    ! IF Meas_str_time(Present)>=1800 THEN CALL Calibration
1258    ! Uncomment above line if calibration is needed before measurements
1259    !
1260    ! ---------- Interim Characterization -------------
1261    FOR Device=1 TO No_of_devices
1262      IF Invalid(Device)=0 AND Result(Device)=0 THEN 
1263      !
1264      ! Measure parameters
1265      !
1266        DISP "Present=";Present;" :  Device No.=";Device;"  measurement start ..."
1267        Bias_flag=0
1268        CALL Connect5250(Bias_flag,Str_flag,Dut_iv_assign(*))   ! Connect test device
1269        CALL Param_meas                   ! Interim measurement
1270        CALL Clear5250                    ! Disconnect test device
1271        DISP "Present=";Present;" :  Device No.=";Device;"  measurement completed"
1272        !
1273        ! Record measured data
1274        !
1275        IF Save_at_last=0 THEN     ! Save ASCII data file after each interim meas
1276          CALL Record_iddata(Present,Save_at_last)     ! Record Idlin_shift data
1277          CALL Record_gmdata(Present,Save_at_last)     ! Record Gmmax_shift data
1278          CALL Record_vtedata(Present,Save_at_last)    ! Record Vtext_shift data
1279          CALL Record_vtidata(Present,Save_at_last)    ! Record Vtci_shift data
1280        END IF
1281        ! IF Save_at_last=0 THEN   ! Save DAT type data file after each interim meas
1282        !   CALL Record_data
1283        ! END IF
1284        !
1285        ! Draw shift graph(s)
1286        !
1287        SELECT Show_device
1288        CASE 0                     ! Draw graphs of all devices
1289          SELECT Show_param
1290          CASE 0                   ! Draw graphs of all parameters
1291            CALL Stress_idgraph      ! Idlin_shift graph
1292            CALL Stress_gmgraph      ! Gmmax_shift graph
1293            CALL Stress_vtegraph     ! Vtext_shift graph
1294            CALL Stress_vtigraph     ! Vtci_shift graph
1295          !
1296          CASE 1                   ! Draw a graph of specified parameter
1297            CALL Stress_idgraph      ! Idlin_shift graph
1298          CASE 2
1299            CALL Stress_gmgraph      ! Gmmax_shift graph
1300          CASE 3
1301            CALL Stress_vtegraph     ! Vtext_shift graph
1302          CASE 4
1303            CALL Stress_vtigraph     ! Vtci_shift graph
1304          END SELECT
1305        CASE ELSE                  ! Draw graphs of specified device
1306          IF Show_device=Device THEN ! Select device to draw graphs
1307            SELECT Show_param          ! Select parameter to draw graphs
1308            CASE 0                     ! Draw graphs of all parameters
1309              CALL Stress_idgraph       ! Idlin_shift graph
1310              CALL Stress_gmgraph       ! Gmmax_shift graph
1311              CALL Stress_vtegraph      ! Vtext_shift graph
1312              CALL Stress_vtigraph      ! Vtci_shift graph
1313            CASE 1                     ! Draw a graph of specified parameter
1314              CALL Stress_idgraph       ! Idlin_shift graph
1315            CASE 2
1316              CALL Stress_gmgraph       ! Gmmax_shift graph
1317            CASE 3
1318              CALL Stress_vtegraph      ! Vtext_shift graph
1319            CASE 4
1320              CALL Stress_vtigraph      ! Vtci_shift graph
1321            END SELECT
1322          END IF
1323        END SELECT
1324      !
1325      END IF
1326      !
1327      ! Check measured data
1328      !
1329      IF Idlin_shift(Device,Present)>=10 THEN         ! Idlin changed 10%
1330        Result(Device)=1
1331        Last_test(Device)=Present
1332        WAIT 1
1333      END IF
1334      !
1335      IF Gmmax_shift(Device,Present)>=10 THEN         ! Gmmax changed 10%
1336        Result(Device)=1
1337        Last_test(Device)=Present
1338        WAIT 1
1339      END IF
1340      !
1341      IF ABS(Vtext_shift(Device,Present))>+.02 THEN   ! Vtext changed 20 mV
1342        Result(Device)=1
1343        Last_test(Device)=Present
1344        WAIT 1
1345      END IF
1346      !
1347      IF ABS(Vtci_shift(Device,Present))>+.02 THEN    ! Vtci changed 20 mV
1348        Result(Device)=1
1349        Last_test(Device)=Present
1350        WAIT 1
1351      END IF
1352      !
1353    NEXT Device
1354  !
1355  !
1356  ! Check termination of test
1357  !
1358    Sum_result=SUM(Invalid)+SUM(Result)   ! No. of devices invalid or exceed Tdc
1359    IF Sum_result=No_of_devices THEN GOTO Complete_test
1360    IF Meas_str_time(Present)>1.E+10^5 THEN GOTO Complete_test
1361  NEXT Present
1362  !
1363 Complete_test: ! End of test
1364  IF Save_at_last=1 THEN  ! Save ASCII data files after completing whole test
1365    FOR Device=1 TO No_of_devices
1366      IF Result(Device)=0 THEN Last_test(Device)=Meas_points
1367      CALL Record_iddata(Last_test(Device),Save_at_last)   ! Record Idlin_shift data
1368      CALL Record_gmdata(Last_test(Device),Save_at_last)   ! Record Gmmax_shift data
1369      CALL Record_vtedata(Last_test(Device),Save_at_last)   ! Record Vtext_shift data
1370      CALL Record_vtidata(Last_test(Device),Save_at_last)   ! Record Vtci_shift data
1371    NEXT Device
1372  END IF
1373  GOTO Test_complete
1374 Error_end: !
1375  DISP "*** I/O Path Assign Error"
1376  GOTO Prog_end
1377 Test_complete:!
1378  CALL Test_end
1379  DISP "HCI Degradation Test is Completed!!"
1380 Prog_end:!
1381  !
1382  END
1383  !
1384  !/////////////// Sub //////////////////////////////////////////////
1385 Initial_setting:SUB Initial_setting
1386    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1387    COM /File_name1/ Param_file$,Str_file$
1388    COM /File_name2/ Idvd_file$,Ibvg_file$
1389    COM /File_name3/ Igleak_file$,Idleak_file$,Isleak_file$
1390    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1391    COM /Meas_info2/ INTEGER Gate(*),Drain(*),Bulk(*)
1392    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1393    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1394    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1395    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1396    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1397    COM /Meas_data3/ Igleak(*),Idleak(*),Isleak(*)
1398    COM /Device_spec/ REAL Igleak_max,Idleak_max,Isleak_max
1399    !
1400    ! Redimention of stress time data and measurement data
1401    !
1402    REDIM Meas_str_time(1:Meas_points),Vtci_shift(1:No_of_devices,1:Meas_points)
1403    REDIM Idlin_shift(1:No_of_devices,1:Meas_points),Gmmax_shift(1:No_of_devices,1:Meas_points)
1404    REDIM Vtext_shift(1:No_of_devices,1:Meas_points)
1405    REDIM Vtci_init(1:No_of_devices),Idlin_init(1:No_of_devices)
1406    REDIM Gmmax_init(1:No_of_devices),Vtext_init(1:No_of_devices)
1407    REDIM Igleak(1:No_of_devices),Idleak(1:No_of_devices),Isleak(1:No_of_devices)
1408    REDIM Result(1:No_of_devices),Invalid(1:No_of_devices)
1409    !
1410    ! Initialize test result data
1411    !
1412    FOR Device=1 TO No_of_devices
1413      Invalid(Device)=0
1414      Result(Device)=0
1415    NEXT Device
1416    !
1417    DISP 
1418    !
1419  SUBEND
1420    !
1421 Init_hp415x:SUB Init_hp415x
1422    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1423    COM /File_name1/ Param_file$,Str_file$
1424    COM /File_name2/ Idvd_file$,Ibvg_file$
1425    COM /File_name3/ Igleak_file$,Idleak_file$,Isleak_file$
1426    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1427    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1428    !
1429    ON ERROR GOTO Error_end
1430    ON TIMEOUT Hpib_sc,5 GOTO Timeout_end
1431    CLEAR @Hp415x
1432    OUTPUT @Hp415x;"*RST"                  ! Device reset
1433    OUTPUT @Hp415x;"*CLS"                  ! Clear status data
1434    OUTPUT @Hp415x;":STAT:PRES"            ! Preset event enable mask register
1435    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"   ! Screen update off
1436    OUTPUT @Hp415x;":CAL:AUTO OFF"         ! Auto calibration off
1437    OUTPUT @Hp415x;"*ESE 60;*SRE 32;*OPC?"  ! Event status/service request enable register setup
1438    ENTER @Hp415x;A
1439    OUTPUT @Hp415x;":DISP:WIND:ALL BST"    ! Display IBASIC status screen
1440    !
1441    ! Load initial/interim characterization setup file into internal memory
1442    !
1443    OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'"&Param_file$&"','DISK'"
1444    OUTPUT @Hp415x;":PAGE:MEAS:SWE:VAR1:STOP "&VAL$(Vdd)
1445    OUTPUT @Hp415x;":PAGE:MEAS:SWE:CONS:SMU4 "&VAL$(Vbb)
1446    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE1:POINT1:POS 'VG','"&VAL$(Vdd)&"'"
1447    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:POINT1:POS 'ID','"&VAL$(Gate_width/Gate_length)&"u'"
1448    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:POINT2:POS 'ID','"&VAL$(Gate_width/Gate_length)&"u'"
1449    OUTPUT @Hp415x;":MMEM:STOR:STAT 0,'MEM1.MES','MEMORY'"
1450    OUTPUT @Hp415x;":MMEM:DEL '"&Param_file$&"','DISK',"
1451    OUTPUT @Hp415x;":MMEM:STOR:STAT 0,'"&Param_file$&"','DISK'"
1452    OFF TIMEOUT 
1453    OUTPUT @Hp415x;"*OPC?"
1454    ENTER @Hp415x;A
1455    !
1456    OFF ERROR 
1457    SUBEXIT
1458 Error_end:!
1459    DISP "### HP 415X Initialize Timeout ## ";ERRM$
1460    OFF TIMEOUT 
1461    OFF ERROR 
1462    STOP
1463 Timeout_end:!
1464    DISP "### HP 415X Initialize Timeout ###"
1465    OFF TIMEOUT 
1466    OFF ERROR 
1467    STOP
1468  SUBEND
1469    !
1470 Device_check:SUB Device_check
1471    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1472    COM /File_name3/ Igleak_file$,Idleak_file$,Isleak_file$
1473    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1474    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1475    COM /Meas_data3/ Igleak(*),Idleak(*),Isleak(*)
1476    COM /Device_spec/ REAL Igleak_max,Idleak_max,Isleak_max
1477    DIM Comment$[58]
1478    !
1479    ! -------- Gate Leakage Current --------
1480    !
1481    OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'"&Igleak_file$&"','DISK'"
1482    Comment$="Gate Leakage Test for Device No. = "&VAL$(Device)
1483    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
1484    !
1485    OUTPUT @Hp415x;":PAGE:GLIS"
1486    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
1487    OUTPUT @Hp415x;":PAGE:SCON:SING"
1488    OUTPUT @Hp415x;"*OPC?"
1489    ENTER @Hp415x;A
1490    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
1491    OUTPUT @Hp415x;":TRAC? 'Igleak'"
1492    ENTER @Hp415x;Ig
1493    Igleak(Device)=Ig
1494    !
1495    IF ABS(Igleak(Device))>Igleak_max THEN 
1496      BEEP 
1497      DISP "Igleak =";Igleak(Device);"(A) (Out of spec)"
1498      PAUSE
1499      DISP "DEVICE No. =";Device;" shall not be used"
1500      PAUSE
1501      Invalid(Device)=1
1502    ELSE
1503    !
1504    ! -------- Drain Leakage Current --------
1505    !
1506      OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'"&Idleak_file$&"','DISK'"
1507      Comment$="Drain Leakage Test for Device No. = "&VAL$(Device)
1508      OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
1509    !
1510      OUTPUT @Hp415x;":PAGE:GLIS"
1511      OUTPUT @Hp415x;":DISP:WIND:STAT ON"
1512      OUTPUT @Hp415x;":PAGE:SCON:SING"
1513      OUTPUT @Hp415x;"*OPC?"
1514      ENTER @Hp415x;A
1515      OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
1516      OUTPUT @Hp415x;":TRAC? 'Idleak'"
1517      ENTER @Hp415x;Id
1518      Idleak(Device)=Id
1519    !
1520      IF ABS(Idleak(Device))>Idleak_max THEN 
1521        BEEP 
1522        DISP "Idleak =";Idleak(Device);"(A) (Out of spec)"
1523        PAUSE
1524        DISP "DEVICE No. =";Device;" shall not be used"
1525        PAUSE
1526        Invalid(Device)=1
1527      ELSE
1528        DISP "DEVICE No. =";Device;" can be used"
1529        WAIT 3
1530      END IF
1531    END IF
1532    DISP 
1533  SUBEND
1534  !
1535 Param_meas:SUB Param_meas
1536    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1537    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1538    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1539    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1540    DIM Comment$[58]
1541    REAL Idlin,Gmmax,Vtext,Vtci
1542    !
1543    OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'MEM1.MES','MEMORY'"
1544    OUTPUT @Hp415x;"*OPC?"
1545    ENTER @Hp415x;A
1546    !
1547    IF Present=0 THEN 
1548      Comment$="HCI, Initial characterization for Device="&VAL$(Device)
1549    ELSE
1550      Comment$="HCI, Interim characterization. @"&VAL$(Meas_str_time(Present))
1551      Comment$=Comment$&"sec, Device="&VAL$(Device)
1552    END IF
1553    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
1554    OUTPUT @Hp415x;":PAGE:GLIS"
1555    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
1556    OUTPUT @Hp415x;":PAGE:SCON:SING"
1557    OUTPUT @Hp415x;"*OPC?"
1558    ENTER @Hp415x;A
1559    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
1560    OUTPUT @Hp415x;":TRAC? 'Idlin'"
1561    ENTER @Hp415x;Idlin
1562    OUTPUT @Hp415x;":TRAC? 'Gmmax'"
1563    ENTER @Hp415x;Gmmax
1564    OUTPUT @Hp415x;":TRAC? 'Vtci'"
1565    ENTER @Hp415x;Vtci
1566    OUTPUT @Hp415x;":TRAC? 'Vtext'"
1567    ENTER @Hp415x;Vtext
1568    IF Present=0 THEN 
1569      Idlin_init(Device)=Idlin
1570      Gmmax_init(Device)=Gmmax
1571      Vtext_init(Device)=Vtext
1572      Vtci_init(Device)=Vtci
1573    ELSE
1574      Idlin_shift(Device,Present)=DROUND(ABS((Idlin-Idlin_init(Device))/Idlin_init(Device))*100,6)
1575      Gmmax_shift(Device,Present)=DROUND(ABS((Gmmax-Gmmax_init(Device))/Gmmax_init(Device))*100,6)
1576      Vtext_shift(Device,Present)=DROUND(ABS(Vtext-Vtext_init(Device)),6)
1577      Vtci_shift(Device,Present)=DROUND(ABS(Vtci-Vtci_init(Device)),6)
1578    END IF
1579  SUBEND
1580    !
1581 Stress:SUB Stress
1582    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1583    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1584    REAL Duration,Acc_str
1585    !
1586    !
1587  ! DISP "Accumulated Stress Time = "&VAL$(Meas_str_time(Present))
1588    !
1589    ! CALL Bias_source_on
1590    PRINT "Accumulated Stress Time = "&VAL$(Meas_str_time(Present))
1591    PRINT "*******************************"
1592    PRINT "******* BIAS SOURCE ON  *******"
1593    PRINT "*******************************"
1594    !
1595    IF Present=1 THEN 
1596      Duration=Meas_str_time(Present)
1597      Ac_time=0
1598    ELSE
1599      Duration=Meas_str_time(Present)-Meas_str_time(Present-1)
1600      Ac_time=Meas_str_time(Present-1)
1601    END IF
1602  ! WAIT (Duration)       ! Check min,sec,??
1603    !
1604    FOR I=0 TO Duration
1605      DISP USING Imgstrtime;(I+Ac_time)
1606      WAIT 1
1607    NEXT I
1608    DISP 
1609 Imgstrtime:IMAGE "Accumulated Stress Time = ",6D," sec."
1610    !
1611    ! CALL Bias_source_off
1612    PRINT "*******************************"
1613    PRINT "******* BIAS SOURCE OFF *******"
1614    PRINT "*******************************"
1615    !
1616    WAIT 1
1617    CLEAR SCREEN
1618  SUBEND
1619    !
1620 Record_iddata:SUB Record_iddata(INTEGER Last_test,Save_at_last)
1621    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1622    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1623    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1624    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1625    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1626    COM /File_name4/ Idlin_data$,Gmmax_data$,Vtext_data$,Vtci_data$,Dir$
1627    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1628    !
1629    Save_file$=Dir$&Idlin_data$&VAL$(Device)
1630    IF Last_test=0 THEN                   ! Invalid device
1631      ON ERROR GOSUB Error
1632      CREATE Save_file$,100
1633      OFF ERROR 
1634      ASSIGN @File TO Save_file$;FORMAT ON
1635      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1636      OUTPUT @File;Last_test,0
1637    ELSE                                  ! Valid device
1638      REDIM Meas_str_time(1:Last_test)
1639      ALLOCATE Shift_data(1:Last_test)
1640      !
1641      FOR I=1 TO Last_test
1642        Shift_data(I)=Idlin_shift(Device,I)
1643      NEXT I
1644      !
1645      ! ---------- Purge old Idlin data file ----------------
1646      IF Save_at_last=0 AND Present>=2 THEN 
1647        PURGE Save_file$
1648      END IF
1649      ! ---------- Create Idlin data file ----------------
1650      ON ERROR GOSUB Error
1651      CREATE Save_file$,100
1652      OFF ERROR 
1653      ASSIGN @File TO Save_file$;FORMAT ON
1654      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1655      OUTPUT @File;Last_test,Idlin_init(Device)
1656      OUTPUT @File;Shift_data(*)
1657      OUTPUT @File;Meas_str_time(*)
1658      ASSIGN @File TO *
1659      !
1660      DEALLOCATE Shift_data(*)
1661      REDIM Meas_str_time(1:Meas_points)
1662    END IF
1663    SUBEXIT
1664    !
1665 Error:   !
1666    !
1667    OUTPUT @Hp415x;":DISP:WIND:ALL BAS"    ! All IBASIC screen
1668    IF ERRN=56 THEN 
1669      PRINT "Old";Save_file$;"exists. Purge old file and press [Continue]."
1670    ELSE
1671      PRINT ERRM$
1672      PRINT "Take measure(s) to prevent the error and press [Continue]."
1673    END IF
1674    PAUSE
1675    !
1676    CLEAR SCREEN
1677    OUTPUT @Hp415x;":DISP:WIND:ALL BST"    ! Display IBASIC status screen
1678    !
1679    RETURN 
1680    !
1681  SUBEND
1682    !
1683 Record_gmdata:SUB Record_gmdata(INTEGER Last_test,Save_at_last)
1684    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1685    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1686    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1687    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1688    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1689    COM /File_name4/ Idlin_data$,Gmmax_data$,Vtext_data$,Vtci_data$,Dir$
1690    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1691    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1692    DIM Save_file$[40]
1693    !
1694    Save_file$=Dir$&Gmmax_data$&VAL$(Device)
1695    IF Last_test=0 THEN                   ! Invalid device
1696      ON ERROR GOSUB Error
1697      CREATE Save_file$,100
1698      OFF ERROR 
1699      ASSIGN @File TO Save_file$;FORMAT ON
1700      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1701      OUTPUT @File;Last_test,0
1702    ELSE                                  ! Valid device
1703      REDIM Meas_str_time(1:Last_test)
1704      ALLOCATE Shift_data(1:Last_test)
1705      !
1706      FOR I=1 TO Last_test
1707        Shift_data(I)=Gmmax_shift(Device,I)
1708      NEXT I
1709      !
1710      ! ---------- Purge old Gmmax data file ----------------
1711      IF Save_at_last=0 AND Present>=2 THEN 
1712        PURGE Save_file$
1713      END IF
1714      ! ---------- Create Gmmax data file ---------------
1715      ON ERROR GOSUB Error
1716      CREATE Save_file$,100
1717      OFF ERROR 
1718      ASSIGN @File TO Save_file$;FORMAT ON
1719      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1720      OUTPUT @File;Last_test,Gmmax_init(Device)
1721      OUTPUT @File;Shift_data(*)
1722      OUTPUT @File;Meas_str_time(*)
1723      ASSIGN @File TO *
1724      !
1725      DEALLOCATE Shift_data(*)
1726      REDIM Meas_str_time(1:Meas_points)
1727    END IF
1728    SUBEXIT
1729    !
1730 Error:   !
1731    !
1732    OUTPUT @Hp415x;":DISP:WIND:ALL BAS"    ! All IBASIC screen
1733    IF ERRN=56 THEN 
1734      PRINT "Old";Save_file$;"exists. Purge old file and press [Continue]."
1735    ELSE
1736      PRINT ERRM$
1737      PRINT "Take measure(s) to prevent the error and press [Continue]."
1738    END IF
1739    PAUSE
1740    !
1741    CLEAR SCREEN
1742    OUTPUT @Hp415x;":DISP:WIND:ALL BST"    ! Display IBASIC status screen
1743    !
1744    RETURN 
1745    !
1746  SUBEND
1747    !
1748 Record_vtedata:SUB Record_vtedata(INTEGER Last_test,Save_at_last)
1749    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1750    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1751    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1752    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1753    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1754    COM /File_name4/ Idlin_data$,Gmmax_data$,Vtext_data$,Vtci_data$,Dir$
1755    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1756    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1757    DIM Save_file$[40]
1758    !
1759    Save_file$=Dir$&Vtext_data$&VAL$(Device)
1760    IF Last_test=0 THEN                   ! Invalid device
1761      ON ERROR GOSUB Error
1762      CREATE Save_file$,100
1763      OFF ERROR 
1764      ASSIGN @File TO Save_file$;FORMAT ON
1765      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1766      OUTPUT @File;Last_test,0
1767    ELSE                                  ! Valid device
1768      REDIM Meas_str_time(1:Last_test)
1769      ALLOCATE Shift_data(1:Last_test)
1770      !
1771      FOR I=1 TO Last_test
1772        Shift_data(I)=Vtext_shift(Device,I)
1773      NEXT I
1774      !
1775      ! ---------- Purge old Vtex data file ----------------
1776      IF Save_at_last=0 AND Present>=2 THEN 
1777        PURGE Save_file$
1778      END IF
1779      ! ---------- Create Vtex data file ----------------
1780      ON ERROR GOSUB Error
1781      CREATE Save_file$,100
1782      OFF ERROR 
1783      ASSIGN @File TO Save_file$;FORMAT ON
1784      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1785      OUTPUT @File;Last_test,Vtext_init(Device)
1786      OUTPUT @File;Shift_data(*)
1787      OUTPUT @File;Meas_str_time(*)
1788      ASSIGN @File TO *
1789      !
1790      DEALLOCATE Shift_data(*)
1791      REDIM Meas_str_time(1:Meas_points)
1792    END IF
1793    SUBEXIT
1794    !
1795 Error:   !
1796    !
1797    OUTPUT @Hp415x;":DISP:WIND:ALL BAS"    ! All IBASIC screen
1798    IF ERRN=56 THEN 
1799      PRINT "Old";Save_file$;"exists. Purge old file and press [Continue]."
1800    ELSE
1801      PRINT ERRM$
1802      PRINT "Take measure(s) to prevent the error and press [Continue]."
1803    END IF
1804    PAUSE
1805    !
1806    CLEAR SCREEN
1807    OUTPUT @Hp415x;":DISP:WIND:ALL BST"    ! Display IBASIC status screen
1808    !
1809    RETURN 
1810    !
1811  SUBEND
1812    !
1813 Record_vtidata:SUB Record_vtidata(INTEGER Last_test,Save_at_last)
1814    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1815    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1816    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
1817    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
1818    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
1819    COM /File_name4/ Idlin_data$,Gmmax_data$,Vtext_data$,Vtci_data$,Dir$
1820    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1821    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1822    DIM Save_file$[40]
1823    !
1824    Save_file$=Dir$&Vtci_data$&VAL$(Device)
1825    IF Last_test=0 THEN                   ! Invalid device
1826      ON ERROR GOSUB Error
1827      CREATE Save_file$,100
1828      OFF ERROR 
1829      ASSIGN @File TO Save_file$;FORMAT ON
1830      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1831      OUTPUT @File;Last_test,0
1832    ELSE                                  ! Valid device
1833      REDIM Meas_str_time(1:Last_test)
1834      ALLOCATE Shift_data(1:Last_test)
1835      !
1836      FOR I=1 TO Last_test
1837        Shift_data(I)=Vtci_shift(Device,I)
1838      NEXT I
1839      !
1840      ! ---------- Purge old Vtci data file ----------------
1841      IF Save_at_last=0 AND Present>=2 THEN 
1842        PURGE Save_file$
1843      END IF
1844      ! ---------- Create Vtci data file ----------------
1845      ON ERROR GOSUB Error
1846      CREATE Save_file$,100
1847      OFF ERROR 
1848      ASSIGN @File TO Save_file$;FORMAT ON
1849      OUTPUT @File;Vdstr,Vgstr,Gate_length,Gate_width
1850      OUTPUT @File;Last_test,Vtci_init(Device)
1851      OUTPUT @File;Shift_data(*)
1852      OUTPUT @File;Meas_str_time(*)
1853      ASSIGN @File TO *
1854      !
1855      DEALLOCATE Shift_data(*)
1856      REDIM Meas_str_time(1:Meas_points)
1857    END IF
1858    SUBEXIT
1859    !
1860 Error:   !
1861    !
1862    OUTPUT @Hp415x;":DISP:WIND:ALL BAS"    ! All IBASIC screen
1863    IF ERRN=56 THEN 
1864      PRINT "Old";Save_file$;"exists. Purge old file and press [Continue]."
1865    ELSE
1866      PRINT ERRM$
1867      PRINT "Take measure(s) to prevent the error and press [Continue]."
1868    END IF
1869    PAUSE
1870    !
1871    CLEAR SCREEN
1872    OUTPUT @Hp415x;":DISP:WIND:ALL BST"    ! Display IBASIC status screen
1873    !
1874    RETURN 
1875    !
1876  SUBEND
1877    !
1878 Stress_idgraph:SUB Stress_idgraph
1879    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1880    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1881    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1882    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1883    DIM Comment$[58]
1884    !
1885    REDIM Meas_str_time(1:Present)
1886    ALLOCATE Init_data(1:Present)
1887    ALLOCATE Shift_data(1:Present)
1888    !
1889    FOR I=1 TO Present
1890      Init_data(I)=Idlin_init(Device)
1891      Shift_data(I)=Idlin_shift(Device,I)
1892    NEXT I
1893    !
1894    Comment$="HCI Idlin Shift(Str="&VAL$(Meas_str_time(Present))&"sec,Device="&VAL$(Device)&")"
1895    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
1896    !
1897    OUTPUT @Hp415x;":TRAC:DEL:ALL"
1898    OUTPUT @Hp415x;":TRAC:DEF 'Stress',"&VAL$(Present)
1899    OUTPUT @Hp415x;":TRAC:DEF 'IdINT',"&VAL$(Present)
1900    OUTPUT @Hp415x;":TRAC:DEF 'IdSFT',"&VAL$(Present)
1901    OUTPUT @Hp415x;":TRAC:UNIT 'Stress','sec'"
1902    OUTPUT @Hp415x;":TRAC:UNIT 'IdINT','A'"
1903    OUTPUT @Hp415x;":TRAC:UNIT 'IdSFT','%'"
1904    !
1905    OUTPUT @Hp415x;":FORM:DATA REAL,64"
1906    OUTPUT @Hp415x;":FORM:BORD NORM"
1907    OUTPUT @Hp415x;":TRAC 'IdINT',#0";
1908    OUTPUT @Form_off;Init_data(*),END
1909    OUTPUT @Hp415x;":TRAC 'Stress',#0";
1910    OUTPUT @Form_off;Meas_str_time(*),END
1911    OUTPUT @Hp415x;":TRAC 'IdSFT',#0";
1912    OUTPUT @Form_off;Shift_data(*),END
1913    !
1914    OUTPUT @Hp415x;":FORM:DATA ASCII"
1915    !
1916    DEALLOCATE Init_data(*)
1917    DEALLOCATE Shift_data(*)
1918    REDIM Meas_str_time(1:Meas_points)
1919    !
1920    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:NAME 'Stress'"
1921    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:NAME 'IdSFT'"
1922    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:SCAL LOG"
1923    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MIN 10"
1924    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MAX "&VAL$(MAX(Meas_str_time(Meas_points),2))
1925    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:SCAL LOG"
1926    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MIN 1E-2"
1927    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MAX 1E+2"
1928    OUTPUT @Hp415x;":PAGE:DISP:SET:GRAP:Y2:DEL"
1929    !
1930    OUTPUT @Hp415x;":PAGE:DISP:DVAR:DEL:ALL"
1931    OUTPUT @Hp415x;":PAGE:DISP:DVAR 'IdINT'"
1932    !
1933    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE1:MODE DIS"
1934    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:MODE DIS"
1935    OUTPUT @Hp415x;":PAGE:DISP:ANAL:MARK:DIS"
1936    !
1937    OUTPUT @Hp415x;":PAGE:GLIS:INT OFF"
1938    OUTPUT @Hp415x;":PAGE:GLIS:LINE OFF"
1939    OUTPUT @Hp415x;":PAGE:GLIS:MARK ON"
1940    OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X MAX"
1941    !
1942    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
1943    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
1944    !
1945    !
1946  SUBEND
1947    !
1948 Stress_gmgraph:SUB Stress_gmgraph
1949    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
1950    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
1951    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
1952    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
1953    DIM Comment$[58]
1954    !
1955    REDIM Meas_str_time(1:Present)
1956    !
1957    ALLOCATE Init_data(1:Present)
1958    ALLOCATE Shift_data(1:Present)
1959    FOR I=1 TO Present
1960      Init_data(I)=Gmmax_init(Device)
1961      Shift_data(I)=Gmmax_shift(Device,I)
1962    NEXT I
1963    !
1964    Comment$="HCI Gmmax Shift(Str="&VAL$(Meas_str_time(Present))&"sec,Device="&VAL$(Device)&")"
1965    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
1966    !
1967    OUTPUT @Hp415x;":TRAC:DEL:ALL"
1968    OUTPUT @Hp415x;":TRAC:DEF 'Stress',"&VAL$(Present)
1969    OUTPUT @Hp415x;":TRAC:DEF 'GmINT',"&VAL$(Present)
1970    OUTPUT @Hp415x;":TRAC:DEF 'GmSFT',"&VAL$(Present)
1971    OUTPUT @Hp415x;":TRAC:UNIT 'Stress','sec'"
1972    OUTPUT @Hp415x;":TRAC:UNIT 'GmINT','S'"
1973    OUTPUT @Hp415x;":TRAC:UNIT 'GmSFT','%'"
1974    !
1975    OUTPUT @Hp415x;":FORM:DATA REAL,64"
1976    OUTPUT @Hp415x;":FORM:BORD NORM"
1977    OUTPUT @Hp415x;":TRAC 'GmINT',#0";
1978    OUTPUT @Form_off;Init_data(*),END
1979    OUTPUT @Hp415x;":TRAC 'Stress',#0";
1980    OUTPUT @Form_off;Meas_str_time(*),END
1981    OUTPUT @Hp415x;":TRAC 'GmSFT',#0";
1982    OUTPUT @Form_off;Shift_data(*),END
1983    !
1984    OUTPUT @Hp415x;":FORM:DATA ASCII"
1985    !
1986    DEALLOCATE Init_data(*)
1987    DEALLOCATE Shift_data(*)
1988    REDIM Meas_str_time(1:Meas_points)
1989    !
1990    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:NAME 'Stress'"
1991    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:NAME 'GmSFT'"
1992    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:SCAL LOG"
1993    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MIN 10"
1994    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MAX "&VAL$(MAX(Meas_str_time(Meas_points),2))
1995    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:SCAL LOG"
1996    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MIN 1E-1"
1997    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MAX 1E+2"
1998    OUTPUT @Hp415x;":PAGE:DISP:SET:GRAP:Y2:DEL"
1999    !
2000    OUTPUT @Hp415x;":PAGE:DISP:DVAR:DEL:ALL"
2001    OUTPUT @Hp415x;":PAGE:DISP:DVAR 'GmINT'"
2002    !
2003    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE1:MODE DIS"
2004    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:MODE DIS"
2005    OUTPUT @Hp415x;":PAGE:DISP:ANAL:MARK:DIS"
2006    !
2007    OUTPUT @Hp415x;":PAGE:GLIS:INT OFF"
2008    OUTPUT @Hp415x;":PAGE:GLIS:LINE OFF"
2009    OUTPUT @Hp415x;":PAGE:GLIS:MARK ON"
2010    OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X MAX"
2011    !
2012    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2013    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
2014    !
2015  SUBEND
2016    !
2017 Stress_vtegraph:SUB Stress_vtegraph
2018    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2019    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
2020    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
2021    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
2022    DIM Comment$[58]
2023    !
2024    REDIM Meas_str_time(1:Present)
2025    !
2026    ALLOCATE Init_data(1:Present)
2027    ALLOCATE Shift_data(1:Present)
2028    FOR I=1 TO Present
2029      Init_data(I)=Vtext_init(Device)
2030      Shift_data(I)=Vtext_shift(Device,I)
2031    NEXT I
2032    !
2033    !
2034    Comment$="HCI Vtext Shift(Str="&VAL$(Meas_str_time(Present))&"sec,Device="&VAL$(Device)&")"
2035    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
2036    !
2037    OUTPUT @Hp415x;":TRAC:DEL:ALL"
2038    OUTPUT @Hp415x;":TRAC:DEF 'Stress',"&VAL$(Present)
2039    OUTPUT @Hp415x;":TRAC:DEF 'VteINT',"&VAL$(Present)
2040    OUTPUT @Hp415x;":TRAC:DEF 'VteSFT',"&VAL$(Present)
2041    OUTPUT @Hp415x;":TRAC:UNIT 'Stress','sec'"
2042    OUTPUT @Hp415x;":TRAC:UNIT 'VteINT','V'"
2043    OUTPUT @Hp415x;":TRAC:UNIT 'VteSFT','V'"
2044    !
2045    OUTPUT @Hp415x;":FORM:DATA REAL,64"
2046    OUTPUT @Hp415x;":FORM:BORD NORM"
2047    OUTPUT @Hp415x;":TRAC 'VteINT',#0";
2048    OUTPUT @Form_off;Init_data(*),END
2049    OUTPUT @Hp415x;":TRAC 'Stress',#0";
2050    OUTPUT @Form_off;Meas_str_time(*),END
2051    OUTPUT @Hp415x;":TRAC 'VteSFT',#0";
2052    OUTPUT @Form_off;Shift_data(*),END
2053    !
2054    OUTPUT @Hp415x;":FORM:DATA ASCII"
2055    !
2056    DEALLOCATE Init_data(*)
2057    DEALLOCATE Shift_data(*)
2058    REDIM Meas_str_time(1:Meas_points)
2059    !
2060    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:NAME 'Stress'"
2061    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:NAME 'VteSFT'"
2062    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:SCAL LOG"
2063    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MIN 10"
2064    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MAX "&VAL$(MAX(Meas_str_time(Meas_points),2))
2065    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:SCAL LOG"
2066    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MIN 1E-6"
2067    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MAX 1E-1"
2068    OUTPUT @Hp415x;":PAGE:DISP:SET:GRAP:Y2:DEL"
2069    !
2070    OUTPUT @Hp415x;":PAGE:DISP:DVAR:DEL:ALL"
2071    OUTPUT @Hp415x;":PAGE:DISP:DVAR 'VteINT'"
2072    !
2073    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE1:MODE DIS"
2074    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:MODE DIS"
2075    OUTPUT @Hp415x;":PAGE:DISP:ANAL:MARK:DIS"
2076    !
2077    OUTPUT @Hp415x;":PAGE:GLIS:INT OFF"
2078    OUTPUT @Hp415x;":PAGE:GLIS:LINE OFF"
2079    OUTPUT @Hp415x;":PAGE:GLIS:MARK ON"
2080    OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X MAX"
2081    !
2082    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2083    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
2084    !
2085  SUBEND
2086    !
2087 Stress_vtigraph:SUB Stress_vtigraph
2088    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2089    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
2090    COM /Meas_data1/ Vtci_init(*),Vtci_shift(*),Idlin_init(*),Idlin_shift(*)
2091    COM /Meas_data2/ Gmmax_init(*),Gmmax_shift(*),Vtext_init(*),Vtext_shift(*)
2092    DIM Comment$[58]
2093    !
2094    REDIM Meas_str_time(1:Present)
2095    !
2096    ALLOCATE Init_data(1:Present)
2097    ALLOCATE Shift_data(1:Present)
2098    FOR I=1 TO Present
2099      Init_data(I)=Vtci_init(Device)
2100      Shift_data(I)=Vtci_shift(Device,I)
2101    NEXT I
2102    !
2103    !
2104    Comment$="HCI Vtci Shift(Str="&VAL$(Meas_str_time(Present))&"sec,Device="&VAL$(Device)&")"
2105    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
2106    OUTPUT @Hp415x;":TRAC:DEL:ALL"
2107    OUTPUT @Hp415x;":TRAC:DEF 'Stress',"&VAL$(Present)
2108    OUTPUT @Hp415x;":TRAC:DEF 'VtiINT',"&VAL$(Present)
2109    OUTPUT @Hp415x;":TRAC:DEF 'VtiSFT',"&VAL$(Present)
2110    OUTPUT @Hp415x;":TRAC:UNIT 'Stress','sec'"
2111    OUTPUT @Hp415x;":TRAC:UNIT 'VtiINT','V'"
2112    OUTPUT @Hp415x;":TRAC:UNIT 'VtiSFT','V'"
2113    !
2114    OUTPUT @Hp415x;":FORM:DATA REAL,64"
2115    OUTPUT @Hp415x;":FORM:BORD NORM"
2116    OUTPUT @Hp415x;":TRAC 'VtiINT',#0";
2117    OUTPUT @Form_off;Init_data(*),END
2118    OUTPUT @Hp415x;":TRAC 'Stress',#0";
2119    OUTPUT @Form_off;Meas_str_time(*),END
2120    OUTPUT @Hp415x;":TRAC 'VtiSFT',#0";
2121    OUTPUT @Form_off;Shift_data(*),END
2122    !
2123    OUTPUT @Hp415x;":FORM:DATA ASCII"
2124    !
2125    DEALLOCATE Init_data(*)
2126    DEALLOCATE Shift_data(*)
2127    REDIM Meas_str_time(1:Meas_points)
2128    !
2129    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:NAME 'Stress'"
2130    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:NAME 'VtiSFT'"
2131    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:SCAL LOG"
2132    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MIN 10"
2133    OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:MAX "&VAL$(MAX(Meas_str_time(Meas_points),2))
2134    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:SCAL LOG"
2135    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MIN 1E-6"
2136    OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:MAX 1E-1"
2137    OUTPUT @Hp415x;":PAGE:DISP:SET:GRAP:Y2:DEL"
2138    !
2139    OUTPUT @Hp415x;":PAGE:DISP:DVAR:DEL:ALL"
2140    OUTPUT @Hp415x;":PAGE:DISP:DVAR 'VtiINT'"
2141    !
2142    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE1:MODE DIS"
2143    OUTPUT @Hp415x;":PAGE:DISP:ANAL:LINE2:MODE DIS"
2144    OUTPUT @Hp415x;":PAGE:DISP:ANAL:MARK:DIS"
2145    !
2146    OUTPUT @Hp415x;":PAGE:GLIS:INT OFF"
2147    OUTPUT @Hp415x;":PAGE:GLIS:LINE OFF"
2148    OUTPUT @Hp415x;":PAGE:GLIS:MARK ON"
2149    OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X MAX"
2150    !
2151    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2152    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
2153    !
2154  SUBEND
2155    !
2156 Calibration:SUB Calibration
2157    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2158    !
2159    OUTPUT @Hp415x;":PAGE:SYST:CDI"
2160    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2161    OUTPUT @Hp415x;":CAL:ALL?"
2162    ENTER @Hp415x;A
2163    SELECT A
2164    CASE 0
2165      OUTPUT @Hp415x;":PAGE:GLIS"
2166      OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
2167    CASE ELSE
2168      PRINT 
2169      PRINT "     ##### Calibration FAIL ,TEST ABORTED #####"
2170      STOP
2171    END SELECT
2172  SUBEND
2173    !
2174 Err_check:SUB Err_check
2175    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2176    COM /Err/ Err_num(*),Err_message$(*)
2177    INTEGER I,J
2178    !
2179    OUTPUT @Hp415x;":PAGE:SCON:STOP"
2180    I=0
2181    REPEAT
2182      I=I+1
2183      OUTPUT @Hp415x;":SYST:ERR?"
2184      ENTER @Hp415x;Err_num(I),Err_message$(I)
2185    UNTIL Err_num(I)=0
2186    IF I=1 THEN 
2187      PRINT "No Error"
2188    ELSE
2189      PRINT 
2190      PRINT 
2191      FOR J=1 TO I-1
2192        PRINT "### ERROR Occurred ###:";Err_num(J);Err_message$(J)
2193        DISP "### ERROR Occurred ###:";Err_num(J);Err_message$(J)
2194      NEXT J
2195      OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2196      OUTPUT @Hp415x;":DISP:WIND:ALL BAS"
2197      PRINT 
2198      PRINT "              === Test Aborted ==="
2199      STOP
2200    END IF
2201  SUBEND
2202  !
2203 Error_rep:SUB Error_rep(INTEGER N)
2204    BEEP 
2205    DISP "E5255 ERROR";N;"  ";
2206    IF N=1 THEN DISP "Improper slot assigned."
2207    IF N=2 THEN DISP "Improper input port assigned."
2208    IF N=3 THEN DISP "Improper output port assigned."
2209    IF N=4 THEN DISP "Connection open failed."
2210    IF N=5 THEN DISP "All connection open failed."
2211    IF N=6 THEN DISP "Connection close failed."
2212    PAUSE
2213  SUBEND
2214   !
2215 Record_data:SUB Record_data
2216    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2217    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
2218    !
2219    Save_file$="D"&VAL$(Device)&"P"&VAL$(Present)
2220    OUTPUT @Hp415x;":MMEM:STOR:TRAC DEF,'"&Save_file$&".DAT','DISK'"
2221    !
2222  SUBEND
2223   !
2224 Test_end:SUB Test_end
2225    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2226    !
2227    OUTPUT @Hp415x;"*RST"                  ! Device reset
2228    OUTPUT @Hp415x;"*CLS"                  ! Clear status data
2229    OUTPUT @Hp415x;":DISP:WIND:STAT ON"    ! Screen update on
2230    OUTPUT @Hp415x;":DISP:WIND:ALL INST"   ! All instrument screen
2231    OUTPUT @Hp5250;"*RST"                  ! Device reset
2232    OUTPUT @Hp5250;"*CLS"                  ! Clear status data
2233    !
2234  SUBEND
2235  ! ==========================================================================
2236  ! --------------------------------------------------------------------------
2237  !              add subroutin
2238  ! --------------------------------------------------------------------------
2239 Setconfig5250:SUB Setconfig5250            !
2240    !
2241    ! HP E5250A initial setting
2242    !
2243    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2244    !
2245    OUTPUT @Hp5250;":ROUT:FUNC ACON"            ! auto config mode
2246    !
2247    OUTPUT @Hp5250;":ROUT:CONN:RULE ALL,FREE"   ! connection rule is free mode
2248    OUTPUT @Hp5250;":ROUT:BIAS:STAT ALL,OFF"    ! exit  bias mode
2249    !
2250    OUTPUT @Hp5250;":ROUT:OPEN:CARD ALL"        ! all channel open
2251    !
2252  SUBEND
2253  ! ---------------------------------------------------------------------
2254  ! ---------------------------------------------------------------------
2255 Connect5250:SUB Connect5250(INTEGER Bias_flag,Str_flag,Dut_iv_assign(*))
2256    !
2257    ! Bias_flag = 1:Bias_mode   0:normal mode
2258    ! Str_flag  = 1:Test check stress  0:measurement
2259    ! Dut_iv_assign(1:4) = 1 : Gate   - SMU number
2260    !                      2 : NotUse - SMU number
2261    !                      3 : Drain  - SMU number
2262    !                      4 : Bulk   - SMU number
2263    !
2264    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2265    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
2266    COM /Meas_info2/ INTEGER Gate(*),Drain(*),Bulk(*)
2267    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
2268    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
2269    !
2270    DIM Dev_c$[256],Chan$(1:3)[10],C$[5]
2271    INTEGER Gate_iv,Drain_iv,Bulk_iv,Gate_out,Drain_out,Bulk_out
2272    INTEGER Slot_no,Bias_offset
2273    !
2274    ! Check bias mode & set bias flag
2275    !
2276    Slot_no=0
2277    Bias_offset=10
2278    !
2279    Gate_iv=Dut_iv_assign(1)
2280    Drain_iv=Dut_iv_assign(3)
2281    Bulk_iv=Dut_iv_assign(4)
2282    !
2283    ! check "test stress condition" or "measurement" & set output channel no
2284    !
2285    IF (Str_flag=1) THEN      ! test stress condition
2286      Drain_out=Drain_str      ! drain channel no
2287      Gate_out=Gate_str       ! gate channel no
2288      Bulk_out=Bulk_str       ! bulk channel no
2289    ELSE                      ! Measurement
2290      Drain_out=Drain(Device)  ! drain channel no
2291      Gate_out=Gate(Device)   ! gate channel no
2292      Bulk_out=Bulk(Device)   ! bulk channel no
2293    END IF
2294    !
2295    ! =============== Gate  channel close ====================
2296    IF ((Gate_iv>=1) AND (Gate_iv<=6)) THEN      !
2297      IF ((Gate_out>=1) AND (Gate_out<=(No_of_devices+1))) THEN 
2298        IF (Bias_flag=1) THEN    ! Bias mode on
2299          Gate_iv=Gate_iv+Bias_offset
2300        END IF
2301        Close5255(Slot_no,Gate_iv,Gate_out)
2302      ELSE
2303        CALL Error_rep(3)        ! improper output assigned
2304      END IF
2305    ELSE
2306      CALL Error_rep(2)          ! improper input port assigned
2307    END IF
2308    ! =============== Drain channel close ====================
2309    IF ((Drain_iv>=1) AND (Drain_iv<=6)) THEN      !
2310      IF ((Drain_out>=1) AND (Drain_out<=(No_of_devices+1))) THEN 
2311        IF (Bias_flag=1) THEN    ! Bias mode on
2312          Drain_iv=Drain_iv+Bias_offset
2313        END IF
2314        Close5255(Slot_no,Drain_iv,Drain_out)
2315      ELSE
2316        CALL Error_rep(3)        ! improper output assigned
2317      END IF
2318    ELSE
2319      CALL Error_rep(2)          ! improper input port assigned
2320    END IF
2321    ! =============== Bulk  channel close ====================
2322    IF ((Bulk_iv>=1) AND (Bulk_iv<=6)) THEN      !
2323      IF ((Bulk_out>=1) AND (Bulk_out<=(No_of_devices+1))) THEN 
2324        IF (Bias_flag=1) THEN    ! Bias mode on
2325          Bulk_iv=Bulk_iv+Bias_offset
2326        END IF
2327        Close5255(Slot_no,Bulk_iv,Bulk_out)
2328      ELSE
2329        CALL Error_rep(3)        ! improper output assigned
2330      END IF
2331    ELSE
2332      CALL Error_rep(2)          ! improper input port assigned
2333    END IF
2334    !
2335  SUBEND
2336  ! ----------------------------------------------------------------------
2337  ! ----------------------------------------------------------------------
2338 Clear5250:SUB Clear5250
2339    !
2340    ! all channel open
2341    !
2342    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2343    !
2344    DIM A$[500]
2345    OUTPUT @Hp5250;":ROUT:OPEN:CARD ALL"       ! all channel open
2346    OUTPUT @Hp5250;":ROUT:CLOS:CARD? 0"        ! close channel check
2347    ENTER @Hp5250;A$
2348    IF (LEN(A$)>0) THEN 
2349      CALL Error_rep(5)             ! all channel open failed
2350    END IF
2351    !
2352  SUBEND
2353  ! ----------------------------------------------------------------------
2354  ! ----------------------------------------------------------------------
2355 Str_define5250:SUB Str_define5250(INTEGER Bias_flag,Str_flag,Dut_iv_assign(*))
2356    !
2357    ! Bias_flag = 1:Bias mode   0:normal mode
2358    ! Str_flag  = 1:Test check stress  0:measurement
2359    ! dut_iv_assign(1:4) = 1 : Gate   - SMU number
2360    !                      2 : NotUse - SMU number
2361    !                      3 : Drain  - SMU number
2362    !                      4 : Bulk   - SMU number
2363    !
2364    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2365    COM /File_name1/ Param_file$,Str_file$
2366    COM /File_name2/ Idvd_file$,Ibvg_file$
2367    COM /Meas_info1/ INTEGER Meas_points,Present,Device,REAL Meas_str_time(*)
2368    COM /Meas_info2/ INTEGER Gate(*),Drain(*),Bulk(*)
2369    COM /Meas_info3/ INTEGER Result(*),No_of_devices,Invalid(*)
2370    COM /Meas_info4/ INTEGER Gate_str,Drain_str,Bulk_str
2371    COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
2372    DIM Comment$[58]
2373    INTEGER Mflg
2374    !
2375    DISP "Present Vgstr=";Vgstr
2376    CALL Connect5250(Bias_flag,Str_flag,Dut_iv_assign(*))   ! Connect test device
2377    !
2378    OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'"&Ibvg_file$&"','DISK'"
2379    Comment$="Determine DC Stress Condition"
2380    OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"
2381    !
2382    OUTPUT @Hp415x;":PAGE:MEAS:SWE:CONS:SMU3 ";Vdstr
2383    OUTPUT @Hp415x;":PAGE:GLIS"
2384    OUTPUT @Hp415x;":DISP:WIND:STAT ON"
2385    OUTPUT @Hp415x;":PAGE:SCON:SING"
2386    OUTPUT @Hp415x;"*OPC?"
2387    ENTER @Hp415x;A
2388    OUTPUT @Hp415x;":DISP:WIND:STAT OFF"
2389    !
2390    OUTPUT @Hp415x;":TRAC? 'VGSTR'"
2391    ENTER @Hp415x;Vgstr
2392    !
2393    CALL Clear5250
2394    !
2395    DISP "New Vgstr=";Vgstr
2396    WAIT 1
2397    !
2398  SUBEND
2399  ! ------------------------------------------------------------
2400  ! ------------------------------------------------------------
2401 Close5255:SUB Close5255(INTEGER Slotno,Ivport,Outno)
2402    !  Close 1channel
2403    !
2404    ! Slotno    = Slot number 0 -> Auto 1 - 4 -> Normal
2405    ! Ivport    = IV port number 0 - 6
2406    ! Outno     = Output channel number 1 - 8 or 1 - 96
2407    !
2408    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2409    !   only 1 channel no close
2410    !
2411    DIM Dev_c$[256]
2412    !
2413    !
2414    OUTPUT Dev_c$ USING "#,2A,Z,2Z,2Z,A";"(@";Slotno;Ivport;Outno;")"
2415       !
2416    OUTPUT @Hp5250;":ROUT:CLOS? ";Dev_c$
2417    ENTER @Hp5250;C$
2418    IF (C$="0") THEN                   ! open
2419      OUTPUT @Hp5250;":ROUT:CLOS ";Dev_c$
2420      OUTPUT @Hp5250;"*OPC?"
2421      ENTER @Hp5250;A
2422    END IF
2423      !
2424    OUTPUT @Hp5250;":ROUT:CLOS? ";Dev_c$
2425    ENTER @Hp5250;C$
2426    IF (C$="0") THEN 
2427      CALL Error_rep(6)
2428    END IF
2429  SUBEND
2430    !=======================================================================
2431 Init_hp5250:SUB Init_hp5250
2432    !=======================================================================
2433    ! HP E5250A Reset
2434    !-----------------------------------------------------------------------
2435    COM @Hp415x,@Form_off,@Hp5250,INTEGER Hpib_sc
2436    !-----------------------------------------------------------------------
2437    T_out=3                                ! Timeout set (sec)
2438    !
2439    ON ERROR GOTO Reset_error
2440    ON TIMEOUT Hpib_sc,T_out GOTO Time_out
2441    !
2442    CLEAR @Hp5250
2443    OUTPUT @Hp5250;"*RST"                  ! Device reset
2444    OUTPUT @Hp5250;"*CLS"                  ! Clear status data
2445    OUTPUT @Hp5250;"*ESE 60;*SRE 32;*OPC?" ! Event status/service request enable register setup
2446    ENTER @Hp5250;A
2447    SUBEXIT
2448    !--------- SUB END -----------------------------------------------------
2449 Time_out:                                 !
2450    BEEP 
2451    DISP "### HP E5250A Initialize Timeout ###"
2452    OFF TIMEOUT 
2453    OFF ERROR 
2454    STOP
2455 Reset_error:                              !
2456    BEEP 
2457    DISP "### HP E5250A Initialize Fail ## ";ERRM$
2458    OFF TIMEOUT 
2459    OFF ERROR 
2460    STOP
2461    !
2462  SUBEND
2463    !=======================================================================
2464 ! Bias_source_on:SUB Bias_source_on
2465 !   !======================================================================
2466 !   ! Bias Source On
2467 !   !----------------------------------------------------------------------
2468 !   COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
2469 !   !----------------------------------------------------------------------
2470 !   OUTPUT 701;"SOUR "&VAL$(Vgstr)   ! Set Gate Stress Voltage
2471 !   OUTPUT 702;"SOUR "&VAL$(Vdstr)   ! Set Drain Stress Voltage
2472 !   OUTPUT 703;"SOUR 0.0"            ! Set Substrate Stress Voltage
2473 ! SUBEND
2474 !   !======================================================================
2475 ! Bias_source_off:SUB Bias_source_off
2476 !   !======================================================================
2477 !   ! Bias Source On
2478 !   !----------------------------------------------------------------------
2479 !   COM /Meas_info5/ REAL Vdstr,Vgstr,Vdd,Vbb,Gate_length,Gate_width
2480 !   !----------------------------------------------------------------------
2481 !   OUTPUT 701;"SOUR 0.0"   ! Set Gate Voltage to 0.0V
2482 !   OUTPUT 702;"SOUR 0.0"   ! Set Drain Voltage to 0.0V
2483 !   OUTPUT 703;"SOUR 0.0"   ! Set Substrate Voltage to 0.0V
2484 ! SUBEND
2485 !   !======================================================================
