全扫描结构在MCU设计中的应用 | | [ 作者:成都电子科技大学微电子与固体电子学院 刘文峰 ] | 摘 要:本文在8位 RISC MCU设计实例中用Synopsys公司的DFT Compiler进行全扫描设计,在此基础上,总结出了在复杂芯片中进行扫描链插入时所遇到的普遍性问题,并提出了相应的解决方法。
关键词:可测性设计;全扫描;MCU
引言
可测性设计有多种结构。基于扫描的可测性设计具有结构简单、对芯片的面积影响小、覆盖率高以及可以与EDA工具紧密结合的特点,是目前应用最为广泛的芯片可测性实现方法。Synopsys的DFTC(DFT Compiler)可以在综合过程中将普通时序单元替换为具有扫描功能的时序单元,进而插入扫描链,实现芯片的可测性。在国内对MCU的可测性设计与研究多是基于功能测试的角度,但这类方法的覆盖率仍然有待提高。目前的高性能处理器大多采用基于全扫描的可测性设计,如AMD-K6、McKinley。本文将结合一款8位 RISC MCU的设计实践,介绍如何实现一个满足要求的扫描设计。
扫描结构原理
基于扫描的可测性设计技术的基本原理,是使用扫描寄存器来代替原始电路中的存储单元,从而使存储单元变为一个测试输入点和一个响应观察点,进而将对时序电路的测试转化为对组合电路的测试。图1是一个时序电路在插入扫描链后的示意图。
对于采用全扫描结构的电路,其测试过程分为如下5个阶段。
① 扫描输入(Scan-In):在这个阶段,SE=1,触发器被首尾相接成链状结构,测试向量随着Clk的变化由SI端被移位进扫描寄存器。
② 并行测量(Parallel Measure):此时,时钟保持不变,SE=0,Xs端的测试向量被加载。这样,整个组合逻辑由于所有输入端给定,其状态成为已知,Zs的响应被记录。
③ 并行取值(Parallel Capture):SE不变,时钟跳变一次,测试响应被加载到了扫描单元中。之后,组合逻辑部分处于无关紧要状态(don’t-care state)。
④ 链首扫描输出(First Scan-Out):SE=1,时钟保持不变,扫描链的首位由SO端输出。
⑤ 扫描输出(Scan-Out):SE保持不变,存储在扫描单元中的响应数据随着测试时钟被串行输出。
需要注意的是,①⑤两个阶段是并行的,即在测试响应移位输出时,下一个测试向量同时被加载到扫描链中。
扫描插入过程中的具体问题
本文设计的MCU为8位数据总线,35条精简指令集,芯片规模约为4万门。采用1024×14 EPROM作为程序存储区,64×8 SRAM通用寄存器。下面将对在可测性设计过程中遇到的一些具体问题进行探讨。
MCU中扫描单元的选择
DFTC支持的扫描单元有多路选择器型触发器(Mutiplexed Flip-Flop)、时钟扫描(Clocked Scan)、电平敏感扫描设计(LSSD)、辅助时钟电平敏感扫描设计(Auxiliary Clock LSSD)。
其中,目前时钟最多的是多路选择器型触发器和LSSD。LSSD要求所设计的电路是电平敏感电路,该类电路中的基本存储单元为电平敏感锁存器,需要至少两个互不重叠的时钟输入。而本设计中普遍采用的时序单元是D触发器,因此更适合采用多路选择器型扫描单元。其特点是仅使用一个时钟输入端,面积消耗少,结构简单。但是由于在数据通路上增加了一个多路选择器,从而增加了延时开销,可能引起时序违反(多为建立时间违反,setup-time violations),如果不能有效地加以处理,将导致工作频率的下降。
MCU中存储器模块的处理
MCU中的EPROM和SRAM无法使用门级stuck-at-fault 技术进行检测。在扫描插入时,存储器模块将被作为黑匣子处理。然而,由于黑匣子的输入/输出信号无法观察和控制,在黑匣子周围就会出现无法检测的逻辑,称为阴影逻辑(shadow logic),如图2 a所示。对阴影逻辑的测试可以通过在存储器周围添加测试包络(test wrapper)实现。测试包络实际就是在存储器周围增加扫描寄存器,从而增加控制点和测试点,使得阴影逻辑成为可控、可测的组合逻辑,如图2 b所示。
以设计中作为寄存器文件的SRAM模块为例,该模块的引脚有dat_i[7:0]、addr[8:0]、 dat_o[7:0]、wr_en、rd_en、clk。其中,clk为时钟端;wr_en 为写使能端,高电平有效;rd_en为读使能,高电平有效;addr[8:0]为地址端;dat_i[7:0]、dat_o[7:0]为数据输入输出端口。
在默认情况下,DFTC的shadow LogicDFT功能是默认关闭的,所以要在包络插入之前先打开此项功能:
dc_shell> set_dft_configuration -order wrapper
插入测试包络的脚本如下:
dc_shell>set_port_configuration -cell sram -port "dat_o" -tristate -read {wr_en 1} -clock clk
dc_shell>set_port_configuration -cell sram -port "dat_i" -write {rd_en 1} -clock clk
dc_shell>set_port_configuration -cell sram -port "addr" -write {rd_en 1} -clock clk
dc_shell>set_wrapper_element sram -type shadow
门控时钟处理
在8位RISC MCU设计中,用到了四相时钟,通过将初始时钟进行四相分频实现。这样就出现了门控时钟问题。当触发器被扫描单元替换后,数据串行载入和输出的速度将变为原来的1/4,而且4条支路因为相位不同,将出现测试向量载入和响应输出的不同步,使得扫描结构难以控制。
对于这个问题的解决办法就是在每一条支路上设置一个MUX电路,当处于扫描状态时,SE为1,实现扫描单元的时钟同步,如图3所示。其余各支路均使用相同的结构,从而使得支路的扫描单元可以在相同时钟下进行扫描移位。
三态总线争用
MCU中用到8位的数据总线,为数众多的特殊功能寄存器、SRAM等均通过数据总线相连。在扫描移位过程中,由于扫描数据的不可预测性,将会出现总线争用的情况,如图4所示,当0、1同时输出时,将会造成电源、地的短接,从而由于电流过大损坏器件。
对此问题的解决方法就是增加译码逻辑, 使得只有一个三态门可以输出数据,其它三态门均处于高阻状态。译码逻辑的使能端由SE控制,译码逻辑的输入端就是控制三态门使能信号的触发器输出信号。这就有效地避免了测试过程中由于总线争用而损坏器件的情况。
其它一些普遍性问题的处理
锁存器
锁存器将使得测试变得困难,处理方法就是在扫描状态时将其设为透明工作模式,即将锁存器的时钟端口设为固定值,使得锁存器仅仅相当于一个门逻辑:
dc_shell> set_scan_transparent {cell_list} true
根据原理可知,锁存器设为透明模式,虽然可以将其对其它逻辑的影响降为最低,但是由于其本身的缺陷在测试过程中无法被检测,从而降低了覆盖率,因此在设计中应当尽量避免使用锁存器。
门控复位/置位端
扫描单元的复位与置位端应当是可控的,因为如果扫描单元在移位过程中被复位或置位,将造成扫描数据的破坏。对于此类问题的处理类似于前面所提到的门控时钟的处理方法,既通过MUX电路进行处理,使得在扫描模式下,电路为同步复位。
多时钟边沿
DFTC对在同一设计中采用不同时钟边沿的情况无法处理,这时需要对设计进行修改,使得在电路处于扫描状态时采用相同的时钟边沿。用Verilog描述如下:
[email=always@(clk]always@(clk[/email], SE)
begin
if(SE==1) muxed_clk<=clk;
else
muxed_clk<=~clk;
end
endmodule
这样,在正常模式时采用clk下降沿触发的触发器,将会在测试模式时由clk的上升沿触发。
双向端口
在DFTC中使用下面的指令:
dc_shell>set_scan_configuration bidi_mode -output/input
指令的原理就是通过增加逻辑使得双向端口变为单向。如图5所示,当芯片处于测试模式时,SE=1,输出三态门关闭,从而避免了冲突。然而由于三态门关闭导致部分逻辑输出中断,从而会使覆盖率下降。端口选取的原则之一就是将这种影响变得最小。
多时钟域
由于不同的时钟域具有不同的时钟歪斜,如果在设计中将不同时钟域中的扫描单元连在同一个扫描链中,可能会出现时序冲突。在这种情况下,要将两个时钟域中的扫描单元分配到不同的扫描链当中去。
结语
在CSMC(无锡上华半导体公司)0.5mm工艺库下经过反复试验,全扫描设计最终在较小面积代价(0.1%)下得到了99.51%的覆盖率,所需测试向量数为344,这是基于功能测试的DFT技术所不能达到的。
本文的问题和解决虽然是在具体项目中提出,但是具有普遍的意义。由于扫描设计受电路结构的影响很大,为了提高覆盖率,很多时候需要对电路设计本身进行修改,才能得到满意的结果。因此在电路设计初期就应该尽量满足DFT规则,以免不必要的返工。总体来说,全扫描可测性设计需要一定的面积作为代价,但是在现在制造成本下降,测试成本不断提高的情况下,以面积换取产品的可靠性思想将日益成为IC设计的主流。■
参考文献
1. 孙艺,汪东旭.MCU可测性设计的实现[J]. 微处理机, 1999. 第3期: 4~8
2. 袁春锋,李研.高性能微处理器的可测性技术[J]. 高性能计算技术. 2005.第6期: 14~18
|
|
|
|