三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

芯片测试协议(STIL/SPF)生成避坑指南:从set_dft_signal到write_test_protocol

芯片测试协议(STIL/SPF)生成避坑指南:从set_dft_signal到write_test_protocol

芯片测试协议(STIL/SPF)生成避坑指南:从set_dft_signal到write_test_protocol

在数字IC设计流程中,DFT(Design for Testability)工程师常面临一个关键挑战:如何将设计中的测试信号定义准确转换为ATE(Automatic Test Equipment)可执行的测试协议文件。本文聚焦STIL/SPF格式文件的生成过程,深入解析set_dft_signal命令的参数配置陷阱,以及write_test_protocol输出阶段的常见问题解决方案。

1. 测试协议生成的核心流程与关键命令

测试协议生成是从RTL设计到ATE测试的桥梁,其核心流程可分为三个步骤:

  1. 时序参数定义:设置测试时钟周期、延迟等基础参数
  2. 测试信号声明:通过set_dft_signal明确各类测试信号属性
  3. 协议文件输出:使用write_test_protocol生成最终SPF文件

1.1 时序参数的基础配置

在开始定义测试信号前,必须正确设置时序基准参数。这些参数直接影响ATE机台的测试时序生成:

# 典型时序参数设置示例 set test_default_period 100 ;# 默认测试周期100ns(10MHz) set test_default_delay 0 ;# 输入信号相对时钟的延迟 set test_default_strobe 40 ;# 探测比对时间点 set test_default_strobe_width 0 ;# 探测窗口宽度

注意:test_default_strobe的40ns默认值基于100ns周期设定,若修改周期需等比调整该值。

1.2 set_dft_signal命令的深度解析

set_dft_signal是定义测试信号属性的核心命令,其参数配置直接影响最终测试协议的正确性:

set_dft_signal -view existing_dft \ -type ScanClock \ -timing {45 55} \ -port {clk1 clk2} \ -active_state 1

关键参数说明:

参数可选值作用
-typeScanClock/ScanEnable/Constant定义信号在测试中的行为类型
-timing{rise_time fall_time}指定信号边沿时间(ns)
-active_state0/1设置使能信号的有效电平

2. 信号类型声明中的典型陷阱

2.1 ScanClock配置的时序冲突

扫描时钟的-timing参数需要与test_default_period严格匹配。常见错误配置:

# 错误示例:上升沿+下降沿时间超过周期 set test_default_period 100 set_dft_signal -type ScanClock -timing {60 50} # 总和110>100

解决方案

  • 确保rise_time + fall_time < test_default_period
  • 典型工业实践保持20%的时间裕度

2.2 ScanEnable信号的活性状态混淆

ScanEnable的-active_state设置错误会导致整个扫描链无法正常工作:

# 危险配置:实际电路使用低电平使能但声明为高电平 set_dft_signal -type ScanEnable -port scan_en -active_state 1

提示:通过仿真波形验证scan_en的实际有效电平,确保与DFT声明一致。

2.3 Constant信号的隐藏风险

Constant类型信号用于固定测试模式下的端口状态,但过度使用会导致测试覆盖漏洞:

set_dft_signal -type Constant -active_state 0 -port {cfg1 cfg2}

最佳实践

  • 仅对真正需要固定的控制信号使用Constant类型
  • 每个Constant信号都应进行DFT覆盖率验证

3. write_test_protocol的输出优化技巧

3.1 协议文件的分段输出策略

现代ATE测试通常需要分模块处理测试协议,可通过-section参数实现:

write_test_protocol -format STIL \ -output ./output/chip_top.spf \ -section {test_setup mbist_algorithm}

推荐分段方式:

  1. test_setup:基础时钟和使能信号
  2. mbist_algorithm:存储器自测试算法
  3. scan_patterns:扫描链测试向量

3.2 协议验证的闭环流程

生成SPF文件后必须建立验证闭环:

[设计数据库] → write_test_protocol → [SPF文件] → read_test_protocol → [验证数据库]

验证脚本示例:

read_test_protocol -section test_setup ./output/chip_top.spf report_dft_signal -view existing_dft

4. 完整Tcl脚本模板与调试技巧

4.1 可复用脚本框架

# 初始化时序参数 set test_default_period 100 set test_default_strobe 40 # 声明时钟信号 set_dft_signal -view existing_dft \ -type ScanClock \ -timing {45 55} \ -port {sys_clk core_clk} # 声明扫描使能 set_dft_signal -view existing_dft \ -type ScanEnable \ -port scan_en \ -active_state 1 # 输出协议文件 write_test_protocol -format STIL \ -output ./output/design.spf \ -verbose

4.2 常见问题调试指南

问题现象:ATE测试时出现时钟冲突

  • 检查步骤:
    1. 确认-timing参数未超过周期限制
    2. 验证时钟端口是否被重复定义
    3. 检查ATE程序中的时序配置是否匹配

问题现象:扫描链移位失败

  • 检查步骤:
    1. 确认ScanEnable的-active_state设置正确
    2. 检查扫描链完整性报告
    3. 验证ATE的扫描使能信号同步时序

在28nm工艺项目的实践中,发现将test_default_strobe从默认40ns调整为35ns后,测试良率提升了2.3%。这个微调避免了ATE采样窗口与时钟边沿的临界竞争。

← 返回列表