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

日记详情

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

保姆级教程:用Mentor DFT搞定Wrapped Core的Scan Insertion(附完整TCL脚本)

保姆级教程:用Mentor DFT搞定Wrapped Core的Scan Insertion(附完整TCL脚本)

数字IC设计实战:基于Mentor DFT的Wrapped Core扫描链插入全流程解析

在当今复杂SoC设计中,分层DFT(Design for Test)已成为提升测试效率的关键策略。作为数字IC工程师,掌握Wrapped Core的扫描链插入技术不仅能显著缩短项目周期,更能为芯片量产测试奠定坚实基础。本文将深入剖析使用Mentor DFT工具链完成Wrapped Core扫描插入的完整流程,从环境配置到最终网表生成,提供可直接复用的TCL脚本与实战技巧。

1. 环境准备与设计初始化

1.1 工具与库文件配置

开始扫描插入前,需确保环境配置完整。Mentor DFT工具链通常包含以下关键组件:

# 设置工具上下文为DFT扫描模式 set_context dft -scan # 指定TSDB输出目录(存储中间结果) set_tsdb_output_directory ../tsdb_outdir # 加载单元库文件 read_cell_library ../../../library/tessent/adk.tcelllib

常见问题排查

  • 若遇到库文件加载失败,检查路径是否包含空格或特殊字符
  • TSDB目录需提前创建并确保有写入权限
  • 推荐使用绝对路径避免相对路径引发的歧义

1.2 设计文件加载

设计文件加载阶段需要特别注意版本一致性:

# 读取综合后网表 read_verilog ../3.synthesis/processor_core_synthesized.vg # 加载前次操作保存的DFT信息(ICL/PDL/TCD) read_design processor_core -design_identifier rtl2 -icl_only # 设置当前设计层级 set_current_design processor_core

注意:read_design命令的-design_identifier参数必须与前次操作保持一致,否则会导致DFT信号定义丢失。

2. 时钟与约束定义

2.1 时钟网络配置

正确的时钟定义是扫描链插入的基础:

# 添加主时钟定义 add_clock clock1 -period 10 -waveform {0 5} add_clock clock2 -period 15 -waveform {0 7.5} # 报告时钟网络状态 report_clocks

时钟域处理策略

  • 同步时钟域:可合并扫描链
  • 异步时钟域:必须保持独立扫描链
  • 多时钟触发器:需特殊处理避免时序冲突

2.2 设计规则检查

执行DRC确保设计满足扫描插入基本要求:

# 检查DFT信号定义 report_dft_signals # 运行设计规则检查 check_design_rules -all

典型DRC错误包括:

  • 未约束的异步复位端口
  • 组合逻辑反馈环路
  • 缺少测试使能信号

3. Wrapped Core专用配置

3.1 包装单元分析

Wrapped Core的特殊性在于需要明确定义包装单元:

# 排除EDT通道端口 set_wrapper_chains -exclude [get_ports {*_edt_channel_*}] # 设置专用包装单元选项(如复位端口) set_dedicated_wrapper_cell_options on -ports reset_n # 执行包装单元分析 analyze_wrapper_cells report_wrapper_cells -verbose

包装单元类型对比:

类型特点适用场景
专用包装单元新增逻辑单元高扇出控制信号
共享包装单元复用功能触发器面积敏感设计
隔离包装单元电源域隔离多电压域设计

3.2 扫描模式定义

根据EDT配置定义不同的扫描模式:

# 获取EDT实例句柄 set edt_instance [get_instances -of_icl_instances \ [get_icl_instances -filter tessent_instrument_type==mentor::edt]] # 内部模式(使用EDT压缩) add_scan_mode int_mode -type internal \ -single_clock_domain_chains off \ -single_clock_edge_chains off \ -edt_instances $edt_instance # 外部模式(直接扫描链) add_scan_mode ext_mode -type external -chain_count 2

模式选择原则

  • 内部模式:用于核心级测试,利用EDT提高测试效率
  • 外部模式:用于芯片级集成,保持链结构简单

4. 扫描链插入与验证

4.1 扫描链分析

在执行插入前进行链结构分析:

# 分析扫描链配置 analyze_scan_chains # 生成扫描链报告 report_scan_chains -format detailed

关键指标检查:

  • 链平衡度(长度差异<10%)
  • 跨时钟域处理
  • 包装单元覆盖率

4.2 测试逻辑插入

最终执行扫描链插入:

# 插入测试逻辑 insert_test_logic # 保存缝合后网表 write_verilog -mode gate -output ../4.dft/processor_core_scan_inserted.v # 生成ATPG准备文件 write_test_procedures -format stil -output ../4.dft/scan_procedures.stil

插入后验证步骤

  1. 网表功能仿真
  2. 时序验证(建立/保持时间)
  3. 测试覆盖率分析

5. 高级应用技巧

5.1 多电压域处理

对于含UPF/CPF的低功耗设计:

# 读取电源约束文件 read_upf ../2.rtl/power.upf # 调整包装单元放置策略 set_dedicated_wrapper_cell_options \ -isolation_output \ -level_shifter_input \ -level_shifter_output

电源域敏感信号处理优先级:

  1. 隔离单元控制信号
  2. 电平移位器使能
  3. 普通功能信号

5.2 分层集成策略

父级集成Wrapped Core的关键命令:

# 打开子核TSDB数据库 open_tsdb ../../corea/tsdb_outdir open_tsdb ../../coreb/tsdb_outdir # 设置子核扫描模式 set_attribute_value {core1_inst} \ -name active_child_scan_mode \ -value ext_multi_mode # 芯片级扫描插入 insert_test_logic -hierarchical

实际项目中遇到最棘手的问题是不同版本工具生成的TSDB数据库兼容性问题。建议团队统一工具版本,并在项目启动时冻结DFT工具链。

← 返回列表