dft scan shift capure基础简单介绍。

因为我不是主职做dft 的,学习dft的目的是为了更好的syn 综合和 pr ,另外解释一些pr 和 syn sta 当中可能遇到的与dft相关的问题从而融会贯通。 理解比较浅显。 这里说下我的理解。

上图

画的有点丑,能讲明白问题就行。

这是,一个简单的数字电路 标准单元连接的基本结构。这太熟悉了。

sequential cell 测试。
1 scan mode 切换scan 模式, SI (PPI) 灌入 test pattern sequence。
2 打四拍 test pattern 会从SO 输出PP0 比较PPI PPO 就知道register 链的好坏

combinational 测试
1 切换scan mode PPI 灌入 test pattern sequence。 打两拍数据被写入A B register。 等待运算
2 给PI force 定值, 同时 scan mode 切换 fun mode (蓝色路径) 这时候A B register 的数据就会和PI 的值运算, 从 PO get 值比较
3. scan mode 切换 scan 模式, 从SO 把A B 和 PI 计算的 结果序列从SO shift 出来进行比较。 同时新的test pattern sequence 从PPI 灌入。

OK 这就是DFT 对标准单元的测试方法。

结合到 syn 步骤中 compile_ultra -scan 就是把普通register替换成带SI 的寄存器。 因为之后dft 也会换。 在syn做这一步是为了对register的timing 运算更准确。(否则你用普通reg换dft再换成带scan pin的reg timing就变了所以提前换好)

结合到pr过程中,有scan chan reorder的步骤。 就容易理解了。 dft做完会对可以进行顺序变换的regiser 出scan chain def (scan chain def 可不是所有的scan chan cell) 然后 pr place 会根据function 逻辑链的timing 进行摆放。 结合我前面的那个图就能理解 。 dft是根据电路struct 进行测试的。也就是在某些逻辑中, 图中的绿色路径事实上可以变化链接。而不影响dft测试, 这些逻辑被记录在scan def 中。 place func 逻辑优先确立了拜访后。 发现此时的dft逻辑链如果绕线非常难而无需, 就会根据scan def 对dft 逻辑链做一个重新的逻辑链接。 来保证不改变dft 测试结构还能保证功能。 还能让绕线好绕的一个过程。 这就是place 最后的scan chain reorder 步骤

然后再来说一个问题,我pr的时候一般先看function timing 所以我会把dft 的timing path 关掉。会做这三个步骤。

1 set_false_path -to [get_pins */SI -hier] (这很好理解,不分析dft shift 数据输入么)

2 set_false_path -to [get_pins *lockup_latch/D -hier]

上图

就是我原来不明白dft 为啥会有looklatch 这种cell , 因为scan 过程中默认scan clock 都是waveform {0 x} 这种就是先是上升沿。

所以当dft链里面存在 neg-> pos pos → neg 就会出现一些问题

neg-> pos 上升沿到来 后面reg发射数据,前一个不动,下降沿到来,前一个reg launch 后面reg 不动, 完美

pos → neg 上升沿到来 后面reg不动, 前面reg launch 坏了后面reg数据被冲掉了 出错

怎么解呢在 红色箭头地方插入latch lockup_latch 来解,不光这种问题还有 链中同频不同相位的异步两个 reg之间串链也要加入 lockup_latch.

另外在pr时候会对一些dft测试的锚点的cell 设置 dont _touch 这也是必不可少的。(否则影响dft)

(这里的dft链是mentor 工具做的,S 家的名字不一样)
这些cell 虽然不能删但是可以换大小来修timing可以这样干
foreach_in_collection cell [get_cells -hierarchical -filter “full_name =~ tessent_persistent_cell && is_hierarchical == false”] {
dbSet [dbget -p top.insts.name [get_object_name $cell]].dontTouch sizeOK
}

多思考,多看就会多领悟,与看到这些,同样有缘的你共勉。

1 个赞

图中画的是相同时钟下的,一个链在结束时,会插入与其前一个时钟沿相反的latch,而不是在neg reg 和pos reg之间插入吧?

就是穿scan chain时候如果需要把positive edge trigger reg和negative edge trigger reg穿一起中间需要垫lockup latch