JTAG 测试
http://blog.csdn.net/zrlean/article/details/7516724
1 引言
“边界扫描”是一种可测性设计技术,即在电子系统的设计阶段就考虑其测试问题[1]。
BSDL(boundary scan des cription language) 语言硬件描述语言(VHDL)的一个子集,是对边界扫描器件的边界扫描特性的描述,主要用来沟通边界扫描器件厂商、用户与测试工具之间的联系,其应用包括:厂商将BSDL描述作为边界扫描器件的一部分提供给用户;BSDL描述为自动测试图形生成(ATPG)工具测试特定的电路板提供相关信息;在BSDL的支持下生成由IEEE1149.1标准定义的测试逻辑 [2]。现在,BSDL语言已经正式成为IEEE1149.1标准文件的附件。BSDL本身不是一种通用的硬件描述语言,但它可与软件工具结合起来用于测试生成、结果分析和故障诊断。每一边界扫描器件都附有特定的BSDL描述文件,为了论述的方便,本文将以Altera公司的CPLD器件EPM7128SL84 芯片为例说明BSDL描述在测试中的应用。
2 EPM7128SL84芯片的BSDL描述
该器件采用了先进的CMOS EEPROM制造工艺,共有84个引脚,其中包括四个JTAG测试引脚 TDI、TMS、TCK和TDO,通过标准JTAG测试接口它还可以支持在系统可编程(ISP)。下面首先讨论EPM7128SL84的BSDL描述中与应用相关的各基本元素。
2.1 TAP描述
TAP描述说明与TAP控制器相关的特性。TAP 控制器包括4个或5个控制信号,一个用户定义的指令集(在IEEE1149.1标准规定范围内)和一些可选择的数据寄存器。EPM7128SL84的TAP描述有:
(1)attribute INSTRUCTION_LENGTH of EPM7128SL84:entity is 10;
指令长度(INSTRUCTION_LENGTH)属性定义了所有操作码的长度必须为10位。
(2)attribute INSTRUCTION_OPCODE of EPM7128SL84:entity is
“BYPASS (1111111111), ”&
“EXTEST (0000000000),”&
“SAMPLE (0001010101),”&
“IDCODE (0001011001)”;
指令操作码(INSTRUCTION_OPCODE)属性指出器件所支持的指令的二进制代码,如器件标志代码指令IDCODE的位图形为“0001011001” ,所有字串中最右边的位最靠近TDO。根据1149.1标准,旁路、外部测试和采样指令是强制性的,且旁路指令BYPASS为全“1”串,外部测试EXTEST指令为全“0”串。
(3)attribute INSTRUCTION_CAPTURE of EPM7128SL84:entity is "0101010101";
指令捕获(INSTRUCTION_CAPTURE)属性说明,当TAP控制器处于捕获指令寄存(Capture-IR)状态时,位图形“0101010101”被装入指令寄存器的移位寄存器部分,当送入新指令时,此位图形被移出,IEEE 1149.1标准规定其最低两位为“01”,其余位由厂商自行定义,这样可以保证通过Capture信号可以检测到扫描链上固定为“0”和固定为“1”的故障。
(4)attribute IDCODE_REGISTER of EPM7128SL84:entity is
"0000"&"0111000100101000"&"00001101110"&"1";
标志寄存器属性描述芯片内置在标志寄存器里的芯片ID码。IEEE 1149.1标准规定芯片ID码为32位,最右边的一位是最靠近TDO的。如图1所示,标志寄存器的LSB是IEEE 1149.1标准强制为“1”的最低位,表示器件标志寄存器的存在;第1位至11 位是厂商代码号“01110110000”,这个代码表示Altera公司;第12位至27位是芯片型号 “0001010010001110”,即十六进制“7128”(从右至左);第28位至31位是芯片版本号“0000” [2]。
2.2 边界扫描寄存器描述
这是BSDL整体结构的最重要部分,它描述了边界扫描单元(BSC)的长度及每个BSC的单元号与属性。
(1)attribute BOUNDARY_LENGTH of EPM7128SL84:entity is 288;
边界扫描长度属性表示EPM7128SL84芯片共有 288个边界扫描单元。
(2)attribute BOUNDARY_REGISTER of EPM7128SL84:entity is
--num(cell, port, function, safe [ccell, disval, rstl])
"0 (BC_4, IN84, input, X)," &
"1 (BC_4, *, internal, X)," &
"2 (BC_4, *, internal, X)," &
……
"144 (BC_4, IO41, input, X)," &
"145 (BC_1, *, control, 0)," &
"146 (BC_1, IO41, output3, X, 145, 0, Z)," &
……
"279 (BC_4, IO4, input, X)," &
"280 (BC_1, *, control, 0)," &
"281 (BC_1, IO4, output3, X, 280, 0, Z)," &
……
"285 (BC_4, IN1, input, X)," &
"286 (BC_4, *, internal, X)," &
"287 (BC_4, *, internal, X)";
对边界扫描寄存器单元(BSC)属性的描述由单元号与4个或7个圆括号内的数据子段组成,这些BSC的排列顺序可以是任意的,但每个单元都必须被定义。单元号从0到287 (BOUNDARY_LENGTH-1)进行编号,0单元是最靠近TDO的单元。括号中数据子段的名称为: cell, port, function, safe [ccell, disval, rstl],后三个方括号内的可选子段只有在function子段的值为 out put3或bidir时才被定义。它们的含义如下:
● 单元子段:确定器件所使用的边界扫描单元。EPM7128SL84芯片采用的BSC类型为标准单元 BC_1与BC_4,其属性已经在VHDL组件STD_1149_1_1994中加以定义;
● 通道子段:说明与对应BSC相连的系统管脚。其名称与BSDL“logical port des cription”属性中描述的管脚逻辑名称相一致。“*”表示此BSC 为输出控制单元或内部单元;
● 功能子段:表示该BSC的主要功能。EPM7128SL84芯片BSC所涉及的功能有“input”、 “control”,“output3”和“internal”4种;
input:表示一个简单的实现输入管脚接收的 BSC;
control:表示一个进行输出使能控制,或输出驱动与双向管脚的单元方向控制的BSC;
output3:表示一个为三态输出提供数据的 BSC;
internal:表示一个用于捕获系统内部逻辑的 BSC,它不与任何系统管脚相连;
● 安全子段:当ATPG软件提供一个额外随机值时,safe子段定义了一个要装入捕获寄存器CAP 与更新寄存器UPD(如果存在的话)的值,以防止系统逻辑因为过激励信号等原因造成的错误连接。这个值可以是“0”,“1”或“X”。“X”表示“0”,“1”均可;
● 控制单元子段:说明对功能为output3或bidir的BSC进行输出使能控制的控制单元号;
● 无效值子段:为禁用对应的系统管脚,要给由ccell子段指定的控制单元赋的值;
● 无效状态子段:给出被禁用驱动器的状态。这个状态可以是高阻态(Z)、弱“1”态(weak1)或弱“0”态(weak0)[2]。
EPM7128SL84芯片的管脚与边界扫描单元如图2所示,与输入输出管脚IO41相对应的三个BSC单元号分别为144,145和146。
3 BSDL描述语言的实际应用
3.1 TAP完整性测试
指令捕获(INSTRUCTION_CAPTURE)属性提供了测试TAP完整性的一条途径。TAP完整性测试可以检测时钟TCK和模式选择TMS的输入端连接是否正确,所提供的有关信号是否正常;数据输入TDI和数据输出TDO端的连接是否正确,且输入和输出的功能是否正常;内部的指令寄存器工作是否正常;内部的边界扫描寄存器工作是否正常。TAP完整性测试是进行边界扫描其他任何测试之前建议首先进行的测试操作,以确保边界扫描链能正常工作。
TAP完整性测试的过程如图3所示。在TAP的 Shift-IR状态,指令捕获位图形已加载至指令寄存器的移位寄存器部分,直接从TDO移出数据并与各芯片的Capture位图形比较,若数据一致则TAP完整性测试通过。
3.2 芯片ID码的检测
芯片ID码是识别芯片的内建器件标识码,通过检测芯片ID码可以识别该芯片,判断芯片装配正确与否,并可进一步判断芯片的型号、生产厂家及版本号与其标识是否相符,辨别芯片的真伪。当TAP进入Test-Logic-Reset状态时,若标志寄存器存在,则被强制接入TDI与TDO之间,寄存器LSB的值为“1”,否则,旁路寄存器被接入TDI与TDO之间,寄存器的值为“0”。所以,在检测芯片标志寄存器的值时,可以由复位状态直接进入移位数据状态,输出TDO的值,并判断其第一位是否为“1”,若是,则此芯片有标准寄存器存在,可继续移出其他31位,并进行判断与显示。检测流程如图4所示。我们在对芯片EPM7128SL84进行ID标识码检测时,用逻辑分析仪采集到的TDO端的输出波形如图5所示,与BSDL描述中的ID码一致,说明器件正确。
3.3 边界扫描互连测试
我们在开发边界扫描测试软件过程中,设计制作了基于边界扫描机制的试验电路板当作诊断实验对象。其中两块EPM7128SL84芯片间的有16个互连网络,分别是两芯片的4~12管脚之间、33~41管脚之间的互连(除去7脚地线,38脚电源线)。在进行互连测试时,首先要构造一个16×16的测试矩阵,然后将此矩阵的16个列向量分别加载到芯片1的IO4~ IO12,IO33~IO41管脚(除去7脚和38脚),然后执行外部测试指令。由芯片2捕获对应管脚上的信号,形成响应向量,全部16个列向量分别加载捕获完成后,再对响应矩阵进行故障诊断 [3],如图6所示。在此测试过程中,对芯片1的IO管脚加载的向量数据必须定位到每个管脚对应的三态输出单元,即芯片1的281,278,275,269,263,260, 257,251,179,173,167,164,161,155,149,146单元;而芯片2所捕获的对应管脚上的信号,在执行采样指令之后,都被置入每个管脚对应的输入单元,即芯片2的279,276,273,267, 261,258,255,249,177,171,165,162,159,153,147,144单元。这样,从TDO输出的对应单元的数据就组成了响应矩阵,对响应矩阵按照一定的算法进行分析,便可检测出呆滞、短路、开路与桥接故障。
4 结束语
以上所述测试流程均用C++ Builder编程实现,能对基于边界扫描机制的试验电路板进行准确、可靠的测试。试验证明,在边界扫描各项测试中,对BSDL描述信息进行有效的编译提取,对测试的成功实现至关重要。但器件的BSDL描述必须严谨、确切,所以,在下一步的软件完善中,将加入BSDL 文件的数据完整性检查,以防止错误数据损坏被测对象。
本文摘自《半导体技术》