基于Spyglass的DFT检查
📑 目录
- 1. 
- 2. 
- 3. 
- 4. 
- 5. 
- 6. 
- 7. 
- 8. 
- 9. 
- 10. 
- 11. 
- 12. 
- 13. 
基于Spyglass的DFT检查
作者: Philippe Debaud (STMicroelectronics, Grenoble, France)
会议: SNUG 2016
页数: 13
源文件: SNUG_TPC_Spyglass_Debaud_Spyglass_based_DFT_checks_Philippe_Debaud_STMicroelectronics_Grenoble_paper.pdf
Page 1
基于Spyglass的DFT检查
Philippe Debaud
STMicroelectronics Grenoble, France
Philippe.debaud@st.com
摘要
如今,SoC 系统级芯片通常需要生成数百个内部时钟,频率高达GHz级别或更高。在这些频率下,要保持测试质量需要使用时钟整形器(也称为片上时钟控制器 OCC),以便在内部生成跳变故障测试所需的脉冲。随着工艺尺寸的缩小,电路性能对后端变得极其敏感。实现高效实现的一种可能方案是使用基于物理分区的设计方法。该流程对DFT 可测试性设计提出了额外的约束,并要求在门级插入OCC以获得优化的时钟树 Clock Tree。因此,OCC在扫描插入过程中被插入,这将需要进行特定的检查。我们在本文中展示的结果证明了SpyGlass在处理OCC插入问题方面具有卓越的能力。
Page 2
目录
1. 引言 2. 设计 2.1 概述 2.2 OCC 2.3 OCC位置 2.4 插入流程 3. 使用Spyglass进行级联OCC检测 3.1 Spyglass设置 3.2 用于级联OCC检测的Spyglass规则 3.3 级联OCC检测的Spyglass结果 4. 使用Spyglass进行缺失OCC检测 4.1 Spyglass设置 4.2 用于缺失OCC检测的Spyglass规则 5. 结论 6. 参考文献
图表目录
图1:STiH337的物理视图 图2:使用的OCC 图3:OCC插入前的时钟树结构 图4:OCC插入后的时钟树 图5:由于OCC1错误放置导致的级联OCC 图6:缺失OCC 图7:DFT插入步骤与使用Spyglass的交互 图8:级联OCC示例 图9:Spyglass级联OCC报告视图 图10:缺失OCC检测 图11:Spyglass缺失OCC报告视图 图12:Spyglass缺失OCC报告分析 图13:时钟原理图
Page 3
1. 引言
我们开发的芯片面向机顶盒消费市场,这要求我们遵守包括结构灵活性、测试质量和测试成本(高产量)在内的多种约束。随着复杂度和频率的提高,以可接受的成本保持测试质量是DFT 可测试性设计面临的最大挑战之一,使用内部时钟整形器是必然的选择。由于我们的后端流程采用基于物理分区的方法,这对DFT提出了额外的约束,并要求在门级插入片上时钟控制器 OCC以获得优化的时钟树。这种方法的主要优势在于OCC插入的灵活性,使我们能够在同一次运行中完成OCC和扫描插入。当然,这种方法也带来了验证挑战,我们借助SpyGlass来解决这些挑战。虽然Spyglass可以处理广泛的DFT问题,但我们在这里选择聚焦于OCC检查。本文末尾的讨论将探讨该策略的可能扩展方向。
2. 设计
2.1 概述
试验在STiH337SoC 系统级芯片上进行,该芯片面向卫星机顶盒平台,采用基于ARM应用处理器和GPU的架构。这款40 mm²的电路采用CMOS 28FDSOI设计,集成了功耗岛,包括:
- 双核ARM Cortex-A9,最高运行频率1.2 GHz - DDR3/3L 16-bit - HDMI-TX, USB 2.0 和 3.0 - 四个视频DAC,支持SD CVBS模拟电视 - ...
下图展示了该组件的物理结构。
Page 4
2.2 OCC
ST使用与Synopsys结构[1]兼容的专有OCC。这些OCC实现了一些特定功能,以便于时序收敛 Timing Closure或低功耗方面。此处未展示特定的IO,它们可能会根据最终应用出现。这些修改对本文中描述的流程完全没有影响。
2.3 OCC位置
整个芯片被划分为物理块,如图3所示。由于OCC不是在RTL 寄存器传输级层次插入的,因此必须特别注意。事实上,根据分支的不同,可能会出现多种情况,OCC需要相应地插入或不插入。
Page 5
下图展示了OCC插入点。正如我们所见,根据需要黑盒结构的不同,需要五到六个OCC。
在图5中,一号OCC应移动到灰色所示的位置。在图6中,二号OCC应放置在图中标示的位置。
这种"即时"OCC插入引出了一个问题:如何高效地验证OCC已正确插入,没有出现图5所示的级联OCC或图6所示的缺失OCC。实际上,在RTL级别进行插入允许在早期设计阶段进行验证和调试,但这里无法做到这一点。因此,我们必须找到另一种解决方案,允许进行快速高效的检查。Spyglass已被证明是实现这一目标的完美工具。
Page 6
2.4 插入流程
下图展示了DFT插入过程的概览。我们从DFT前的门级网表开始,根据规格插入OCC。然后并行启动DFT DRC和Spyglass检查,重点关注级联OCC和缺失OCC。
在顶层,Spyglass检查允许确保当所有物理块连接在一起时OCC已正确插入。如果没有,我们必须返回OCC插入步骤。
Page 7
3. 使用Spyglass进行级联OCC检测
为了提高效率,尽早发现错误非常重要。级联OCC检测可以通过多种方式进行,例如:
1. 使用测试平台进行仿真。我们必须确保物理块已正确设置,并检查所有已插入OCC的输入端都有自由运行的时钟。 2. ATPG 自动测试向量生成运行。同样,我们必须确保物理块已正确设置以通过DRC 设计规则检查,并检查我们能否生成具有适当覆盖率的测试向量。 3. 形式检查。检查是否存在连接OCC输出到OCC输入的路径。
由于设置过程可能很繁琐,并且可能需要的调试时间与我们的计划要求不相符,我们选择了使用第三种方案。
3.1 Spyglass设置
由于计划进度是我们的主要关注点之一,我们首先关注的是工具设置以及获得工作环境的复杂程度。事实证明,这非常简单,如下例所示:
#Define the project
new_project my_trial.prj -force
#Define and read Libraries (.lib)
set lib_files [list \
/libs/.../CORELIB.lib \
etc .. \
]
read_file -type gateslib $lib_files
#Define design source (.v)
set rtl_files [list \
/prj/.../my_netlist.v \
]
read_file -type verilog $rtl_files
#Define TOP and compile
set_option top "my_top"
compile_design
#Define spyglass rules to be used
current_methodology $SPYGLASS_HOME/GuideWare2.0/soc/netlist_handoff/
current_goal dft/dft_block_check
通过这个简短的设置,我们就可以定义要应用的规则,以检查级联OCC。
Page 8
3.2 用于级联OCC检测的Spyglass规则
如前所述,我们希望避免设计中出现级联OCC,因为这会阻止ATPG 自动测试向量生成工具生成跳变故障向量。如下图所示,第一个OCC从自由运行时钟生成所需的双脉冲,此时test_se(也称为扫描使能信号)变为低电平。第二个OCC仅从OCC1接收到一个双脉冲,无法在其clk_out输出端生成任何时钟。
因此,上图中红色所示的连接必须被视为禁止连接,这可以使用illegal_path命令转换为Spyglass规则。由于我们设计中所有OCC名称都包含子字符串"_OCC_4b_",所需的规则可以写为:
illegal_path -from "*_OCC_4b_*::clk_out" -to "*_OCC_4b_*::*"
3.3 级联OCC检测的Spyglass结果
完成第3.2节描述的设置后,使用以下脚本进行检测:
#Define Cascaded OCC rule and check
illegal_path -from "*_OCC_4b_*::clk_out" -to "*_OCC_4b_*::*"
run_goal
write_report moresimple
在我们拥有100万个触发器的物理块上运行20分钟后,Spyglass窗口显示了我们在设计中故意留下的错误。
Page 9
4. 使用Spyglass进行缺失OCC检测
缺失OCC检测是一个相当困难的话题。在包含数百个时钟的大型SoC 系统级芯片上,可能需要巨大的工作量才能完成这项任务。方法可以基于:
1. DFT-DRC使用。我们必须确保物理块已正确设置以通过DRC。手动检查结果可以突出显示由于缺失OCC而未被扫描的触发器。然而,时钟直接由主输入驱动的触发器将不会被突出显示。 2. ATPG运行。同样,我们必须确保物理块已正确设置以通过DRC,并检查我们能否生成具有适当覆盖率的测试向量。 3. 形式检查。检查所有触发器是否都有一条从OCC输出连接到其时钟输入的路径。
我们选择了第三种方案,因为它能确保最佳的覆盖率,并使我们避免了在扫描插入关键阶段进行设置开发和调试。
4.1 Spyglass设置
Spyglass设置与第3.1节中描述的完全相同。
Page 10
4.2 用于缺失OCC检测的Spyglass规则
目标是确保设计中所有触发器都有一个OCC,以便在生产过程中以符合质量需求的覆盖率进行at-speed测试。因此,下面红色所示的连接必须被视为强制连接,这可以使用required_path命令转换为Spyglass规则。
由于我们设计中所有OCC名称都包含子字符串"_OCC_4b_",所需的规则可以写为:
require_path -from_one_of "*_OCC_4b_*::clk_out" -to_type FLIP_FLOP_CLOCK
该检查将对设计中所有具有FLIP_FLOP_CLOCK属性的引脚进行,这正是我们所需的,因为检查将在扫描插入之前完成。
值得注意的是,对于扫描插入后的检查,该规则需要翻译为:
require_path -from_one_of "*_OCC_4b_*::clk_out" -to_type SCAN_FLIP_FLOP_CLOCK
在我们拥有100万个触发器的物理块上运行约6小时后,Spyglass窗口显示了在设计中发现可能的错误。生成的列表包含所有时钟树中没有任何OCC的触发器,如下图所示。
Page 11
可以使用Spyglass的增量原理图功能进行图形化分析,使我们能够快速探索连接关系。
经过几秒钟的调查,可以看出报告的错误是真实存在的,如下图所示。
Page 12
在这个例子中,时钟来自一个主输入,显然这里遗漏了OCC。总体而言,经过快速审查,交互式GUI使我们了解到许多错误与那些我们不打算插入OCC的触发器有关,例如专用于测试的寄存器、内部OCC寄存器或扫描链流水线寄存器。为了清理报告,可以在require_path命令中使用-except_to选项。以下是一个示例:
require_path -from_one_of "*OCC_4b_*::clk_out" -to_type FLIP_FLOP_CLOCK \
-except_to {{*PipeTail*::*} {*OCC*::*} {*_tcr_*::*}}
5. 结论
我们采用基于物理分区的方法,提供了优化的实现,但对DFT 可测试性设计提出了额外的约束,特别是在时钟验证方面。虽然Spyglass可以处理广泛的DFT问题,但我们选择在这里聚焦于OCC插入检查。在我们的特定案例中,DFT控制假定是正确的,并使用基于仿真的传统方法进行覆盖。DFT团队在此次试验中首次使用了Spyglass。设置在几个小时内完成,第一天内就获得了首批结果。这里的主要优势在于能够进行检查而不必关心芯片设置,后者总是需要一些调整和调试时间,尤其是在门级仿真中。此外,这种方法避免了脚本编写和过滤开发,这些总是容易出错的。相反,这里进行的静态检查并不妨碍我们进行仿真和测试向量生成。它使我们能够通过在出现问题时缩短迭代循环来提高可预测性,并简化调试。
Page 13
6. 参考文献
[1] Solvnet: "Specifying OCC Controllers", https://solvnet.synopsys.com/dow_retrieve/L-2016.03/dftug/dftug13_Specifying_OCC_Controllers.html
[2] Solvnet: "TetraMAX ATPG User Guide", https://solvnet.synopsys.com/dow_retrieve/L-2016.03/tmolh/Content/tmax_ug/ni/tmax_ug.pdf
图片索引
本文共 17 张图片,存放于 SNUG_TPC_Spyglass_Debaud_Spyglass_based_DFT_checks_Philippe_Debaud_STMicroelectronics_Grenoble_paper_images/ 目录。