1. DFT库配置与Black Box处理刚接触Tessent ATPG时最让人头疼的就是DFT库的配置问题。这里说的DFT库和仿真用的simulation lib可不是一回事。仿真库主要关注功能模拟而DFT库则专门用于测试相关操作比如扫描链控制和故障建模。我刚开始做项目时就犯过错误直接用仿真库跑ATPG结果DRC检查报了一堆莫名其妙的问题。库转换实战技巧使用Mentor的libcomp工具转换时记得加-dft参数转换后一定要检查这几个关键属性是否存在scan_enable test_mode async_set/reset建议保留原始.lib文件作为备份我遇到过转换后时序信息丢失的情况Black Box的处理是另一个容易踩坑的地方。上周刚帮同事排查一个问题他的模块明明设置了black box但ATPG还是尝试去分析内部结构。后来发现是black box定义语句放错了位置应该在read_verilog之后立即声明。正确的操作顺序应该是read_verilog scan_inserted.v add_black_boxes -module analog_core add_black_boxes -instances /PLL_inst -pin CLKOUT Z特别注意那个Z值它表示将black box输出设为高阻态。在实际项目中我们团队发现有些模拟模块输出设为X会导致覆盖率计算异常改用Z后就正常了。2. Test Procedure时序定义详解第一次看到Test Procedure文件时我完全被那些timeplate搞晕了。后来在ATE工程师的帮助下才明白这其实就是定义测试机台如何打信号的乐谱。最近做的一个汽车芯片项目就因为timeplate定义不当导致测试时间增加了30%后来优化后才达标。关键参数设置经验时钟周期不要设得太紧建议比功能时序宽松10-15%force_pi和measure_po的时间点要避开时钟边沿多时钟域设计一定要为每个时钟单独定义timeplate这是我调优过的一个真实案例配置timeplate tp_main force_pi 2; measure_po 22; Clk 10 5; # 上升沿在10ns脉宽5ns period 30; # 30ns周期 end对于包含EDT压缩的设计要特别注意shift和capture阶段的时序差异。有个项目我们忘了在capture阶段延长测量窗口导致小delay缺陷漏检后来通过调整measure_po的位置才解决。3. Dofile中的扫描链配置技巧扫描链配置是ATPG的基础但也是最容易出错的部分。去年我们有个28nm项目因为scan chain定义顺序反了导致生成的pattern全部无效白白浪费两周时间。扫描链声明要点确保scan_in和scan_out的端口名与网表完全一致多电压域设计要明确指定level shifter位置使用-clock_mixing参数处理跨时钟域链这是我常用的一个安全模板proc tessent_scan_setup {} { add_scan_groups grp1 -test_procedure scan_proc.tproc add_scan_chains chain1 grp1 { /top/scan_in[0] } { /top/scan_out[0] } -clock_mixing sync add_clocks 0 /clk_core add_clocks 1 /clk_io }遇到复杂设计时建议先用report_scan_chains命令验证链结构。我们团队开发了个自动化检查脚本可以快速比对网表扫描链和Dofile定义的差异。4. DRC检查规则深度解析DRC检查阶段就像ATPG的体检报告但那些错误代码常常让人摸不着头脑。记得有次遇到C1-237错误花了三天才发现是clock gating控制信号没正确定义。高频DRC问题处理经验C类错误80%与时钟定义相关检查add_clocks参数S类错误通常是扫描链断裂用debug_scan_chain定位E类错误多数因为异步复位信号未约束建议首次运行时打开详细日志check_design_rules -verbose 3 -report_all_violations对于RAM的A类规则需要特别注意写使能和地址线的约束。我们有个项目因为漏加add_input_constraints导致RAM故障覆盖率只有60%补上约束后才提升到98%。5. Fault模型与覆盖率优化刚开始用ATPG时我总以为覆盖率只和pattern数量有关。后来才发现fault模型的设置才是关键。最近一个7nm项目通过调整fault采样策略用20%的pattern就达到了95%的覆盖率。覆盖率提升技巧小规模设计用add_faults -all全量分析大规模芯片先做10%采样(set_fault_sampling 10)关键模块手动添加fault siteadd_faults /cpu/core/alu* -instance -stuck 1 add_nofaults /memory_ctrl -module对于时序敏感路径建议开启transition fault模式set_atpg -fault_type transition set_atpg -capture_cycles 2我们团队总结出一个经验公式当stuck-at覆盖率超过98%后每提升0.1%需要的pattern数量会指数增长。这时候就要权衡测试时间和质量要求了。6. Pattern生成与格式转换生成pattern只是开始真正的挑战在于如何让ATE机台正确识别。去年有个客户抱怨我们的STIL文件无法加载最后发现是header信息格式不兼容。多格式输出策略验证环境用Verilog格式做门级仿真测试机台STIL是最通用的选择长期存储PATDB格式最节省空间这是我推荐的保存命令组合write_patterns chip.stil -format stil -replace write_patterns chip.v -format verilog -replace write_flat_model chip.patdb -replace对于含EDT的设计要特别注意压缩比设置。我们有个项目设了100x压缩结果ATE无法处理那么高的数据速率后来降到20x才稳定。建议首次生成时用-quick参数试跑确认无误再完整生成。
Tessent ATPG实战:从DFT库配置到Pattern生成的全流程解析
1. DFT库配置与Black Box处理刚接触Tessent ATPG时最让人头疼的就是DFT库的配置问题。这里说的DFT库和仿真用的simulation lib可不是一回事。仿真库主要关注功能模拟而DFT库则专门用于测试相关操作比如扫描链控制和故障建模。我刚开始做项目时就犯过错误直接用仿真库跑ATPG结果DRC检查报了一堆莫名其妙的问题。库转换实战技巧使用Mentor的libcomp工具转换时记得加-dft参数转换后一定要检查这几个关键属性是否存在scan_enable test_mode async_set/reset建议保留原始.lib文件作为备份我遇到过转换后时序信息丢失的情况Black Box的处理是另一个容易踩坑的地方。上周刚帮同事排查一个问题他的模块明明设置了black box但ATPG还是尝试去分析内部结构。后来发现是black box定义语句放错了位置应该在read_verilog之后立即声明。正确的操作顺序应该是read_verilog scan_inserted.v add_black_boxes -module analog_core add_black_boxes -instances /PLL_inst -pin CLKOUT Z特别注意那个Z值它表示将black box输出设为高阻态。在实际项目中我们团队发现有些模拟模块输出设为X会导致覆盖率计算异常改用Z后就正常了。2. Test Procedure时序定义详解第一次看到Test Procedure文件时我完全被那些timeplate搞晕了。后来在ATE工程师的帮助下才明白这其实就是定义测试机台如何打信号的乐谱。最近做的一个汽车芯片项目就因为timeplate定义不当导致测试时间增加了30%后来优化后才达标。关键参数设置经验时钟周期不要设得太紧建议比功能时序宽松10-15%force_pi和measure_po的时间点要避开时钟边沿多时钟域设计一定要为每个时钟单独定义timeplate这是我调优过的一个真实案例配置timeplate tp_main force_pi 2; measure_po 22; Clk 10 5; # 上升沿在10ns脉宽5ns period 30; # 30ns周期 end对于包含EDT压缩的设计要特别注意shift和capture阶段的时序差异。有个项目我们忘了在capture阶段延长测量窗口导致小delay缺陷漏检后来通过调整measure_po的位置才解决。3. Dofile中的扫描链配置技巧扫描链配置是ATPG的基础但也是最容易出错的部分。去年我们有个28nm项目因为scan chain定义顺序反了导致生成的pattern全部无效白白浪费两周时间。扫描链声明要点确保scan_in和scan_out的端口名与网表完全一致多电压域设计要明确指定level shifter位置使用-clock_mixing参数处理跨时钟域链这是我常用的一个安全模板proc tessent_scan_setup {} { add_scan_groups grp1 -test_procedure scan_proc.tproc add_scan_chains chain1 grp1 { /top/scan_in[0] } { /top/scan_out[0] } -clock_mixing sync add_clocks 0 /clk_core add_clocks 1 /clk_io }遇到复杂设计时建议先用report_scan_chains命令验证链结构。我们团队开发了个自动化检查脚本可以快速比对网表扫描链和Dofile定义的差异。4. DRC检查规则深度解析DRC检查阶段就像ATPG的体检报告但那些错误代码常常让人摸不着头脑。记得有次遇到C1-237错误花了三天才发现是clock gating控制信号没正确定义。高频DRC问题处理经验C类错误80%与时钟定义相关检查add_clocks参数S类错误通常是扫描链断裂用debug_scan_chain定位E类错误多数因为异步复位信号未约束建议首次运行时打开详细日志check_design_rules -verbose 3 -report_all_violations对于RAM的A类规则需要特别注意写使能和地址线的约束。我们有个项目因为漏加add_input_constraints导致RAM故障覆盖率只有60%补上约束后才提升到98%。5. Fault模型与覆盖率优化刚开始用ATPG时我总以为覆盖率只和pattern数量有关。后来才发现fault模型的设置才是关键。最近一个7nm项目通过调整fault采样策略用20%的pattern就达到了95%的覆盖率。覆盖率提升技巧小规模设计用add_faults -all全量分析大规模芯片先做10%采样(set_fault_sampling 10)关键模块手动添加fault siteadd_faults /cpu/core/alu* -instance -stuck 1 add_nofaults /memory_ctrl -module对于时序敏感路径建议开启transition fault模式set_atpg -fault_type transition set_atpg -capture_cycles 2我们团队总结出一个经验公式当stuck-at覆盖率超过98%后每提升0.1%需要的pattern数量会指数增长。这时候就要权衡测试时间和质量要求了。6. Pattern生成与格式转换生成pattern只是开始真正的挑战在于如何让ATE机台正确识别。去年有个客户抱怨我们的STIL文件无法加载最后发现是header信息格式不兼容。多格式输出策略验证环境用Verilog格式做门级仿真测试机台STIL是最通用的选择长期存储PATDB格式最节省空间这是我推荐的保存命令组合write_patterns chip.stil -format stil -replace write_patterns chip.v -format verilog -replace write_flat_model chip.patdb -replace对于含EDT的设计要特别注意压缩比设置。我们有个项目设了100x压缩结果ATE无法处理那么高的数据速率后来降到20x才稳定。建议首次生成时用-quick参数试跑确认无误再完整生成。