2010-10-12

[ZT]DFTC使用及原理——培训后总结请高手指正

DFTC是干什么的呢?他是Synopsys套件中负责IC后端design-for-test的compiler。其主要功能是根据用户的配置,创建一个平衡高效的扫描链,并报告各个阶段的测试覆盖率和相应的DFT DRC violation。
一个典型的DFTC过程包括七个过程:
1. read design:读入RTL设计
2. create test protocol:指?lk/rst/scan_en/test_mode等然后检查testability并尽量修正violation。
3. compile and save:利用compile -scan 插入scan寄存器(添加MUX)
4. read gate and protocol:读入综合后网表后再检查testability并尽量修正violation
5. preview DFT:设置并预览不同的scan chain方案选择最优(test vol/time都小者)
6. insert DFT:最终插入扫描链并检查testability及修正violation
7. handoff:保存结果。可以为tetramax所用产生测试向量。

关于protocol,需要详细说明。为了让DFTC能正确测试testability,需要事先告知其一些配置信息。比如哪个clock要作为扫描用clock,软件根据这个信息去遍历所有寄存器,看看有哪些寄存器不受该clock控制,则相应的会有若干逻辑无法通过寄存器输出,即无法测试,从而产生violation。再比如存在gated clock的情况下,外部时钟无法直接控制寄存器,此时在protocol中test mode就要置1,这样clock才会通过MUX直接控制寄存器。凡此种种,为了让DFTC明白我们的意图,就要把这些情况在protocol中进行说明。那么如何确认DFTC已经正确理解我们的protocol输入呢?report_dft_signal命令可以达到这个目的,他会显示出各个控制信号及其时序特性(如果有),我们可以据此对照我们的意图来进行确认。
如果产生了violation,一般可以通过design vision的图形界面来定位问题所在并实施措施。主要的方法有两类:一是从RTL上直接修改,和时序不满足时采取的措施一样,这是最可靠的;而是采用auto fix命令,由工具自动修正,此法虽好,但是一旦源代码修改就可能要重新auto fix,达不到RTL修改所具有的一劳永逸的效果。
在插入扫描链之前,先要评估各种可能的方案,这个工作由preview dft 来完成。我们可以指定扫描链数目,方法是:-chian_count N。另外,为了平衡扫描链(即使得各个扫描链长度接近,这样测试速度可以提高)一般需要扫描链穿越多个时钟域,方法:-clock_mixing mix_clock。
在扫描链穿越多个时钟域时,会碰到另外一个问题:由于要采用同一扫描时钟驱动不同的时钟域,各个时钟域的skew不同,在跨越时极可能产生亚稳态造成误操作。为此在两个时钟域中间插入一个lockup latch来解决该问题。该latch由前一时钟的clock使能,在下降沿放行,上升沿保持,因此只要skew小于1/2时钟,即第二个时钟能在1/2个时钟延迟之前进行抽样就可以保证逻辑无误,这在绝大多数电路中是可靠的。
以上是参加培训后的简单理解。虽然工作多年,但是专注于FPGA实现,因此对ASIC后端的工作不太熟悉,请大家批评指正并补充,争取能对DFTC有个全面正确的理解。

本文地址:http://114er.blogspot.com/2010/10/ztdftc.html
原创文章如转载,请注明链接: 转自Welcome Funny Guys

0 评论: