tag:blogger.com,1999:blog-21849896357900660822024-02-07T00:56:36.219-08:00Lyte Byte Tech NewsThis Lyte Byte Tech News is for all those Tech Geeks in the World,It Provides all the Technology News,How to, Wordpress tutorials,Blogger tricks Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.comBlogger74125tag:blogger.com,1999:blog-2184989635790066082.post-19650888531211986202020-05-15T12:34:00.000-07:002020-05-15T15:09:29.951-07:00log mbist short<div dir="ltr" style="text-align: left;" trbidi="on">
reads the domains xml files<br />
<br />
<span style="white-space: pre;"> </span>in xml files we will have domains masking, domains lists in the below format<br />
d={1 {}} r=1 n=1 c=1 j=0 j=1<br />
it also defines<br />
<br />
<span style="white-space: pre;"> </span>DomainMaskList before: {1 {}}<br />
<span style="white-space: pre;"> </span>DomainMaskList after: {1 {}}<br />
<br />
Then calculates the debug wait cycles<br />
<br />
<span style="white-space: pre;"> </span>INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0XAL: masked domain List inside wait_cycle_calculation: <br />
INFO_MBIST: DEBUG_WAIT_CYCLE: --------------------------------------------------<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total Me_Cnt (finalMe:5- initMe:4) : 2<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL_write cycles : 5376<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL_read cycles : 2688<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL cycles : 8064<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_SP_MUL cycles : 296<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_PDP_MUL cycles : 43048<br />
INFO_MBIST: Calculated waitcycle for region_inst : shxs0xal is 44098<br />
<br />
<br />
<span style="white-space: pre;"> </span>As below<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0XTQ: masked domain List inside wait_cycle_calculation:<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0XPL: masked domain List inside wait_cycle_calculation:<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0LNK1: masked domain List inside wait_cycle_calculation:<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0LNK0: masked domain List inside wait_cycle_calculation:<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0LNKM: masked domain List inside wait_cycle_calculation:<br />
<br />
Summary of results<br />
<br />
INFO_MBIST: INFO used in wait_cycle calculation : design_type :rtl<br />
INFO_MBIST: INFO used in wait_cycle calculation : clock_mode :jtag_bypass<br />
INFO_MBIST: INFO used in wait_cycle calculation : chiplet_inst : SHX_S0<br />
INFO_MBIST: INFO used in wait_cycle calculation : jtag_freq : 200<br />
INFO_MBIST: INFO used in wait_cycle calculation : subtest : Short<br />
INFO_MBIST: waitCycles required to complete all chiplets :50242<br />
<br />
<br />
<span style="white-space: pre;"> </span>then the programing config begis to shift chains<br />
<br />
shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/TOP_FS, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/TOP_FS<br />
<br />
It will begin to shift data to following below jtag register<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/JTAG_FUSE_CTRL<br />
<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/CHIPLET_LOGIC<br />
Shifting data to jtag registers: s0_0/testmaster/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_CTL<br />
Shifting data to jtag registers: s0_0/testmaster/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_DATA_mbist_sts<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_CTL<br />
<br />
<br />
<span style="white-space: pre;"> </span>after shifting values to the register I1500_CHAIN_CTRL we are making<br />
"s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON<br />
<span style="white-space: pre;"> </span>for S0_0 broad cast is ON , t0_0 Broadcast is OFF<br />
<br />
for some programing we are making ON/OFF broadcast i dont know<br />
<br />
<br />
# clear out prgmConfig values at the end of mbist API because when we are doing broadcast we have used jtagConfig to shift in value in to register<br />
$prgmConfig clear_program_value<br />
<br />
Then after<br />
<span style="white-space: pre;"> </span>INFO: ramList_1_0 doesn't exist<br />
INFO: ramList_1_1 doesn't exist<br />
INFO: ramList_1_2 doesn't exist<br />
INFO: ramList_1_3 doesn't exist<br />
INFO: ramList_1_4 doesn't exist<br />
INFO: ramList_1_5 doesn't exist<br />
<br />
<br />
------>><br />
<br />
<span style="white-space: pre;"> </span>INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/MBIST_TOP, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
<br />
<br />
INFO_MBIST: Waiting 50242 Cycles for MBIST test to complete...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@29343, end@79584) = 50242 cycles. Accumulated 50533 cycles.<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is serial<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass region_without_mbist =<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass<br />
INFO_MBIST: DEBUG_BROADCAST: regions in serial 0 1 2 3 4 5<br />
<br />
<br />
) jtagConfig property "enable_dr_programming_log" is off, all status of shift_dr registers will be removed when programming Jtag registers<br />
<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 79585 shift_ir 28(24____) 058905____<br />
cycle 79619 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_453B) jtagConfig property "enable_dr_programming_log" is on, all shift_dr register status will be logged when programming<br />
INFO_MBIST: Scanning out results from central MBIST chain for chiplet s0_0(SHX_S0)...<br />
INFO: ramList_1_0 doesn't exist<br />
INFO: ramList_1_1 doesn't exist<br />
INFO: ramList_1_2 doesn't exist<br />
INFO: ramList_1_3 doesn't exist<br />
INFO: ramList_1_4 doesn't exist<br />
INFO: ramList_1_5 doesn't exist<br />
<br />
<br /><br />##################<br />INFO: executing SubTest INIT Sequence ...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@27241, end@27359) = 119 cycles. Accumulated 290 cycles.<br />
(INFO:AFU_057) In label 'SUBTEST_INIT_END' dump signature 'V0_10342'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@27360, end@27360) = 1 cycles. Accumulated 291 cycles.<br />
INFO: executing API: ::ATE::mbist::Short -prgmConfig $prgmConfig -testConfig $testConfig -chipletId 1<br />
INFO: Reading Xml Files...<br />
INFO_MBIST: MBIST Masking domains d={1 {}} r=1 n=1 c=1 j=0 j=1<br />
INFO_MBIST: DomainMaskList before: {1 {}}<br />
INFO_MBIST: DomainMaskList after: {1 {}}<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: --------------------------------------------------<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: regionName SHXS0XAL: masked domain List inside wait_cycle_calculation:<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: --------------------------------------------------<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total Me_Cnt (finalMe:5- initMe:4) : 2<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL_write cycles : 5376<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL_read cycles : 2688<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_DP_MUL cycles : 8064<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_SP_MUL cycles : 296<br />
INFO_MBIST: DEBUG_WAIT_CYCLE: Total_PDP_MUL cycles : 43048<br />
<div>
.</div>
<div>
.</div>
<div>
.</div>
<div>
.</div>
<div>
<div>
INFO_MBIST: Calculated waitcycle for region_inst : shxs0lnkm is 46146</div>
<div>
INFO_MBIST: INFO used in wait_cycle calculation : design_type :rtl</div>
<div>
INFO_MBIST: INFO used in wait_cycle calculation : clock_mode :jtag_bypass</div>
<div>
INFO_MBIST: INFO used in wait_cycle calculation : chiplet_inst : SHX_S0</div>
<div>
INFO_MBIST: INFO used in wait_cycle calculation : jtag_freq : 200</div>
<div>
INFO_MBIST: INFO used in wait_cycle calculation : subtest : Short</div>
<div>
INFO_MBIST: waitCycles required to complete all chiplets :50242</div>
</div>
<div>
<br /></div>
<div>
INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 27361. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/TOP_FS, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 27361 shift_ir 28(24____) 052405____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/TOP_FS<br />
cycle 27395 shift_dr 46(42____) 00000000000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 27450. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/JTAG_FUSE_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 27450 shift_ir 28(24____) 052f05____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/JTAG_FUSE_CTRL<br />
cycle 27484 shift_dr 143(139____) 3c000000000000000000000000000000000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 27632. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/CHIPLET_LOGIC, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 27632 shift_ir 28(24____) 052605____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/CHIPLET_LOGIC<br />
cycle 27666 shift_dr 500(496____) 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28175. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/I1500_CHAIN_CTRL, s0_0/SHX_S0_1500_wrapper/WS_BYPASS, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28175 shift_ir 28(24____) 890505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/testmaster/I1500_CHAIN_CTRL<br />
cycle 28209 shift_dr 9(5____) 10____<br />
expected XXXXX____<br />
(INFO:VEC_301) Cycle 28218 ChainIndex=6 shift register "s0_0/testmaster/testmaster_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28220 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/testmaster/testmaster_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28223. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/WS_BYPASS, t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 28223 shift_ir 28(24____) 050589____<br />
(INFO:VEC_232) Shifting data to jtag registers: t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 28257 shift_dr 9(5____) 04____<br />
expected XXXXX____<br />
(INFO:VEC_301) Cycle 28264 ChainIndex=4 shift register "t0_0/SHX_T0_1500_wrapper/shxt0pads0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28266 ChainIndex=6 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "t0_0/SHX_T0_1500_wrapper/shxt0pads0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28271. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28271 shift_ir 28(24____) 058905____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
<br />
<br />
expected XXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 28314 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28316 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 28317 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28319 ChainIndex=11 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 28320 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28322 ChainIndex=14 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 28323 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28325 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 28326 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28328 ChainIndex=20 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 28329 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28331 ChainIndex=23 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28339. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_CTL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28339 shift_ir 28(24____) 051505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_CTL<br />
cycle 28373 shift_dr 19(15____) 0000____<br />
expected XXXXXXXXXXXXXXX____<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28401. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/I1500_CHAIN_CTRL, s0_0/SHX_S0_1500_wrapper/WS_BYPASS, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28401 shift_ir 28(24____) 890505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/testmaster/I1500_CHAIN_CTRL<br />
cycle 28435 shift_dr 9(5____<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_CTL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28339 shift_ir 28(24____) 051505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_CTL<br />
cycle 28373 shift_dr 19(15____) 0000____<br />
expected XXXXXXXXXXXXXXX____<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28401. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/I1500_CHAIN_CTRL, s0_0/SHX_S0_1500_wrapper/WS_BYPASS, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28401 shift_ir 28(24____) 890505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/testmaster/I1500_CHAIN_CTRL<br />
cycle 28435 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_301) Cycle 28444 ChainIndex=6 shift register "s0_0/testmaster/testmaster_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28446 ChainIndex=8 Programming value 1'h1 --> 1'h0 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/testmaster/testmaster_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28449. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/WS_BYPASS, t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 28449 shift_ir 28(24____) 050589____<br />
(INFO:VEC_232) Shifting data to jtag registers: t0_0/SHX_T0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 28483 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_301) Cycle 28490 ChainIndex=4 shift register "t0_0/SHX_T0_1500_wrapper/shxt0pads0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 28492 ChainIndex=6 Programming value 1'h1 --> 1'h0 for field="broadcast_write"<br />
(INFO:VEC_365) Client "t0_0/SHX_T0_1500_wrapper/shxt0pads0_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 28497. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 28497 shift_ir 28(24____) 058905____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
<div>
<br /></div>
<div>
<div>
expected XXXXXXXXXXXXXXXXXXXXX____</div>
<div>
(INFO:VEC_301) Cycle 28540 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28542 ChainIndex=8 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28543 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28545 ChainIndex=11 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28546 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28548 ChainIndex=14 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28549 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28551 ChainIndex=17 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28552 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28554 ChainIndex=20 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28555 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28557 ChainIndex=23 Programming value 1'h1 --> 1'h0 for field="broadcast_write"</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = OFF.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = OFF.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = OFF.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = OFF.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = OFF.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = OFF.</div>
<div>
INFO_MBIST: asserting mbist_ramaccess_rst_ 1</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5</div>
<div>
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
<div>
cycle 28565 shift_ir 28(24____) 058905____</div>
<div>
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL</div>
<div>
cycle 28599 shift_dr 25(21____) 092490____</div>
<div>
expected XXXXXXXXXXXXXXXXXXXXX____</div>
</div>
<div>
\</div>
<div>
<br /></div>
<div>
<div>
INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
<div>
cycle 28565 shift_ir 28(24____) 058905____</div>
<div>
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL</div>
<div>
cycle 28599 shift_dr 25(21____) 092490____</div>
<div>
expected XXXXXXXXXXXXXXXXXXXXX____</div>
<div>
(INFO:VEC_301) Cycle 28608 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28610 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28611 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28613 ChainIndex=11 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28614 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28616 ChainIndex=14 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28617 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28619 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28620 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28622 ChainIndex=20 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_301) Cycle 28623 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28625 ChainIndex=23 Programming value 1'h0 --> 1'h1 for field="broadcast_write"</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON.</div>
<div>
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
<div>
cycle 28629 shift_ir 28(24____) 051a05____</div>
<div>
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL</div>
<div>
cycle 28663 shift_dr 32(28____) 0000000____</div>
<div>
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXX____</div>
<div>
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared</div>
<div>
(INFO:VEC_379) Cycle Info: move_to_state (start@28700, end@28749) = 50 cycles. Accumulated 50 cycles (end state = RUN_TEST_IDLE, the number of TCK cycles stay on end state = 50).</div>
<div>
INFO_MBIST: desserting mbist_ramaccess_rst_</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5</div>
<div>
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
<div>
cycle 28750 shift_ir 28(24____) 051a05____</div>
<div>
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL</div>
<div>
cycle 28784 shift_dr 32(28____) 0002000____</div>
<div>
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXX____</div>
<div>
(INFO:VEC_301) Cycle 28793 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/RAM_ACCESS_CTRL"</div>
<div>
(INFO:VEC_300A) Cycle 28804 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="u0/mbist_ramaccess_rst_"</div>
<div>
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared</div>
<div>
(INFO:VEC_379) Cycle Info: move_to_state (start@28821, end@28870) = 50 cycles. Accumulated 100 cycles (end state = RUN_TEST_IDLE, the number of TCK cycles stay on end state = 50).</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5</div>
<div>
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/MBIST_TOP, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
<div>
cycle 28871 shift_ir 28(24____) 051605____</div>
<div>
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP</div>
<div>
cycle 28905 shift_dr 197(193____) 0000000000000000000000000000000000000000000000008____</div>
<div>
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____</div>
<div>
(INFO:VEC_301) Cycle 28914 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/MBIST_TOP"</div>
<div>
(INFO:VEC_300A) Cycle 28915 ChainIndex=7 Programming value 1'h0 --> 1'h1 for field="u0/start_bits"</div>
<div>
(INFO:VEC_300A) Cycle 28938 ChainIndex=30 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"</div>
<div>
(INFO:VEC_300A) Cycle 28939 ChainIndex=31 Programming value 30'h3fffffff --> 30'h00000000 for field="u0/bist_mask_bits"</div>
<div>
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared</div>
<div>
INFO: ramList_1_0 doesn't exist</div>
<div>
INFO: ramList_1_1 doesn't exist</div>
<div>
INFO: ramList_1_2 doesn't exist</div>
<div>
INFO: ramList_1_3 doesn't exist</div>
<div>
INFO: ramList_1_4 doesn't exist</div>
<div>
INFO: ramList_1_5 doesn't exist</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on</div>
<div>
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r= </div>
<div>
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5</div>
<div>
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/MBIST_TOP, t0_0/SHX_T0_1500_wrapper/WS_BYPASS</div>
</div>
<div>
<br /></div>
cycle 29107 shift_ir 28(24____) 051605____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
cycle 29141 shift_dr 197(193____) 0000000000000000000000000000000000000000004814118____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 29150 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 29152 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 29154 ChainIndex=10 Programming value 8'h00 --> 8'h04 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 29162 ChainIndex=18 Programming value 8'h00 --> 8'h05 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 29171 ChainIndex=27 Programming value 1'h0 --> 1'h1 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 29174 ChainIndex=30 Programming value 1'h0 --> 1'h1 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: Waiting 50242 Cycles for MBIST test to complete...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@29343, end@79584) = 50242 cycles. Accumulated 50533 cycles.<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is serial<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass region_without_mbist =<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass<br />
INFO_MBIST: DEBUG_BROADCAST: regions in serial 0 1 2 3 4 5<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = OFF.<br />
(WARN:VEC_453A) jtagConfig property "enable_dr_programming_log" is off, all status of shift_dr registers will be removed when programming Jtag registers<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 79585 shift_ir 28(24____) 058905____<br />
cycle 79619 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_453B) jtagConfig property "enable_dr_programming_log" is on, all shift_dr register status will be logged when programming<br />
INFO_MBIST: Scanning out results from central MBIST chain for chiplet s0_0(SHX_S0)...<br />
INFO: ramList_1_0 doesn't exist<br />
INFO: ramList_1_1 doesn't exist<br />
INFO: ramList_1_2 doesn't exist<br />
INFO: ramList_1_3 doesn't exist<br />
INFO: ramList_1_4 doesn't exist<br />
INFO: ramList_1_5 doesn't exist<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 79633. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/MBIST_TOP, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 79633 shift_ir 28(24____) 051605____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
cycle 79667 shift_dr 1147(1143____) 00000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000028____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010XXXXXXXX00000101111XXX____<br />
(INFO:VEC_301) Cycle 79676 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 79678 ChainIndex=8 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 79679 ChainIndex=9 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 79680 ChainIndex=10 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 79688 ChainIndex=18 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 79697 ChainIndex=27 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 79700 ChainIndex=30 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_301) Cycle 79866 ChainIndex=196 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 79868 ChainIndex=198 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 79869 ChainIndex=199 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 79870 ChainIndex=200 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 79878 ChainIndex=208 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 79887 ChainIndex=217 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 79890 ChainIndex=220 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_301) Cycle 80056 ChainIndex=386 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 80058 ChainIndex=388 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 80059 ChainIndex=389 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 80060 ChainIndex=390 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 80068 ChainIndex=398 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 80077 ChainIndex=407 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 80080 ChainIndex=410 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_301) Cycle 80246 ChainIndex=576 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 80248 ChainIndex=578 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 80249 ChainIndex=579 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 80250 ChainIndex=580 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 80258 ChainIndex=588 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 80267 ChainIndex=597 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 80270 ChainIndex=600 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_301) Cycle 80436 ChainIndex=766 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 80438 ChainIndex=768 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 80439 ChainIndex=769 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 80440 ChainIndex=770 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 80448 ChainIndex=778 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 80457 ChainIndex=787 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 80460 ChainIndex=790 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
(INFO:VEC_301) Cycle 80626 ChainIndex=956 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 80628 ChainIndex=958 Programming value 1'h1 --> 1'h0 for field="u0/run_base_bits"<br />
(INFO:VEC_300A) Cycle 80629 ChainIndex=959 Programming value 1'h0 --> 1'h1 for field="u0/done_bits"<br />
(INFO:VEC_300A) Cycle 80630 ChainIndex=960 Programming value 8'h04 --> 8'h00 for field="u0/elem_count_bits"<br />
(INFO:VEC_300A) Cycle 80638 ChainIndex=968 Programming value 8'h05 --> 8'h00 for field="u0/final_me_bits"<br />
(INFO:VEC_300A) Cycle 80647 ChainIndex=977 Programming value 1'h1 --> 1'h0 for field="u0/enable_bist_bits"<br />
(INFO:VEC_300A) Cycle 80650 ChainIndex=980 Programming value 1'h1 --> 1'h0 for field="u0/bist_mask_sel_bits"<br />
INFO_MBIST: Select chain daisy_mbist_status_chain for clusterInst SHX_S0_1500_wrapper<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 80823 shift_ir 28(24____) 058905____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 80857 shift_dr 25(21____) 092490____<br />
expected XXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 80866 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80868 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 80869 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80871 ChainIndex=11 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 80872 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80874 ChainIndex=14 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 80875 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80877 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 80878 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80880 ChainIndex=20 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 80881 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 80883 ChainIndex=23 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 80887 shift_ir 28(24____) 051a05____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
cycle 80921 shift_dr 32(28____) 4063fe0____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 80930 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/RAM_ACCESS_CTRL"<br />
(INFO:VEC_300A) Cycle 80931 ChainIndex=7 Programming value 10'h000 --> 10'h3fc for field="u0/chain_sel"<br />
(INFO:VEC_300A) Cycle 80945 ChainIndex=21 Programming value 1'h0 --> 1'h1 for field="u0/clk_switch_en"<br />
(INFO:VEC_300A) Cycle 80946 ChainIndex=22 Programming value 1'h0 --> 1'h1 for field="u0/shift_only"<br />
(INFO:VEC_300A) Cycle 80954 ChainIndex=30 Programming value 1'h0 --> 1'h1 for field="u0/debug_on"<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is serial<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass region_without_mbist =<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass<br />
INFO_MBIST: DEBUG_BROADCAST: regions in serial 0 1 2 3 4 5<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = OFF.<br />
(WARN:VEC_453A) jtagConfig property "enable_dr_programming_log" is off, all status of shift_dr registers will be removed when programming Jtag registers<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 80958 shift_ir 28(24____) 058905____<br />
cycle 80992 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_453B) jtagConfig property "enable_dr_programming_log" is on, all shift_dr register status will be logged when programming<br />
INFO_MBIST: Scanning out local mbist status chain for SHX_S0_1500_wrapper<br />
INFO: ramList_1_0 doesn't exist<br />
INFO: ramList_1_1 doesn't exist<br />
INFO: ramList_1_2 doesn't exist<br />
INFO: ramList_1_3 doesn't exist<br />
INFO: ramList_1_4 doesn't exist<br />
INFO: ramList_1_5 doesn't exist<br />
(INFO:VEC_263) PrgmConfig begins to shift a chain at cycle 81006. Chain data is shown in following messages:<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_DATA_mbist_sts, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 81006 shift_ir 28(24____) 050d05____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_DATA_mbist_sts<br />
cycle 81040 shift_dr 7653(7649____) 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000X00000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000X000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000X000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000X00000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000X00000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000X00000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000000000X000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000000X0000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000000X0000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000000X0000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000X1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000000X0000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000X00000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000X00000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000X000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000X00000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000010XXXX____<br />
INFO_MBIST: Deasserting debug mode for configIndex 1<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 88702 shift_ir 28(24____) 058905____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 88736 shift_dr 25(21____) 092490____<br />
expected XXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 88745 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88747 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88748 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88750 ChainIndex=11 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88751 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88753 ChainIndex=14 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88754 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88756 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88757 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88759 ChainIndex=20 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88760 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88762 ChainIndex=23 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 88766 shift_ir 28(24____) 051a05____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_ACCESS_CTRL<br />
cycle 88800 shift_dr 32(28____) 0002000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 88809 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/RAM_ACCESS_CTRL", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/RAM_ACCESS_CTRL"<br />
(INFO:VEC_300A) Cycle 88810 ChainIndex=7 Programming value 10'h3fc --> 10'h000 for field="u0/chain_sel"<br />
(INFO:VEC_300A) Cycle 88824 ChainIndex=21 Programming value 1'h1 --> 1'h0 for field="u0/clk_switch_en"<br />
(INFO:VEC_300A) Cycle 88825 ChainIndex=22 Programming value 1'h1 --> 1'h0 for field="u0/shift_only"<br />
(INFO:VEC_300A) Cycle 88833 ChainIndex=30 Programming value 1'h1 --> 1'h0 for field="u0/debug_on"<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is serial<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass region_without_mbist =<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass<br />
INFO_MBIST: DEBUG_BROADCAST: regions in serial 0 1 2 3 4 5<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = OFF.<br />
(WARN:VEC_453A) jtagConfig property "enable_dr_programming_log" is off, all status of shift_dr registers will be removed when programming Jtag registers<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 88837 shift_ir 28(24____) 058905____<br />
cycle 88871 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_453B) jtagConfig property "enable_dr_programming_log" is on, all shift_dr register status will be logged when programming<br />
INFO_MBIST: clearing out registers<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 88885 shift_ir 28(24____) 058905____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL<br />
cycle 88919 shift_dr 25(21____) 092490____<br />
expected XXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 88928 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88930 ChainIndex=8 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88931 ChainIndex=9 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88933 ChainIndex=11 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88934 ChainIndex=12 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88936 ChainIndex=14 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88937 ChainIndex=15 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88939 ChainIndex=17 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88940 ChainIndex=18 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88942 ChainIndex=20 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_301) Cycle 88943 ChainIndex=21 shift register "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/I1500_CHAIN_CTRL"<br />
(INFO:VEC_300A) Cycle 88945 ChainIndex=23 Programming value 1'h0 --> 1'h1 for field="broadcast_write"<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = ON.<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/MBIST_TOP, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 88949 shift_ir 28(24____) 051605____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/MBIST_TOP<br />
cycle 88983 shift_dr 197(193____) 0000000000000000000000000000000000000000000000000____<br />
expected XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 88992 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/MBIST_TOP", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/MBIST_TOP"<br />
(INFO:VEC_300A) Cycle 88993 ChainIndex=7 Programming value 1'h1 --> 1'h0 for field="u0/start_bits"<br />
(INFO:VEC_300A) Cycle 88995 ChainIndex=9 Programming value 1'h1 --> 1'h0 for field="u0/done_bits"<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is broadcast_on<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass c=1 r=<br />
INFO_MBIST: DEBUG_BROADCAST: regions in broadcast c=1 r= 0 1 2 3 4 5<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/RAM_CTL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 89185 shift_ir 28(24____) 051505____<br />
(INFO:VEC_232) Shifting data to jtag registers: s0_0/SHX_S0_1500_wrapper/RAM_CTL<br />
cycle 89219 shift_dr 19(15____) 0100____<br />
expected XXXXXXXXXXXXXXX____<br />
(INFO:VEC_301) Cycle 89228 ChainIndex=6 shift register "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst/RAM_CTL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst/RAM_CTL", "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst/RAM_CTL", "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst/RAM_CTL", "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst/RAM_CTL", "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst/RAM_CTL"<br />
(INFO:VEC_300A) Cycle 89234 ChainIndex=12 Programming value 1'h0 --> 1'h1 for field="u0/write_inh"<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: DEBUG_BROADCAST: MBIST mode is serial<br />
INFO_MBIST: DEBUG_BROADCAST: region passed to be on bypass region_without_mbist =<br />
INFO_MBIST: DEBUG_BROADCAST: regions in bypass<br />
INFO_MBIST: DEBUG_BROADCAST: regions in serial 0 1 2 3 4 5<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnkm_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk0_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0lnk1_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xpl_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xtq_cli_inst" : BROADCAST = OFF.<br />
(INFO:VEC_365) Client "s0_0/SHX_S0_1500_wrapper/shxs0xal_cli_inst" : BROADCAST = OFF.<br />
(WARN:VEC_453A) jtagConfig property "enable_dr_programming_log" is off, all status of shift_dr registers will be removed when programming Jtag registers<br />
(INFO:VEC_546) shift_ir: register list = s0_0/testmaster/WS_BYPASS, s0_0/SHX_S0_1500_wrapper/I1500_CHAIN_CTRL, t0_0/SHX_T0_1500_wrapper/WS_BYPASS<br />
cycle 89243 shift_ir 28(24____) 058905____<br />
cycle 89277 shift_dr 9(5____) 00____<br />
expected XXXXX____<br />
(INFO:VEC_453B) jtagConfig property "enable_dr_programming_log" is on, all shift_dr register status will be logged when programming<br />
(INFO:VEC_464) PrgmConfig::clear_program_value called. All program value set by PrgmConfig::set_program_value is cleared<br />
INFO_MBIST: Moving to RTI state<br />
JTAG init to state: RTI<br />
(INFO:VEC_379) Cycle Info: move_to_state (start@89291, end@89300) = 10 cycles. Accumulated 110 cycles (end state = RUN_TEST_IDLE, the number of TCK cycles stay on end state = 10).<br />
(INFO:ATE_105) procedure '::ATE::mbist::Short' execute time is: 38 mins 48 secs<br />
<br />
INFO: executing Global EOT Sequence ...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89301, end@89399) = 99 cycles. Accumulated 50632 cycles.<br />
(INFO:AFU_057) In label 'EOT_BEGIN' dump signature 'V0_40996'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89400, end@89400) = 1 cycles. Accumulated 50633 cycles.<br />
(INFO:ATE_109) 05/04/2020 10:59:58 starting global eot sequence 'BreakPoint Start_UPHY_Power_Off' @cycle 89401<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89401, end@89519) = 119 cycles. Accumulated 50752 cycles.<br />
(INFO:AFU_057) In label 'Start_UPHY_Power_Off' dump signature 'V0_34450'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89520, end@89520) = 1 cycles. Accumulated 50753 cycles.<br />
(INFO:ATE_109) 05/04/2020 11:00:03 starting global eot sequence 'UPHY_Power_Off' @cycle 89521<br />
05/04/2020 11:00:03==============@cycle 89521 ENTER procedure: ::UPHY_Power_Off==============<br />
test_name is: mbist.mbist<br />
subtest_name is: Short<br />
design_type is: rtl<br />
design_scope is: FULLCHIP<br />
clock_mode is : jtag_bypass<br />
sub_clock_mode is :<br />
init modes: extest 0 testclk_trigger 0 tam 0 xtr 0 intest 0 serdesclk_trigger 0 fabric_pex 0 stuckat 0 ftm 0<br />
sub_modes is:<br />
ATE_config is:<br />
UPHY PowerDown Sequence Enabled<br />
05/04/2020 11:00:03==============@cycle 89521 LEAVE procedure: ::UPHY_Power_Off==============<br />
(INFO:ATE_105) procedure '::UPHY_Power_Off' execute time is: 1 secs<br />
(INFO:ATE_109) 05/04/2020 11:00:03 starting global eot sequence 'BreakPoint End_UPHY_Power_Off' @cycle 89521<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89521, end@89639) = 119 cycles. Accumulated 50872 cycles.<br />
(INFO:AFU_057) In label 'End_UPHY_Power_Off' dump signature 'V0_35614'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89640, end@89640) = 1 cycles. Accumulated 50873 cycles.<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89641, end@89759) = 119 cycles. Accumulated 50992 cycles.<br />
(INFO:AFU_057) In label 'GLOBAL_EOT_END' dump signature 'V0_57754'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89760, end@89760) = 1 cycles. Accumulated 50993 cycles.<br />
<br />
INFO: executing Test EOT Sequence ...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89761, end@89879) = 119 cycles. Accumulated 51112 cycles.<br />
(INFO:AFU_057) In label 'TEST_EOT_END' dump signature 'V0_1325'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89880, end@89880) = 1 cycles. Accumulated 51113 cycles.<br />
<br />
INFO: executing SubTest EOT Sequence ...<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@89881, end@89999) = 119 cycles. Accumulated 51232 cycles.<br />
(INFO:AFU_057) In label 'SUBTEST_EOT_END' dump signature 'V0_55232'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@90000, end@90000) = 1 cycles. Accumulated 51233 cycles.<br />
(INFO:VEC_313) TN->PLI: force tb.TB_sim_run 0 0 0<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@90001, end@90001) = 1 cycles. Accumulated 51234 cycles.<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@90002, end@90119) = 118 cycles. Accumulated 51352 cycles.<br />
(INFO:AFU_057) In label 'END_OF_TEST' dump signature 'V0_7439'<br />
(INFO:VEC_378) Cycle Info: wait_cycles (start@90120, end@90120) = 1 cycles. Accumulated 51353 cycles.<br />
(INFO:AFU_061) Summary Disable Event Num: 2<br />
(INFO:AFU_061) Summary Total Event Num: 136<br />
normalCycleCount: 90121<br />
###################################<br />
# dft programming modes summary #<br />
###################################<br />
dft programming mode:<br />
N/A<br />
<br />
dft programming common modes:<br />
s0_0: N/A<br />
t0_0: N/A<br />
<div>
<br /></div>
<br />
<br /></div>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-14867608519683834482020-05-15T07:07:00.000-07:002020-05-15T07:07:47.795-07:00short mbis<div dir="ltr" style="text-align: left;" trbidi="on">
proc socf_base_mbist_interface { args_ref } {<br />
upvar $args_ref args<br />
set orig_args $args<br />
global domainsXml<br />
<br />
set options {<br />
{svop.arg 00 "-svop"}<br />
{prgmConfig.arg "" "-prgmConfig object" "NO_CUSTOMIZE"}<br />
{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}<br />
{domainMaskList.arg "[list]" "-list of domains to be masked. Usage : -domainMaskList '{ {<1st cluster_id> {{<1st region_id> {<list of masked domain id>}}... {<Nth region_id> {<list of masked domain id>}}} }... {<Nth cluster_id> {{<1st region_id of Nth cluster> {<list of masked domain id>}}... {<Nth region_id of Nth cluster> {<list of masked domain id>}}} } }'"}<br />
{domainUnMaskList.arg "" "-list of domains to be masked. Usage : -domainUnMaskList '{ {<1st cluster_id> {{<1st region_id> {<list of masked domain id>}}... {<Nth region_id> {<list of masked domain id>}}} }... {<Nth cluster_id> {{<1st region_id of Nth cluster> {<list of masked domain id>}}... {<Nth region_id of Nth cluster> {<list of masked domain id>}}} } }'"}<br />
{initMe.arg.secret "" "-initial march element" "NO_CUSTOMIZE"}<br />
{finalMe.arg.secret "" "-final march element" "NO_CUSTOMIZE"}<br />
{dumpLocal.arg "1" "-option to dump local chains. 1 to enable dumping."}<br />
{dumpMemoryHostAccess.arg "0" "-option to dump local Memory/Host Access chains. 1 to enable dumping."}<br />
{regionMaskList.arg "[list]" "-list of regions to be masked"}<br />
{region_inst.arg "ALL_REGION" "-targeted region"}<br />
{regionId.arg "-1" "-targeted region"}<br />
{chipletId.arg "-1" "-targeted chiplet"}<br />
{waitCycles.arg 500 "-default waitCycles between writes and reads"}<br />
{bist_on.arg "0" "-keep mbist_en asserted at end of the end"}<br />
{waitcycle_override.arg 0 ""}<br />
{subtest.arg "" "Type of test"}<br />
{err_inj_type.arg "" "ERR INJ Type"}<br />
{pll_freq_list.arg "" "path of pll_freq_list"}<br />
{dumpCentral.arg "1" "-option to dump local chains. 1 to enable dumping."}<br />
{Ram_UnMask.arg "None" "specify type of ram to be Unmasked"}<br />
{Ram_Mask.arg "None" "specify type of ram to be Masked"}<br />
{wr_all_lane.arg "0" "For writing into all lanes one by one"}<br />
{wr_one_lane.arg "-1" "For writing into only the selected lane"}<br />
{ramSettings.arg "" "-ramSettings list. Usage -ramSettings {{<field_name1> value} {<field_name2> value} ...} "}<br />
{Clk_UnMask.arg "None" "specify name of clock to be Unmasked"}<br />
{Clk_Mask.arg "None" "specify name of clock to be Masked"}<br />
{enable_crc_dump.arg "-1" "option to enable crc dump"}<br />
{enable_crc_cmp.arg "-1" "option to enable crc compare"}<br />
{flat_mode.arg "0" "option to switch between rtl(0) and flat(1) mode"}<br />
{NoRst.arg "0" "-NoRst"}<br />
{number_of_splits.arg "1" "Number of iterations in which we want to split the pattern"}<br />
{clear_mbist_toggle.arg "0" "by default do mot toggle clear_mbist once at the beginning"}<br />
{lpc_prog_on.arg "1" "by default lpc programming will be enabled in chip having lpc inseterd mbist"}<br />
{staggered_mode.arg "1" "Start finishing status as soon as MBIST operation finshes on chiplets rather than waiting for other chiplet to get finished"}<br />
{enable_wait_absolute.arg "0" "enable absolute wait time"}<br />
{ctrl_chain_mode.arg "broadcast_mbist_ctrl_chain" "disable broadcast mode in for ctrl chain gv100 onward"}<br />
{host_chain_mode.arg "mbist_hostaccess_chain" "shift local status chain indaisy mode gv100 onward"}<br />
{status_chain_mode.arg "daisy_mbist_status_chain" "shift local control chain shift in in daisy mode gv100 onward"}<br />
{jtag_broadcast_client.arg "1" "use jtag broadcast for clients wherever possible"}<br />
<span style="white-space: pre;"> </span>{jtag_broadcast_cluster.arg "0" "use jtag broadcast for cluster wherever possible"}<br />
<span style="white-space: pre;"> </span>{full_test_final_me_override.arg "0" "used for pickingup ull test FinalMe from full_test_finalme_override key"}<br />
<span style="white-space: pre;"> </span> {ist_mode_mbist.arg "0" "-enable IST mode"}<br />
<span style="white-space: pre;"> </span>{no_ist_seq_markers.arg "0" "-remove sequence markers in ist_mode"}<br />
<span style="white-space: pre;"> </span>{last_seq_mbistwait.arg "0" "-mbist wait will be the last seq"}<br />
<span style="white-space: pre;"> </span>{cfg_access_latency.arg "" "program access latency in Rams which have this feature"}<br />
<span style="white-space: pre;"> </span>{cfg_rdata_pipeline.arg "" "program rd data pipeline"}<br />
<span style="white-space: pre;"> </span>{toggle_rst.arg "0" "toggling mbist_ramacces_rst_ after getting mbist_en high"}<br />
<span style="white-space: pre;"> </span>{dummy_mbist_en.arg "1" "set mbist_en high before setting enable_bist"}<br />
<span style="white-space: pre;"> </span>{debug_mode_wr_inh.arg "0" "toggle debug_mode during debug_mode toggling"}<br />
{pid_failed_yaml.arg "" "to be only used regression or vec mode for mbist_step mode"}<br />
{use_read_ram.arg "0" "use read_ram instead of flush_ram in step_mode proc"}<br />
{access_latency.arg "" ""}<br />
{rdata_pipeline.arg "" ""}<br />
{gui_mode.arg "0" "-enable scan debug gui mode"}<br />
{rd_on.arg "0" "-switch to read and shiftout ram content"}<br />
{repairable.arg "" "for two pass mbist_step_mode verification -one for repairable rams "}<br />
{cluster_list.arg "" "-list of clusters to be run"}<br />
{fs_group_list.arg "" "-fs region grouping for IST"}<br />
{partial_mbist_central_comp.arg "0" "compare only mbist enable when ist_mbist_mode is set to 1"}<br />
{set_wr_inh.arg "1" "set RAM_CTL wr_inh bit to 1"}<br />
<span style="white-space: pre;"> </span>{prgm_ram_ctl.arg "1" "clear RAM_CTL in the begining"}<br />
<span style="white-space: pre;"> </span>{rdpath_x_clear_seq.arg "0" "clear rams to avoid x propagation in gates"}<br />
<span style="white-space: pre;"> </span>{skip_chkbd_rd.arg "0" "skip read chkbd step in the memory initialization"}<br />
<span style="white-space: pre;"> </span>{gen_emulation_vec.arg "0" "generate vec mode for emulation- step1 -for error generating log step2-running step_mode"}<br />
{expect_lfsr_0.arg "0" "will set expected value on lfsr to all 0"}<br />
{mbist_assertion.arg "0" "enable mbist s3 assertion"}<br />
{stagger_programming_cycle.arg "0" "stagger MBIST_TOP programming between clusters by this cycle number"}<br />
{split_programming.arg "0" "split MBIST_TOP programming into 4 groups"}<br />
{set_top_fs.arg "0" "set top_fs register bits to 1"}<br />
{use_scan_debug_ctl.arg "1" "choose between scan_debug_ctl or CLK_PCCM_CTL for switching off clock in split programming mode"}<br />
{clear_serial_shift.arg "0" "use serial clear shift of 1500_chain_ctrl"}<br />
{marker_suffix.arg "" "additional suffix needed for IST"}<br />
{ist_clk_freq.arg "" "provide ist_clk_freq in case of ist tests"}<br />
{run_short_nc.arg "1" "run short with no compare"}<br />
{enableFlag.arg "0" "add enable or diasbleflag for ramlist"}<br />
{use_be_id.arg "1" "run short with no compare"}<br />
{ramList.arg "" "ramList to be enabled disabled"}<br />
{mask_all_rams.arg "0" "argument to shift local chainwith mask_all_rams"}<br />
{FA_shift_out.arg "0" "shift in ram_access_chain "}<br />
{stop_on_first_error.arg "0" "set stop on first error bit for FA"}<br />
{ListArgs.arg "" "-option helper"}<br />
}<br />
<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
set options "$fullopt $options"<br />
set fullopt $options<br />
return<br />
} else {<br />
# parray params<br />
# puts "INFO_MBIST: remain args: $args"<br />
}<br />
<br />
if { $params(ListArgs) == "" } {<br />
set prgmConfig $params(prgmConfig)<br />
set jtagConfig [$prgmConfig get_jtag_config]<br />
set testConfig $params(testConfig)<br />
set domainMaskList $params(domainMaskList)<br />
set domainUnMaskList $params(domainUnMaskList)<br />
set initMe $params(initMe)<br />
set finalMe $params(finalMe)<br />
set dumpLocal $params(dumpLocal)<br />
set dumpMemoryHostAccess $params(dumpMemoryHostAccess)<br />
set regionMaskList $params(regionMaskList)<br />
set wait_time $params(waitCycles)<br />
set bist_on $params(bist_on)<br />
set svop $params(svop)<br />
set subtest $params(subtest)<br />
set set_wr_inh $params(set_wr_inh)<br />
<span style="white-space: pre;"> </span>set prgm_ram_ctl $params(prgm_ram_ctl)<br />
<span style="white-space: pre;"> </span>set rdpath_x_clear_seq $params(rdpath_x_clear_seq)<br />
<span style="white-space: pre;"> </span>set skip_chkbd_rd $params(skip_chkbd_rd)<br />
set err_inj_type $params(err_inj_type)<br />
set pll_freq_list $params(pll_freq_list)<br />
set waitcycle_override $params(waitcycle_override)<br />
set jtagConfigList [$jtagConfig jtag_config_list]<br />
set dumpCentral $params(dumpCentral)<br />
set Ram_UnMask $params(Ram_UnMask)<br />
set Ram_Mask $params(Ram_Mask)<br />
set wr_all_lane $params(wr_all_lane)<br />
set wr_one_lane $params(wr_one_lane)<br />
set region_inst $params(region_inst)<br />
set regionId $params(regionId)<br />
set chipletId $params(chipletId)<br />
set ram_settings_list $params(ramSettings)<br />
set Clk_Mask $params(Clk_Mask)<br />
set Clk_UnMask $params(Clk_UnMask)<br />
set enable_crc_dump $params(enable_crc_dump)<br />
set enable_crc_cmp $params(enable_crc_cmp)<br />
set flat_mode $params(flat_mode)<br />
set NoRst $params(NoRst)<br />
set number_of_splits $params(number_of_splits)<br />
set clear_mbist_toggle $params(clear_mbist_toggle)<br />
set lpc_prog_on $params(lpc_prog_on)<br />
set enable_wait_absolute $params(enable_wait_absolute)<br />
set ctrl_chain_mode $params(ctrl_chain_mode)<br />
set host_chain_mode $params(host_chain_mode)<br />
set status_chain_mode $params(status_chain_mode)<br />
set regionId $params(regionId)<br />
set jtag_broadcast_client $params(jtag_broadcast_client)<br />
<span style="white-space: pre;"> </span>set jtag_broadcast_cluster $params(jtag_broadcast_cluster)<br />
<span style="white-space: pre;"> </span>set full_test_final_me_override $params(full_test_final_me_override)<br />
<span style="white-space: pre;"> </span>set ist_mode_mbist $params(ist_mode_mbist)<br />
<span style="white-space: pre;"> </span> set last_seq_mbistwait $params(last_seq_mbistwait)<br />
<span style="white-space: pre;"> </span> set no_ist_seq_markers $params(no_ist_seq_markers)<br />
<span style="white-space: pre;"> </span>set cfg_access_latency $params(cfg_access_latency)<br />
<span style="white-space: pre;"> </span>set cfg_rdata_pipeline $params(cfg_rdata_pipeline)<br />
<span style="white-space: pre;"> </span>set toggle_rst $params(toggle_rst)<br />
<span style="white-space: pre;"> </span> set dummy_mbist_en $params(dummy_mbist_en)<br />
et pid_failed_yaml $params(pid_failed_yaml)<br />
set access_latency $params(access_latency)<br />
set rdata_pipeline $params(rdata_pipeline)<br />
set gui_mode $params(gui_mode)<br />
set rd_on $params(rd_on)<br />
set repairable $params(repairable)<br />
set cluster_list $params(cluster_list)<br />
set fs_group_list $params(fs_group_list)<br />
set partial_mbist_central_comp $params(partial_mbist_central_comp)<br />
<span style="white-space: pre;"> </span>set gen_emulation_vec $params(gen_emulation_vec)<br />
set expect_lfsr_0 $params(expect_lfsr_0)<br />
set mbist_assertion $params(mbist_assertion)<br />
set stagger_programming_cycle $params(stagger_programming_cycle)<br />
set set_top_fs $params(set_top_fs)<br />
set split_programming $params(split_programming)<br />
set use_scan_debug_ctl $params(use_scan_debug_ctl)<br />
set clear_serial_shift $params(clear_serial_shift)<br />
set marker_suffix $params(marker_suffix)<br />
set ist_clk_freq $params(ist_clk_freq)<br />
set run_short_nc $params(run_short_nc)<br />
set ramList $params(ramList)<br />
set use_be_id $params(use_be_id)<br />
set enableFlag $params(enableFlag)<br />
set mask_all_rams $params(mask_all_rams)<br />
set FA_shift_out $params(FA_shift_out)<br />
set stop_on_first_error $params(stop_on_first_error)<br />
<br />
<br />
if {!$gui_mode} {<br />
socf_read_xmlFiles $testConfig<br />
}<br />
<br />
$prgmConfig set_property single_controller_per_shift "force_enable"<br />
<br />
if {$gen_emulation_vec} {<br />
puts "INFO_MBIST: prograrming ATPG_CTL spare bit"<br />
$prgmConfig set_program_value ".*/ATPG_CTL" ".*ATPG_CTL_spare_bit.*" -value 1'b1<br />
$prgmConfig program<br />
}<br />
set starting_cycle [get_current_cycle $jtagConfig]<br />
<br />
<br />
set regionConfig [config_map_value $domainsXml "region_list"]<br />
if {[config_has_key $regionConfig "pseudo_clust_inst" ]} {<br />
set temp [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/chiplet_name] ]<br />
regsub {_cli$} $temp {} temp<br />
set temp [string tolower $temp]<br />
# append temp2 $temp "_cli_inst"<br />
set region_inst $temp<br />
}<br />
<br />
if { [config_map_value [config_find $testConfig CURRENT_TEST] design_scope] == "FULLCHIP" } {<br />
if { $chipletId != -1 } {<br />
set chiplet_hier_inst [socf_get_chiplet_inst $jtagConfigList $chipletId]<br />
set configIndex $chipletId<br />
set chiplet_inst [[lindex $jtagConfigList $configIndex] controller_type]<br />
regsub {_clstr$} $chiplet_inst {} chiplet_inst<br />
if { ![chipletHasRams $domainsXml $chiplet_inst] } {puts "INFO_MBIST: chiplet $chiplet_inst doesn't have any rams, please provide chipletId which has rams" ; exit 1}<br />
} else {<br />
set chiplet_inst "FULLCHIP"<br />
set configIndex [chipletInst_to_configIndex $jtagConfigList $chiplet_inst $domainsXml]<br />
}<br />
} else {<br />
set chiplet_inst [config_map_value [config_find $testConfig CURRENT_TEST] design_scope]<br />
set configIndex [chipletInst_to_configIndex $jtagConfigList $chiplet_inst $domainsXml]<br />
}<br />
###For step mode verif test<br />
if {[regexp {mbist_step_mode} $subtest ]} {<br />
set failedTagConfig [config_new_map]<br />
set failed_tags [list]<br />
set rams_to_be_run 1<br />
if {$repairable} {<br />
###Prepare ram_mask list for masking out non_reapiarable RAMS<br />
set ramList [lindex [get_ram_mask_list_repairable_be $domainsXml ] 1]<br />
set use_be_id 1<br />
set enableFlag 1<br />
if { [llength $ramList] == 0} {<br />
set rams_to_be_run 0<br />
}<br />
} else {<br />
###Prepare ram_mask list for masking out reapiarable RAMS<br />
set ramList [lindex [get_ram_mask_list_repairable_be $domainsXml] 1]<br />
set rams_to_be_run [lindex [get_ram_mask_list_repairable_be $domainsXml] 0]<br />
set use_be_id 1<br />
set enableFlag 0<br />
}<br />
puts "INFO_MBIST: DBG_STEP_MODE: ramList = $ramList enableFlag = $enableFlag rams_to_be_run = $rams_to_be_run"<br />
}<br />
set t [llength $domainUnMaskList]<br />
if {[llength $domainUnMaskList] > 0 } {<br />
set domainMaskList [get_domain_mask_list_frm_unmask $jtagConfigList $domainsXml $configIndex $domainUnMaskList]<br />
puts "INFO_MBIST: DomainUnMaskList $domainUnMaskList"<br />
puts "INFO_MBIST: DomainMaskList $domainMaskList"<br />
<br />
}<br />
if { $configIndex != -1 } { set staggered_mode 0 }<br />
if { $waitcycle_override == 1 } { set staggered_mode 0 }<br />
if { $regionId != -1 } { set region_inst [socf_get_region_inst $domainsXml $chiplet_inst $regionId] }<br />
<br />
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]<br />
set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]<br />
<br />
<br />
if {$gen_emulation_vec == 0} {<br />
<br />
if { $err_inj_type == "all" } {<br />
if {$run_short_nc == 1} {<br />
set marchElemList "100000000100010000011 100000001000010000011"<br />
puts "INFO_MBIST: running Short test with no compare "<br />
if {($enable_crc_cmp == -1) && ($clock_mode eq "pll") } {<br />
set enable_crc_cmp 1<br />
}<br />
if {$clock_mode eq "jtag_bypass"} {<br />
if {[$prgmConfig jtag_output_type] == "VerilogXface"} {<br />
if {$enable_crc_dump == -1} {<br />
set enable_crc_dump 1<br />
}<br />
} else {<br />
if {$enable_crc_cmp == -1} {<br />
set enable_crc_cmp 1<br />
}<br />
}<br />
}<br />
<br />
<br />
socf_prog_bist $prgmConfig $jtagConfigList $configIndex $domainsXml {} $wait_time $marchElemList -chiplet_inst $chiplet_inst -regionMaskList $regionMaskList -subtest "ProgBist" -domainMaskList $domainMaskList -bist_on 1 -diag_en 3 -oneShift 1 -design_type $design_type -clock_mode $clock_mode -waitcycle_override $waitcycle_override -pll_freq_list $pll_freq_list -testConfig $testConfig -region_inst $region_inst -svop $svop -err_inj_type $err_inj_type -lpc_prog_on $lpc_prog_on -ctrl_chain_mode $ctrl_chain_mode -host_chain_mode $host_chain_mode -status_chain_mode $status_chain_mode -debug_mode_wr_inh $debug_mode_wr_inh -jtag_broadcast_client $jtag_broadcast_client -jtag_broadcast_cluster $jtag_broadcast_cluster -dummy_mbist_en $dummy_mbist_en -toggle_rst $toggle_rst -ist_mode_mbist $ist_mode_mbist -no_ist_seq_markers $no_ist_seq_markers -last_seq_mbistwait $last_seq_mbistwait -cfg_access_latency $cfg_access_latency -cfg_rdata_pipeline $cfg_rdata_pipeline -cluster_list $cluster_list -hi_addr "" -low_addr "" -hi_me "" -low_me "" -loop_en 0 -ramList $ramList -use_be_id $use_be_id -enable_crc_dump $enable_crc_dump -enable_crc_cmp $enable_crc_cmp -set_wr_inh 0 -mask_all_rams $mask_all_rams -marker_suffix Prog_nc<br />
set NoRst 1<br />
set clear_mbist_toggle 1<br />
<br />
}<br />
<br />
set err_inj_type_list [list firstAddr_firstCol secondAddr_lastCol firstSecondAddr_firstLastCol]<br />
set set_wr_inh_final 0<br />
foreach err_inj_type $err_inj_type_list {<br />
if {$err_inj_type eq [lindex $err_inj_type_list [expr [llength $err_inj_type_list] -1]]} {<br />
set set_wr_inh_final $set_wr_inh<br />
}<br />
socf_mbist_test $prgmConfig $jtagConfigList $configIndex $domainsXml -domainMaskList $domainMaskList -waitCycles $wait_time -initMe $initMe -finalMe $finalMe -oneShift 1 -chiplet_inst $chiplet_inst -dumpLocal $dumpLocal -regionMaskList $regionMaskList -bist_on 1 -design_type $design_type -clock_mode $clock_mode -waitcycle_override $waitcycle_override -subtest $subtest -err_inj_type $err_inj_type -pll_freq_list $pll_freq_list -testConfig $testConfig -dumpCentral $dumpCentral -wr_all_lane $wr_all_lane -wr_one_lane $wr_one_lane -region_inst $region_inst -svop $svop -ram_settings $ram_settings_list -dumpMemoryHostAccess $dumpMemoryHostAccess -Ram_Mask $Ram_Mask -Ram_UnMask $Ram_UnMask -Clk_Mask $Clk_Mask -Clk_UnMask $Clk_UnMask -NoRst $NoRst -enable_crc_dump $enable_crc_dump -enable_crc_cmp $enable_crc_cmp -flat_mode $flat_mode -clear_mbist_toggle $clear_mbist_toggle -staggered_mode $staggered_mode -lpc_prog_on $lpc_prog_on -enable_wait_absolute $enable_wait_absolute -ctrl_chain_mode $ctrl_chain_mode -host_chain_mode $host_chain_mode -status_chain_mode $status_chain_mode -debug_mode_wr_inh $debug_mode_wr_inh -jtag_broadcast_client $jtag_broadcast_client -jtag_broadcast_cluster $jtag_broadcast_cluster -dummy_mbist_en $dummy_mbist_en -toggle_rst $toggle_rst -gui_mode $gui_mode -ist_mode_mbist $ist_mode_mbist -no_ist_seq_markers $no_ist_seq_markers -last_seq_mbistwait $last_seq_mbistwait -cfg_access_latency $cfg_access_latency -cfg_rdata_pipeline $cfg_rdata_pipeline -cluster_list $cluster_list -fs_group_list $fs_group_list -jtag_broadcast_cluster $jtag_broadcast_cluster -partial_mbist_central_comp $partial_mbist_central_comp -full_test_final_me_override $full_test_final_me_override -set_wr_inh $set_wr_inh_final -prgm_ram_ctl $prgm_ram_ctl -rdpath_x_clear_seq $rdpath_x_clear_seq -expect_lfsr_0 $expect_lfsr_0 -skip_chkbd_rd $skip_chkbd_rd -stagger_programming_cycle $stagger_programming_cycle -split_programming $split_programming -set_top_fs $set_top_fs -clear_serial_shift $clear_serial_shift -ist_clk_freq $ist_clk_freq -marker_suffix $err_inj_type<br />
set NoRst 1<br />
set clear_mbist_toggle 1<br />
}<br />
} else {<br />
set domainMaskList_backup $domainMaskList<br />
set set_wr_inh_final 0<br />
for {set run_number 1} {$run_number <= $number_of_splits } {incr run_number } {<br />
if {$run_number == $number_of_splits} {<br />
set set_wr_inh_final $set_wr_inh<br />
}<br />
if {![config_has_key $regionConfig "pseudo_clust_inst" ]} {<br />
set domainMaskList $domainMaskList_backup<br />
set domainMaskList [getLPdomainMaskList $jtagConfigList $configIndex $domainsXml $domainMaskList $run_number $number_of_splits $configIndex]<br />
puts "INFO_MBIST: MBIST Masking domains d=$domainMaskList r=$run_number n=$number_of_splits c=$configIndex j=$jtag_broadcast_cluster j=$jtag_broadcast_client"<br />
if {[llength $domainMaskList] && ($number_of_splits > 1)} {<br />
clock_off_programming $prgmConfig $jtagConfigList $configIndex $domainsXml $domainMaskList -use_scan_debug_ctl $use_scan_debug_ctl<br />
}<br />
}<br />
<br />
socf_mbist_test $prgmConfig $jtagConfigList $configIndex $domainsXml -domainMaskList $domainMaskList -waitCycles $wait_time -initMe $initMe -finalMe $finalMe -oneShift 1 -chiplet_inst $chiplet_inst -dumpLocal $dumpLocal -regionMaskList $regionMaskList -bist_on $bist_on -design_type $design_type -clock_mode $clock_mode -waitcycle_override $waitcycle_override -subtest $subtest -err_inj_type $err_inj_type -pll_freq_list $pll_freq_list -testConfig $testConfig -dumpCentral $dumpCentral -wr_all_lane $wr_all_lane -wr_one_lane $wr_one_lane -region_inst $region_inst -svop $svop -ram_settings $ram_settings_list -dumpMemoryHostAccess $dumpMemoryHostAccess -Ram_Mask $Ram_Mask -Ram_UnMask $Ram_UnMask -Clk_Mask $Clk_Mask -Clk_UnMask $Clk_UnMask -NoRst $NoRst -enable_crc_dump $enable_crc_dump -enable_crc_cmp $enable_crc_cmp -flat_mode $flat_mode -clear_mbist_toggle $clear_mbist_toggle -staggered_mode $staggered_mode -lpc_prog_on $lpc_prog_on -enable_wait_absolute $enable_wait_absolute -ctrl_chain_mode $ctrl_chain_mode -host_chain_mode $host_chain_mode -status_chain_mode $status_chain_mode -debug_mode_wr_inh $debug_mode_wr_inh -access_latency $access_latency -rdata_pipeline $rdata_pipeline -toggle_rst $toggle_rst -gui_mode $gui_mode -ramList $ramList -use_be_id $use_be_id -enableFlag $enableFlag -cluster_list $cluster_list -fs_group_list $fs_group_list -jtag_broadcast_client $jtag_broadcast_client -ist_mode_mbist $ist_mode_mbist -no_ist_seq_markers $no_ist_seq_markers -last_seq_mbistwait $last_seq_mbistwait -cfg_access_latency $cfg_access_latency -cfg_rdata_pipeline $cfg_rdata_pipeline -jtag_broadcast_cluster $jtag_broadcast_cluster -partial_mbist_central_comp $partial_mbist_central_comp -full_test_final_me_override $full_test_final_me_override -set_wr_inh $set_wr_inh_final -prgm_ram_ctl $prgm_ram_ctl -dummy_mbist_en $dummy_mbist_en -rdpath_x_clear_seq $rdpath_x_clear_seq -expect_lfsr_0 $expect_lfsr_0 -skip_chkbd_rd $skip_chkbd_rd -mbist_assertion $mbist_assertion -stagger_programming_cycle $stagger_programming_cycle -split_programming $split_programming -set_top_fs $set_top_fs -number_of_splits $number_of_splits -run_number $run_number -clear_serial_shift $clear_serial_shift -marker_suffix $marker_suffix -ist_clk_freq $ist_clk_freq -mask_all_rams $mask_all_rams -FA_shift_out $FA_shift_out -stop_on_first_error $stop_on_first_error<br />
<br />
set clear_mbist_toggle 1<br />
}<br />
}<br />
}<br />
}<br />
<br />
<br />
<br />
<br />
####only for mbist_step_mode verification test<br />
if {([regexp {mbist_step_mode} $subtest] && ![regexp {initialization} $subtest] && ($rams_to_be_run == 1)) } {<br />
tn_msg_clear_disabled_messages<br />
if {($gen_emulation_vec == 1) } {<br />
if { ($repairable == 1) } {<br />
if {$subtest eq "mbist_step_mode_1"} {<br />
set err_file "firstAddr_firstRam_rd55"<br />
set initMe 45<br />
set finalMe 47<br />
set actualFailCM 2<br />
} elseif {$subtest eq "mbist_step_mode_2"} {<br />
set err_file "firstAddr_firstRam_rdaa"<br />
set initMe 45<br />
set finalMe 47<br />
set actualFailCM 0<br />
} elseif {$subtest eq "mbist_step_mode_3"} {<br />
set err_file "lastAddr_lastRam_rd55"<br />
set initMe 39<br />
set finalMe 41<br />
set actualFailCM 2<br />
} elseif {$subtest eq "mbist_step_mode_4"} {<br />
set err_file "lastAddr_lastRam_rdaa"<br />
set initMe 39<br />
set finalMe 41<br />
set actualFailCM 0<br />
} elseif {$subtest eq "mbist_step_mode_5"} {<br />
set err_file "randomAddr_randomRam"<br />
set initMe 56<br />
set finalMe 56<br />
set actualFailCM 0<br />
}<br />
set errFile "err_inj_stepping_${err_file}.tn"<br />
source $errFile<br />
set err_list [get_err_list_STUCK0_random]<br />
set NoRst 0<br />
foreach err $err_list {<br />
set clusterId [lindex $err 0]<br />
if {([llength $cluster_list] > 0) && ([lsearch -exact $cluster_list $clusterId] == -1)} {<br />
continue<br />
}<br />
<br />
set regionId [lindex $err 1]<br />
set domain_id [lindex $err 2]<br />
set be_id [lindex $err 3]<br />
set r_id [lindex $err 4]<br />
set err_cols [lindex $err 5]<br />
set address [lindex $err 6]<br />
puts "INFO_MBIST: MBIST Actual error injected on c=$clusterId r=$regionId d=$domain_id, ram_id : $r_id , address = $address initMe =$initMe f =$finalMe -currMe $actualFailCM "<br />
set clusterName [[lindex $jtagConfigList $clusterId] controller_type]<br />
regsub {_clstr$} $clusterName {} clusterName<br />
set region_inst [socf_get_region_inst $domainsXml $clusterName $regionId]<br />
#puts "INFO_MBIST: MBIST reported fail will be on ram_id: $failing_ram_id fail address: $failAdr failCurrMe : $currMe failMe: $failMe"<br />
set args_new [list -prgmConfig $prgmConfig -testConfig $testConfig -chipletId $clusterId -regionId $regionId -domainId $domain_id -beId $be_id -ramId $r_id -initMe $initMe -finalMe $finalMe -NoRst $NoRst -pll_freq_list $pll_freq_list -step_mode_subtest $subtest -use_read_ram $use_read_ram -debug_mode_wr_inh 1 -jtag_broadcast_cluster $jtag_broadcast_cluster -jtag_broadcast_client $jtag_broadcast_client -domainMaskList $domainMaskList -ist_mode_mbist $ist_mode_mbist -region_inst $region_inst -actualFailCM $actualFailCM -actual_fail_addr $address]<br />
socf_mbist_step_mode args_new<br />
set NoRst 1<br />
<br />
<br />
}<br />
}<br />
<br />
} elseif {![$prgmConfig get_dry_run_mode]} {<br />
puts "INFO_MBIST: Moving to RTI state "<br />
jtag_init_to_state $jtagConfig RTI<br />
waitRti $jtagConfig 10<br />
<br />
tn_msg_clear_disabled_messages<br />
<br />
## only for ate verification<br />
set failed_tags_list [[$prgmConfig get_jtag_config ] get_failed_tag_list]<br />
set failed_tags ""<br />
puts "INFO_MBIST: DEBUG: starting cycle for for r=$repairable is $starting_cycle"<br />
for {set i 0} {$i<[llength $failed_tags_list]} {incr i} {<br />
set cycle_number [lindex $failed_tags_list $i]<br />
if {$cycle_number > $starting_cycle} {<br />
set failed_tags [concat $failed_tags [lindex $failed_tags_list [expr $i + 1] ]]<br />
#puts "INFO_MBIST: f=$failed_tags"<br />
}<br />
incr i<br />
}<br />
<br />
<br />
set failedTagConfig [config_new_map]<br />
config_set $failedTagConfig "failed_tags" "$failed_tags"<br />
set pid [pid]<br />
$prgmConfig set_property auto_broadcast force_disable<br />
$prgmConfig set_program_value ".*/CHIP_BROADCAST_WRITE" ".*" -value 0<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*" -value 0<br />
$prgmConfig program<br />
<br />
set failed_tags_fn "failed_tags_1_${chiplet_inst}_${subtest}_${pid}_${repairable}.yml"<br />
config_write_yaml $failedTagConfig $failed_tags_fn<br />
set input_fail_rams_yaml "failed_tags_2_${chiplet_inst}_${subtest}_${pid}_${repairable}.yml"<br />
set i 0<br />
<br />
if {$pid_failed_yaml eq ""} {<br />
uplevel #0 "exec /home/scratch.rkumari_gm108/nvtools_1/nvtools/ate/scripts/list_failing_rams_from_tags.pl -input_yaml failed_tags_1_${chiplet_inst}_${subtest}_${pid}_${repairable}.yml -verification 1 -output_yaml_file $input_fail_rams_yaml "<br />
} else {<br />
set input_fail_rams_yaml $pid_failed_yaml<br />
}<br />
set NoRst 0<br />
set failedTag [config_read_yaml "$input_fail_rams_yaml"]<br />
foreach chipletInst [config_map_keys $failedTag] {<br />
set chipletInst_hash [config_map_value $failedTag $chipletInst]<br />
foreach regionInst [config_map_keys $chipletInst_hash] {<br />
set regionInst_hash [config_map_value $chipletInst_hash $regionInst]<br />
foreach domainId [config_map_keys $regionInst_hash] {<br />
set domainId_hash [config_map_value $regionInst_hash $domainId]<br />
foreach bist_engine_id [config_map_keys $domainId_hash] {<br />
if {($bist_engine_id eq "failing_me") || ($bist_engine_id eq "curr_me") } {<br />
continue;<br />
}<br />
set bist_engine_hash [config_map_value $domainId_hash $bist_engine_id ]<br />
foreach ramInst [config_map_keys $bist_engine_hash] {<br />
if {($ramInst == "addr_base_bits") || ($ramInst == "ram_related_fail_tags") || ($ramInst eq "failing_ram_id") || ($ramInst eq "unrepairable_bist_engine") || $ramInst eq ("mbist_id") || ($ramInst eq "failure_in_mbist_top")} {<br />
continue<br />
}<br />
set ramInst_hash [config_map_value $bist_engine_hash $ramInst]<br />
set chipletId [config_map_value $ramInst_hash "chipletId"]<br />
set mbist_id [config_map_value $ramInst_hash "mbist_id"]<br />
set failing_ram_id [config_map_value $ramInst_hash "failing_ram_id"]<br />
set regionId [config_map_value $ramInst_hash "regionId"]<br />
set failMe [config_list [config_map_value $domainId_hash "failing_me"]]<br />
set currMe [config_map_value $domainId_hash "curr_me"]<br />
set failAdr [config_map_value $bist_engine_hash "addr_base_bits"]<br />
puts "INFO_MBIST: DBG STEP_MODE : MBIST Running mbist_step_mode test for following RAM - $i chipletId $chipletId regionId = $regionInst domainId=$domainId bist_engine_id=$bist_engine_id r= $ramInst chipletId = $chipletId m=$failing_ram_id r=$regionId f=$failMe c=$currMe f=$failAdr. Start..."<br />
set args_new [list -prgmConfig $prgmConfig -testConfig $testConfig -chipletId $chipletId -regionId $regionId -domainId $domainId -beId $bist_engine_id -ramId $failing_ram_id -failMe $failMe -currMe $currMe -failAdr $failAdr -NoRst $NoRst -pll_freq_list $pll_freq_list -step_mode_subtest $subtest -use_read_ram $use_read_ram -debug_mode_wr_inh 1 -jtag_broadcast_cluster $jtag_broadcast_cluster -jtag_broadcast_client $jtag_broadcast_client -region_inst $regionInst -domainMaskList $domainMaskList -ist_mode_mbist $ist_mode_mbist]<br />
socf_mbist_step_mode args_new<br />
set NoRst 1<br />
puts "INFO_MBIST: Moving to RTI state "<br />
puts "INFO_MBIST : completed running for RAM# $i r=$ramInst"<br />
jtag_init_to_state $jtagConfig RTI<br />
waitRti $jtagConfig 10<br />
incr i<br />
}<br />
}<br />
}<br />
}<br />
}<br />
}<br />
<br />
}<br />
<br />
puts "INFO_MBIST: Moving to RTI state "<br />
jtag_init_to_state $jtagConfig RTI<br />
waitRti $jtagConfig 10<br />
<br />
}<br />
<br />
<br />
proc simple_ist_test { args } {<br />
set orig_args $args<br />
global testConfig<br />
<br />
set options {<br />
{svop.arg 00 "-svop"}<br />
{prgmConfig.arg "" "-prgmConfig object" "NO_CUSTOMIZE"}<br />
{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}<br />
{cluster_list.arg "" "-list of clusters to be run"}<br />
{fs_group_list.arg "" "-fs region grouping for IST"}<br />
{ListArgs.arg "" "-option helper"}<br />
<br />
}<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
set options "$fullopt $options"<br />
set fullopt $options<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list fullopt -categoryName execution_ctrl -propName chiplet_flow_certified -value 1<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_type" -value "RAM_TEST"<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "dft_mode" -value "MBIST"<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list fullopt -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2 mbist ramctl mbistFS"<br />
return<br />
}<br />
<br />
if { $params(ListArgs) == "" } {<br />
set prgmConfig $params(prgmConfig)<br />
set svop $params(svop)<br />
set testConfig $params(testConfig)<br />
set cluster_list $params(cluster_list)<br />
}<br />
#puts "::IST::JTAGSEQ_START::mbist_cfg::"<br />
#puts "::IST::JTAGSEQ_END::mbist_cfg::"<br />
puts "::IST::JTAGSEQ_START::mbist_trgr::"<br />
<br />
$prgmConfig set_property single_controller_per_shift "force_enable";<br />
if {$cluster_list == ""} {<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
} else { <br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*${cluster}.*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
}<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b1<br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b0<br />
}<br />
}<br />
$prgmConfig set_property single_controller_per_shift "force_disable";<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b1<br />
<br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b0<br />
}<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
if {$cluster_list == ""} {<br />
$prgmConfig set_program_value ".*/MBIST_TOP" ".*start_bits.*" -value 1'b1<br />
$prgmConfig set_program_value ".*/MBIST_TOP" ".*enable_bist_bits.*" -value 1'b1<br />
$prgmConfig program<br />
} else { <br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*MBIST_TOP" ".*start_bits" -value 1'b1<br />
$prgmConfig set_program_value ".*${cluster}.*MBIST_TOP" ".*enable_bist_bits" -value 1'b1<br />
}<br />
$prgmConfig program<br />
}<br />
puts "::IST::JTAGSEQ_END::mbist_trgr::"<br />
puts "::IST::JTAGSEQ_START::mbist_sts::"<br />
<br />
###set expected value<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b1<br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b0<br />
}<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*broadcast_write.*" -value 1'b0<br />
$prgmConfig program -noAutoBroadcast<br />
<br />
$prgmConfig set_property single_controller_per_shift "force_enable";<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b0<br />
$prgmConfig program -noAutoBroadcast<br />
<br />
<br />
if {$cluster_list == ""} {<br />
$prgmConfig set_program_value ".*/MBIST_TOP" ".*start_bits.*" -expected 1'b1<br />
$prgmConfig set_program_value ".*MBIST_TOP" ".*enable_bist_bits" -expected 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
} else { <br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*MBIST_TOP" ".*start_bits" -expected 1'b1<br />
$prgmConfig set_program_value ".*${cluster}.*MBIST_TOP" ".*enable_bist_bits" -expected 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
<br />
}<br />
}<br />
puts "::IST::JTAGSEQ_END::mbist_sts::"<br />
<br />
<br />
###clearing out registers<br />
puts "::IST::JTAGSEQ_START::mbist_clr::"<br />
<br />
$prgmConfig set_property single_controller_per_shift "force_enable";<br />
if {$cluster_list == ""} {<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
} else { <br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*${cluster}.*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
}<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b1<br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b0<br />
}<br />
}<br />
$prgmConfig set_property single_controller_per_shift "force_disable";<br />
<br />
<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*broadcast_write.*" -value 1'b1<br />
$prgmConfig program -noAutoBroadcast<br />
<br />
<br />
if {$cluster_list == ""} {<br />
$prgmConfig set_program_value ".*/MBIST_TOP" ".*" -value 1'b0 -replicate<br />
$prgmConfig program<br />
} else { <br />
foreach cluster $cluster_list {<br />
$prgmConfig set_program_value ".*${cluster}.*/MBIST_TOP" ".*" -value 1'b0 -replicate<br />
<br />
}<br />
$prgmConfig program<br />
}<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*cluster_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*CHIP_BROADCAST_WRITE" ".*broadcast_write.*" -value 1'b0<br />
$prgmConfig program -noAutoBroadcast<br />
<br />
$prgmConfig set_property single_controller_per_shift "force_enable";<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*partition_byp.*" -value 1'b0<br />
$prgmConfig set_program_value ".*/I1500_CHAIN_CTRL" ".*broadcast_write.*" -value 1'b0<br />
$prgmConfig program -noAutoBroadcast<br />
puts "::IST::JTAGSEQ_END::mbist_clr::"<br />
<br />
}<br />
<br />
proc socf_prog_mbist_interface { args_ref } {<br />
upvar $args_ref args<br />
set orig_args $args<br />
global domainsXml<br />
<br />
set options {<br />
{svop.arg 00 "-svop"}<br />
{prgmConfig.arg "" "-prgmConfig object" "NO_CUSTOMIZE"}<br />
{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}<br />
{domainMaskList.arg "[list]" "-list of domains to be masked. Usage : -domainMaskList '{{<1st region_id> {<list of masked domain id>}} ... {<Nth region_id> {<list of masked domain id>}}}'"}<br />
{regionMaskList.arg "[list]" "-list of regions to be masked"}<br />
{region_inst.arg "ALL_REGION" "-targeted region"}<br />
{regionId.arg "-1" "-targeted region"}<br />
{chipletId.arg "-1" "-targeted chiplet"}<br />
{marchElemList.arg "" "-list of march elements"}<br />
{waitCycles.arg 500 "-default waitCycles between writes and reads"}<br />
{bist_on.arg "0" "-keep mbist_en asserted at end of the end"}<br />
{diag_en.arg "3" "-diag_en controls the level of diagnostic detail in prog bist test"}<br />
{ramList.arg "" "-list of rams to be masked while running test"}<br />
{enableFlag.arg "0" "-flag that enables or disables the list of rams to be targeted"}<br />
{waitcycle_override.arg 0 ""}<br />
{pll_freq_list.arg "" "path of pll_freq_list"}<br />
{testConfig.arg "" "testConfig object"}<br />
{use_be_id.arg "1" "-decide the format to be used for ramlist"}<br />
{Ram_UnMask.arg "None" "specify type of ram to be Unmasked"}<br />
{Ram_Mask.arg "None" "specify type of ram to be Masked"}<br />
{Clk_UnMask.arg "None" "specify clock domain which need to be Unmasked"}<br />
{Clk_Mask.arg "None" "specify clock domain which need to be Masked"}<br />
{err_inj_mode.arg "" "Specify mode of selfchk"}<br />
{err_inj_mode.arg "" "Specify mode of selfchk"}<br />
{lpc_prog_on.arg "1" "by default lpc programming will be enabled in chip having lpc inseterd mbist"}<br />
{ctrl_chain_mode.arg "broadcast_mbist_ctrl_chain" "disable broadcast mode in for ctrl chain gv100 onward"}<br />
{host_chain_mode.arg "mbist_hostaccess_chain" "shift local status chain indaisy mode gv100 onward"}<br />
{status_chain_mode.arg "daisy_mbist_status_chain" "shift local control chain shift in in daisy mode gv100 onward"}<br />
{jtag_broadcast_client.arg "1" "use jtag broadcast for clients wherever possible"}<br />
<span style="white-space: pre;"> </span>{jtag_broadcast_cluster.arg "0" "use jtag broadcast for cluster wherever possible"}<br />
<span style="white-space: pre;"> </span>{full_test_final_me_override.arg "0" "used for pickingup ull test FinalMe from full_test_finalme_override key"}<br />
<span style="white-space: pre;"> </span> {ist_mode_mbist.arg "0" "-enable IST mode"}<br />
<span style="white-space: pre;"> </span>{no_ist_seq_markers.arg "0" "-remove sequence markers in ist_mode"}<br />
<span style="white-space: pre;"> </span>{last_seq_mbistwait.arg "0" "-mbist wait will be the last seq"}<br />
<span style="white-space: pre;"> </span>{cfg_access_latency.arg "" "program access latency in Rams which have this feature"}<br />
<span style="white-space: pre;"> </span>{cfg_rdata_pipeline.arg "" "program rd data pipeline"}<br />
<span style="white-space: pre;"> </span>{toggle_rst.arg "0" "toggling mbist_ramacces_rst_ after getting mbist_en high"}<br />
<span style="white-space: pre;"> </span>{dummy_mbist_en.arg "1" "set mbist_en high before setting enable_bist"}<br />
<span style="white-space: pre;"> </span>{debug_mode_wr_inh.arg "0" "toggle debug_mode during debug_mode toggling"}<br />
{cluster_list.arg "" "-list of clusters to be run"}<br />
{shift_addr_bits.arg "" "-value for addr_base programming"}<br />
{hi_addr.arg "" "high address"}<br />
{low_addr.arg "" "low address"}<br />
{hi_me.arg "" "high me"}<br />
{low_me.arg "" "low me"}<br />
{loop_en.arg "0" "loop enable"}<br />
{subtest.arg "" "Type of test"}<br />
{NoRst.arg "0" "-NoRst"}<br />
{clear_mbist_toggle.arg "0" "toggle clear_mbist at the beginning"}<br />
{set_wr_inh.arg "1" "set RAM_CTL wr_inh bit to 1"}<br />
{enable_crc_dump.arg "-1" "option to enable crc dump"}<br />
{enable_crc_cmp.arg "-1" "option to enable crc compare"}<br />
<br />
{ListArgs.arg "" "-option helper"}<br />
}<br />
<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
set options "$fullopt $options"<br />
set fullopt $options<br />
return<br />
} else {<br />
# parray params<br />
# puts "INFO_MBIST: remain args: $args"<br />
}<br />
<br />
if { $params(ListArgs) == "" } {<br />
set prgmConfig $params(prgmConfig)<br />
set jtagConfig [$prgmConfig get_jtag_config]<br />
set testConfig $params(testConfig)<br />
set domainMaskList $params(domainMaskList)<br />
set marchElemList $params(marchElemList)<br />
set regionMaskList $params(regionMaskList)<br />
set region_inst $params(region_inst)<br />
set wait_time $params(waitCycles)<br />
set bist_on $params(bist_on)<br />
set svop $params(svop)<br />
set diag_en $params(diag_en)<br />
set ramList $params(ramList)<br />
set subtest $params(subtest)<br />
set enableFlag $params(enableFlag)<br />
set pll_freq_list $params(pll_freq_list)<br />
set waitcycle_override $params(waitcycle_override)<br />
set testConfig $params(testConfig)<br />
set jtagConfigList [jtag_config_list $jtagConfig]<br />
set chipletId $params(chipletId)<br />
set Ram_UnMask $params(Ram_UnMask)<br />
set Ram_Mask $params(Ram_Mask)<br />
set Clk_UnMask $params(Clk_UnMask)<br />
set Clk_Mask $params(Clk_Mask)<br />
set err_inj_mode $params(err_inj_mode)<br />
set lpc_prog_on $params(lpc_prog_on)<br />
set ctrl_chain_mode $params(ctrl_chain_mode)<br />
set host_chain_mode $params(host_chain_mode)<br />
set status_chain_mode $params(status_chain_mode)<br />
set jtag_broadcast_client $params(jtag_broadcast_client)<br />
<span style="white-space: pre;"> </span>set jtag_broadcast_cluster $params(jtag_broadcast_cluster)<br />
<span style="white-space: pre;"> </span>set full_test_final_me_override $params(full_test_final_me_override)<br />
<span style="white-space: pre;"> </span>set ist_mode_mbist $params(ist_mode_mbist)<br />
<span style="white-space: pre;"> </span> set last_seq_mbistwait $params(last_seq_mbistwait)<br />
<span style="white-space: pre;"> </span> set no_ist_seq_markers $params(no_ist_seq_markers)<br />
<span style="white-space: pre;"> </span>set cfg_access_latency $params(cfg_access_latency)<br />
<span style="white-space: pre;"> </span>set cfg_rdata_pipeline $params(cfg_rdata_pipeline)<br />
<span style="white-space: pre;"> </span>set toggle_rst $params(toggle_rst)<br />
<span style="white-space: pre;"> </span> set dummy_mbist_en $params(dummy_mbist_en)<br />
<span style="white-space: pre;"> </span> set debug_mode_wr_inh $params(debug_mode_wr_inh)<br />
set cluster_list $params(cluster_list)<br />
set hi_addr $params(hi_addr)<br />
set low_addr $params(low_addr)<br />
set hi_me $params(hi_me)<br />
set low_me $params(low_me)<br />
set loop_en $params(loop_en)<br />
set use_be_id $params(use_be_id)<br />
set shift_addr_bits $params(shift_addr_bits)<br />
set clear_mbist_toggle $params(clear_mbist_toggle)<br />
set NoRst $params(NoRst)<br />
set set_wr_inh $params(set_wr_inh)<br />
set enable_crc_dump $params(enable_crc_dump)<br />
set enable_crc_cmp $params(enable_crc_cmp)<br />
<br />
<br />
<br />
if { [config_map_value [config_find $testConfig CURRENT_TEST] design_scope] == "FULLCHIP" } {<br />
if { $chipletId != -1 } {<br />
set chiplet_hier_inst [socf_get_chiplet_inst $jtagConfigList $chipletId]<br />
set configIndex $chipletId<br />
set chiplet_inst [[lindex $jtagConfigList $configIndex] controller_type]<br />
regsub {_clstr$} $chiplet_inst {} chiplet_inst<br />
} else {<br />
set chiplet_inst "FULLCHIP"<br />
set configIndex [chipletInst_to_configIndex $jtagConfigList $chiplet_inst $domainsXml]<br />
}<br />
} else {<br />
set chiplet_inst [config_map_value [config_find $testConfig CURRENT_TEST] design_scope]<br />
set configIndex [chipletInst_to_configIndex $jtagConfigList $chiplet_inst $domainsXml]<br />
}<br />
# set chiplet_inst [config_map_value [config_find $testConfig CURRENT_TEST] design_scope]<br />
# set configIndex [chipletInst_to_configIndex $jtagConfigList $chiplet_inst $domainsXml]<br />
set regionId $params(regionId)<br />
set regionConfig [config_map_value $domainsXml "region_list"]<br />
if { $regionId != -1 } { set region_inst [socf_get_region_inst $domainsXml $chiplet_inst $regionId] }<br />
if {[config_has_key $regionConfig "pseudo_clust_inst" ]} {<br />
set temp [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/chiplet_name] ]<br />
regsub {_cli$} $temp {} temp<br />
set temp [string tolower $temp]<br />
# append temp2 $temp "_cli_inst"<br />
set region_inst $temp<br />
}<br />
<br />
<br />
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]<br />
<br />
set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]<br />
<br />
if {$err_inj_mode == 1} {<br />
set err_inj_type "firstAddr_firstCol"<br />
} elseif {$err_inj_mode == 2} {<br />
set err_inj_type "secondAddr_lastCol"<br />
} elseif {$err_inj_mode == 3} {<br />
set err_inj_type "firstSecondAddr_firstLastCol"<br />
} else {<br />
set err_inj_type ""<br />
}<br />
<br />
socf_prog_bist $prgmConfig $jtagConfigList $configIndex $domainsXml {} $wait_time $marchElemList -chiplet_inst $chiplet_inst -regionMaskList $regionMaskList -subtest $subtest -domainMaskList $domainMaskList -bist_on $bist_on -diag_en $diag_en -oneShift 1 -design_type $design_type -clock_mode $clock_mode -waitcycle_override $waitcycle_override -pll_freq_list $pll_freq_list -testConfig $testConfig -region_inst $region_inst -svop $svop -err_inj_type $err_inj_type -lpc_prog_on $lpc_prog_on -ctrl_chain_mode $ctrl_chain_mode -host_chain_mode $host_chain_mode -status_chain_mode $status_chain_mode -debug_mode_wr_inh $debug_mode_wr_inh -jtag_broadcast_client $jtag_broadcast_client -jtag_broadcast_cluster $jtag_broadcast_cluster -dummy_mbist_en $dummy_mbist_en -toggle_rst $toggle_rst -ist_mode_mbist $ist_mode_mbist -no_ist_seq_markers $no_ist_seq_markers -last_seq_mbistwait $last_seq_mbistwait -cfg_access_latency $cfg_access_latency -cfg_rdata_pipeline $cfg_rdata_pipeline -cluster_list $cluster_list -hi_addr $hi_addr -low_addr $low_addr -hi_me $hi_me -low_me $low_me -loop_en $loop_en -ramList $ramList -use_be_id $use_be_id -shift_addr_bits $shift_addr_bits -clear_mbist_toggle $clear_mbist_toggle -NoRst $NoRst -set_wr_inh $set_wr_inh -enableFlag $enableFlag -enable_crc_dump $enable_crc_dump -enable_crc_cmp $enable_crc_cmp<br />
<br />
}<br />
}<br />
<br />
proc socf_prog_mbist_error_interface { args_ref } {<br />
upvar $args_ref args<br />
set orig_args $args<br />
global domainsXml<br />
<br />
# Default marchElemList is : "{wr11, incr_addr} {rd11, incr_addr}" (same as current baseTest me[37] , me[38])<br />
set options {<br />
{svop.arg 00 "-svop"}<br />
{prgmConfig.arg "" "-prgmConfig object" "NO_CUSTOMIZE"}<br />
{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}<br />
{domainMaskList.arg "[list]" "-list of domains to be masked. Usage : -domainMaskList '{{<1st region_id> {<list of masked domain id>}} ... {<Nth region_id> {<list of masked domain id>}}}'"}<br />
{marchElemList.arg "" "-list of march elements"}<br />
{regionMaskList.arg "[list]" "-list of regions to be masked"}<br />
{waitCycles.arg 500 "-default waitCycles between writes and reads"}<br />
{bist_on.arg "0" "-keep mbist_en asserted at end of the end"}<br />
{diag_en.arg "3" "-diag_en controls the level of diagnostic detail in prog bist test"}<br />
{ramList.arg "[list]" "-list of rams to be masked while running test"}<br />
{enableFlag.arg "0" "-flag that enables or disables the list of rams to be targeted"}<br />
{use_be_id.arg "0" "-decide the format to be used for ramlist"}<br />
{repairFlag.arg "0" "-flag that enables or disables fuse repair of rams"}<br />
{stuckFault.arg "0" "-stuck fault injected"}<br />
{faultAddress.arg "" "-address at which fault is injected"}<br />
{errFile.arg "" "-error list"}<br />
{waitcycle_override.arg "0" "overrides internal calculated wait cycles"}<br />
{pll_freq_list.arg "" "list of pll clock frequencies to calculte wait cycles"}<br />
{blocksXml.arg "" "path of blocksXml file describing memroy subarray details"}<br />
{mask_unrepariable_domain.arg "1" "make it 0 if want to run test on all mbist domains"}<br />
{region_inst.arg "ALL_REGION" "-targeted region"}<br />
{regionId.arg "-1" "-targeted region"}<br />
{err_inj_type.arg "" "ERR INJ Type"}<br />
{chipletId.arg "-1" "-targeted chiplet"}<br />
{loop_en.arg "" "setting to enable loop_mode"}<br />
{subtest.arg "" "Type of test"}<br />
{progbist_type.arg "" "Type of progbist test. eg. Multi"}<br />
{verify_ram_mask.arg "0" "Set 1 to verify ram masking using ram mask list present in err list tn file"}<br />
{verify_hi_low_addr.arg "0" "Set 1 to verify high_addr/lo_addr using the values present in err list tn file"}<br />
{NoRst.arg "0" "-NoRst"}<br />
{lpc_prog_on.arg "1" "by default lpc programming will be enabled in chip having lpc inseterd mbist"}<br />
{ctrl_chain_mode.arg "broadcast_mbist_ctrl_chain" "disable broadcast mode in for ctrl chain gv100 onward"}<br />
{host_chain_mode.arg "mbist_hostaccess_chain" "shift local status chain indaisy mode gv100 onward"}<br />
{status_chain_mode.arg "daisy_mbist_status_chain" "shift local control chain shift in in daisy mode gv100 onward"}<br />
{jtag_broadcast_client.arg "1" "use jtag broadcast for clients wherever possible"}<br />
<span style="white-space: pre;"> </span>{jtag_broadcast_cluster.arg "0" "use jtag broadcast for cluster wherever possible"}<br />
<span style="white-space: pre;"> </span>{full_test_final_me_override.arg "0" "used for pickingup ull test FinalMe from full_test_finalme_override key"}<br />
<span style="white-space: pre;"> </span> {ist_mode_mbist.arg "0" "-enable IST mode"}<br />
<span style="white-space: pre;"> </span>{no_ist_seq_markers.arg "0" "-remove sequence markers in ist_mode"}<br />
<span style="white-space: pre;"> </span>{last_seq_mbistwait.arg "0" "-mbist wait will be the last seq"}<br />
<span style="white-space: pre;"> </span>{cfg_access_latency.arg "" "program access latency in Rams which have this feature"}<br />
<span style="white-space: pre;"> </span>{cfg_rdata_pipeline.arg "" "program rd data pipeline"}<br />
<span style="white-space: pre;"> </span>{toggle_rst.arg "0" "toggling mbist_ramacces_rst_ after getting mbist_en high"}<br />
<span style="white-space: pre;"> </span>{dummy_mbist_en.arg "1" "set mbist_en high before setting enable_bist"}<br />
<span style="white-space: pre;"> </span>{debug_mode_wr_inh.arg "0" "toggle debug_mode during debug_mode toggling"}<br />
{cluster_list.arg "" "-list of clusters to be run"}<br />
<span style="white-space: pre;"> </span>{prgm_ram_ctl.arg "1" "clear RAM_CTL in the begining"}<br />
{ListArgs.arg "" "-option helper"}<br />
}<br />
<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
set options "$fullopt $options"<br />
set fullopt $options<br />
return<br />
} else {<br />
# parray params<br />
# puts "INFO_MBIST: remain args: $args"<br />
}<br />
<br />
if { $params(ListArgs) == "" } {<br />
set prgmConfig $params(prgmConfig)<br />
set jtagConfig [$prgmConfig get_jtag_config]<br />
set jtagConfigList [jtag_config_list $jtagConfig]<br />
set testConfig $params(testConfig)<br />
set domainMaskList $params(domainMaskList)<br />
set marchElemList $params(marchElemList)<br />
set regionMaskList $params(regionMaskList)<br />
set wait_time $params(waitCycles)<br />
set bist_on $params(bist_on)<br />
set diag_en $params(diag_en)<br />
set ramList $params(ramList)<br />
set enableFlag $params(enableFlag)<br />
set use_be_id $params(use_be_id)<br />
set repairFlag $params(repairFlag)<br />
set stuckFault $params(stuckFault)<br />
set svop $params(svop)<br />
set faultAddress $params(faultAddress)<br />
set errFile $params(errFile)<br />
set waitcycle_override $params(waitcycle_override)<br />
set pll_freq_list $params(pll_freq_list)<br />
set blocksXmlFile $params(blocksXml)<br />
set region_inst $params(region_inst)<br />
set chipletId $params(chipletId)<br />
set mask_unrepariable_domain $params(mask_unrepariable_domain)<br />
set err_inj_type $params(err_inj_type)<br />
set subtest $params(subtest)<br />
set progbist_type $params(progbist_type)<br />
set verify_hi_low_addr $params(verify_hi_low_addr)<br />
set verify_ram_mask $params(verify_ram_mask)<br />
set NoRst $params(NoRst)<br />
set lpc_prog_on $params(lpc_prog_on)<br />
set ctrl_chain_mode $params(ctrl_chain_mode)<br />
set host_chain_mode $params(host_chain_mode)<br />
set status_chain_mode $params(status_chain_mode)<br />
set jtag_broadcast_client $params(jtag_broadcast_client)<br />
<span style="white-space: pre;"> </span>set jtag_broadcast_cluster $params(jtag_broadcast_cluster)<br />
<span style="white-space: pre;"> </span>set full_test_final_me_override $params(full_test_final_me_override)<br />
<span style="white-space: pre;"> </span>set ist_mode_mbist $params(ist_mode_mbist)<br />
<span style="white-space: pre;"> </span> set last_seq_mbistwait $params(last_seq_mbistwait)<br />
<span style="white-space: pre;"> </span> set no_ist_seq_markers $params(no_ist_seq_markers)<br />
<span style="white-space: pre;"> </span>set cfg_access_latency $params(cfg_access_latency)<br />
<span style="white-space: pre;"> </span>set cfg_rdata_pipeline $params(cfg_rdata_pipeline)<br />
<span style="white-space: pre;"> </span>set toggle_rst $params(toggle_rst)<br />
<span style="white-space: pre;"> </span> set dummy_mbist_en $params(dummy_mbist_en)<br />
<span style="white-space: pre;"> </span> set debug_mode_wr_inh $params(debug_mode_wr_inh)<br />
set cluster_list $params(cluster_list)<br />
set prgm_ram_ctl $params(prgm_ram_ctl)<br />
if {$params(loop_en) != ""} {<br />
set loop_en $params(loop_en)<br />
} elseif {($progbist_type == "Multi") && ($verify_hi_low_addr == 0) && ($verify_ram_mask == 0)} {<br />
set loop_en 1<br />
} else {<br />
set loop_en 0<br />
}<br />
<br />
<br /></div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-14907943251175316142019-12-06T17:22:00.002-08:002019-12-06T17:22:48.049-08:00atpg api<div dir="ltr" style="text-align: left;" trbidi="on">
package require Vector<br />
package require dict<br />
<br />
### trial test API<br />
namespace eval ::ATE::atpg_init {<br />
<span style="white-space: pre;"> </span>variable version 3.0<br />
<span style="white-space: pre;"> </span>#namespace export atpg_init_ip<br />
}<br />
<br />
proc ::ATE::atpg_init::split_to_hiers {signal} {<br />
<span style="white-space: pre;"> </span>set hier_list [list]<br />
<span style="white-space: pre;"> </span>while {$signal ne ""} {<br />
<span style="white-space: pre;"> </span>if {[regexp {^(\\[\w\/]+ )(.*)} $signal match hier remainder]} {<br />
<span style="white-space: pre;"> </span>lappend hier_list $hier<br />
<span style="white-space: pre;"> </span>} elseif {[regexp {^(\w+)(.*)} $signal match hier remainder]} {<br />
<span style="white-space: pre;"> </span>lappend hier_list $hier<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>set signal [regsub {^[\.\/]} $remainder {}]<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>return $hier_list<br />
}<br />
<br />
proc ::ATE::atpg_init::get_signal_view {type signal} {<br />
<span style="white-space: pre;"> </span>switch $type {<br />
<span style="white-space: pre;"> </span>"verilog" {return [join [split_to_hiers $signal] "/"]}<br />
<span style="white-space: pre;"> </span>"hier_ref" {return [join [split_to_hiers $signal] "."]}<br />
<span style="white-space: pre;"> </span>default<span style="white-space: pre;"> </span>{error "ERROR: use either 'verilog' or 'hier_ref' for 1st argument"}<br />
<span style="white-space: pre;"> </span>}<br />
}<br />
<br />
proc ::ATE::atpg_init::Stuckat { args } {<br />
<span style="white-space: pre;"> </span>global unified_scan_spec<br />
<span style="white-space: pre;"> </span># get user option<br />
<span style="white-space: pre;"> </span>set mainOptions {<br />
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>set listArgsOptions {<br />
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}<br />
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}<br />
<span style="white-space: pre;"> </span>{listArgs.arg "" "-option helper; please add -sub_mode tn arg to define SCAN_TEST sub mode defined in the file $::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml, e.g. XTR_STUCKAT_SERDES etc."}<br />
<span style="white-space: pre;"> </span>{ftm_cap_win_us.arg "5" "<specify the ftm capture window in the unit of tck period>"}<br />
<span style="white-space: pre;"> </span>{legacy_serdes_preshift_count.arg "0" "<specify the number of legacy_serdes_preshift_count values>"}<br />
{xtr_ip_controller_skip_list.arg "" "list of IP which is required to skip IP controller progm during IST"}<br />
{enable_all_atpg_ovr_mode "enable all atpg override mode from atpg_clock_verif_config.yml"}<br />
{atpg_ovr_mode_list.arg "" "set atpg override mode for clock verification,this could cover specical requirement like onehot and edge control"}<br />
}<br />
<br />
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]<br />
<br />
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]<br />
<br />
set tmp_args $::argv<br />
array set cmdline_tmp [::cmdline::getKnownOptions tmp_args {{tam_forceflow "" ""}}]<br />
<br />
puts "INFO: tam_forceflow cmdline: $cmdline_tmp(tam_forceflow)"<br />
<span style="white-space: pre;"> </span>if {![regexp "^\s*$" $mainParams(ListArgs)]} {<br />
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option<br />
<span style="white-space: pre;"> </span>set subtest_option [concat $subtest_option $listArgsOptions]<br />
<span style="white-space: pre;"> </span><br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_features" -value "secSHA2"<br />
puts "INFO: tam_forceflow cmdline: $cmdline_tmp(tam_forceflow)"<br />
if { $cmdline_tmp(tam_forceflow) == "1" } {<br />
puts "INFO: tam forceflow is 1"<br />
<span style="white-space: pre;"> </span> ::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"<br />
<span style="white-space: pre;"> </span> ::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"<br />
} else {<br />
puts "INFO: tam forceflow is 0"<br />
}<br />
<br />
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1<br />
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "XTR_STUCKAT_SERDES"<br />
<span style="white-space: pre;"> </span>set temp_bak_args $::argv<br />
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]<br />
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)<br />
<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>## put STUCKAT_CBBGROUP to XTR_STUCKAT_SERDES<br />
<span style="white-space: pre;"> </span>if {$sub_mode_in eq "XTR_STUCKAT_CBBGROUP"} {<br />
<span style="white-space: pre;"> </span>set sub_mode_in XTR_STUCKAT_SERDES<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"<br />
<span style="white-space: pre;"> </span>return 1<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig ftm_cap_win_us legacy_serdes_preshift_count xtr_ip_controller_skip_list " {<br />
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)<br />
<span style="white-space: pre;"> </span>}<br />
<br />
## Johnson add an if condition wrapper here for MATHS ATE.<br />
set test_name [config_map_value [config_find $testConfig CURRENT_TEST] name]<br />
if {[regexp maths_ate $test_name]} {<br />
# when test name is maths_ate, bypass all clusters through JET, so that no programming will happen since now<br />
puts "MATHS ATE INFO: the test is $test_name, bypass all programming!"<br />
$prgmConfig set_controller_property {.*} mode bypass<br />
}<br />
<br />
puts "INFO: wait [expr [$prgmConfig get_tap_frequency]*${ftm_cap_win_us}/1000] cycles for $ftm_cap_win_us us ftm_cap_win"<br />
set ftm_cap_win [expr [$prgmConfig get_tap_frequency]*${ftm_cap_win_us}/1000]<br />
<br />
set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]<br />
<span style="white-space: pre;"> </span>puts "INFO: sub_modes: $sub_modes"<br />
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {<br />
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."<br />
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>}<br />
if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] tam_forceflow]} {<br />
set tam_forceflow_flag 1<br />
} else {<br />
set tam_forceflow_flag 0<br />
}<br />
<br />
if { $tam_forceflow_flag == 1} {<br />
::ATE::atpg_init::tam_forceflow -prgmConfig $prgmConfig -testConfig $testConfig<br />
}<br />
<br />
##### begin: clear sdp x for atpg/ate sim #####<br />
if { $tam_forceflow_flag == 0 } {<br />
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*Select_SDPBypassCtrl.*} -value 1<br />
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*SDPBypass.*} -value 1<br />
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*XTRControl_ShiftStagger.*} -value 1<br />
<br />
set tmax_init [config_find $testConfig "USER_CUSTOM_ARGS/tmax_init"]<br />
if { $tmax_init == 1} {<br />
$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 1<br />
} else {<br />
$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 0<br />
}<br />
<br />
$prgmConfig program<br />
}<br />
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]<br />
foreach sub_mode $sub_modes {<br />
if {$design_type == "flat" && [regexp "XTR" $sub_modes]} {<br />
#2. toggle serdes_4f, wait few cycles, stop serdes4f<br />
if {[$prgmConfig is_vec_mode]} {<br />
puts "for atpg vec sim,toggle serdes_4f to clear pipeline X "<br />
set current_cycle [ $prgmConfig get_current_cycle ]<br />
puts "Toggle serdes4f before dft mode programming at $current_cycle"<br />
set die_obj [config_find $testConfig CURRENT_TEST/die_obj]<br />
set serdes4f_clk_pin [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=serdes4f_clk)}]<br />
foreach pin $serdes4f_clk_pin {<br />
$prgmConfig set_enable_value $pin 1<br />
$prgmConfig set_pin_value $pin 1<br />
}<br />
set serdes_div_ratio [config_find $testConfig USER_CUSTOM_ARGS/serdes_div_ratio]<br />
set serdes4fToggleCycle [expr $serdes_div_ratio * 20]<br />
$prgmConfig wait_cycles $serdes4fToggleCycle<br />
set curr_cyc [$prgmConfig get_current_cycle]<br />
set tck_mult [$prgmConfig get_tck_multiple]<br />
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"<br />
if {[ expr $curr_cyc % $tck_mult ] != 0} {<br />
set wait_cyc [ expr $tck_mult - [ expr $curr_cyc % $tck_mult ]]<br />
$prgmConfig wait_cycles $wait_cyc<br />
set curr_cyc [$prgmConfig get_current_cycle]<br />
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"<br />
}<br />
set current_cycle [ $prgmConfig get_current_cycle ]<br />
puts "Stop serdes4f before dft mode programming at $current_cycle"<br />
foreach pin $serdes4f_clk_pin {<br />
$prgmConfig set_enable_value $pin 1<br />
$prgmConfig set_pin_value $pin 0<br />
}<br />
}<br />
if {[$prgmConfig is_sim_mode]} {<br />
puts "for atpg ate sim, toggle serdes_4f to clear pipeline X"<br />
$prgmConfig jtag_force "TB_clk_freerunning" 1<br />
$prgmConfig waitRti [expr int(63 * 500 / ([$prgmConfig get_tap_frequency]/1000))] ;# we need 63/8 = 8 pulses to flush X inside 8 sdps, we have serdes divider, div is 8<br />
$prgmConfig jtag_force "TB_clk_freerunning" 0<br />
}<br />
}<br />
$prgmConfig program<br />
}<br />
##### end: clear sdp x #####<br />
<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"<br />
<span style="white-space: pre;"> </span>if { [file exists $dft_modes_config_file]} {<br />
<span style="white-space: pre;"> </span>puts "INFO: standard dft mode programming yml file found. Reading..."<br />
<span style="white-space: pre;"> </span>set dft_modeConfig [config_read_yaml $dft_modes_config_file]<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."<br />
<span style="white-space: pre;"> </span>exit 1<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span><br />
# inject x on wbr<br />
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] wbr_injectX] } {<br />
$prgmConfig jtag_force "tb.enable_force_for_wbr" 1<br />
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1<br />
}<br />
<span style="white-space: pre;"> </span>set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]<br />
<span style="white-space: pre;"> </span>set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]];<br />
<br />
set rsync [config_find $testConfig USER_CUSTOM_ARGS/resync_serdes]<br />
set rst_from_sf [config_find $testConfig USER_CUSTOM_ARGS/reset_from_sf]<br />
set fs_top_up [config_find $testConfig USER_CUSTOM_ARGS/fs_top_up_init]<br />
if { $rst_from_sf eq "" } { set rst_from_sf 0 }<br />
if {$rsync eq ""} {set rsync 0}<br />
if {$fs_top_up eq ""} {set fs_top_up 0}<br />
<br />
<span style="white-space: pre;"> </span># DFT mode programming<br />
<span style="white-space: pre;"> </span>if {[info procs ::ATE::AteFlowUtils::getTestApiProperty] == "::ATE::AteFlowUtils::getTestApiProperty"} {<br />
<span style="white-space: pre;"> </span>set testapi_test_type [::ATE::AteFlowUtils::getTestApiProperty -testConfig $testConfig -categoryName execution_ctrl -propName test_type]<br />
<span style="white-space: pre;"> </span>set testapi_dft_mode [::ATE::AteFlowUtils::getTestApiProperty -testConfig $testConfig -categoryName execution_ctrl -propName dft_mode]<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>set testapi_test_type ""<br />
<span style="white-space: pre;"> </span>set testapi_dft_mode ""<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>if { $testapi_dft_mode ne "" } {<br />
if { ($rsync || $rst_from_sf || $fs_top_up) != 1 } {<br />
<span style="white-space: pre;"> </span> puts "INFO: set dft program mode to \"$testapi_test_type/$testapi_dft_mode\""<br />
<span style="white-space: pre;"> </span> #commenting $prgmConfig set_program_mode "$testapi_test_type/$testapi_dft_mode"<br />
if { $tam_forceflow_flag == 0 } {<br />
<span style="white-space: pre;"> </span> ::ATE::AteFlowUtils::set_default_dft_mode -testConfig $testConfig -prgmConfig $prgmConfig<br />
}<br />
}<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>puts "WARNING: testapi_dft_mode is required for scan test"<br />
<span style="white-space: pre;"> </span>}<br />
<br />
<span style="white-space: pre;"> </span>## fs_validation<br />
set fs_validation [config_find $testConfig USER_CUSTOM_ARGS/fs_validation]<br />
if {$fs_validation ne ""} {<br />
puts "INFO: fs_validation is being set on FS region $fs_validation"<br />
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*DFT_FS_CTRL} {.*DFT_FS_CTRL} 0<br />
#Below force programming added by subbu after referring to tu102 to see the tags in INIT for the register<br />
$prgmConfig program -force<br />
}<br />
<br />
## check if rsync needs to be called ##<br />
<span style="white-space: pre;"> </span>set rsync [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] resync_serdes]<br />
<span style="white-space: pre;"> </span>set fstate [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] resync_fstate]<br />
<span style="white-space: pre;"> </span>if { $rsync == 1 } {<br />
<span style="white-space: pre;"> </span>puts "Calling resync serdes"<br />
<span style="white-space: pre;"> </span>if { ! [file exists $fstate] } { puts "ERR: provide fstate yml file: $fstate" }<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::resync_serdes -prgmConfig $prgmConfig -testConfig $testConfig -fstate $fstate<br />
<span style="white-space: pre;"> </span>return 1<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span><br />
## check if reset_from_sf needs to be called ##<br />
set rst_from_sf [config_find $testConfig USER_CUSTOM_ARGS/reset_from_sf]<br />
set fstate [config_find $testConfig USER_CUSTOM_ARGS/rsf_fstate]<br />
if { $rst_from_sf == 1 } {<br />
puts "Calling reset_from_sf"<br />
if { ! [file exists $fstate] } {<br />
puts "ERR: provide fstate yml file: $fstate"<br />
}<br />
<br />
::ATE::atpg_init::reset_from_sf -prgmConfig $prgmConfig -testConfig $testConfig -fstate $fstate<br />
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="<br />
<br />
return 1<br />
<br />
}<br />
<br />
## check if fs_top_up needs to be called ##<br />
set fs_top_up [config_find $testConfig USER_CUSTOM_ARGS/fs_top_up_init]<br />
if { $fs_top_up == 1 } {<br />
puts "Calling fs_top_up"<br />
::ATE::atpg_init::fs_top_up -prgmConfig $prgmConfig -testConfig $testConfig<br />
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="<br />
<br />
return 1<br />
}<br />
<br />
<span style="white-space: pre;"> </span>foreach sub_mode $sub_modes {<br />
<span style="white-space: pre;"> </span>if {[regexp "STUCKAT_CBBGROUP" $sub_mode]} {<br />
<span style="white-space: pre;"> </span>set sub_mode XTR_STUCKAT_SERDES<br />
<span style="white-space: pre;"> </span>} elseif {[regexp "FTM_CBBGROUP" $sub_mode]} {<br />
<span style="white-space: pre;"> </span>set sub_mode XTR_FTM_SERDES<br />
}<br />
<span style="white-space: pre;"> </span>if {[regexp "STUCKAT" $sub_mode]} {<br />
<span style="white-space: pre;"> </span>puts "INFO: Validating sub mode $sub_mode..."<br />
<span style="white-space: pre;"> </span>if { [config_find $dft_modeConfig "SCAN_TEST/${sub_mode}"] != ""} {<br />
<span style="white-space: pre;"> </span>puts "INFO: $sub_mode is valid sub_mode"<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>puts stderr "ERROR: sub_mode $sub_mode is invalid. Please follow $dft_modes_config_file for the list of sub_mode's allowed"<br />
<span style="white-space: pre;"> </span>exit 1<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>} elseif {[regexp "FTM" $sub_mode]} {<br />
<span style="white-space: pre;"> </span>puts stderr "ERROR: STUCKAT subtest is run with FTM sub_mode. Please rerun the test with FTM subtest."<br />
<span style="white-space: pre;"> </span>exit 1<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>puts stderr "WARNING: sub mode $sub_mode is not SCAN_TEST sub mode"<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span># Please specify the test API specific programming here<br />
<span style="white-space: pre;"> </span>set tmax_init [config_find $testConfig "USER_CUSTOM_ARGS/tmax_init"]<br />
<span style="white-space: pre;"> </span>if { $tmax_init == 1} {<br />
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 1<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 0<br />
<span style="white-space: pre;"> </span>}<br />
<br />
if {[regexp "XTR" $sub_mode]} {<br />
if {[file exists $unified_scan_spec]} {<br />
set accessConfig [config_read_yaml $unified_scan_spec]<br />
set pipe_ports [ config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/INPUTS]]<br />
set pipe_port_0 [ lindex $pipe_ports 0]<br />
set input_pipe_count [ config_find $accessConfig SCAN_IOS/XTREME_X4/IO_PIPELINES/$pipe_port_0/INPUT_PIPE_CNT]<br />
set output_pipe_count [ config_find $accessConfig SCAN_IOS/XTREME_X4/IO_PIPELINES/$pipe_port_0/OUTPUT_PIPE_CNT]<br />
set xtr_link_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanin_pipes"]<br />
set xtr_link_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanout_pipes"]<br />
if {$xtr_link_fast_scanin_pipes ne "" } {<br />
if {$xtr_link_fast_scanin_pipes != $input_pipe_count} {<br />
tn_msg_issue_ATE_102 "xtr_link_fast_scanin_pipes argument $xtr_link_fast_scanin_pipes is not equal to INPUT_PIPE_CNT from scanIo.yml $input_pipe_count"<br />
#exit;<br />
}<br />
}<br />
if {$xtr_link_fast_scanout_pipes ne "" } {<br />
if {$xtr_link_fast_scanout_pipes != $output_pipe_count} {<br />
tn_msg_issue_ATE_102 "xtr_link_fast_scanout_pipes argument $xtr_link_fast_scanout_pipes is not equal to OUTPUT_PIPE_CNT from scanIo.yml $output_pipe_count"<br />
#exit;<br />
}<br />
}<br />
}<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::serdes_div_reset -prgmConfig $prgmConfig -testConfig $testConfig<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]<br />
<span style="white-space: pre;"> </span>set scan_en_ext_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]<br />
<br />
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {<br />
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]<br />
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]<br />
<span style="white-space: pre;"> </span>puts "ufi list is $ufi_list"<br />
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]<br />
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]<br />
if {$ufi_pin ne ""} {<br />
<span style="white-space: pre;"> </span> set ufi_list [ list $ufi_pin ]<br />
}<br />
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]<br />
<span style="white-space: pre;"> </span>set serdes4f_list [ list $serdes_4f_clk_pin]<br />
<br />
<span style="white-space: pre;"> </span>}<br />
<br />
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]<br />
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"<br />
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {<br />
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."<br />
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {<br />
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {<br />
<span style="white-space: pre;"> </span>switch $common_mode {<br />
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }<br />
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }<br />
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }<br />
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }<br />
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>}<br />
<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: Make UFI 0 and serdes fast clock 0 scan_en_ext 0 at cycle $current_cycle"<br />
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger] } {<br />
puts "blueg, can't find ufi pin for now, comment out for clock sims for now"<br />
} else {<br />
if {[info exists ufi_list]} {<br />
foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }<br />
}<br />
}<br />
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }<br />
if {[$prgmConfig is_sim_mode]} {<br />
# ATE simulation: turn off serdes_4f_clk<br />
$prgmConfig jtag_force "TB_clk_freerunning" 0<br />
}<br />
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0<br />
<span style="white-space: pre;"> </span>$prgmConfig program<br />
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 20<br />
<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: Asserting scan enable at cycle $current_cycle"<br />
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 1<br />
<span style="white-space: pre;"> </span>$prgmConfig program<br />
<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>set wait_cyc [ expr 120 * $SerdesRatio ]<br />
<span style="white-space: pre;"> </span>puts "INFO: Wait for 120 * serdes ratio cycles at cycle $current_cycle"<br />
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc<br />
<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: De-asserting scan enable at cycle $current_cycle"<br />
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0<br />
<span style="white-space: pre;"> </span>$prgmConfig program<br />
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 20<br />
<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig<br />
<span style="white-space: pre;"> </span>}<br />
<br />
<span style="white-space: pre;"> </span>if {[regexp "XTR" $sub_mode]} {<br />
<span style="white-space: pre;"> </span># bug 1634381.<br />
<span style="white-space: pre;"> </span># irrespective of ECK or ICK mode, this bit should be 1 for XTR<br />
<span style="white-space: pre;"> </span># for ECK should be 0 and ICK should be 1 in TAM Serdes<br />
<span style="white-space: pre;"> </span># Because of this conflict cannot be done in standard programing yml<br />
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*TamControl_SerdesClockMode" -value 1<br />
<span style="white-space: pre;"> </span>$prgmConfig program<br />
<br />
# Set DFT_FS_CTRL bits to 1 (the reset value) and add a JRD shift. This is needed to do FSCheck by flipping tags on tester<br />
if {$design_type eq "flat"} {<br />
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*DFT_FS_CTRL} {.*DFT_FS_CTRL} 1<br />
$prgmConfig program -force<br />
}<br />
<br />
#set test_trigger [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger]<br />
<span style="white-space: pre;"> </span>set xtr_ufi_selftest [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ufi_selftest"]<br />
<span style="white-space: pre;"> </span>if { $xtr_ufi_selftest } {<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_selftest -prgmConfig $prgmConfig -testConfig $testConfig<br />
<span style="white-space: pre;"> </span>}<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_reset_sequence -prgmConfig $prgmConfig -testConfig $testConfig -xtr_ip_controller_skip_list $xtr_ip_controller_skip_list<br />
#<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_reset_sequence $prgmConfig $testConfig $xtr_ip_controller_skip_list $chiplet_id_bit $chiplet_string $xtr_scan_in $status_link_width $ist_lbist_6chain<br />
<span style="white-space: pre;"> </span>#::ATE::atpg_init::serdes_div_reset -prgmConfig $prgmConfig -testConfig $testConfig<br />
<span style="white-space: pre;"> </span>} else {<br />
<span style="white-space: pre;"> </span>::ATE::atpg_init::tam_init_seq -prgmConfig $prgmConfig -testConfig $testConfig<br />
<span style="white-space: pre;"> </span>}<br />
<br />
if { $tam_forceflow_flag == 0 } {<br />
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/CLK_CTL" ".*tmc2clk_block_x_on_clockchain_in_setup.*" -value 0<br />
<span style="white-space: pre;"> </span>$prgmConfig program<br />
if {[$prgmConfig list_registers .*TEST_MASTER_CTRL] != ""} {<br />
$prgmConfig set_program_value {.*CHIPLET_LOGIC} {.*} -value 1'b0 -replicate<br />
$prgmConfig program -force<br />
}<br />
}<br />
<br />
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]<br />
<span style="white-space: pre;"> </span>puts "INFO: Waiting for twice 1500 pipelines $num_1500_pipelines"<br />
<span style="white-space: pre;"> </span><br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"<br />
<br />
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines<br />
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"<br />
<br />
# make scan enable as Z to avoid contention on scan enable & scan enable observe port<br />
if {[regexp "XTR" $sub_mode]} {<br />
if { [file exists $unified_scan_spec]} {<br />
set accessConfig [config_read_yaml $unified_scan_spec]<br />
set scan_en_pin [lindex [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SCAN_EN_PORTS]] 0]<br />
puts "INFO: scan_en pin is $scan_en_pin"<br />
} else {<br />
<span style="white-space: pre;"> </span> set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]<br />
set scan_en_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]<br />
puts "INFO: scan_en pin is $scan_en_pin"<br />
}<br />
#regsub -all {[\{\}]} $scan_en_pin {} scan_en_pin<br />
$prgmConfig set_pin_value $scan_en_pin Z<br />
}<br />
<br />
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti<br />
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {<br />
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5<br />
<span style="white-space: pre;"> </span>}<br />
<br />
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]<br />
<span style="white-space: pre;"> </span>puts "INFO: After additional 100 waitRti $current_cycle"<br />
<br />
<span style="white-space: pre;"> </span>puts "INFO: End of atpg_init of Stuckat"<br />
<br />
puts "Garyk, start dump"<br />
$prgmConfig jtag_force "TB_enable_fsdb_dump" 1<br />
<br />
<span style="white-space: pre;"> </span>if {[$prgmConfig is_sim_mode]} {<br />
<span style="white-space: pre;"> </span>puts "sim mode for ATE test"<br />
puts "INFO: SLCG/BLCG is controlled by scan flops, but our monitor are after them, need below prgm to force them open, this is simulation only"<br />
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_PCCM_CTL} {.*tmc2clk_disable_clock_gating.*} 1<br />
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_PCCM_CTL} {.*tmc2clk_ctsroot_disable_clk_gating.*} 1<br />
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_CTL} {.*tmc2clk_ctsroot_disable_clk_gating.*} 1<br />
$prgmConfig set_program_value {.*/ATPG_CTL} {.*tmc2slcg_disable_clock_gating.*} -value 1'b1<br />
$prgmConfig program<br />
<br />
::ATE::atpg_init::clock_stuckat $prgmConfig $testConfig $ftm_cap_win $legacy_serdes_preshift_count<br />
<span style="white-space: pre;"> </span>}<br />
}<br />
<br />
proc ::ATE::atpg_init::over_mode_extra_control {prgmConfig testConfig atpg_clock_verif_config atpg_ovr_mode} {<br />
if {$atpg_ovr_mode == "DEFAULT"} {<br />
set atpg_ovr_val [config_new_map]<br />
} else {<br />
set atpg_ovr_val [config_find $atpg_clock_verif_config Override_mode/$atpg_ovr_mode]<br />
}<br />
#Force<br />
if {[config_find $atpg_ovr_val Force] != ""} {<br />
foreach force_point [config_map_keys [config_find $atpg_ovr_val Force]] {<br />
set width [config_find $atpg_ovr_val Force/${force_point}/width]<br />
set value [config_find $atpg_ovr_val Force/${force_point}/value]<br />
puts "INFO: Now force $width wide chain $force_point to $value"<br />
::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $force_point $width $value<br />
}<br />
$prgmConfig waitRti 1<br />
}<br />
<div>
<div>
#Program</div>
<div>
if {[config_find $atpg_ovr_val Program] != ""} {</div>
<div>
foreach jtagreg [config_map_keys [config_find $atpg_ovr_val Program]] {</div>
<div>
foreach filed [config_map_keys [config_find $atpg_ovr_val Program/${jtagreg}]] {</div>
<div>
set value [config_find $atpg_ovr_val Program/${jtagreg}/${filed}]</div>
<div>
puts "INFO: Now program $jtagreg $filed to $value"</div>
<div>
$prgmConfig set_program_value ".*${jtagreg}" ".*${filed}.*" -value ${value}</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
$prgmConfig program</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::clock_monitor_setting {prgmConfig testConfig ftmorsaClockConfig atpg_clock_verif_config atpg_ovr_mode {IsFirstRun 1}} {</div>
<div>
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
set clockProgrammingConfig [::ATE::clock_init_tasks::get_clock_programming_config $testConfig]</div>
<div>
set sub_clock_mode [config_find $atpg_clock_verif_config TMP/sub_clock_mode]</div>
<div>
set sub_mode [config_find $atpg_clock_verif_config TMP/sub_mode]</div>
<div>
set clock_atpg_mode [config_find $atpg_clock_verif_config TMP/clock_atpg_mode]</div>
<div>
set num_core_shift_pulses [config_find $atpg_clock_verif_config TMP/num_core_shift_pulses]</div>
<div>
set serdes_slow_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/serdes_slow_clk_freq_mhz]</div>
<div>
set test_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/test_clk_freq_mhz]</div>
<div>
set serdes_div_ratio [config_find $atpg_clock_verif_config TMP/serdes_div_ratio]</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
if {$atpg_ovr_mode == "DEFAULT"} {</div>
<div>
set atpg_ovr_val [config_new_map]</div>
<div>
} else {</div>
<div>
set atpg_ovr_val [config_find $atpg_clock_verif_config Override_mode/$atpg_ovr_mode]</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "INFO: Under override mode $atpg_ovr_mode, monitor override config is:"</div>
<div>
puts " [config_write_yaml $atpg_ovr_val]"</div>
<div>
<br /></div>
<div>
set monitor_ovr [config_find $atpg_ovr_val Monitor]</div>
<div>
if {$monitor_ovr != ""} {</div>
<div>
set monitor_ovr_keyword_config_list [config_list $monitor_ovr]</div>
<div>
} else {</div>
<div>
set monitor_ovr_keyword_config_list ""</div>
<div>
}</div>
<div>
<br /></div>
<div>
set Associated_cap_stagger_mode [config_find $atpg_ovr_val Associated_cap_stagger_mode]</div>
<div>
</div>
<div>
#Get from ftm/s@ yml</div>
<div>
set portListConfig [config_find $ftmorsaClockConfig PortList]</div>
<div>
set staggerConfig [config_find $ftmorsaClockConfig StaggerConfig]</div>
<div>
foreach tmp [config_list $portListConfig] {</div>
<div>
if [regexp $sub_clock_mode [config_map_keys $tmp]] {</div>
<div>
set portConfig $tmp</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Define "clock_atpg_mode" nickname that describes clock behavior for given ATPG $sub_mode</div>
<div>
<span style="white-space: pre;"> </span>set modeConfig [config_find $portConfig $sub_clock_mode/mode_${sub_mode}]</div>
<div>
<span style="white-space: pre;"> </span>set fieldsConfig [config_find $modeConfig FIELDS]</div>
<div>
<span style="white-space: pre;"> </span>set entries [config_list [config_find $modeConfig ENTRIES]]</div>
<div>
<span style="white-space: pre;"> </span># Decode field indices</div>
<div>
<span style="white-space: pre;"> </span>set fieldsList [split $fieldsConfig "\t"]</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < [llength $fieldsList]} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>set FieldIndex([lindex $fieldsList $i]) $i</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
foreach entry $entries {</div>
<div>
puts "INFO: Under $sub_clock_mode/mode_${sub_mode} ,override mode $atpg_ovr_mode ,start config of entry $entry"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#Get default info</div>
<div>
set elementList [split $entry "\t"]</div>
<div>
<span style="white-space: pre;"> </span>set name [lindex $elementList $FieldIndex(NAME)]</div>
<div>
set outputFreq [lindex $elementList $FieldIndex(OUTPUT_FREQ)]</div>
<div>
set shift_outputFreq ""</div>
<div>
<span style="white-space: pre;"> </span>set sh_staggerGroup [lindex $elementList $FieldIndex(SH_STAGGER_GROUP)]</div>
<div>
<span style="white-space: pre;"> </span>set cap_staggerGroup [lindex $elementList $FieldIndex(CAP_STAGGER_GROUP)]</div>
<div>
<span style="white-space: pre;"> </span>set sh_staggerMode [lindex $elementList $FieldIndex(STAGGER_MODE)]</div>
<div>
<span style="white-space: pre;"> </span>set cap_staggerMode [lindex $elementList $FieldIndex(CAP_STAGGER_MODE)]</div>
<div>
set sh_staggerEdges [config_find $staggerConfig StaggerModes/$sub_mode/$sh_staggerMode/shift_mode_relation]</div>
<div>
set cap_staggerEdges [config_find $staggerConfig StaggerModes/$sub_mode/$cap_staggerMode/capture_mode_relation]</div>
<div>
<span style="white-space: pre;"> </span>set num_core_shift_pulses [config_find $atpg_clock_verif_config TMP/num_core_shift_pulses]</div>
<div>
set pulseNum [lindex $elementList $FieldIndex(PULSE_NUM)]</div>
<div>
unset -nocomplain Capture_duty</div>
<div>
puts "INFO: From Monitor yml, outputFreq is $outputFreq , sh_staggerGroup is $sh_staggerGroup , sh_staggerMode is $sh_staggerMode ,\</div>
<div>
cap_staggerGroup is $cap_staggerGroup , cap_staggerMode is $cap_staggerMode , pulseNum is $pulseNum"</div>
<div>
</div>
<div>
#Shift stagger relation</div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
BYPASS_MODE_ISTCLOCK.XTR|STA_BYPASS_MODE_SERDESCLOCK.XTR {</div>
<div>
puts "INFO: Enable shift stagger check under $sub_clock_mode.$sub_mode by default"</div>
<div>
set staggerRelation 0</div>
<div>
}</div>
<div>
nafll_Ftm.XTR|FTM_BYPASS_MODE_SERDESCLOCK.XTR {</div>
<div>
puts "INFO: Enable shift stagger check under $sub_clock_mode.$sub_mode by default"</div>
<div>
set staggerRelation 0</div>
<div>
}</div>
<div>
BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
puts "INFO: Disable shift stagger check under $sub_clock_mode.$sub_mode by default"</div>
<div>
set staggerRelation 3</div>
<div>
}</div>
<div>
nafll_Ftm.TAM|FTM_BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
puts "INFO: Disable shift stagger check under $sub_clock_mode.$sub_mode by default"</div>
<div>
set staggerRelation 3</div>
<div>
}</div>
<div>
}</div>
<div>
</div>
<div>
#Capture stagger relation</div>
<div>
set cap_staggerMode [lindex $elementList $FieldIndex(CAP_STAGGER_MODE)]</div>
<div>
if {[config_find $staggerConfig StaggerModes/${Associated_cap_stagger_mode}/${cap_staggerMode}/capture_mode_relation] != ""} {</div>
<div>
puts "INFO: Enable capture stagger check for all monitors when Associated_cap_stagger_mode is set"</div>
<div>
set cap_staggerEdges [config_find $staggerConfig StaggerModes/${Associated_cap_stagger_mode}/${cap_staggerMode}/capture_mode_relation]</div>
<div>
set cap_staggerRelation 0</div>
<div>
} else {</div>
<div>
puts "INFO: Disable capture stagger check by default"</div>
<div>
set cap_staggerRelation 3</div>
<div>
set cap_staggerEdges 0</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
set sh_staggerRefClk [config_find $staggerConfig StaggerGroups/ShStaggerGroups/[lindex $elementList $FieldIndex(SH_STAGGER_GROUP)]/sh_ref_clock]</div>
<div>
<span style="white-space: pre;"> </span>set cap_staggerRefClk [config_find $staggerConfig StaggerGroups/CapStaggerGroups/[lindex $elementList $FieldIndex(CAP_STAGGER_GROUP)]/cap_ref_clock]</div>
<div>
</div>
<div>
regsub -all {[^a-zA-Z0-9_]+} $name {_} monitorName</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {[^a-zA-Z0-9_]+} $sh_staggerRefClk {_} sh_staggerRefClkName</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {[^a-zA-Z0-9_]+} $cap_staggerRefClk {_} cap_staggerRefClkName</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#Override by monitor_ovr</div>
<div>
puts "INFO: Current entry is \"$entry\""</div>
<div>
set matched_keyword ""</div>
<div>
foreach monitor_ovr_keyword_config $monitor_ovr_keyword_config_list {</div>
<div>
set monitor_ovr_keyword [config_map_keys $monitor_ovr_keyword_config]</div>
<div>
puts "INFO: Current monitor override keyword is $monitor_ovr_keyword"</div>
<div>
if {[regexp $monitor_ovr_keyword $entry]} {</div>
<div>
puts "INFO: Entry is matching keyword: $monitor_ovr_keyword"</div>
<div>
set matched_keyword "$matched_keyword $monitor_ovr_keyword"</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Pulse_number] != ""} {</div>
<div>
set pulseNum [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Pulse_number]</div>
<div>
puts "INFO: Pulse number is overriden to $pulseNum"</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Frequency] != ""} {</div>
<div>
set outputFreq [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Frequency]</div>
<div>
puts "INFO: outputFreq is overriden to $outputFreq"</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_Frequency] != ""} {</div>
<div>
set shift_outputFreq [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_Frequency]</div>
<div>
puts "INFO: shift_outputFreq is overriden to $shift_outputFreq"</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Capture_stagger_edge] != ""} {</div>
<div>
set cap_staggerEdges [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Capture_stagger_edge]</div>
<div>
puts "INFO: cap_staggerEdges is overriden to $cap_staggerEdges, capture edge check is forced to be enabled"</div>
<div>
set cap_staggerRelation 0</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_stagger_edge] != ""} {</div>
<div>
set sh_staggerEdges [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_stagger_edge]</div>
<div>
puts "INFO: sh_staggerEdges is overriden to $sh_staggerEdges, shift edge check is forced to be enabled"</div>
<div>
set staggerRelation 0</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_Pulse_number] != ""} {</div>
<div>
set num_core_shift_pulses [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Shift_Pulse_number]</div>
<div>
puts "INFO: Shift pulse number is overriden to $num_core_shift_pulses"</div>
<div>
}</div>
<div>
if {[config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Capture_duty] != ""} {</div>
<div>
set Capture_duty [config_find $monitor_ovr_keyword_config ${monitor_ovr_keyword}/Capture_duty]</div>
<div>
puts "INFO: Capture duty is overriden to $Capture_duty"</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
if {[llength $matched_keyword] > "1"} {</div>
<div>
#tn_msg_issue_ATE_102 "Under override mode $atpg_ovr_mode ,entry $entry is matched by more than 1 keyword: $matched_keyword"</div>
<div>
puts "ERROR: Under override mode $atpg_ovr_mode ,entry $entry is matched by more than 1 keyword: $matched_keyword"</div>
<div>
}</div>
<div>
</div>
<div>
#1: configure shift/capture pulse number (per monitor inst)</div>
<div>
puts "INFO: Capture pulse Number is $pulseNum"</div>
<div>
if {$IsFirstRun == 1 | $clock_atpg_mode eq "TAM"} {</div>
<div>
puts "INFO: Shift pulse Number is $num_core_shift_pulses"</div>
<div>
} else {</div>
<div>
puts "INFO: Shift pulse Number is [expr $num_core_shift_pulses + 1]"</div>
<div>
}</div>
<div>
<br /></div>
<div>
binary scan [binary format I1 $pulseNum] B* binaryPulseNum</div>
<div>
$prgmConfig jtag_force "TB_ftm_${monitorName}_pulse_num\[9:0\]" $binaryPulseNum</div>
<div>
#increase the expected shift number by 1 when we loop test</div>
<div>
if {$IsFirstRun == 1 | $clock_atpg_mode eq "TAM"} {</div>
<div>
binary scan [binary format I1 $num_core_shift_pulses] B* binary_num_core_shift_pulses</div>
<div>
} else {</div>
<div>
binary scan [binary format I1 [expr $num_core_shift_pulses + 1]] B* binary_num_core_shift_pulses</div>
<div>
}</div>
<div>
$prgmConfig jtag_force "TB_ftm_shift_cnt_overwrite_${monitorName}\[9:0\]" $binary_num_core_shift_pulses</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#2: configure ftm target shift and capture frequency period (per monitor inst)</div>
<div>
set outputFreq_d $outputFreq</div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
nafll_Ftm.XTR|FTM_BYPASS_MODE_SERDESCLOCK.XTR {</div>
<div>
if {$shift_outputFreq == ""} {set shift_outputFreq $serdes_slow_clk_freq_mhz}</div>
<div>
if {$shift_outputFreq == "0"} {</div>
<div>
set targetShiftPeriod_ps 0</div>
<div>
} else {</div>
<div>
set targetShiftPeriod_ps [expr int(1000000.0 / $shift_outputFreq * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
}</div>
<div>
if {![regexp {^\d+(\.\d+)?} $outputFreq]} {</div>
<div>
if {[catch {::ATE::clock_init_tasks::get_frequency $clockProgrammingConfig $outputFreq_d} errMsg]} {</div>
<div>
error "ERROR: Your ACV program config file '$::env(ATE_TOT)/jtag/clock_programming_config_${design_type}.yml' did not result in a valid output frequency for '$outputFreq'. Please assign fixed frequency value in your clock monitor config file if you want to skip ACV. Error message: $errMsg"</div>
<div>
} else {</div>
<div>
set outputFreq [::ATE::clock_init_tasks::get_frequency $clockProgrammingConfig $outputFreq_d]</div>
<div>
}</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $outputFreq * 256)]</div>
<div>
set iMaxFreqTolerance 20</div>
<div>
set iTolerancePercentage 0.01</div>
<div>
if {[expr $outputFreq*$iTolerancePercentage] > $iMaxFreqTolerance} {</div>
<div>
set iFreqTolerance $iMaxFreqTolerance</div>
<div>
} else {</div>
<div>
set iFreqTolerance [expr $outputFreq*$iTolerancePercentage]</div>
<div>
}</div>
<div>
set targetCLKTolerance [expr int(1000000/($outputFreq - $iFreqTolerance)-1000000/$outputFreq)]</div>
<div>
} else {</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $outputFreq * 256)]</div>
<div>
set targetCLKTolerance 0</div>
<div>
}</div>
<div>
}</div>
<div>
BYPASS_MODE_ISTCLOCK.XTR|STA_BYPASS_MODE_SERDESCLOCK.XTR {</div>
<div>
if {$shift_outputFreq == ""} {set shift_outputFreq $serdes_slow_clk_freq_mhz}</div>
<div>
if {$shift_outputFreq == "0"} {</div>
<div>
set targetShiftPeriod_ps 0</div>
<div>
} else {</div>
<div>
set targetShiftPeriod_ps [expr int(1000000.0 / $shift_outputFreq * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
}</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $serdes_slow_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
set targetCLKTolerance 0</div>
<div>
}</div>
<div>
nafll_Ftm.TAM|FTM_BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
if {$shift_outputFreq == ""} {set shift_outputFreq $test_clk_freq_mhz}</div>
<div>
if {$shift_outputFreq == "0"} {</div>
<div>
set targetShiftPeriod_ps 0</div>
<div>
} else {</div>
<div>
set targetShiftPeriod_ps [expr int(1000000.0 / $shift_outputFreq * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
}</div>
<div>
if {![regexp {^\d+(\.\d+)?} $outputFreq]} {</div>
<div>
if {[catch {::ATE::clock_init_tasks::get_frequency $clockProgrammingConfig $outputFreq_d} errMsg]} {</div>
<div>
error "ERROR: Your ACV program config file '$::env(ATE_TOT)/jtag/clock_programming_config_${design_type}.yml' did not result in a valid output frequency for '$outputFreq'. Please assign fixed frequency value in your clock monitor config file if you want to skip ACV. Error message: $errMsg"</div>
<div>
} else {</div>
<div>
set outputFreq [::ATE::clock_init_tasks::get_frequency $clockProgrammingConfig $outputFreq_d]</div>
<div>
}</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $outputFreq * 256)]</div>
<div>
set iMaxFreqTolerance 20</div>
<div>
set iTolerancePercentage 0.01</div>
<div>
if {[expr $outputFreq*$iTolerancePercentage] > $iMaxFreqTolerance} {</div>
<div>
set iFreqTolerance $iMaxFreqTolerance</div>
<div>
} else {</div>
<div>
set iFreqTolerance [expr $outputFreq*$iTolerancePercentage]</div>
<div>
}</div>
<div>
set targetCLKTolerance [expr int(1000000/($outputFreq - $iFreqTolerance)-1000000/$outputFreq)]</div>
<div>
} else {</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $outputFreq * 256)]</div>
<div>
set targetCLKTolerance 0</div>
<div>
}</div>
<div>
}</div>
<div>
BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
if {$shift_outputFreq == ""} {set shift_outputFreq $test_clk_freq_mhz}</div>
<div>
if {$shift_outputFreq == "0"} {</div>
<div>
set targetShiftPeriod_ps 0</div>
<div>
} else {</div>
<div>
set targetShiftPeriod_ps [expr int(1000000.0 / $shift_outputFreq * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
}</div>
<div>
set targetCapturePeriod_ps [expr int(1000000.0 / $test_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
set targetCLKTolerance 0</div>
<div>
}</div>
<div>
}</div>
<div>
</div>
<div>
puts "INFO: Capture output Freq is $outputFreq (outputFreq_d is $outputFreq_d)"</div>
<div>
puts "INFO: Capture target period is $targetCapturePeriod_ps"</div>
<div>
puts "INFO: Capture target period tolerance is $targetCLKTolerance"</div>
<div>
puts "INFO: Shift target Freq is $shift_outputFreq"</div>
<div>
puts "INFO: Shift target period is $targetShiftPeriod_ps"</div>
<div>
<br /></div>
<div>
binary scan [binary format I1 $targetCapturePeriod_ps] B* binary_targetCapturePeriod_ps</div>
<div>
$prgmConfig jtag_force "TB_dynamic_CM_target_period_${monitorName}\[37:0\]" $binary_targetCapturePeriod_ps</div>
<div>
binary scan [binary format I1 $targetShiftPeriod_ps] B* binary_targetShiftPeriod_ps</div>
<div>
$prgmConfig jtag_force "TB_ftm_shift_period_overwrite_${monitorName}\[37:0\]" $binary_targetShiftPeriod_ps</div>
<div>
binary scan [binary format I1 $targetCLKTolerance] B* binary_targetCLKTolerance</div>
<div>
$prgmConfig jtag_force "TB_dynamic_CM_period_tolerance_${monitorName}\[37:0\]" $binary_targetCLKTolerance </div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#3: configure capture stagger relation</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span> 00: ftmclk lag behind stagger_ref_clk</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span> 01: ftmclk lead stagger_ref_clk</div>
<div>
<span style="white-space: pre;"> </span># 11: no check</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span> 11: reserved</div>
<div>
puts "INFO: Capture stagger relation is $cap_staggerRelation"</div>
<div>
for {set i 0} {$i < 2} {incr i} { $prgmConfig jtag_force "TB_CAP_STAGGER_RELATION_${cap_staggerRefClkName}_$i" [expr ($cap_staggerRelation >> $i) & 1]}</div>
<div>
</div>
<div>
#4: configure capture stagger value</div>
<div>
puts "INFO: Capture stagger edges is $cap_staggerEdges"</div>
<div>
binary scan [binary format I1 $cap_staggerEdges] B* binary_cap_staggerEdges</div>
<div>
$prgmConfig jtag_force "TB_CAP_STAGGER_VAL_${monitorName}\[16:0\]" $binary_cap_staggerEdges</div>
<div>
<br /></div>
<div>
#5: configure shift stagger relation</div>
<div>
<span style="white-space: pre;"> </span># ultra -> 00: ftmclk lags behind stagger_ref_clk</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span>01: ftmclk leads stagger_ref_clk</div>
<div>
<span style="white-space: pre;"> </span># legacy -> 11: no check</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span>11: reserved</div>
<div>
puts "INFO: Shift stagger relation is $staggerRelation"</div>
<div>
for {set i 0} {$i < 2} {incr i} { $prgmConfig jtag_force "TB_SH_STAGGER_RELATION_${sh_staggerRefClkName}_$i" [expr ($staggerRelation >> $i) & 1]}</div>
<div>
</div>
<div>
#6: configure shift stagger value</div>
<div>
puts "INFO: Shift stagger edges is $sh_staggerEdges"</div>
<div>
binary scan [binary format I1 $sh_staggerEdges] B* binary_sh_staggerEdges</div>
<div>
$prgmConfig jtag_force "TB_SH_STAGGER_VAL_${monitorName}\[16:0\]" $binary_sh_staggerEdges</div>
<div>
<br /></div>
<div>
#6: configure capture duty value</div>
<div>
if {[info exists Capture_duty]} {</div>
<div>
puts "INFO: Capture duty is ${Capture_duty}%"</div>
<div>
binary scan [binary format I1 $Capture_duty] B* binary_capture_duty</div>
<div>
$prgmConfig jtag_force "TB_ftm_duty_capture_${monitorName}\[9:0\]" $binary_capture_duty</div>
<div>
} else {</div>
<div>
puts "INFO: Capture duty is 50% (default)"</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::clock_stuckat_test_sequence {prgmConfig testConfig ftmorsaClockConfig atpg_clock_verif_config atpg_ovr_mode} {</div>
<div>
set sub_clock_mode [config_find $atpg_clock_verif_config TMP/sub_clock_mode]</div>
<div>
set sub_mode [config_find $atpg_clock_verif_config TMP/sub_mode]</div>
<div>
set clock_atpg_mode [config_find $atpg_clock_verif_config TMP/clock_atpg_mode]</div>
<div>
set num_core_shift_pulses [config_find $atpg_clock_verif_config TMP/num_core_shift_pulses]</div>
<div>
set serdes_slow_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/serdes_slow_clk_freq_mhz]</div>
<div>
set test_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/test_clk_freq_mhz]</div>
<div>
set scan_en_pin [config_find $atpg_clock_verif_config TMP/scan_en_pin]</div>
<div>
set SerdesClkList [config_list [config_find $atpg_clock_verif_config TMP/SerdesClkList]]</div>
<div>
set TestClkList [config_list [config_find $atpg_clock_verif_config TMP/TestClkList]]</div>
<div>
set tap_freq_mhz [config_find $atpg_clock_verif_config TMP/tap_freq_mhz]</div>
<div>
set enable_ip_list [config_list [config_find $atpg_clock_verif_config TMP/enable_ip_list]]</div>
<div>
set ftm_cap_win [config_find $atpg_clock_verif_config TMP/ftm_cap_win]</div>
<div>
<br /></div>
<div>
set jtagConfig [$prgmConfig get_jtag_config]</div>
<div>
<br /></div>
<div>
#Get from ftm/s@ yml</div>
<div>
set portListConfig [config_find $ftmorsaClockConfig PortList]</div>
<div>
set staggerConfig [config_find $ftmorsaClockConfig StaggerConfig]</div>
<div>
foreach tmp [config_list $portListConfig] {</div>
<div>
if [regexp $sub_clock_mode [config_map_keys $tmp]] {</div>
<div>
set portConfig $tmp</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Define "clock_atpg_mode" nickname that describes clock behavior for given ATPG $sub_mode</div>
<div>
<span style="white-space: pre;"> </span>set modeConfig [config_find $portConfig $sub_clock_mode/mode_${sub_mode}]</div>
<div>
<span style="white-space: pre;"> </span>set fieldsConfig [config_find $modeConfig FIELDS]</div>
<div>
<span style="white-space: pre;"> </span>set entries [config_list [config_find $modeConfig ENTRIES]]</div>
<div>
<span style="white-space: pre;"> </span># Decode field indices</div>
<div>
<span style="white-space: pre;"> </span>set fieldsList [split $fieldsConfig "\t"]</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < [llength $fieldsList]} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>set FieldIndex([lindex $fieldsList $i]) $i</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
if {$clock_atpg_mode eq "TAM"} {</div>
<div>
#Force onebit occ at first, because the pulse_gen would not wait for this</div>
<div>
set name [config_find $atpg_clock_verif_config Default/One_bit_OCC/name]</div>
<div>
set width [config_find $atpg_clock_verif_config Default/One_bit_OCC/width]</div>
<div>
set value 1</div>
<div>
puts "INFO: Now force $width wide chain $name to $value"</div>
<div>
::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $name $width $value</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#Step a, assert scan_en & de-assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span># 4.2: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span># Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(scan_en_delay) [expr int(ceil(3.0 * $tap_freq_mhz / 5))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(scan_en_delay) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span> + $waitCycles(scan_en_delay) tck cycles (scan en delay)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $totalWaitCycles</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.3: de-assert scan_en, assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span># 4.4: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span># 4.5: Need an extra scan_en posedge to check final results. Just need a posedge, no need to wait for complete shift+capture</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
if {$clock_atpg_mode eq "XTR" && [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] concurrent] } {</div>
<div>
puts "enable concurrent run for xtr"</div>
<div>
set loop_cnt 0</div>
<div>
#1. initialize scan_en</div>
<div>
$prgmConfig set_enable_value $scan_en_pin 1</div>
<div>
$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
</div>
<div>
foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
puts "the test order is $chiplet ->"</div>
<div>
}</div>
<div>
foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
</div>
<div>
#2. force/release monitors</div>
<div>
foreach entry $entries {</div>
<div>
set elementList [split $entry "\t"]</div>
<div>
set name [lindex $elementList $FieldIndex(NAME)]</div>
<div>
regsub -all {[^a-zA-Z0-9_]+} $name {_} monitorName</div>
<div>
regexp .*_(.*) $chiplet match includeName</div>
<div>
set includeNameSuffix "tb_chip_${includeName}_"</div>
<div>
if {[regexp $includeNameSuffix $monitorName]} {</div>
<div>
puts "enable monitor checker $monitorName in chiplet $chiplet"</div>
<div>
$prgmConfig jtag_release "tb.FTM_${monitorName}_XTR_STUCKAT_SERDES_CHECKER.scan_en"</div>
<div>
} else {</div>
<div>
puts "Disable monitor checker $monitorName"</div>
<div>
$prgmConfig jtag_force "tb.FTM_${monitorName}_XTR_STUCKAT_SERDES_CHECKER.scan_en" 0</div>
<div>
}</div>
<div>
}</div>
<div>
$prgmConfig waitRti 1</div>
<div>
</div>
<div>
set exclude_ip_list [lreplace $enable_ip_list [lsearch $enable_ip_list $chiplet] [lsearch $enable_ip_list $chiplet]]</div>
<div>
</div>
<div>
# update expected capture pulses cnt</div>
<div>
#3. shift phase, set target chiplet scan_en=1; set X for non-target chiplet </div>
<div>
puts "set idu scan_en input to 1 to start shift"</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
$prgmConfig jtag_force "tb.xtr_concurrent_inst.concurrent_se_${chiplet}" 0</div>
<div>
$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
foreach exclude_chiplet $exclude_ip_list {</div>
<div>
if {[regexp {_t0} $exclude_chiplet]} { continue }</div>
<div>
puts "force $exclude_chiplet scan_en to an slow clock"</div>
<div>
$prgmConfig jtag_force "tb.xtr_concurrent_inst.concurrent_se_${exclude_chiplet}" 1</div>
<div>
}</div>
<div>
</div>
<div>
$prgmConfig waitRti 1</div>
<div>
</div>
<div>
#4. occ load</div>
<div>
puts "program occ after scan_en 1 , need wait 10 serdes1f cycle for pipeline"</div>
<div>
puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
set value 1; # occ_clkchain==1 for occ_num_of_testclks=1</div>
<div>
set width [config_find $atpg_clock_verif_config Default/Local_OCC/width]</div>
<div>
set name [config_find $atpg_clock_verif_config Default/Local_OCC/name]</div>
<div>
<br /></div>
<div>
lappend OccNameList ${name}_${chiplet}</div>
<div>
</div>
<div>
foreach OccName $OccNameList {</div>
<div>
puts "INFO: Now force $width wide chain $OccName to $value"</div>
<div>
::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $OccName $width $value</div>
<div>
} </div>
<div>
</div>
<div>
$prgmConfig waitRti 10</div>
<div>
#5. wait until core shift done</div>
<div>
# Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
set waitCycles(core_shift) [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(core_shift)]</div>
<div>
puts "Waiting for total of \n\</div>
<div>
\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
-------------------------------------------- \n\</div>
<div>
$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig waitRti $totalWaitCycles</div>
<div>
$prgmConfig waitRti [expr int(20 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
</div>
<div>
#6. set scan_en=0, initiate capture state transition in IDU</div>
<div>
puts "set idu scan_en input to 0 to start capture"</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
$prgmConfig waitRti 1</div>
<div>
</div>
<div>
#7. wait until capture phase done</div>
<div>
set waitCycles(capture) [expr int(ceil($ftm_cap_win))]</div>
<div>
puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
$prgmConfig waitRti $waitCycles(capture)</div>
<div>
</div>
<div>
$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
</div>
<div>
#8. update expected capture pulses cnt(10 puslese for first loop, 11 for other loops)</div>
<div>
foreach entry $entries {</div>
<div>
set elementList [split $entry "\t"]</div>
<div>
set name [lindex $elementList $FieldIndex(NAME)]</div>
<div>
regsub -all {[^a-zA-Z0-9_]+} $name {_} monitorName</div>
<div>
binary scan [binary format I1 [expr $num_core_shift_pulses + 1]] B* binary_num_core_shift_pulses</div>
<div>
$prgmConfig jtag_force "TB_ftm_shift_cnt_overwrite_${monitorName}\[9:0\]" $binary_num_core_shift_pulses</div>
<div>
}</div>
<div>
</div>
<div>
##9. toggle exclude ip scan_en once at the end to clear X </div>
<div>
foreach exclude_chiplet $exclude_ip_list {</div>
<div>
if {[regexp {_t0} $exclude_chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${exclude_chiplet}" 0</div>
<div>
$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${exclude_chiplet}" 1</div>
<div>
$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
puts "release $exclude_chiplet scan_en"</div>
<div>
#$prgmConfig jtag_release "tb.tb_idu_se_input_${exclude_chiplet}"</div>
<div>
$prgmConfig jtag_force "tb.xtr_concurrent_inst.concurrent_se_${exclude_chiplet}" 0</div>
<div>
}</div>
<div>
puts "need wait 10 serdes1f cycle for pipeline"</div>
<div>
puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
</div>
<div>
#10. Need an extra scan_en posedge to check final results. Just need a posedge, no need to wait for complete shift+capture</div>
<div>
puts "set idu scan_en input to 1 to start monitor check"</div>
<div>
#$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
puts "need wait 10 serdes1f cycle for pipeline"</div>
<div>
puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
incr loop_cnt</div>
<div>
}</div>
<div>
</div>
<div>
} elseif {$clock_atpg_mode eq "XTR" } {</div>
<div>
<span style="white-space: pre;"> </span>#for IP run, always use -enable_ip arg to specify the IP under-test</div>
<div>
<span style="white-space: pre;"> </span># 4.1 de-assert scan_en at the beginning</div>
<div>
<span style="white-space: pre;"> </span>puts "set all ip IDU scan_en to 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_enable_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
# 4.2: set scan_en=1, initiate core shift state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 1 to start shift"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
# 4.3 occ load</div>
<div>
<span style="white-space: pre;"> </span>puts "program occ after scan_en 1 , need wait 10 serdes1f cycle for pipeline"</div>
<div>
<span style="white-space: pre;"> </span>puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
set value 1;<span style="white-space: pre;"> </span># occ_clkchain==1 for occ_num_of_testclks=1</div>
<div>
<span style="white-space: pre;"> </span>set width [config_find $atpg_clock_verif_config Default/Local_OCC/width]</div>
<div>
set name [config_find $atpg_clock_verif_config Default/Local_OCC/name]</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
lappend OccNameList ${name}_${chiplet}</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>foreach OccName $OccNameList {</div>
<div>
puts "INFO: Now force $width wide chain $OccName to $value"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $OccName $width $value</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 10</div>
<div>
<span style="white-space: pre;"> </span># 4.4: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span># Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $totalWaitCycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(20 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.5: set scan_en=0, initiate capture state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 0 to start capture"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.6: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
# 4.7: Need an extra scan_en posedge to check final results. Just need a posedge, no need to wait for complete shift+capture</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 1 to start monitor check"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
}</div>
<div>
<br /></div>
<div>
#Check result</div>
<div>
set jtagConfig [$prgmConfig get_jtag_config]</div>
<div>
if {[jtag_output_type $jtagConfig] == "VerilogXface"} {</div>
<div>
set clock_mon_active TB_clock_mon_active</div>
<div>
set_pin_value $jtagConfig $clock_mon_active 0</div>
<div>
waitRti $jtagConfig 1</div>
<div>
puts "Checking clock monitors for any errors..."</div>
<div>
set_pin_value $jtagConfig TB_clock_mon_error 0</div>
<div>
waitRti $jtagConfig 1</div>
<div>
$prgmConfig set_pin_value TB_clock_mon_error X</div>
<div>
$prgmConfig waitRti 5</div>
<div>
}</div>
<div>
<br /></div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::clock_stuckat { prgmConfig testConfig ftm_cap_win legacy_serdes_preshift_count} {</div>
<div>
<span style="white-space: pre;"> </span>puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]============== @cycle [$prgmConfig get_current_cycle] ENTER procedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set chip_name [$prgmConfig name]</div>
<div>
<span style="white-space: pre;"> </span>set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
<span style="white-space: pre;"> </span>set design_scope [config_map_value [config_find $testConfig CURRENT_TEST] design_scope]</div>
<div>
<span style="white-space: pre;"> </span>set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]</div>
<div>
<span style="white-space: pre;"> </span>set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]]; # this is a list,but we only allow one element</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]; # this is a list, but we only allow one element</div>
<div>
<span style="white-space: pre;"> </span>set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_pin [::pkgtool::get_vlog_pins_with_test_function $die_obj {TESTCTL0}]</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {[\{\}]} $scan_en_pin {} scan_en_pin</div>
<div>
<span style="white-space: pre;"> </span>set SerdesClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=serdes4f_clk)}]</div>
<div>
<span style="white-space: pre;"> </span>set TestClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=.*)}]</div>
<div>
set clockProgrammingConfig [::ATE::clock_init_tasks::get_clock_programming_config $testConfig]</div>
<div>
set onehot_mode [config_find $testConfig USER_CUSTOM_ARGS/onehot_mode]</div>
<div>
set edge_mode [config_find $testConfig USER_CUSTOM_ARGS/edge_mode]</div>
<div>
set enable_all_atpg_ovr_mode [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/API_ARGUMENTS/enable_all_atpg_ovr_mode] </div>
<div>
set atpg_ovr_mode_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/API_ARGUMENTS/atpg_ovr_mode_list]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: chip_name is $chip_name "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: design_type is $design_type "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: design_scope is $design_scope "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: clock_mode is $clock_mode "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_clock_mode is $sub_clock_mode "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode is $sub_mode "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: relative_path_local2jtag is $relative_path_local2jtag "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: scan_en_pin is $scan_en_pin "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: SerdesClkList is $SerdesClkList "</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: TestClkList is $TestClkList "</div>
<div>
puts "INFO: onehot_mode is $onehot_mode"</div>
<div>
puts "INFO: edge_mode is $edge_mode"</div>
<div>
puts "INFO: enable_all_atpg_ovr_mode is $enable_all_atpg_ovr_mode"</div>
<div>
puts "INFO: atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># dealing with test specific argument</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) -1</div>
<div>
<span style="white-space: pre;"> </span>if {[catch {config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]}]} {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(mode) [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>if {[config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]] == "VECTOR"} {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(mode) [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR:exception of getting 'CURRENT_TEST/CURRENT_SUBTEST/sub_modes' from the test configure object"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $listargsParams(mode) != "" } {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) $listargsParams(mode)</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) -1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $listargsParams(debug_mode) == -1 } {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR: Please specify sub_mode for clock_ftm test by '-sub_mode x'"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>} elseif { [llength $listargsParams(debug_mode)] > 1 } {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR: '-sub_mode' only support one entry now"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "Running single sub_mode: $listargsParams(debug_mode)"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#Get clock_atpg_mode</div>
<div>
switch -regexp $sub_mode {</div>
<div>
<span style="white-space: pre;"> </span>TAM|UPHY|PEX|FABRIC { set clock_atpg_mode "TAM" }</div>
<div>
<span style="white-space: pre;"> </span>XTR|shift_only { set clock_atpg_mode "XTR" }</div>
<div>
<span style="white-space: pre;"> </span>default { puts "ERROR: only XTR_STUCKAT_SERDES, LEGACY_INTEST_STUCKAT_SERDES, and LEGACY_EXTEST_STUCKAT_SERDES supported!"; exit 1; }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_clock_mode.clock_atpg_mode $sub_clock_mode.$clock_atpg_mode"</div>
<div>
</div>
<div>
#Get serdes div ratio from common_mode</div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top]]</div>
<div>
puts "INFO: common modes: $common_modes"</div>
<div>
if {[llength $common_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
foreach common_mode $common_modes {</div>
<div>
if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
switch $common_mode {</div>
<div>
SERDES_RATIO_S4 { set serdes_div_ratio 4 }</div>
<div>
SERDES_RATIO_S6 { set serdes_div_ratio 6 }</div>
<div>
SERDES_RATIO_S8 { set serdes_div_ratio 8 }</div>
<div>
SERDES_RATIO_S12 { set serdes_div_ratio 12 }</div>
<div>
SERDES_RATIO_S24 { set serdes_div_ratio 24 }</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#Get JTAG_TCK test_clock serdes_fast_clk serdes_slow_clk frequency</div>
<div>
<span style="white-space: pre;"> </span>set tap_freq_khz [$prgmConfig get_tap_frequency]</div>
<div>
<span style="white-space: pre;"> </span>set tap_freq_mhz [expr $tap_freq_khz * 0.001]</div>
<div>
#<span style="white-space: pre;"> </span>set test_clk_freq_mhz 90.009</div>
<div>
<span style="white-space: pre;"> </span>set test_clk_freq_mhz 62.5</div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 203.998</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>default {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 500.0</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#Get default ip instances when fullchip simulation </div>
<div>
set IpList [string tolower [::ATE::AteFlowUtils::get_ip_type -prgmConfig $prgmConfig -all]]</div>
<div>
foreach IpType $IpList {</div>
<div>
set IpType NV_${IpType}</div>
<div>
puts "INFO: IpType = $IpType"</div>
<div>
if {[regexp {dram|hbm|other2} $IpType]} {</div>
<div>
puts "INFO: Skip $IpType"</div>
<div>
continue</div>
<div>
}</div>
<div>
lappend default_ip_list $IpType</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip] ne ""} {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list $default_ip_list</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: enable_ip_list is $enable_ip_list"</div>
<div>
#Set shift pulses number</div>
<div>
set num_core_shift_pulses 10</div>
<div>
<br /></div>
<div>
</div>
<div>
######1. BEGIN test-bench setting #####</div>
<div>
#Get serdes/test clock pad prefix for force</div>
<div>
foreach SerdesClk $SerdesClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $SerdesClk {\1__\2__} SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>lappend NewSerdesClkList $SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $TestClk {\1__\2__} TestClk</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span> lappend NewTestClkList $TestClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>STA_BYPASS_MODE_SERDESCLOCK.XTR|FTM_BYPASS_MODE_SERDESCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_trigger" 1 ;</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_clk_freerunning" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_serdesclk_trigger" 1 ;</div>
<div>
<span style="white-space: pre;"> </span>}<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_ftm_debug_port_test_sequence_on" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "testen_dummy" 1 ;# testen_dummy=1 to unblock wide/fake_scan_en, which will be used in new_FTM_pulse_gen_rz module.</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 0 ;# choose testclk as source shift clock for tb ftm monitor </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_testclk_ctrl_running_62p5" 1 ;# choose 62.5 free run testclk</div>
<div>
<span style="white-space: pre;"> </span>### BEGIN create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>set shift_pulse_num $num_core_shift_pulses</div>
<div>
<span style="white-space: pre;"> </span>set capture_pulse_num 1</div>
<div>
#<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
#<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $TestClk 1</div>
<div>
#<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $NewTestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[lsearch $NewSerdesClkList $TestClk] != -1} { ;# set test-bench serdes clock shift/capture to 0 in testclk based mode</div>
<div>
<span style="white-space: pre;"> </span>binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>### END create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>##### END test-bench setting #####</div>
<div>
</div>
<div>
##### 3.BEGIN configure IDU transactor #####</div>
<div>
puts "serdes_div_ratio = $serdes_div_ratio"</div>
<div>
puts "num_core_shift_pulses = $num_core_shift_pulses"</div>
<div>
puts "legacy_serdes_preshift_count = $legacy_serdes_preshift_count"</div>
<div>
for {set i 0} {$i <= 15} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span># 3.0: configure number of core shift length, in terms of serdes_fast_clk cycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb_xtr_num_core_shift_pulses_$i" [expr ([expr $num_core_shift_pulses + 1] >> $i) & 1] ;# add 1 pulse due to idu design: the output pulse from idu is shift_pulse - 1</div>
<div>
<span style="white-space: pre;"> </span># 3.1: configure the number of ftm_cap_win</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb_ftm_cap_win_$i" [expr ($ftm_cap_win >> $i) & 1]</div>
<div>
}</div>
<div>
$prgmConfig waitRti 200</div>
<div>
##### END configure IDU transactor #####</div>
<div>
</div>
<div>
</div>
<div>
#Load atpg_clock_verif_config</div>
<div>
if {[file exist $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml]} {</div>
<div>
puts "INFO: Load atpg_clock_verif_config from $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml"</div>
<div>
set atpg_clock_verif_config [config_read_yaml $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml]</div>
<div>
} else {</div>
<div>
puts "INFO: Could not find $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml"</div>
<div>
set atpg_clock_verif_config [config_new_map]</div>
<div>
config_set $atpg_clock_verif_config Default/Local_OCC/name FTM_occ_control_chain_local</div>
<div>
config_set $atpg_clock_verif_config Default/Local_OCC/width 8</div>
<div>
config_set $atpg_clock_verif_config Default/NO_local_OCC/name FTM_occ_control_chain_non_local</div>
<div>
config_set $atpg_clock_verif_config Default/NO_local_OCC/width 8</div>
<div>
config_set $atpg_clock_verif_config Default/One_bit_OCC/name enable_legacy_serdes_en</div>
<div>
config_set $atpg_clock_verif_config Default/One_bit_OCC/width 1</div>
<div>
}</div>
<div>
</div>
<div>
config_set $atpg_clock_verif_config TMP/sub_clock_mode [lindex $sub_clock_mode 0]</div>
<div>
config_set $atpg_clock_verif_config TMP/sub_mode $sub_mode</div>
<div>
config_set $atpg_clock_verif_config TMP/clock_atpg_mode $clock_atpg_mode</div>
<div>
config_set $atpg_clock_verif_config TMP/num_core_shift_pulses $num_core_shift_pulses</div>
<div>
config_set $atpg_clock_verif_config TMP/serdes_slow_clk_freq_mhz $serdes_slow_clk_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/test_clk_freq_mhz $test_clk_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/scan_en_pin $scan_en_pin</div>
<div>
config_set $atpg_clock_verif_config TMP/SerdesClkList $SerdesClkList</div>
<div>
config_set $atpg_clock_verif_config TMP/TestClkList $TestClkList</div>
<div>
config_set $atpg_clock_verif_config TMP/tap_freq_mhz $tap_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/enable_ip_list $enable_ip_list</div>
<div>
config_set $atpg_clock_verif_config TMP/ftm_cap_win $ftm_cap_win</div>
<div>
config_set $atpg_clock_verif_config TMP/serdes_div_ratio $serdes_div_ratio</div>
<div>
<br /></div>
<div>
#Get atpg override mode</div>
<div>
if {$enable_all_atpg_ovr_mode == "1"} {</div>
<div>
if {[config_find $atpg_clock_verif_config Override_mode] == ""} {</div>
<div>
puts "WARNING: With -enable_all_atpg_ovr_mode, but as atpg_clock_verif_config does not have Override_mode, atpg_ovr_mode_list is only DEFAULT"</div>
<div>
set atpg_ovr_mode_list [list DEFAULT]</div>
<div>
} else {</div>
<div>
set atpg_ovr_mode_list [config_map_keys [config_find $atpg_clock_verif_config Override_mode]]</div>
<div>
puts "INFO: With -enable_all_atpg_ovr_mode, atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
}</div>
<div>
} elseif {$atpg_ovr_mode_list != ""} {</div>
<div>
set atpg_ovr_mode_list_tmp ""</div>
<div>
foreach tmp $atpg_ovr_mode_list {</div>
<div>
if {[lsearch [config_map_keys [config_find $atpg_clock_verif_config Override_mode]] $tmp] == "-1"} {</div>
<div>
tn_msg_issue_ATE_102 "ERROR: $tmp that set by -atpg_ovr_mode_list does not exist in atpg_clock_verif_config.yml, Skipping"</div>
<div>
} else {</div>
<div>
set atpg_ovr_mode_list_tmp [concat $atpg_ovr_mode_list_tmp $tmp]</div>
<div>
}</div>
<div>
}</div>
<div>
set atpg_ovr_mode_list $atpg_ovr_mode_list_tmp</div>
<div>
puts "INFO: With -atpg_ovr_mode_list , atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
<br /></div>
<div>
} else {</div>
<div>
puts "INFO: Without -enable_all_atpg_ovr_mode and -atpg_ovr_mode_list, atpg_ovr_mode_list is only DEFAULT"</div>
<div>
set atpg_ovr_mode_list [list DEFAULT]</div>
<div>
}</div>
<div>
</div>
<div>
</div>
<div>
#Get from ftm/s@ yml</div>
<div>
puts "INFO: relative_path_local2jtag ${relative_path_local2jtag}sa_clock_config_${design_type}.yml"</div>
<div>
set ftmorsaClockConfig [config_read_yaml "${relative_path_local2jtag}sa_clock_config_${design_type}.yml"]</div>
<div>
<br /></div>
<div>
#Start the test</div>
<div>
foreach atpg_ovr_mode $atpg_ovr_mode_list {</div>
<div>
puts "INFO: \$sub_clock_mode/mode_\${sub_mode} = $sub_clock_mode/mode_${sub_mode}"</div>
<div>
puts "INFO: Now is verifying $atpg_ovr_mode"</div>
<div>
puts "INFO: Start the override config"</div>
<div>
::ATE::atpg_init::over_mode_extra_control $prgmConfig $testConfig $atpg_clock_verif_config $atpg_ovr_mode</div>
<div>
$prgmConfig waitRti 1</div>
<div>
</div>
<div>
puts "INFO: Start the monitor config"</div>
<div>
::ATE::atpg_init::clock_monitor_setting $prgmConfig $testConfig $ftmorsaClockConfig $atpg_clock_verif_config $atpg_ovr_mode</div>
<div>
$prgmConfig waitRti 1</div>
<div>
</div>
<div>
puts "INFO: Start the test sequence"</div>
<div>
::ATE::atpg_init::clock_stuckat_test_sequence $prgmConfig $testConfig $ftmorsaClockConfig $atpg_clock_verif_config $atpg_ovr_mode</div>
<div>
$prgmConfig waitRti 1</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
if {[regexp "BYPASS_MODE_ISTCLOCK" $sub_clock_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::strobe_frequency_stop -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set jtagConfig [$prgmConfig get_jtag_config]</div>
<div>
<span style="white-space: pre;"> </span>if {[jtag_output_type $jtagConfig] == "VerilogXface"} {</div>
<div>
<span style="white-space: pre;"> </span>set clock_mon_active TB_clock_mon_active</div>
<div>
<span style="white-space: pre;"> </span>set_pin_value $jtagConfig $clock_mon_active 0</div>
<div>
<span style="white-space: pre;"> </span>waitRti $jtagConfig 1</div>
<div>
<span style="white-space: pre;"> </span>puts "Checking clock monitors for any errors..."</div>
<div>
<span style="white-space: pre;"> </span>set_pin_value $jtagConfig TB_clock_mon_error 0</div>
<div>
<span style="white-space: pre;"> </span>waitRti $jtagConfig 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value TB_clock_mon_error X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
# add for tam, avoid shift_ir mismatch for tam with related to EOT</div>
<div>
if {$clock_atpg_mode eq "TAM"} {</div>
<div>
$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 20</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::Ftm { args } {</div>
<div>
<span style="white-space: pre;"> </span>puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]============== ENTER procedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{listArgs.arg "" "-option helper; please add -sub_mode tn arg to define SCAN_TEST sub mode defined in the file $::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml, e.g. XTR_STUCKAT_SERDES etc."}</div>
<div>
<span style="white-space: pre;"> </span>{ftm_cap_win_us.arg "5" "<specify the ftm capture window in the unit of tck period>"}</div>
<div>
<span style="white-space: pre;"> </span>{legacy_serdes_preshift_count.arg "0" "<specify the number of legacy_serdes_preshift_count values>"}</div>
<div>
<span style="white-space: pre;"> </span>{debug_occ_index.arg "" "<specify the OCC group index to activate (debug mode)>"}</div>
<div>
{enable_nmeas_lite 0 "<1 enable enable nmeas_lite, 0 disable nmeas_lite>"}</div>
<div>
{enable_nmeas_lite_readout 0 "<1 enable enable nmeas_lite readout, 0 disable nmeas_lite readout>"}</div>
<div>
{enable_all_atpg_ovr_mode "enable all atpg override mode from atpg_clock_verif_config.yml"}</div>
<div>
{atpg_ovr_mode_list.arg "" "set atpg override mode for clock verification,this could cover specical requirement like onehot and edge control"}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>if {![regexp "^\s*$" $mainParams(ListArgs)]} {</div>
<div>
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option</div>
<div>
<span style="white-space: pre;"> </span>set subtest_option [concat $subtest_option $listArgsOptions]</div>
<div>
<br /></div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_features" -value "secSHA2"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set temp_bak_args $::argv</div>
<div>
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Replace XTR_FTM_SERDES_SERIAL with XTR_FTM_SERDES: it's only a test body indicator, and should not be carried into atpg_init</div>
<div>
<span style="white-space: pre;"> </span>set i [lsearch $sub_mode_in XTR_FTM_SERDES_SERIAL]</div>
<div>
<span style="white-space: pre;"> </span>if {$i != -1} {</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in [lreplace $sub_mode_in $i $i XTR_FTM_SERDES]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"</div>
<div>
<span style="white-space: pre;"> </span>if { [regexp "shift_only" $sub_mode_in] } {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "XTR_FTM_SERDES"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
#puts "blueg, dbg here 1"</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig ftm_cap_win_us legacy_serdes_preshift_count debug_occ_index" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
## Johnson add an if condition wrapper here for MATHS ATE.</div>
<div>
set test_name [config_map_value [config_find $testConfig CURRENT_TEST] name]</div>
<div>
if {[regexp maths_ate $test_name]} {</div>
<div>
# when test name is maths_ate, bypass all clusters through JET, so that no programming will happen since now</div>
<div>
puts "MATHS ATE INFO: the test is $test_name, bypass all programming!"</div>
<div>
$prgmConfig set_controller_property {.*} mode bypass</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "INFO: wait [expr [$prgmConfig get_tap_frequency]*${ftm_cap_win_us}/1000] cycles for $ftm_cap_win_us us ftm_cap_win"</div>
<div>
set ftm_cap_win [expr [$prgmConfig get_tap_frequency]*${ftm_cap_win_us}/1000]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Replace XTR_FTM_SERDES_SERIAL with XTR_FTM_SERDES: it's only a test body indicator, and should not be carried into atpg_init</div>
<div>
<span style="white-space: pre;"> </span>set i [lsearch $sub_modes XTR_FTM_SERDES_SERIAL]</div>
<div>
<span style="white-space: pre;"> </span>if {$i != -1} {</div>
<div>
<span style="white-space: pre;"> </span>set sub_modes [lreplace $sub_modes $i $i XTR_FTM_SERDES]</div>
<div>
<span style="white-space: pre;"> </span>config_set $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes $sub_modes</div>
<div>
<span style="white-space: pre;"> </span>set serial 1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set serial 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub modes: $sub_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
</div>
<div>
<div>
<br /></div>
<div>
set uphy_pd_short_init [config_find $testConfig USER_CUSTOM_ARGS/enable_atpg_EOT]</div>
<div>
if {$uphy_pd_short_init eq ""} {set uphy_pd_short_init 0}</div>
<div>
if {$uphy_pd_short_init} {</div>
<div>
puts "INFO: uphy power down sequence called, skipping ATPG API, for XTR programming serdes stagger"</div>
<div>
if {[regexp "XTR" $sub_modes]} {</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>puts "INFO: program serdes stagger at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>::ATE::atpg_init::serdes_stagger -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
}</div>
<div>
return 1</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
##### begin: clear sdp x for atpg/ate sim #####</div>
<div>
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*Select_SDPBypassCtrl.*} -value 1</div>
<div>
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*SDPBypass.*} -value 1</div>
<div>
$prgmConfig set_program_value {.*XTR_TAM_CTL} {.*XTRControl_ShiftStagger.*} -value 1</div>
<div>
set tmax_init [config_find $testConfig "USER_CUSTOM_ARGS/tmax_init"]</div>
<div>
if { $tmax_init == 1} {</div>
<div>
$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 1</div>
<div>
} else {</div>
<div>
$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 0</div>
<div>
}</div>
<div>
<br /></div>
<div>
</div>
<div>
$prgmConfig program</div>
<div>
<br /></div>
<div>
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
foreach sub_mode $sub_modes {</div>
<div>
if {$design_type == "flat" && [regexp "XTR" $sub_modes]} {</div>
<div>
#2. toggle serdes_4f, wait few cycles, stop serdes4f</div>
<div>
if {[$prgmConfig is_vec_mode]} {</div>
<div>
puts "for atpg vec sim,toggle serdes_4f to clear pipeline X "</div>
<div>
set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
puts "Toggle serdes4f before dft mode programming at $current_cycle"</div>
<div>
set die_obj [config_find $testConfig CURRENT_TEST/die_obj]</div>
<div>
set serdes4f_clk_pin [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=serdes4f_clk)}]</div>
<div>
foreach pin $serdes4f_clk_pin {</div>
<div>
$prgmConfig set_enable_value $pin 1</div>
<div>
$prgmConfig set_pin_value $pin 1</div>
<div>
}</div>
<div>
set serdes_div_ratio [config_find $testConfig USER_CUSTOM_ARGS/serdes_div_ratio]</div>
<div>
set serdes4fToggleCycle [expr $serdes_div_ratio * 20]</div>
<div>
$prgmConfig wait_cycles $serdes4fToggleCycle</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
if {[ expr $curr_cyc % $tck_mult ] != 0} {</div>
<div>
set wait_cyc [ expr $tck_mult - [ expr $curr_cyc % $tck_mult ]]</div>
<div>
$prgmConfig wait_cycles $wait_cyc</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
}</div>
<div>
set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
puts "Stop serdes4f before dft mode programming at $current_cycle"</div>
<div>
foreach pin $serdes4f_clk_pin {</div>
<div>
$prgmConfig set_enable_value $pin 1</div>
<div>
$prgmConfig set_pin_value $pin 0</div>
<div>
}</div>
<div>
} </div>
<div>
if {[$prgmConfig is_sim_mode]} {</div>
<div>
puts "for atpg ate sim, toggle serdes_4f to clear pipeline X" </div>
<div>
$prgmConfig jtag_force "TB_clk_freerunning" 1</div>
<div>
$prgmConfig waitRti [expr int(63 * 500 / ([$prgmConfig get_tap_frequency]/1000))] ;# we need 63/8 = 8 pulses to flush X inside 8 sdps, we have serdes divider, div is 8</div>
<div>
$prgmConfig jtag_force "TB_clk_freerunning" 0</div>
<div>
}</div>
<div>
}</div>
<div>
$prgmConfig program</div>
<div>
}</div>
<div>
##### end: clear sdp x #####</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"</div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $dft_modes_config_file]} {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: standard dft mode programming yml file found. Reading..."</div>
<div>
<span style="white-space: pre;"> </span>set dft_modeConfig [config_read_yaml $dft_modes_config_file]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."</div>
<div>
<span style="white-space: pre;"> </span>exit 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
# inject x on wbr</div>
<div>
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] wbr_injectX] } {</div>
<div>
$prgmConfig jtag_force "tb.enable_force_for_wbr" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span># DFT mode programming</div>
<div>
<span style="white-space: pre;"> </span>set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]</div>
<div>
<span style="white-space: pre;"> </span>set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]];</div>
<div>
<br /></div>
<div>
set rsync [config_find $testConfig USER_CUSTOM_ARGS/resync_serdes]</div>
<div>
set fs_top_up [config_find $testConfig USER_CUSTOM_ARGS/fs_top_up_init]</div>
<div>
if {$rsync eq ""} {set rsync 0}</div>
<div>
if {$fs_top_up eq ""} {set fs_top_up 0}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {[info procs ::ATE::AteFlowUtils::getTestApiProperty] == "::ATE::AteFlowUtils::getTestApiProperty"} {</div>
<div>
<span style="white-space: pre;"> </span>set testapi_test_type [::ATE::AteFlowUtils::getTestApiProperty -testConfig $testConfig -categoryName execution_ctrl -propName test_type]</div>
<div>
<span style="white-space: pre;"> </span>set testapi_dft_mode [::ATE::AteFlowUtils::getTestApiProperty -testConfig $testConfig -categoryName execution_ctrl -propName dft_mode]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set testapi_test_type ""</div>
<div>
<span style="white-space: pre;"> </span>set testapi_dft_mode ""</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $testapi_dft_mode ne "" } {</div>
<div>
if { ($rsync || $fs_top_up ) != 1 } {</div>
<div>
<span style="white-space: pre;"> </span> puts "INFO: set dft program mode to \"$testapi_test_type/$testapi_dft_mode\""</div>
<div>
<span style="white-space: pre;"> </span> #commenting $prgmConfig set_program_mode "$testapi_test_type/$testapi_dft_mode"</div>
<div>
<span style="white-space: pre;"> </span> ::ATE::AteFlowUtils::set_default_dft_mode -testConfig $testConfig -prgmConfig $prgmConfig</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "WARNING: testapi_dft_mode is required for scan test"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
## fs_validation</div>
<div>
set fs_validation [config_find $testConfig USER_CUSTOM_ARGS/fs_validation]</div>
<div>
if {$fs_validation ne ""} {</div>
<div>
puts "INFO: fs_validation is being set on FS region $fs_validation"</div>
<div>
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*DFT_FS_CTRL} {.*DFT_FS_CTRL} 0</div>
<div>
#Below force programming added by subbu after referring to tu102 to see the tags in INIT for the register</div>
<div>
$prgmConfig program -force</div>
<div>
}</div>
<div>
<br /></div>
<div>
## check if rsync needs to be called ##</div>
<div>
<span style="white-space: pre;"> </span>set rsync [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] resync_serdes]</div>
<div>
<span style="white-space: pre;"> </span>set fstate [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] resync_fstate]</div>
<div>
<span style="white-space: pre;"> </span>if { $rsync == 1 } { </div>
<div>
<span style="white-space: pre;"> </span>puts "Calling resync serdes"</div>
<div>
<span style="white-space: pre;"> </span>if { ! [file exists $fstate] } { puts "ERR: provide fstate yml file: $fstate" }</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::resync_serdes -prgmConfig $prgmConfig -testConfig $testConfig -fstate $fstate</div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
## check if fs_top_up needs to be called ##</div>
<div>
set fs_top_up [config_find $testConfig USER_CUSTOM_ARGS/fs_top_up_init]</div>
<div>
if { $fs_top_up == 1 } {</div>
<div>
puts "Calling fs_top_up"</div>
<div>
::ATE::atpg_init::fs_top_up -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
return 1</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach sub_mode $sub_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "FTM" $sub_mode] || [regexp "STUCKAT" $sub_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Validating sub mode $sub_mode..."</div>
<div>
if { [config_find $dft_modeConfig "SCAN_TEST/${sub_mode}"] != ""} {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: $sub_mode is valid sub_mode"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: sub_mode $sub_mode is invalid. Please follow $dft_modes_config_file for the list of sub_mode's allowed"</div>
<div>
<span style="white-space: pre;"> </span>exit 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "WARNING: sub mode $sub_mode is not SCAN_TEST sub mode"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span># Please specify the test API specific programming here</div>
<div>
<span style="white-space: pre;"> </span>set tmax_init [config_find $testConfig "USER_CUSTOM_ARGS/tmax_init"]</div>
<div>
if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] tam_forceflow]} {</div>
<div>
set tam_forceflow_flag 1</div>
<div>
} else {</div>
<div>
set tam_forceflow_flag 0</div>
<div>
}</div>
<div>
if { $tam_forceflow_flag == 0 } {</div>
<div>
<span style="white-space: pre;"> </span>if { $tmax_init == 1} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 1</div>
<div>
<span style="white-space: pre;"> </span>} else { </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>switch -regexp $sub_mode {</div>
<div>
<span style="white-space: pre;"> </span>TAM|UPHY|PEX|FABRIC { set clock_atpg_mode "TAM" }</div>
<div>
<span style="white-space: pre;"> </span>XTR|shift_only { set clock_atpg_mode "XTR" }</div>
<div>
<span style="white-space: pre;"> </span>default { puts "ERROR: only XTR_STUCKAT_SERDES, LEGACY_INTEST_STUCKAT_SERDES, and LEGACY_EXTEST_STUCKAT_SERDES supported!"; exit 1; }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
puts "dbg, blueg, sub_modes = $sub_modes; clock_atpg_mode = $clock_atpg_mode"</div>
<div>
puts "unified_scan_spec is $unified_scan_spec"</div>
<div>
if {[regexp "XTR" $sub_modes] || [regexp "XTR" $clock_atpg_mode]} {</div>
<div>
if {[file exists $unified_scan_spec]} {</div>
<div>
set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
set pipe_ports [ config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/INPUTS]]</div>
<div>
set pipe_port_0 [ lindex $pipe_ports 0]</div>
<div>
set input_pipe_count [ config_find $accessConfig SCAN_IOS/XTREME_X4/IO_PIPELINES/$pipe_port_0/INPUT_PIPE_CNT]</div>
<div>
set output_pipe_count [ config_find $accessConfig SCAN_IOS/XTREME_X4/IO_PIPELINES/$pipe_port_0/OUTPUT_PIPE_CNT]</div>
<div>
set xtr_link_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanin_pipes"]</div>
<div>
set xtr_link_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanout_pipes"]</div>
<div>
if {$xtr_link_fast_scanin_pipes ne "" } {</div>
<div>
if {$xtr_link_fast_scanin_pipes != $input_pipe_count} {</div>
<div>
tn_msg_issue_ATE_102 "xtr_link_fast_scanin_pipes argument $xtr_link_fast_scanin_pipes is not equal to INPUT_PIPE_CNT from scanIo.yml $input_pipe_count"</div>
<div>
#exit;</div>
<div>
}</div>
<div>
}</div>
<div>
if {$xtr_link_fast_scanout_pipes ne "" } {</div>
<div>
if {$xtr_link_fast_scanout_pipes != $output_pipe_count} {</div>
<div>
tn_msg_issue_ATE_102 "xtr_link_fast_scanout_pipes argument $xtr_link_fast_scanout_pipes is not equal to OUTPUT_PIPE_CNT from scanIo.yml $output_pipe_count"</div>
<div>
#exit;</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
::ATE::atpg_init::serdes_div_reset -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_ext_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: scan_en_ext_pin $scan_en_ext_pin"</div>
<div>
<span style="white-space: pre;"> </span>if { $scan_en_ext_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: scan_en_ext pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: UFI pin list is $ufi_list"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>} else { </div>
<div>
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]</div>
<div>
if {$ufi_pin ne ""} {</div>
<div>
<span style="white-space: pre;"> </span> set ufi_list [ list $ufi_pin]</div>
<div>
puts "INFO: UFI pin list is $ufi_list"</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [ list $serdes_4f_clk_pin]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>if {!([$prgmConfig is_sim_mode] || [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] ist_mode])} {</div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: ufi_pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $serdes_4f_clk_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: serdes_4f_clk pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>switch $common_mode {</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make UFI 0 and serdes fast clock 0 at cycle $current_cycle"</div>
<div>
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger] } {</div>
<div>
puts "blueg, can't find ufi pin for now, comment out for clock sims for now"</div>
<div>
} else {</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
if {[$prgmConfig is_sim_mode]} {</div>
<div>
# ATE simulation: turn off serdes_4f_clk</div>
<div>
$prgmConfig jtag_force "TB_clk_freerunning" 0</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 20</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Asserting scan enable at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait for 120 * serdes ratio cycles at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [ expr 120 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: De-asserting scan enable at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 20</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "XTR" $sub_mode]||[regexp "shift_only" $sub_mode]} {</div>
<div>
<span style="white-space: pre;"> </span># bug 1634381.</div>
<div>
<span style="white-space: pre;"> </span># irrespective of ECK or ICK mode, this bit should be 1 for XTR </div>
<div>
<span style="white-space: pre;"> </span># for ECK should be 0 and ICK should be 1 in TAM Serdes </div>
<div>
<span style="white-space: pre;"> </span># Because of this conflict cannot be done in standard programing yml </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*TamControl_SerdesClockMode" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
# Set DFT_FS_CTRL bits to 1 (the reset value) and add a JRD shift. This is needed to do FSCheck by flipping tags on tester</div>
<div>
if {$design_type eq "flat"} {</div>
<div>
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*DFT_FS_CTRL} {.*DFT_FS_CTRL} 1</div>
<div>
$prgmConfig program -force</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set xtr_ufi_selftest [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ufi_selftest"]</div>
<div>
<span style="white-space: pre;"> </span>if { $xtr_ufi_selftest } {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_selftest -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_reset_sequence -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::atpg_init::serdes_div_reset -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::tam_init_seq -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
if { $tam_forceflow_flag == 0} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/CLK_CTL" ".*tmc2clk_block_x_on_clockchain_in_setup.*" -value 0</div>
<div>
$prgmConfig program</div>
<div>
if {[$prgmConfig list_registers .*TEST_MASTER_CTRL] != ""} {</div>
<div>
$prgmConfig set_program_value {.*CHIPLET_LOGIC} {.*} -value 1'b0 -replicate</div>
<div>
$prgmConfig program -force</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Waiting for twice 1500 pipelines $num_1500_pipelines"</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
# make scan enable as Z to avoid contention on scan enable & scan enable observe port</div>
<div>
if {[regexp "XTR" $sub_mode]} {</div>
<div>
if { [file exists $unified_scan_spec]} {</div>
<div>
set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
set scan_en_pin [lindex [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SCAN_EN_PORTS]] 0]</div>
<div>
puts "INFO: scan_en pin is $scan_en_pin"</div>
<div>
} else { </div>
<div>
<span style="white-space: pre;"> </span> set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
set scan_en_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]</div>
<div>
puts "INFO: scan_en pin is $scan_en_pin"</div>
<div>
}</div>
<div>
#regsub -all {[\{\}]} $scan_en_pin {} scan_en_pin</div>
<div>
$prgmConfig set_pin_value $scan_en_pin Z</div>
<div>
}</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After additional 100 waitRti $current_cycle"</div>
<div>
<br /></div>
<div>
puts "INFO: Enter Proc ism__ism_noise__ISM_NMEAS_LITE"</div>
<div>
if { $listargsParams(enable_nmeas_lite) } {</div>
<div>
package require atpg_init_tasks_ism</div>
<div>
::ATE::atpg_init_ism::ism__ism_noise__ISM_NMEAS_LITE $prgmConfig $testConfig</div>
<div>
} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "Don't run ism__ism_noise__ISM_NMEAS_LITE proc"</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
puts "Garyk, start dump"</div>
<div>
$prgmConfig jtag_force "TB_enable_fsdb_dump" 1</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: End of atpg_init of Ftm"</div>
<div>
<span style="white-space: pre;"> </span>if {[$prgmConfig is_sim_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>puts "sim mode for ATE test"</div>
<div>
<span style="white-space: pre;"> </span>if {$serial} {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::atpg_cutpoint $prgmConfig $testConfig $ftm_cap_win $legacy_serdes_preshift_count $debug_occ_index</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
puts "INFO: SLCG/BLCG is controlled by scan flops, but our monitor are after them, need below prgm to force them open, this is simulation only"</div>
<div>
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_PCCM_CTL} {.*tmc2clk_disable_clock_gating.*} 1</div>
<div>
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_PCCM_CTL} {.*tmc2clk_ctsroot_disable_clk_gating.*} 1</div>
<div>
::ATE::AteCustomUtils::prgm_if_exist $prgmConfig {.*CLK_CTL} {.*tmc2clk_ctsroot_disable_clk_gating.*} 1</div>
<div>
$prgmConfig set_program_value {.*/ATPG_CTL} {.*tmc2slcg_disable_clock_gating.*} -value 1'b1</div>
<div>
$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::clock_ftm $prgmConfig $testConfig $ftm_cap_win $legacy_serdes_preshift_count</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
puts "INFO: Enter Proc ism__ism_noise__ISM_NMEAS_LITE__readout"</div>
<div>
if { $listargsParams(enable_nmeas_lite_readout) } {</div>
<div>
::ATE::atpg_init_ism::ism__ism_noise__ISM_NMEAS_LITE__readout $prgmConfig $testConfig</div>
<div>
} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "Don't run ism__ism_noise__ISM_NMEAS_LITE__readout proc"</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::clock_ftm_test_sequence {prgmConfig testConfig ftmorsaClockConfig atpg_clock_verif_config atpg_ovr_mode {IsFirstRun 1}} {</div>
<div>
set sub_clock_mode [config_find $atpg_clock_verif_config TMP/sub_clock_mode]</div>
<div>
set sub_mode [config_find $atpg_clock_verif_config TMP/sub_mode]</div>
<div>
set clock_atpg_mode [config_find $atpg_clock_verif_config TMP/clock_atpg_mode]</div>
<div>
set num_core_shift_pulses [config_find $atpg_clock_verif_config TMP/num_core_shift_pulses]</div>
<div>
set serdes_slow_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/serdes_slow_clk_freq_mhz]</div>
<div>
set test_clk_freq_mhz [config_find $atpg_clock_verif_config TMP/test_clk_freq_mhz]</div>
<div>
set scan_en_pin [config_find $atpg_clock_verif_config TMP/scan_en_pin]</div>
<div>
set SerdesClkList [config_list [config_find $atpg_clock_verif_config TMP/SerdesClkList]]</div>
<div>
set TestClkList [config_list [config_find $atpg_clock_verif_config TMP/TestClkList]]</div>
<div>
set tap_freq_mhz [config_find $atpg_clock_verif_config TMP/tap_freq_mhz]</div>
<div>
set enable_ip_list [config_list [config_find $atpg_clock_verif_config TMP/enable_ip_list]]</div>
<div>
set ftm_cap_win [config_find $atpg_clock_verif_config TMP/ftm_cap_win]</div>
<div>
<br /></div>
<div>
set jtagConfig [$prgmConfig get_jtag_config]</div>
<div>
<br /></div>
<div>
#Get from ftm/s@ yml</div>
<div>
set portListConfig [config_find $ftmorsaClockConfig PortList]</div>
<div>
set staggerConfig [config_find $ftmorsaClockConfig StaggerConfig]</div>
<div>
foreach tmp [config_list $portListConfig] {</div>
<div>
if [regexp $sub_clock_mode [config_map_keys $tmp]] {</div>
<div>
set portConfig $tmp</div>
<div>
}</div>
<div>
}</div>
<div>
# Define "clock_atpg_mode" nickname that describes clock behavior for given ATPG $sub_mode</div>
<div>
set modeConfig [config_find $portConfig $sub_clock_mode/mode_${sub_mode}]</div>
<div>
set fieldsConfig [config_find $modeConfig FIELDS]</div>
<div>
set entries [config_list [config_find $modeConfig ENTRIES]]</div>
<div>
set fieldsList [split $fieldsConfig "\t"]</div>
<div>
for {set i 0} {$i < [llength $fieldsList]} {incr i} {</div>
<div>
set FieldIndex([lindex $fieldsList $i]) $i</div>
<div>
}</div>
<div>
</div>
<div>
if {$clock_atpg_mode eq "TAM"} {</div>
<div>
<span style="white-space: pre;"> </span>#4.1 assert scan_en & de-assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>#4.2 occ force</div>
<div>
set value 3</div>
<div>
set width [config_find $atpg_clock_verif_config Default/NO_local_OCC/width]</div>
<div>
set name [config_find $atpg_clock_verif_config Default/NO_local_OCC/name]</div>
<div>
foreach chiplet $enable_ip_list {</div>
<div>
lappend OccNameList ${name}_${chiplet} </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach OccName $OccNameList {</div>
<div>
puts "INFO: Now force $width wide chain $OccName to $value"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $OccName $width $value</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.3: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span># Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(scan_en_delay) [expr int(ceil(3.0 * $tap_freq_mhz / 5))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(scan_en_delay) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(scan_en_delay) tck cycles (scan en delay)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
</div>
<div>
$prgmConfig waitRti $totalWaitCycles</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.4: de-assert scan_en, assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig jtag_force "${TestClk}_cap_en" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span># 4.5: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span># 4.6: Need an extra scan_en posedge to check final results. Just need a posedge, no need to wait for complete shift+capture</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} </div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
if {$clock_atpg_mode eq "XTR" } {</div>
<div>
<span style="white-space: pre;"> </span>#for IP run, always use -enable_ip arg to specify the IP under-test</div>
<div>
<span style="white-space: pre;"> </span>#skip forcing scan_en to 1 when we loop test</div>
<div>
<span style="white-space: pre;"> </span>if {$IsFirstRun == 1} {</div>
<div>
<span style="white-space: pre;"> </span> # 4.1 de-assert scan_en at the beginning</div>
<div>
<span style="white-space: pre;"> </span> puts "set all ip IDU scan_en to 0"</div>
<div>
<span style="white-space: pre;"> </span> foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span> }</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig set_enable_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig waitRti 1</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span># 4.2: set scan_en=1, initiate core shift state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 1 to start shift"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
# 4.3 occ load</div>
<div>
<span style="white-space: pre;"> </span>puts "program occ after scan_en 1 , need wait 10 serdes1f cycle for pipeline"</div>
<div>
<span style="white-space: pre;"> </span>puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
if {[regexp $sub_mode "shift_only"]} { </div>
<div>
set value 0 </div>
<div>
} elseif {$sub_clock_mode == "BYPASS_MODE_ISTCLOCK"} {</div>
<div>
set value 1</div>
<div>
} elseif {$sub_clock_mode == "FTM_BYPASS_MODE_ISTCLOCK"} {</div>
<div>
set value 3</div>
<div>
} else {</div>
<div>
set value 3</div>
<div>
}</div>
<div>
set width [config_find $atpg_clock_verif_config Default/Local_OCC/width]</div>
<div>
set name [config_find $atpg_clock_verif_config Default/Local_OCC/name]</div>
<div>
foreach chiplet $enable_ip_list {</div>
<div>
lappend OccNameList ${name}_${chiplet}</div>
<div>
}</div>
<div>
foreach OccName $OccNameList {</div>
<div>
puts "INFO: Now force $width wide chain $OccName to $value"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::FORCE_CLOCK_CHAIN $prgmConfig $testConfig $OccName $width $value</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 10</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.4: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span># Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $totalWaitCycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(20 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.5: set scan_en=0, initiate capture state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 0 to start capture"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
puts "if we loop shift/capture for xtr, we expect $num_core_shift_pulses shift pulses"</div>
<div>
foreach entry $entries {</div>
<div>
set elementList [split $entry "\t"]</div>
<div>
<span style="white-space: pre;"> </span> set name [lindex $elementList $FieldIndex(NAME)]</div>
<div>
<span style="white-space: pre;"> </span> regsub -all {[^a-zA-Z0-9_]+} $name {_} monitorName</div>
<div>
binary scan [binary format I1 [expr $num_core_shift_pulses + 1]] B* binary_num_core_shift_pulses</div>
<div>
$prgmConfig jtag_force "TB_ftm_shift_cnt_overwrite_${monitorName}\[9:0\]" $binary_num_core_shift_pulses</div>
<div>
}</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># 4.6: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
puts "set idu scan_en input to 1 to start monitor check"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
}</div>
<div>
<br /></div>
<div>
#Check result</div>
<div>
set jtagConfig [$prgmConfig get_jtag_config]</div>
<div>
if {[jtag_output_type $jtagConfig] == "VerilogXface"} {</div>
<div>
set clock_mon_active TB_clock_mon_active</div>
<div>
set_pin_value $jtagConfig $clock_mon_active 0</div>
<div>
waitRti $jtagConfig 1</div>
<div>
puts "Checking clock monitors for any errors..."</div>
<div>
set_pin_value $jtagConfig TB_clock_mon_error 0</div>
<div>
waitRti $jtagConfig 1</div>
<div>
$prgmConfig set_pin_value TB_clock_mon_error X</div>
<div>
$prgmConfig waitRti 5</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::clock_ftm { prgmConfig testConfig ftm_cap_win legacy_serdes_preshift_count} {</div>
<div>
<span style="white-space: pre;"> </span>puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============@cycle [$prgmConfig get_current_cycle] ENTER gprocedure: [lindex [info level 0] 0]=============="</div>
<div>
set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
set chip_name [$prgmConfig name]</div>
<div>
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
set design_scope [config_map_value [config_find $testConfig CURRENT_TEST] design_scope]</div>
<div>
set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]</div>
<div>
set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]]; # this is a list,but we only allow one element</div>
<div>
set sub_mode [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]; # this is a list, but we only allow one element</div>
<div>
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]</div>
<div>
set scan_en_pin [::pkgtool::get_vlog_pins_with_test_function $die_obj {TESTCTL0}]</div>
<div>
regsub -all {[\{\}]} $scan_en_pin {} scan_en_pin</div>
<div>
set SerdesClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=serdes4f_clk)}]</div>
<div>
set TestClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=.*)}]</div>
<div>
set clockProgrammingConfig [::ATE::clock_init_tasks::get_clock_programming_config $testConfig]</div>
<div>
set onehot_mode [config_find $testConfig USER_CUSTOM_ARGS/onehot_mode]</div>
<div>
set edge_mode [config_find $testConfig USER_CUSTOM_ARGS/edge_mode]</div>
<div>
set enable_all_atpg_ovr_mode [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/API_ARGUMENTS/enable_all_atpg_ovr_mode]</div>
<div>
set atpg_ovr_mode_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/API_ARGUMENTS/atpg_ovr_mode_list]</div>
<div>
<br /></div>
<div>
puts "INFO: chip_name is $chip_name "</div>
<div>
puts "INFO: design_type is $design_type "</div>
<div>
puts "INFO: design_scope is $design_scope "</div>
<div>
puts "INFO: clock_mode is $clock_mode "</div>
<div>
puts "INFO: sub_clock_mode is $sub_clock_mode "</div>
<div>
puts "INFO: sub_mode is $sub_mode "</div>
<div>
puts "INFO: relative_path_local2jtag is $relative_path_local2jtag "</div>
<div>
puts "INFO: scan_en_pin is $scan_en_pin "</div>
<div>
puts "INFO: SerdesClkList is $SerdesClkList "</div>
<div>
puts "INFO: TestClkList is $TestClkList "</div>
<div>
puts "INFO: onehot_mode is $onehot_mode"</div>
<div>
puts "INFO: edge_mode is $edge_mode"</div>
<div>
puts "INFO: enable_all_atpg_ovr_mode is $enable_all_atpg_ovr_mode"</div>
<div>
puts "INFO: atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
<br /></div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span># dealing with test specific argument</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) -1</div>
<div>
<span style="white-space: pre;"> </span>if {[catch {config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]}]} {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(mode) [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>if {[config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]] == "VECTOR"} {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(mode) [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR:exception of getting 'CURRENT_TEST/CURRENT_SUBTEST/sub_modes' from the test configure object"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $listargsParams(mode) != "" } {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) $listargsParams(mode)</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set listargsParams(debug_mode) -1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $listargsParams(debug_mode) == -1 } {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR: Please specify sub_mode for clock_ftm test by '-sub_mode x'"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>} elseif { [llength $listargsParams(debug_mode)] > 1 } {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERROR: '-sub_mode' only support one entry now"</div>
<div>
<span style="white-space: pre;"> </span>exit 1;</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "Running single sub_mode: $listargsParams(debug_mode)"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#Sub clock mode</div>
<div>
if {$sub_clock_mode == "FTM_BYPASS_MODE_TESTCLOCK_1X"} {</div>
<div>
set sub_clock_mode FTM_BYPASS_MODE_TESTCLOCK</div>
<div>
} elseif {$sub_clock_mode == "FTM_BYPASS_MODE_TESTCLOCK_2X"} {</div>
<div>
set sub_clock_mode FTM_BYPASS_MODE_TESTCLOCK</div>
<div>
}</div>
<div>
</div>
<div>
#Get clock_atpg_mode</div>
<div>
switch -regexp $sub_mode {</div>
<div>
<span style="white-space: pre;"> </span>TAM|UPHY|PEX|FABRIC { set clock_atpg_mode "TAM" }</div>
<div>
<span style="white-space: pre;"> </span>XTR|shift_only { set clock_atpg_mode "XTR" }</div>
<div>
<span style="white-space: pre;"> </span>default { puts "ERROR: only XTR_STUCKAT_SERDES, LEGACY_INTEST_STUCKAT_SERDES, and LEGACY_EXTEST_STUCKAT_SERDES supported!"; exit 1; }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_clock_mode.clock_atpg_mode $sub_clock_mode.$clock_atpg_mode"</div>
<div>
</div>
<div>
#Get serdes div ratio from common_mode</div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
puts "INFO: common modes: $common_modes"</div>
<div>
if {[llength $common_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
foreach common_mode $common_modes {</div>
<div>
if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
switch $common_mode {</div>
<div>
SERDES_RATIO_S4 { set serdes_div_ratio 4 }</div>
<div>
SERDES_RATIO_S6 { set serdes_div_ratio 6 }</div>
<div>
SERDES_RATIO_S8 { set serdes_div_ratio 8 }</div>
<div>
SERDES_RATIO_S12 { set serdes_div_ratio 12 }</div>
<div>
SERDES_RATIO_S24 { set serdes_div_ratio 24 }</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
#Get JTAG_TCK test_clock serdes_fast_clk serdes_slow_clk frequency</div>
<div>
set tap_freq_khz [$prgmConfig get_tap_frequency]</div>
<div>
set tap_freq_mhz [expr $tap_freq_khz * 0.001]</div>
<div>
# set test_clk_freq_mhz 90.009</div>
<div>
<span style="white-space: pre;"> </span>set test_clk_freq_mhz 62.5</div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>FTM_BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 203.998</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 203.998</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>default {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 500.0</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
</div>
<div>
#Get default ip instances when fullchip simulation </div>
<div>
set IpList [string tolower [::ATE::AteFlowUtils::get_ip_type -prgmConfig $prgmConfig -all]]</div>
<div>
foreach IpType $IpList {</div>
<div>
set IpType NV_${IpType}</div>
<div>
puts "INFO: IpType = $IpType"</div>
<div>
if {[regexp {dram|hbm|other2} $IpType]} {</div>
<div>
puts "INFO: Skip $IpType"</div>
<div>
continue</div>
<div>
}</div>
<div>
lappend default_ip_list $IpType</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip] ne ""} {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list $default_ip_list</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
puts "INFO: enable_ip_list is $enable_ip_list"</div>
<div>
<br /></div>
<div>
#Set shift pulses number</div>
<div>
set num_core_shift_pulses 10</div>
<div>
</div>
<div>
######1. BEGIN test-bench setting #####</div>
<div>
#Get serdes/test clock pad prefix for force</div>
<div>
foreach SerdesClk $SerdesClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $SerdesClk {\1__\2__} SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>lappend NewSerdesClkList $SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $TestClk {\1__\2__} TestClk</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span>lappend NewTestClkList $TestClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>STA_BYPASS_MODE_SERDESCLOCK.XTR|FTM_BYPASS_MODE_SERDESCLOCK.XTR|nafll_Ftm.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_trigger" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_clk_freerunning" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>FTM_BYPASS_MODE_ISTCLOCK.XTR|BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_serdesclk_trigger" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>nafll_Ftm.TAM|BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_ftm_debug_port_test_sequence_on" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "testen_dummy" 1 ;# testen_dummy=1 to unblock wide/fake_scan_en, which will be used in new_FTM_pulse_gen_rz module.</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 0 ;# choose testclk as source shift clock for tb ftm monitor </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_testclk_ctrl_running_62p5" 1 ;# choose 62.5 free run testclk</div>
<div>
<span style="white-space: pre;"> </span>### BEGIN create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>set shift_pulse_num $num_core_shift_pulses</div>
<div>
<span style="white-space: pre;"> </span>set capture_pulse_num 1</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $TestClk 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $NewTestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[lsearch $NewSerdesClkList $TestClk] != -1} { ;# set test-bench serdes clock shift/capture to 0 in testclk based mode</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 10} {incr i} {</div>
<div>
binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 10} {incr i} {</div>
<div>
binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>### END create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>##### END test-bench setting #####</div>
<div>
</div>
<div>
##### 3.BEGIN configure IDU transactor #####</div>
<div>
$prgmConfig jtag_force "tb.count_capture" 0</div>
<div>
puts "serdes_div_ratio = $serdes_div_ratio"</div>
<div>
puts "num_core_shift_pulses = $num_core_shift_pulses"</div>
<div>
puts "legacy_serdes_preshift_count = $legacy_serdes_preshift_count"</div>
<div>
for {set i 0} {$i <= 15} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span># 3.0: configure number of core shift length, in terms of serdes_fast_clk cycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb_xtr_num_core_shift_pulses_$i" [expr ([expr $num_core_shift_pulses + 1] >> $i) & 1];# add 1 pulse due to idu design: the output pulse from idu is shift_pulse - 1</div>
<div>
<span style="white-space: pre;"> </span># 3.1: configure the number of ftm_cap_win</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.tb_ftm_cap_win_$i" [expr ($ftm_cap_win >> $i) & 1]</div>
<div>
}</div>
<div>
$prgmConfig waitRti 10</div>
<div>
##### END configure IDU transactor ##### </div>
<div>
<br /></div>
<div>
#Load atpg_clock_verif_config</div>
<div>
if {[file exist $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml]} {</div>
<div>
puts "INFO: Load atpg_clock_verif_config from $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml"</div>
<div>
set atpg_clock_verif_config [config_read_yaml $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml]</div>
<div>
} else {</div>
<div>
puts "INFO: Could not find $::env(ATE_TOT)/atpg_init/atpg_clock_verif_config.yml"</div>
<div>
set atpg_clock_verif_config [config_new_map]</div>
<div>
config_set $atpg_clock_verif_config Default/Local_OCC/name FTM_occ_control_chain_local</div>
<div>
config_set $atpg_clock_verif_config Default/Local_OCC/width 8</div>
<div>
config_set $atpg_clock_verif_config Default/NO_local_OCC/name FTM_occ_control_chain_non_local</div>
<div>
config_set $atpg_clock_verif_config Default/NO_local_OCC/width 8</div>
<div>
config_set $atpg_clock_verif_config Default/One_bit_OCC/name enable_legacy_serdes_en</div>
<div>
config_set $atpg_clock_verif_config Default/One_bit_OCC/width 1</div>
<div>
}</div>
<div>
</div>
<div>
config_set $atpg_clock_verif_config TMP/sub_clock_mode [lindex $sub_clock_mode 0]</div>
<div>
config_set $atpg_clock_verif_config TMP/sub_mode $sub_mode</div>
<div>
config_set $atpg_clock_verif_config TMP/clock_atpg_mode $clock_atpg_mode</div>
<div>
config_set $atpg_clock_verif_config TMP/num_core_shift_pulses $num_core_shift_pulses</div>
<div>
config_set $atpg_clock_verif_config TMP/serdes_slow_clk_freq_mhz $serdes_slow_clk_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/test_clk_freq_mhz $test_clk_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/scan_en_pin $scan_en_pin</div>
<div>
config_set $atpg_clock_verif_config TMP/SerdesClkList $SerdesClkList</div>
<div>
config_set $atpg_clock_verif_config TMP/TestClkList $TestClkList</div>
<div>
config_set $atpg_clock_verif_config TMP/tap_freq_mhz $tap_freq_mhz</div>
<div>
config_set $atpg_clock_verif_config TMP/enable_ip_list $enable_ip_list</div>
<div>
config_set $atpg_clock_verif_config TMP/ftm_cap_win $ftm_cap_win</div>
<div>
config_set $atpg_clock_verif_config TMP/serdes_div_ratio $serdes_div_ratio</div>
<div>
<br /></div>
<div>
#Get atpg override mode</div>
<div>
if {$enable_all_atpg_ovr_mode == "1"} {</div>
<div>
if {[config_find $atpg_clock_verif_config Override_mode] == ""} {</div>
<div>
puts "WARNING: With -enable_all_atpg_ovr_mode, but as atpg_clock_verif_config does not have Override_mode, atpg_ovr_mode_list is only DEFAULT"</div>
<div>
set atpg_ovr_mode_list [list DEFAULT]</div>
<div>
} else {</div>
<div>
set atpg_ovr_mode_list [config_map_keys [config_find $atpg_clock_verif_config Override_mode]]</div>
<div>
puts "INFO: With -enable_all_atpg_ovr_mode, atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
}</div>
<div>
} elseif {$atpg_ovr_mode_list != ""} {</div>
<div>
set atpg_ovr_mode_list_tmp ""</div>
<div>
foreach tmp $atpg_ovr_mode_list {</div>
<div>
if {[lsearch [config_map_keys [config_find $atpg_clock_verif_config Override_mode]] $tmp] == "-1"} {</div>
<div>
tn_msg_issue_ATE_102 "ERROR: $tmp that set by -atpg_ovr_mode_list does not exist in atpg_clock_verif_config.yml, Skipping"</div>
<div>
} else {</div>
<div>
set atpg_ovr_mode_list_tmp [concat $atpg_ovr_mode_list_tmp $tmp]</div>
<div>
}</div>
<div>
}</div>
<div>
set atpg_ovr_mode_list $atpg_ovr_mode_list_tmp</div>
<div>
puts "INFO: With -atpg_ovr_mode_list , atpg_ovr_mode_list is $atpg_ovr_mode_list"</div>
<div>
<br /></div>
<div>
} else {</div>
<div>
puts "INFO: Without -enable_all_atpg_ovr_mode and -atpg_ovr_mode_list, atpg_ovr_mode_list is only DEFAULT"</div>
<div>
set atpg_ovr_mode_list [list DEFAULT]</div>
<div>
}</div>
<div>
<br /></div>
<div>
#Get from ftm/s@ yml</div>
<div>
puts "INFO: relative_path_local2jtag ${relative_path_local2jtag}ftm_clock_config_${design_type}.yml"</div>
<div>
set ftmorsaClockConfig [config_read_yaml "${relative_path_local2jtag}ftm_clock_config_${design_type}.yml"]</div>
<div>
<br /></div>
<div>
#Start the test</div>
<div>
set IsFirstRun 1</div>
<div>
foreach atpg_ovr_mode $atpg_ovr_mode_list {</div>
<div>
puts "INFO: \$sub_clock_mode/mode_\${sub_mode} = $sub_clock_mode/mode_${sub_mode}"</div>
<div>
</div>
<div>
puts "INFO: Now is verifying $atpg_ovr_mode"</div>
<div>
puts "INFO: Start the override config"</div>
<div>
::ATE::atpg_init::over_mode_extra_control $prgmConfig $testConfig $atpg_clock_verif_config $atpg_ovr_mode</div>
<div>
$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
puts "INFO: Start the monitor config"</div>
<div>
::ATE::atpg_init::clock_monitor_setting $prgmConfig $testConfig $ftmorsaClockConfig $atpg_clock_verif_config $atpg_ovr_mode $IsFirstRun</div>
<div>
$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
puts "INFO: Start the test sequence"</div>
<div>
::ATE::atpg_init::clock_ftm_test_sequence $prgmConfig $testConfig $ftmorsaClockConfig $atpg_clock_verif_config $atpg_ovr_mode $IsFirstRun</div>
<div>
$prgmConfig waitRti 1</div>
<div>
set IsFirstRun 0</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "BYPASS_MODE_ISTCLOCK" $sub_clock_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::strobe_frequency_stop -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if {[config_find $testConfig CURRENT_TEST/purpose] eq "verilog"} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_enable_value TB_clock_mon_error 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value TB_clock_mon_error 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value TB_clock_mon_error X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
# add for tam, avoid shift_ir mismatch for tam with related to EOT</div>
<div>
if {$clock_atpg_mode eq "TAM"} {</div>
<div>
$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 20</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::atpg_cutpoint { prgmConfig testConfig ftm_cap_win legacy_serdes_preshift_count {debug_occ_index ""}} {</div>
<div>
<span style="white-space: pre;"> </span>puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============@cycle [$prgmConfig get_current_cycle] ENTER gprocedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set chip_name [$prgmConfig name]</div>
<div>
<span style="white-space: pre;"> </span>set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
<span style="white-space: pre;"> </span>set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] clock_mode]</div>
<div>
<span style="white-space: pre;"> </span>set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]]; # this is a list,but we only allow one element</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]; # this is a list, but we only allow one element</div>
<div>
<span style="white-space: pre;"> </span>puts "DBG_API: sub_mode = $sub_mode"</div>
<div>
<span style="white-space: pre;"> </span>set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_pin [::pkgtool::get_vlog_pins_with_test_function $die_obj {TESTCTL0}]</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {[\{\}]} $scan_en_pin {} scan_en_pin</div>
<div>
<span style="white-space: pre;"> </span>set SerdesClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=serdes4f_clk)}]</div>
<div>
<span style="white-space: pre;"> </span>set TestClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=.*)}]</div>
<div>
<span style="white-space: pre;"> </span>set UPhyTestClkList [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=uphy.*)}] </div>
<div>
<span style="white-space: pre;"> </span>foreach SerdesClk $SerdesClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $SerdesClk {\1__\2__} SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$SerdesClk"</div>
<div>
<span style="white-space: pre;"> </span>lappend NewSerdesClkList $SerdesClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $TestClk {\1__\2__} TestClk</div>
<div>
<span style="white-space: pre;"> </span>puts "cell=$TestClk"</div>
<div>
<span style="white-space: pre;"> </span>lappend NewTestClkList $TestClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set uphy_testclk_pin_List [::pkgtool::get_vlog_pins_with_test_function $die_obj {(TESTCLK=uphy.*)}]</div>
<div>
<span style="white-space: pre;"> </span>foreach UPhyTestClk $UPhyTestClkList {</div>
<div>
<span style="white-space: pre;"> </span>puts "uphy testclk is =$UPhyTestClk"</div>
<div>
<span style="white-space: pre;"> </span>regsub -all {(\w+)\[(\d+)\]} $TestClk {\1__\2__} UPhyTestClk</div>
<div>
<span style="white-space: pre;"> </span>lappend NewUPhyTestClkList $UPhyTestClk</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#serdes div ratio</div>
<div>
<span style="white-space: pre;"> </span>if {[config_find $testConfig USER_CUSTOM_ARGS/serdes_div_ratio] != ""} {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_div_ratio [config_find $testConfig USER_CUSTOM_ARGS/serdes_div_ratio] </div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_div_ratio 8</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span># JTAG tap frequency and expected serdes_fast_clk frequency</div>
<div>
<span style="white-space: pre;"> </span>set tap_freq_khz [$prgmConfig get_tap_frequency]</div>
<div>
<span style="white-space: pre;"> </span>set tap_freq_mhz [expr $tap_freq_khz * 0.001]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># TODO (kihara): I don't care about core shift in this test</div>
<div>
<span style="white-space: pre;"> </span>set num_core_shift_pulses 2;</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>#set serdes_fast_clk_freq_mhz 500.0</div>
<div>
<span style="white-space: pre;"> </span>#set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
#<span style="white-space: pre;"> </span>set test_clk_freq_mhz 90.009</div>
<div>
<span style="white-space: pre;"> </span>set test_clk_freq_mhz 62.5</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Get default ip instances when fullchip simulation</div>
<div>
<span style="white-space: pre;"> </span>if { [$prgmConfig get_design_top] eq "" } {</div>
<div>
<span style="white-space: pre;"> </span>set default_ip_list [list ]<span style="white-space: pre;"> </span> </div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>source [ls ../jtag/tu1*_pkginfo_rtl.tn]</div>
<div>
<span style="white-space: pre;"> </span>set default_ip_list [list ]</div>
<div>
<span style="white-space: pre;"> </span>foreach index [lsort -integer [array names chiplet_array]] {</div>
<div>
<span style="white-space: pre;"> </span>set ChipletInst [lindex $chiplet_array($index) 1]</div>
<div>
<span style="white-space: pre;"> </span>lappend default_ip_list $ChipletInst</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip] ne ""} {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list $default_ip_list</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>##### Write your code here #####</div>
<div>
<span style="white-space: pre;"> </span>######1. BEGIN test-bench setting #####</div>
<div>
<span style="white-space: pre;"> </span>switch -regexp $sub_mode {</div>
<div>
<span style="white-space: pre;"> </span>TAM|UPHY|PEX|FABRIC { set clock_atpg_mode "TAM" }</div>
<div>
<span style="white-space: pre;"> </span>XTR|shift_only<span style="white-space: pre;"> </span>{ set clock_atpg_mode "XTR" }</div>
<div>
<span style="white-space: pre;"> </span>default { puts "ERROR: only XTR_FTM_SERDES, TAM_EXTEST_FTM_SERDES supported!"; exit 1; }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "sub_clock_mode.clock_atpg_mode.ftm_or_sa $sub_clock_mode.$clock_atpg_mode"</div>
<div>
<span style="white-space: pre;"> </span>switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>FTM_BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 203.998</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 203.998</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>default {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_fast_clk_freq_mhz 500.0</div>
<div>
<span style="white-space: pre;"> </span>set serdes_slow_clk_freq_mhz [expr $serdes_fast_clk_freq_mhz / $serdes_div_ratio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} </div>
<div>
<span style="white-space: pre;"> </span>switch -regexp "$sub_clock_mode.$clock_atpg_mode" {</div>
<div>
<span style="white-space: pre;"> </span>STA_BYPASS_MODE_SERDESCLOCK.XTR|FTM_BYPASS_MODE_SERDESCLOCK.XTR|FTM_BYPASS_MODE_ISTCLOCK.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_trigger" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_clk_freerunning" 1</div>
<div>
<span style="white-space: pre;"> </span>set targetShiftPeriod_ps [expr int(1000000.0 / $serdes_slow_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
<span style="white-space: pre;"> </span>#set targetCapturePeriod_ps [expr int(1000000.0 / $serdes_slow_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_ISTCLOCK.XTR|nafll_Ftm.XTR {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "ftm_mode" 0; # Set ftm_mode=0 so that SCAN_EN pin will be driven as simple ext pin, not by wide_scan_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 1 ;# choose serdesclk as source shift clock for tb ftm monitor</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_serdesclk_trigger" 1 ;</div>
<div>
<span style="white-space: pre;"> </span>set targetShiftPeriod_ps [expr int(1000000.0 / $serdes_slow_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
<span style="white-space: pre;"> </span>#set targetCapturePeriod_ps [expr int(1000000.0 / $serdes_slow_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>BYPASS_MODE_TESTCLOCK.TAM {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "TB_ftm_debug_port_test_sequence_on" 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "testen_dummy" 1 ;# testen_dummy=1 to unblock wide/fake_scan_en, which will be used in new_FTM_pulse_gen_rz module.</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_serdesclk_ctrl_mode" 0 ;# choose testclk as source shift clock for tb ftm monitor </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.TB_testclk_ctrl_running_62p5" 1 ;# choose 62.5 free run testclk</div>
<div>
<span style="white-space: pre;"> </span>set targetShiftPeriod_ps [expr int(1000000.0 / $test_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module</div>
<div>
<span style="white-space: pre;"> </span>#set targetCapturePeriod_ps [expr int(1000000.0 / $test_clk_freq_mhz * 256)]; # There is "div 256" applied by the monitor module </div>
<div>
<span style="white-space: pre;"> </span>### BEGIN create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>set shift_pulse_num $num_core_shift_pulses</div>
<div>
<span style="white-space: pre;"> </span>set capture_pulse_num 1</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $TestClk 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $NewTestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[lsearch $NewSerdesClkList $TestClk] != -1} { ;# set test-bench serdes clock shift/capture to 0 in testclk based mode</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 10} {incr i} {</div>
<div>
binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 10} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>binary scan [binary format I1 $shift_pulse_num] B* binary_shift_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_shift_${TestClk}_pulse_num\[9:0\]" $binary_shift_pulse_num</div>
<div>
binary scan [binary format I1 $capture_pulse_num] B* binary_capture_pulse_num</div>
<div>
$prgmConfig jtag_force "TB_ftm_${TestClk}_pulse_num\[9:0\]" $binary_capture_pulse_num</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>### END create shift/capture clock from tb new_FTM_pulse_gen_rz module ###</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>##### END test-bench setting #####</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>#####2. BEGIN clock monitor setting:read config from yml #####</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># Get the top DUT module name</div>
<div>
<span style="white-space: pre;"> </span>set f "${relative_path_local2jtag}atpg_cutpoint_config_${design_type}.yml"</div>
<div>
<span style="white-space: pre;"> </span>if {![file exists $f]} {</div>
<div>
<span style="white-space: pre;"> </span>error "ATPG cutpoint config file $f does not exist"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set cutpointConfig [config_read_yaml $f]</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $enable_ip_list] == 1} {</div>
<div>
<span style="white-space: pre;"> </span>set target_top [lindex $enable_ip_list 0]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set target_top "nv_top"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
# Currently, only XTR FTM mode is supported</div>
<div>
#wkao, change config_map_value to config_find since the key of config_map_value can't use a hierachical format</div>
<div>
#set design_cfg [config_map_value $cutpointConfig "XTR_FTM_SERDES/$target_top"]</div>
<div>
set design_cfg [co set design_cfg [config_find $cutpointConfig "XTR_FTM_SERDES/$target_top"]</div>
<div>
if {[config_has_key $design_cfg "cutpoints"]} {</div>
<div>
set cutpoint_entries [config_list [config_map_value $design_cfg "cutpoints"]]</div>
<div>
} else {</div>
<div>
<span style="white-space: pre;"> </span> set cutpoint_entries [config_list $design_cfg]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># Number of tests = 2 + log-base-2(num_entries)</div>
<div>
<span style="white-space: pre;"> </span>set num_entries [llength $cutpoint_entries]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Print debug information on each OCC register group</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < $num_entries} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>set cutpoint [lindex $cutpoint_entries $i]</div>
<div>
<span style="white-space: pre;"> </span>puts "InfoFTM: OCC group index \[$i\] OCC registers:"</div>
<div>
<span style="white-space: pre;"> </span>foreach occ [config_list [config_find $cutpoint occ]] {</div>
<div>
<span style="white-space: pre;"> </span>puts "InfoFTM: $occ"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "InfoFTM: OCC group index \[$i\] internal cutpoints:"</div>
<div>
<span style="white-space: pre;"> </span>foreach internal [config_list [config_find $cutpoint internal]] {</div>
<div>
<span style="white-space: pre;"> </span>puts "InfoFTM: $internal"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {$debug_occ_index eq ""} {</div>
<div>
<span style="white-space: pre;"> </span># Default mode: test loop compaction through binary-search style optimization</div>
<div>
<span style="white-space: pre;"> </span>set num_tests [expr {int(2 + ceil(log($num_entries)/log(2)))}]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span># Debug mode: activate only 1 OCC group index</div>
<div>
<span style="white-space: pre;"> </span>set num_tests 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>################################################################################</div>
<div>
<span style="white-space: pre;"> </span># Turn on ATPG cutpoint monitors</div>
<div>
<span style="white-space: pre;"> </span>################################################################################</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.atpg_cutpoint_monitor_en" 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < $num_tests} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>##### 3.BEGIN configure IDU transactor #####</div>
<div>
<span style="white-space: pre;"> </span>#$prgmConfig jtag_force "tb.tb_tam_testclk_mode" 0; </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 10</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.count_capture" 0</div>
<div>
<span style="white-space: pre;"> </span>puts "serdes_div_ratio = $serdes_div_ratio"</div>
<div>
<span style="white-space: pre;"> </span>puts "num_core_shift_pulses = $num_core_shift_pulses"</div>
<div>
<span style="white-space: pre;"> </span>puts "legacy_serdes_preshift_count = $legacy_serdes_preshift_count"</div>
<div>
<span style="white-space: pre;"> </span>for {set j 0} {$j <= 15} {incr j} {</div>
<div>
<span style="white-space: pre;"> </span># 3.0: configure number of core shift length, in terms of serdes_fast_clk cycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb_xtr_num_core_shift_pulses_$j" [expr ([expr $num_core_shift_pulses + 1] >> $j) & 1];# add 1 pulse due to idu design: the output pulse from idu is shift_pulse - 1</div>
<div>
<span style="white-space: pre;"> </span># 3.1: configure the number of ftm_cap_win</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.tb_ftm_cap_win_$j" [expr ($ftm_cap_win >> $j) & 1]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 10</div>
<div>
<span style="white-space: pre;"> </span>##### END configure IDU transactor ##### </div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>###### 4.BEGIN test sequence #####</div>
<div>
<span style="white-space: pre;"> </span>#############################################################################</div>
<div>
<span style="white-space: pre;"> </span># Force OCC registers</div>
<div>
<span style="white-space: pre;"> </span>#############################################################################</div>
<div>
<span style="white-space: pre;"> </span># Get default ip instances when fullchip simulation</div>
<div>
<span style="white-space: pre;"> </span>if { [$prgmConfig get_design_top] eq "" } {</div>
<div>
<span style="white-space: pre;"> </span>set default_ip_list [list ]<span style="white-space: pre;"> </span> </div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>source [ls ../jtag/tu1*_pkginfo_rtl.tn]</div>
<div>
<span style="white-space: pre;"> </span>set default_ip_list [list ]</div>
<div>
<span style="white-space: pre;"> </span>foreach index [lsort -integer [array names chiplet_array]] {</div>
<div>
<span style="white-space: pre;"> </span>set ChipletInst [lindex $chiplet_array($index) 1]</div>
<div>
<span style="white-space: pre;"> </span>lappend default_ip_list $ChipletInst</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if {[config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip] ne ""} {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set enable_ip_list $default_ip_list</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {$clock_atpg_mode eq "TAM"} {</div>
<div>
<span style="white-space: pre;"> </span>#4.1 assert scan_en & de-assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>### below waitRti will remove after ###</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># 4.2 occ force</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::force_atpg_cutpoint_occ $prgmConfig $i $num_entries $debug_occ_index</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.3: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span> Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span> set waitCycles(scan_en_delay) [expr int(ceil(3.0 * $tap_freq_mhz / 5))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $test_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(scan_en_delay) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span> + $waitCycles(scan_en_delay) tck cycles (scan en delay)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $totalWaitCycles</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.4: de-assert scan_en, assert cap_en</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 0</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig jtag_force "${TestClk}_cap_en" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.5: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># 4.6: Need an extra scan_en posedge to check final results.</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span> Just need a posedge, no need to wait for complete shift+capture</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force seq_scan_en 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
<span style="white-space: pre;"> </span>foreach TestClk $TestClkList {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp {\[} $TestClk]} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "\\${TestClk}_cap_en " 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "${TestClk}_cap_en" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>} </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if {$clock_atpg_mode eq "XTR" } {</div>
<div>
<span style="white-space: pre;"> </span>#for IP run, always use -enable_ip arg to specify the IP under-test</div>
<div>
<span style="white-space: pre;"> </span># 4.1 de-assert scan_en at the beginning</div>
<div>
<span style="white-space: pre;"> </span>puts "set all ip IDU scan_en to 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_enable_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>#$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.2: set scan_en=1, initiate core shift state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 1 to start shift"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.3 occ load</div>
<div>
<span style="white-space: pre;"> </span>puts "program occ after scan_en 1 , need wait 10 serdes1f cycle for pipeline"</div>
<div>
<span style="white-space: pre;"> </span>puts "wait [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)] cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(10 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
<span style="white-space: pre;"> </span>switch $sub_clock_mode {</div>
<div>
<span style="white-space: pre;"> </span>"FTM_BYPASS_MODE_ISTCLOCK" { set value 3 }</div>
<div>
<span style="white-space: pre;"> </span>"BYPASS_MODE_ISTCLOCK" { set value 1 }</div>
<div>
<span style="white-space: pre;"> </span>default<span style="white-space: pre;"> </span>{ set value 3 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set width 8</div>
<div>
<span style="white-space: pre;"> </span># Force values to OCC registers individually</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::force_atpg_cutpoint_occ $prgmConfig $i $num_entries $debug_occ_index</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 10</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># 4.4: wait until core shift done</div>
<div>
<span style="white-space: pre;"> </span># Total wait time = (15 cycles @ serdes_fast_clk for FSM transition) + (core shift cycles)</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(fsm_transition) [expr int(ceil(15.0 * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(core_shift)<span style="white-space: pre;"> </span> [expr int(ceil($num_core_shift_pulses * $tap_freq_mhz / $serdes_slow_clk_freq_mhz))]</div>
<div>
<span style="white-space: pre;"> </span>set totalWaitCycles [expr $waitCycles(fsm_transition) + $waitCycles(core_shift)]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for total of \n\</div>
<div>
<span style="white-space: pre;"> </span>\ \ $waitCycles(fsm_transition) tck cycles (fsm_transition)\n\</div>
<div>
<span style="white-space: pre;"> </span>+ $waitCycles(core_shift) tck cycles (core_shift)\n\</div>
<div>
<span style="white-space: pre;"> </span>-------------------------------------------- \n\</div>
<div>
<span style="white-space: pre;"> </span>$totalWaitCycles tck cycles (TOTAL) . override to be 100"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $totalWaitCycles</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr int(20 * ([$prgmConfig get_tap_frequency]/1000) / $serdes_slow_clk_freq_mhz)]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.5: set scan_en=0, initiate capture state transition in IDU</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 0 to start capture"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># 4.6: wait until capture phase done</div>
<div>
<span style="white-space: pre;"> </span>set waitCycles(capture)<span style="white-space: pre;"> </span>[expr int(ceil($ftm_cap_win))]</div>
<div>
<span style="white-space: pre;"> </span>puts "Waiting for $waitCycles(capture) for capture"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $waitCycles(capture)</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># 4.7: Need an extra scan_en posedge to check final results. Just need a posedge, no need to wait for complete shift+capture</div>
<div>
<span style="white-space: pre;"> </span>puts "set idu scan_en input to 1 to start monitor check"</div>
<div>
<span style="white-space: pre;"> </span>foreach chiplet $enable_ip_list {</div>
<div>
if {[regexp {_t0} $chiplet]} { continue }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.tb_idu_se_input_${chiplet}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti [expr 10 + $waitCycles(fsm_transition)]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}; # foreach portConfig</div>
<div>
<span style="white-space: pre;"> </span>## stop signal monitor check</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "BYPASS_MODE_ISTCLOCK" $sub_clock_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::strobe_frequency_stop -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>################################################################################</div>
<div>
<span style="white-space: pre;"> </span># Turn off ATPG cutpoint monitors, and invoke automated diagnosis</div>
<div>
<span style="white-space: pre;"> </span>################################################################################</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.atpg_cutpoint_monitor_en" 0</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {[config_find $testConfig CURRENT_TEST/purpose] eq "verilog"} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_enable_value TB_clock_mon_error 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value TB_clock_mon_error 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value TB_clock_mon_error X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::force_atpg_cutpoint_occ { prgmConfig test_index num_occ {debug_occ_index ""}} {</div>
<div>
<span style="white-space: pre;"> </span>for {set j 0} {$j < $num_occ} {incr j} {</div>
<div>
if {$debug_occ_index != ""} {</div>
<div>
# This is a debug mode</div>
<div>
set enable [expr ($j == $debug_occ_index) ? 1 : 0]</div>
<div>
} else {</div>
<div>
<span style="white-space: pre;"> </span> # For test index 0, enable none of OCC groups.</div>
<div>
# For test index 1, enable all OCC groups.</div>
<div>
# For all others, use "test_index - 2" to construct enable/disable profile, binary-search style.</div>
<div>
# ("-2" is to account for the first 2 hardcoded tests)</div>
<div>
switch $test_index {</div>
<div>
<span style="white-space: pre;"> </span> 0<span style="white-space: pre;"> </span>{ set enable 0 }</div>
<div>
<span style="white-space: pre;"> </span> 1<span style="white-space: pre;"> </span>{ set enable 1 }</div>
<div>
<span style="white-space: pre;"> </span> default { set enable [expr {($j >> ($test_index - 2)) & 1}] }</div>
<div>
<span style="white-space: pre;"> </span> }</div>
<div>
}</div>
<div>
<br /></div>
<div>
if ($enable) {</div>
<div>
puts "InfoFTM: test loop $test_index, activate OCC register index $j."</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
puts "InfoFTM: test loop $test_index, deactivate OCC register index $j."</div>
<div>
}</div>
<div>
<br /></div>
<div>
for {set k 0} {$k < 5} {incr k} {</div>
<div>
<span style="white-space: pre;"> </span>set dst "tb.OCC_FORCE_d${j}_${k}"</div>
<div>
<span style="white-space: pre;"> </span>set v [expr {($k < 2) ? $enable : 0}]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force $dst $v</div>
<div>
<span style="white-space: pre;"> </span>puts "OCC (test loop $test_index): $dst (entry $j) = $v"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.OCC_FORCE_e${j}" 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::tam_init_seq { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_ext_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: scan_en_ext_pin $scan_en_ext_pin"</div>
<div>
<span style="white-space: pre;"> </span>if { $scan_en_ext_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: scan_en_ext pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: UFI pin list is $ufi_list"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes_4f_clk_pin $serdes_4f_clk_pin"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [ list $serdes_4f_clk_pin]</div>
<div>
<span style="white-space: pre;"> </span>if { $serdes_4f_clk_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: serdes_4f_clk pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
# TOP_FS program with force to all 0. This is required to have TOP_FS values set to 0 on fused parts</div>
<div>
$prgmConfig set_program_value {.*TOP_FS} {.*} -value 0 -replicate</div>
<div>
$prgmConfig program -force</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>switch $common_mode {</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span># any of the ICK modes BYPASS_MODE_SERDESCLOCK STA_BYPASS_MODE_SERDESCLOCK FTM_BYPASS_MODE_SERDESCLOCK</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "BYPASS_MODE_SERDESCLOCK" $common_mode]} { </div>
<div>
<span style="white-space: pre;"> </span># SDP related calculations</div>
<div>
<span style="white-space: pre;"> </span>set tam_link_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/tam_link_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set tam_ip_to_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/tam_ip_to_tam_top_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set tam_ip_broadcast_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/tam_ip_broadcast_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set tam_ip_broadcast_fast_scanin_default_pipes [config_find $testConfig "USER_CUSTOM_ARGS/tam_ip_broadcast_fast_scanin_default_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set tam_ip_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/tam_ip_tam_top_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>if {$tam_link_fast_scanin_pipes eq ""} { set tam_link_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$tam_ip_to_tam_top_fast_scanin_pipes eq ""} { set tam_ip_to_tam_top_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$tam_ip_broadcast_fast_scanin_pipes eq ""} { set tam_ip_broadcast_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$tam_ip_broadcast_fast_scanin_default_pipes eq ""} { set tam_ip_broadcast_fast_scanin_default_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$tam_ip_tam_top_fast_scanin_pipes eq ""} { set tam_ip_tam_top_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>set total_fast_scanin_pipes [expr $tam_link_fast_scanin_pipes + $tam_ip_to_tam_top_fast_scanin_pipes + $tam_ip_tam_top_fast_scanin_pipes + $tam_ip_broadcast_fast_scanin_default_pipes + $tam_ip_broadcast_fast_scanin_pipes ]</div>
<div>
<span style="white-space: pre;"> </span>set load_serializer_pipeline_stages $total_fast_scanin_pipes</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if {[expr $load_serializer_pipeline_stages % $SerdesRatio] == 0} {</div>
<div>
<span style="white-space: pre;"> </span>set serializer_override_depth $load_serializer_pipeline_stages</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span> set serializer_override_depth [expr [expr [expr $load_serializer_pipeline_stages / $SerdesRatio] * $SerdesRatio] + $SerdesRatio]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set leg_serdes_preshift_count [expr [expr $serializer_override_depth / $SerdesRatio] + 2]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: legacy serdes preshift count = $leg_serdes_preshift_count"</div>
<div>
<span style="white-space: pre;"> </span>set bit0 [expr $leg_serdes_preshift_count % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit1 [expr [expr $leg_serdes_preshift_count/2] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit2 [expr [expr $leg_serdes_preshift_count/4] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit3 [expr [expr $leg_serdes_preshift_count/8] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit4 [expr [expr $leg_serdes_preshift_count/16] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit5 [expr [expr $leg_serdes_preshift_count/32] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit6 [expr [expr $leg_serdes_preshift_count/64] % 2]</div>
<div>
<span style="white-space: pre;"> </span>set bit7 [expr [expr $leg_serdes_preshift_count/128] % 2]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount0" -value $bit0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount1" -value $bit1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount2" -value $bit2</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount3" -value $bit3</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount4" -value $bit4</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount5" -value $bit5</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount6" -value $bit6</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/LEG_SERDES_CTL" ".*TamControl_LegacySerdesPreshiftCount7" -value $bit7</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::resync_serdes { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: calling resync_serdes" </div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{fstate.arg "" "<fstate obje>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{SerdesRatio.arg "" "<serdes ratio>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{listArgs.arg "" "-option helper; resync_serdes proc"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#set fstate "../atpg_init/sa_fstate.yml"</div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig fstate SerdesRatio" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if {![regexp "^\s*$" $mainParams(ListArgs)]} {</div>
<div>
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option</div>
<div>
<span style="white-space: pre;"> </span>set subtest_option $listArgsOptions</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1</div>
<div>
<span style="white-space: pre;"> </span>## jeryang</div>
<div>
<span style="white-space: pre;"> </span>#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "XTR_STUCKAT_SERDES"</div>
<div>
<span style="white-space: pre;"> </span># jeryang</div>
<div>
<span style="white-space: pre;"> </span>set temp_bak_args $::argv</div>
<div>
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_modes: $sub_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"</div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $dft_modes_config_file]} {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: standard dft mode programming yml file found. Reading..."</div>
<div>
<span style="white-space: pre;"> </span>set dft_modeConfig [config_read_yaml $dft_modes_config_file]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."</div>
<div>
<span style="white-space: pre;"> </span>exit 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "Running resync_serdes" </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_tag_template ".*CLK_CTL" {.*} tag_<REGPATH>_I_<INSTR>_<FIELD>_<BITID> -regsub {tag_(\w+)\/.*[\.\/]([A-Za-z0-9\_]+)_cli_inst_(I_[A-Za-z0-9]+)_.*[\/\.](.*_cli_inst_[A-Za-z0-9]+_)?(.*)} {tag_$1_$2_$3_$5}</div>
<div>
<span style="white-space: pre;"> </span>puts "taking the scanio yml"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set access_config $unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $access_config]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $access_config]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>puts "ERR: need provide access config list $access_config"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>set ufi_pins [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
# We do not need this after FTC</div>
<div>
<span style="white-space: pre;"> </span># puts " Make ufi pins 0"</div>
<div>
<span style="white-space: pre;"> </span># foreach ufi_pin $ufi_pins {</div>
<div>
# if {[info exists ufi_list]} {</div>
<div>
# <span style="white-space: pre;"> </span>$prgmConfig set_pin_value $ufi_pin<span style="white-space: pre;"> </span> 0</div>
<div>
# }</div>
<div>
<span style="white-space: pre;"> </span># }</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># puts "make pex_rst_n as 1"</div>
<div>
<span style="white-space: pre;"> </span># $prgmConfig set_pin_value pex_rst_n 1</div>
<div>
<span style="white-space: pre;"> </span># puts "make nvjtag_sel as 1"</div>
<div>
<span style="white-space: pre;"> </span># $prgmConfig set_pin_value nvjtag_sel 1</div>
<div>
puts "INFO: program test_mode to 1 again, just to change the preivous register programmed from CLK_CTL to something else this should not get actually programmed."</div>
<div>
$prgmConfig set_program_value {.*DFT_AO_REGS} {.*test_mode} -value 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts " Now, make serdes4f clk as 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># set the reset state of 0 for all bits</div>
<div>
<span style="white-space: pre;"> </span>#$prgmConfig set_program_value {.*CLK_CTL} {.*} -value 0</div>
<div>
<span style="white-space: pre;"> </span># bits with reset state of 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_CTL} {.*tmc2clk_stop_on_event_.*} -value 1</div>
<div>
$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "get the previous register state"</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>#set fstate_file "../atpg_init/fstate.yml"</div>
<div>
<span style="white-space: pre;"> </span>set fstate_file $fstate</div>
<div>
<span style="white-space: pre;"> </span>set fstateConfig [config_read_yaml $fstate_file]</div>
<div>
<span style="white-space: pre;"> </span>set fstate_list [config_list [config_find $fstateConfig fstate]]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach state $fstate_list {</div>
<div>
<span style="white-space: pre;"> </span># puts "fstate is $state"</div>
<div>
<span style="white-space: pre;"> </span>set field [split $state "#"]</div>
<div>
<span style="white-space: pre;"> </span>puts " REG: [lindex $field 0] field: [lindex $field 1] value [lindex $field 2] "</div>
<div>
<span style="white-space: pre;"> </span>set REG [lindex $field 0]</div>
<div>
<span style="white-space: pre;"> </span>set REG_FIELD [lindex $field 1] </div>
<div>
<span style="white-space: pre;"> </span>set VALUE [lindex $field 2] </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value $REG $REG_FIELD -value $VALUE</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*serdes_reset_select.*} -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*serdes_divider_reset_.*} -value 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "Add 100 waitRti cycles after reset"</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "Done adding cycles" </div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set serdes_div_ratio<span style="white-space: pre;"> </span> [config_find $testConfig USER_CUSTOM_ARGS/serdes_div_ratio]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># Begin 4/17 sandbox area: T186 occ_mode test API draft</div>
<div>
<span style="white-space: pre;"> </span>if {$serdes_div_ratio eq ""} {</div>
<div>
<span style="white-space: pre;"> </span># Elastic serdes divider disabled</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes_div_ratio is $serdes_div_ratio ..."</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f_bypass is 1 ..."</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_bypass.*} -value 1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span># sel_div_programming, only when specified</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes_div_ratio is $serdes_div_ratio ..."</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f_bypass is 0 ..."</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_bypass.*} -value 0</div>
<div>
<span style="white-space: pre;"> </span>switch $serdes_div_ratio {</div>
<div>
<span style="white-space: pre;"> </span>1 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 0 }</div>
<div>
<span style="white-space: pre;"> </span>4 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 1 }</div>
<div>
<span style="white-space: pre;"> </span>6 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 2 }</div>
<div>
<span style="white-space: pre;"> </span>8 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 3 }</div>
<div>
<span style="white-space: pre;"> </span>12 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 4 }</div>
<div>
<span style="white-space: pre;"> </span>24 { $prgmConfig set_program_value {.*CLK_CTL} {.*serdes4f_sel_div.*} -value 5 }</div>
<div>
<span style="white-space: pre;"> </span>default {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: \"-serdes_div_ratio $serdes_div_ratio\" is illegal, only selectable from 1, 4, 6, 12, 24"</div>
<div>
<span style="white-space: pre;"> </span>exit 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>};#switch</div>
<div>
<span style="white-space: pre;"> </span>} ;#divider ne ""</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span># Bring serdes divider out of reset</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*serdes_divider_reset_.*} -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program </div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Add few cycles until serdes starts pulsing"</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Done adding cycles" </div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
<span style="white-space: pre;"> </span>set serdes_ratio $serdes_div_ratio</div>
<div>
<span style="white-space: pre;"> </span>set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts " Now, start serdes4f clk "</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
<span style="white-space: pre;"> </span>set serdes_ratio $serdes_div_ratio</div>
<div>
<span style="white-space: pre;"> </span>set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "done programming resync_serdes"</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::serdes_div_reset { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: In the proc serdes_div_reset"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: UFI pin list is $ufi_list"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes_4f_clk_pin $serdes_4f_clk_pin"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: ufi_pin $ufi_pin"</div>
<div>
if {$ufi_pin ne ""} {</div>
<div>
<span style="white-space: pre;"> </span> set ufi_list [ list $ufi_pin ]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [ list $serdes_4f_clk_pin ]</div>
<div>
<span style="white-space: pre;"> </span>if {!([$prgmConfig is_sim_mode] || [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] ist_mode])} {</div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: ufi_pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $serdes_4f_clk_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: serdes_4f_clk pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>switch $common_mode {</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make UFI 0 and serdes fast clock 0 at cycle $current_cycle"</div>
<div>
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger] } {</div>
<div>
puts "blueg, can't find ufi pin for now, comment out for clock sims for now"</div>
<div>
} else {</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
if {[$prgmConfig is_sim_mode]} {</div>
<div>
# ATE simulation: turn off serdes_4f_clk</div>
<div>
$prgmConfig jtag_force "TB_clk_freerunning" 0</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 20</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Asserting serdes reset and serdes load at cycle $current_cycle"</div>
<div>
#set serdes_stagger [config_find $testConfig "USER_CUSTOM_ARGS/serdes_stagger"]</div>
<div>
#set test_trigger [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger]</div>
<div>
if {[config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]] == "VECTOR"} {</div>
<div>
set sub_modes [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
set sub_modes [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>switch -regexp $sub_modes {</div>
<div>
<span style="white-space: pre;"> </span>TAM|UPHY|PEX|FABRIC { set clock_atpg_mode "TAM" }</div>
<div>
<span style="white-space: pre;"> </span>XTR|shift_only { set clock_atpg_mode "XTR" }</div>
<div>
<span style="white-space: pre;"> </span>default { puts "ERROR: only XTR_STUCKAT_SERDES, LEGACY_INTEST_STUCKAT_SERDES, and LEGACY_EXTEST_STUCKAT_SERDES supported!"; exit 1; }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
puts "dbg, blueg, sub_modes = $sub_modes; clock_atpg_mode = $clock_atpg_mode"</div>
<div>
if {[regexp "XTR" $sub_modes] || [regexp "XTR" $clock_atpg_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: program serdes stagger at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::serdes_stagger -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/CLK_PCCM_CTL" ".*serdes_reset_select" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/CLK_PCCM_CTL" ".*serdes_divider_reset_" -value 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] serdes_stagger] } {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*XTRControl_ShiftStaggerTmax" -value 0</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*Select_SerdesLoadSel" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*Select_SerdesLoad" -value 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: De-asserting serdes reset and serdes load at cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/CLK_PCCM_CTL" ".*serdes_divider_reset_" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_TAM_CTL" ".*Select_SerdesLoad" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [ expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait for 16 * serdes ratio cycles"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: cycle after wait $current_cycle"</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::serdes_stagger { args } {</div>
<div>
# get user option</div>
<div>
set mainOptions {</div>
<div>
{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
}</div>
<div>
set listArgsOptions {</div>
<div>
{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
}</div>
<div>
<br /></div>
<div>
array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "INFO: In the proc serdes_stagger"</div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
set sub_mode [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]</div>
<div>
set enable_ip_list [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] enable_ip]</div>
<div>
set subtest_name [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/name]</div>
<div>
set clock_mode [config_map_value [config_find $testConfig CURRENT_TEST] "clock_mode"]</div>
<div>
set sub_clock_mode [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CLOCK_CONFIG] $clock_mode]]</div>
<div>
<br /></div>
<div>
puts "INFO: common modes: $common_modes"</div>
<div>
</div>
<div>
if {[llength $common_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
foreach common_mode $common_modes {</div>
<div>
if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
switch $common_mode {</div>
<div>
SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]</div>
<div>
#set test_trigger [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger]</div>
<div>
set serdes_stagger [config_find $testConfig "USER_CUSTOM_ARGS/serdes_stagger"]</div>
<div>
if { [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] test_trigger] } {</div>
<div>
# XTR serdesclock mode</div>
<div>
# selStagger programming</div>
<div>
set design_type [config_map_value [config_find $testConfig CURRENT_TEST] design_type]</div>
<div>
$prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_bypass_divider|tmc2clk_serdes4f_bypass).*} -value 0</div>
<div>
switch $SerdesRatio {</div>
<div>
4 { $prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_sel_div|tmc2clk_serdes4f_sel_div).*} -value 1 }</div>
<div>
6 { $prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_sel_div|tmc2clk_serdes4f_sel_div).*} -value 2 }</div>
<div>
8 { $prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_sel_div|tmc2clk_serdes4f_sel_div).*} -value 3 }</div>
<div>
12 { $prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_sel_div|tmc2clk_serdes4f_sel_div).*} -value 4 }</div>
<div>
24 { $prgmConfig set_program_value {.*CLK_PCCM_CTL} {.*(serdes_sel_div|tmc2clk_serdes4f_sel_div).*} -value 5 }</div>
<div>
default {</div>
<div>
puts stderr "ERROR: \"serdes_div_ratio $SerdesRatio\" is illegal, only selectable from 4, 6, 8, 12, 24"</div>
<div>
exit 1</div>
<div>
}</div>
<div>
}</div>
<div>
set valid_stagger_edges(4) [list 0 1 2 3 4 5 6 7]</div>
<div>
set valid_stagger_edges(6) [list 0 1 2 3 4 5 6 7 8 9 10 11]</div>
<div>
set valid_stagger_edges(8) [list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]</div>
<div>
set valid_stagger_edges(12) [list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]</div>
<div>
set valid_stagger_edges(24) [list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]</div>
<div>
<br /></div>
<div>
if {[regexp "FTM" $sub_mode] || [regexp "shift_only" $sub_mode]} {</div>
<div>
set ftmorsaClockConfig [config_read_yaml "${relative_path_local2jtag}ftm_clock_config_${design_type}.yml"]</div>
<div>
} elseif {[regexp "STUCKAT" $sub_mode]} {</div>
<div>
if {[regexp "BYPASS_MODE_ISTCLOCK" $sub_clock_mode] && [regexp "Ftm" $subtest_name]} {</div>
<div>
puts "npan DBG, special handle for IST_Ftm2/PG_SKU_IST_Ftm2, read ftm_clock_config_rtl/flat.yml"</div>
<div>
set ftmorsaClockConfig [config_read_yaml "${relative_path_local2jtag}ftm_clock_config_${design_type}.yml"]</div>
<div>
} else {</div>
<div>
set ftmorsaClockConfig [config_read_yaml "${relative_path_local2jtag}sa_clock_config_${design_type}.yml"]</div>
<div>
}</div>
<div>
}</div>
<div>
set staggerConfig [config_find $ftmorsaClockConfig StaggerConfig]</div>
<div>
set staggerModesConfig [config_find $staggerConfig StaggerModes/${sub_mode}]</div>
<div>
foreach staggerKey [config_map_keys $staggerModesConfig] {</div>
<div>
if {[regexp {non_stagger|NonShiftStagger|CbbGroup|PAM|edge_control} $staggerKey]} {</div>
<div>
continue</div>
<div>
}</div>
<div>
set shift_mode_relation [config_find $staggerModesConfig $staggerKey/shift_mode_relation]</div>
<div>
if {[lsearch $valid_stagger_edges($SerdesRatio) $shift_mode_relation] == -1} {</div>
<div>
error "ERROR: cannot program stagger mode \"$staggerKey\" to stagger $shift_mode_relation edges.\n\</div>
<div>
valid_stagger_edges($SerdesRatio) = $valid_stagger_edges($SerdesRatio)"</div>
<div>
} else {</div>
<div>
puts "Programming stagger mode \"$staggerKey\" to stagger $shift_mode_relation edges"</div>
<div>
}</div>
<div>
regsub -all {_} $staggerKey {.*} staggerKey</div>
<div>
if {$shift_mode_relation == 0} {</div>
<div>
$prgmConfig set_program_value ".*\[\\.\\/\]${staggerKey}_cli_inst/CLK_PCCM_CTL" {.*serdes_enable_stagger} -value 0</div>
<div>
$prgmConfig set_program_value ".*\[\\.\\/\]${staggerKey}_cli_inst/CLK_PCCM_CTL" {.*serdes_selStagger} -value 0</div>
<div>
} else {</div>
<div>
$prgmConfig set_program_value ".*\[\\.\\/\]${staggerKey}_cli_inst/CLK_PCCM_CTL" {.*serdes_enable_stagger} -value 1</div>
<div>
$prgmConfig set_program_value ".*\[\\.\\/\]${staggerKey}_cli_inst/CLK_PCCM_CTL" {.*serdes_selStagger} -value [expr $shift_mode_relation-1]</div>
<div>
}</div>
<div>
}</div>
<div>
} elseif { $serdes_stagger eq "1" } {</div>
<div>
set SerdesStaggerConfig [config_read_yaml "${relative_path_local2jtag}Stagger_Assign_opt2.yaml"]</div>
<div>
set StaggerAssignConfig [config_find $SerdesStaggerConfig CLOCK_STAGGER_ASSIGNMENT]</div>
<div>
foreach staggerKey [config_map_keys $StaggerAssignConfig] {</div>
<div>
#set staggerValue [config_find $StaggerAssignConfig $staggerKey]</div>
<div>
set staggerValue [config_map_value $StaggerAssignConfig $staggerKey]</div>
<div>
puts "Key: is $staggerKey and value is $staggerValue"</div>
<div>
regsub -all {[\%]} $staggerKey {.*} staggerKey</div>
<div>
regsub -all {[\/]} $staggerKey {.*} staggerKey</div>
<div>
regsub -all {nv_top} $staggerKey {} staggerKey</div>
<div>
puts "Key: is $staggerKey and value is $staggerValue"</div>
<div>
if {$staggerValue ne "1"} {</div>
<div>
$prgmConfig set_program_value "$staggerKey.*CLK_PCCM_CTL" ".*serdes_enable_stagger.*" -value 1</div>
<div>
$prgmConfig set_program_value "$staggerKey.*CLK_PCCM_CTL" ".*serdes_selStagger.*" -value [expr $staggerValue-2]</div>
<div>
}</div>
<div>
}</div>
<div>
} else {</div>
<div>
puts "if no test_trigger no serdes_stagger, will not program shift stagger anyway"</div>
<div>
} </div>
<div>
$prgmConfig program</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::ufi_selftest { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: in the proc ufi_selftest"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_ext_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: scan_en_ext_pin $scan_en_ext_pin"</div>
<div>
<span style="white-space: pre;"> </span>if { $scan_en_ext_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: scan_en_ext pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: UFI pin list is $ufi_list"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]</div>
<div>
if {$ufi_pin ne ""} {</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list<span style="white-space: pre;"> </span> [list $ufi_pin]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list<span style="white-space: pre;"> </span>[list $serdes_4f_clk_pin]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>switch $common_mode {</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set padding_list [::ATE::atpg_init::get_padding_cycles -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingHeadCycles [ lindex $padding_list 0 ]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCycles [ lindex $padding_list 1 ]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCyclesForUfiSelfTest [ lindex $padding_list 2 ]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting UFI 0"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting scan enable to 1"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting 4f clock to 0"</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 5* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 5 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: De-assert ufi_reset"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_reset_" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_mode" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 20</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># num_1500_pipelines wait</div>
<div>
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Waiting for 1500 pipelines $num_1500_pipelines before ufi sequence"</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} { $prgmConfig waitRti 5 }</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After additional 100 waitRti wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Verify UFI is in RESET Mode and TLR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_tlr -ufi_mode xtr_ufi_mode_reset</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to move in IDLE Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1001</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
</div>
<div>
<br /></div>
<div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_tlr -ufi_mode xtr_ufi_mode_reset</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to move in IDLE Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1001</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_idle</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in IDLE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_idle</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in CODEC_DRC Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0010</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CODEC_DRC Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in OCC_LOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0011</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in OCC_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_occ_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in MISR_UNLOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0100</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_UNLOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in RESEED_LOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0101</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in RESEED_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_reseed_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in PATTERN_COUNTER_LOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0110</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in PATTERN_COUNTER_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_pattern_counter_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in CAPTURE Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0111</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in CAPTURE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_capture</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in MISR_SHADOW_STATUS_UPDATE Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0100</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0111</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UPDATE Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_status_update</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in MISR_SHADOW_STATUS_UNLOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0111</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_STATUS_UNLOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_status_unload</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in MISR_SHADOW_LOAD Mode and RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0011</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0111</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state mask -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and move to CDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_captureDR -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and move to SDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_shiftDR -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and mode to EDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_exit1DR -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and move to UDR State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_updateDR -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to stay in MISR_SHADOW_LOAD Mode and move to RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_misr_shadow_load</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>## Sequence UFI to Move in CODEC_DRC Mode and RTI-->CDR-->EDR-->UDR-->RTI State</div>
<div>
<span style="white-space: pre;"> </span>## ------------------------------------------------------------</div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } { $prgmConfig wait_cycles $PreamblePaddingHeadCycles }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0010</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCyclesForUfiSelfTest ne "0" } { $prgmConfig wait_cycles $PreamblePaddingTailCyclesForUfiSelfTest }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCyclesForUfiSelfTest $cycle_post_wait"</div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } { $prgmConfig wait_cycles $wait_cnt }</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle count after tck_multiple fix $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_expect -prgmConfig $prgmConfig -testConfig $testConfig -ufi_state xtr_ufi_state_rti -ufi_mode xtr_ufi_mode_codec_drc</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::ufi_reset_sequence { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
{xtr_ip_controller_skip_list.arg "" "list of IP which is required to skip IP controller progm during IST"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig xtr_ip_controller_skip_list " {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: In the proc ufi_reset_sequence"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set scan_en_ext_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCTL0 ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: scan_en_ext_pin $scan_en_ext_pin"</div>
<div>
<span style="white-space: pre;"> </span>if { $scan_en_ext_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: scan_en_ext pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: UFI pin list is $ufi_list"</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>set serdes_4f_clk_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj TESTCLK=serdes4f_clk ] 0]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: serdes_4f_clk_pin $serdes_4f_clk_pin"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: ufi_pin $ufi_pin"</div>
<div>
if {$ufi_pin ne ""} {</div>
<div>
<span style="white-space: pre;"> </span> set ufi_list [ list $ufi_pin]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>set serdes4f_list [ list $serdes_4f_clk_pin]</div>
<div>
<span style="white-space: pre;"> </span>if {!([$prgmConfig is_sim_mode] || [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] ist_mode])} { </div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: ufi_pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $serdes_4f_clk_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: serdes_4f_clk pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: common modes: $common_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $common_modes] eq "0"} {</div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
<span style="white-space: pre;"> </span>exit 1<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
<span style="white-space: pre;"> </span>switch $common_mode {</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S4 { set SerdesRatio 4 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S6 { set SerdesRatio 6 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S8 { set SerdesRatio 8 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S12 { set SerdesRatio 12 }</div>
<div>
<span style="white-space: pre;"> </span>SERDES_RATIO_S24 { set SerdesRatio 24 }</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set padding_list [::ATE::atpg_init::get_padding_cycles -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingHeadCycles [ lindex $padding_list 0 ]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCycles [ lindex $padding_list 1 ]</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCyclesForUfiSelfTest [ lindex $padding_list 2 ]</div>
<div>
<span style="white-space: pre;"> </span>#puts "PreamblePaddingHeadCycles $PreamblePaddingHeadCycles"</div>
<div>
<span style="white-space: pre;"> </span>#puts "PreamblePaddingTailCycles $PreamblePaddingTailCycles"</div>
<div>
<span style="white-space: pre;"> </span>#puts "PreamblePaddingTailCyclesForUfiSelfTest $PreamblePaddingTailCyclesForUfiSelfTest"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting UFI 0"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting scan enable to 1"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting 4f clock to 0"</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
puts "vxiao ufi_list=$ufi_list"</div>
<div>
<span style="white-space: pre;"> </span> foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 5* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 5 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>set se_deassert [config_find $testConfig "USER_CUSTOM_ARGS/se_deassert"]</div>
<div>
<span style="white-space: pre;"> </span>set se_assert [config_find $testConfig "USER_CUSTOM_ARGS/se_assert"]</div>
<div>
<span style="white-space: pre;"> </span>set capture_count [config_find $testConfig "USER_CUSTOM_ARGS/capture_count"]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $se_deassert ne "" } {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: set xtr_ufi_se_deassert_ctrl to $se_deassert"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_se_deassert_ctrl" -value $se_deassert</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $se_assert ne "" } {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: set xtr_ufi_se_assert_ctrl to $se_assert"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_se_assert_ctrl" -value $se_assert</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $capture_count ne "" } {</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: set xtr_ufi_capture_count to $capture_count"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_capture_count" -value $capture_count</div>
<div>
<span style="white-space: pre;"> </span>#} else {</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span># set a default value of 8 if it is not defined</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span>set capture_count 8</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span>puts "INFO: set xtr_ufi_capture_count to $capture_count"</div>
<div>
<span style="white-space: pre;"> </span>#<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_capture_count" -value $capture_count</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Assert ufi_reset"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_reset_" -value 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 20</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Waiting for 1500 pipelines $num_1500_pipelines before ufi sequence"</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set xtr_target_ip_list [config_find $testConfig USER_CUSTOM_ARGS/xtr_target_ip_list]</div>
<div>
# set xtr_ip_controller_skip_list $params(xtr_ip_controller_skip_list)</div>
<div>
# <span style="white-space: pre;"> </span>set xtr_ip_controller_skip_list [config_find $testConfig USER_CUSTOM_ARGS/xtr_ip_controller_skip_list]</div>
<div>
<br /></div>
<div>
# NEW ARG require:</div>
<div>
#full chip: </div>
<div>
# xtr_ip_controller_skip_list.arg</div>
<div>
# capture_count.arg</div>
<div>
# chiplet_string.arg</div>
<div>
# chiplet_id_bit.arg</div>
<div>
# xtr_scan_in.arg</div>
<div>
# status_link_width.arg</div>
<div>
#IP level:</div>
<div>
# chiplet_id_bit.arg</div>
<div>
# xtr_scan_in.arg</div>
<div>
# status_link_width.arg</div>
<div>
<br /></div>
<div>
set IST_MODE 0</div>
<div>
set full_test_name [config_map_value [config_find $testConfig CURRENT_TEST] name]</div>
<div>
<span style="white-space: pre;"> </span>set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
foreach common_mode $common_modes {</div>
<div>
<span style="white-space: pre;"> </span>if {[regexp "IST_LBIST_" $common_mode]} {</div>
<div>
set IST_MODE 1;</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span> set xtr_link_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanin_pipes"]</div>
<div>
set xtr_link_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanout_pipes"]</div>
<div>
set xtr_ip_to_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_to_tam_top_fast_scanin_pipes"]</div>
<div>
set xtr_ip_from_tam_top_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_from_tam_top_fast_scanout_pipes"]</div>
<div>
set xtr_ip_broadcast_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_broadcast_fast_scanin_pipes"]</div>
<div>
set xtr_ip_broadcast_fast_scanin_default_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_broadcast_fast_scanin_default_pipes"]</div>
<div>
set xtr_ip_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_tam_top_fast_scanin_pipes"]</div>
<div>
set xtr_ip_tam_top_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_tam_top_fast_scanout_pipes"]</div>
<div>
set xtr_ip_control_slow_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_pipes"]</div>
<div>
set xtr_ip_control_slow_default_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_default_pipes"]</div>
<div>
set xtr_ip_control_slow_compensatory_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_compensatory_pipes"]</div>
<div>
set xtr_ip_misr_slow_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_misr_slow_pipes"]</div>
<div>
<br /></div>
<div>
# set chiplet_name [config_find $testConfig "USER_CUSTOM_ARGS/chiplet_string"]</div>
<div>
# set chiplet_id_offset [config_find $testConfig "USER_CUSTOM_ARGS/chiplet_id_bit"]</div>
<div>
# set xtr_scan_in_int [config_find $testConfig "USER_CUSTOM_ARGS/xtr_scan_in"]</div>
<div>
# set status_link_wd [config_find $testConfig "USER_CUSTOM_ARGS/status_link_width"]</div>
<div>
set capture_count [config_find $testConfig "USER_CUSTOM_ARGS/capture_count"]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_reset_" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" ".*xtr_ufi_mode" -value 1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 20</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Waiting for 1500 pipelines $num_1500_pipelines before ufi sequence"</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti 5</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After additional 100 waitRti wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi reset deassert $cycle_ufi_start"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_4f_start [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Setting serdes fast clock to 1 at cycle $cycle_4f_start"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: wait for 16* SerdesRatio"</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [expr 16 * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_start - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cnt</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingHeadCycles ne "0" } {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $PreamblePaddingHeadCycles</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingHeadCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1001</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0010</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 1000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0000</div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::ufi_program -prgmConfig $prgmConfig -testConfig $testConfig -SerdesRatio $SerdesRatio -ufi_val 0001</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after UFI programming $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $PreamblePaddingTailCycles ne "0" } {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $PreamblePaddingTailCycles</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number after PreamblePaddingTailCycles $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_ufi_stop [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of ufi program end $cycle_ufi_stop"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set wait_cnt [expr $SerdesRatio - [expr [expr $cycle_ufi_stop - $cycle_4f_start] % $SerdesRatio]]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Wait count for 4f 1f sync $wait_cnt"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $wait_cnt ne "0" } {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cnt</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Cycle number at the time of 4f 1f sync $cycle_post_wait"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Make 4f clock and scan en 0"</div>
<div>
<span style="white-space: pre;"> </span>foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_pin_value $scan_en_ext_pin 0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>::ATE::atpg_init::fix_wait_cycles -prgmConfig $prgmConfig -testConfig $testConfig</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set cycle_post_wait [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>#puts "cycle number $cycle_post_wait"</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::ufi_program { args } {</div>
<div>
<span style="white-space: pre;"> </span>global unified_scan_spec</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{SerdesRatio.arg "" "<serdes ratio>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{ufi_val.arg "" "<ufi_val>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig SerdesRatio ufi_val" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>#puts "In the proc ufi_program SerdesRatio $SerdesRatio"</div>
</div>
<div>
<br /></div>
<div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: programming UFI to $ufi_val"</div>
<div>
<span style="white-space: pre;"> </span>set ufi_arr [split $ufi_val {} ]</div>
<div>
<span style="white-space: pre;"> </span>set UMS_0 [lindex $ufi_arr 3]</div>
<div>
<span style="white-space: pre;"> </span>set UMS_1 [lindex $ufi_arr 2]</div>
<div>
<span style="white-space: pre;"> </span>set UMS_2 [lindex $ufi_arr 1]</div>
<div>
<span style="white-space: pre;"> </span>set UFS [lindex $ufi_arr 0]</div>
<div>
<span style="white-space: pre;"> </span>#puts "UFS $UFS UMS_2 $UMS_2 UMS_1 $UMS_1 UMS_0 $UMS_0 "</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>if { [file exists $unified_scan_spec]} {</div>
<div>
<span style="white-space: pre;"> </span>set accessConfig [config_read_yaml $unified_scan_spec]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set die_obj [config_find $testConfig "CURRENT_TEST/die_obj"]</div>
<div>
<span style="white-space: pre;"> </span>set ufi_pin [lindex [::pkgtool::get_vlog_pins_with_test_function $die_obj UFI ] 0 ]</div>
<div>
<span style="white-space: pre;"> </span>if {!([$prgmConfig is_sim_mode] || [config_map_value [config_find $testConfig USER_CUSTOM_ARGS] ist_mode])} {</div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_pin eq "" } { </div>
<div>
<span style="white-space: pre;"> </span>puts stderr "ERROR: ufi_pin is not defined" </div>
<div>
<span style="white-space: pre;"> </span>exit 1 </div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
if {$ufi_pin ne ""} {</div>
<div>
<span style="white-space: pre;"> </span> set ufi_list [list $ufi_pin]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set loop_cnt [expr $SerdesRatio - 4]</div>
<div>
<span style="white-space: pre;"> </span>#puts "loop_cnt $loop_cnt"</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<span style="white-space: pre;"> </span> for {set i 0} {$i < $loop_cnt} {incr i} {</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span> <span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span> }</div>
<div>
}</div>
<div>
if {[info exists ufi_list]} {</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin $UMS_0 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin $UMS_1 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin $UMS_2 }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin $UFS }</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles 1</div>
<div>
<span style="white-space: pre;"> </span>foreach ufi_pin $ufi_list { $prgmConfig set_pin_value $ufi_pin 0 }</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::ufi_expect { args } {</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{ufi_state.arg "" "<ufi_state>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{ufi_mode.arg "" "<ufi_state>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig ufi_state ufi_mode" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: expecting UFI to be in $ufi_state $ufi_mode at $curr_cyc"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_reset<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_idle<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_codec_drc<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_occ_load<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_misr_unload<span style="white-space: pre;"> </span>-expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_misr_shadow_status_unload -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_misr_shadow_load<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_misr_shadow_status_update -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_reseed_load<span style="white-space: pre;"> </span>-expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_pattern_counter_load<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_capture<span style="white-space: pre;"> </span>-expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_tlr<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_rti<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_captureDR<span style="white-space: pre;"> </span>-expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_shiftDR<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_exit1DR<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_updateDR<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_updateIR<span style="white-space: pre;"> </span> -expected 1'b0</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_state eq "mask" } { </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_tlr<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_rti<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_captureDR<span style="white-space: pre;"> </span> -expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_shiftDR<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_exit1DR<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_updateDR<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_state_updateIR<span style="white-space: pre;"> </span>-expected X</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" $ufi_state<span style="white-space: pre;"> </span>-expected 1'b1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>if { $ufi_mode eq "xtr_ufi_mode_capture" } { </div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" xtr_ufi_mode_reseed_load<span style="white-space: pre;"> </span> -expected 1'b1</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" $ufi_mode<span style="white-space: pre;"> </span>-expected 1'b1</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig set_program_value ".*/XTR_UFI_FSM" $ufi_mode<span style="white-space: pre;"> </span>-expected 1'b1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig program</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set num_1500_pipelines [$prgmConfig get_total_num_ieee1500_pipelines]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Waiting for 1500 pipelines $num_1500_pipelines "</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: Before wait cycle $current_cycle"</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig waitRti $num_1500_pipelines</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># additional 100 waitRti as the above only applies tck for 5 + 5 = 10 waitRti</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < 20} {incr i} { $prgmConfig waitRti 5 }</div>
<div>
<span style="white-space: pre;"> </span>set current_cycle [ $prgmConfig get_current_cycle ]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After additional 100 waitRti wait cycle $current_cycle"</div>
<div>
<br /></div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::FORCE_CLOCK_CHAIN { prgmConfig testConfig name width value} {</div>
<div>
<span style="white-space: pre;"> </span>puts "WARN: Forceing clock chain"</div>
<div>
<span style="white-space: pre;"> </span>set temp [new_binary_vector $width]</div>
<div>
<span style="white-space: pre;"> </span>set msb [expr $width - 1]</div>
<div>
<span style="white-space: pre;"> </span>set lsb 0</div>
<div>
<span style="white-space: pre;"> </span>set chip_name [$prgmConfig name]</div>
<div>
<span style="white-space: pre;"> </span>set_range $temp $msb $lsb "$width'h$value"</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.clock_chain_force.enable_${name}_force" 1</div>
<div>
<span style="white-space: pre;"> </span>if { $width eq "1"} {</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig jtag_force "tb.clock_chain_force.${name}_data" $value</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>for {set i 0} {$i < $width} {incr i} {</div>
<div>
if {[regexp "GAA" $chip_name]} {</div>
<div>
# npan, don't force tb.clock_chain_force.enable_edge_control_chain_data_ as we don't have edgecontrol in ga100.</div>
<div>
if {$name ne "enable_edge_control_chain"} {</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig jtag_force "tb.clock_chain_force.${name}_data_$i" [get_range $temp $i $i]</div>
<div>
}</div>
<div>
} else {</div>
<div>
<span style="white-space: pre;"> </span> $prgmConfig jtag_force "tb.clock_chain_force.${name}_data_$i" [get_range $temp $i $i]</div>
<div>
}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::get_padding_cycles { args } {</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{SerdesRatio.arg "" "<serdes ratio>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig SerdesRatio" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># SDP related calculations</div>
<div>
<span style="white-space: pre;"> </span>set xtr_link_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_link_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_link_fast_scanout_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_to_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_to_tam_top_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_from_tam_top_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_from_tam_top_fast_scanout_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_broadcast_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_broadcast_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_broadcast_fast_scanin_default_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_broadcast_fast_scanin_default_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_tam_top_fast_scanin_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_tam_top_fast_scanin_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_tam_top_fast_scanout_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_tam_top_fast_scanout_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_control_slow_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_control_slow_default_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_default_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_control_slow_compensatory_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_control_slow_compensatory_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>set xtr_ip_misr_slow_pipes [config_find $testConfig "USER_CUSTOM_ARGS/xtr_ip_misr_slow_pipes"]</div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_link_fast_scanin_pipes eq ""} { set xtr_link_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_link_fast_scanout_pipes eq ""} { set xtr_link_fast_scanout_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_to_tam_top_fast_scanin_pipes eq ""} { set xtr_ip_to_tam_top_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_from_tam_top_fast_scanout_pipes eq ""} { set xtr_ip_from_tam_top_fast_scanout_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_broadcast_fast_scanin_pipes eq ""} { set xtr_ip_broadcast_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_broadcast_fast_scanin_default_pipes eq ""} { set xtr_ip_broadcast_fast_scanin_default_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_tam_top_fast_scanin_pipes eq ""} { set xtr_ip_tam_top_fast_scanin_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_tam_top_fast_scanout_pipes eq ""} { set xtr_ip_tam_top_fast_scanout_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_control_slow_pipes eq ""} { set xtr_ip_control_slow_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_control_slow_default_pipes eq ""} { set xtr_ip_control_slow_default_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_control_slow_compensatory_pipes eq ""} { set xtr_ip_control_slow_compensatory_pipes 0 } </div>
<div>
<span style="white-space: pre;"> </span>if {$xtr_ip_misr_slow_pipes eq ""} { set xtr_ip_misr_slow_pipes 0 } </div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set ExternalCyclesPerShift $SerdesRatio</div>
<div>
<span style="white-space: pre;"> </span>set total_fast_scanin_pipes [expr $xtr_link_fast_scanin_pipes + $xtr_ip_to_tam_top_fast_scanin_pipes + $xtr_ip_tam_top_fast_scanin_pipes + $xtr_ip_broadcast_fast_scanin_default_pipes + $xtr_ip_broadcast_fast_scanin_pipes ]</div>
<div>
<span style="white-space: pre;"> </span>set total_full_fast_scanin_pipe_fast_cycles [expr [expr [expr $total_fast_scanin_pipes + [expr $SerdesRatio * 2] ] / $SerdesRatio ] * $SerdesRatio ]</div>
<div>
<span style="white-space: pre;"> </span>set total_slow_scanin_pipes [expr $xtr_ip_control_slow_default_pipes + $xtr_ip_control_slow_pipes]</div>
<div>
<span style="white-space: pre;"> </span>set total_full_slow_scanin_pipe_fast_cycles [expr $total_slow_scanin_pipes * $SerdesRatio]</div>
<div>
<span style="white-space: pre;"> </span>set total_fast_scanout_pipe_fast_cycles [expr $xtr_link_fast_scanout_pipes + $xtr_ip_from_tam_top_fast_scanout_pipes + $xtr_ip_tam_top_fast_scanout_pipes + $SerdesRatio + 1 ] </div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>set InternalLoadDelay [expr $total_full_fast_scanin_pipe_fast_cycles + $total_full_slow_scanin_pipe_fast_cycles ]</div>
<div>
<span style="white-space: pre;"> </span>set InternalIDUDelay $total_full_fast_scanin_pipe_fast_cycles</div>
<div>
<span style="white-space: pre;"> </span>set InternalUnloadDelay $total_fast_scanout_pipe_fast_cycles</div>
<div>
<span style="white-space: pre;"> </span>set AdditionalLoadDelay [expr $total_fast_scanin_pipes % $SerdesRatio] </div>
<div>
<span style="white-space: pre;"> </span>set NumCodecDrcChainFastInputCells [expr $xtr_link_fast_scanin_pipes + $xtr_ip_to_tam_top_fast_scanin_pipes + $xtr_ip_tam_top_fast_scanin_pipes ]</div>
<div>
<span style="white-space: pre;"> </span>set NumCodecDrcChainFastOutputCells [expr $xtr_link_fast_scanout_pipes + $xtr_ip_from_tam_top_fast_scanout_pipes + $xtr_ip_tam_top_fast_scanout_pipes]</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>#set PreamblePaddingTailCycles $total_fast_scanin_pipes</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCycles $InternalLoadDelay</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingTailCyclesForUfiSelfTest $InternalIDUDelay</div>
<div>
<span style="white-space: pre;"> </span>if {$AdditionalLoadDelay == 0} {</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingHeadCycles 0</div>
<div>
<span style="white-space: pre;"> </span>} else {</div>
<div>
<span style="white-space: pre;"> </span>set PreamblePaddingHeadCycles [expr $SerdesRatio - $AdditionalLoadDelay]</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: PreamblePaddingHeadCycles $PreamblePaddingHeadCycles"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: PreamblePaddingTailCycles $PreamblePaddingTailCycles"</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: PreamblePaddingTailCyclesForUfiSelfTest $PreamblePaddingTailCyclesForUfiSelfTest"</div>
<div>
<span style="white-space: pre;"> </span>return [list $PreamblePaddingHeadCycles $PreamblePaddingTailCycles $PreamblePaddingTailCyclesForUfiSelfTest]</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::fix_wait_cycles { args } {</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>if {[ expr $curr_cyc % $tck_mult ] != 0} {</div>
<div>
<span style="white-space: pre;"> </span>set wait_cyc [ expr $tck_mult - [ expr $curr_cyc % $tck_mult ]]</div>
<div>
<span style="white-space: pre;"> </span>$prgmConfig wait_cycles $wait_cyc</div>
<div>
<span style="white-space: pre;"> </span>set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::reset_from_sf { args } {</div>
<div>
global unified_scan_spec</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============ENTER procedure: [lindex [info level 0] 0]=============="</div>
<div>
# get user option</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: calling reset_from_sf" </div>
<div>
set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{fstate.arg "" "<fstate obje>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{SerdesRatio.arg "" "<serdes ratio>" "NO_CUSTOMIZE"}</div>
<div>
{listArgs.arg "" "-option helper; resync_serdes proc"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig fstate SerdesRatio" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
}</div>
<div>
if {![regexp "^\s*$" $mainParams(ListArgs)]} {</div>
<div>
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option</div>
<div>
<span style="white-space: pre;"> </span>set subtest_option $listArgsOptions</div>
<div>
<br /></div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1</div>
<div>
<span style="white-space: pre;"> </span>## jeryang</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "XTR_STUCKAT_SERDES"</div>
<div>
<span style="white-space: pre;"> </span># jeryang</div>
<div>
<span style="white-space: pre;"> </span>set temp_bak_args $::argv</div>
<div>
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
}</div>
<div>
</div>
<div>
foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
}</div>
<div>
<br /></div>
<div>
set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]</div>
<div>
puts "INFO: sub_modes: $sub_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
</div>
<div>
set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"</div>
<div>
if { [file exists $dft_modes_config_file]} {</div>
<div>
puts "INFO: standard dft mode programming yml file found. Reading..."</div>
<div>
set dft_modeConfig [config_read_yaml $dft_modes_config_file]</div>
<div>
} else {</div>
<div>
puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."</div>
<div>
exit 1</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "Running reset_from_sf" </div>
<div>
<br /></div>
<div>
set access_config $unified_scan_spec</div>
<div>
if { [file exists $access_config]} {</div>
<div>
set accessConfig [config_read_yaml $access_config]</div>
<div>
} else {</div>
<div>
puts "ERR: need provide access config list $access_config"</div>
<div>
}</div>
<div>
<br /></div>
<div>
set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
set ufi_pins [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
# We do not need this after FTC</div>
<div>
# puts " Make ufi pins 0"</div>
<div>
# foreach ufi_pin $ufi_pins {</div>
<div>
# $prgmConfig set_pin_value $ufi_pin 0</div>
<div>
# }</div>
<div>
<br /></div>
<div>
# ##need to review this pex_rst_n</div>
<div>
# puts "make pex_rst_n as 1"</div>
<div>
# #$prgmConfig set_pin_value pex_rst_n 1</div>
<div>
# puts "make nvjtag_sel as 1"</div>
<div>
# $prgmConfig set_pin_value nvjtag_sel 1</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
puts " Now, make serdes4f clk as 0"</div>
<div>
foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
## set all the bits to reset value of 0.</div>
<div>
$prgmConfig set_program_value {.*ATPG_CTL} {.*} -value 0 -replicate</div>
<div>
<br /></div>
<div>
# set FSvalidation bits to 1, as that is the reset value</div>
<div>
# $prgmConfig set_program_value {.*ATPG_CTL} {.*FSvalidation.*} -value 1</div>
<div>
# $prgmConfig set_program_value {.*DFT_FS_CTRL} {.*DFT_FS_CTRL} -value 1</div>
<div>
puts "get the previous register state"</div>
<div>
</div>
<div>
#set fstate_file "../atpg_init/fstate.yml"</div>
<div>
set fstate_file $fstate</div>
<div>
set fstateConfig [config_read_yaml $fstate_file]</div>
<div>
set fstate_list [config_list [config_find $fstateConfig fstate]]</div>
<div>
<br /></div>
<div>
foreach state $fstate_list {</div>
<div>
# puts "fstate is $state"</div>
<div>
set field [split $state "#"]</div>
<div>
puts " REG: [lindex $field 0] field: [lindex $field 1] value [lindex $field 2] "</div>
<div>
set REG [lindex $field 0]</div>
<div>
set REG_FIELD [lindex $field 1] </div>
<div>
set VALUE [lindex $field 2] </div>
<div>
$prgmConfig set_program_value $REG $REG_FIELD -value $VALUE</div>
<div>
}</div>
<div>
<br /></div>
<div>
# Set reset from scan flop to 1</div>
<div>
$prgmConfig set_program_value {.*ATPG_CTL} {.*RESET_1500_OVERRIDE_RESET_1500_OVERRIDE_select_atpg_ctl.*} -value 1</div>
<div>
$prgmConfig program</div>
<div>
<br /></div>
<div>
#serdes div ratio</div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
puts "INFO: common modes: $common_modes"</div>
<div>
if {[llength $common_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
foreach common_mode $common_modes {</div>
<div>
if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
switch $common_mode {</div>
<div>
SERDES_RATIO_S4 { set serdes_div_ratio 4 }</div>
<div>
SERDES_RATIO_S6 { set serdes_div_ratio 6 }</div>
<div>
SERDES_RATIO_S8 { set serdes_div_ratio 8 }</div>
<div>
SERDES_RATIO_S12 { set serdes_div_ratio 12 }</div>
<div>
SERDES_RATIO_S24 { set serdes_div_ratio 24 }</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "INFO: Add few cycles until serdes starts pulsing"</div>
<div>
for {set i 0} {$i < 20} {incr i} {</div>
<div>
$prgmConfig waitRti 5</div>
<div>
}</div>
<div>
puts "INFO: Done adding cycles" </div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
set serdes_ratio $serdes_div_ratio</div>
<div>
set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
$prgmConfig wait_cycles $wait_cyc</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts " Now, start serdes4f clk "</div>
<div>
foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
$prgmConfig program</div>
<div>
$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<br /></div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
set serdes_ratio $serdes_div_ratio</div>
<div>
set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
$prgmConfig wait_cycles $wait_cyc</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "done programming reset_from_sf"</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::fs_top_up { args } {</div>
<div>
global unified_scan_spec</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============ENTER procedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: calling fs_top_up" </div>
<div>
set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{SerdesRatio.arg "" "<serdes ratio>" "NO_CUSTOMIZE"}</div>
<div>
{listArgs.arg "" "-option helper; resync_serdes proc"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig SerdesRatio" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
}</div>
<div>
if {![regexp "^\s*$" $mainParams(ListArgs)]} {</div>
<div>
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option</div>
<div>
<span style="white-space: pre;"> </span>set subtest_option $listArgsOptions</div>
<div>
<br /></div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1</div>
<div>
<span style="white-space: pre;"> </span>## jeryang</div>
<div>
#::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "XTR_STUCKAT_SERDES"</div>
<div>
<span style="white-space: pre;"> </span># jeryang</div>
<div>
<span style="white-space: pre;"> </span>set temp_bak_args $::argv</div>
<div>
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
}</div>
<div>
</div>
<div>
foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
}</div>
<div>
<br /></div>
<div>
set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]</div>
<div>
puts "INFO: sub_modes: $sub_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
</div>
<div>
set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"</div>
<div>
if { [file exists $dft_modes_config_file]} {</div>
<div>
puts "INFO: standard dft mode programming yml file found. Reading..."</div>
<div>
set dft_modeConfig [config_read_yaml $dft_modes_config_file]</div>
<div>
} else {</div>
<div>
puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."</div>
<div>
exit 1</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "Running fs_top_up" </div>
<div>
<br /></div>
<div>
set access_config $unified_scan_spec</div>
<div>
if { [file exists $access_config]} {</div>
<div>
set accessConfig [config_read_yaml $access_config]</div>
<div>
} else {</div>
<div>
puts "ERR: need provide access config list $access_config"</div>
<div>
}</div>
<div>
<br /></div>
<div>
set serdes4f_list [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/SERDES_CLK_PORTS]]</div>
<div>
puts "INFO: serdes4f pin list is $serdes4f_list"</div>
<div>
set ufi_pins [config_list [config_find $accessConfig SCAN_IOS/XTREME_X4/STYLE_SPECIFIC_CONFIG/XTREME_UFI_PORTS]]</div>
<div>
# We do not need this after FTC</div>
<div>
# puts " Make ufi pins 0"</div>
<div>
# foreach ufi_pin $ufi_pins {</div>
<div>
# $prgmConfig set_pin_value $ufi_pin 0</div>
<div>
# }</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span># set const_ports_list [config_find $accessConfig SCAN_IOS/XTREME_X4/PIN_CONSTRAINTS]</div>
<div>
# #puts "INFO: Constant ports list is $const_ports_list"</div>
<div>
# puts "INFO: Setting Constant ports to their values, except tck"</div>
<div>
# foreach const_port [config_map_keys $const_ports_list] {</div>
<div>
# set const_port_value [config_map_value $const_ports_list $const_port]</div>
<div>
# if { $const_port ne "jtag_tck" } {</div>
<div>
# puts "INFO: $const_port as $const_port_value"</div>
<div>
# $prgmConfig set_pin_value $const_port $const_port_value</div>
<div>
# }</div>
<div>
# }</div>
<div>
<br /></div>
<div>
# #puts "make pex_rst_n as 1"</div>
<div>
# #$prgmConfig set_pin_value pex_rst_n 1</div>
<div>
# #puts "make nvjtag_sel as 1"</div>
<div>
# #$prgmConfig set_pin_value nvjtag_sel 1</div>
<div>
<br /></div>
<div>
puts "INFO: Make serdes4f clk as 0"</div>
<div>
foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 0 }</div>
<div>
$prgmConfig waitRti 1</div>
<div>
<br /></div>
<div>
puts "INFO: start programming TOP_FS register"</div>
<div>
$prgmConfig set_program_value {.*TOP_FS} {.*} -value 0 -replicate</div>
<div>
$prgmConfig program -force</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
## puts "start programming POWER_CTL_VAL register "</div>
<div>
<span style="white-space: pre;"> </span>##Confirmed with Nithin, for GA100, POWER_CTL_VAL does not have any loadining any more</div>
<div>
# $prgmConfig set_program_value {.*g0_.*/POWER_CTL_VAL} {.*jtag_val_pgclamp} -value 1'h0</div>
<div>
# $prgmConfig program -force</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_hdmi_disable" range="159" reset_value="b0"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_nvlink_disable" range="153:146" reset_value="b00000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_rop_l2_disable" range="139:128" reset_value="b000000000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_fbp_disable" range="127:122" reset_value="b000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_zcull_disable" range="121:98" reset_value="b000000000000000000000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_pes_disable" range="97:80" reset_value="b000000000000000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_tpc_disable" range="79:50" reset_value="b000000000000000000000000000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_gc6_island_disable" range="37" reset_value="b0"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_pcie_lane_disable" range="36:35" reset_value="b00"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_sec_disable" range="34" reset_value="b0"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_nvenc_disable" range="33:32" reset_value="b00"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_nvdec_disable" range="31" reset_value="b0"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_gpc_disable" range="30:25" reset_value="b000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_fbpa_disable" range="24:19" reset_value="b000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_fbio_disable" range="18:13" reset_value="b000000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_disp_head_disable" range="6:3" reset_value="b0000"></div>
<div>
# <field name="SYS/sys_logic/fuse/opt_display_disable" range="2" reset_value="b0"></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
#serdes div ratio</div>
<div>
set common_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/dft_prgm_common_mode] top ]]</div>
<div>
puts "INFO: common modes: $common_modes"</div>
<div>
if {[llength $common_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -common_mode to set proper scan common_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
foreach common_mode $common_modes {</div>
<div>
if {[regexp "SERDES_RATIO" $common_mode]} {</div>
<div>
switch $common_mode {</div>
<div>
SERDES_RATIO_S4 { set serdes_div_ratio 4 }</div>
<div>
SERDES_RATIO_S6 { set serdes_div_ratio 6 }</div>
<div>
SERDES_RATIO_S8 { set serdes_div_ratio 8 }</div>
<div>
SERDES_RATIO_S12 { set serdes_div_ratio 12 }</div>
<div>
SERDES_RATIO_S24 { set serdes_div_ratio 24 }</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "INFO: Add few cycles until serdes starts pulsing"</div>
<div>
for {set i 0} {$i < 20} {incr i} {</div>
<div>
$prgmConfig waitRti 5</div>
<div>
}</div>
<div>
puts "INFO: Done adding cycles" </div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
set serdes_ratio $serdes_div_ratio</div>
<div>
set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
$prgmConfig wait_cycles $wait_cyc</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts " Now, start serdes4f clk "</div>
<div>
foreach serdes_4f_clk_pin $serdes4f_list { $prgmConfig set_pin_value $serdes_4f_clk_pin 1 }</div>
<div>
$prgmConfig program</div>
<div>
$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
$prgmConfig waitRti 5 ;# Extra wait time required to allow reset signal to propagate</div>
<div>
<br /></div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
set tck_mult [$prgmConfig get_tck_multiple]</div>
<div>
set serdes_ratio $serdes_div_ratio</div>
<div>
set mult_required [expr $tck_mult * $serdes_ratio]</div>
<div>
puts "INFO: current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
if {[ expr $curr_cyc % $mult_required ] != 0} {</div>
<div>
set wait_cyc [ expr $mult_required - [ expr $curr_cyc % $mult_required ]]</div>
<div>
$prgmConfig wait_cycles $wait_cyc</div>
<div>
set curr_cyc [$prgmConfig get_current_cycle]</div>
<div>
puts "INFO: After wait_cycle fix - current_cycle $curr_cyc tck_multiple $tck_mult"</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "done programming fs_top_up"</div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
}</div>
<div>
proc ::ATE::atpg_init::tam_forceflow { args } {</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<span style="white-space: pre;"> </span>array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
if {[config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]] == "VECTOR"} {</div>
<div>
set sub_modes [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]</div>
<div>
} else {</div>
<div>
set sub_modes [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]</div>
<div>
}</div>
<div>
<br /></div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============ENTER procedure: [lindex [info level 0] 0]=============="</div>
<div>
if {[regexp {TAM} $sub_modes] || [regexp {PEX} $sub_modes]} {</div>
<div>
puts "Kannan : Info : sub_modes is $sub_modes"</div>
<div>
set mode TAMSERDES_MODE</div>
<div>
}</div>
<div>
# if {[regexp {PEX} $sub_modes]} {</div>
<div>
# puts "Kannan : Info : sub_modes is $sub_modes"</div>
<div>
# set mode PEX_MODE</div>
<div>
# }</div>
<div>
set scaninpin_list [bc_scan_init_analyse $prgmConfig $testConfig $mode scaninpin_list]</div>
<div>
set ufi_list [bc_scan_init_analyse $prgmConfig $testConfig $mode ufi_list]</div>
<div>
set scanoutpin_list [bc_scan_init_analyse $prgmConfig $testConfig $mode scanoutpin_list]</div>
<div>
set scanbidirpin_list [bc_scan_init_analyse $prgmConfig $testConfig $mode scanbidirpin_list]</div>
<div>
puts "init all pads to be input mode"</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*ten_pindot_over -value 1'b0</div>
<div>
# $prgmConfig set_program_value ".*/GENPADS_CTRLS" .*disable_functional_override -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*prog_bscan_mode -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/GENPADS_CTRLS" .*pad_tm -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*pad_tasel -value 1'b0</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*pad_tasel_diff -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*jtag_mode_1_mask -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*jtag_mode_1_val -value 1'b0</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*jtag_mode_3_mask -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*jtag_mode_3_val -value 1'b1</div>
<div>
#### this is different between bcsan init and std programming</div>
<div>
# $prgmConfig set_program_value ".*/GENPADS_CTRLS" .*en_in_bidir.* -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/GENPADS_CTRLS" .*en_in_output.* -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/GENPADS_CTRLS" .*en_in_input.* -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*pad_control_disab.* -value 1'b1</div>
<div>
$prgmConfig set_program_value {.*t0_0.*GENPADS_CTRLS} {.*ist_clamp_ctl} -value 1'b1</div>
<div>
$prgmConfig program</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" {.*} -value 0 -replicate</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*_tm.* -value 1'b1</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*_ten.* -value 1'b1</div>
<div>
puts " disable ten_inv feature by default"</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*_ten_inv.* -value 1'b0</div>
<div>
array set pin2field {}</div>
<div>
foreach tmppin [concat $scaninpin_list $ufi_list $scanoutpin_list $scanbidirpin_list] {</div>
<div>
#puts "tmppin = $tmppin"</div>
<div>
regsub {\[} $tmppin {\\[} tmppin_1st</div>
<div>
regsub {\]} $tmppin_1st {\\]} tmppin_2nd</div>
<div>
set pin2field($tmppin) ${tmppin_2nd}</div>
<div>
puts "pin2field = $pin2field($tmppin)"</div>
<div>
}</div>
<div>
foreach tmppin $scaninpin_list {</div>
<div>
puts "INFO:Kannan : put $tmppin into input"</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten.*" -value 1'b1</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten_inv.*" -value 1'b0</div>
<div>
}</div>
<div>
<br /></div>
<div>
foreach tmppin $ufi_list {</div>
<div>
puts "INFO: Kannan : put ufi $tmppin into input"</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten.*" -value 1'b1</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten_inv.*" -value 1'b0</div>
<div>
}</div>
<div>
<br /></div>
<div>
foreach tmppin $scanoutpin_list {</div>
<div>
puts "INFO: Kannan : put $tmppin into output"</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten.*" -value 1'b0</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten_inv.*" -value 1'b0</div>
<div>
}</div>
<div>
<br /></div>
<div>
foreach tmppin $scanbidirpin_list {</div>
<div>
puts "enable ten_inv feature"</div>
<div>
$prgmConfig set_program_value {.*/EXTEST} ".*$pin2field($tmppin)_ten_inv.*" -value 1'b1</div>
<div>
}</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*tm.*TESTCTL0.* -value 1</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*ten.*TESTCTL0.* -value 1</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*ten_inv.*TESTCTL0.* -value 0</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*tm.*TESTCLK.* -value 1</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*ten_TESTCLK.* -value 1</div>
<div>
$prgmConfig set_program_value ".*/EXTEST" .*ten_inv_TESTCLK.* -value 0</div>
<div>
$prgmConfig program</div>
<div>
##### this is not needed for EXTEST.. might be for pex.. also.. parallel load is available..dont know if serdesload/ratio0 is a sequence</div>
<div>
# $prgmConfig set_program_value ".*/SERDES_SCAN_TAM" .*pex_pll_bypass -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/SERDES_SCAN_TAM" .*Select_SerdesLoad -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/SERDES_SCAN_TAM" .*Select_SerdesRatio0 -value 1'b1</div>
<div>
# $prgmConfig set_program_value ".*/SERDES_SCAN_TAM" .*ModeSelect -value 1'b1</div>
<div>
# $prgmConfig program</div>
<div>
puts "Kannan : Info : toggle reset"</div>
<div>
variable die_obj</div>
<div>
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]</div>
<div>
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]</div>
<div>
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]</div>
<div>
foreach reset_signal $resetList {</div>
<div>
puts "INFO: Assert chip reset pin: $reset_signal..."</div>
<div>
$prgmConfig set_enable_value $reset_signal 1</div>
<div>
$prgmConfig set_pin_value $reset_signal 1</div>
<div>
}</div>
<div>
$prgmConfig waitRti 100</div>
<div>
<br /></div>
<div>
puts "[clock format [clock seconds] -format "%m/%d/%Y %H:%M:%S"]==============LEAVE procedure: [lindex [info level 0] 0]=============="</div>
<div>
<br /></div>
<div>
}</div>
<div>
<br /></div>
<div>
proc ::ATE::atpg_init::Template { args } {</div>
<div>
<span style="white-space: pre;"> </span># get user option</div>
<div>
<span style="white-space: pre;"> </span>set mainOptions {</div>
<div>
<span style="white-space: pre;"> </span>{ListArgs.arg "" "-ListArgs <required argument for the API>"}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<span style="white-space: pre;"> </span>set listArgsOptions {</div>
<div>
<span style="white-space: pre;"> </span>{prgmConfig.arg "" "<program config object>" "NO_CUSTOMIZE"}</div>
<div>
<span style="white-space: pre;"> </span>{testConfig.arg "" "<test config object>" "NO_CUSTOMIZE"}</div>
<div>
{listArgs.arg "" "-option helper; please add -sub_mode tn arg to define SCAN_TEST sub mode defined in the file $::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml, e.g. XTR_STUCKAT_SERDES etc."}</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>array set listargsParams [::cmdline::getKnownOptions args $listArgsOptions]</div>
<div>
<br /></div>
<div>
array set mainParams [::cmdline::getKnownOptions args $mainOptions]</div>
<div>
<span style="white-space: pre;"> </span></div>
<div>
if {![regexp "^\s*$" $mainParams(ListArgs)]} {</div>
<div>
<span style="white-space: pre;"> </span>upvar $mainParams(ListArgs) subtest_option</div>
<div>
<span style="white-space: pre;"> </span>set subtest_option $listArgsOptions</div>
<div>
<br /></div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_type" -value "SCAN_TEST"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "global_init_behavior" -value "skip_init"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "test_init_behavior" -value "skip_init"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "chiplet_flow_certified" -value 1</div>
<div>
<span style="white-space: pre;"> </span># jeryang</div>
<div>
<span style="white-space: pre;"> </span>set temp_bak_args $::argv</div>
<div>
<span style="white-space: pre;"> </span>array set temp_param_array [::cmdline::getKnownOptions temp_bak_args {{sub_mode.arg "" ""}}]</div>
<div>
<span style="white-space: pre;"> </span>set sub_mode_in $temp_param_array(sub_mode)</div>
<div>
<br /></div>
<div>
<span style="white-space: pre;"> </span>puts "INFO: sub_mode=$sub_mode_in"</div>
<div>
::ATE::AteFlowUtils::setTestApiProperty -name_of_list subtest_option -categoryName execution_ctrl -propName "dft_mode" -value "$sub_mode_in"</div>
<div>
<span style="white-space: pre;"> </span>#</div>
<div>
<span style="white-space: pre;"> </span>return 1</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
</div>
<div>
<span style="white-space: pre;"> </span>foreach temp_var_name "prgmConfig testConfig" {</div>
<div>
<span style="white-space: pre;"> </span>set $temp_var_name $listargsParams($temp_var_name)</div>
<div>
<span style="white-space: pre;"> </span>}</div>
<div>
<br /></div>
<div>
set sub_modes [config_list [config_map_value [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST] "sub_modes"]]</div>
<div>
puts "INFO: sub_modes: $sub_modes"</div>
<div>
<span style="white-space: pre;"> </span>if {[llength $sub_modes] eq "0"} {</div>
<div>
puts stderr "ERROR: Please add tn arg -sub_mode to set proper scan sub_mode."</div>
<div>
exit 1 </div>
<div>
}</div>
<div>
</div>
<div>
set dft_modes_config_file "$::env(NVDEV)/nvtools/dft/data/standard_dft_modes_programming.yml"</div>
<div>
if { [file exists $dft_modes_config_file]} {</div>
<div>
puts "INFO: standard dft mode programming yml file found. Reading..."</div>
<div>
set dft_modeConfig [config_read_yaml $dft_modes_config_file]</div>
<div>
} else {</div>
<div>
puts stderr "ERROR: $dft_modes_config_file file is missing. Please fix it first."</div>
<div>
exit 1</div>
<div>
}</div>
<div>
foreach sub_mode $sub_modes {</div>
<div>
if {[regexp "Stuckat" $sub_mode] || [regexp "Ftm" $sub_mode]} {</div>
<div>
puts "INFO: Validating sub mode $sub_mode..."</div>
<div>
if { [config_find $dft_modeConfig "SCAN_TEST/${sub_mode}"] != ""} {</div>
<div>
puts "$sub_mode is valid sub_mode"</div>
<div>
} else {</div>
<div>
puts stderr "ERROR: sub_mode $sub_mode is invalid. Please follow $dft_modes_config_file for the list of sub_mode's allowed"</div>
<div>
exit 1</div>
<div>
}</div>
<div>
} else {</div>
<div>
puts stderr "WARNING: sub mode $sub_mode is not SCAN_TEST sub mode"</div>
<div>
}</div>
<div>
}</div>
<div>
# Please specify the test API specific programming here</div>
<div>
}</div>
<div>
<br /></div>
<div>
package provide atpg_init_tasks $::ATE::atpg_init::version</div>
<div>
<br /></div>
<div>
# Local Variables:</div>
<div>
# mode: Tcl</div>
<div>
# tab-width: 4</div>
<div>
# expand-tab</div>
<div>
# c-basic-offset: 4</div>
<div>
# tcl-indent-level: 4</div>
<div>
# indent-tabs-mode: nil</div>
<div>
# End:</div>
<div>
# ex: shiftwidth=4 tabstop=4 expandta</div>
</div>
<div>
<br /></div>
</div>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-88809113779619412212019-12-06T17:14:00.001-08:002019-12-06T17:14:57.075-08:00custom_boundry_test_tasks<br />
<br />
package provide custom_boundry_test_tasks 1.1<br />
<br />
namespace eval ::ATE::jtagtest {<br />
namespace export vih_fb_clamp vih_gc6_HV_CLAMP_s1 vih_gc6_HV_CLAMP_s0 vol_gc6_HVALT_EN_s1 vih_gc6_HVALT_EN_s0<br />
<br />
proc vih_fb_clamp { args } {<br />
global DEBUG<br />
set orig_args $args <br />
set test "vih_fb_clamp"<br />
<br />
set options {<br />
{prgmConfig.arg.secret "" ""}<br />
{testConfig.arg "" "Optional argument for test config object needed by test APIs" "NO_CUSTOMIZE"}<br />
{pkg_obj.arg.secret "" ""}<br />
{chip_name.arg.secret "" ""}<br />
{sub_mode_dotting_type.arg "full" " -sub_mode_dotting_type <primary/secondary/full> - Test dotted pin pair on primary/secondary pin"}<br />
{bsdl.arg "" " -bsdl <bsdl_file> - BSDL file"}<br />
{ballmap.arg "" " -ballmap <ballmap file> - ballmap file"}<br />
{ListArgs.arg "" " -option helper"}<br />
}<br />
<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options \<br />
-categoryName "execution_ctrl" \<br />
-propName "ieee_1149_compliance" \<br />
-value 1149.1<br />
<br />
set usages "testApi \"[namespace current]::$test allowed\""<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "global_init_behavior" -value skip_init<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2"<br />
<br />
<br />
puts "==\$params(bsdl) is : $params(bsdl)"<br />
set valid_submodes [ list primary secondary full ]<br />
<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
#set options "$fullopt $options"<br />
llappend options $fullopt<br />
set fullopt $options<br />
<br />
return<br />
} else {<br />
#parray params<br />
## Parse arguments<br />
if {$params(testConfig) != ""} {<br />
set testConfig $params(testConfig)<br />
set ate_config [config_find $testConfig "CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/ATE_config"]<br />
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]<br />
if {$ate_config == "" || $ate_config == "None"} {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_spec.tn"<br />
} else {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_${ate_config}_spec.tn"<br />
}<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing testConfig object"<br />
}<br />
<br />
if {$params(prgmConfig) != ""} {<br />
set prgmConfig $params(prgmConfig) ;#old set jtagConfig $params(jtagConfig)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing jtagConfig object"<br />
}<br />
if {$params(pkg_obj) != ""} {<br />
set package_obj $params(pkg_obj)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing package object"<br />
}<br />
if {$params(chip_name) != ""} {<br />
set chip_name $params(chip_name)<br />
} else {<br />
puts stderr "Error : There is no CHIP NAME found. Please check your ATE ENV"<br />
exit 1<br />
}<br />
set sub_mode_dotting_type $params(sub_mode_dotting_type)<br />
if {[lsearch -exact $valid_submodes $sub_mode_dotting_type] == -1 } {<br />
puts stderr "Error : (::ATE::jtagtest:$test) You must specify a valid sub_mode_dotting_type"<br />
puts stderr " Use \"jtagtest.tn -help -test $test\" to see valid sub modes"<br />
exit 1<br />
}<br />
if { $params(bsdl) != "" } { <br />
set bsdl_file $params(bsdl)<br />
if { [file exists $bsdl_file]} {<br />
} else {<br />
puts stderr "Error: $bsdl_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -bsdl <bsdl file> to specify the correct one"<br />
exit 1<br />
}<br />
if { $params(ballmap) != "" } {<br />
set ballmap_file $params(ballmap)<br />
if { [file exists $ballmap_file]} {<br />
} else {<br />
puts stderr "Error: $ballmap_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -ballmap <ballmap file> to specify the correct one"<br />
exit 1<br />
}<br />
}<br />
puts "jtagtest subtest \"$test\" called ..."<br />
<br />
# tie chip_reset 0 , so won't need unlock<br />
# $prgmConfig set_enable_value Pex_pwr_goodn 1<br />
# $prgmConfig set_pin_value Pex_pwr_goodn 0<br />
# $prgmConfig waitRti 1<br />
<br />
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]<br />
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]<br />
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]<br />
puts "Reset pins are : $resetList"<br />
if {[llength $resetList] != 1} {<br />
puts "ERROR, expect only one chip reset"<br />
} else {<br />
foreach reset_signal $resetList {<br />
$prgmConfig set_enable_value $reset_signal 1<br />
$prgmConfig set_pin_value $reset_signal 0<br />
$prgmConfig waitRti 1<br />
}<br />
}<br />
<br />
puts "blueg , should program non_bypass_wsc_pipeline to 0 "<br />
$prgmConfig set_program_value ".*/TEST_MASTER_CTRL" .*non_bypass_wsc_pipeline.* -value 0<br />
$prgmConfig program<br />
<br />
# TODO , remove this after we have UPM working<br />
#$prgmConfig set_program_value {.*/GENPADS_CTRLS} {.*pad_control_disab} -value 1 -replicate<br />
#$prgmConfig program<br />
<br />
#puts "blueg , dbg , print all pin list"<br />
#foreach tempPin [get_pin_list [$prgmConfig get_jtag_config]] {<br />
# puts "blueg , dbg , we have $tempPin"<br />
#}<br />
<br />
set pinShortMode 0<br />
set extraArg 0<br />
<br />
#set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $pin_dot_file pinShortMode $chip_name $extraArg]<br />
set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $iocm_file pinShortMode $chip_name $extraArg]<br />
<br />
puts "creadt skipped fab_cmd pin list accroding to pkg type: $params(bsdl)"<br />
set skipped_fba_cmd_pin_list ""<br />
if { [regexp "gb2_64" $params(bsdl) ] == 1 } {<br />
set skipped_fba_cmd_pin_list "33"<br />
} elseif { [regexp "gb4_128A" $params(bsdl) ] == 1 } {<br />
set skipped_fba_cmd_pin_list ""<br />
}<br />
puts "skipped_fba_cmd_pin_list is : $skipped_fba_cmd_pin_list"<br />
if { $pinShortMode == 1} {<br />
if { $sub_mode_dotting_type == "primary" } {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_fb_clamp_test $prgmConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list ;#old vih_fb_clamp_test $jtagConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list<br />
} elseif {$sub_mode_dotting_type == "secondary" } {<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_fb_clamp_test $prgmConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list ;#old vih_fb_clamp_test $jtagConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list<br />
} else {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_fb_clamp_test $prgmConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list ;#old vih_fb_clamp_test $jtagConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list<br />
<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_fb_clamp_test $prgmConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list ;#old vih_fb_clamp_test $jtagConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list<br />
}<br />
} else {<br />
puts "Running $test..."<br />
vih_fb_clamp_test $prgmConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list ;#old vih_fb_clamp_test $jtagConfig $patterns "vih_fb_clamp" $skipped_fba_cmd_pin_list<br />
}<br />
}<br />
<br />
proc vih_gc6_HV_CLAMP_s1 {args} {<br />
global DEBUG<br />
set orig_args $args <br />
set test "vih_gc6_HV_CLAMP_s1"<br />
set options {<br />
{prgmConfig.arg.secret "" ""}<br />
{testConfig.arg "" "Optional argument for test config object needed by test APIs" "NO_CUSTOMIZE"}<br />
{pkg_obj.arg.secret "" ""}<br />
{chip_name.arg.secret "" ""}<br />
{sub_mode_dotting_type.arg "full" " -sub_mode_dotting_type <primary/secondary/full> - Test dotted pin pair on primary/secondary pin"}<br />
{bsdl.arg "" " -bsdl <bsdl_file> - BSDL file"}<br />
{ballmap.arg "" " -ballmap <ballmap file> - ballmap file"}<br />
{ListArgs.arg "" " -option helper"}<br />
}<br />
<br />
set usages "testApi \"[namespace current]::$test allowed\""<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "global_init_behavior" -value skip_init<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2"<br />
<br />
<br />
puts "==\$params(bsdl) is : $params(bsdl)"<br />
set valid_submodes [ list primary secondary full ]<br />
<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
#set options "$fullopt $options"<br />
llappend options $fullopt<br />
set fullopt $options<br />
<br />
return<br />
} else {<br />
#parray params<br />
## Parse arguments<br />
if {$params(prgmConfig) != ""} {<br />
set prgmConfig $params(prgmConfig) ;#old set jtagConfig $params(jtagConfig)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing jtagConfig object"<br />
}<br />
if {$params(testConfig) != ""} {<br />
set testConfig $params(testConfig)<br />
set ate_config [config_find $testConfig "CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/ATE_config"]<br />
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]<br />
if {$ate_config == "" || $ate_config == "None"} {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_spec.tn"<br />
} else {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_${ate_config}_spec.tn"<br />
}<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing testConfig object"<br />
}<br />
<br />
if {$params(pkg_obj) != ""} {<br />
set package_obj $params(pkg_obj)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing package object"<br />
}<br />
if {$params(chip_name) != ""} {<br />
set chip_name $params(chip_name)<br />
} else {<br />
puts stderr "Error : There is no CHIP NAME found. Please check your ATE ENV"<br />
exit 1<br />
}<br />
set sub_mode_dotting_type $params(sub_mode_dotting_type)<br />
if {[lsearch -exact $valid_submodes $sub_mode_dotting_type] == -1 } {<br />
puts stderr "Error : (::ATE::jtagtest:$test) You must specify a valid sub_mode_dotting_type"<br />
puts stderr " Use \"jtagtest.tn -help -test $test\" to see valid sub modes"<br />
exit 1<br />
}<br />
if { $params(bsdl) != "" } { <br />
set bsdl_file $params(bsdl)<br />
if { [file exists $bsdl_file]} {<br />
} else {<br />
puts stderr "Error: $bsdl_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -bsdl <bsdl file> to specify the correct one"<br />
exit 1<br />
}<br />
if { $params(ballmap) != "" } {<br />
set ballmap_file $params(ballmap)<br />
if { [file exists $ballmap_file]} {<br />
} else {<br />
puts stderr "Error: $ballmap_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -ballmap <ballmap file> to specify the correct one"<br />
exit 1<br />
}<br />
}<br />
puts "jtagtest subtest \"$test\" called ..."<br />
# tie chip_reset 0 , so won't need unlock<br />
# $prgmConfig set_enable_value Pex_pwr_goodn 1<br />
# $prgmConfig set_pin_value Pex_pwr_goodn 0<br />
# $prgmConfig waitRti 1<br />
<br />
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]<br />
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]<br />
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]<br />
puts "Reset pins are : $resetList"<br />
if {[llength $resetList] != 1} {<br />
puts "ERROR, expect only one chip reset"<br />
} else {<br />
foreach reset_signal $resetList {<br />
$prgmConfig set_enable_value $reset_signal 1<br />
$prgmConfig set_pin_value $reset_signal 0<br />
$prgmConfig waitRti 1<br />
}<br />
}<br />
<br />
<br />
puts "blueg , should program non_bypass_wsc_pipeline to 0 "<br />
$prgmConfig set_program_value ".*/TEST_MASTER_CTRL" .*non_bypass_wsc_pipeline.* -value 0<br />
$prgmConfig program<br />
$prgmConfig set_program_value {.*TOP_FS.*} {.*} -value 0 -replicate<br />
$prgmConfig program<br />
<br />
set pinShortMode 0<br />
set extraArg [list]<br />
#set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $pin_dot_file pinShortMode $chip_name $extraArg]<br />
set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $iocm_file pinShortMode $chip_name $extraArg]<br />
<br />
#$prgmConfig set_pin_value {strap[0]} 1 ;#old #set_pin_value $jtagConfig {strap[0]} 1 <br />
$prgmConfig waitRti 10 ;#old waitRti $jtagConfig 10<br />
if { $test == "vih_gc6_HV_CLAMP_s1" } {<br />
$prgmConfig set_program_value {.*/GENPADS_CTRLS} {.*pad_control_disab} -value 1 -replicate<br />
$prgmConfig program<br />
<br />
puts "Programming HV_CORE_CLMP 0"<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*_mask.*} -value 0 -replicate<br />
# $prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*HV_CORE_CLMP.*} -value 1 -replicate<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*VAUXS_CORE_CLMP.*} -value 1 -replicate<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*_vals.*} -value 0 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} .*sci_vals.*HV_CORE_CLMP.* -value 0 -replicate<br />
<br />
$prgmConfig program<br />
$prgmConfig waitRti 10<br />
# $prgmConfig jtag_force {tb.boundary_mode} 1<br />
$prgmConfig jtag_force {tb.boundary_leakage_mode} 0<br />
}<br />
<br />
if { $pinShortMode == 1} {<br />
if { $sub_mode_dotting_type == "primary" } {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s1_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s1" ;#old vih_gc6_HV_CLAMP_s1_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s1"<br />
} elseif {$sub_mode_dotting_type == "secondary" } {<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s1_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s1" ;#old vih_gc6_HV_CLAMP_s1_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s1"<br />
} else {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s1_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s1" ;#old vih_gc6_HV_CLAMP_s1_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s1"<br />
<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s1_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s1" ;#old vih_gc6_HV_CLAMP_s1_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s1"<br />
}<br />
} else {<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s1_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s1" ;#old vih_gc6_HV_CLAMP_s1_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s1"<br />
}<br />
<br />
}<br />
<br />
proc vih_gc6_HV_CLAMP_s0 {args} {<br />
global DEBUG<br />
set orig_args $args <br />
set test "vih_gc6_HV_CLAMP_s0"<br />
<br />
set options {<br />
{prgmConfig.arg.secret "" ""}<br />
{testConfig.arg "" "Optional argument for test config object needed by test APIs" "NO_CUSTOMIZE"}<br />
{pkg_obj.arg.secret "" ""}<br />
{chip_name.arg.secret "" ""}<br />
{sub_mode_dotting_type.arg "full" " -sub_mode_dotting_type <primary/secondary/full> - Test dotted pin pair on primary/secondary pin"}<br />
{bsdl.arg "" " -bsdl <bsdl_file> - BSDL file"}<br />
{ballmap.arg "" " -ballmap <ballmap file> - ballmap file"}<br />
{ListArgs.arg "" " -option helper"}<br />
}<br />
<br />
set usages "testApi \"[namespace current]::$test allowed\""<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "global_init_behavior" -value skip_init<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2"<br />
<br />
puts "==\$params(bsdl) is : $params(bsdl)"<br />
set valid_submodes [ list primary secondary full ]<br />
<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
#set options "$fullopt $options"<br />
llappend options $fullopt<br />
set fullopt $options<br />
<br />
return<br />
} else {<br />
#parray params<br />
## Parse arguments<br />
if {$params(prgmConfig) != ""} {<br />
set prgmConfig $params(prgmConfig) ;#old set jtagConfig $params(jtagConfig)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing jtagConfig object"<br />
}<br />
if {$params(testConfig) != ""} {<br />
set testConfig $params(testConfig)<br />
set ate_config [config_find $testConfig "CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/ATE_config"]<br />
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]<br />
if {$ate_config == "" || $ate_config == "None"} {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_spec.tn"<br />
} else {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_${ate_config}_spec.tn"<br />
}<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing testConfig object"<br />
}<br />
if {$params(pkg_obj) != ""} {<br />
set package_obj $params(pkg_obj)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing package object"<br />
}<br />
if {$params(chip_name) != ""} {<br />
set chip_name $params(chip_name)<br />
} else {<br />
puts stderr "Error : There is no CHIP NAME found. Please check your ATE ENV"<br />
exit 1<br />
}<br />
set sub_mode_dotting_type $params(sub_mode_dotting_type)<br />
if {[lsearch -exact $valid_submodes $sub_mode_dotting_type] == -1 } {<br />
puts stderr "Error : (::ATE::jtagtest:$test) You must specify a valid sub_mode_dotting_type"<br />
puts stderr " Use \"jtagtest.tn -help -test $test\" to see valid sub modes"<br />
exit 1<br />
}<br />
if { $params(bsdl) != "" } { <br />
set bsdl_file $params(bsdl)<br />
if { [file exists $bsdl_file]} {<br />
} else {<br />
puts stderr "Error: $bsdl_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -bsdl <bsdl file> to specify the correct one"<br />
exit 1<br />
}<br />
if { $params(ballmap) != "" } {<br />
set ballmap_file $params(ballmap)<br />
if { [file exists $ballmap_file]} {<br />
} else {<br />
puts stderr "Error: $ballmap_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -ballmap <ballmap file> to specify the correct one"<br />
exit 1<br />
}<br />
}<br />
puts "jtagtest subtest \"$test\" called ..."<br />
# tie chip_reset 0 , so won't need unlock<br />
#$prgmConfig set_enable_value Pex_pwr_goodn 1<br />
# $prgmConfig set_pin_value Pex_pwr_goodn 0<br />
# $prgmConfig waitRti 1<br />
<br />
<br />
if {[config_isa [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]] == "VECTOR"} {<br />
set sub_modes [config_list [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]]<br />
} else {<br />
set sub_modes [config_find $testConfig CURRENT_TEST/CURRENT_SUBTEST/sub_modes]<br />
}<br />
puts "sub_modes is: $sub_modes"<br />
<br />
<br />
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]<br />
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]<br />
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]<br />
puts "Reset pins are : $resetList"<br />
if {[llength $resetList] != 1} {<br />
puts "ERROR, expect only one chip reset"<br />
} else {<br />
foreach reset_signal $resetList {<br />
$prgmConfig set_enable_value $reset_signal 1<br />
$prgmConfig set_pin_value $reset_signal 0<br />
$prgmConfig waitRti 1<br />
}<br />
}<br />
<br />
<br />
puts "blueg , should program non_bypass_wsc_pipeline to 0 "<br />
$prgmConfig set_program_value ".*/TEST_MASTER_CTRL" .*non_bypass_wsc_pipeline.* -value 0<br />
$prgmConfig program<br />
$prgmConfig set_program_value {.*TOP_FS.*} {.*} -value 0 -replicate<br />
$prgmConfig program<br />
# puts "Setting OVERT to 1 for vih_GC6_HV_CLAMP_s0 test @Noel Pangilinan <npangilinan@nvidia.com>"<br />
# $prgmConfig set_enable_value overt 1<br />
# $prgmConfig set_pin_value overt 1<br />
<br />
set pinShortMode 0<br />
set extraArg [list]<br />
#set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $pin_dot_file pinShortMode $chip_name $extraArg]<br />
set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $iocm_file pinShortMode $chip_name $extraArg]<br />
<br />
$prgmConfig waitRti 10 ;#old waitRti $jtagConfig 10 <br />
<br />
if { $test == "vih_gc6_HV_CLAMP_s0" } {<br />
<br />
$prgmConfig set_program_value ".*/GENPADS_CTRLS" .*pad_control_disab.* -value 1 -replicate<br />
$prgmConfig program<br />
<br />
puts "Programming sci2pad_HV_CORE_CLMP 1 ; "<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*_mask.*} -value b0<br />
# $prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*_mask.*HV_CORE_CLMP.*} -value b1<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*_mask.*VAUXS_CORE_CLMP.*} -value b1<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*_vals.*} -value 0 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*_vals.*HV_CORE_CLMP.*} -value b1<br />
#There's no HV_CORE_CLMP in ga100, change to VAUXS_CORE_CLMP<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*_vals.*VAUXS_CORE_CLMP.*} -value b1<br />
<br />
$prgmConfig program<br />
$prgmConfig waitRti 10<br />
# $prgmConfig jtag_force {tb.boundary_mode} 1<br />
$prgmConfig jtag_force {tb.boundary_leakage_mode} 0<br />
<br />
}<br />
if { $pinShortMode == 1} {<br />
if { $sub_mode_dotting_type == "primary" } {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s0_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s0" $sub_modes ;#old vih_gc6_HV_CLAMP_s0_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s0"<br />
} elseif {$sub_mode_dotting_type == "secondary" } {<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s0_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s0" $sub_modes ;#old vih_gc6_HV_CLAMP_s0_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s0"<br />
} else {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s0_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s0" $sub_modes ;#old vih_gc6_HV_CLAMP_s0_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s0"<br />
<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s0_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s0" $sub_modes ;#old vih_gc6_HV_CLAMP_s0_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s0"<br />
}<br />
} else {<br />
puts "Running $test..."<br />
vih_gc6_HV_CLAMP_s0_test $prgmConfig $patterns "vih_gc6_HV_CLAMP_s0" $sub_modes ;#old vih_gc6_HV_CLAMP_s0_test $jtagConfig $patterns "vih_gc6_HV_CLAMP_s0"<br />
}<br />
}<br />
<br />
proc vol_gc6_HVALT_EN_s1 {args} {<br />
global DEBUG<br />
set orig_args $args <br />
set test "vol_gc6_HVALT_EN_s1"<br />
<br />
set options {<br />
{prgmConfig.arg.secret "" ""}<br />
{testConfig.arg "" "Optional argument for test config object needed by test APIs" "NO_CUSTOMIZE"}<br />
{pkg_obj.arg.secret "" ""}<br />
{chip_name.arg.secret "" ""}<br />
{sub_mode_dotting_type.arg "full" " -sub_mode_dotting_type <primary/secondary/full> - Test dotted pin pair on primary/secondary pin"}<br />
{bsdl.arg "" " -bsdl <bsdl_file> - BSDL file"}<br />
{ballmap.arg "" " -ballmap <ballmap file> - ballmap file"}<br />
{ListArgs.arg "" " -option helper"}<br />
}<br />
<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options \<br />
-categoryName "execution_ctrl" \<br />
-propName "ieee_1149_compliance" \<br />
-value 1149.1<br />
<br />
set usages "testApi \"[namespace current]::$test allowed\""<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "global_init_behavior" -value skip_init<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2"<br />
<br />
<br />
set valid_submodes [ list primary secondary full ]<br />
<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
llappend options $fullopt<br />
set fullopt $options<br />
<br />
return<br />
} else {<br />
#parray params<br />
## Parse arguments<br />
if {$params(prgmConfig) != ""} {<br />
set prgmConfig $params(prgmConfig) ;#old set jtagConfig $params(jtagConfig)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing jtagConfig object"<br />
}<br />
if {$params(testConfig) != ""} {<br />
set testConfig $params(testConfig)<br />
set ate_config [config_find $testConfig "CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/ATE_config"]<br />
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]<br />
if {$ate_config == "" || $ate_config == "None"} {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_spec.tn"<br />
} else {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_${ate_config}_spec.tn"<br />
}<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing testConfig object"<br />
}<br />
<br />
if {$params(pkg_obj) != ""} {<br />
set package_obj $params(pkg_obj)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing package object"<br />
}<br />
if {$params(chip_name) != ""} {<br />
set chip_name $params(chip_name)<br />
} else {<br />
puts stderr "Error : There is no CHIP NAME found. Please check your ATE ENV"<br />
exit 1<br />
}<br />
set sub_mode_dotting_type $params(sub_mode_dotting_type)<br />
if {[lsearch -exact $valid_submodes $sub_mode_dotting_type] == -1 } {<br />
puts stderr "Error : (::ATE::jtagtest:$test) You must specify a valid sub_mode_dotting_type"<br />
puts stderr " Use \"jtagtest.tn -help -test $test\" to see valid sub modes"<br />
exit 1<br />
}<br />
if { $params(bsdl) != "" } { <br />
set bsdl_file $params(bsdl)<br />
if { [file exists $bsdl_file]} {<br />
} else {<br />
puts stderr "Error: $bsdl_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -bsdl <bsdl file> to specify the correct one"<br />
exit 1<br />
}<br />
if { $params(ballmap) != "" } {<br />
set ballmap_file $params(ballmap)<br />
if { [file exists $ballmap_file]} {<br />
} else {<br />
puts stderr "Error: $ballmap_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -ballmap <ballmap file> to specify the correct one"<br />
exit 1<br />
}<br />
}<br />
puts "jtagtest subtest \"$test\" called ..."<br />
# tie chip_reset 0 , so won't need unlock<br />
# $prgmConfig set_enable_value Pex_pwr_goodn 1<br />
# $prgmConfig set_pin_value Pex_pwr_goodn 0<br />
# $prgmConfig waitRti 1<br />
<br />
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]<br />
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]<br />
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]<br />
puts "Reset pins are : $resetList"<br />
if {[llength $resetList] != 1} {<br />
puts "ERROR, expect only one chip reset"<br />
} else {<br />
foreach reset_signal $resetList {<br />
$prgmConfig set_enable_value $reset_signal 1<br />
$prgmConfig set_pin_value $reset_signal 0<br />
$prgmConfig waitRti 1<br />
}<br />
}<br />
<br />
<br />
<br />
puts "blueg , should program non_bypass_wsc_pipeline to 0 "<br />
$prgmConfig set_program_value ".*/TEST_MASTER_CTRL" .*non_bypass_wsc_pipeline.* -value 0<br />
$prgmConfig program<br />
$prgmConfig set_program_value {.*TOP_FS.*} {.*} -value 0 -replicate<br />
$prgmConfig program<br />
<br />
# turn-off the termination of OD pad<br />
set jtagConfig [$prgmConfig get_jtag_config]; jtag_force $jtagConfig {tb.boundary_leakage_mode} 1 ;#old jtag_force $jtagConfig {tb.boundary_leakage_mode} 1<br />
<br />
set pinShortMode 0<br />
set extraArg [list]<br />
#set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $pin_dot_file pinShortMode $chip_name $extraArg]<br />
set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $iocm_file pinShortMode $chip_name $extraArg]<br />
<br />
<br />
#$prgmConfig set_pin_value {strap[0]} 1 ;#old #set_pin_value $jtagConfig {strap[0]} 1 <br />
$prgmConfig waitRti 10 ;#old waitRti $jtagConfig 10 <br />
<br />
if { $test == "vol_gc6_HVALT_EN_s1" } {<br />
<br />
puts "Programming HV_ALT_CTL_SEL=1 ; HV_ALT_EN 0 ; HV_ALT_A 1 ."<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*} -value 0 -replicate<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*VAUXS_ALT_CTL_SEL.*} -value 1<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*VAUXS_ALT_EN.*} -value 1<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK} {.*VAUXS_ALT_A.*} -value 1<br />
$prgmConfig program<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*} -value 0 -replicate<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*VAUXS_ALT_CTL_SEL.*} -value b1<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*VAUXS_ALT_EN.*} -value b0<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS} {.*VAUXS_ALT_A.*} -value b1<br />
$prgmConfig program<br />
$prgmConfig waitRti 10<br />
<br />
}<br />
<br />
if { $pinShortMode == 1} {<br />
if { $sub_mode_dotting_type == "primary" } { <br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vol_gc6_HVALT_EN_s1_test $prgmConfig $patterns $test ;#old vol_gc6_HVALT_EN_s1_test $jtagConfig $patterns $test<br />
} elseif {$sub_mode_dotting_type == "secondary" } {<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vol_gc6_HVALT_EN_s1_test $prgmConfig $patterns $test ;#old vol_gc6_HVALT_EN_s1_test $jtagConfig $patterns $test<br />
} else {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vol_gc6_HVALT_EN_s1_test $prgmConfig $patterns $test ;#old vol_gc6_HVALT_EN_s1_test $jtagConfig $patterns $test<br />
<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vol_gc6_HVALT_EN_s1_test $prgmConfig $patterns $test ;#old vol_gc6_HVALT_EN_s1_test $jtagConfig $patterns $test<br />
}<br />
} else {<br />
puts "Running $test..."<br />
vol_gc6_HVALT_EN_s1_test $prgmConfig $patterns $test ;#old vol_gc6_HVALT_EN_s1_test $jtagConfig $patterns $test<br />
}<br />
}<br />
<br />
proc vih_gc6_HVALT_EN_s0 {args} {<br />
global DEBUG<br />
set orig_args $args <br />
set test "vih_gc6_HVALT_EN_s0"<br />
<br />
set options {<br />
{prgmConfig.arg.secret "" ""}<br />
{testConfig.arg "" "Optional argument for test config object needed by test APIs" "NO_CUSTOMIZE"}<br />
{pkg_obj.arg.secret "" ""}<br />
{chip_name.arg.secret "" ""}<br />
{sub_mode_dotting_type.arg "full" " -sub_mode_dotting_type <primary/secondary/full> - Test dotted pin pair on primary/secondary pin"}<br />
{bsdl.arg "" " -bsdl <bsdl_file> - BSDL file"}<br />
{ballmap.arg "" " -ballmap <ballmap file> - ballmap file"}<br />
{ListArgs.arg "" " -option helper"}<br />
}<br />
<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options \<br />
-categoryName "execution_ctrl" \<br />
-propName "ieee_1149_compliance" \<br />
-value 1149.1<br />
<br />
set usages "testApi \"[namespace current]::$test allowed\""<br />
<br />
array set params [::cmdline::getKnownOptions args $options ]<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "global_init_behavior" -value skip_init<br />
::ATE::AteFlowUtils::setTestApiProperty -name_of_list options -categoryName "execution_ctrl" -propName "test_features" -value "secSHA2"<br />
<br />
<br />
set valid_submodes [ list primary secondary full ]<br />
<br />
if { $params(ListArgs) != "" } {<br />
upvar $params(ListArgs) fullopt<br />
llappend options $fullopt<br />
set fullopt $options<br />
<br />
return<br />
} else {<br />
#parray params<br />
## Parse arguments<br />
if {$params(prgmConfig) != ""} {<br />
set prgmConfig $params(prgmConfig) ;#old set jtagConfig $params(jtagConfig)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing jtagConfig object"<br />
}<br />
if {$params(testConfig) != ""} {<br />
set testConfig $params(testConfig)<br />
set ate_config [config_find $testConfig "CURRENT_TEST/CURRENT_SUBTEST/TESTSCRIPT_DEFINED_ARGS/ATE_config"]<br />
set relative_path_local2jtag [config_find $testConfig CURRENT_TEST/relative_path/test2jtag]<br />
if {$ate_config == "" || $ate_config == "None"} {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_spec.tn"<br />
} else {<br />
set iocm_file "$relative_path_local2jtag/custom_IOCM_${ate_config}_spec.tn"<br />
}<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing testConfig object"<br />
}<br />
if {$params(pkg_obj) != ""} {<br />
set package_obj $params(pkg_obj)<br />
} else {<br />
puts "Error : (::ATE::jtagtest::$test) Missing package object"<br />
}<br />
if {$params(chip_name) != ""} {<br />
set chip_name $params(chip_name)<br />
} else {<br />
puts stderr "Error : There is no CHIP NAME found. Please check your ATE ENV"<br />
exit 1<br />
}<br />
set sub_mode_dotting_type $params(sub_mode_dotting_type)<br />
if {[lsearch -exact $valid_submodes $sub_mode_dotting_type] == -1 } {<br />
puts stderr "Error : (::ATE::jtagtest:$test) You must specify a valid sub_mode_dotting_type"<br />
puts stderr " Use \"jtagtest.tn -help -test $test\" to see valid sub modes"<br />
exit 1<br />
}<br />
if { $params(bsdl) != "" } { <br />
set bsdl_file $params(bsdl)<br />
if { [file exists $bsdl_file]} {<br />
} else {<br />
puts stderr "Error: $bsdl_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -bsdl <bsdl file> to specify the correct one"<br />
exit 1<br />
}<br />
if { $params(ballmap) != "" } {<br />
set ballmap_file $params(ballmap)<br />
if { [file exists $ballmap_file]} {<br />
} else {<br />
puts stderr "Error: $ballmap_file doesn't exist, please use -bsdl <bsdl file> to specify the correct one"<br />
}<br />
} else {<br />
puts stderr "Error: Please use -ballmap <ballmap file> to specify the correct one"<br />
exit 1<br />
}<br />
}<br />
puts "jtagtest subtest \"$test\" called ..."<br />
# tie chip_reset 0 , so won't need unlock<br />
# $prgmConfig set_enable_value Pex_pwr_goodn 1<br />
# $prgmConfig set_pin_value Pex_pwr_goodn 0<br />
# $prgmConfig waitRti 1<br />
<br />
set die_obj [config_map_value [config_find $testConfig "CURRENT_TEST"] "die_obj"]<br />
set resetList [::pkgtool::get_vlog_pins_with_test_function $die_obj "RESET#"]<br />
set resetList [lreplace $resetList [lsearch $resetList "jtag_trst_"] [lsearch $resetList "jtag_trst_"]]<br />
puts "Reset pins are : $resetList"<br />
if {[llength $resetList] != 1} {<br />
puts "ERROR, expect only one chip reset"<br />
} else {<br />
foreach reset_signal $resetList {<br />
$prgmConfig set_enable_value $reset_signal 1<br />
$prgmConfig set_pin_value $reset_signal 0<br />
$prgmConfig waitRti 1<br />
}<br />
}<br />
<br />
<br />
puts "blueg , should program non_bypass_wsc_pipeline to 0 "<br />
$prgmConfig set_program_value ".*/TEST_MASTER_CTRL" .*non_bypass_wsc_pipeline.* -value 0<br />
$prgmConfig program<br />
$prgmConfig set_program_value {.*TOP_FS.*} {.*} -value 0 -replicate<br />
$prgmConfig program<br />
<br />
<br />
# turn-off the termination of OD pad<br />
set jtagConfig [$prgmConfig get_jtag_config]; jtag_force $jtagConfig {tb.boundary_leakage_mode} 1 ;#old jtag_force $jtagConfig {tb.boundary_leakage_mode} 1<br />
<br />
set pinShortMode 0<br />
set extraArg [list]<br />
set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $iocm_file pinShortMode $chip_name $extraArg] <br />
#set patterns [initialize_bsdl_pattern $prgmConfig $bsdl_file $ballmap_file $package_obj $pin_dot_file pinShortMode $chip_name $extraArg]<br />
<br />
<br />
$prgmConfig waitRti 10<br />
<br />
if { $test == "vih_gc6_HVALT_EN_s0" } {<br />
$prgmConfig set_program_value {.*/GENPADS_CTRLS} {.*pad_control_disab} -value 1 -replicate<br />
$prgmConfig program<br />
<br />
#puts "Programming gpio_pad_input_rcv_en_jtag 1 ; temp_overt_latch_enable 1 ; i2cs_pad_input_rcv_en_jtag 22'h3fffff "<br />
# blueg , those part cause vec_249 for gp100 also ...<br />
puts "Programming sci2pad_HV_ALT_CTL_SEL 1"<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*} -value 0 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*gpio_pad_input_rcv_en_jtag.*} -value 1 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*temp_overt_latch_enable.*} -value 1 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*i2cs_pad_input_rcv_en_jtag.*} -value 1 -replicate<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*} -value 0 -replicate<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_MASK.*} {.*_mask.*VAUXS_ALT_CTL_SEL.*} -value 1 -replicate<br />
<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS.*} {.*_vals.*gpio_pad_input_rcv_en_jtag.*} -value 1 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS.*} {.*_vals.*temp_overt_latch_enable.*} -value 1 -replicate<br />
#$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS.*} {.*_vals.*i2cs_pad_input_rcv_en_jtag.*} -value 1 -replicate<br />
<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS.*} {.*_vals.*} -value 0 -replicate<br />
$prgmConfig set_program_value {.*INTFC.*PADCAL_VALS.*} {.*_vals.*VAUXS_ALT_CTL_SEL.*} -value 1 -replicate<br />
<br />
$prgmConfig program<br />
$prgmConfig waitRti 10<br />
<br />
}<br />
<br />
if { $pinShortMode == 1} {<br />
if { $sub_mode_dotting_type == "primary" } { <br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HVALT_EN_s0_test $prgmConfig $patterns $test ;#old vih_gc6_HVALT_EN_s0_test $jtagConfig $patterns $test<br />
} elseif {$sub_mode_dotting_type == "secondary" } {<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HVALT_EN_s0_test $prgmConfig $patterns $test ;#old vih_gc6_HVALT_EN_s0_test $jtagConfig $patterns $test<br />
} else {<br />
$patterns set_pin_shorting_mode primary<br />
puts "INFO: set pin shorting mode to primary"<br />
puts "Running $test..."<br />
vih_gc6_HVALT_EN_s0_test $prgmConfig $patterns $test ;#old vih_gc6_HVALT_EN_s0_test $jtagConfig $patterns $test<br />
<br />
$patterns set_pin_shorting_mode secondary<br />
puts "INFO: set pin shorting mode to secondary"<br />
puts "Running $test..."<br />
vih_gc6_HVALT_EN_s0_test $prgmConfig $patterns $test ;#old vih_gc6_HVALT_EN_s0_test $jtagConfig $patterns $test<br />
}<br />
} else {<br />
puts "Running $test..."<br />
vih_gc6_HVALT_EN_s0_test $prgmConfig $patterns $test ;#old vih_gc6_HVALT_EN_s0_test $jtagConfig $patterns $test<br />
}<br />
}<br />
<br />
proc vih_gc6_HVALT_EN_s0_test {prgmConfig patterns test} { ;#old proc vih_gc6_HVALT_EN_s0_test {jtagConfig patterns test} {}<br />
$patterns set_compliance_enables ;# sets compliance enables defined in BSDL<br />
<br />
# Set Bidirs to X<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
# Set_Inputs to X<br />
$patterns set_input_data X<br />
$patterns set_input_enables 1<br />
<br />
# Turn off chip drivers<br />
$patterns set_bsr_control 0<br />
<br />
# X out the expected data for initial load of boundary scan chain<br />
$patterns set_bsr_control_expected X<br />
$patterns set_bsr_inputs_expected X<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected X<br />
<br />
# ScanIn BSR<br />
#if { [info exists bs_dont_use_sample_preload] && $bs_dont_use_sample_preload } {<br />
# bug in mcp67 powerup state machine keeps sample_preload from working<br />
$patterns extest -load<br />
#} else {<br />
# $patterns sample_preload -load<br />
#}<br />
<br />
#<br />
# VIH<br />
#<br />
# put chip into EXTEST first so the preloaded data changes TM to 1 and TEN to 1<br />
if { ($test == "vih") || ($test == "vih_gc6_HVALT_EN_s0") } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all EXTEST]<br />
} elseif { $test == "vih_pulse" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all PULSE_EXTEST]<br />
} elseif { $test == "vih_train" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all TRAIN_EXTEST]<br />
}<br />
$extest shift_ir <br />
<br />
# if { ($test == "vih") || ($test == "vih_gc6_HVALT_EN_s0")} {<br />
# ;#old set extest [jtag_register $jtagConfig EXTEST]<br />
# } elseif { $test == "vih_pulse" } {<br />
# ;#old set extest [jtag_register $jtagConfig PULSE_EXTEST]<br />
# } elseif { $test == "vih_train" } {<br />
# ;#old set extest [jtag_register $jtagConfig TRAIN_EXTEST]<br />
# }<br />
<br />
;#old $extest shift_ir <br />
<br />
# Set the bidirs to inputs, and assign 0s to all inputs and bidirs.<br />
# Expect 1 for inputs and bidirs, 1 for controls.<br />
# <br />
puts "; Setting inputs to 1 for vih at cycle [get_current_cycle [$prgmConfig get_jtag_config]]"<br />
$patterns set_bsr_control 0<br />
$patterns set_bsr_inputs 1<br />
$patterns set_bsr_outputs 0<br />
$patterns set_bsr_buffers 0<br />
$patterns set_bsr_bidirs 0<br />
$patterns set_bidir_data 1 -bsdPinsOnly<br />
$patterns set_bidir_enables 1<br />
$patterns set_input_data 1<br />
$patterns set_input_enables 1<br />
#blueg , this has being change for gp104<br />
#$patterns set_bsr_control_expected 1<br />
$patterns set_bsr_control_expected 0<br />
$patterns set_bsr_inputs_expected 1<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected 1<br />
<br />
$patterns extest -load<br />
<br />
# Wait 5 in test logic reset state<br />
#$prgmConfig move_to_state TLR 5<br />
$prgmConfig move_to_state RTI<br />
puts "Test end...."<br />
<br />
}<br />
<br />
proc vol_gc6_HVALT_EN_s1_test {prgmConfig patterns test} { ;#old proc vol_gc6_HVALT_EN_s1_test {jtagConfig patterns test} {}<br />
#<br />
# VOL test -- put all outputs in drive low mode. <br />
# Last cycle is the point to measure.<br />
#<br />
<br />
# sets compliance enables defined in BSDL<br />
<br />
$patterns set_compliance_enables<br />
<br />
# Turn off chip drivers<br />
$patterns set_bsr_control 0<br />
<br />
# X out the expected data for initial load of boundary scan chain<br />
$patterns set_bsr_control_expected X<br />
$patterns set_bsr_inputs_expected X<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected X<br />
# X bidir data and turn off ATE drivers<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
$patterns set_output_data X<br />
$patterns set_output_enables 0<br />
$patterns set_input_enables 1<br />
#$patterns set_input_data 0<br />
$patterns set_buffer_data X<br />
$patterns set_buffer_enables 0<br />
<br />
$patterns extest -load<br />
<br />
;#old set extest_reg [jtag_register $jtagConfig EXTEST]<br />
;#old $extest_reg shift_ir<br />
<br />
# Drive pins to high through ATE<br />
puts "@ cycle [get_current_cycle [$prgmConfig get_jtag_config]]"<br />
$patterns set_bidir_data 1<br />
$patterns set_bidir_enables 1<br />
# $patterns set_output_data 1<br />
# $patterns set_output_enables 1<br />
$patterns set_input_enables 1<br />
#$patterns set_input_data 1<br />
$patterns set_buffer_data X<br />
$patterns set_buffer_enables 0<br />
<br />
$prgmConfig waitRti 1 ;#old waitRti $jtagConfig 1<br />
<br />
# X bidir data and turn off ATE drivers<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
$patterns set_output_data X<br />
$patterns set_output_enables 0<br />
$patterns set_input_enables 1<br />
#$patterns set_input_data 0<br />
$patterns set_buffer_data X<br />
$patterns set_buffer_enables 0<br />
<br />
# Set up the boundary scan chain to drive out<br />
$patterns set_bsr_inputs 0<br />
$patterns set_bsr_outputs 0<br />
$patterns set_bsr_buffers 0<br />
$patterns set_bsr_bidirs 0<br />
$patterns set_bsr_control 1<br />
<br />
# Shift in the BSR chain<br />
$patterns extest -load<br />
<br />
$prgmConfig waitRti 100 ;#old waitRti $jtagConfig 100<br />
# Set expected data on all output/bidir pins to 1<br />
#$patterns set_bidir_data 0 -bsdPinsOnly<br />
#$patterns set_output_data 0 -bsdPinsOnly<br />
#$patterns set_buffer_data 0 -bsdPinsOnly<br />
set chip_name [$prgmConfig name]<br />
if {[regexp {lr10} $chip_name ]} {<br />
set gpio_length 21<br />
} else {<br />
set gpio_length 31 <br />
}<br />
<br />
if { $test == "vol_gc6_HVALT_EN_s1"} {<br />
for {set tempBit 0} {$tempBit < $gpio_length} {incr tempBit } {<br />
puts "tempBit is : $tempBit"<br />
puts "dbg:Gpio\[${tempBit}\]"<br />
$prgmConfig set_enable_value "Gpio\[${tempBit}\]" 0;#old set_enable_value $jtagConfig "Gpio\[${tempBit}\]" 0<br />
$prgmConfig set_pin_value "Gpio\[${tempBit}\]" 1;#old set_pin_value $jtagConfig "Gpio\[${tempBit}\]" 1<br />
$prgmConfig waitRti 1 ;#old waitRti $jtagConfig 1<br />
$prgmConfig set_pin_value "Gpio\[${tempBit}\]" X;#old set_pin_value $jtagConfig "Gpio\[${tempBit}\]" X<br />
$prgmConfig waitRti 5 ;#old waitRti $jtagConfig 5<br />
}<br />
}<br />
# strobe the results<br />
#$patterns strobe_pins<br />
<br />
}<br />
proc vih_gc6_HV_CLAMP_s1_test {prgmConfig patterns test} { ;#old proc vih_gc6_HV_CLAMP_s1_test {jtagConfig patterns test} {}<br />
$patterns set_compliance_enables ;# sets compliance enables defined in BSDL<br />
<br />
# Set Bidirs to X<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
# Set_Inputs to X<br />
$patterns set_input_data X<br />
$patterns set_input_enables 1<br />
<br />
# Turn off chip drivers<br />
$patterns set_bsr_control 0<br />
<br />
# X out the expected data for initial load of boundary scan chain<br />
$patterns set_bsr_control_expected X<br />
$patterns set_bsr_inputs_expected X<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected X<br />
<br />
# ScanIn BSR<br />
#if { [info exists bs_dont_use_sample_preload] && $bs_dont_use_sample_preload } {<br />
# bug in mcp67 powerup state machine keeps sample_preload from working<br />
$patterns extest -load<br />
#} else {<br />
# $patterns sample_preload -load<br />
#}<br />
<br />
#<br />
# VIH<br />
#<br />
# put chip into EXTEST first so the preloaded data changes TM to 1 and TEN to 1<br />
if { ($test == "vih") || ($test == "vih_gc6_HV_CLAMP_s1") } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all EXTEST]<br />
} elseif { $test == "vih_pulse" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all PULSE_EXTEST]<br />
} elseif { $test == "vih_train" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all TRAIN_EXTEST]<br />
}<br />
$extest shift_ir <br />
<br />
# if { ($test == "vih") || ($test == "vih_gc6_HV_CLAMP_s1")} {<br />
# ;#old set extest [jtag_register $jtagConfig EXTEST]<br />
# } elseif { $test == "vih_pulse" } {<br />
# ;#old set extest [jtag_register $jtagConfig PULSE_EXTEST]<br />
# } elseif { $test == "vih_train" } {<br />
# ;#old set extest [jtag_register $jtagConfig TRAIN_EXTEST]<br />
# }<br />
<br />
;#old $extest shift_ir <br />
<br />
# Set the bidirs to inputs, and assign 0s to all inputs and bidirs.<br />
# Expect 1 for inputs and bidirs, 1 for controls.<br />
# <br />
puts "; Setting inputs to 1 for vih at cycle [get_current_cycle [$prgmConfig get_jtag_config]]"<br />
$patterns set_bsr_control 0<br />
$patterns set_bsr_inputs 1<br />
$patterns set_bsr_outputs 0<br />
$patterns set_bsr_buffers 0<br />
$patterns set_bsr_bidirs 0<br />
$patterns set_bidir_data 1 -bsdPinsOnly<br />
$patterns set_bidir_enables 1<br />
$patterns set_input_data 1<br />
$patterns set_input_enables 1<br />
#blueg , this has being change for gp104<br />
#$patterns set_bsr_control_expected 1<br />
$patterns set_bsr_control_expected 0<br />
$patterns set_bsr_inputs_expected 1<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected 1<br />
<br />
if { ($test == "vih") || ($test == "vih_gc6_HV_CLAMP_s1")} {<br />
$patterns extest -load<br />
} elseif { $test == "vih_pulse" } {<br />
$patterns extest -load -ac<br />
} elseif { $test == "vih_train" } {<br />
$patterns extest -load -ac -train<br />
}<br />
<br />
# Wait 5 in test logic reset state<br />
#$prgmConfig move_to_state TLR 5<br />
$prgmConfig move_to_state RTI<br />
puts "Test end...."<br />
}<br />
<br />
proc vih_gc6_HV_CLAMP_s0_test {prgmConfig patterns test sub_modes } { ;#old proc vih_gc6_HV_CLAMP_s0_test {jtagConfig patterns test} {}<br />
$patterns set_compliance_enables ;# sets compliance enables defined in BSDL<br />
<br />
# Set Bidirs to X<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
# Set_Inputs to X<br />
$patterns set_input_data X<br />
$patterns set_input_enables 1<br />
<br />
# Turn off chip drivers<br />
$patterns set_bsr_control 0<br />
<br />
# X out the expected data for initial load of boundary scan chain<br />
$patterns set_bsr_control_expected X<br />
$patterns set_bsr_inputs_expected X<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected X<br />
<br />
# ScanIn BSR<br />
#if { [info exists bs_dont_use_sample_preload] && $bs_dont_use_sample_preload } {<br />
# bug in mcp67 powerup state machine keeps sample_preload from working<br />
$patterns extest -load<br />
#} else {<br />
# $patterns sample_preload -load<br />
#}<br />
<br />
#<br />
# VIH<br />
#<br />
# put chip into EXTEST first so the preloaded data changes TM to 1 and TEN to 1<br />
if { ($test == "vih") || ($test == "vih_gc6_HV_CLAMP_s0")} {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all EXTEST]<br />
} elseif { $test == "vih_pulse" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all PULSE_EXTEST]<br />
} elseif { $test == "vih_train" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all TRAIN_EXTEST]<br />
}<br />
$extest shift_ir <br />
<br />
# if { ($test == "vih") || ($test == "vih_gc6_HV_CLAMP_s0")} {<br />
# ;#old set extest [jtag_register $jtagConfig EXTEST]<br />
# } elseif { $test == "vih_pulse" } {<br />
# ;#old set extest [jtag_register $jtagConfig PULSE_EXTEST]<br />
# } elseif { $test == "vih_train" } {<br />
# ;#old set extest [jtag_register $jtagConfig TRAIN_EXTEST]<br />
# }<br />
<br />
;#old $extest shift_ir <br />
<br />
# Set the bidirs to inputs, and assign 0s to all inputs and bidirs.<br />
# Expect 1 for inputs and bidirs, 1 for controls.<br />
# <br />
puts "; Setting inputs to 1 for vih at cycle [get_current_cycle [$prgmConfig get_jtag_config]]"<br />
$patterns set_bsr_control 0<br />
$patterns set_bsr_inputs 1<br />
$patterns set_bsr_outputs 0<br />
$patterns set_bsr_buffers 0<br />
$patterns set_bsr_bidirs 0<br />
<br />
$patterns set_bidir_data 1 -bsdPinsOnly<br />
$patterns set_bidir_enables 1<br />
$patterns set_input_data 1<br />
$patterns set_input_enables 1<br />
<br />
#blueg , expect ten shift out 0 ; compare with the set_value before last shift<br />
#blueg , this has being change for gp104<br />
#$patterns set_bsr_control_expected 1<br />
$patterns set_bsr_control_expected 0<br />
#blueg , expect inputs io_in/taa_cell 1<br />
$patterns set_bsr_inputs_expected 1<br />
$patterns set_bsr_bidirs_expected 1<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
<br />
if { $test == "vih_gc6_HV_CLAMP_s0"} {<br />
puts "Because follow pad's TZI output can be clamped by HV_CORE_CLAMP, so set the expected value to be 0"<br />
<br />
set chip_name [$prgmConfig name]<br />
if {[regexp {ga10} $chip_name ]} {<br />
set gpio_length 36<br />
} elseif {[regexp {lr10} $chip_name ]} {<br />
set gpio_length 21<br />
} else {<br />
set gpio_length 31<br />
} <br />
for {set tempBit 0} {$tempBit < $gpio_length} {incr tempBit } {<br />
puts "tempBit is : $tempBit"<br />
puts "dbg:Gpio\[${tempBit}\]"<br />
$patterns set_bsr_expected "Gpio\[${tempBit}\]" 0<br />
}<br />
for {set tempBit 0} {$tempBit < $gpio_length} {incr tempBit } {<br />
puts "tempBit is : $tempBit"<br />
puts "dbg:testio_d\[${tempBit}\]"<br />
$patterns set_bsr_expected "Gpio\[${tempBit}\]" 0<br />
}<br />
set chip_name [$prgmConfig name]<br />
if {[regexp {lr10} $chip_name ]} {<br />
puts "dbg: xtaloutbuff 0"<br />
#$patterns set_bsr_expected "xtaloutbuff" 0<br />
$patterns set_bsr_expected "fuse_en" 0<br />
#In gp100, overt pad doesn't have it's TZI clamp to 0 based on HV_CORE_CLMP signal, confirmed by designers<br />
#$patterns set_bsr_expected "overt" 0<br />
puts "dbg: we don't have xtals_in"<br />
#$patterns set_bsr_expected "xtals_in" 0<br />
$patterns set_bsr_expected "rom_so" 0<br />
$patterns set_bsr_expected "rom_si" 0<br />
$patterns set_bsr_expected "rom_sclk" 0<br />
$patterns set_bsr_expected "rom_cs_n" 0<br />
} else {<br />
puts "dbg: xtaloutbuff 0"<br />
$patterns set_bsr_expected "xtaloutbuff" 0<br />
$patterns set_bsr_expected "fuse_en" 0<br />
#In gp100, overt pad doesn't have it's TZI clamp to 0 based on HV_CORE_CLMP signal, confirmed by designers<br />
#$patterns set_bsr_expected "overt" 0<br />
puts "dbg: we don't have xtals_in"<br />
#$patterns set_bsr_expected "xtals_in" 0<br />
$patterns set_bsr_expected "Rom_so" 0<br />
$patterns set_bsr_expected "Rom_si" 0<br />
$patterns set_bsr_expected "rom_sclk" 0<br />
$patterns set_bsr_expected "strap\[0\]" 0<br />
#Edited As there are no boundary scan cells related to strap1, 2, 3, 4 , removing them<br />
$patterns set_bsr_expected "strap\[1\]" 0<br />
$patterns set_bsr_expected "strap\[2\]" 0<br />
$patterns set_bsr_expected "strap\[3\]" 0<br />
$patterns set_bsr_expected "strap\[4\]" 0<br />
$patterns set_bsr_expected "strap\[5\]" 0<br />
puts "blueg, newly add strap6 ext_refclka ext_refclkb rom_cs"<br />
$patterns set_bsr_expected "rom_cs_" 0<br />
}<br />
# $patterns set_bsr_expected "strap\[6\]" 0<br />
#TBD$patterns set_bsr_expected "ext_refclk_fl" 0<br />
##vanky,ext_refclk_sli do not exsite in tu106/tu116/tu117<br />
#set chip_name [$prgmConfig name]<br />
if {[regexp {102} $chip_name ]} {<br />
puts "setting ext_refclk_sli ext_refclk_fl ifp\[A-F\]_aux to 0"<br />
$patterns set_bsr_expected "ext_refclk_sli" 0<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux" 0<br />
$patterns set_bsr_expected "ifpB_aux" 0<br />
$patterns set_bsr_expected "ifpC_aux" 0<br />
$patterns set_bsr_expected "ifpD_aux" 0<br />
$patterns set_bsr_expected "ifpE_aux" 0<br />
$patterns set_bsr_expected "ifpF_aux" 0<br />
} elseif {[regexp {103} $chip_name ] || [regexp {104} $chip_name ]} {<br />
puts "setting ext_refclk_fl ifp\[A-F\]_aux to 0"<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux" 0<br />
$patterns set_bsr_expected "ifpB_aux" 0<br />
$patterns set_bsr_expected "ifpC_aux" 0<br />
$patterns set_bsr_expected "ifpD_aux" 0<br />
$patterns set_bsr_expected "ifpE_aux" 0<br />
$patterns set_bsr_expected "ifpF_aux" 0<br />
} elseif {[regexp {106} $chip_name ]} {<br />
puts "rupingx add setting ext_refclk_sli ext_refclk_fl ifp\[A-F\]_aux to 0"<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux" 0<br />
$patterns set_bsr_expected "ifpB_aux" 0<br />
$patterns set_bsr_expected "ifpC_aux" 0<br />
$patterns set_bsr_expected "ifpD_aux" 0<br />
$patterns set_bsr_expected "ifpE_aux" 0<br />
$patterns set_bsr_expected "ifpF_aux" 0<br />
} elseif {[regexp {107} $chip_name ]} {<br />
puts "rupingx add setting ext_refclk_sli ext_refclk_fl ifp\[A-F\]_aux to 0"<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux" 0<br />
$patterns set_bsr_expected "ifpB_aux" 0<br />
$patterns set_bsr_expected "ifpC_aux" 0<br />
$patterns set_bsr_expected "ifpD_aux" 0<br />
$patterns set_bsr_expected "ifpE_aux" 0<br />
} elseif {[regexp {116} $chip_name ]} {<br />
} elseif {[regexp {117} $chip_name ]} {<br />
} else {<br />
#TB $patterns set_bsr_expected "ext_refclk_sli" 0<br />
}<br />
#$patterns set_bsr_expected "fl_refclk" 0<br />
#Removing I2ca/b/c as their pads do not hav5 HV_CORE_CLMP signal control<br />
#comment this due to I2c have HV_CORE_CLMP in ga100<br />
# set I2cList [list b c s]<br />
# foreach tempPort $I2cList {<br />
# $patterns set_bsr_expected "I2c${tempPort}_scl" 0<br />
# $patterns set_bsr_expected "I2c${tempPort}_sda" 0<br />
# puts "dbg: I2c${tempPort}_scl 0"<br />
# }<br />
# For ga100, no if* pins<br />
# $patterns set_bsr_expected "ifpA_aux" 0<br />
# $patterns set_bsr_expected "ifpB_aux" 0<br />
# $patterns set_bsr_expected "ifpC_aux" 0<br />
# $patterns set_bsr_expected "ifpD_aux" 0<br />
# $patterns set_bsr_expected "ifpE_aux" 0<br />
if {[regexp {117} $chip_name ]} {<br />
} else {<br />
# $patterns set_bsr_expected "ifpF_aux" 0<br />
}<br />
<br />
if { [regexp {i2c} $sub_modes] } {<br />
puts "only for i2c add value test"<br />
if {[regexp {102} $chip_name ]} {<br />
puts "setting ifp\[A-F\]_aux_ to 0 in i2c mode"<br />
$patterns set_bsr_expected "ifpA_aux_" 0<br />
$patterns set_bsr_expected "ifpB_aux_" 0<br />
$patterns set_bsr_expected "ifpC_aux_" 0<br />
$patterns set_bsr_expected "ifpD_aux_" 0<br />
$patterns set_bsr_expected "ifpE_aux_" 0<br />
$patterns set_bsr_expected "ifpF_aux_" 0<br />
} elseif {[regexp {106} $chip_name ]} {<br />
puts "setting ifp\[A-F\]_aux_ to 0 in i2c mode"<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux_" 0<br />
$patterns set_bsr_expected "ifpB_aux_" 0<br />
$patterns set_bsr_expected "ifpC_aux_" 0<br />
$patterns set_bsr_expected "ifpD_aux_" 0<br />
$patterns set_bsr_expected "ifpE_aux_" 0<br />
$patterns set_bsr_expected "ifpF_aux_" 0<br />
} elseif {[regexp {107} $chip_name ]} {<br />
puts "setting ifp\[A-F\]_aux_ to 0 in i2c mode"<br />
$patterns set_bsr_expected "ext_refclk_fl" 0<br />
$patterns set_bsr_expected "ifpA_aux_" 0<br />
$patterns set_bsr_expected "ifpB_aux_" 0<br />
$patterns set_bsr_expected "ifpC_aux_" 0<br />
$patterns set_bsr_expected "ifpD_aux_" 0<br />
$patterns set_bsr_expected "ifpE_aux_" 0<br />
} else {<br />
# $patterns set_bsr_expected "ifpF_aux_" 0<br />
}<br />
}<br />
<br />
if {[regexp {117} $chip_name ]} {<br />
} else {<br />
#@ $patterns set_bsr_expected "usb_scl" 0<br />
#@ $patterns set_bsr_expected "usb_sda" 0<br />
}<br />
# pex_wake_n has no HV_CORE_CLAMP in ga100<br />
# $patterns set_bsr_expected "pex_wake_n" 0<br />
<br />
}<br />
#set dbg_msg_enable 1<br />
#dump_bsr_setting -prgmConfig $prgmConfig -patterns_obj $patterns -enable $dbg_msg_enable<br />
<br />
$patterns extest -load<br />
<br />
# Wait 5 in test logic reset state<br />
#$prgmConfig move_to_state TLR 5<br />
$prgmConfig move_to_state RTI<br />
puts "Test end...."<br />
<br />
}<br />
<br />
proc vih_fb_clamp_test { prgmConfig patterns test skipped_fba_cmd_pin_list} { ;#old proc vih_fb_clamp_test { jtagConfig patterns test skipped_fba_cmd_pin_list} {}<br />
<br />
$patterns set_compliance_enables ;# sets compliance enables defined in BSDL<br />
if { $test == "vih_fb_clamp" } {<br />
#blueg , this pin have being remove , also can not find any pad with POWER_CLAMP scan type<br />
#$prgmConfig set_pin_value fb_clamp 1;#old set_pin_value $jtagConfig fb_clamp 1<br />
# sci2fb_fb_clamp = (jtag_mask_pgclamp_dest_PD_NVVDD) ? jtag_val_pgclamp_dest_PD_NVVDD : fb_clamp;<br />
# $prgmConfig set_program_value {.*/POWER_CTL.*} {.*split_rail_override.*} -value 1'b1<br />
# $prgmConfig set_program_value {.*/POWER_CTL.*} {.*split_rail_value.*} -value 1'b0<br />
# $prgmConfig program<br />
# $prgmConfig set_program_value {.*RG_CTL_MASK} {.*jtag_mask_pgclamp_dest_PD_NVVDD} -value 1<br />
# $prgmConfig set_program_value {.*RG_CTL_VAL} {.*jtag_val_pgclamp_dest_PD_NVVDD} -value 1<br />
# $prgmConfig program<br />
}<br />
# Set Bidirs to X<br />
$patterns set_bidir_data X<br />
$patterns set_bidir_enables 0<br />
# Set_Inputs to X<br />
$patterns set_input_data X<br />
$patterns set_input_enables 1<br />
<br />
# Turn off chip drivers<br />
$patterns set_bsr_control 0<br />
<br />
# X out the expected data for initial load of boundary scan chain<br />
$patterns set_bsr_control_expected X<br />
$patterns set_bsr_inputs_expected X<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected X<br />
<br />
# ScanIn BSR<br />
#if { [info exists bs_dont_use_sample_preload] && $bs_dont_use_sample_preload } {<br />
# bug in mcp67 powerup state machine keeps sample_preload from working<br />
set dbg_msg_enable 1<br />
dump_bsr_setting -prgmConfig $prgmConfig -patterns_obj $patterns -enable $dbg_msg_enable<br />
$patterns extest -load<br />
#} else {<br />
# $patterns sample_preload -load<br />
#}<br />
<br />
#<br />
# VIH<br />
#<br />
# put chip into EXTEST first so the preloaded data changes TM to 1 and TEN to 1<br />
if { ($test == "vih") || ($test == "vih_fb_clamp")} {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all EXTEST]<br />
} elseif { $test == "vih_pulse" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all PULSE_EXTEST]<br />
} elseif { $test == "vih_train" } {<br />
set extest [build_jtag_register_chain [$prgmConfig get_jtag_config] -all TRAIN_EXTEST]<br />
}<br />
$extest shift_ir <br />
<br />
#if { ($test == "vih") || ($test == "vih_fb_clamp")} {<br />
# ;#old set extest [jtag_register $jtagConfig EXTEST]<br />
#} elseif { $test == "vih_pulse" } {<br />
# ;#old set extest [jtag_register $jtagConfig PULSE_EXTEST]<br />
#} elseif { $test == "vih_train" } {<br />
# ;#old set extest [jtag_register $jtagConfig TRAIN_EXTEST]<br />
#}<br />
<br />
;#old $extest shift_ir <br />
<br />
# Set the bidirs to inputs, and assign 0s to all inputs and bidirs.<br />
# Expect 1 for inputs and bidirs, 1 for controls.<br />
# <br />
puts "; Setting inputs to 1 for vih at cycle [get_current_cycle [$prgmConfig get_jtag_config]]"<br />
$patterns set_bsr_control 0<br />
$patterns set_bsr_inputs 1<br />
$patterns set_bsr_outputs 0<br />
$patterns set_bsr_buffers 0<br />
$patterns set_bsr_bidirs 0<br />
$patterns set_bidir_data 1 -bsdPinsOnly<br />
$patterns set_bidir_enables 1<br />
$patterns set_input_data 1<br />
$patterns set_input_enables 1<br />
#blueg , this has being change since gp104<br />
#$patterns set_bsr_control_expected 1<br />
$patterns set_bsr_control_expected 0<br />
$patterns set_bsr_inputs_expected 1<br />
$patterns set_bsr_outputs_expected X<br />
$patterns set_bsr_buffers_expected X<br />
$patterns set_bsr_bidirs_expected 1<br />
set chip_name [$prgmConfig name]<br />
if { $test == "vih_fb_clamp"} {<br />
if {[regexp {102} $chip_name ]} {<br />
#puts "dbg, 102"<br />
set fb_portlist [list a b c d e f]<br />
} elseif {[regexp {104} $chip_name ]} {<br />
#puts "dbg, 104"<br />
set fb_portlist [list a b c d]<br />
} elseif {[regexp {106} $chip_name ]} {<br />
#puts "dbg, 106"<br />
set fb_portlist [list a b c d]<br />
} elseif {[regexp {116} $chip_name ]} {<br />
set fb_portlist [list a b c]<br />
} elseif {[regexp {117} $chip_name ]} {<br />
set fb_portlist [list a b] <br />
} else {<br />
#puts "dbg, default"<br />
set fb_portlist [list a b c d]<br />
}<br />
#set fb_portlist [list A B C D ]<br />
for {set tempBit 0} {$tempBit < 36} {incr tempBit } {<br />
puts "tempBit is : $tempBit"<br />
if {[lsearch -exact $skipped_fba_cmd_pin_list $tempBit] != -1} {<br />
puts "skip bit: $tempBit"<br />
continue<br />
}<br />
foreach tempType $fb_portlist {<br />
puts "dbg:Fb${tempType}_cmd\[${tempBit}\]"<br />
# $patterns set_bsr_expected "Fb${tempType}_cmd\[${tempBit}\]" 0<br />
}<br />
}<br />
for {set tempBit 0} {$tempBit < 64} {incr tempBit } {<br />
foreach tempType $fb_portlist {<br />
puts "dbg:Fb${tempType}_data\[${tempBit}\]"<br />
# $patterns set_bsr_expected "Fb${tempType}_data\[${tempBit}\]" 0<br />
}<br />
}<br />
for {set tempBit 0} {$tempBit < 8} {incr tempBit } {<br />
foreach tempType $fb_portlist {<br />
# $patterns set_bsr_expected "Fb${tempType}_dqm\[${tempBit}\]" 0<br />
# $patterns set_bsr_expected "Fb${tempType}_wdqs\[${tempBit}\]" X<br />
#$patterns set_bsr_expected "Fb${tempType}_rdqs\[${tempBit}\]" 0<br />
#$patterns set_bsr_expected "FB${tempType}_DQS_RN${tempBit}" 0<br />
}<br />
}<br />
}<br />
<br />
set dbg_msg_enable 1<br />
dump_bsr_setting -prgmConfig $prgmConfig -patterns_obj $patterns -enable $dbg_msg_enable<br />
$patterns extest -load<br />
<br />
# Wait 5 in test logic reset state<br />
#$prgmConfig move_to_state TLR 5<br />
$prgmConfig move_to_state RTI 5<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-95029687621641152016-07-23T05:30:00.001-07:002016-07-23T05:30:09.464-07:00Kickass Torrents Founder Artem Vaulin Arrested<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Kickass torrents</b> alleged owner, Artem Vaulin, have been arrested in Poland as part of a lawsuit filed by the United States. Kat in many domains have been seized in the suit, and as a result, none of the popular torrent site webpages are currently working. The lawsuit was filed in Chicago, as well as the alleged owner, Artem Vaulin from Kharkov, Ukraine, is being sued for copyright infringement and money laundering conspiracy<br />
<br />
<h2 style="text-align: left;">
#1) Charges Against Artem Vaulin Faces Up to 20 Years in Jail</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJS_YJCriks9LBzNilq2QZTOZoQjEnyV_1dy_1GNZMC4kOzLlER8sxncmzDghfx-XLbasrW64eYMjnduPjvlIkpEGg2W5JUGYwhVTdTkwSHIPVvvhnM-uXnX0NmP6cegWz3caXpX5X_YHj/s1600/fanclub.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJS_YJCriks9LBzNilq2QZTOZoQjEnyV_1dy_1GNZMC4kOzLlER8sxncmzDghfx-XLbasrW64eYMjnduPjvlIkpEGg2W5JUGYwhVTdTkwSHIPVvvhnM-uXnX0NmP6cegWz3caXpX5X_YHj/s640/fanclub.jpg" width="640" /></a></div>
<div>
<div>
The United States submitted accusation Artyom Vaulin, which include criminal copyright infringement, conspiracy to commit copyright infringement and conspiracy to commit money laundering. The suit claims that Vaulin, 30, owns and operates Kickass torrents or Kat. Vaulin arrested in Poland and the federal authorities will extradite him to the United States, the Justice Department said in a press release.</div>
<div>
<br /></div>
<div>
Assistant Attorney General Caldwell, commenting on the announcement said.</div>
<div>
<br /></div>
<div>
Vaulin accused of running illegal file-sharing on today's most visited website, which is responsible for more than $ 1 billion in illegal distribution of copyrighted materials. His arrest in Poland, however, shows once again that cybercriminals can run but they can not hide from justice.</div>
<div>
<br /></div>
<div>
You can read the entire complaint against Vaulin here, or below, as provided by the United States Attorney's Office in a press release.</div>
</div>
<h2 style="text-align: left;">
<br />#2). 7 Kickass Torrents Domains Have Been Seized </h2>
<div>
<div>
In addition to arresting Vaulin, the US government seized seven Kickass Torrent domains. According to the complaint, the seized domains are</div>
<div>
<br /></div>
<div>
kickasstorrents.com</div>
<div>
kastatic.com</div>
<div>
thekat.tv</div>
<div>
kat.cr</div>
<div>
kickass.cr</div>
<div>
kickass.to</div>
<div>
kat.ph</div>
<div>
<br /></div>
<div>
The Kickass torrents status of the site, the service still has other domains or trusted sites, which are not mentioned in the complaint. This Domains include kickassto.co, kickass.ag, kickass.cs, katproxy.is, thekat.se, katproxy.cc, lovekat.org, and onions website. But at the time of publication, all these sites are down.</div>
<div>
<br /></div>
<div>
KAT moved to its domain before because of copyright lawsuits and seizures. In early June, and the site is pushing back against repeated attempts to block his bands, and it added a new domain on Tor (dark web) network.</div>
<div>
<br /></div>
<div>
BNO News reported that Kickass Torrent- users can specify that some technical problems with the site, as well as searches return only error messages. The Kickass torrents status of the site earlier in the day, the site is not experiencing technical difficulties. But now that same status page is unavailable.</div>
<div>
<br /></div>
<div>
Kickass Torrents is the world's most popular illegal file-sharing website. It receives more than 50 million visitors in 28 languages, and has a net worth of about $ 54 million. Its annual advertising revenue is estimated at $ 12.5 million to $ 22.3 million.</div>
<div>
<br /></div>
<div>
Milk does not host files on its website, but provides links to torrent files, letting users download unauthorized copies of movies, TV shows, etc.</div>
<div>
<br /></div>
<div>
The appeal notes that the milk does not respect the Digital Millennium Copyright Act, but instead of sending a notice of violation, it would respond that this claim can not be processed because,</div>
<div>
<br /></div>
<div>
1) the demand does not exist in English.</div>
<div>
2) You have no proof showing that you are the copyright holder, or that you are acting on behalf of the copyright holder,</div>
<div>
3) You have no evidence showing that he is legally copyrighted content.</div>
<div>
4) There were more then [SIC] 30 torrents listed Claim mail.</div>
<div>
5) In your content, which took place on another site. ".</div>
<div>
<br /></div>
<h2 style="text-align: left;">
3. Apple may have given the US Government Personal Profile Vaulin</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVtRBnOO9dq8uRUIw5Fz9lPKvKUPpdjhbb_wap70FJKSXzm0bIroLoMx7MiHBV769sZKVmhzg-UbtXapDHpXHoiCcCH1lzSyC72JiitTCQpm6ofUuZrKFycpuQk-s9hjhH-pCDwlilEx_/s1600/gettyimages-491652311.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVtRBnOO9dq8uRUIw5Fz9lPKvKUPpdjhbb_wap70FJKSXzm0bIroLoMx7MiHBV769sZKVmhzg-UbtXapDHpXHoiCcCH1lzSyC72JiitTCQpm6ofUuZrKFycpuQk-s9hjhH-pCDwlilEx_/s640/gettyimages-491652311.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
According to the complaint, federal investigators posed as an advertiser, by buying ads KAT- in March 2016 for $ 300 a day. She was given the information, the Bank of Latvia making a payment, but they did not mention, Kat anywhere. When he went to buy a second statement, he said that the ads were only available in the pricier $ 1,000 to $ 3,200 a day. He kept buying more ads and May, the Bank of Estonia has the details. Through the investigation, authorities learned that the bank account was KickassTorrents use and purchase records, including the hosting of the records that show hosted by KAT Chicago a little more than three years.</div>
<div>
<br /></div>
<div>
The investigator also discovered the email account associated with Vaulin, which was tirm@me.com: He was able to obtain records Apple-'s find out what IP address and what transactions have been carried out using the email address: According to the complaint (on the PG: 34):</div>
<div>
<br /></div>
<div>
Records show Apple- provided that they tirm@me.com conducted using iTunes deal IP- address of 109.86.226.203 on or about July 31, 2015. The same day, the same IP address used to access KAT Facebook account . Then, on or about December 9-2015 in., Tirm@me.com used IP address 78.108.181.81 hold another iTunes deal. The same IP address as a login to access Kat Facebook account on or about December 4, 2015</div>
</div>
</div>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-14665634092628062572016-07-14T22:20:00.000-07:002016-07-14T22:25:59.557-07:0011 Ways How to make Money Online<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
<b>11 ways to How to make Money Online without any Investment</b></h2>
<div>
there are many to earn money from online, you can get a list bunch of types when you do a search for <b>How to make Money Online</b>. every one needs to earn money from home this is due to may be get fedup with the bosses that you work under or may be some extra cash ,etc</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLn8t5BBO3QOcS3LznBpqZdI0rPcosKymcjfTf_vel7Lmj5D1ylibCW6ra3WEcwuIvn9UP9qQkIhL6XxfrRsUjDm6LqMr6aR1W1fDQSQ4nTUNst5B8UU5GRPzIV6MtgF1jtJ_eGocD6xw2/s1600/how+to+make+money+online.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="How to make Money Online" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLn8t5BBO3QOcS3LznBpqZdI0rPcosKymcjfTf_vel7Lmj5D1ylibCW6ra3WEcwuIvn9UP9qQkIhL6XxfrRsUjDm6LqMr6aR1W1fDQSQ4nTUNst5B8UU5GRPzIV6MtgF1jtJ_eGocD6xw2/s1600/how+to+make+money+online.jpg" title="" /></a></div>
<div>
<b><br /></b></div>
<div>
these are free ways to How to make Money Online,these are for only seriouse people who want cash some extra cash .we all know money isn't a joke you need to work hard to pay off. often nothing is free in this world </div>
<div>
<br /></div>
<h3 style="text-align: left;">
<b>Count for 11 Ways How to make Money Online</b></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSpeeUWCTv3sQjdTFOWpS8h4idQfgyFFJPiCg2H59O_knGgvdBsvMztQj2D32x-JPeOKbz2GeAb6iCCrbUhq0bebQhlaKVrh0u_ZkGFTPs1t_d2TbK26b0iHEojsWAt7zJTymJ3p3sO_C/s1600/17fizt.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSpeeUWCTv3sQjdTFOWpS8h4idQfgyFFJPiCg2H59O_knGgvdBsvMztQj2D32x-JPeOKbz2GeAb6iCCrbUhq0bebQhlaKVrh0u_ZkGFTPs1t_d2TbK26b0iHEojsWAt7zJTymJ3p3sO_C/s640/17fizt.gif" width="640" /></a></div>
<h3 style="text-align: left;">
<b><br /></b>1. Upload YouTube Videos and Get Paid for AD Views</h3>
You do not need to invest in expensive video equipment or you can use free version like campstudio ice-cream screen recorder etc. Just learn how to use your smartphone's video upload capability entertaining or informative videos, commercials and want to have a little cash to get your videos to play each video angle. YouTube star PewDiePie earned $ 7.4 million in revenue, according to multiple media reports.<br />
<br />
<h3 style="text-align: left;">
2. Design Useful Apps for mobile devices</h3>
<br />
If you design a wildly popular program (which is harder than it sounds), you might be pleasantly surprised by the income they generate. Offering one or more applications in the iTunes or Android App Store, giving wide exposure to the prospects of your creations. And income may be generated by charging for the app, displaying in-app ads or charging for in-app features and upgrades.<br />
<br />
<h3 style="text-align: left;">
3. Sell your original Instagram photos</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwUEdIlKADXc9z0r_bpiJr6SosYi4Q1zbO4lxWcQMEMBsgh8YnBDqpr6FiIg50JAjFz0uBLTZ_EbWmgwM2M7aHtj7qWQC6r0YvOCwnu76i5j6ap4oTgAPprvRlq_OqCO5NLHKfYusidDbj/s1600/how+to+make+money.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwUEdIlKADXc9z0r_bpiJr6SosYi4Q1zbO4lxWcQMEMBsgh8YnBDqpr6FiIg50JAjFz0uBLTZ_EbWmgwM2M7aHtj7qWQC6r0YvOCwnu76i5j6ap4oTgAPprvRlq_OqCO5NLHKfYusidDbj/s320/how+to+make+money.gif" width="320" /></a></div>
<br />
While you can share your photos Instagram- in social media, you can also sell copies of your photos on profit Instaprints.com and similar sites.<br />
<h3 style="text-align: left;">
<br />4. To your knowledge</h3>
<br />
Do you have in-depth expertise on specific hobby or any other entity. You can create a website offering your expertise to others for a price, like Skype is offering music lessons for a fee or charge for video classes on gardening. You can make additional income, or become wildly successful this method of making money online.<br />
<h3 style="text-align: left;">
<br />5. Become an Amazon Associate</h3>
<br />
This program allows you to earn money, including affiliate links to various products offered by Amazon. When a visitor views on your blogs or social media pages and links to your site clicks through to Amazon, you can earn commissions from Amazon at the time of the qualifying session of the purchased goods.<br />
<br />
<h3 style="text-align: left;">
<br />6. Become an Internet Life Coach</h3>
<br />
Because of the strong interest in the quality of life and work-life balance issues, life coaches have become popular in recent years. In contrast to the intellectual requirements of a technical or executive coach, life coaching can be successful if you possess common sense, responsibility and respect for the family to enjoy life max every day and help others do the same.<br />
<br />
<h3 style="text-align: left;">
7. To assist organizations in social media</h3>
<br />
Most major retailers will pay you to promote your business on their websites and social media pages. They can pay you cash or gift cards. For example, some restaurants could give you a gift card when you check in a Facebook- or bark.<br />
<br />
<h3 style="text-align: left;">
8. To promote businesses, products and services through Affiliate Programs</h3>
<br />
If you have a website or blog, you can make money through affiliation with other businesses and websites that will pay you a percentage of sales subsidiary causes.<br />
<br />
<h3 style="text-align: left;">
9. Selling handmade jewelry and crafts</h3>
<br />
For those who want to make handcrafted items, websites such as Etsy are ideal to make some money out of such hobbies. Dedicated handcrafters should check Etsy and other sites to find the best fit for their products.<br />
<br />
<h3 style="text-align: left;">
10. Become a Virtual Assistant</h3>
<br />
There are individual websites such as oDesk known, that often have jobs, virtual assistants. Just as the physical positions of assistant, you'll get to help pay for executives with a wide range of issues.<br />
<br />
<h3 style="text-align: left;">
11. Become a Freelance Writer</h3>
<br />
Do you have a passion for writing. If writing to make money by getting your blood moving, there are many sites offering recommendations for aspiring and experienced writers alike.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-1280846788521056842016-07-14T20:55:00.003-07:002016-07-14T21:10:10.641-07:00Top 5 factors effecting your Organic Search<div dir="ltr" style="text-align: left;" trbidi="on">
Are you Experiencing drop in Organic search for your website or blog.Whether you are an Experienced seo or you run your own bussniess. If you experience the terrific drop down in your <b>Organice Search </b>traffic and trying to figure out whats the cause of breaking down your <b>Organic search results</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkeYV_doyc8VHaHrYGhNPNOCjrwc-i1bwuF3xbBTaRbtJ0K_mUiGn_E_OfniJeX-IKpaR_4OnTFCHwrSkHg8aMMD9GarCr0a6veEk9K94h1o8WOmCIcYQDO4ph_NLbN41HHaJFdwWTW1ud/s1600/Organic+Search.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkeYV_doyc8VHaHrYGhNPNOCjrwc-i1bwuF3xbBTaRbtJ0K_mUiGn_E_OfniJeX-IKpaR_4OnTFCHwrSkHg8aMMD9GarCr0a6veEk9K94h1o8WOmCIcYQDO4ph_NLbN41HHaJFdwWTW1ud/s1600/Organic+Search.gif" /></a></div>
<br />
Well as a modern seo has changed a lot and there may be lots of Causes<br />
<br />
1) <b>Panda effect</b><br />
2)<b>Humming Bird effect</b><br />
3) <b>penguin</b> and soo on. but make it sure, im not going to cover all this in one post<br />
<br />
<br />
Note: here im presenting Basics of <b>Top 10 factors effecting your Organic Search </b><br />
<h2 style="text-align: left;">
Major fluctuations in organic Search traffic or search engine rankings.</h2>
<br />
<b><br /></b>
<br />
<h3 style="text-align: left;">
<b>#1) Your webpage didnt Indexed</b></h3>
<b><br /></b>
first of all check your site by just going to google.com and enter this: "<span style="color: blue;">site:yourwebsiteurl.com</span>" to make sure that your website is indexed or not .if your website indexed by showing your webpages in SERPS then check step 2→ else go to your <b>robots.txt</b> file to make sure that you have'nt blocked the webpages on your site/blog<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-scl5bPTV_GJayDxOn5rdqtZTNfni4m-j1KO-rKiF64aELG-gfRC9d47Pn0Exowx0GBi7Usuyyie2HhWPkOW-aiSQesdSgfnqI7A3sfrCz5D9A5PHFT2u5ikcbDySdkBH9V9jKejUGDsn/s1600/check+website+url+in+google.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-scl5bPTV_GJayDxOn5rdqtZTNfni4m-j1KO-rKiF64aELG-gfRC9d47Pn0Exowx0GBi7Usuyyie2HhWPkOW-aiSQesdSgfnqI7A3sfrCz5D9A5PHFT2u5ikcbDySdkBH9V9jKejUGDsn/s1600/check+website+url+in+google.png" /></a></div>
<br />
<br />
<h3 style="text-align: left;">
#2) Bot filters</h3>
You are currently exclude all known bots and spiders Google Analytics- States. If not, you may be experiencing inflated traffic measurement and not even know it. Typically, bots enter via the main page and cascade down throughout your site navigation, simulating real user behavior. One telltale sign of bot traffic in a highly trafficked page with a high bounce rate, low conversions and low average time on the page.<br />
<br />
While it is good to create a custom field to filter out bots using filter bot overall a good place to start. It is important to note that the filters can not be applied retroactively, so if you recently turned this feature, you need to get less traffic. Also, double check that you filter traffic in and out of your own IP address.<br />
<br />
<h2 style="text-align: left;">
#3) inproper Url re-direction</h2>
<div>
<br /></div>
Especially if two or more pages are optimized for the same keyword. In practice, it will compete against each other in the pages of the <b>SERPs</b>, potentially reducing rankings for those pages. Here is an example of what this might look like.<br />
<br />
URL 1: <span style="color: blue;">www.mysite.com/snacks/Kfc-chicken</span><br />
URL 2: <span style="color: blue;">www.mysite.com/chicken-items/kfc-chicken-bucket</span><br />
<br />
Fortunately, if you have access to <b>Keyword Tracking tool</b>, you will be able to see on a day-by-day breakdown of URLs Google choose to consider the word. A little time and effort, you should be able to remedy the situation.<br />
<br />
<h3 style="text-align: left;">
#4) Google Updates</h3>
<div>
as i mentioned above <b>google updates</b> factors may also can cause your <b>Organic search</b> traffic down its might be penguin,panda,humming bird etc.to avoid these kind of problems make a <b>site audit </b>or promote a seo consultant for site checkup</div>
<h2 style="text-align: left;">
<br />#5) structured data markup</h2>
<div>
Pratically <b>Structured Data Markup</b> May or may not the cause for your <b>Organic search </b>traffic drops, even though google bots can crawl your webpages if your websites doesnt have <b>structured data markup </b>for eg: you can one of the top most blogger Amit agarwal is not using his structured data in his blog : labnol.org</div>
<div>
<br /></div>
<div>
But i recommed you to use Structured data for google will understand its pattern or category does the content is about and helps you in displaying RFP,Rich card which is also considered one of the <b>google ranking factors</b></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Note: these are the Basic factors of effecting your <b>Organic search traffic</b>. there are many other factors are also to be considered </div>
<div>
<br /></div>
<div>
Thats all folks here today with this article were are listening to you put your comments below regarding <b>Top 5 factors effecting your Organic Search.</b></div>
<div>
<b><br /></b></div>
<div>
Dont forget to share this article one share can help any bloggers :-D</div>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-19291829378745494052016-07-12T09:13:00.002-07:002016-07-12T09:18:37.600-07:00Top 15 Most Popular Viral Sites of July 2k16<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on">Here are the top 15 Most Popular Viral Websites as derived from our eBizMBA Rank which is a continually updated average of each website's Alexa Global Traffic Rank, and U.S. Traffic Rank from both Compete and Quantcast."*#*" Denotes an estimate for sites with limited data.<br />
<br />
<br />
</div><table border="1" cellpadding="5" cellspacing="0" style="width: 200%px;"><tbody>
<tr> <td><h3>15 Most Popular Blogs of July 2016</h3></td> <td><h3> Short description</h3></td> </tr>
<tr> <td>01 BuzzFeed<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC6O3gpE8yqz_10JxYBRilVclfIXitm0ivwlewgqSQPNTFL_MhoRnUEQpoOS6vDl5JuzPNBprb-1vPJXhoFLCdyzRmFLvWtxgY4tKzMlzTUAwbj-41iuIVsInCwpsz7Ns0d0CYgiSxEx-w/s1600/buzzfeed.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC6O3gpE8yqz_10JxYBRilVclfIXitm0ivwlewgqSQPNTFL_MhoRnUEQpoOS6vDl5JuzPNBprb-1vPJXhoFLCdyzRmFLvWtxgY4tKzMlzTUAwbj-41iuIVsInCwpsz7Ns0d0CYgiSxEx-w/s1600/buzzfeed.gif" /></a></div><br />
</td> <td><b>76 - eBizMBA Rank</b> | 150,000,000 - Estimated Unique Monthly Visitors | 88 - Compete Rank | 13 - Quantcast Rank | 126 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA<br />
<br />
</td> </tr>
<tr> <td>02 – UpWorthy<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivFVnRUM56h8sH01vppcwz_RetViUM3XLZ2d-pAyPgVRtHEE_FSRnvLNK-iYLwQ-FoOEd2y0FuM8GVRVX1xU-vCKrR0JGcUGz8Gw8sjUaZ-mUzaYd_NSykIJjj6YY_XcITiWlc5nQvyof2/s1600/upworthy.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivFVnRUM56h8sH01vppcwz_RetViUM3XLZ2d-pAyPgVRtHEE_FSRnvLNK-iYLwQ-FoOEd2y0FuM8GVRVX1xU-vCKrR0JGcUGz8Gw8sjUaZ-mUzaYd_NSykIJjj6YY_XcITiWlc5nQvyof2/s1600/upworthy.gif" /></a></div><br />
<br />
</td> <td><b>257 - eBizMBA Rank | </b>45,000,000 - Estimated Unique Monthly Visitors | 305 - Compete Rank | 37 - Quantcast Rank | 429 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>03 –ViralNova<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbzZguQcK6W45DtSgYjREGEITKxbPmt8lJVaTKiAKSvDXxcaUyYvktowr3dtm5xXIzuscoRxp3t8bYp1toKyRyHK2KzBkQP4cXvn9ZXcMWOXEF86TWdQtO5SSLJw9ZYwdCzap8OD8EAVSE/s1600/viralnova.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbzZguQcK6W45DtSgYjREGEITKxbPmt8lJVaTKiAKSvDXxcaUyYvktowr3dtm5xXIzuscoRxp3t8bYp1toKyRyHK2KzBkQP4cXvn9ZXcMWOXEF86TWdQtO5SSLJw9ZYwdCzap8OD8EAVSE/s1600/viralnova.gif" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><b><br />
</b></td> <td><b>439 - eBizMBA Rank | </b>29,000,000 - Estimated Unique Monthly Visitors | 221 - Compete Rank | 505 - Quantcast Rank | 591 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>04 – Zergnet<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjunbYYj2WF6dIUkoKylE-4ZJR4BhBJdmjFf934U4RMZhPCULCS8bHS2LZ6Fj8_A6gwvbuNWSkNJk-ZwIwwJWEcx6cXdDYZZyNKzf6omzgTS8udFL8t4suK5z1vNATeMUCQmMZ7NEpOfA0a/s1600/zergnet.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjunbYYj2WF6dIUkoKylE-4ZJR4BhBJdmjFf934U4RMZhPCULCS8bHS2LZ6Fj8_A6gwvbuNWSkNJk-ZwIwwJWEcx6cXdDYZZyNKzf6omzgTS8udFL8t4suK5z1vNATeMUCQmMZ7NEpOfA0a/s1600/zergnet.gif" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div></td> <td><b>418 - eBizMBA Rank</b> | 24,000,000 - Estimated Unique Monthly Visitors | 682 - Compete Rank | 349 - Quantcast Rank | 222 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>05 – LittleThings<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvAXBOWwOrYUpmVv0jDC9CBKbvjGc_qU86zdhIJZt6zjxggVtRIHxrvWWGKSP5aiGiVurWMvSQk9bfdFHs-fMcw2wSREANwrDR34aAUI3z7QepR7VPDd4lUI9DZwhdNhSLCSylP5PnJVne/s1600/littlethings.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvAXBOWwOrYUpmVv0jDC9CBKbvjGc_qU86zdhIJZt6zjxggVtRIHxrvWWGKSP5aiGiVurWMvSQk9bfdFHs-fMcw2wSREANwrDR34aAUI3z7QepR7VPDd4lUI9DZwhdNhSLCSylP5PnJVne/s1600/littlethings.gif" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
</td> <td><b>567 - eBizMBA Rank | </b>25,500,000 - Estimated Unique Monthly Visitors | 271 - Compete Rank | 27 - Quantcast Rank | 1,404 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>06 – Distractify<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXAnqX2JATWZBeN_uQbyZ0IarU61mwZgS9hTa-SelXzEA6tdQOp4B0AqhFRz7CU_sSZFdEE9WYZHi-9SqrpHtaLtb-92VquFGurVWQ8fhtqPwxB6jnqR38_fitRleAFBmKJ-ZlmNDdX9hl/s1600/distractify.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXAnqX2JATWZBeN_uQbyZ0IarU61mwZgS9hTa-SelXzEA6tdQOp4B0AqhFRz7CU_sSZFdEE9WYZHi-9SqrpHtaLtb-92VquFGurVWQ8fhtqPwxB6jnqR38_fitRleAFBmKJ-ZlmNDdX9hl/s1600/distractify.gif" /></a></div><br />
</td> <td><b>664 - eBizMBA Rank | </b>25,000,000 - Estimated Unique Monthly Visitors | *302* - Compete Rank | 67 - Quantcast Rank | 1,624 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>07 –ThoughtCatalog<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWcSXCUz1BscAzCsi5VNPUHiVyKA3OLIlVK1AuAKwZ00csjKmuR0WW6GmjcwMfDJQjut_TfOx5LAPVHiHdAr_5HnrR_YDAQ1-eNF1NBXAcFq7uILdIIgnKR1CTZbdvgg5bPComMOaYYZQn/s1600/thoughtcatalog.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWcSXCUz1BscAzCsi5VNPUHiVyKA3OLIlVK1AuAKwZ00csjKmuR0WW6GmjcwMfDJQjut_TfOx5LAPVHiHdAr_5HnrR_YDAQ1-eNF1NBXAcFq7uILdIIgnKR1CTZbdvgg5bPComMOaYYZQn/s1600/thoughtcatalog.gif" /></a></div><br />
</td> <td><b>801 - eBizMBA Rank | </b>12,500,000 - Estimated Unique Monthly Visitors | 857 - Compete Rank | 47 - Quantcast Rank | 1,498 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>08 – Ranker<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ4JRPat9MeSqIOhO6EZPVq5q-8KBShW_RL0tCE-B8QSnVxpKnkcRPUj_HvfwgpNkTl7WIKDPTknipqfA2ApwqXPXR8JU8WLy8MJzIcHnqGsYlnTMcaXyPPiUh26hO4m4r6yJ-CTeACFCu/s1600/ranker.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ4JRPat9MeSqIOhO6EZPVq5q-8KBShW_RL0tCE-B8QSnVxpKnkcRPUj_HvfwgpNkTl7WIKDPTknipqfA2ApwqXPXR8JU8WLy8MJzIcHnqGsYlnTMcaXyPPiUh26hO4m4r6yJ-CTeACFCu/s1600/ranker.gif" /></a></div><br />
</td> <td>813 - eBizMBA Rank | 12,000,000 - Estimated Unique Monthly Visitors | 593 - Compete Rank | 187 - Quantcast Rank | 1,658 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA<br />
<div><br />
</div></td> </tr>
<tr> <td>09 – PlayBuzz<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH9leies1tqpDv2qMIpfFrK-7AQwJLIlVKlbWhTrBBB3kzR3KLxco9amQHn4n3lig2HRLQfTV6b1DNs2Q_baHScCMkXOypVKN1HfPsC3pTU68JFhFsBhICabUJpgI5tLTi1K5KwspDjrBi/s1600/playbuzz.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH9leies1tqpDv2qMIpfFrK-7AQwJLIlVKlbWhTrBBB3kzR3KLxco9amQHn4n3lig2HRLQfTV6b1DNs2Q_baHScCMkXOypVKN1HfPsC3pTU68JFhFsBhICabUJpgI5tLTi1K5KwspDjrBi/s1600/playbuzz.gif" /></a></div><br />
</td> <td><b>1,421 - eBizMBA Rank |</b> 11,500,000 - Estimated Unique Monthly Visitors | 669 - Compete Rank | 39 - Quantcast Rank | 3,556 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>10 – Uproxx<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC1VgJpdma1h0ghqdrVPXqtlHAbopIRGGO3mryN92W6MGBctq1Fk1UEzvHO7rCQZEmpX3HVreCB2vgsTYRX570lh20Eo3rk2EVdkASqrFxByZIWi3SosWMt72N9FqjF2yC0_hJkIRwoSxX/s1600/uproxx.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC1VgJpdma1h0ghqdrVPXqtlHAbopIRGGO3mryN92W6MGBctq1Fk1UEzvHO7rCQZEmpX3HVreCB2vgsTYRX570lh20Eo3rk2EVdkASqrFxByZIWi3SosWMt72N9FqjF2yC0_hJkIRwoSxX/s1600/uproxx.gif" /></a></div><br />
</td> <td><b>1,598 - eBizMBA Rank |</b> 11,000,000 - Estimated Unique Monthly Visitors | 1,881 - Compete Rank | 234 - Quantcast Rank | 2,679 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>11 – PolicyMic<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ActufmSRstH3OSEIj-vUfGbsVqpsqY3in-VwWbipkNMvqm5g4n-5jQE_U6tvVWRQzxn0GBguFr1ykteHRE3sW_L8q-yr7zHPhTc7AuSfQBYke_KE1a9Lzc1TDr7S1okfogQFi0daXJU_/s1600/policymic.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ActufmSRstH3OSEIj-vUfGbsVqpsqY3in-VwWbipkNMvqm5g4n-5jQE_U6tvVWRQzxn0GBguFr1ykteHRE3sW_L8q-yr7zHPhTc7AuSfQBYke_KE1a9Lzc1TDr7S1okfogQFi0daXJU_/s1600/policymic.gif" /></a></div><br />
</td> <td><b>1,653- eBizMBA Rank | </b>10,500,000 - Estimated Unique Monthly Visitors | 1,817 - Compete Rank | 130 - Quantcast Rank | 3,012 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>12 – KnowYourMeme<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7DNZTAZu-Br1ZLkZaV8QNk1koz-g2VvE-swtPYYw3cmoBFPZRWnSTjyu87o0QnTGrqcBvbIklSsckZBjFroY5Mlo6tGGVIkhJwURR1w8OguzvxtPwyUWfj2tj8w6F0g-34_iZk7FjRxl/s1600/knowyourmeme.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7DNZTAZu-Br1ZLkZaV8QNk1koz-g2VvE-swtPYYw3cmoBFPZRWnSTjyu87o0QnTGrqcBvbIklSsckZBjFroY5Mlo6tGGVIkhJwURR1w8OguzvxtPwyUWfj2tj8w6F0g-34_iZk7FjRxl/s1600/knowyourmeme.gif" /></a></div><br />
</td> <td><b>1,700 - eBizMBA Rank | </b>10,000,000 - Estimated Unique Monthly Visitors | *2,000* - Compete Rank | 498 - Quantcast Rank | 2,602 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>13 – DailyDot<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhku9FMuVyD1rS3zolbLF53qBYqsNx-23K3nU8DuYEYJ6mwCiG-0L6WcIx46r7nj4CoC09EhXlx6WKpXIwIiE2ODpYApFVwerxWf9WwnfRgCL5WmWxG6-eG8mYu3HtexkJ5oPqYntemBYJt/s1600/dailydot.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhku9FMuVyD1rS3zolbLF53qBYqsNx-23K3nU8DuYEYJ6mwCiG-0L6WcIx46r7nj4CoC09EhXlx6WKpXIwIiE2ODpYApFVwerxWf9WwnfRgCL5WmWxG6-eG8mYu3HtexkJ5oPqYntemBYJt/s1600/dailydot.gif" /></a></div><br />
</td> <td><b>2,099 - eBizMBA Rank | </b>6,000,000 - Estimated Unique Monthly Visitors | 1,948 - Compete Rank | 266 - Quantcast Rank | 4,083 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>14 – TwistedSifter<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrHfaniOHEDumNayiOGde9AwyVm_UHK71vSaYbIShxERoTcGkD0WjedXP9_b8P_XSF6izzqlWFJv1L-56gTbEAAXXV-DBlSEOPt-OVEW_RDy4BoFPyGg-ie6y4Cml4VQ-uuIBRrOfI1N41/s1600/twistedsifter.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrHfaniOHEDumNayiOGde9AwyVm_UHK71vSaYbIShxERoTcGkD0WjedXP9_b8P_XSF6izzqlWFJv1L-56gTbEAAXXV-DBlSEOPt-OVEW_RDy4BoFPyGg-ie6y4Cml4VQ-uuIBRrOfI1N41/s1600/twistedsifter.gif" /></a></div><br />
</td> <td><b>3,687 - eBizMBA Rank | </b>4,000,000 - Estimated Unique Monthly Visitors | 2,452 - Compete Rank | 2,361 - Quantcast Rank | 6,248 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
<tr> <td>15 – TwentyTwoWords<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQK5IGyy0lxiFy3_9w11tQ95I-zVllKU4FQeqJc6s-r2uONm7ZI3AnM8DvfTnPYp4ghn3F9N64dZB_f23gSly8CH3ohrq4eg_8bwsB5lRjquscvTQ85aaEc8H8ebU_CgI8bUqdcKTlNSXZ/s1600/twentytwowords.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQK5IGyy0lxiFy3_9w11tQ95I-zVllKU4FQeqJc6s-r2uONm7ZI3AnM8DvfTnPYp4ghn3F9N64dZB_f23gSly8CH3ohrq4eg_8bwsB5lRjquscvTQ85aaEc8H8ebU_CgI8bUqdcKTlNSXZ/s1600/twentytwowords.gif" /></a></div><br />
</td> <td><b>3,794 - eBizMBA Rank | </b>3,500,000 - Estimated Unique Monthly Visitors | 2,813 - Compete Rank | *3,200* - Quantcast Rank | 5,368 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Viral Sites | eBizMBA</td> </tr>
</tbody></table></div><br />
<a href="http://1lytebyte.blogspot.in/2016/07/15-most-popular-blogs-of-july-2016.html" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DGo5G7_FxsZnRWjbP2z-JjfFDd9GVAGE1jFBjXxjJNVbRBuPKmQjZBzT350aT5f4xi7_kUtN2_hV-mt6cCrAx5YLWPUrR-ESx3IE4RBJMN_dQkCf2k1U5A-quOmoiDt02uGp2JU6RPT1/s320/Best-and-Popular-Blogs.jpg" width="320" /></a><br />
So above is all about<b> Top 15 Most Popular Viral Sites :</b><br />
<b><br />
</b> <b>Also see <a href="http://1lytebyte.blogspot.in/2016/07/15-most-popular-blogs-of-july-2016.html" rel="dofollow" target="_blank">15 Most Popular Blogs of July 2016</a></b><br />
<b><br />
</b> <b><br />
</b></div>Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-68242133001336012982016-07-12T07:58:00.000-07:002016-07-12T09:19:30.536-07:0015 Most Popular Blogs of July 2016<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on">Here are the top 15 Most Popular Blogs as derived from our eBizMBA Rank which is a continually updated average of each website's Alexa Global Traffic Rank, and U.S. Traffic Rank from both Compete and Quantcast.. Denotes an estimate for sites with limited data.<br />
<br />
<br />
</div><table border="1" cellpadding="5" cellspacing="0" style="width: 200%px;"><tbody>
<tr> <td><h3>15 Most Popular Blogs of July 2016</h3></td> <td><h3> Short description</h3></td> </tr>
<tr> <td><a href="http://www.huffingtonpost.com/" rel="nofollow" target="_blank">1 | Huffington Post</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLvghm_3CiYUWozP1SDjeRRmy1FpWjov4x7Jgh_7jZ18cWe7kpiPW-k_Ta_5oo4a3QyIVkPlj0sHHED3tM-mh38cTycTpUX4bVEyIPYFEUsaQTpUkafWwtxAsThbxVzyv_t-BwKJX2d7iO/s1600/huffingtonpost.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLvghm_3CiYUWozP1SDjeRRmy1FpWjov4x7Jgh_7jZ18cWe7kpiPW-k_Ta_5oo4a3QyIVkPlj0sHHED3tM-mh38cTycTpUX4bVEyIPYFEUsaQTpUkafWwtxAsThbxVzyv_t-BwKJX2d7iO/s1600/huffingtonpost.gif" /></a></div><br />
</td> <td><b>38 - eBizMBA Rank</b> | <b>110,000,000</b> - Estimated Unique Monthly Visitors |<b> 21</b> - Compete Rank | <b>13</b> - Quantcast Rank | 79- Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td><a href="http://www.tmz.com/" rel="nofollow" target="_blank">02 – TMZ</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYhZDaGqY3eMlKqdRRKvjZWFY-gvdHvLJTiSUfkYnFZMvIbcpBat007mGVE3jN0xYh_e6et84eX-QYPOoHlWOlubV0UUXNDHZuATS52WnKSS02pwKvPz7pJCYb5AqF1xiQY8op-Cy_AmfP/s1600/tmz.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYhZDaGqY3eMlKqdRRKvjZWFY-gvdHvLJTiSUfkYnFZMvIbcpBat007mGVE3jN0xYh_e6et84eX-QYPOoHlWOlubV0UUXNDHZuATS52WnKSS02pwKvPz7pJCYb5AqF1xiQY8op-Cy_AmfP/s1600/tmz.gif" /></a></div><br />
<br />
</td> <td><b>187 - eBizMBA Rank</b> | <b>30,000,000</b> - Estimated Unique Monthly Visitors | <b>166</b> - Compete Rank | <b>55</b> - Quantcast Rank | 340 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>03 –<a href="http://www.businessinsider.com/" rel="nofollow" target="_blank">Business Insider</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfQnS8PBjcPBvHaKbu5A0dVTxtx9-7VB1PqMCKUsYoynMMyT7tB4NLT2seWfQW15xPCtlEEK0PznHSGUYavBXsGEYAbngM9Gn9Jbri8hlIEDZtlNAqaqXunwwDmmSs8tWXsmqDcfUilZHf/s1600/businessinsider.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfQnS8PBjcPBvHaKbu5A0dVTxtx9-7VB1PqMCKUsYoynMMyT7tB4NLT2seWfQW15xPCtlEEK0PznHSGUYavBXsGEYAbngM9Gn9Jbri8hlIEDZtlNAqaqXunwwDmmSs8tWXsmqDcfUilZHf/s1600/businessinsider.gif" /></a></div><b><br />
</b></td> <td><b>414 - eBizMBA Rank</b> | 25,500,000 - Estimated Unique Monthly Visitors | 314 - Compete Rank | 710 - Quantcast Rank | 218 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>04 – <a href="http://www.mashable.com/" rel="nofollow" target="_blank">Mashable</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF6Vb1A1YXqRliu3wEvgwX5je5iuS8lWc3HmqHOFYqFmDAjA183i6PiMr0-12rL7IDc6iALjLsD0lBunvALlf20hgAS8jD7gDTOdqK9_Q63IRJcbTd5ct4xsUNSZ5KIDHVmhIZsATyu49y/s1600/mashable.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF6Vb1A1YXqRliu3wEvgwX5je5iuS8lWc3HmqHOFYqFmDAjA183i6PiMr0-12rL7IDc6iALjLsD0lBunvALlf20hgAS8jD7gDTOdqK9_Q63IRJcbTd5ct4xsUNSZ5KIDHVmhIZsATyu49y/s1600/mashable.gif" /></a></div></td> <td><b>418 - eBizMBA Rank</b> | 24,000,000 - Estimated Unique Monthly Visitors | 682 - Compete Rank | 349 - Quantcast Rank | 222 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>05 – <a href="http://www.gizmodo.com/" rel="nofollow" target="_blank">Gizmodo</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXCUZOzwWp3NecyOlQ4ZSI9kxaQMn2FCSTv2qF_O7DyhyWC3nMJBE42lwTTPcSkBAIyYbQ__ElZ9vTyzL-3ghmT7IDlhMsH3yO_eJ5q-Ot-0SCJf5flteggeKqstbecKn23Mk8HnPDwQ0/s1600/gizmodo.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXCUZOzwWp3NecyOlQ4ZSI9kxaQMn2FCSTv2qF_O7DyhyWC3nMJBE42lwTTPcSkBAIyYbQ__ElZ9vTyzL-3ghmT7IDlhMsH3yO_eJ5q-Ot-0SCJf5flteggeKqstbecKn23Mk8HnPDwQ0/s1600/gizmodo.gif" /></a></div><br />
</td> <td><b>434 - eBizMBA Rank</b> | 23,500,000 - Estimated Unique Monthly Visitors | 769 - Compete Rank | 111 - Quantcast Rank | 421 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>06 – LifeHacker<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCneByFJ4uW305KYeMkcQ1h4Sg7fohyE5bHyuWJRVA6JZK4pycio5aeQ10e-XIELJKZ9P-_M00BN8hOs1VE9NN97TpEqQzkrhV2_uY2TJ7RuxSO5gUhv-x5koFGV2RuwSMPBL6S3yfGHh4/s1600/lifehacker.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCneByFJ4uW305KYeMkcQ1h4Sg7fohyE5bHyuWJRVA6JZK4pycio5aeQ10e-XIELJKZ9P-_M00BN8hOs1VE9NN97TpEqQzkrhV2_uY2TJ7RuxSO5gUhv-x5koFGV2RuwSMPBL6S3yfGHh4/s1600/lifehacker.gif" /></a></div><br />
</td> <td><b>448 - eBizMBA Rank</b> | 23,250,000 - Estimated Unique Monthly Visitors | 807 - Compete Rank | 133 - Quantcast Rank | 403 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>07 – <a href="http://www.gawker.com/" rel="nofollow" target="_blank">Gawker</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM33VHO3nMvZDBxxsHJh-ev5EWvla9U6sB9vk8n1G27HLr5PTOGDKOb0PEtuMC4DJFimSK2JsRU5Dk2QgzkIVhSMqr4s4r7G91OPF9xsEIgsqpCoB_3EKVzMxDMb860QKZ4dUYozEdrNpr/s1600/gawker.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM33VHO3nMvZDBxxsHJh-ev5EWvla9U6sB9vk8n1G27HLr5PTOGDKOb0PEtuMC4DJFimSK2JsRU5Dk2QgzkIVhSMqr4s4r7G91OPF9xsEIgsqpCoB_3EKVzMxDMb860QKZ4dUYozEdrNpr/s1600/gawker.gif" /></a></div><br />
</td> <td><b>510 - eBizMBA Rank</b> | 22,000,000 - Estimated Unique Monthly Visitors | 783 - Compete Rank | 99 - Quantcast Rank | 648 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>08 – <a href="http://www.thedailybeast.com/" rel="nofollow" target="_blank">The Daily Beast</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4RyP4J4sMpoDtz9z7sai6V8Utd9eC1XLq3ZNh_IWVdT64hqHdiv-2oR5wzJhdrbONepOUWw1lL11IbCfuVwLjDCGt_uqDu_3UCNZN71AKRGX_Ci03wRTi7lSqkfdscytF4FFL9az0LyoE/s1600/thedailybeast.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4RyP4J4sMpoDtz9z7sai6V8Utd9eC1XLq3ZNh_IWVdT64hqHdiv-2oR5wzJhdrbONepOUWw1lL11IbCfuVwLjDCGt_uqDu_3UCNZN71AKRGX_Ci03wRTi7lSqkfdscytF4FFL9az0LyoE/s1600/thedailybeast.gif" /></a></div><br />
</td> <td><b>674 - eBizMBA Rank </b>| 15,500,000 - Estimated Unique Monthly Visitors | 706 - Compete Rank | 275 - Quantcast Rank | 1,041 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA></td> </tr>
<tr> <td>09 – <a href="http://www.techcrunch.com/" rel="nofollow" target="_blank">Tech Crunch</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp6FmQgCEXfhF5up4O5QRGkA5TDKl42ifavL5DytClsCOsPX94OlatPdiSk22sxYDxUbMDc5yb0yd5-qyTdYQiXkBWjqZ7yW2JNFokm_Qih1fx6HZem6Bg26mtFmKDkTk5lzDwTQ5G_PHP/s1600/techcrunch.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp6FmQgCEXfhF5up4O5QRGkA5TDKl42ifavL5DytClsCOsPX94OlatPdiSk22sxYDxUbMDc5yb0yd5-qyTdYQiXkBWjqZ7yW2JNFokm_Qih1fx6HZem6Bg26mtFmKDkTk5lzDwTQ5G_PHP/s1600/techcrunch.gif" /></a></div><br />
</td> <td><b>684 - eBizMBA Rank </b>| 15,000,000 - Estimated Unique Monthly Visitors | 1,229 - Compete Rank | *435* - Quantcast Rank | 387 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>10 – <a href="http://www.perezhilton.com/" rel="nofollow" target="_blank">Perez Hilton</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Yq5yTGJzPtOVAu3PohQujseaRG1FebR0y84kipUsivIwH_1SXa1YJnAUtKN4cMMOMFjO9JKXv5c0AzzOzqdrMug5K05qmK0E7ie0uZyMZqv7BXg872SQbzAH9YBaUKJUzwFOyxfvkuDp/s1600/perezhilton.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Yq5yTGJzPtOVAu3PohQujseaRG1FebR0y84kipUsivIwH_1SXa1YJnAUtKN4cMMOMFjO9JKXv5c0AzzOzqdrMug5K05qmK0E7ie0uZyMZqv7BXg872SQbzAH9YBaUKJUzwFOyxfvkuDp/s1600/perezhilton.gif" /></a></div><br />
</td> <td><b>795 - eBizMBA Rank </b>| 14,500,000 - Estimated Unique Monthly Visitors | 941 - Compete Rank | 251 - Quantcast Rank | 1,194 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>11 – <a href="http://www.engadget.com/" rel="nofollow" target="_blank">Engadget</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6eHShXjhiw2iKsslj6XpFAi2HqTU5Khllz7ds0GxL5CMSHxB1qu9rspsbrYeA_2f8A_VZTmbCq2VByeVb3KG0TgUcNaQN7FAXGw3DEUkxFiK-BjKbrZf6NR99SoTgKv1bqY0bn0RG5wb6/s1600/engadget.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6eHShXjhiw2iKsslj6XpFAi2HqTU5Khllz7ds0GxL5CMSHxB1qu9rspsbrYeA_2f8A_VZTmbCq2VByeVb3KG0TgUcNaQN7FAXGw3DEUkxFiK-BjKbrZf6NR99SoTgKv1bqY0bn0RG5wb6/s1600/engadget.gif" /></a></div><br />
</td> <td><b>1,026 - eBizMBA Rank</b> | 14,000,000 - Estimated Unique Monthly Visitors | 1,430 - Compete Rank | *1,193* - Quantcast Rank | 454 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>12 – <a href="http://www.cheezburger.com/" rel="nofollow" target="_blank">Cheezburger</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgErB7ohXdP7bCNo7IvyxTmtbnuvLdaFhWhaVSsl4MPN6zi41IytRU0anV7mG0AP9yZqIjTxDtLY39AfJt8D0oZOk6GGYZ-3Y3CJuddTXfVkT1dL6Sp9Hwz5BMyX0BF4NNLs9MNhI2pKTwe/s1600/cheezburger.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgErB7ohXdP7bCNo7IvyxTmtbnuvLdaFhWhaVSsl4MPN6zi41IytRU0anV7mG0AP9yZqIjTxDtLY39AfJt8D0oZOk6GGYZ-3Y3CJuddTXfVkT1dL6Sp9Hwz5BMyX0BF4NNLs9MNhI2pKTwe/s1600/cheezburger.gif" /></a></div><br />
</td> <td><b>1,071 - eBizMBA Rank </b>| 13,000,000 - Estimated Unique Monthly Visitors | 1,856 - Compete Rank | 339 - Quantcast Rank | 1,017 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>13 – <a href="http://www.jezebel.com/" rel="nofollow" target="_blank">Jezebel</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3LHIGWIDEg7ICaErE32Xr3h21PrsQDABULsL101Nm8jE2DQOQqc9-8Gbp4fBVI2Y8ru18FxHpUc1vFjgXQkMm68PWbn8rcGEQpfmRXMVnMTd32ZKRvoFC7g5iUf1kck5EKmZBi_TEXi40/s1600/jezebel.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3LHIGWIDEg7ICaErE32Xr3h21PrsQDABULsL101Nm8jE2DQOQqc9-8Gbp4fBVI2Y8ru18FxHpUc1vFjgXQkMm68PWbn8rcGEQpfmRXMVnMTd32ZKRvoFC7g5iUf1kck5EKmZBi_TEXi40/s1600/jezebel.gif" /></a></div><br />
</td> <td><b>1,109 - eBizMBA Rank </b>| 12,500,000 - Estimated Unique Monthly Visitors | 1,374 - Compete Rank | 174 - Quantcast Rank | 1,780 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>14 – <a href="http://www.deadspin.com/" rel="nofollow" target="_blank">Deadspin</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD0fEHCaHy9l7TZOpzTgdSeEkLZSNLvH9JFHtFbYqV6HGoxVKRmNarpnF09asJaUH6xv_19r5pU7tTcqUFX5ZCSyQ_fNumY8u8ulFcOrDaRuEWSRhVJKtn_0iZkz6D_Ibj70hPDyntcRXv/s1600/deadspin.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD0fEHCaHy9l7TZOpzTgdSeEkLZSNLvH9JFHtFbYqV6HGoxVKRmNarpnF09asJaUH6xv_19r5pU7tTcqUFX5ZCSyQ_fNumY8u8ulFcOrDaRuEWSRhVJKtn_0iZkz6D_Ibj70hPDyntcRXv/s1600/deadspin.gif" /></a></div><br />
<br />
</td> <td><b>1,110 - eBizMBA Rank </b>| 12,250,000 - Estimated Unique Monthly Visitors | 1,623 - Compete Rank | 90 - Quantcast Rank | 1,617 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
<tr> <td>15 – <a href="http://www.kotaku.com/" rel="nofollow" target="_blank">Kotaku</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_ELxyHVtIuhAo03opAKlyxxo98aZs7O6sPF6lO4gMl91557kNqXD89pAwWYkEn9SxyWSJ1vvLEsfXvOeJpMIT87Z1ptf90IkLHJ045hKl8bnGIPnPZPWSqtYeYQa6pxGnK0Hak95oHlS/s1600/kotaku.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_ELxyHVtIuhAo03opAKlyxxo98aZs7O6sPF6lO4gMl91557kNqXD89pAwWYkEn9SxyWSJ1vvLEsfXvOeJpMIT87Z1ptf90IkLHJ045hKl8bnGIPnPZPWSqtYeYQa6pxGnK0Hak95oHlS/s1600/kotaku.gif" /></a></div><br />
</td> <td><b>1,428 - eBizMBA Rank </b>| 10,000,000 - Estimated Unique Monthly Visitors | 2,600 - Compete Rank | 308 - Quantcast Rank | 1,377 - Alexa Rank | Last Updated: July 1, 2016.<br />
The Most Popular Blogs | eBizMBA</td> </tr>
</tbody></table></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1lytebyte.blogspot.in/2016/07/top-15-most-popular-viral-sites-of-july.html" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjzmcnC02wN_0U6r8oNAcxupGa3S5Ubs0q9HBJnS1743mFfX8m-3WOiY0yWQX3cy8YAGs6YcHe9RXZSEU84zJ-JF_NhcYld-oX9ZV6ev295rJqb2tbbjBA4opo1vJQ7p7bKT2eZmob6Fbn/s320/Viral-video.jpg" width="320" /></a></div>So above is all about <b> 15 Most Popular Blogs of July 2016</b><br />
<b><br />
</b> <b>you might also like our <a href="http://1lytebyte.blogspot.in/2016/07/top-15-most-popular-viral-sites-of-july.html" rel="nofollow" target="_blank">Top 15 Most Popular Viral Sites of July 2k16</a></b><br />
<b><br />
</b></div>Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-1624601068406271682016-07-10T17:27:00.000-07:002016-07-12T01:07:04.816-07:00Dark Web : Over 290k Plus US Driver’s License Has been Stolen<div dir="ltr" style="text-align: left;" trbidi="on">Using the name of the NSA, a hacker put some dark Web network of sales data that contain personal details and driver's license information of more than 290,000 US citizens who had then stolen after breaking the chains of a number of organizations in Louisiana. The hacker will upload the data to the real deal, metro market.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FYelLjlHvWGtK-PaL-VPQV6k2LFegF3wDguhz10Yp1KpKgjNdKOXvQLwFqZrUpRFSsjmfcb3gR2PgK9C8QRi_Dwz2zV0jcDTMLauXnwui1xBX2nRmlI3kCSgMZtJC_SSyvzIS3u5yGD7/s1600/hack-813290_1280.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FYelLjlHvWGtK-PaL-VPQV6k2LFegF3wDguhz10Yp1KpKgjNdKOXvQLwFqZrUpRFSsjmfcb3gR2PgK9C8QRi_Dwz2zV0jcDTMLauXnwui1xBX2nRmlI3kCSgMZtJC_SSyvzIS3u5yGD7/s1600/hack-813290_1280.jpg" /></a></div><br />
NSA says that extracted the driver's details stolen databases that contained information on driving violations. He also argued that the information held in databases, as well as the more serious crimes like murder.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFDJzjXIfhii7S38TjajdrNpPKg9pGUHc-wpFtZi587jE7S4Q7RzvWKOu7PDEIaOfBtCbBdHGGPnFt-qD9QB_I6k-5UDdrrHQ-vuSplbT4_0ospd4EIzFq5_WEkCwO7gQD-vERGnHQcVnr/s1600/hacker-puts-up-for-sale-290-000-us-driver-s-license-records-505161-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFDJzjXIfhii7S38TjajdrNpPKg9pGUHc-wpFtZi587jE7S4Q7RzvWKOu7PDEIaOfBtCbBdHGGPnFt-qD9QB_I6k-5UDdrrHQ-vuSplbT4_0ospd4EIzFq5_WEkCwO7gQD-vERGnHQcVnr/s1600/hacker-puts-up-for-sale-290-000-us-driver-s-license-records-505161-2.jpg" /></a></div><br />
Much personal information is stolen and is available, which includes a driving offense, a fine common name, first name, last name, date of birth, driver license number, a state, a driver's license, address, city, state, Zip code, phone number, and email address: The hacker said that the most common birth dates from 1983, but the data also includes information about the teenagers and the elderly.<br />
<br />
"Ignore this price list. My suggestion is that you and I can both agree, and I create a personal list that you can use to get this database, "the advertisement states beginning hackers. It is noted that "the NSA 'hacker does not have the real deal on selling a story, and positive responses from users without the authority or the hacker can find it difficult to move the data dump.</div>Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-36197185112495271832016-07-10T17:14:00.001-07:002016-07-10T17:14:54.778-07:00Mark Zuckerberg's Twitter and Pinterest Accounts Hacked <div dir="ltr" style="text-align: left;" trbidi="on">
<b>Mark Zuckerberg's Twitter and Pinterest Accounts Hacked</b> :Mark Zuckerberg, CEO Facebook, showed us how important a strong password and then hacked his Twitter and Pinterest accounts to a group known as <b>OurMine</b>:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCnmIDAbW6ZmwYhuTv4roOshl-bGnzDOz9AEEL2uYqkoiK__x8S-R1Ol8lvb1bhf-nz7Dijt-n5ANfu6FuneZkBpaIwcXKIAOJecaKOe08y-qEj9m3hhgfrvPUvwP1iugI9t5NJ0cPIYsQ/s1600/mark-zuck-hacked_01121BA704A240BF839722BBCFAAF91D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCnmIDAbW6ZmwYhuTv4roOshl-bGnzDOz9AEEL2uYqkoiK__x8S-R1Ol8lvb1bhf-nz7Dijt-n5ANfu6FuneZkBpaIwcXKIAOJecaKOe08y-qEj9m3hhgfrvPUvwP1iugI9t5NJ0cPIYsQ/s1600/mark-zuck-hacked_01121BA704A240BF839722BBCFAAF91D.jpg" /></a></div>
<br />
Celebrities, CEOs and world leaders of all the main targets of hackers, but Zuckerberg invited mainly attack for allegedly using a six-character password, which featured all two unique characters - dadada.<br />
<br />
The hack leads all the way to the LinkedIn breach in 2012, which saw more than six million passwords stolen. Zuckerberg seems to have been one of them. Recently, the passwords of 2012. Breach of dark paving on the market where they are sold for 5 bitcoin ($ 2,200):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUSbWiqyHTHIxGn_sem7zwZDyB0j0_LK2MK9RdVl7xP_E5tAbqAjHzYlqlcIJ0Y6AmH2oHvXV9pxlA8SCGkUBo1eizi1g6Z37NUaagyrURu9EuCIpiAHCsULMLZIf6WLd7BUKoTe-e9QTz/s1600/141.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUSbWiqyHTHIxGn_sem7zwZDyB0j0_LK2MK9RdVl7xP_E5tAbqAjHzYlqlcIJ0Y6AmH2oHvXV9pxlA8SCGkUBo1eizi1g6Z37NUaagyrURu9EuCIpiAHCsULMLZIf6WLd7BUKoTe-e9QTz/s1600/141.png" /></a></div>
<br />
Major violations, such as those recommended in the protocol should not only change the password on the site that has been compromised, but any other site that uses the same password. Ideally, you want to use a password manager and a unique password for every site you visit, but hey, we get it, Commander in the game, and not nobody got time for that.<br />
<br />
What is not exactly confidence inspiring is the fact that Zuckerberg is responsible for providing more than 1.5 million Facebook accounts and can not be bothered to use the password stronger than most of our first words as a child. In support of Zuck, he does not seem to have it all, or active site, so I guess we'll give him a pass slip his password.<br />
<br />
<h2 style="text-align: center;">
<a href="http://1lytebyte.blogspot.in/2016/07/hackers-hacked-google-ceo-quora-account.html" rel="dofollow">Google Ceo sundar pichai's Quora Account hacked</a></h2>
<br />
<br /></div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-32796875037953067762016-07-10T17:04:00.003-07:002016-07-11T18:17:02.455-07:00Hackers Hacked Google Ceo Quora account <div dir="ltr" style="text-align: left;" trbidi="on">
Yes This Week end probably not ended right for our <b>Google Ceo</b> <b>Sundar Pichai’s .</b>Yes you Heard it right a group of Anonymous people called Ourmine Hacked <b>Sundar Pichai’s Quora account </b>.and there by after there continousely posting tweets on his <b>Sundar Pichai’s Quora account </b>OurMine was able to give out information about their hack to all 508,000 of his followers. The tweets have now been removed, but we’ve got a screenshot.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyzFpzI5twFuml_-QbyveMuXGZ6E-I-LLCx3a-imJQ9nd64deyWxHZWWmjxWeB_8paQHxnNn-w8qOCRgwxzfel9BhO4ULlUcvV3ZyBnnMDlQUAN8SYsZuNu83tqr2n-xwDeH-vkQFE__h9/s1600/Sundar-Pichai-Twitter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyzFpzI5twFuml_-QbyveMuXGZ6E-I-LLCx3a-imJQ9nd64deyWxHZWWmjxWeB_8paQHxnNn-w8qOCRgwxzfel9BhO4ULlUcvV3ZyBnnMDlQUAN8SYsZuNu83tqr2n-xwDeH-vkQFE__h9/s1600/Sundar-Pichai-Twitter.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
obviously, <b>Sundar Pichai’s </b>was not the first one from being Hacked by the Hackers group <b>Daniel Ek </b>is a Swedish entrepreneur and a technologist. Ek is co-founder and CEO of the music streaming service Spotify and previous CEO of µTorrent, a popular BitTorrent client.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitYZVwulrlfKRZJ03GstgcGnA6iGAffOIrHOqd4p7CfwTWuHbgqxUofMtJcnvFnldfJwRK_FiPaXQKnJiPfs2cDu_AIlKJfrc-1kf6L1nSwrndKUqGLMAha3lfjstGOHAWPdMsgWcilBDM/s1600/141124_r25797-882.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitYZVwulrlfKRZJ03GstgcGnA6iGAffOIrHOqd4p7CfwTWuHbgqxUofMtJcnvFnldfJwRK_FiPaXQKnJiPfs2cDu_AIlKJfrc-1kf6L1nSwrndKUqGLMAha3lfjstGOHAWPdMsgWcilBDM/s200/141124_r25797-882.jpg" width="147" /></a></div>
On June 23 thrusday Morning He also witnessed the Same result but not from Quora Account But now its from his Twiter Account<br />
<br />
and does the same thing as below<br />
<br />
<blockquote class="tr_bq">
Hey,its Ourmine, We are just testing your security. pls Visit Ourming.org to upgrade your security</blockquote>
Some of the resource saythat Ourmine is a group of three People who is aimed to target tech guys with some seriouse satitcs . my advise for those people whose does know about Ourmine is to stay far away form the group<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2XfmWTAAT-wAw7KeIC1EtdI-pNTqlvnYR-6adcmB80HvS97oG7b0ryH2A9YwbbeM6LIz82GiaLcFOqArEoBPFASgktyvgaJlsWMESiqC_kcUuv8slia_JVQqueTJSvRSCbZC9TC19hQOx/s1600/Daniel_Ek_Twitter_Account_Hack.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2XfmWTAAT-wAw7KeIC1EtdI-pNTqlvnYR-6adcmB80HvS97oG7b0ryH2A9YwbbeM6LIz82GiaLcFOqArEoBPFASgktyvgaJlsWMESiqC_kcUuv8slia_JVQqueTJSvRSCbZC9TC19hQOx/s1600/Daniel_Ek_Twitter_Account_Hack.png" /></a></div>
<br />
<br />
Its was not know how this Ourmine group has been accesed to this accounts. but it is likely, the system does not include violations of their target social networks have accounts.<br />
<br />
Instead, the group claims that it uses different passwords used to pull the celebrities' browsers.<br />
<br />
OurMine trying to rebrand himself as a "security company" and offers his support to those who are the targets, so that these incidents do not happen again. It's probably not the best way to garner the trust of your potential customers, but that's the way OurMine seems to enjoy doing business.<br />
<br />
<br />
<h2 style="text-align: center;">
<a href="http://1lytebyte.blogspot.in/2016/07/mark-zuckerbergs-twitter-and-pinterest.html" rel="dofollow"> Mark Zuckerberg's Twitter and Pinterest Accounts Hacked</a> </h2>
<br /></div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-66772787466554435592016-07-10T15:23:00.001-07:002016-07-11T18:29:19.264-07:00Google Glasses Top 5 Things You Need To Know About Google Glass<div dir="ltr" style="text-align: left;" trbidi="on">
I'm sure now, having heard most of us of the potential Google Glass. In the video you can see a few people who through the daily routines, while others for more extreme things like skydiving.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTM4ry1bfRM0m-_uREpoo8HoMW1tdGz3bn9c80PwKfpm19NvKd6ZRyyWMw-2QGfuHLIGdra8_PdO7tRP05igAnfIW0kI5yvl9lsec-hs-1EgRtF6Ngd-q91D_BRFjLumudye5TXuZmQDDx/s1600/picture.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTM4ry1bfRM0m-_uREpoo8HoMW1tdGz3bn9c80PwKfpm19NvKd6ZRyyWMw-2QGfuHLIGdra8_PdO7tRP05igAnfIW0kI5yvl9lsec-hs-1EgRtF6Ngd-q91D_BRFjLumudye5TXuZmQDDx/s1600/picture.jpg" /></a></div>
<br />
On their heads, the portable gadget that first-person view of the experience made possible by you guessed it, Google Glass.<br />
<br />
While Google Glass is still a toy developer, who took the time to wait until it has a point for the masses? So we did a little digging, our fingers were dirty and found 10 things you can expect from this high-tech eyewear.<br />
<br />
We talk about the hardware, what it can do and how it will do it. Be prepared for the future as you could see lots of people wearing the Google Glass when it is released.<br />
<br />
1. Tiny (but powerful) Hardware<br />
It's amazing how the Project Glass team has managed to squeeze all the features in a tiny 'computer' supported on a lightweight but strong frame.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0qL7V5v3Q4nTtoC8Rmrw44Y5CGyPN4h5-HjOqVj_BGERx89h4qVR4JHvWNK7g-1fC7m0UE2VIrcdtdMHAQcORZzMxnHWXfqerh71fJpldZ1uXj5mmSrgUggDFuBsLR-RZ6GbHPzFh9ziH/s1600/131.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0qL7V5v3Q4nTtoC8Rmrw44Y5CGyPN4h5-HjOqVj_BGERx89h4qVR4JHvWNK7g-1fC7m0UE2VIrcdtdMHAQcORZzMxnHWXfqerh71fJpldZ1uXj5mmSrgUggDFuBsLR-RZ6GbHPzFh9ziH/s1600/131.png" /></a></div>
<br />
Google Glass is packed with Bluetooth, Wi-Fi, GPS, speakers, a camera, microphone, touch pad and possibly a gyroscope that detects head tilt. Then there is the most important piece, a small screen the size of your finger, showing you all the information you need at your fingertips.<br />
<br />
Glass Prototype<br />
<br />
(Image Source: The Verge)<br />
Be the prototype design and engineering team have done a great job cramp everything into the current design Glass: a portable, non-intrusive gadget that does not get in the way of daily life.<br />
<br />
2. Heed My Command!<br />
Well, all that hardware is good to use Google Glass has voice input, which makes things a lot more interesting. The built-in microphone combined with Google Now connects you directly to the search engine.<br />
<br />
To activate Google Now by saying, "Okay Glass" send a command or question. Tilting your head up doing the same.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIHOd2zsbNbnvCRMIQU7Sdb7L5rJcyKB-eDGe0yZw_nJBNp6Y9uCXFd9E6YFE8DNaTObix1G8Nx0o-Ji-DCqKBRgTxUOyPbrlWdKGk_x8fAgZEDlZds6m3j6dO_TDPlIWbIFhzw7q01b7p/s1600/132.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIHOd2zsbNbnvCRMIQU7Sdb7L5rJcyKB-eDGe0yZw_nJBNp6Y9uCXFd9E6YFE8DNaTObix1G8Nx0o-Ji-DCqKBRgTxUOyPbrlWdKGk_x8fAgZEDlZds6m3j6dO_TDPlIWbIFhzw7q01b7p/s1600/132.png" /></a></div>
<br />
Glass Voice<br />
You can take a picture or record a video, all by simply saying that the contract for it - more on that later. On the right, a touch pad, where you can swipe through, to come menus; tapping, record your selection.<br />
<br />
3. Life breaks for No One<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP3WHUKJocDmge22_nqmmiKL72ePhW3-wEFu_W7tjzyhyphenhyphenuh6ikRNFYfKggC-UHX83DhoUPa44GMKQ1bexA2ak0kC9S0NnIftgW9kYPFfE14MXkNmNSzPbARCT4joMkErL6esj7jMNPZu0Z/s1600/140410175403-skyscanner-future-of-travel-google-glass-horizontal-large-gallery.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP3WHUKJocDmge22_nqmmiKL72ePhW3-wEFu_W7tjzyhyphenhyphenuh6ikRNFYfKggC-UHX83DhoUPa44GMKQ1bexA2ak0kC9S0NnIftgW9kYPFfE14MXkNmNSzPbARCT4joMkErL6esj7jMNPZu0Z/s1600/140410175403-skyscanner-future-of-travel-google-glass-horizontal-large-gallery.jpg" /></a></div>
<br />
Google at the moment Glass users can now live, and keep that memory in photos or videos. No more foraging around for a camera, matching the settings of your photo apps, and let this moment go by without a single snap. Just say, "Take a picture" and the display is captured at the time, hands-free Imagine the possibiltiies..<br />
<br />
Glass Taking photo<br />
Unlike the pictures you can the same with videos, which spells opportunities for extreme sports, real-life tutorials and more to do. Of course, image quality from a device this small should not be compared to a DSLR camera, but often, you would not like to lose at the moment.<br />
<br />
4. Always On Call, Literally<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii2vB9fAtUAtuYHjukr5hxk7ilWGwaTW7crdMxNGLIkEbd38aJqPOZNPNS7ljUfbzjJVfcO47-7UzTfYsb9hMLQ3nP0_jld4dRvRHEH2IVXIzgBXtpC-gWYTzp0us287TGldtYoKKbTg0E/s1600/133.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii2vB9fAtUAtuYHjukr5hxk7ilWGwaTW7crdMxNGLIkEbd38aJqPOZNPNS7ljUfbzjJVfcO47-7UzTfYsb9hMLQ3nP0_jld4dRvRHEH2IVXIzgBXtpC-gWYTzp0us287TGldtYoKKbTg0E/s1600/133.png" /></a></div>
<br />
With Glass is able to record videos, it can also act as a webcam with the data connection of your home or smartphone. You can use Google Hangout for a group conference, and still do what you have to do without being confined to a desk.<br />
<br />
<h2 style="text-align: left;">
5. Live from the Field</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA6LFpl60c6queFaqRyIpjuCuyKdva9_mVJeRpUlA69EaCYxjdRIhnKhpakBeEob9SoUOsXdFJLiJDoe2Jqj4MYt1XM7MdyJe4M9hU2qvL_KhN0yVSsIw_ewTAgr3i20OcVRU8wkd6c22q/s1600/glass-info.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA6LFpl60c6queFaqRyIpjuCuyKdva9_mVJeRpUlA69EaCYxjdRIhnKhpakBeEob9SoUOsXdFJLiJDoe2Jqj4MYt1XM7MdyJe4M9hU2qvL_KhN0yVSsIw_ewTAgr3i20OcVRU8wkd6c22q/s1600/glass-info.jpg" /></a></div>
<br />
Live information that has been shown to be predictive software you need comes with Google Now: On Android- in Jelly Bean, Google Now knows when you come out of your home and can warn you of bad traffic before you get stuck in it.<br />
<br />
You can also set your favorite sports team, and it should give you the latest news, scores and updates on the team when they are playing.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-45538252675766562052016-07-09T17:00:00.000-07:002016-07-11T18:24:09.200-07:00How to Create your own Twitter Bot<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Twitter Bots</b> can do cool things. You can join in with questions like, "How many calories in the diet coke" is @DearAssistant and Twitter bot, such as a Apps Like Google Now- or Apple Siri, will respond with an answer. It @HundredZeros Bot tweets links to searches which are free on Amazon.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs4XLe44JaUbdKJb7XhCwe3g-LkhCNMhYVOBX2hf1Bk2NvntklIApLkP2fYVf1wyXl7eLKndLpjK4AnqadVjspVVpiOwMivfzcZpJ0OtuPx6EUqOqE1UEKuv2YkkY-LPoFrbt4d9ui8UWd/s1600/twitter%252Bbackground%252Bnew.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs4XLe44JaUbdKJb7XhCwe3g-LkhCNMhYVOBX2hf1Bk2NvntklIApLkP2fYVf1wyXl7eLKndLpjK4AnqadVjspVVpiOwMivfzcZpJ0OtuPx6EUqOqE1UEKuv2YkkY-LPoFrbt4d9ui8UWd/s1600/twitter%252Bbackground%252Bnew.jpg" /></a></div>
<b><br /></b>
<b>Twitterbot is a bot program used to produce automated posts on the Twitte</b>r And it automatically follows twitter Users and it can performs some action.like, you can have a grammar bot that looks Misspellings and Twitter tweets containing the correct spelling.<br />
<br />
A Bot can automatically retweet or favorite tweets that meet certain criteria. It can track the user who Twitter- tweeted certain keywords. A brand can build auto-bot, which automatically responds when a brand gets @mention Twitter- States. You can have a bot that sends an auto-direct-messages to users who follow you on Twitter-.<br />
<br />
Writing on <b>Twitter bot</b> is easy,Our <b>Twitter bots </b>running on Google servers, and you do not need any coding skills to create a bot. They are using Google Scripts.internally<br />
<h2 style="text-align: left;">
<br />
Steps to How to create your own Twitter Bot</h2>
<br />
The idea behind Twitter bots- is very simple. You enter a keyword and select an action. Twitter Bot can find all the tweets regarding that paticular keyword expression and performs the action related tweets.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbkf8iZr-csam7gmMNh0_irmgCZ9EjFjUMtunxAiBzUrSfxwVhqHJrK6dwcQQRCAIzrL9A9k04QmcLh5htHq39OxrgHXV6NYl4pe8gfjagpg-w4VkaGqyFRQCCfMXWnva7nj8pfeG-z7Rh/s1600/twitter.bots.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbkf8iZr-csam7gmMNh0_irmgCZ9EjFjUMtunxAiBzUrSfxwVhqHJrK6dwcQQRCAIzrL9A9k04QmcLh5htHq39OxrgHXV6NYl4pe8gfjagpg-w4VkaGqyFRQCCfMXWnva7nj8pfeG-z7Rh/s1600/twitter.bots.jpg" /></a></div>
<br />
<h2 style="text-align: left;">
#1) : Making App for Twitter Bot</h2>
<br />
Signup for a new <b>Twitter Account</b>, Then go to→ <b>apps.twitter.com</b>, sign in to your Twitter account and create a Twitter app. Give your project a name, a description of the site and put any URL field.and select I agree with the developer terms and submit the form.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE0ycBaJDjLStS72IVFl21uoTxUpy8Fvo7ni4gkIYVqjcdbr-EBGhk6hscfAXpsi5poQXIkRJrQUoUQOrqjQB_oaLDWWBlG9Gg-LbSpC-JIAh0Pbo3dN1qc4yd6zERSK2OFmWbLdrFjKrl/s1600/Twitter+Bots.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE0ycBaJDjLStS72IVFl21uoTxUpy8Fvo7ni4gkIYVqjcdbr-EBGhk6hscfAXpsi5poQXIkRJrQUoUQOrqjQB_oaLDWWBlG9Gg-LbSpC-JIAh0Pbo3dN1qc4yd6zERSK2OFmWbLdrFjKrl/s200/Twitter+Bots.jpg" width="155" /></a></div>
When Twitter app has been created, go to <b>Application Settings</b> and change the <b>App Permissions </b>& <b>access level to Read</b>, <b>Write and Access Direct Messages.</b><br />
<br />
Next switch to the Keys and symbols Access tab and click Create My Access Token button. Twitter will lead consumers Keys and Access tokens that we have to the next step.<br />
<br />
<h2 style="text-align: left;">
#2): Adjust your Twitter bots</h2>
<br />
Go <a href="http://www.labnol.org/bots" rel="nofollow" target="_blank">LyteByte </a>Twitter bots to open the application. You might have authorized the bot once.<br />
→Change the values of Twitter Consumer Key→ Consumer Secret→ Access token and Access secret that has been generated in the previous step.<br />
<br />
Next, you need to specify a search phrase bots- dissemination. The app can find all the tweets that match this search phrase and the process for all of them, one at a time. If you have a premium version, you can create up to 5 bots- from a go.<br />
<br />
Click Create to initialize the Twitter bot. That's all. Bots- initialized from now, and they will be auto-run in the background.<br />
<br />
<h2 style="text-align: left;">
Twitter Bots Video Tutorial</h2>
<iframe allowfullscreen="" frameborder="0" height="345" src="https://www.youtube.com/embed/_TMNURI1klM" width="620"></iframe><br />
<br />
<i>It is important to note that the Twitter TOS</i><br />
<br />
You can find more specific tweets using Twitter Search operators from processing through bots-. For example,operator to filter out spammy tweets use min_faves or min_retweets from search results.<br />
<br />
Here are some area where bots are suitable.<br />
<br />
If you are offline during specific duration, setup out of office reply that people can expect a delayed response.<br />
<br />
If you change your<b> Twitter username</b>, set Auto-Direct Message to bot from your old account so that followers can know your new Twitter name.<br />
<br />
Add or follow the Twitter Users to a Twitter List which is helpful in tweeting on certain topics<br />
<h2 style="text-align: left;">
<br />
Twitter Bots - features</h2>
The Twitter Bot is available in both Premium and Free Versions. In Upcomming they will add more features, Till then you are now supported to 3 months for technical assistance.<br />
<br /></div>
<table border="1" cellpadding="2" cellspacing="0" style="width: 597px;"><tbody>
<tr> <td valign="top" width="255"><div align="center">
<b><u>Features</u></b></div>
</td> <td valign="top" width="113"><div align="center">
<strong><u>Free</u></strong></div>
</td> <td valign="top" width="227"><div align="center">
<strong><u>Premium</u></strong></div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center" style="text-align: -webkit-center;">
<div style="text-align: left;">
<u> Auto-Reply to Tweets</u></div>
</div>
</td> <td valign="top" width="113"><div align="center">
Yes</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
Emoji</div>
</td> <td valign="top" width="113"><div align="center">
Yes</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>Favourate Tweets</u></div>
</td> <td valign="top" width="113"><div align="center">
Yes</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>Retweet Tweets</u></div>
</td> <td valign="top" width="113"><div align="center">
Yes</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
DM New Followers</div>
</td> <td valign="top" width="113"><div align="center">
No</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>Follow Users</u></div>
</td> <td valign="top" width="113"><div align="center">
No</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>Support options</u></div>
</td> <td valign="top" width="113"><div align="center">
None</div>
</td> <td valign="top" width="227"><div align="center">
Email</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
Run bot at specific time</div>
</td> <td valign="top" width="113"><div align="center">
Yes</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
How many Twitter bots can be created?</div>
</td> <td valign="top" width="113"><div align="center">
One</div>
</td> <td valign="top" width="227"><div align="center">
Five</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>How often do the bots run?</u></div>
</td> <td valign="top" width="113"><div align="center">
One/Hour</div>
</td> <td valign="top" width="227"><div align="center">
Every 15 Mins</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u>Reply via DMs (to users who allow)</u></div>
</td> <td valign="top" width="113"><div align="center">
No</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
<tr> <td valign="top" width="255"><div align="center">
<u style="text-align: left;">Add Users to Twitter List</u></div>
</td> <td valign="top" width="113"><div align="center">
No</div>
</td> <td valign="top" width="227"><div align="center">
Yes</div>
</td> </tr>
</tbody></table>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-36775320533035050792016-07-09T16:30:00.000-07:002016-07-11T18:18:31.564-07:00Reverse Email Search:How to Find the Person behind an Email Address<div dir="ltr" style="text-align: left;" trbidi="on">
u got a letter E-mail from a person with whom you have never communicated earlier, so before you pick up the conversation that you want to do some research on the Internet to learn more about that person. How do you do it without directly asking the other person.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0aja96ctZJOkU2ndl_Q4V0pEv0sJXtiYS-Ey6YK1GnzlkQek1eWTvCDo2NrklMc4CnTA9masTi-YYA_9b7yvdjtSkLpJO9cOeOhPgTmg9aq5AZ0o0_UUStWNYn3jVEfgBzM-uLXKFVbf6/s1600/How-To-Find-Out-The-Person-Behind-An-Email-Address.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="How to Find the Person behind an Email Address" border="0" height="343" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0aja96ctZJOkU2ndl_Q4V0pEv0sJXtiYS-Ey6YK1GnzlkQek1eWTvCDo2NrklMc4CnTA9masTi-YYA_9b7yvdjtSkLpJO9cOeOhPgTmg9aq5AZ0o0_UUStWNYn3jVEfgBzM-uLXKFVbf6/s640/How-To-Find-Out-The-Person-Behind-An-Email-Address.jpg" title="" width="640" /></a></div>
<br />
Google- is the most obvious place for performing reverse email lookups (Just Google for the email address), but if that person does not have a website, or, if they never used their email address in public forums, Google- would be little help.<br />
<br />
No discomfort. If you only know the email address of the person, and nothing more, here are some ways that can help you discover the identity of the email sender is unknown.<br />
<br />
<h2 style="text-align: left;">
How to Do the Reverse Email Search</h2>
<br />
<b># 1. Find position sender</b><br />
<br />
Location Email Sender<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih995FWfZBNerLgpAE7hnJ7UbAFKT6DDqkPFgPlmXwVoVTyyIka24Oe695s4vFW04t3tMqVZvBCWlJi0ug0b4flMzUxT3Os247ezMCyMTTd98AcV5z5FUfu1FSKHW20cPzeNvvls850HW4/s1600/email_sender_location.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Location Email Sender" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih995FWfZBNerLgpAE7hnJ7UbAFKT6DDqkPFgPlmXwVoVTyyIka24Oe695s4vFW04t3tMqVZvBCWlJi0ug0b4flMzUxT3Os247ezMCyMTTd98AcV5z5FUfu1FSKHW20cPzeNvvls850HW4/s1600/email_sender_location.png" title="Find position sender" /></a></div>
<br />
Open the email message header, and look for lines that say "got out" and are followed by the IP address in square brackets. If there are multiple entries, use the IP address listed in the last entry.<br />
<br />
Now insert the IP address of the Trace Route tool, and you should get a pretty good idea of the approximate location of the email sender.<br />
<br />
<h2 style="text-align: left;">
# 2. Reverse Email Search with Facebook</h2>
<br />
Facebook has a billion users and the probability is therefore high that the sender may also have user Facebook.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicbx_wo63AkRF_JZJnc88ZO6D_VG2Q62bMMh97uTOi-VQE0e-5d2K8Db1W_DOq8Z3ZVES8W5t4hQwUi7cHYRvGGx_NugaYtj8Old3_f8TBHAC9O1AFVXmB1dju11ZpJ5-kEP8_XS_WgtIc/s1600/search-on-facebook-email.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Reverse email search with Facebook" border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicbx_wo63AkRF_JZJnc88ZO6D_VG2Q62bMMh97uTOi-VQE0e-5d2K8Db1W_DOq8Z3ZVES8W5t4hQwUi7cHYRvGGx_NugaYtj8Old3_f8TBHAC9O1AFVXmB1dju11ZpJ5-kEP8_XS_WgtIc/s400/search-on-facebook-email.png" title="Reverse email search with Facebook" width="400" /></a></div>
<br />
Unlike LinkedIn and many other social networks, Facebook allows users to search e-mail address in order to get your job easier. Simply insert the email address of the person into the search box and Facebook- will instantly tell you if a profile exists in the e-mail address or not.<br />
<br />
facebook people search<br />
If you are able to find the man's Facebook profile picture and then upload it to download Google- Images (click on the camera icon in the search box). This acts as a reverse image search engine, so you could find him other social profiles, where it can be used in the same image.<br />
<br />
<h2 style="text-align: left;">
# 3. Check all other Social Networks</h2>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrcVjBvc5HYeg9ZXlMW3jIuHD-sCRQ7JGJtqDFbH3L-cNvNk2q1FdtPaNSEe-OteknZB3iEzD9ISVsqg4mH_O6mooBTG-Ws0_JLRONnuqd6XWoPiFEj9rsKdDKyE3MHUfktrfhEE4hWdc/s1600/spokeo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKrcVjBvc5HYeg9ZXlMW3jIuHD-sCRQ7JGJtqDFbH3L-cNvNk2q1FdtPaNSEe-OteknZB3iEzD9ISVsqg4mH_O6mooBTG-Ws0_JLRONnuqd6XWoPiFEj9rsKdDKyE3MHUfktrfhEE4hWdc/s1600/spokeo.PNG" /></a></div>
<br />
You can use a service like Knowem quickly determine if a profile is a pseudonym there is any social networks.<br />
<br />
If the sender's email address is something like green_peas@hotmail.com, there is a possibility that he may be established in some other social network accounts using the same alias "green_peas» - put that knowem.com to confirm.<br />
<br />
Gmail users can find and install add-on Rapportive Twitter and LinkedIn profiles associated with the e-mail address, if any of them exist. For details, see this tutorial on how to guess someone's email address.<br />
<br />
<h2>
# 4. People Search</h2>
<br />
<b>Reverse Email Search</b><br />
<b><br /></b>
Finally, if none of the above tricks work, you should try like Pipl and Spokeo is a people search service - two services let you perform reverse email lookups, but Spokeo has a comprehensive database of more than Pipl:<br />
<br />
Other than ordinary web documents, also spoke scans social networks and even domain names whois information found in any bit of information related to e-mail. However, some of the results returned by Spokeo are only available to subscribers.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-74633897446028601232016-07-08T21:47:00.000-07:002016-07-12T01:08:54.195-07:00Philando Castile shooting video was temporarily removed on Facebook<div dir="ltr" style="text-align: left;" trbidi="on"><b>Philando Castile shooting video</b> Yesterday July 7th evening, Diamond extravagant<b> 'Reynolds began after livestreaming on Facebook</b>, <b><a href="https://www.washingtonpost.com/news/morning-mix/wp/2016/07/07/minn-cop-fatally-shoots-man-during-traffic-stop-aftermath-broadcast-on-facebook/" rel="nofollow" target="_blank">Minnesota police when her boyfriend was shot dead in his car.</a></b><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-MLYCwlKGkPaboOe3n2PLKjMpQcr5ZyUPW-NvXUntC__kI9yXhHQ3LNoGjvOuLnNorgVkU2jynIwCBQHXiBYdpH08cL-eGUCLmRYZ9aLNlyTWPTL8n2ASmbVTRfgJkxah2-WV4qYYnaHt/s1600/Philando+Castile+shooting+video.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-MLYCwlKGkPaboOe3n2PLKjMpQcr5ZyUPW-NvXUntC__kI9yXhHQ3LNoGjvOuLnNorgVkU2jynIwCBQHXiBYdpH08cL-eGUCLmRYZ9aLNlyTWPTL8n2ASmbVTRfgJkxah2-WV4qYYnaHt/s1600/Philando+Castile+shooting+video.jpg" /></a></div><br />
Roughly an hour later, went straight to video content mysteriously disappeared from the social network. <b>Reynolds Facebook profile</b> is suspended, prompting viewers to question whether Facebook's censorship of content that can be used as evidence.<br />
<br />
Of course, it did not take long video should be uploaded to Twitter, YouTube, and the like.<br />
<br />
<blockquote class="tr_bq"><b>Philando Castile, 32, fatally shot a police officer in a traffic stop outside St. Paul. His girlfriend, Diamond Lavish Reynolds, and her 4-year-old daughter was in the car with him. Reynolds consequences Livestreaming on Facebook. Here's what you need to know. (Monica Akhtar, Jenny Starrs /)</b></blockquote><br />
Graphic video showed Reynolds sitting in the car with her boyfriend,<b>Philando Castile shooting video</b> , when he'd just filmed an unidentified police officer. Reynolds was explaining on Facebook Live, what had happened to Castile slowly slumped over and died of his gunshot wounds.<br />
<br />
He was then asked to leave the car, handcuffed and put in the back of a police car with her four-year-old daughter. A police officer, supposedly, who shot Castile, shouted profanity can be heard in the background.<br />
<br />
Statement from, <b><a href="https://techcrunch.com/2016/07/07/facebook-blames-technical-glitch-for-temporary-removal-of-falcon-heights-shooting-video/" rel="nofollow" target="_blank">TechCrunch</a></b>, Facebook- said that the removal is due to a <b>technical glitch</b>, and the video was restored in about an hour after it went down, resurfacing with graphic content warning.<br />
<br />
"We are very sorry that the video was temporarily unavailable. It was down due to a technical glitch and restored as soon as we were able to investigate "a Facebook spokesman.<br />
<br />
Facebook recently came under fire for <b>Philando Castile shooting video </b>Trending topic, and this latest «glitch« certainly does not help the situation. Whatever the reason, the video is now back online and to watch at <b><a href="https://www.facebook.com/100007611243538/videos/1690073837922975/" rel="nofollow" target="_blank">your own discretion.</a></b><br />
<br />
Update JUNE 8 9:15 ET:<br />
<br />
The Register- which some sources claim that the video has been removed by the police, not due to technical Facebook glitch: After the shooting, Reynolds claimed police picked up the phone, because he was arrested delete the video.<br />
<br />
If true, the falcon HEIGHTS police actions can be considered as evidence of digging. Facebook- not respond to these new allegations.<br />
<br />
Facebook CEO Mark Zuckerburg <b><a href="https://www.facebook.com/zuck/posts/10102948714100101" rel="nofollow" target="_blank">issued a statement</a> </b>calling the video of the incident "<a href="http://thenextweb.com/facebook/2016/05/24/facebook-says-trending-topics-picks-werent-biased-fixing-selection-system-anyway/#gref" rel="nofollow" target="_blank">Horrible and heartbreaking last night,</a>" but does not affect its temporary removal.<br />
<br />
JUNE 8 Update 1:55 pm ET:<br />
<br />
A Comment <b><a href="http://www.huffingtonpost.com/entry/facebook-philando-castile_us_577fd0f2e4b0344d514f059a?ir=Technology&" rel="nofollow" target="_blank">Huffington Post</a></b>, Facebook denies any involvement in the police video removal. A spokesperson maintained that the technical glitch was the cause, even though Facebook has provided features what is this glitch can.<br />
<br />
Speaks your comments below with the topic of <b>Philando Castile shooting video </b>also dont forget to share this article<br />
<br />
</div>Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-89894166933308266112016-07-08T21:23:00.001-07:002016-07-08T22:28:49.409-07:00How to book Uber carpools in Facebook Messenger<div dir="ltr" style="text-align: left;" trbidi="on">
Facebook Messenger is just a little easier to book <b>UberPOOL ride.</b><br />
<br />
It works like this: Open a messenger conversation, click the three-dot menu button, and select the request of a ride. " You'll then have the option to request a walk only to yourself, or you and your friend. Request a ride, and you're good to go.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaDQU8DH1y458H9M8F_HTZgPHqb5YfOG4w3t9staTbHHGARuZLhI3Amefwpd6SU6q4Wr59gqjofkM7uRuTrP0a3L-moV5HiLZmJznMmlWCFSc4ZYN_PqoHVfJw4DyPrDqZBuXRdlEh_mkl/s1600/UberPool-Facebook-Messenger-796x380.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaDQU8DH1y458H9M8F_HTZgPHqb5YfOG4w3t9staTbHHGARuZLhI3Amefwpd6SU6q4Wr59gqjofkM7uRuTrP0a3L-moV5HiLZmJznMmlWCFSc4ZYN_PqoHVfJw4DyPrDqZBuXRdlEh_mkl/s640/UberPool-Facebook-Messenger-796x380.jpg" width="640" /></a></div>
<br />
It's very different than just ordering from the Uber app, but it does not give you the added benefit of being able to quickly share information with your friends on your ride, location information, let them know that you're that way.<br />
<br />
Perhaps more important is that you should not even bother to put the <b>Uber app</b>, which is handy if you only need rides sometimes.<br />
<br />
However, the more useful the exercise will allow you to specify your carpool partner, so you can easily pick up a friend on the way to an event or movie.<br />
<br />
Messenger is the perfect platform for this type of selective <b>Uber carpools</b>, especially given show Facebook patents, the company has already considered using the Events pages to create carpools: Here's hoping his idea seriously consider Facebook and Uber.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-52369852716803379912016-07-08T21:16:00.000-07:002016-07-08T22:28:54.516-07:00Avast Software agreed to pay $1.3 billion to acquire rival AVG Technologies<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Avast</b> and <b>AVG</b> are very well known in the cyber security space, as well as consumers. Avast, which commands a fifth of the global antivirus market, announced that it acquired Avg.<br />
<br />
The transaction was approved by the management and supervisory boards of Avast and AVG and avast includes AVG's unique purchasing ordinary shares of $ 25 each. The total value of the transaction is approximately $ 1.3 billion. AVG is a publicly traded company, so the deal must first be approved by shareholders and Avast expect that it will be concluded by the end of September or October this year.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQfnAvFnyiWg4A_0nvtj-xhABHrzRzhH7iybdkCfCLHaEUF55zYDAlHLG13v5wh_XfOwKytRyMLKiOOdI_jFC72ny5kVLOKYzqzl5m8CQNG5QV155IXtEjNR2w-V1aQpYEJkEXGMauntjy/s1600/AVG-Anti-Virus-Free-Edition-2011.1209.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQfnAvFnyiWg4A_0nvtj-xhABHrzRzhH7iybdkCfCLHaEUF55zYDAlHLG13v5wh_XfOwKytRyMLKiOOdI_jFC72ny5kVLOKYzqzl5m8CQNG5QV155IXtEjNR2w-V1aQpYEJkEXGMauntjy/s1600/AVG-Anti-Virus-Free-Edition-2011.1209.png" /></a></div>
<br />
The offer price represents a 32 percent premium over the reported volume-weighted average price during the last 6 months.<br />
<br />
Both companies were established in Czechoslovakia, sometime in the early 1990s. Avast has a better reputation for security circles and consistently maintained itself among the top ranks of AV-Test rankings. AVG has fared, and how were also mired in controversy for its browser plugins. This program is known, however, which is probably what prompted the 'ng to consider the buyout.<br />
<br />
Avast claims that the purchase bid to "get the scale, technology depth and geographic breadth so that the new entity may be able to take advantage of growth opportunities emerging internet security, organizational efficiency."<br />
<br />
"We are in a rapidly changing industry, and this acquisition gives us the breadth and depth of technological security supplier of choice to our current and future customers," said Vince Steckler, the CEO of avast Software.<br />
<br />
Avast claims that the deal would expand its reach 400 million end points, more than half of which represents smartphones. The larger footprint there is more data avast working with more malware to detect and therefore better software and security.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-35460257622726732812016-07-08T21:03:00.000-07:002016-07-08T22:28:59.320-07:00Antivirus: You really need an antivirus Program in 2016<div dir="ltr" style="text-align: left;" trbidi="on">
You really need an antivirus program for 2016. yes. Yes, you do. The short answer is that you should be because common sense is not that common. The long answer, read on!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHD-GMr7mQfINST5bIfYc-xzRdwDpeyRFnKcrzd5g5CHjPeLAc-My8CKPm-5ktH0rAUtN31ZPXSKM4W41pc50rrT7OqfTVdK9oYP7j2h-UFkaqY5r1wWKeQBPglCBuWD2C8uOvdT_02wS2/s1600/Computer-usage-PC-Tech2-720-624x351.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHD-GMr7mQfINST5bIfYc-xzRdwDpeyRFnKcrzd5g5CHjPeLAc-My8CKPm-5ktH0rAUtN31ZPXSKM4W41pc50rrT7OqfTVdK9oYP7j2h-UFkaqY5r1wWKeQBPglCBuWD2C8uOvdT_02wS2/s1600/Computer-usage-PC-Tech2-720-624x351.jpg" /></a></div>
<br />
Any competent Geek will tell you that they never need an antivirus program that <a href="https://support.microsoft.com/en-us/help/17464/windows-defender-help-protect-computer" rel="nofollow" target="_blank">Windows Defender</a> is satisfactory. I'd say the same for myself. But that's the thing that we are talking competent geeks Username: For better or worse, we know our systems inside out.<br />
<br />
That if our internal clock somehow synced up the CPU clock. If something takes an extra half-second to open, we know something is wrong, we automatically look to the bottom left corner of the screen before clicking on a link. Phishing emails are brushed aside with the merest glance. We know how to secure our Wi-Fi, our passwords will put a lot of shame and <a href="https://lastpass.com/" rel="nofollow" target="_blank">LastPass</a> encryption key is our God.<br />
<br />
In fact, that's why we Geeks I hate it when other people touch our PCs. The "others" are an investment in the mix, something that we have no connection.<br />
<br />
We only antivirus program for additional headache to take absolute control of our PC security, we know that we do not need.<br />
<br />
But the average person, this is too much hassle. The average person just wants a computer that runs a program that is doing its job, and they want the freedom to do what they want the computer without worrying about the consequences. The average person does not know how to scan a Pen-drive when it's done the rounds of college / Office / Cyber- cafes, they do not need to check URL- s before clicking on links, and they do not know what looks like the real download button.<br />
<br />
These are people who want to just hit the "I agree" and "Yes" to everything, and install the program. Worst of all, they must use the same password literally everywhere and then wonder why their accounts are at risk.<br />
<br />
There are three main sources of infection that can compromise your computer and its data.<br />
<br />
The link with malware<br />
An infected Pen Drive<br />
An infected installer<br />
There are other sources, such as network viruses and hacking, but they are relatively less and the source of these infections usually is one of the three sources listed in the file.<br />
<br />
As it happens, websites used for malware and phishing sites are usually flagged by your browser settings. It's not 100% reliable and there are still a seemingly trustworthy sites such as Download.com, which load crapware (junk programs, adware, and infected installers) your computer. Mail Spam and phishing attacks as well as a more reliable email provider such Gmail- filtered and Outlook.<br />
<br />
An infected pen drive is a major threat, but if you're running a modern operating system (yes, Windows 7 is also very old), which is updated regularly, you're safe enough. An infected installer is the biggest problem of all, because you explicitly give permission to run the installer on your computer.<br />
<br />
Decent Virus infection is not caught in time, but it is not always reliable and in some cases, may create more problems than it solves. To be fair, Windows 10 itself has a multitude of built in safety testing, such as sand boxing, that prevent these programs do a lot of damage.<br />
<br />
If you are sensitive and careful when dealing with your computer, you will need an antivirus program. The problem is that most of us are not careful or do not know enough to be careful. For such people, the antivirus program is very important. Unfortunately, the vast majority of the world falls in this category.<br />
<br />
If you really need an antivirus program, you need someone who is trustworthy. Sites like AvG. thorough benchmark testing antivirus suites on different platforms.<br />
<br />
Of course, if you're a Mac or Linux platform, you'are relatively safe. These operating systems are inherently more secure than Windows and can be obtained without an antivirus program.<br />
<br />
Of course, if you're a Mac or Linux platform, you'are relatively safe. These operating systems are inherently more secure than Windows and can be obtained without an antivirus program. Usually.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-37556553041722569172016-07-08T09:26:00.001-07:002016-07-08T22:29:24.825-07:00How to Share Screen on Multiple Android Devices<div dir="ltr" style="text-align: left;" trbidi="on">
Have you ever wanted to show something on the screen of your Android smartphone with a group of people, without actually having to share any data with them. We are sure that you will be, because there are times when you want to showcase slides, websites, or applications with others in development.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXq-608oknXxzOke9uZ-pciy0OGQk3qF2W9_QEuyM5zRbo2Cv2eFsL07mA34HaUz9XEf443d4VuvBPxv-5Z2NUSpxrw17dpVUhmvBQU-jPHBCO3RUpvGpLMut6-5xXhwx7dB_lI8H2ytoY/s1600/share+screen+on+android+devices.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="share screen on android devices" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXq-608oknXxzOke9uZ-pciy0OGQk3qF2W9_QEuyM5zRbo2Cv2eFsL07mA34HaUz9XEf443d4VuvBPxv-5Z2NUSpxrw17dpVUhmvBQU-jPHBCO3RUpvGpLMut6-5xXhwx7dB_lI8H2ytoY/s1600/share+screen+on+android+devices.jpg" title="" /></a></div>
<br />
While it is fairly easy to mirror the Android interface in Mac- or PC, you can not say the same when it comes to sharing the screen between Android devices. However, there are several programs that allow you to <b>Share screen on Android devices,</b> but the best among the lot must be ScreenMeet: So, here's how you can <b>share on Multiple Android Devices</b> Using ScreenMeet.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUR1fzof8ovqY9n0qb-xvX5olf6fe0zEddWWYk747GPaeQ00YlT3VQhN5Hopy_MlcFodlv4dbyL9g8bgRpe4awTCwdj8hiZJCK-ykI7ZPdXrPZUxuuPuNXJ1BrpQWd-zo77vLo470tfSnv/s1600/ScreenMeet-Android-app-start-up.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="ScreenMeet-Android-app-start-up " border="0" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUR1fzof8ovqY9n0qb-xvX5olf6fe0zEddWWYk747GPaeQ00YlT3VQhN5Hopy_MlcFodlv4dbyL9g8bgRpe4awTCwdj8hiZJCK-ykI7ZPdXrPZUxuuPuNXJ1BrpQWd-zo77vLo470tfSnv/s640/ScreenMeet-Android-app-start-up.jpg" title="ScreenMeet-Android-app-start-up " width="640" /></a></div>
<br />
1. You will first need to download the program ScreenMeet Android device, which screen you want to share with others. The good thing, as<b> ScreenMeet</b> the fact that you do not need to install it on other devices that need to get your device's screen is mirrored.<br />
<br />
2. When you first open the program, you must sign up for the program. Once done, you will see a prompt on the screen, suggesting that you can get 10 free meetings in the program, after which you must purchase a subscription.<br />
<b><br /></b>
<b>ScreenMeet Android app startup</b><br />
<br />
3. Then, you will see a link that you can share with others and let them watch your Android screen, along with the "Start" button at the bottom of the screen to start sharing. Just tap the "Start" and then confirm your action by selecting «Start Now».<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYbhWm3i5jcjQUdJhYZR5pgOCaXTUfrR6yRNHMJF5WfEoW4nbuSlkmcBLGmL5dmbK4s1Scc-SLLlhSUizJsZOr-ijFnntFCIsvlB1SCh9Vb255CKxnXRxaLzxH98Ov_z5pwXGnzor7uOdA/s1600/Share-Screen-Android-ScreenMeet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="How to Share-Screen-Android-ScreenMeet " border="0" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYbhWm3i5jcjQUdJhYZR5pgOCaXTUfrR6yRNHMJF5WfEoW4nbuSlkmcBLGmL5dmbK4s1Scc-SLLlhSUizJsZOr-ijFnntFCIsvlB1SCh9Vb255CKxnXRxaLzxH98Ov_z5pwXGnzor7uOdA/s640/Share-Screen-Android-ScreenMeet.jpg" title="How to Share-Screen-Android-ScreenMeet " width="640" /></a></div>
4. Once started, you can go to other ScreenMeet link to your Android device and see your Android screen in action there. You can then move on to showcase other apps, whatever you want.<br />
<br />
After that screen sharing has started, you can pause or stop a shade screen sharing awareness. If you want to jump to ScreenMeet app, you can do so through all the screens of the floating button.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkqJivsvCU4kEoMIErHm_pZwvl9FM0flugus4Z_zvAcVGTAtPMrq213y3Hsy3_aRivHQv9kDOINyJbIVK29bMby_UQeoGuHxkFXQ2MbaQv6oz4m4koHDV5lPuzjFoFLJBZGpnzcrLs9Ig2/s1600/ScreenMeet-Share-Screen-Android.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="How to ScreenMeet-Share-Screen-Android" border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkqJivsvCU4kEoMIErHm_pZwvl9FM0flugus4Z_zvAcVGTAtPMrq213y3Hsy3_aRivHQv9kDOINyJbIVK29bMby_UQeoGuHxkFXQ2MbaQv6oz4m4koHDV5lPuzjFoFLJBZGpnzcrLs9Ig2/s320/ScreenMeet-Share-Screen-Android.jpg" title="How to Share Screen on Multiple Android Devices" width="179" /></a></div>
<br />
Note. While viewers will be able to see your screen, they will not be able to control it.<br />
<br />
Mirror the screen of your Android device to other devices depend on internet connection, but you can go ScreenMeet settings and use the slider to improve the speed and quality of the overall screen. From the settings page, you can also change sharing a link, set the lock link and ask for the name of the news screen when the viewer tries to connect to your room.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOhXAvRHsmUfSZDl8QeW5gZRxGw8qqB1E1JvCsfMBqVINkiNG0zgPfPb96bzxcjAKEkeiNFyrGPZZNVyqHAZtG9xVeAEE_dUO_1tc6M8imfuwjWYi3IpO2L-WEQHGzrH5xeNPBwAWZPTyP/s1600/ScreenMeet-Settings.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="ScreenMeet-Settings" border="0" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOhXAvRHsmUfSZDl8QeW5gZRxGw8qqB1E1JvCsfMBqVINkiNG0zgPfPb96bzxcjAKEkeiNFyrGPZZNVyqHAZtG9xVeAEE_dUO_1tc6M8imfuwjWYi3IpO2L-WEQHGzrH5xeNPBwAWZPTyP/s640/ScreenMeet-Settings.jpg" title="How to Share Screen on Multiple Android Devices" width="640" /></a></div>
<br />
<b><span style="color: blue;">Note:</span></b>The program is limited to viewers 10 and 50 meetings of its free trial. Unlimited use, you have to buy a $ 15 / month subscription, or you can purchase the "All you can meet" day pass is $ 1.99.</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-13788037653132600222016-07-08T09:10:00.000-07:002016-07-08T22:29:34.996-07:00How to deliete a Blogger Blog completely<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
Blogger, Google- in blogging platform that allows you to create and manage multiple blogs at once. You can delete specific entries, if you do not want them any longer appearing. If you no longer want one of your blogs appearing online, you can delete it. You will be able to download a complete copy of the blog before deleting it so that you always have a record of your work.<br />
<br />
<br />
1)<br />
Sign in with your Google Blogger account. You must sign in to the account, which oversees the blog that you want to delete.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNkD8dC9-bUrlf9Ylw8bKpMWUm27J2lPfe9lSPlgA9ArHwE8qdGDLPTuV5Bq17HOWGp48L9ryLmH7bJuZ6MZZTdrtFy64G8GkyeznhdJFsffZXS-FMFSRbjrkrIsrvSzZ-vUeMBw2kjWqd/s1600/117.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNkD8dC9-bUrlf9Ylw8bKpMWUm27J2lPfe9lSPlgA9ArHwE8qdGDLPTuV5Bq17HOWGp48L9ryLmH7bJuZ6MZZTdrtFy64G8GkyeznhdJFsffZXS-FMFSRbjrkrIsrvSzZ-vUeMBw2kjWqd/s1600/117.png" /></a></div>
<br />
Only owners or administrators can delete blog.<br />
<br />
2) Find a blog that you want to delete. All the blogs that your account has been created, which will be listed above the Blogger homepage. Find one on the list that you want to delete.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha_N6H5vWgwRixPtLVCmNVfh2tYOhPtv7qfOyGusAqS_HlWB-3unfCfYY7azHh8-KhQXi8We0A4ht9MPHVEyciQTf8peU08mGW4KapB8Snn4soelfSQtpGlT5XJg82okGyAkcbdGfFKsSU/s1600/118.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha_N6H5vWgwRixPtLVCmNVfh2tYOhPtv7qfOyGusAqS_HlWB-3unfCfYY7azHh8-KhQXi8We0A4ht9MPHVEyciQTf8peU08mGW4KapB8Snn4soelfSQtpGlT5XJg82okGyAkcbdGfFKsSU/s1600/118.png" /></a></div>
<br />
<br />
3) Delete any images you want to be removed immediately. Images can stick around even after the blog was deleted. Removing these images before deleting the blog will help ensure that they can be immediately erased. Follow the steps in the previous section to remove any posts that have images before deleting your account.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPUWafdZniuW-7IT9kzcP3L92vXv8voT4XjL9rthnEMfx9ZqhFRj5bTZEOkL7nsB9uXpkxXoVXQ2Dw6kM5uh9Pjhi7OKxTwAldmdxad8VCrbao-gSvR-RRYGW5r9uZvra2hnyktjaOroS/s1600/121.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPUWafdZniuW-7IT9kzcP3L92vXv8voT4XjL9rthnEMfx9ZqhFRj5bTZEOkL7nsB9uXpkxXoVXQ2Dw6kM5uh9Pjhi7OKxTwAldmdxad8VCrbao-gSvR-RRYGW5r9uZvra2hnyktjaOroS/s1600/121.png" /></a></div>
<br />
#4) Then go to Settings→Other settings→Tap on Deliete blog<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6nRqU1zeJ7942ioEUeneQESH8StOjP2vQgpEsI1pByIleKjrosQG5lW9h7GqR60_-0AD9loT7P6_RdexzwIzKeKvne2rmDl6IjzKVxCB9Gxc9l7BY_dupO-gC7c3AGoWfbTxG0KkgBeJc/s1600/111.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6nRqU1zeJ7942ioEUeneQESH8StOjP2vQgpEsI1pByIleKjrosQG5lW9h7GqR60_-0AD9loT7P6_RdexzwIzKeKvne2rmDl6IjzKVxCB9Gxc9l7BY_dupO-gC7c3AGoWfbTxG0KkgBeJc/s1600/111.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Download your own blog before deleting it (optional). Before your blog is deleted, you are given the option to upload your own blog on your computer first. Click Download Blog The blog can be downloaded in XML format. You can open it at any News Reader app and blog will look as it did when it was online.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj70bSzq-xaeR6GIVpqAjfG2qvqf6mk_0V-doQCQbTxqoryw6vWXU1SiUci_cs-PRdiyBlhsA8Y5k5u9aCi-9iLSY5GeDMMrC5okWlLTlThw5T13LMsAtA2zXra7aqjyQAY-OAf0zl5f5S/s1600/123.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj70bSzq-xaeR6GIVpqAjfG2qvqf6mk_0V-doQCQbTxqoryw6vWXU1SiUci_cs-PRdiyBlhsA8Y5k5u9aCi-9iLSY5GeDMMrC5okWlLTlThw5T13LMsAtA2zXra7aqjyQAY-OAf0zl5f5S/s1600/123.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So that is all about <b>How to deliete a Blogger Blog completely.</b> put your comments below for any query</div>
<br /></div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-32217314272724321782016-07-08T05:35:00.000-07:002016-07-08T08:38:35.269-07:00How to add Float AdSense Ads on left or right side of your Blog<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="tr_bq">
<h2>
How to add Float AdSense Ads on left or right side of your Blog</h2>
Floating ads are effective when you do not have enough space on your blog. Generally, we can see our blog for the left and the right side is always empty, which is known as the idle space, and we can easily be used floating in the gap using a technique that can generate more click AdSense ads.<br />
<br />
This does not occupy space on your opinion of your own content area or sidebar, footer section. In this tutorial I will share how to use 160px X 600Px AdSense ads can float right or left site of your blog. Not only AdSense ads can be a float, you can use any of the branches ads do float. Oh, before proceeding, please read carefully the terms of service of your respective branch network of ads that they allow you to float ads or not.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCKEVDQXY6gjPCoGxp3l7_Mgmczh3W4e0JqukF5XXzz94I9aKJzEH8PzlSjShjTaK4nqGTNQTzY3RO5zjH7Zi6YH6XxjAduEy8h93TFB1netxi6vc1Ez8YDIs0g3OSBnJ1Jr26YmRbHzRw/s1600/Add-Floating-Adsense-Ads.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCKEVDQXY6gjPCoGxp3l7_Mgmczh3W4e0JqukF5XXzz94I9aKJzEH8PzlSjShjTaK4nqGTNQTzY3RO5zjH7Zi6YH6XxjAduEy8h93TFB1netxi6vc1Ez8YDIs0g3OSBnJ1Jr26YmRbHzRw/s640/Add-Floating-Adsense-Ads.png" width="640" /></a></div>
<br /></div>
<br />
Step 1: Log into your Blogger account and go to your Blogger Dashboard<br />
<br />
Step 2: Go to your layout tab.<br />
<br />
Step 3 Click "Add a Gadget", then select «HTML / JavaScript» Gadget.<br />
<br />
Step 4 Copy the code below and paste it «HTML / JavaScript» Gadget<br />
<br />
<blockquote>
<style><br />
#bloggerspicesflotads {<br />
height:30px;<br />
width:auto;<br />
background: #333333 url('..');<br />
background-repeat:repeat-x;<br />
text-align:left;<br />
padding-top:4px;<br />
}<br />
#bsadsbase{<br />
height:600;<br />
margin:0auto;<br />
width:160px;<br />
background:#fff;<br />
border-bottom:2px #333333 solid;<br />
border-right:2px #333333 solid;<br />
border-left:2px #333333 solid;<br />
text-align:center;<br />
padding:4px;<br />
}<br />
#bsadsheadline{<br />
opacity:1.0;<br />
height:auto;<br />
width:auto;<br />
position:fixed;<br />
top:65px;<br />
<span style="color: blue;">left:10px;</span><br />
border-bottom:1px #005094 solid;<br />
border-bottom:0px blue solid;<br />
color:#333;<br />
padding:0px;<br />
z-index:1001;<br />
font-size:13px;}<br />
</style><br />
<script type="text/javascript"><br />
function getValue()<br />
{<br />
document.getElementById("bsadsheadline").style.display = 'none';<br />
}<br />
</script><br />
<table><tbody>
<tr><td class="line-content">/* add Float AdSense Ads on left or right side of your Blog*/</td></tr>
</tbody></table>
<table><tbody>
<tr><td class="line-content">/*Gadgets by http://1lytebyte.blogspot.com/ -------------------*/</td></tr>
</tbody></table>
<br />
<div id="bsadsheadline"><br />
<div id="bloggerspicesflotads"><br />
<span style="color:#fff;font-size:13px;font-weight:bold;text-shadow:black 0.1em 0.1em 0.1em"></span><br />
<span style="color:#fff;font-size:13px;font-weight:bold;text-shadow:black 0.1em 0.1em 0.1em;float:right;padding-top:3px;padding-right:10px"><a href="http://1lytebyte.blogspot.com/2016/07/how-to-add-float-adsense-ads-on-left-or-right-side-of-a-blog.html" target="_blank" onclick="getValue()">close(x)</a></span><br />
</div><br />
<div id="bsadsbase"><br />
<h3></h3><br />
<p align="left"><h3></h3></p><br />
<p> <br />
<span style="color: blue;">Ads code here</span><br />
<br/></p></div></div></blockquote>
<br />
Replace <b>Ads code here </b>which is in blue colure with your adsense code<br />
<br />
If you want to lace adsense code from right side of the blog then Change <b>Left </b>with <b>right</b> to float right side of your blog. (its is available in blue colure on the code)</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com1tag:blogger.com,1999:blog-2184989635790066082.post-62032551278003098382016-07-08T05:22:00.001-07:002016-07-08T05:22:31.608-07:00 How to Add right and left sidebar ads widget in blogger <div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
Hi Blogger Geeks, Today in this article we are going to explain <b>How to Add right and left sidebar ads widget in blogger </b>widget sidebar widget blogger template.Installing definitely increase your income because the widget will remain active for the embedded users.We Close button in the <b>sidebar banner ads</b> <b>160x600 skyscrapper</b>, so if the user does not want to see ads s / he can press the close button to close the previous post we've talked ads.In</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQCxxFrcwD01dU7psZtjrIGV_01kB7kvJI1zZrjToArbjhYlnaAaE17lt24Md6sxPOMuTwaiEuB1J3OA6z18pXbb6CTQaDXTHh56yW9KY3INPG7GnbEaAULg2MVEleVhbFZX2GhDRyibz2/s1600/sidebar+banner+ads.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQCxxFrcwD01dU7psZtjrIGV_01kB7kvJI1zZrjToArbjhYlnaAaE17lt24Md6sxPOMuTwaiEuB1J3OA6z18pXbb6CTQaDXTHh56yW9KY3INPG7GnbEaAULg2MVEleVhbFZX2GhDRyibz2/s640/sidebar+banner+ads.png" width="640" /></a></div>
<br />
Top Leaderboard 970 x 90 advertising tool, while the other answer sticky footer floating ads tool<br />
<br />
But skyscrapper 160 x 600 you can place AdSense ads or any other third of the advertisements it.It looks very cool and unique, many of the site using this trick to increase their income ads.But always keep it in my mind before placing I read an ad on the widget for the first time after implentation of advertising policy, the only place them.So many ad networks allow you to place such advertising sitcky sidebar gadget on site or sticky advertising blog.so to grab this sidebar widget for blogger template follow these steps listed below.<br />
<br />
<h2 style="text-align: left;">
Steps to How to Add right and left sidebar ads widget in blogger template</h2>
1) Go to <b><a href="https://www.blogger.com/home" rel="nofollow" target="_blank">blogger</a></b> & Login in to your Account<br />
<br />
2)Next go to Layout→Add a Gadget→ Html/JavaScript<br />
<br />
3) Now copy & past the below code<br />
<br />
<br />
<blockquote class="tr_bq">
<style scoped='' type="text/css"><br />#bsdsidebarads{position:fixed;_position:absolute;top:0;right:0;width:160px;clip:inherit;_top:expression(document.documentElement.scrollTop+<br />document.documentElement.clientHeight-this.clientHeight);_left:expression(document.documentElement.scrollLeft+ document.documentElement.clientWidth - offsetWidth)}<br /></style><br /><script type="text/javascript"><br />// Siderbar Ads Widget By http://1lytebyte.blogspot.com/<br />function get_cookie(Name){var search=Name+"="var returnvalue="";if(document.cookie.length>0){offset=document.cookie.indexOf(search)if(offset!=-1){offset+=search.length end=document.cookie.indexOf(";",offset);if(end==-1)end=document.cookie.length;returnvalue=unescape(document.cookie.substring(offset,end))}}return returnvalue}function close1(){if(persistclose)document.cookie="remainclosed=1"document.getElementById("bsdsidebarads").style.visibility="hidden"}if(window.addEventListener)window.addEventListener("load",staticbar,false)else if(window.attachEvent)window.attachEvent("onload",staticbar)else if(document.getElementById)window.onload=staticbar<br /></script><br /><br /><br /><div class="clear"><br /></div><br /><div id="bsdsiderbarads"><br /><div style="text-align: right;"><br /><a href="" onclick="close1(); return false"><img src="<span style="color: red;">https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilyTvf7oDMYc9MobZ0B5eSv2tNjkJGClKmmdr3mXWT_h_XP75gI0CapL-RaVr2ovVAW6HkQe0dIwCdZ_G72Gle76gkZthJ9MGSrG55qyZaR4MGKIXUDyJcsv7yUWq2cKjqDEjN2zPWcDU/s1600/close-button.png</span>" /></a></div><br /><div onclick='close1()'><br /><div style="background: #fff;"><br /><a target="_blank" href="<span style="color: red;">Your URL</span>"><img src="<span style="color: red;">https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyWuPfmHZUZGVt98cvYwtfK6OsLUk4lSl1nlIVt5NK3UvQUrsYnT2CxHd2eMaN1fFiTDHD5XYYICUtgxyIClsIt2YhMHgsROguDP46vZncriaUH1I2ekW_5eB5XSRpMJJswhl8m6pncyQ/s320/siderbar+left+and+right+adsense+banner+ad+widget+gadget+by%252lytebyte.gif</span>" style="border: none;" alt="Lyte Byte" /></a></div><br /></div></div><br /><style scoped='' type="text/css"><br />#bsdsidebarads1{position:fixed;_position:absolute;top:0;left:0;width:160px;clip:inherit;_top:expression(document.documentElement.scrollTop+<br />document.documentElement.clientHeight-this.clientHeight);_left:expression(document.documentElement.scrollLeft+ document.documentElement.clientWidth - offsetWidth)}<br /></style><br /><script type="text/javascript"><br />function get_cookie(Name){var search=Name+"="var returnvalue="";if(document.cookie.length>0){offset=document.cookie.indexOf(search)if(offset!=-1){offset+=search.length end=document.cookie.indexOf(";",offset);if(end==-1)end=document.cookie.length;returnvalue=unescape(document.cookie.substring(offset,end))}}return returnvalue}function close11(){if(persistclose)document.cookie="remainclosed=1"document.getElementById("bsdsidebarads1").style.visibility="hidden"}if(window.addEventListener)window.addEventListener("load",staticbar,false)else if(window.attachEvent)window.attachEvent("onload",staticbar)else if(document.getElementById)window.onload=staticbar<br /></script><br /><br /><br /><div class="clear"><br /></div><br /><div id="bsdsidebarads1"><br /><div style="text-align: left;"><br /><a href="" onclick="close11(); return false"><img src="<span style="color: red;">https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilyTvf7oDMYc9MobZ0B5eSv2tNjkJGClKmmdr3mXWT_h_XP75gI0CapL-RaVr2ovVAW6HkQe0dIwCdZ_G72Gle76gkZthJ9MGSrG55qyZaR4MGKIXUDyJcsv7yUWq2cKjqDEjN2zPWcDU/s1600/close-button</span>" /></a></div><br /><div onclick='close11()'><br /><div style="background: #fff;"><a target="_blank" href="<span style="color: red;">Your URL</span>"><img style="border: none;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyWuPfmHZUZGVt98cvYwtfK6OsLUk4lSl1nlIVt5NK3UvQUrsYnT2CxHd2eMaN1fFiTDHD5XYYICUtgxyIClsIt2YhMHgsROguDP46vZncriaUH1I2ekW_5eB5XSRpMJJswhl8m6pncyQ/s320/siderbar+left+and+right+adsense+banner+ad+widget+gadget+by+bloggersstand.gif" width="160" height="600"/></a><p></p></div></div></div></blockquote>
<br />
Now replace the red colure Lines with your Image and and your url and then save the gadget Thats all Folks <br />
<br />
So i think you have learned about the<b> How to Add right and left sidebar ads widget in blogger </b>template for any quries keep commenting below</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-33040529641790811852016-07-08T04:08:00.000-07:002016-07-08T04:15:21.163-07:00How to display Adsense code to Left / Right side In a Blog Post<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Want to know which part of your site or blog will bring you more profit. Add AdSense messaging inside and then check out the popular Google AdSense heat map. Recent studies, however, showed that the first paragraph after placing AdSense site or blog is one of the best AdSense placement. Unfortunately, the default Blogger platform offered by Google- does not allow the installation after the first paragraph: But since it has become the most profitable sectors, many webmasters try to use the best AdSense placement. How can you not enjoy the same level of profit.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7AFFLWCG2jbJFdbwWJDS8maikElglTfVw-So4mYiMAgIRTFUGr6ppKqO-jTj37lFB6899Uvakf1HEqzWMtE3F5w3aiFHI9lDTAUVOix2gbVhCGSqFUcpIwzvEiZ09ggx3Lacd9IFhRiFo/s1600/placing-adsense-adcode-after-below-the-title+pakgoogle.com.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7AFFLWCG2jbJFdbwWJDS8maikElglTfVw-So4mYiMAgIRTFUGr6ppKqO-jTj37lFB6899Uvakf1HEqzWMtE3F5w3aiFHI9lDTAUVOix2gbVhCGSqFUcpIwzvEiZ09ggx3Lacd9IFhRiFo/s640/placing-adsense-adcode-after-below-the-title+pakgoogle.com.png" width="640" /></a></div>
<br />
To solve the problem, we just move the ads to be displayed in places, adding JavaScript and DIVs. In the following scenario, you can easily select a paragraph or heading, and then you want to inject a statement. This way, you will not have to <b>manually change each post</b><br />
<br />
<br />
<h2 style="text-align: left;">
Show after ads to AdSense, when the first paragraph in Blogger</h2>
<h2 style="text-align: left;">
<br />1. Log into your Blogger account,</h2>
<br />
select your own blog, and click "Template" on the left side. Open the Template Editor using the "Edit HTML" button. When the editor opens, click anywhere inside the code of the area and press CTRL + F keys on your keyboard to open the editor's search box: Search the following line.<br />
<br />
<blockquote class="tr_bq">
<data:post.body/></blockquote>
<br />
<h2 style="text-align: left;">
2. Add the following DIVs, before and after red, like this.</h2>
<br />
<blockquote class="tr_bq">
<span style="color: red;"><div id='adsense-target'></span><data:post.body/><span style="color: red;"></div></span></blockquote>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtnXqsu3vz0WnUGzocP66BVRnSVeI3cuxiVb4Yf_tGgslnPB1XXFdcyO195WrG2yy7GZhZQH0PwO6t5FXGhzQPa-c4Y1BoZP2Ld-3CrxV4b9sxspbqBfgQyO9HRew280gQau8iFtSeBz8Z/s1600/114.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtnXqsu3vz0WnUGzocP66BVRnSVeI3cuxiVb4Yf_tGgslnPB1XXFdcyO195WrG2yy7GZhZQH0PwO6t5FXGhzQPa-c4Y1BoZP2Ld-3CrxV4b9sxspbqBfgQyO9HRew280gQau8iFtSeBz8Z/s1600/114.png" /></a></div>
<h2 style="text-align: left;">
<br />3. Copy the AdSense code that you want to show </h2>
<br />
Use this <a href="http://1lytebyte.blogspot.in/2016/06/how-to-step-adsense-ads-below-your-blog-title.html" target="_blank">tool</a> to convert it to plain text. Just above the line that we just found, add the following HTML and replace «AdSense code here" text converted ad code<br />
<br />
Select the code below<br />
<blockquote class="tr_bq">
<br />
<b:if cond='data:blog.pageType == &quot;item&quot;'><br />
<div id='adsense-content' style="display:block;text-align: center">ADSENSE CODE HERE</div></b:if></blockquote>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB2CxJjssexIOPK0SF25UkKtAM_Idoyy13mLINa4H28OavQI-I9VhVwCzRajQNb8vzf38sCYO_CH79aEYxe_8xZc0oP60cOh6mU16CDy_YA2bD2ZsL_bRTIAy3w9bUJJY9ilchay3nvrgP/s1600/115.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB2CxJjssexIOPK0SF25UkKtAM_Idoyy13mLINa4H28OavQI-I9VhVwCzRajQNb8vzf38sCYO_CH79aEYxe_8xZc0oP60cOh6mU16CDy_YA2bD2ZsL_bRTIAy3w9bUJJY9ilchay3nvrgP/s1600/115.png" /></a></div>
<h2 style="text-align: left;">
<br />4. Align the left or right AdSense</h2>
<br />
<br />
By default, Google AdSense ad units will appear immediately after the middle of the first paragraph. If you are unhappy with the results and want to wrap text around the ad, you can choose one of the options below.<br />
<u><br />
</u> <u>a) Align the AdSense ad to the left : </u>div id='adsense-content' style="display:block;text-align: center" to the with code below<br />
<blockquote class="tr_bq">
<br />
<div id='adsense-content' style="display: inline-block;float: left;margin:15px 15px 15px 0px"></blockquote>
<br />
After Changing the ad will display something like this<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiID4zIwcG7yBp3W-V6kYltadG5fxUJwM36IseWiKWkE5n4yTeFn7HpO_NBJAg76lHa1Ptuhusk1iByzpNPDzvN6LYeW3hD8GU6KvvNjdhY069-JwQ4M3oabX6LhmK8mPVkZWcLA-ZBWSnK/s1600/Display+AdSense+Ads+after+the+First+Paragraph+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiID4zIwcG7yBp3W-V6kYltadG5fxUJwM36IseWiKWkE5n4yTeFn7HpO_NBJAg76lHa1Ptuhusk1iByzpNPDzvN6LYeW3hD8GU6KvvNjdhY069-JwQ4M3oabX6LhmK8mPVkZWcLA-ZBWSnK/s640/Display+AdSense+Ads+after+the+First+Paragraph+3.png" width="640" /></a></div>
<br />
<br />
b) <u>Align the AdSense ad to the right of content change </u> div id='adsense-content' style="display:block;text-align: center to the with code below<br />
<br />
<blockquote class="tr_bq">
<div id='adsense-content' style="display:inline-block;float:right;margin:15px 0px 15px 15px"></blockquote>
<br />
<h2 style="text-align: left;">
5. Finally, add this script immediately after the</h2>
<blockquote class="tr_bq">
/*<br />
---***************************** </blockquote>
<blockquote class="tr_bq">
How to display Adsense code to Left / Right side In a Blog Post By http://1lytebyte.blogspot.com/</blockquote>
<blockquote class="tr_bq">
---*****************************/<br />
<script type='text/javascript'><br />
function insertAfter(addition,target) {<br />
var parent = target.parentNode;<br />
if (parent.lastChild == target) {<br />
parent.appendChild(addition);<br />
} else {<br />
parent.insertBefore(addition,target.nextSibling);<br />
}<br />
}<br />
var adscont = document.getElementById(&quot;adsense-content&quot;);<br />
var target = document.getElementById(&quot;adsense-target&quot;);<br />
var linebreak = target.getElementsByTagName(&quot;br&quot;);<br />
if (linebreak.length &gt; 0){<br />
insertAfter(adscont,linebreak[0]);<br />
}<br />
</script></blockquote>
<b> 6. Finally Save the templates. you are done :-)</b><br />
<br />
<h2 style="text-align: left;">
<b>Imortant Note:</b></h2>
<b><br />
</b> - To insert the adsense code after the second paragraph, change "0" from the line in red with "2".<br />
<br />
- If you want to put AdSense just below the heading h2 or heading h3 of a post, replace </div>
from <span style="color: blue;">&quot;br&quot;</span> with <b>h2</b> or <b>h3</b>. <br />
<br /></div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0tag:blogger.com,1999:blog-2184989635790066082.post-43449070424774218142016-07-07T14:37:00.000-07:002016-07-07T15:00:14.361-07:00Top 5 Snapchat Tricks <div dir="ltr" style="text-align: left;" trbidi="on">
<b>Snapchat</b> is an image messaging and multimedia mobile app<br />
<br />
<b>Snapchat </b>can be quite intimidating if you're a beginner. Especially if your friend's snaps include a hilarious face-swaps, Dalmatian- ears, and you did not like Snapchat art, was possible. Do your Snaps often pale in comparison to the masterpieces Snapchat your friends seem to be able to exceed effortlessly.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnw7tzZD7sAQ2BCIV0GmVewZSWeXTltQKVQQ2TM8EsfhXls6WnfcMoeegeyXuh7MgVb3IvcL_Q-Z56xIIauGTHqOWx_mSLDHMDsQMyvH2BtCX7otYoz3HlYzjRL8HJLoEdHpAwBC66mt5Z/s1600/MAIN-Snapchat.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnw7tzZD7sAQ2BCIV0GmVewZSWeXTltQKVQQ2TM8EsfhXls6WnfcMoeegeyXuh7MgVb3IvcL_Q-Z56xIIauGTHqOWx_mSLDHMDsQMyvH2BtCX7otYoz3HlYzjRL8HJLoEdHpAwBC66mt5Z/s320/MAIN-Snapchat.jpg" width="320" /></a></div>
<br />
<h2 style="text-align: left;">
1. Snapchat Activates the cool features of your settings.</h2>
First of all, make sure you have up-to- date version <b>Snapchat</b> downloaded to your device. Download the latest version of the app, visit Google Play or iTunes store.<br />
<br />
When the program is updated, open it. Tap the gear icon in the upper right corner of your feed, and then tap "Manage" under "Additional services".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqKGLK5dXQDRtGZqVRK9g18wexvWssp1o6AVrEDu7QjKVgJTNJkWRsLfmyESokHaUl-MZy_4Zb0Yh-QER5KDK9IUzyT3NoBlaeMoycWC6RjvVE-9qcW13r7aBossTN1mdacnbIrO0BXJ-O/s1600/Activate+the+cool+features+of+your+settings..jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqKGLK5dXQDRtGZqVRK9g18wexvWssp1o6AVrEDu7QjKVgJTNJkWRsLfmyESokHaUl-MZy_4Zb0Yh-QER5KDK9IUzyT3NoBlaeMoycWC6RjvVE-9qcW13r7aBossTN1mdacnbIrO0BXJ-O/s640/Activate+the+cool+features+of+your+settings..jpg" width="640" /></a></div>
<br />
In this section you can enable bonus features such as filters, frontal Flash, replay and special text and also choose some of the best friends you want to display in your "Send" screen.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRT0m0hE8daj4rEtiDoAFC9VsW7MFtFgmygMnnhpZ7IQlgoGvUkY1hLGUZN9_9oZLCOOG8EOTsVtxiLshQCMoAiAkNhAvMjPN7xH9E5LvLgjHay5DrSVOwJdhpJMVSqAVq_MhVaPB5ViP9/s1600/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRT0m0hE8daj4rEtiDoAFC9VsW7MFtFgmygMnnhpZ7IQlgoGvUkY1hLGUZN9_9oZLCOOG8EOTsVtxiLshQCMoAiAkNhAvMjPN7xH9E5LvLgjHay5DrSVOwJdhpJMVSqAVq_MhVaPB5ViP9/s640/12.jpg" width="512" /></a></div>
<br />
<h2 style="text-align: left;">
#2) Snapchat Use special text.</h2>
<br />
Typing subtitles snaps on the top is great, but what if you want your snap cap larger text and emoji. This is a special feature of the text, an alternative title style, comes in handy.<br />
<br />
Tap the "M" letter next to the pencil icon in the upper right corner of your special project. The characters you type in will increase.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEherHGUqtmoZKlkYnaELKDvdeyR3Uycr_MPWCgZcoL0kYcZ1OOLsevaPBiORVT4l5XTj_2s5Ule9fiJepfjdSDEAQkZwL11DvoM1BGel1B0HRcIyCUM-eO__D9V5DJcpnKWtCgYB2LQonzG/s1600/eb0ab7_9ebbd18559e246e5a7281ccff42bc641.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEherHGUqtmoZKlkYnaELKDvdeyR3Uycr_MPWCgZcoL0kYcZ1OOLsevaPBiORVT4l5XTj_2s5Ule9fiJepfjdSDEAQkZwL11DvoM1BGel1B0HRcIyCUM-eO__D9V5DJcpnKWtCgYB2LQonzG/s640/eb0ab7_9ebbd18559e246e5a7281ccff42bc641.png" width="640" /></a></div>
<br />
#3) Snapchat Use 2 coloure filters at once<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu0WrAjBTvXc9rIE42R6OZSroV-D5LTctvPGNZ3b7lvBk5bMEYCE4W8kryXexFOGLLU_WEZEGjHnCn2s4MtHsMEhWEyBXG5oHfuljqxTlYCfo65gdQaMx4u2_OpmZUw_y5zZr0sXr3M2My/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu0WrAjBTvXc9rIE42R6OZSroV-D5LTctvPGNZ3b7lvBk5bMEYCE4W8kryXexFOGLLU_WEZEGjHnCn2s4MtHsMEhWEyBXG5oHfuljqxTlYCfo65gdQaMx4u2_OpmZUw_y5zZr0sXr3M2My/s640/14.png" width="358" /></a></div>
<h2 style="text-align: left;">
#4) Snapchat Add fun filters.</h2>
Snapchat recent upgrades allow you to add Instagram-like filters, art and other data tags in your snap. Just slide your finger left or right to see each filter. Here's a rundown of all the filters offered.<br />
<br />
Geolocation,Time,Temparatures Etc<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxuit7wiAUBtmFQcC7DKZfgWDQDjKDRxUvaVhPYBMt20A2LiPEhUz48_XS2oCWb3VAAXBzaIFAAKQUn13oqwhdEMYdw1VWJjv87km1W9Bx0oYrCSwcp8T-bKOiRmSHtPRBPERHGvRsySe/s1600/http-%25252F%25252Fmashable.com%25252Fwp-content%25252Fuploads%25252F2014%25252F08%25252Ftemperaturessnapcha.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxuit7wiAUBtmFQcC7DKZfgWDQDjKDRxUvaVhPYBMt20A2LiPEhUz48_XS2oCWb3VAAXBzaIFAAKQUn13oqwhdEMYdw1VWJjv87km1W9Bx0oYrCSwcp8T-bKOiRmSHtPRBPERHGvRsySe/s640/http-%25252F%25252Fmashable.com%25252Fwp-content%25252Fuploads%25252F2014%25252F08%25252Ftemperaturessnapcha.jpg" width="360" /></a></div>
<br />
<h2 style="text-align: left;">
#5) Sanapshot emoji to add extra color to your photos.</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ6E9TEvpUevaWQ2vzjXm7aSXEiqkB0Cf_QV9rNgd38EfFAqiq_KHeokxmIo7dJu6spMGZUtIMuIutaYwIvH3KJRqEx_Rk0HpoTcLzWyHPsdHMSZpgmlnf1uRVXiSbupS7l6-pdR2QL7Di/s1600/2015%25252F12%25252F31%25252F65%25252Fsnapchat_da.05a30.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ6E9TEvpUevaWQ2vzjXm7aSXEiqkB0Cf_QV9rNgd38EfFAqiq_KHeokxmIo7dJu6spMGZUtIMuIutaYwIvH3KJRqEx_Rk0HpoTcLzWyHPsdHMSZpgmlnf1uRVXiSbupS7l6-pdR2QL7Di/s320/2015%25252F12%25252F31%25252F65%25252Fsnapchat_da.05a30.jpg" width="320" /></a></div>
<div>
<br /></div>
</div>
Display APIhttp://www.blogger.com/profile/09530341285353396168noreply@blogger.com0