文章目录
引言
就目前而言关于DFT的讨论非常少,本博主希望能在DFT的前进道路上,根据DFT ug写一些博文,一方面是对DFT ug的翻译和理解,一方面是对DFT的流程、知识的日积月累。如果有错误理解的地方,请留言指正!版权所有,请勿转载!!!,如需转载请联系我
1、 setting timing variable设置时序参数
在使用create_test_protocol命令之前,也就是说在创建测试协议之前,你需要定义时间变量,主要使用以下的命令来设置:
test_default_period
test_default_delay
test_default_bidir_delay
test_default_strobe
test_default_strobe_width
test_default_period
test_default_period指定了测试的时钟周期,需要寻求半导体测试厂商,具体的ATE测试周期是多少,默认情况下DFTC使用10M(100ns)的测试时钟周期。你可以在默认的.synopsys_dc.setup file中查看到此默认设置。
test_default_delay
默认情况下DC(DFTC)会把数据到达所有非时钟的输入端口都设置为0 ns,在launch clk后,如果你有不同的输入时序要求,你可以询问半导体制造商。
test_default_bidir_delay
定义双向端口的时序,
set test_default_strobe
这个命令花了我不少时间来理解,指的是设置开始探测比对的时间点,这里探测比对指的的measure po的探测比对,试想一下,如果机台开始探测比对,此时数据还不稳定,必然造成机台的measure po的误读。因此这里涉及两种strobe的方式,一种是strobe_before_clock和strobe_after_clock。前面strobe_before_clock是什么意思呢?举个例子,指的是measure po要在capture时钟之前完成,换句话说,就是ATE设备进行measure要在capture时钟之前完成。而strobe_after_clock则是要在capture时钟之后完成。但现在都用的第一种居多。(实际可不仅仅指的是capture时钟,而是所有是时钟)
那么set test_default_strobe和set test_default_strobe_width就可以指定ATE设备要进行measure PO的对比值的时间点,默认是40ns,以及对比值花的时间长度,默认是0ns。下图说得非常清晰:
经过之后与同事的讨论后,终于折腾一天的这条命令搞明白了,所谓在时钟前还是时钟后,不仅仅是caputure时钟,而是所有时钟,capture时钟倒很好理解,主要是为了测试这个measure PO的过程。但是在后面的shifout阶段,也是在探测的过程,根据strobe before clk的方式,也就是说,先探测,直接测一条scan中最后一个reg/Q端口链接的外部, 然后再shift一次,然后再测。
test_default_strobe_width
这个就非常好理解了,也就是说探测的时间宽度,在我ATE进行探测对比的结果的这段时间范围内,你的值至少要稳定的这么一个时间长度,默认是0
以上setting timing通常使用默认设置。在根目录下面的.synopsys_dc.setup可以看到。
参考P97、p583
2、set_dft_signal
为创建测试协议声明信号,该命令用于为DRC和DFT insertion 指定信号
这里先介绍一些常见的参数,如果以后用到更进一步的,在进行补充说明:
set_dft_signal -view existing_dft -type ScanClock -timing {45 55} -port {pclk sdr_clk sys_clk}
-view 后面可以选择加existing_dft或者是spec
existing_dft就是已经完成了DFT insertion,spec指的就是还没有完成DFT insertion
-type指的是信号的类型,DFTC认可的类型是有规定的,具体的类型,建议自己查看syn2。上述命令中的ScanClock就是规定的类型之一。上述命令中的ScanClock指的就是在scan FF中负责scan shift和capture的scan时钟。此外这里再补充一下Constant类型,指的是让某个port固定在一个值的这种常量类型。
-timing指的就是这个时钟的上升沿时间和下降沿时间,[list 45 55]或者表示为{45 55} 代表上升沿是45ns 下降沿是55ns,当然scan时钟默认的周期是100ns。这个在.sysnopsys_dc.setup里面可以看到。
-port指的是这些设计需求用于哪一个port上面。上面是以列表形式,用于了三个scan_clk。
{ }或者你写成[list A B C]这种形式,这里只是提醒一下tcl的列表写法。
set_dft_signal -view existing_dft -port scan_en -type ScanEnable -active_state 1
#set_dft_signal -view existing_dft -type Constant -active_state 1 -port test_mode
set_dft_signal -view existing_dft -type Constant -active_state 0 -port conf_ena
-active_state指定某些信号类型的激活状态,这里DFTC认可的这些信号类型指的是如下信号:ScanEnable、Reset、Constant、TestMode、pll_reset、pll_bypass
3、 read_test_protocol与write_test_protocol
read_test_protocol
读取STIL的测试协议文件到memory中。read_test_protocol命令允许您通过读取描述协议的文本文件来定义设计的任意测试协议。使用write_test_protocol以相同的文本格式写出设计的现有协议。
read_test_protocol -section test_setup ./scripts/test_setup.spf -verbose
这里介绍两个参数:
-verbose当设置正确的话,列出详细的输出
-section指定这个协议的名字。test_setup才是有效的名字。
按照我的理解,test_setup指的是这个模块,后面是具体的路径。
在pre_DFT DRC之前,这个来自STIL测试协议的test_setup 的section被读取,并且代替了DFTC默认的测试协议,提供的test_setup section必须包含预先由set_dft_signal指定的时钟信号、复位信号、常量信号等等。
write_test_protocol
该命令是将STIL测试文件从memory内存中读出来到硬盘里面。使用了-output选项可以自定义输出的名字.spf,否则的话,就是current_design_name.spf
推荐文章:
https://www.baidu.com/link?url=UB6Iy3JuwwtdgE4hiYweVpdoK94C_ZcnaQAi_ao76rv-E21V-JujxlDdhtXcjB1dVSt8R5ACmzePjEXpL2SUUgEyQgqeilcvnxK0oMGKpcS&wd=&eqid=8be4434d002c154e000000045fa8a006
http://m.doc88.com/p-730755900793.html