一、扫描链插入的流程
1.背景回顾
为了可观测性、可测试性,DFT将D触发器替换成了带有MUX的DFF,如下图所示。

D端:常规数据输入端口;
S端:扫描链数据输入端口;
SE端:工作模式选择端;
CK端:时钟;
Q端:数据输出端;
通过将电路中的寄存器替换成扫描寄存器,可以有效检查出电路在制造过程中哪部分逻辑电路出现问题。如下图所示,通过将与门前后的三个寄存器替换成扫描寄存器,就可以检查与门功能是否正确。

实际电路中,组合逻辑中会插入很多时序逻辑触发器,那么我们可以将这些触发器都换成扫描触发器,就可以检查整个电路的逻辑功能是否正常。如下图所示。

2.扫描链插入流程(以Mentor公司的tessent为例)
1)初始化
- set_context dft -scan(指定功能,扫描链插入功能)
- read_verilog(读入网表)
- read_cell_library(读入库文件)
- analyze_control_sianals
2)测试配置
- set_scan_enable
- set_test_logic
3)规则检查
- set_system_mode_analysis(检查设计规则是否有问题)
4)扫描链插入
- analyze_scan_chains
- insert_test_logic
5)保存结果
- write_design
- write_atpg_setup
2.1 初始化
1)读入综合后的网表文件
2)读入DFT库文件:对cell进行建模

上图所示:常规的DFF网表文件

上图所示:带有DMUX的DFF网表文件,其中non_scan_model对应着的就是不带MUX的同类DFF
3)综合完成后,如果需要对综合后的网表文件进行扫描寄存器的替换,可以使用工具自动将普通寄存器替换成带扫描功能的寄存器;
也可以用命令强制替换:set_cell_model_mapping -new_model DFF -module ABC。
其中module ABC是替换范围的设置,对ABCmodule中寄存器替换,-instance ABC就是对instance名字的DFF中进行替换。
4)指定输入端口的初始化状态:add_input_constraints SEL -C1(指定下图中MUX的选择端为1)
指定所有可以改变寄存器状态的输入信号,比如,时钟,复位,置位。
工具自动识别信号:analyze_control_signals
手动指定:add_clock 0 CLK;#0 表示CLK inactive的状态

2.2 测试配置
1)一般可采用工具默认的配置,自动生成Ltest_en(测试使能),scan_en(扫描使能端)
对于复杂设计,就需要手动指定:
set_scan_enable/SCAN_ENABLE(指定扫描使能端为“SCAN_ENABLE”)
通过set_test_logic告诉工具可以自动修正clock/reset/set上的DRC违例,例如,set_test_logic -clock/reset/set on
2.3 规则检查(主要检查寄存器配置、扫描链配置、时钟复位置位等配置)
确保扫描操作可以正确执行
确保寄存器可控性
- set_system_mode_analysis & report_drc_rules
2.4 扫描链插入
- analyze_scan_chains:将扫描寄存器分配到扫描链上
扫描链配置:
- set_scan_mode
- set_scan_insertion_options
- create_scan_chain_family,三个命令都可以进行配置,具体配置options如下图所示

- insert_test_logic:插入指定数量、长度的扫描链,插入测试逻辑(受set_test_logic选项控制)。如下如所示,左图在第一个寄存器移位操作时,中间寄存器复位状态不定不可控,第三个寄存器时钟端又受到第二个寄存器影响分频电路,第二个寄存器在移位时第三个时钟不可控,通过insert和set这两个命令工具会自动修正上述问题。或门可以在测试使能时会屏蔽来自Q端的信号,第三个寄存器在测试时使用原本的时钟而不是来自Q端的数据。

2.5 保存结果
- insert_test_logic -write_in_tsdb on(默认将网表信息和配置信息保存到tsdb文件中,也可使用下面两个命令)
- write_design -output_file abc_scan.v(保存带扫描链信息的网表)
- write_atpg_setup abc(保存.defile&.testproc file,作为后续ATPG工作的输入)
二、扫描链插入的考量因素
1.时钟域
- 工具默认行为:不同时钟域,同一时钟域的不同时钟沿出发,被划分在不同的扫描链上。
- 同一时钟域的上升沿和下降沿可以串在同一条链上:下降沿寄存器在前,上升沿寄存器在后。
- 不同时钟域的寄存器可以串在同一条链上。
2.跨时钟域扫描链连接导致的时序违例问题
1)当扫描链上存在跨时钟域的连接,很有可能导致扫描移位的时序出现保持时间的违例。如下图所示,因为移位通常采用的慢速时钟,不会出现setup_violation,同时扫描寄存器之间又不会有组合逻辑,经常导致holdup_violation问题。

2)增加lockup latch来解决跨时钟域潜在的保持时间违例,如下图所示,增加低电平有效的Latch,使得数据延迟半个时钟周期到下一个寄存器,可有效解决holdup问题。

3.扫描链长度的考量
1)扫描链长度和扫描链条数的对应关系:
扫描链长度≈ 全芯片扫描单元bit数/扫描链的条数
2)以全芯片扫描单元bit数10K为例。

3)从减少测试时间的角度出发,希望增加扫描链的条数以减少扫描链的长度。(条数增加会导致扫描端口数增加,但是可以压缩技术解决)
4.扫描链长度均衡性的考量
1)测试向量从测试机台移位到测试芯片时,以芯片最长的扫描链长度为准。
2)为了减少测试时间,在插入扫描链时,尽量保证各扫描链长度的均衡性。

5.基于物理信息的扫描链链接
1)如果不考虑扫描寄存器的物理位置,扫描链的连接可能杂乱无章,容易引起后端绕线和时序问题。
2)后端工具的scan reordering功能优化力度较小,不能完全解决绕线和时钟问题。
3)在做扫描链连接时,通过后端传递回来的DEF文件,标定所有寄存器的物理位置,工具则可以就近串链,对后端时序比较友好。

三、测试时钟介绍
1.测试时钟的频率
1)对于移位操作以及DC测试的捕获操作,通常选择较低的时钟频率(~ 50Mhz),这类测试时钟一般由测试机台提供。
2)对于AC测试的捕获操作,通常选择和功能时钟频率相同的测试时钟,往往在片内产生。
问:什么是DC测试?什么是AC测试?

2.测试时钟的两个问题
由于搜啊秒寄存器只有一个时钟端,则到达寄存器的时钟必须同时具有功能和测试两种属性:
问题1:怎么将功能时钟和测试时钟融合?
问题2:怎么在片上产生AC测试时钟波形?
3.测试时钟的引入
为了解决这两个问题,需要在功能时钟上加入片上时钟控制器(On-Chip Clock Controller):
1)切换功能时钟和测试时钟;
2)为AC测试提供正确数量的功能时钟脉冲;
3)每个时钟域单独控制;

问:扫描信号指的是什么?用于OCC的捕获时钟获取,移入时钟向量到时钟链条状寄存器

上图所示,OCC内部电路模型

上图所示,片上时钟控制器(OCC)工作模式:功能模式

上图所示,片上时钟控制器(OCC)工作模式:扫描模式

片上时钟控制器(OCC)工作模式:AC捕获模式,在扫描模式下,将OCC扫描寄存器配置成某个状态,比如1100.
最终OCC产生的捕获时钟及电路配置如下图所示:

波形图如下:

四、实训