一般scan的集成,主要就是时钟和复位:
一、时钟处理:
首先要梳理Phy里面的时钟结构,输入时钟?输出时钟?分别对应来自哪里?功能是什么?是否同步或者异步?最好罗列出表格和画出时钟结构图。内部是否有pll,pll的参考时钟频率?来自哪里?其前面是否有分支?pll后是否有自己的occ结构?Pll的输出时钟是多少?端口是否有可替代的dft_clk?参考func_sdc的描述
还要考虑ip_chain的shifi_timing是否和全局full_chip的scan_clk一致???决定了是否和对应的模块一起出向量?或者一起筛片?
ip内部的icg的TE端一般接scan_en的,但是可以在scan_insert的时候由scan_icg_ip接管处理(由两套方案处理:第一套保证了ck通路以及icg的te端的覆盖率;第二套方案更复杂,在第一套的基础上考虑了IR的功耗问题,有五种mode模式控制)
根据项目经验,pcie、usb中的ip_phy:
一般内部有pll结构,参考频率基本为低频100M左右,必须保持free running,alway with plus ,都是来顶层的pad,dft不做处理。如果模块规模很大的话,输入时钟一般很多,成千上百,不可能一个个插occ曲处理,必须分析找到近源同相位的分为一个组,在其对应的plL后插入occ,共享,切掉原有的路径,使得dft_mode下时钟稳定可控。也方便后端pr,减小面积。
注意:上述合并处理的时候会引入scan_ac下的clk通路,必须在工具中吃进sdc描述告诉后端在STA时进行约束:
creat_gen_clk -name [get_pins ] -source -master_clock -divide_by -add
set_clk_group -asynch -name -group {}
二、复位处理:
直接mux切换dft_rst_ip 处理;dc时shift下复位无效,dc_capture下翻转测试sa_fault,提高覆盖率;ac下来自tdr的静态信号,让其保持无效。
注意:
对于occ_chain有些注意事项那:分两张情况:第一种进edt机构:不能过多,否则会导致edt解压缩能力不足,影响pattern和coverage;解决办法:1、尽量不让occ_chain_reg上core_chain去balance,单独设置多条专用的occ_chain; 2、直接减小occ_chian的长度,一般默认为2,最多设置为4;第二种不进edt结构:单独出chain_fanmily,直接上拉到顶层的复用pad。
phy中pll的输出时钟一般直接切掉,用前面的同源时钟来驱动后面的scan_cell;
ddr、hbm中的一般也有pll,其pll的输入参考时钟频率较高600M左右,来自顶层的pll的,必须保证free runing的,但是也可能有分支,需要插入occ,这样bypass这一路后端是否接受?同时也决定是否带phy一起出向量?plL的输出时钟一般也是高频时钟,端口上不一定有对应的高频切管,所以自己内部后可能有自己的occ结构实现快慢时钟切换,ac测试,所以也需要压入edt结构集成。occ的slow_clk来自shift_capture_clk,pll启振,需要lock拉高稳频,在dft_mode 下需要对pll的输入控制信号接管,采用tdr控制配置。
Phy内部的chain的集成(直接将vender的ctl文件利用tessen转成可以是被识别的tcd文件,直接吃进去集成,注意转换前后的ip_chian上时钟沿变化)需要考虑:参考scan部分讨论:都需要考虑的ip_chain的长度,决定最大的shift_time;ip_chain的链首链尾的时序?一般都是正沿进,负沿出,链尾有latch,所以需要在phY的前面插入latch的,保证hold——timing,工具都可以自动实现;ip_chian的clk_icg的se一般都是接的scan_en;同时防止后期debug,需要对ip_chain bypass处理。若存在多个ip的,则可以采用or处理,内部tdr创建各自iP单独bypass的信号,实现可以选择单个ip的bypass。还要考虑在scan集成时,分时钟域或者powre_domain来处理。
其他:
phy上的其他scan信号处理:具体问题具体分析,核心保证dft_mode 下可控。
scan_mdoe /occ_mode/opcg_mode 等scan信号,采用tdr接管,一般都是每一个信号下挂一个sib来控制开关,尽量不要下挂到一个总的sib下,否则会导致setup 阶段太长,仿真时间太长。
一些非scan的测试使能信号,比如iddq_en brun_in ddl_en等,必须钳位成0;插个mux,slect为dft_ip_test。
其他的一些小ip,例如pvt_sensor 、pll 等:
pll 内部的chain一般不上链,但是防止仿真出现x太,必须钳位成0;要对除ref_clk和电源pin外的输入数字信号接管控制;同时害的观察pll启振后的lock信号是否拉高,采用tdr观察;一般功能也会做pll输出频率观测逻辑在模块级,clk_div_obv_*逻辑有时钟分频信号cru_obv_sel和cru_obv_sel,分频系数一般都是确定的,sel需要自己选择一个频率最高的,驱动scan_cell最多的时钟来观测。在top层会有选择某个模块的信号来观测。
sensor的内部短链一般需要上链;数字Input信号全部接管(tdr或者pad);输出也接管观测(tdr或者pad)
一些模拟ip的chian不上链,也需要钳位处理chain的输入接口为0;
三、atpg:
一般出两次pat验证:带IP_atpg和bypass_ip_atpg;来验证ip的集成前后的正确性。
一般由dft_ip_test或者dft_ip_scan_bypass 信号来使能控制两种模式的切换。
带phy的atpg可能会吃read_sdc(multi_cycle以及false_path),对pat和覆盖率有影响。
对于带ip的atpg一般都由外部的occ驱动,dc的覆盖率可能会不达标,原因是什么?是因为phy部分的ddl或者lane部分的reg没有上chain?为什么测不到?是否有增补向量来测?
对于采用Phy内部的occ设计出向量:一般叫做ncp模式。可以测试同步逻辑和异步clk之间的逻辑;需要vender提供ac_demon环境。
四、sim时注意事项:
1、首先检查环境问题:一致问题:网表、sdc、sdf;完整性问题:lib全套;电源pin:define或者force值(vdd1/vss0);feedthrough问题:一定保留穿线或者交互模块的全网表;test_proc中的问题:edt_update在load_unload中拉高再拉低,scan_en的dunmmy_cycle,以及ac时候的plL启振后clK通路问题(模块级siM加速仿真,一般force在plL的后面,分频前面;top_retarget时,都得验证force和不force,即自己启振情况是否正常,即配置是否正确?)。
2、对于ncp模式,必须采用仿真来判断启用pll自己的输出时钟和occ切换逻辑是否正常?拉出波形分析对比。