occ是什么:自己看manu
为了控制fast clock ,我们加入了OCC (on-chip clock control)模块,他的作用如下:
为每个clock domain提供独立的控制
根据pattern的情况 为 capture cycle分发正确数量的脉冲
更加干净的在shift clock和fast clock之间进行切换;
根据测试的类型,判断capture阶段是使用slow clock还是 fast clock;
以上主要由其occ结构中得shift_regs和occ_control来控制:shift_reg,即occ_chain(一般单独串chian)控制capture阶段中clk_pulse的精准次数,即func_clk的pulse;occ_control控制llslow_clk和fat_clk的快慢切换和clk_pulse次数。
结构如下:
根据dft_test_mode 和AC_MODE 的状态控制,分为两种模式Test和func,又根据capture的分为DC和AC测试。
func_mode 下,即occ_bypass模式:其一:fast_clk从顶层PLL过来(一定熟悉clk_path结构),只经过buff、fast_gate、mux等结构,会有一些delay的延迟,但对其原有的功能时序没有太大影响;其二:同时也会通过slow_clk_gate逻辑关闭test_clk的活动,减小功耗。
shift_mode :不赘述;
capture_mode:
在dc_capture 中:scan_en拉低,需要在atpg中设置一些dead_cycles的,让scan_en足够稳定,同时在SDC中设其为multi_cycles,让生出的pat和sdc保持一致;在ac_capture中同理。
几个特殊的信号:
1.occ_kill_clk_en:
用于ATE机台debug:在test_mode=0时,关闭occ输出的clk,减小power;
2、shift_only_mode:
test_mode=0,scan_en=1,slow_clk一直在活跃,也用于debug调试;
3、inject_tck:
用于选择pad上的slow_clk还是pad上的ijtag_tck,作为sel信号,来自于occ_control的tdr上。也是机台调试用。
出pulse—clk的方式:
方式一:
CCD(clock control definition)
用户定义ATPG能怎样控制时钟;(具体ATPG如何控制 产生多少个pulse 是由ATPG工具在推pattern的时候决定的)
并不会定义特定的时序;所以并不能配置复杂的clock schemes;
对每一个内部时钟做单独的definition;工具会自动决定在capture cycle 使用哪个clock,去detect更多的faults;
DRC的时候会验证 test procedure文件中时钟第一的语法;
CCD
两种定义:
per-cycle clock control (最常用的):
允许你使用scan cell的值基于单个的capture cycle 去定义内部时钟的输出;
使用 基于流水线的时钟生成,每个cycle 使用一bit(scan cell里的值 sub-chain里面的值)去控制时钟;
取决于capture_cycle_width[1:0]的值:默认为10,有三个cell,即三个pulses;00 有一个,01 有两个,一般seq_depth为2,则设置为01,采用两个clk_pulse,可以减小shift_cycles数量,缩短测试时间;11有四个。
clk_seq_pat:
使用 scan_cell里的值 基于capture cycle的时序去定义内部时钟; 使用基于计数器的时钟生成电路;不能被用来生成 launch-off-shift’的pattern;
区别:pre-cycle使用sub-chain 直接去存储pulse; 而sequence clock control 使用sub-chain去控制pulse的出现时间
方式二:
NCP(named capture procedure)
用户指定外部信号和内部生成时钟的关系, 好处是用户可以控制capture cycle全部的失踪时序;
前提是你得先写好procedure;一般不用。
OCC两种类型:
1、标准型:不赘述,一般最多三级级联,不要同时使能。
优点:shift_ck 和func_ck time_path分开互不影响。
2、父子型:有两种模式,父模式只有select功能,子模式有gate和select功能,一般para_occ在top层,做时钟选择,child_occ在底层做gate和clk_shoppping_control,两者级联使用,以减小clk_tree 的分支。一般用在,例如在clk_mesh结构或者H_clk_tree的设计中,不能用clk_mux的情况下。
缺点:对时序要求很要,需要主动把握。
插OCC的策略:
首先trace整个时钟网络结构,例如分频div,clk_gate,clk_mux等位置。一般occ插在这些逻辑的前面,同时不能影响功能func_clk的关系。一些特殊结构glitch_free_mux等,需要专门分析,可以放在其后,保证clk的稳定输出,同时采用tdr静态控制信号对其clk、rst的实现自主可控。
OCC_CHIAN的处理:
一般采用西门子tessent工具串chain时,不会根据reg的位置去做balance串chain,而是随机串起来,所以有可能shift_clk 频率太高时(超过100Mhz),timing过不了。需要后端提供PR后的def/lef位置信息做occ_chain_reorder处理。
Occ_chain在压缩时可能出现的问题:
一般采用双edt结构缓解顶层压缩,模块级会在ext_mode下采用ext_edt结构压缩wrap_chain和occ_chian,两者统称为ext_chain,对occ_chian拿出来单独压缩;如果设计比较大,即func_ck比较多,插入的occ较多,几百甚至上千,在occ_chain较多,且wrap_chain较少的情况下,ext-edt可能会失去解压缩能力,导致atpg推不出pats 。
解决办法:1.对occ_chain 单独出chain_family,且不加入ext_edt结构;缺点:需要使用多余的gipo资源。
2、reduce occ_chain的长度;缺点导致atpg推算的逻辑深度不够,有些深度faults测不出来,覆盖率可能会降低。
OCC交付数据:
1.三种模式下的 SDC :
scan_shift : case test_mode=1;test_en=1)
scan_dc_capture :case test_mode=1;test_en=0 fast_capture_mode=0)
func_mbist (包括ac_capture func mbist) case scan_en=0
附加理论:
Mini_occ结构:在tessent中name is *edt_gate_tessent_sib_sti_inst;是由ijtag_tck和DFT_test_clk,clk_mxu,sel 为ltest_en实现的时钟切换逻辑;即在DFT _test_clk的后面的cg的shift_capture_clk处插入mini_occ结构。
应用场景:设计中存在fun_ck小于shift_ck的时钟,采用mini_occ切掉。以处理atpg推ac_pat时DRC违例。原因:由于fun_ck的频率过小,pulse_width太宽,在capture_cycle里无法实现至少两个ck_pulse,以至无法launch & capture trans faults。
标签:capture,逻辑,chain,clk,shift,OCC,clock,详细,occ From: https://blog.csdn.net/jinkai0822/article/details/140345911