定制片上时钟控制器与扫描压缩插入的全层次化At-Speed测试流程
📑 目录
- 1. 
- 2. 
- 3. 
- 4. 
- 5. 
- 6. 
- 7. 
- 8. 
- 9. 
- 10. 
- 11. 
- 12. 
- 13. 
- 14. 
定制片上时钟控制器与扫描压缩插入的全层次化At-Speed测试流程
作者: Franco Cesari, Paolo Giovacchini (STMicroelectronics), Salvatore Talluto, Alfredo Conte (Synopsys)
会议: SNUG Europe 2008
页数: 16
源文件: SNUG_2008_Europe_Cesari_cesari_paper2008_paper.pdf
Page 1
定制片上时钟控制器与扫描压缩插入的全层次化At-Speed测试流程
Franco Cesari (DFT Design Engineer*), Paolo Giovacchini (Digital Design Engineer*), Salvatore Talluto (Test Specialist Staff Application Consultant**), Alfredo Conte (Senior Application Consultant**)
* STMicroelectronics CPG-DSD Division ** Synopsys
摘要
我们开发了一个定制流程,能够识别数字设计中嵌套的任意数量的定制片上时钟控制器 OCC,并在更高层次级别上集成扫描压缩器。该流程使用包含定制OCC信息的子设计的Test Model (CTL 核心测试语言)描述。此类流程此前已使用Synopsys专有版OCC成功尝试过;现已适配为在RTL 寄存器传输级层面识别现有OCC(针对我们的设计进行了定制),并强制生成适用于层次化扫描压缩综合的正确CTL,采用Synopsys在最新版本(2007.12-x)中引入的新特性。该工作最终通过测试向量仿真完成。
Page 2
目录
1.0 引言 2.0 层次化流程改进 3.0 OCC映射图 4.0 流程步骤 5.0 测试向量仿真 6.0 结论 7.0 附录与知识要求
图表目录
图1 OCC定制原理图 表1 输入输出逻辑值 图2 OCC映射图 图3 时钟门控单元 图4 扫描压缩器 图5 波形图 图6 SNUG Logo
Page 3
1.0 引言
如摘要部分所述,我们采用了与之前在SNUG2007[1]上发表的论文不同的方法。在之前的流程[1]中,每个OCC在门级网表中插入;而在当前流程中,我们在RTL 寄存器传输级层面实例化它们。我们已在IP的顶层层次将OCC和所有扫描链与扫描压缩器集成。通过使用Synopsys DFT工具从2007.12-SPx版本开始提供的最新功能,可以通过Testmodel (CTL 核心测试语言)中描述OCC控制器结构的新"PLLStructures"部分,执行层次化OCC控制器插入。Synopsys DFT工具有能力自动将SPF和CTL适配到定制OCC规格,以便TetraMAX ATPG工具能够正确生成测试向量。
本文将向您介绍相对于之前工作[1]的流程改进。OCC映射图段落将展示每个OCC和时钟门控单元在数字时钟树中的当前位置。在RTL级别手动实例化的时钟门控单元将就OCC管理进行详细讨论。定制OCC的工作方式与Synopsys版OCC不同,因此我们需要进行少量手动修改以使TetraMAX通过设计规则检查。其他问题已通过变通方案解决,并已提交给Synopsys研发部门以更好地支持SPF和CTL的自动生成。
2.0 层次化流程改进
定制OCC尽管工作方式不同,但需要遵守与Synopsys版本相同的规则。
2.1 定制版与Synopsys版OCC的区别
定制OCC(逻辑方案如图1所示)使用第二时钟"refclk"来同步扫描使能信号,当"no_ref_sync_i"信号设为零时。该时钟的相位和频率也可由自动测试设备 ATE从顶层控制。当两个不同时钟域需要共享一个公共信号时需要此同步以避免亚稳态 Metastability问题:本例中"pll_clk_i"信号(来自图1中"模拟前端模块"的信号时钟)驱动定制OCC内部正确时钟门控单元使能的触发器脉冲,以及"ref_clk_i"信号。当no_ref_sync_i保持为零时,存在两个具有公共路径的时钟域。这是为了允许OCC在至少一个外部ref_clk_i时钟脉冲之后开始生成at-speed脉冲。在实际实现中,我们引入了多个触发器,在MUX之前对test_se_i进行采样,以避免由于与不可预测的内部时钟(如pll_clk)边沿对齐而产生的亚稳态问题。
Page 4
这是一种安全机制,用于解决扫描使能信号缓慢上升/下降切换的问题,否则您将看到at-speed脉冲在扫描使能变为零时难以开始。"shift_clk_i"在图1中被"时钟链"用作时钟。时钟链由每个OCC的三个触发器组成,称为ccb[2:0]。这些触发器使能为每个OCC传播at-speed脉冲。时钟链在RTL级别构建,由ATE通过"test_scan_in"端口加载信息位。我们将在"流程步骤"段落中描述时钟链加载规则,采用DFT Compiler工具命令,在捕获阶段将来自模拟锁相环 PLL或数字分频器时钟的at-speed脉冲通过OCC传播到每个OCC的"int_clk_o"端口。"int_clk_o"信号被视为时钟树数字时钟域的根。"Ate clock"连接到最后的MUX引脚,可由每个OCC的配置输入引脚选择。信号配置如表1所示。
另一个重要区别在于"时钟链连接":时钟链从顶层层次获取时钟信号;而Synopsys版OCC则从最后一个OCC MUX的输出端口"int_clk_o"获取时钟。Synopsys版本有一个额外的安全机制:每个OCC的时钟输出用于在扫描使能设为1时移位时钟链(图1中的ccb位触发器)。当扫描使能切换到零时,OCC在捕获过程的第一阶段不传播任何时钟(给扫描使能的缓慢上升步骤留出时间),并允许时钟链维持在移位过程中加载的值。Synopsys OCC版本仅使用一个来自ATE的时钟来完成相同的工作,而定制OCC可以使用3个不同的时钟信号来管理扫描过程。定制OCC可以为时钟树综合流程提供不同的方法。我们可以将3个时钟信号"shift_clk_i、ref_clk_i和ate_clk_i"在顶层与仅一个数字时钟拼接,内部解决时钟树平衡,满足延迟约束;或者我们可以将正确的时钟设置交给ATE处理,保持顶层时钟分离。后端综合流程可以通过这种方式减少用于时钟沿对齐的缓冲器实例化数量。
Page 5
(RTL代码是STMicroelectronics DSD-CPG的专有版本,由Savita Banerjee及其团队开发[2]。该电路在集成芯片内正常工作。)
Page 6
表1 — 定制版与Synopsys版OCC之间的逻辑差异
(表格展示了scan_mode_i、test_se_i、pll_bypass等输入信号与int_clk_o输出之间的逻辑关系。Ccb为控制链位。黑色正常字体对应定制OCC输出,红色斜体字对应Synopsys兼容OCC输出信号。*参见步骤1了解Ccb位加载规则。)
无需"Reset"信号:定制OCC通过加载正确的向量来初始化所有触发器,而不需要在开始扫描链测试之前将它们复位。在"test_setup"字段中的初始信号设置(pll_bypass_i, scan_mode_i和test_se_i)确保不会传播任何不需要的快速时钟脉冲。在步骤2中,我们将展示如何使用DFT Compiler自动编写的"spf"文件,通过变通方案通过TetraMAX DRC。
2.2 流程改进
新的DFT Compiler特性允许我们使用包含OCC信息的子模块CTL 核心测试语言进行层次化扫描集成,以生成"spf"文件(测试协议)。与之前的论文[1]一样,OCC可以已经放置在任何层次级别,但在旧版DFT Compiler中,您必须手动编辑CTL中的OCC信息;现在您可以使用包含OCC的子模块CTL信息,自动生成"spf"。数字时钟树块生成器数字部分的数字分频器没有像模拟PLL那样的初始化阶段。我们需要在"test setup"过程中添加脉冲(如我们在SNUG 2007发表的先前论文中所做的那样),以便每个数字分频器从已知状态启动。之后,我们可以将数字分频器的输出视为自由运行时钟,对每个OCC有用。自动生成的"spf"与Synopsys OCC版本兼容,后者需要在pre-shift过程中在扫描时钟信号上有脉冲。定制OCC不需要这种脉冲,您必须在pre-shift load/unload过程中将"spf"中的时钟信号设为零。需要对spf进行此修改以避免TetraMAX DRC中的S18阻塞错误。
Page 7
例如,如果考虑ATE测试时钟组(DFT_DTA_CLK DFT_SHIFT_CLK DFT_SPI_CLK DFT_SVO_CLK)加上复位信号(RESETB),您需要在"scan pre shift procedure"中删除STIL 标准测试接口语言协议文件中的脉冲,如下所示:
Consider the signal group: "_clk" = '"DFT_DTA_CLK" + "DFT_SHIFT_CLK" +
"DFT_SPI_CLK" + "DFT_SVO_CLK" + "RESETB"';
"Internal_scan_pre_shift" : V {
// "_clk" = P0PP1;
"_clk" = 00001;
"DFT_SE" = 1;
}
"Internal"一词意味着扫描链是传统配置的,绕过扫描压缩器架构(如果存在)。全层次化支持保证通过使用Synopsys DFTMAX功能[4]在设计的顶层集成扫描压缩器架构,读取包含OCC信息的CTL。在这种情况下,我们成功尝试了使用定制OCC的自动"spf"生成流程。发现了一个工具Bug,但通过仅两次手动修改进行变通解决:一次在"spf"中,一次在网表中,详见流程步骤段落。
3.0 OCC映射图
3.1 OCC规则
为了满足DFT 可测试性设计策略的需求,设计中OCC结构的插入遵循先前在SNUG2007[1]讨论的论文中描述的规则。这些规则可以总结如下: 1. 为每个时钟域插入一个OCC 2. 不要级联插入两个OCC 3. 不要在OCC之后插入分频时钟模块 4. 如果OCC的时钟源是时钟MUX的输出,提供信号以强制最快时钟的传播 5. 提供信号以允许时钟通过时钟门控单元传播 在设计活动中牢记这些规则非常重要,以为DFT工具提供尽可能好的工作条件。
Page 8
(绿色圆圈内的空白矩形是时钟门控单元。数字分频器位于蓝色椭圆内OCC之前的分支中。数字时钟树的输入时钟信号位于图的左侧。)
Page 9
3.2 用于功耗节省的时钟门控单元
根据功能规格要求,将时钟门控单元放置在如图2和3所示的位置以节省功耗(已通过此方案进行了功能仿真)。在这种情况下,我们可以关闭所有带有OCC连接的分支。我们需要保证每个OCC在所有扫描过程(移位和捕获)中有一个自由运行时钟,因此时钟门控单元的Test enable引脚(图3中的Te1引脚)需要在所有扫描阶段(扫描移位load/unload、扫描捕获)保持使能。OCC需要与由模拟PLL或数字分频器提供的pll_clk_i时钟同步。此时钟必须被视为自由运行时钟,其脉冲不得与其他信号关联。为此我们将时钟门控单元的test enable引脚(te1引脚使能)保持为常数。
4.0 流程步骤
定制OCC以RTL格式(用Verilog语言编写[2])提供给工具(Design Compiler [4]),并使用STM前端套件[3]与设计的其余数字部分一起综合。流程分为两个步骤。在第一步中,DFT Compiler工具既识别OCC,又将所有触发器连接成扫描链,然后使用ATPG 自动测试向量生成工具(TetraMAX 2007.12)运行初步的DFT规则检查。在第二步中,DFT Compiler使用之前生成的CTL在顶层插入扫描压缩器架构,生成测试协议文件(spf),我们需要按描述的方式管理该文件。TetraMAX工具以"stil"格式生成测试向量,之后使用动态仿真器进行仿真,编译Synopsys提供的PLI 编程语言接口以解释"stildpv"向量测试平台中的过程。
Page 10
4.1 步骤1
扫描链拼接按照用户指令进行:每条扫描链最多包含100个触发器,扫描输入和输出端口应为专用端口,不与功能顶层端口共享。
set_scan_configuration -max_length 100
set_scan_configuration -create_dedicated_scan_out_ports true
OCC识别由STM前端设计套件保证,该套件通过向DFT Compiler工具提供以下命令来自动化DFT流程。
自由运行时钟点通过以下命令声明:
set_dft_signal -view existing_dft -type Oscillator \
-hookup_pin CKG/SEL/BUFF_BB_DTA_CLK_GATE_TMP/Z -test_mode all_dft
通过以下命令声明层次结构中的OCC:
set_dft_signal \
-type oscillator \
-pll_clock CKG/SEL/BUFF_BB_DTA_CLK_GATE_TMP/Z \
-ate_clock ATE_CLOCK \
-hookup_pin CKG/SEL/OCC_DTA_CLK/I3/CELL_MUX21/Z \
-ctrl_bits [list 0 CKG/SEL/OCC_DTA_CLK/ccb_regx0x/Q 1 \
1 CKG/SEL/OCC_DTA_CLK/ccb_regx1x/Q 1 \
2 CKG/SEL/OCC_DTA_CLK/ccb_regx2x/Q 1] \
-view existing_dft
我们需要指定ATPG工具将使用的时钟链位。例如,名为OCC_DTA_CLK的OCC,如果其时钟链加载为"111"则传播3个脉冲,如果为"011"则传播2个脉冲。在前面的命令中,我还指定了用于扫描load/unload的ATE测试时钟。
Page 11
所有OCC时钟链通过以下命令拼接在同一时钟链中:
set_scan_group occ_clk_single_chain_SEL \
-include_elements [list \
CKG/SEL/OCC_WRSYNT/ccb_regx0x \
CKG/SEL/OCC_WRSYNT/ccb_regx1x \
CKG/SEL/OCC_WRSYNT/ccb_regx2x \
CKG/SEL/OCC_WRSYNT/test_scanout_o_reg \
... \
CKG/SEL/OCC_DTA_CLK/ccb_regx1x \
CKG/SEL/OCC_DTA_CLK/ccb_regx2x \
CKG/SEL/OCC_DTA_CLK/test_scanout_o_reg \
... \
CKG/SEL/OCC_DCLK/ccb_regx0x \
CKG/SEL/OCC_DCLK/ccb_regx1x \
CKG/SEL/OCC_DCLK/ccb_regx2x \
CKG/SEL/OCC_DCLK/test_scanout_o_reg \
] \
-access [list ScanDataIn CKG/SEL/OCC_WRSYNT/ccb_regx0x/D \
ScanDataOut CKG/SEL/OCC_DCLK/test_scanout_o_reg/Q \
] \
-serial_routed true
时钟链的扫描输入和输出信号通过以下命令声明:
set_dft_signal -type ScanDataIn -port SCAN_IN -view spec
set_dft_signal -type ScanDataOut -port SCAN_OUT -view spec
连接时钟链需通过以下命令声明为扫描路径:
set_scan_path path_name_occ_SEL \
-include occ_clk_single_chain_SEL \
-complete true \
-scan_data_in SCAN_IN \
-scan_data_out SCAN_OUT \
-scan_enable SCAN_EN \
-test_mode all_dft
脚本结束时保存网表和测试模型。测试模型将用于下一步的层次化扫描综合。
# Write post-DFT test model
write_test_model -format ddc -o netlists/scs_top_post_DFT_test_model.ddc
write_test_model -format ctl -o netlists/scs_top_post_DFT_test_model.ctl
Write post_DFT netlist
write -format verilog -hier -o netlists/scs_top_post_DFT.v
Page 12
4.2 步骤2
在此步骤中,工具将在层次化顶层插入"扫描压缩器"架构(如图4所示),位于顶层Wrapper内部。
(Wrapper模块内的绿色梯形是扫描压缩器架构的一部分(10倍压缩因子),DFT Compiler在步骤2中使用数字子模块扫描拼接的CTL插入。)
顶层Wrapper包含:用于支持仿真的模拟行为模型、所有OOC在CKG模块内综合的数字部分扫描链拼接,以及用于验证数字模块外正确时钟传播的D型DFF触发器。对于步骤2,我们只需要向工具提供数字部分的CTL测试模型。在此步骤结束时,DFTC工具生成测试协议:一个用于Internal Scan模式(绕过顶层扫描压缩器),一个用于Scan Compression模式(使用顶层扫描压缩器)。两个"spf"协议文件均支持管理每个OOC处于活动或旁路模式的所有过程[6]。两个spf都需要一些手动修改,详见4.2.1段落。
4.2.1 对spf(测试协议)的手动修改
使用定制OCC时,工具会自动生成一个不需要的复位端口,其实例名称与子模块"digital block"(图4)相同。此外,工具会更改子模块名称并添加数字"0"(例如SCS顶层模块名变为SCS0),并添加一个通过feed-through连接的不使用的OCC复位端口。DFT Compiler工具使用定制OCC时会自动生成不需要的复位端口,这是因为定制OCC没有复位端口,而DFT工具期望有复位端口。如果使用Synopsys OCC则不存在此问题。
我们通过手动更改网表和测试协议中的名称来变通解决。数字子模块重命名如下:
1. "SCS0 (...) → SCS (...) 网表子模块实例化
2. assign SCS = PLL_RESET; → assign SCSm = PLL_RESET; 在"SCSm"端口声明后
3. 更新SPF中的端口列表:"SCS" → "SCSm"
Page 13
4.3 ATPG
扫描压缩器插入和spf文件手动修改后,我们即可开始ATPG 自动测试向量生成任务。ATPG使用spf指令来加载时钟链触发器,用于捕获阶段的at-speed脉冲传播。为了通过TetraMAX DRC 设计规则检查,我们需要遵守先前论文[1]中确定的相同规则(将自由运行点声明为黑盒)。此外,使用定制OCC时,我们需要在pre-shift load/unload过程中也删除扫描压缩模式下的脉冲,否则"设计规则检查器"会为每个OCC报告阻塞违例:
"ScanCompression_mode_pre_shift" : V {
// "_clk" = P00111;
"_clk" = 000111;
"SCAN_WRAPPER_EN" = 1;
您必须在两个协议文件(Internal和Scan Compression模式)中重复相同的修改,将Test Clock上的"P"脉冲变为"0"。之后,您可以使用两个修改后的协议文件生成跳变故障和固定故障模型的测试向量。
5.0 测试向量仿真
测试向量已在零延迟模式下成功仿真,涵盖两种扫描模式:扫描压缩模式和内部模式。图6显示了到实例化在数字模块外部的"CP"触发器引脚的时钟正确传播。这证明了不同IP之间通过层次化扫描综合(提供IP-CTL模型)可能实现的集成。包含所有OCC的数字时钟树可以嵌套在向其余数字设计提供时钟的IP内部。该图显示了扫描移位和扫描捕获阶段之间的跳变故障检测情况。当扫描使能信号"test_se_i"变为零时,触发器对D引脚进行采样,正确地从OCC接收了最快的时钟(参见"CP"引脚上的双脉冲)。
Page 14
ref_clk_i在内部被OCC使用,以便在ref_clk_i的一个脉冲之后启用最后阶段双脉冲传播(当"no_ref_clk"设为零时),如图5所示。我们的数字设计允许ATE控制ref_clk_i、ate_clk_i和shift_clk_i信号。
6.0 结论
最新电路报告了SSA测试覆盖率98.5%和TF测试覆盖率78.7%。OCC数量减少到9个,以优化时钟域。最快时钟域频率高达3 GHz,我们正在考虑在制造测试期间允许模拟锁相环 PLL的可编程性以获得更大的灵活性。我们将比现在更好地研究如何覆盖OCC上游逻辑的故障。我们正在考虑使用专用的功能测试向量来覆盖它们。功能向量将使用TetraMAX进行故障分级。我们正在考虑未来引入在线测试技术[7, 8],如针对OCC部分的自检查综合策略。这将帮助我们识别OCC内部的故障。目前正在进行研究以提高最终的测试质量。
7.0 附录与知识要求
[1]-[8] 参考文献(详见原文附录)
缩略词表:ATE (Automatic Test Equipment), ATPG, CCB (Clock Chain Bits), CKG (Clock Generator), CTL (Core Test Language), DFT, DRC (Design Rules Check), FSM (Finite State Machine), IP, OCC (On chip Clock), PLI (Programming Language Interface), PLL, RTL, SPF (Stil Protocol File), SSA (Single Stuck At), STIL (Standard Test Interface Language), STILDPV (STIL Direct Pattern Validation), TF (Transition Fault)
Page 15-16
致谢: 感谢Gianni Lazzari(STM DSD-CPG Digital Backend Group Design Manager)和Andrea Muccio(Backend Digital Designer)在审核本文及物理实现方面的技术贡献。
图片索引
本文共 5 张图片,存放于 SNUG_2008_Europe_Cesari_cesari_paper2008_paper_images/ 目录。