admin 管理员组

文章数量: 887021


2024年1月12日发(作者:default option)

什么是边界扫描(boundary scan)?

Boundary Scan测试原理及实现

JTAG标准的IC芯片结构

IEEE 1149.1 标准背景

JTAG

什么是边界扫描(boundary scan)?

边界扫描(Boundary scan )是一项测试技术,是在传统的在线测试不在适应大规模,高集成电路测试的情况下而提出的,就是在IC设计的过程中在IC的内部逻辑和每个器件引脚间放置移位寄存器(shift

register).每个移位寄存器叫做一个CELL。这些CELL准许你去控制和观察每个输入/输出引脚的状态。当这些CELL连在一起就形成了一个数据寄存器链(data register chain),我门叫它边界寄存器(boundaryregister)。除了上面的移位寄存器外,在IC上还集成测试访问端口控制器 (TAP controller),指令寄存器(Instruction register)对边界扫描的指令进行解码以便执行各种测试功能。旁路寄存器(bypass register)提供一个最短的测试通路。另外可能还会有IDCODE register和其它符合标准的用户特殊寄存器。

边界扫描器件典型特征及边界扫描测试信号的构成。

如果一个器件是边界扫描器件它一定有下面5个信号中的前四个:

1.TDI (测试数据输入)

2.TDO (侧试数据输出)

3.TMS (测试模式选择输入)

4.TCK (测试时钟输入)

5.TRST (测试复位输入,这个信号是可选的)

TMS,TCK,TRST构成了边界扫描测试端口控制器(TAP controller),它负责测试信号指令的输入,输出,指令解码等,TAP controller是一个16位的状态机,边界扫描测试的每个环节都由它来控制,所以要对TAP

controller有一个比较清楚的了解。

在后续的文章中还会向大家介绍边界扫描的其它方面。

边界扫描为开发人员缩短开发周期,并且提供良好的覆盖率和诊断信息。在不了解

IC内部逻辑的情况下快速的开发出优秀的测试程序。在未来的测试领域,边界扫描将会得到广泛的应用。

Boundary Scan测试原理及实现

Boundary scan的目的:

Boundary scan是一种用于测试数字集成电路的技术,它能找出,开路,短路,和功能不良的数字器件,另外它还能完成一些功能测试。相对于传统的数字器件的向量测试,它还有以下几个优点:

具有较短的测试开发时间;

能用于探针接触有困难的那些器件的测试;

能减少维修时间和维修成本,故障诊断范围可以到PIN脚。

一般理论:

Boundary-Scan 测试的时候发送一组信号流到被测的数字器件的转换寄存器单元里面。而这个单元可以在每一个输入,输出,和双向引脚以及器件的逻辑中心那里找到。那些信号在寄存器周围转换并且从器件输出,然后用输出的信号和输入的信号之间的差异来比较并判断出错。例如有两个引脚之间短路或者电源与地脚短路之类的,它都会报错。

几个boundary scan 器件可以被连接到一个链上,从而一些相同的基础测试可以同时执行。当然,boundary

scan还有许多的附加的测试能力,但是这种使用转换寄存器来检查输出的信号流是整个boundary scan测试

理论的基础。

两种软件包:

在Agilent 3070上有两个不同类型的boundary scan测试软件:他们是:

in-circuit boundary scan和HP interconnectplus. 其中in-circuit boundary scan是Agilent 3070标准软件包中自带的,它可以生成标准的单独的数字器件的在线boundary scan测试。而HP interconnectplu是一个可选软件,它可以生成链式的boundary scan测试程序,同时,它也能自动生成单独器件的boundary scan测试程序。

boundary scan器件的设计

boundary scan测试软件遵从IEEE 1149.1的标准,遵从此类标准的IC在每个引脚和逻辑中心之间都有一个独立单元。这些相互独立的单元们连接到一个转换寄存器也叫boundary scan寄存器中,他负责控制和观察每个输入,输出,和双向引脚的值。每一个boundary scan的器件都有一个特殊的输入引脚(TDI),一个特殊的输出引脚(TDO),TDI作为boundary scan寄存器的输入端,而TDO则连接到boundary scan寄存器的输出端。在TCK(时钟控制)的基础上,由TAP(test access port)来控制整个工作流程,工作模式选择(TMS)和复位信号(TRST*)

有两种boundary-scan测试依赖于boundary-scan器件本身,假如一个元件设计者在设计的时候把IDCODE放到寄存器中,boundary-scan就可以去确认此器件的制造商,PN,和版本号之类的信息,假如此器件还有内嵌的自测(BIST)时,boundary-scan还可以运行这种自测并且报错。

指令寄存器:

指令寄存器包含了指令的解码。也包含了一些数据寄存所使用的特殊指令。

ByPass寄存器:

你可以使用ByPass寄存器通过那些没有被使用的Boundary –Scan寄存器链来进行数据传输的工作。假想你有一个很复杂的IC被用其它的技术象TESTJET之类的去测试而不用boundary-Scan,你也许会决定省略掉这个Boundary-Scan寄存器的长度并用单个单元的ByPass寄存器来代替。在下图中,使用ByPass寄存器可以包含12个boundary-Scan寄存器,事实上boundary-Scan寄存器的个数一般都很大,所以采用ByPass寄存器,会节约一些测试时间。

身份辨别寄存器:

身份辨别寄存器是一个32位的寄存器,它包含了元器件的一些制造信息。身份辨别寄存器有时也称IDCODE寄存器,因为IDCODE指令显示了身份辨别寄存器中的内容,并不是所有的boundary-scan器件都有IDCODE寄存器,IEEE 1149.1明确指出IDCODE只是一个选项。

Boundary-scan 单元的功能:

下图显示了一个典型数据寄存器单元它能灵活的扮演输入或输出单元。

灰色的Internal logic 和Outout Pin阐明了输出的配置。而紫色的Input pin和

Internal logic阐明了输入的配置,对于双向PIN来说,你可以只选用一个单独的单元就行了。转换,更新和测试模式用其它的颜色来标明:

TAP控制器:

TAP控制器是一种16位态的设备,它控制boundary-scan测试的操作。由于TAP控制器管理着大多数的数据和指令寄存器,理解TAP控制器在另一种意义上说等于理解了boundary-Scan, TAP控制器通过TCK,TMS,TRST*来实现控制。

控制线:

三个输入控制线:TCK,TMS,TRST*,TCK是一个方波时钟信号,Agilent3070用一个50%的DUTY CYCLE来实现它,TMS信号通过状态图控制着TAP控制器的动作,一般在TCK的上升沿触发TMS,有时也会在TCK的下降沿触发。而TRSTR*用于复位动作。例如下图所示,TRST信号一般是在接近序列的中间出现。

测试-逻辑-复位:

在测试-逻辑-复位状态时,测试逻辑被禁用从而使此器件可以正常工作,当器件第一次被打开的时候,只要

有ID寄存器存在,那个指令寄存器就会引入IDCODE指令,假如没有的话,会引入ByPass寄存器。一般的,测试-逻辑-复位在TAPcontroller 上电的时候才工作的,测试程序员能够通过使TRST*为低电平或使TMS为高电平并持续至少5个TCK周期来迫使TAP控制器进入上电的状态。

Run-Test/Idle:

Run-Test/Idle允许在指令寄存器的指令的基础下激活被选种的测试逻辑电平,TAP controller 在TMS 保持低电平的状态下,会保持Run-Test/Idle的状态,而当TMS转换为高电平的时候,它转移到Select-DR-Scan上去。

Select-DR-Scan:

这个TAP控制器扮演一个开关的角色,在下一个TCK的上升沿TAP控制器会开始数据寄存器的扫描或者转到Select-IR-Scan的状态上面。

Capture –DR:

在Capture –DR的状态时,夹具上连接到输入PIN的测试针的值,会替换一部分当前被指令选中的部分数据寄存器。并不是所有的指令都在这个状态做任何事,一些指令可以在数据寄存器现存的数据的基础上工作,TAP控制器会在一个时钟周期内保持这种状态,然后再转移到Exit1-IR或 Shift-IR。

Shift-DR:

在Shift-DR的状态,数据寄存器就好象一个转换寄存器在TDI和TDO数据之间并从TDI转移到数据寄存器然后再通过TDO在每一个TCK的上升沿从数据寄存器中出去。数据寄存器会保持这种状态直到TMS变为高电平,然后设备会转移到Exit1-DR的状态。

Exit1-DR

在到达Exit1-DR状态后,TAP controller转移到Pause-DR 或者Update-DR在TCK下一个上升沿,转到Update-DR时,扫描的过程就结束了,当移动到Pause-DR时可以暂停TAP controller的状态进程,此时可以允许测试机调用内存。

Pause-DR

当Pause-DR状态时,它允许一个暂停来通过指令寄存器来转换数据,一种情况是TAP controller执行其他的任务时可以使用此种状态,TAP controller会保持这种状态知道TMS变为高电平,然后TAP controller会转移到Exit2-DR状态。

Exit2-DR

在到达Exit2-DR状态之后,在下一个TCK的上升沿时TAP controller会转移到Shift-DR或Update-DR。转移到Shift-DR时会从新开始扫描,转移到Update-DR时中止扫描的进程。

Update-DR

在TCK的下降沿时,Update-DR状态从boundaryscan寄存器锁住数据到boundaryscan寄存器的并联输出。在到达这个状态之后,状态设备转移到Run-Test/Idle或Select-DR-scan,当一个测试转移到Select-DR-scan时比转移到RUN-Test/Idle要快一个时钟周期,转到RUN-Test/Idle去压制ground bounce的影响是一个好办法。

Select-IR-Scan

TAPcontroller 充当一个开关的角色。在TCK下一个上升沿时,TAPcontroller开始IR扫描进程或者重置TAPcontroller到TEST-Logic-Reset状态。IR—SCAN进程放在TDI和TDO之间的指令寄存器中,并在下一个TAPcontroller指令中转换。

Capture-IR

Capture-IR状态在TCK的上升沿时从集成电路板上纳入一个逻辑电平到指令寄存器。一般都是01之类的信号,用于测试boudary-Scan 电路的完整性。其他的信号被设计员另外再特指标明或把值赋给变量,在Capture-IR状态待满一个时钟周期后,TAP controller转移到EXIT-IR或Shift-IR。

Shift –IR

在Shift –IR的状态,指令寄存器在TDI和TDO之间扮演一个转换寄存器的角色,在Capture-IR抓到的数据

在TCK的上升沿时转换到TDO并且一个新的指令从TDI转换进来。TAP controller直到TMS变为高电平才会改变状态到Exit1-IR.

Exit1-IR.

到达Exit1-IR 状态之后,在下一个TCK的上升沿时转换到Pause-IR或者Update-IR. 转移到Update-IR时中止扫描的进程。当移动到Pause-IR时可以暂停TAP controller的状态进程,此时可以允许测试机调用内存。

Pause-IR

当Pause-IR状态时,它允许一个暂停来通过指令寄存器来转换数据,一种情况是TAP controller执行其他的任务时可以使用此种状态,TAP controller会保持这种状态知道TMS变为高电平,然后TAP controller会转移到Exit2-IR状态。

Exit2-IR

在到达Exit2-IR状态之后,在下一个TCK的上升沿时TAP controller会转移到Shift-DR或Update-IR。转移到Shift-IR时会从新开始扫描,转移到Update-IR时中止扫描的进程。

Update-IR

在TCK的下降沿时,Update-IR状态latches the instruction register from the flip-flops into latches where the

instruction decodeed,一旦一个新的指令被锁住它立刻转变为当前的指令。在到达这个状态之后,状态设备转移到Run-Test/Idle或Select-IR-scan,当一个测试转移到Select-IR-scan时比转移到RUN-Test/Idle要快一个时钟周期,转到RUN-Test/Idle去压制ground bounce的影响是一个好办法。

ByPass

Bypass指令放在一个单独的单元,ByPass寄存器在TDI和TDO之间,它并不象其他的测试一样去确认元件的放置和方向,在Bypass指令执行时,元件仍然保持正常的操作。根据IEEE1149.1的标准,指令代码为1的必须解码为Bypass.

EXTEST

EXTEST指令是最有用的boundaryscan的指令,因为它允许你在对元件的逻辑核心一无所知的情况下去测试所有的输入输出和双向引脚。EXTEST指令隔离了元件的逻辑核心测试,在元件的逻辑核心之外进行测试,他测试Boundaryscan单元,引脚到板上的连接等等。EXTEST指令有三种模式:

标准-单独模式用于测试boudary 寄存器,和器件到板子上的连接情况。

内部连接模式用于测试boudary 寄存器,和连接到boundaryscan器件的电路。

簇模式用于用于测试boudary 寄存器和在boundaryscan器件和其它器件之间的电路。根据IEEE1149.1的标准,指令代码为0的必须解码为EXTEST。

Sample /preload

Sample /preload指令允许在元件正常工作的时候有有采样的输入和输出。然后Boundaryscan测试可以对那些采样数据进行分析比并从TDO输出。当Boundaryscan测试在转换采样数据并输出时,它可以通过TDI将采样数据预载到Boundaryscan寄存器中,那些信号解码到Sample /preload指令并不属于IEEE1149.1标准,他们被元件设计师所制定。

Sample /preload指令的预载功能是用来准备那些例如EXTEST的指令的,例如,假想一个芯片选择器件如下图它连接了两个ROMS并共享了一个输出BUS,在这个事例中你可以使用preload来确保芯片选择器件的输出不会同时出现高电平而导致BUS竟争。

IDCODE

IDCODE指令被放在TDI和TDO之间的寄存器中间,由于在这里面放了元件的制造信息,所以可以通过此指令来辨别WRONG PART。

USERCODE

USERCODE指令允许测试开发人员登入一个32位的代码从而可以被转换并输出用于校验。这个指令是根据有设计人员的定义来定的,并且它依赖于身份辨别寄存器的存在而存在。

Intest:

Intest对元件的内部逻辑进行静态的测试,在进行静态的测试的时候,这些测试并不是在元件固有的测试速度下进行的,而是在TCK的单步测试模式下进行的。这种测试不会受元件的拓扑结构的影响。它的测试结果从TDO输出。

RunBIST:

RUNBIST是使元件进行自测的指令,当元件执行BIST时,TAP控制器处于RUN_TEST/IDLE状态。它测试的结果从TDO输出。同样这个测试不会受元件的拓扑结构的影响。

CLamp:

CLAMP是一个设计人员定义的代码,它能设置所有的系统逻辑输出和双向引脚从Boundary-scan寄存器中锁住一个常量值。在此指令执行的时候,处于TDI和TDO之间的ByPass寄存器在SHIFT-DR控制的状态。

HIGHZ:

HIGHZ是一个设计人员定义的代码,它能设置所有的系统逻辑输出和双向引脚到一个高阻状态。这就能允许测试机在不损坏元件的前提下去驱动信号到元件的输出和双向引脚上。在此指令执行的时候,处于TDI和TDO之间的ByPass寄存器在SHIFT-DR控制的状态。

BOUNDARY-SCAN 的软件

In-circuit Boundary-Scan

一种使用Boundary-Scan技术的方式是使用BSDL INFORMATION 去创建一个传统的在线库测试。In-circuit

Boundary-Scan,扫描端口驱动界面(SPDIF)是HP3070测试机所具有的标准的功能。它为单个的

Boundary-Scan器件创建测试,不能创建链式的Boundary-Scan测试。和许多的数字测试一样,你在做n-circuit

Boundary-Scan测试时要首先确认你的测试点数是否够。

HP interconnectPlus software:

一种使用链式的Boundary-Scan测试软件包,可生成测试类型如下:

BSDL源文件:

BSDL是一种使用IEEE1149.1标准的语言,同时它也是VLSI语言的一个分支。在开发boundary scan测试时要先用BSDL compiler来验证一下语法有无错误。

Boundary scan测试技术

In-circuit boundary scan测试

SPDIF 界面:

Reset Tap: 生成十个向量来保持TMS为高电平并持续五个时钟周期。这样就把TAP控制器放在TEST-LOGIC-RESET状态并与其它的状态隔离开来。

Bypass Test: 执行Bypass 指令,能用于快速发现TAP控制器在运行时的问题。

ID code Test:执行IDCODE指令,假如器件没有ID信息,则执行BYPASS指令。

User Code Test:执行User Code Test指令,假如器件没有User Code Test信息,则什么也不执行。

Parallel toggle:产生锁住所有输入输出脚状态的向量,但是它受限于那些相互之间两两短路和连接到电源脚的PINS。

Running Toggle:类似于Parallel toggle,但是它能对输入PIN实现持续的锁住,虽然测试速度会慢一店,但是这样会减小板子拓朴结构对测试的影响。

Toggle Pins:同Running Toggle,只是精确到PIN脚。

EXTEST:你可以定义输入,输出,双向脚的值,对于调试来说,是非常有用的。

Simple setup:生成set-up-only测试,它会允许你指定你元件的逻辑家族,自动生成一个set-up-only测试。

Setup & Disable:同Simple setup一样,另外它还会生成元件的DISABLE信息,很有用的。

Verify BSDL:验证你的BSDL有无错误。

HP interconnectPlus测试:

Integrity Test: 通过指令寄存器来测试从TDI到TDO路径的数据的完整性。它用来在Capture-IR指令后,比

较指令寄存器中的内容和从TDO中出来的内容。由于在指令寄存器捕获的最小有效信号为0,1所以从TDO中出来的信号必定是1,0,如下图显示:

假如有身份验证寄存器存在的话,Integrity Test会执行IDCODE指令,假如没有身份验证寄存器存在的话,Integrity Test会执行BYPASS指令,来验证BYPASS寄存器的好坏。

Power-short 测试:用来检查UNNAILED的Boundary scan Nodes与其他类型的nailed Nodes之间的短路。它会参考board_xy文件的信息并自动生成测试。

Connect 测试:用来查找元件的open的故障,一次只能找一个元件,当一个元件在测试的过程中,其它的元件会处于BYPASS的状态,如下图U3处于connect测试的状态中:它只会测试那些在输

入和输出的引脚上有固定的探针的元件,并且它会自动生成分离的两段测试为那些双向引脚,那就是第一次把他们当成DRIVER然后再把他们当成RECEIVER。

inter Connect 测试:用来测试元件在boundary scan 链上的连接。

bus wire 测试:用来验证双向PIN的测试,会生成不同的向量,先把他们当DRIVERS来测再把他们当RECEIVERS来测。bus wire 测试会一次打开一个驱动去检查开路,随后它会测试所有的DRIVERS的运行情况。它会自动生成测试只要在链上有BUSDRIVERS。

Silicon-Nails 测试: 用于测试那些与Boundaryscan元件相连的传统数字器件。Boundaryscan软件使用Boundaryscan寄存器去向那些非Boundaryscan元件传送和接受信号,这对那些不能下探针的元件是一种很好的测试方法。

Boundaryscan Disabling: 防止其他的Boundaryscan元件在测试的时候有输出信号干扰,此功能选项可在IPG中打开。当一个元件被Disable掉的时候,TAP控制器处于Run- Test/Idle的状态,为此,利用GPRELAY 把TMS短接到地是一个好方法。

当今,微电子技术已经进入超大规模集成电路(VLSI)时代。随着芯片电路的小型化及表面封装技术(SMT)和电路板组装技术的发展,使得传统测试技术面临着巨大的挑战。在这种情况下,为了提高电路和系统的可测试性,联合测试行动小组(JTAG)于1987年提出了一种新的电路板测试方法--边界扫描测试,并于1990年被IEEE接纳,形成了IEEE1149.1标准,也称为JTAG标准[1]。这种技术以全新的"虚拟探针"代替传统的"物理探针"来提高电路和系统的可测性。由于JTAG标准的通用性很好,现在许多IC公司都提供了支持边界扫描机制的IC芯片,甚至部分FPGA和CPLD芯片也采用了这一技术。

本文介绍支持JTAG标准的IC芯片结构,并以Xilinx公司的两块xc9572_pc84芯片为例,探讨并利用边界扫描技术控制IC芯片处于某种特定功能模式的方法,并且针对IC芯片某种特定的功能模式设计该芯片的JTAG控制器。

1支持JTAG标准的IC芯片结构

边界扫描技术的核心就是在IC芯片的输入输出引脚与内核电路之间设置边界扫描结构。JTAG标准定义了一个4-wire串行总线[2],通过这四条测试线访问边界扫描单元,可以达到测试芯片内核与外围电路的目的。图1示出了支持JTAG标准的IC芯片结构。图中,扫描结构由测试存取通道(TAP)、边界扫描寄存器(BSR)、TAP控制器、指令寄存器(IR)和辅助寄存器等组成。

1.1 TAP

TAP是由4-wire串行测试线组成的测试存取通道,JTAG标准定义的所有操作都由这四条测试线来控制。这四条测试线分别是:测试时钟输入线(TCK),测试方式选择输入线(TMS),测试数据输入线(TDI),测试数据输出线(TDO)。

1.2 TAP控制器

TAP控制器是边界扫描测试的核心控制器,具有一个16状态的有限状态机。它与TCK信号同步工作,并响应TMS信号。在TCK信号和TMS信号的控制下,TAP控制器可以选择使用指令寄存器扫描还是数据寄存器扫描,以及选择用于控制边界扫描测试的各个状态。图2描述了TAP控制器的状态转换全过程[3]。

无论当前状态如何,只要TMS保持5个TCK时钟为高电平,TAP控制器都会回到Test_Logic_Reset状态,使测试电路不影响IC芯片本身的正常逻辑。需要测试时,TAP控制器跳出该状态,选择数据寄存器扫描(Select_DR_Scan)或选择指令寄存器扫描(Select_IR_Scan)进入图2的各个状态。一个标准的测试过程如下:TAP控制器在Capture_IR状态捕获指令信息,经过Shift_IR状态移入新指令,新指令经过Update_IR状态成为当前指令;紧接着,当前指令在Select_DR_Scan状态选择相应的测试数据寄存器,在Capture_DR状态捕获前一测试向量的响应向量,在Shift_DR状态移出该响应向量,同时移入下一测试向量,在Update_DR状态将新的测试量并行加载到相应的串行数据通道,直到移入最后一个测试向量为止。其中,Pause_DR状态和Pause_IR状态暂停数据移位状态;而四个Exit状态是不稳定状态,它们为状态转换提供灵活性。

1.3 BSR

BSR是边界扫描技术的核心,它构成边界扫描链,其中的每一个边界扫描单元(BSC)都是由触发器Q、多路选择开关mux组成。图3示出了JTAP标准中BC_1类型的BSC的结构[3]。

在图3中,SI为BSC的串行输入端,连接上一个器件(BSC)的串行输出端SO,依次相连便构成边界扫描链。该扫描链的首端接TDI引脚,末端接TDO引脚。当MODE为0时,芯片工作在正常模式下。当芯片工作在测试模式时,测试数据在移位信号(SHIFT=1)的控制下,通过SI端进入到多路选择器1(MUX1)中,通过SO端进入下一个BSC的SI端;当芯片工作在捕获方式时(SHIFT=0),触发器Q1将捕获BSR并行输入端(DI)的数据,送入SO端,在扫描链中传递捕获的数据,并在TDO回收数据,以此来检测故障的存在并且定位故障所在的位置。当MODE为1时,芯片工作在更新方式下,Q1中的数据在更新信号(UPDATE)的作用下,进入到多路选择器2(MUX2)中,通过BSR的并行输出端(D0)进入芯片的内核中。

1.4 IR

IR是向各个数据寄存器发出各种操作码并确定其工作方式的指令寄存器,图4示出了一种IR单元的结构[4]。由图4可以看出,IR单元是由一个触发器Q1和一个锁存器Q2构成的。CAPTURE DATE信号控制IR装载指令,SHIRFT IR信号控制指令在IR中的移位;CLK IR信号是从TCK获得的时钟信号,用于为BSR的捕

获操作、移位操作提供时钟信号。UPDATE IR信号用于将当前指令装入锁存器Q2,以决定将要执行的操作模式和将要用到的测试数据寄存器的类别。

1.5辅助寄存器

辅助寄存器包括器件标志寄存器和旁路寄存器,器件标志寄存器用于存储器件制造商、器件序列号和器件版本号等信息,借助它可以辨别板上器件的制造商,还可以通过它检测是否已将正确的器件安装在电路板的正确位置上。旁路寄存器用于将边界扫描单元直接旁路,把扫描数据直接传递给下一个扫描器件。

2基于边界扫描技术的数字系统测试

基于边界扫描技术的数字系统测试包括两个方面,一是对IC芯片电路功能测试及系统互连测试;二是利用边界扫描技术控制IC芯片处于某种特定的功能模式,以方便电路系统的设计和调试。本文主要论述后者。

2.1测试系统组成

测试系统由主机(PC机)、测试仪和PCB实验板组成,测试仪通过标准口(RS232)与PC机连接,通过串行标准信号电缆与PCB板上的测试存取通道相连,如图5所示。

PCB板由Xilinx公司的两块xc9572 pc84芯片互连组成,芯片符合IEEE1149.1的JTAG接口标准,具有84个外部引脚、4个JTAG引脚、5个Vcc引脚、6个Vss引脚、69个双向数据输入/输出引脚,xc9572系列芯片未实现异步复位信号引脚TRST,电缆不需要提供这一信号线。该器件的边界扫描寄存器由216个边界扫描单元组成,其中9个单元是内部属性的单元,其余207个单元组成69组边界扫描单元组[5]。

2.2设计分析与实现

2.2.1设计内容与分析

在图5所示的测试系统中,要求两片IC芯片分别实现不同功能的数据处理。为了对存储器实现分时访问,可以设定其中的一片xc9572_pc84芯片(IC2)受到另一片xc9572_pc84芯片(IC1)的控制,使IC2进入高阻模式(高阻模式是JTAG标准中推荐的任选模式之一),用以对存储器的访问屏蔽一段时间,此时受控芯片E2的所有输出管脚都将处于浮空状态即高阻态。

从图2描述的TAP控制器的状态机可知,通过改变IC芯片自身的输入输出状态,就可以进行边界扫描测试或利用JTAG接口使IC芯片处于某个特定的功能模式。

支持JTAG标准的芯片都附有特定的BSDL(Boundary Scan Description Language)描述文件[3]。BSDL语言是硬件描述语言(VHDL)的一个子集。它对该芯片的边界扫描特性进行描述,用来沟通厂商、用户与测试工具之间的联系,为自动测试图形生成工具、检测特定的电路板提供相关的信息;在BSDL文件的支持下可生成由JYAG标准定义的测试逻辑。BSDL文件可与软件工具结合起来,用于测试生成、结果分析和故障诊断。

通过对xc9572 pc84芯片的BSDL部分文件[6]的分析可知:

通过该部分代码可得出,控制该芯片进入高阻模式需要写入指令寄存器的控制码为11111100。此时应选择旁路寄存器将边界扫描寄存单元旁路,以使扫描数据直接传递给下一个扫描器件。

2.2.2设计实现

根据上面的分析可以得出,要使芯片从正常工作模式下受控进入JTAG高阻状态需要经过以下五个步骤:

① 复位。由于Xilinx 9572_pc84芯片不具备TRST管脚,而且芯片正常工作时TMS持续为高电平,所以控制器进入复位状态需要使TMS端接收低电平信号,控制TAP控制器完成复位操作。

②进入Shift_IR状态。由TAP控制器状态机可以看出,当持续5个TCK上升沿使TMS端接收到01100时,则进入Shift_IR状态。

③将指令码写入指令寄存器。在Shift_IR状态,通过TDI将高阻状态指令码11111100写入指令寄存器,需要5个TCK周期,此时TMS需保持4个周期低电平。

④进入Exit1_IR状态。在Shift_IR状态的第5个TCK的上升沿,使TMS=1,进入Exit1_IR状态。

⑤进入Update_IR状态。在进入Exit1_IR状态后,使TMS=1,进入Update_IR状态。此时芯片进入高阻状态。

按照上述步骤,采用数字系统中状态机的设计思想[5],用VHDL语言编写出相应的功能块,控制xc9572_pc84芯片(IC2)进入JTAG高阻状态(限于篇幅,VHDL源程序未列出),就可以进行边界扫描测试了。将VHDL源程序经过编译、仿真后可得到如图6所示的JTAG控制时序波形图。

JTAG测试技术是一种新的测试技术,这种技术是建立在具有JTAG标准接口的芯片之上的。由于这种芯片内置一些预先定义好的功能模式,所以可以通过边界扫描通道使芯片处于某个特定的功能模式,以提高系统控制的灵活性并便于系统设计。本文通过设计实例,详细介绍了利用边界扫描技术控制IC芯片处于高阻模式的思路和方法,并且通过实验实现,达到了预期目标。基于边界扫描技术的测试机制在产品全寿命周期的不同阶段都可以共享,因此利用边界扫描技术可以方便地对电路系统进行调试、测试,显著地降低了产品的开发周期和费用。

IEEE 1149.1 标准背景

边界扫描/JTAG,即 IEEE/ANSI 标准1149.1_1190,是一套设计规则,可以在芯片级、板级和系统级简化测试、器件编程和调试。该标准是联合测试行动小组(JTAG)(由北美和欧洲的几家公司组成)开发的。IEEE

1149.1标准最初是做为一种能够延长现有自动测试设备(ATE)寿命的片上测试基础结构而开发的。可以从Texas Instruments 边界扫描页面获得更多信息。利用该标准整合测试设计,允许完全控制和接入器件的边界引脚,而无需不易操作的或其它测试设备。每个符合JTAG要求的器件的输入/输出引脚上都包括一个边界单元(如图1所示)。正常情况下,它是透明的和停止运行的,允许信号正常通过。借助于测试模式下的器件,您可以采集输入信号,以备后期分析之用;输出信号可以影响板上的其它器件。

简而言之,IEEE 1449.1 标准定义了一个串行协议。无论封装约束怎样,该协议都要求每个符合标准的器件上要有4个(也可以是5个)引脚。这些引脚定义了测试接入端口(TAP),以便实现片上测试基础设施的

操作,从而确保:

印刷电路板上的所有器件安装正确并处于正确的位置。

器件间的所有互连都与设计所描述的一致。

引脚是:

TCK - 这是一个时钟信号,用于同步1149.1内部状态机操作。

TMS - 1149.1内部状态机模式选择信号。该信号在TCK的上升沿被采样,用来决定状态机的下一个状态。

TDI - 1149.1数据输入引脚。当内部状态机处于正确状态时,信号在TCK的上升沿被采样,并被移入器件的测试或编程逻辑

TDO - 1149.1数据输出引脚。当内部状态机处于正确状态时,该信号代表从器件测试或编程逻辑移出的数据位。输出数据在TCK的下降沿有效。

TRST(可选) - 1149.1异步复位引脚。当置低时,内部状态机立即进入复位状态。由于该引脚是可选的,而通常为器件增加引脚会带来额外的成本,因此很少使用。此外,内部状态机(如标准所定义的)已经明确定义有同步复位机制。

TAP引脚驱动一个16-状态控制器(状态机)。该状态机的状态根据TCK上升沿时TMS信号的值进行状态转换。 查看问答数据库内的状态机图解。

图中位于弧线旁边的'0'和'1'表示TCK上升沿时TMS信号的逻辑状态。

1149.1标准规定仅在Shift-DR或Shift-IR状态时TDI有效并被移入(TDO有效并被移出)。 Shift-IR状态选择TDI和TDO之间的器件指令寄存器。根据选择的指令,不同的数据寄存器被激活。在Shift-DR状态时,TDI和TDO之间与先前输入的指令相对应的数据寄存器被选中。缺省数据寄存器是强制性的1位旁路寄存器。

外部边界扫描描述语言(BSDL)文件规定了任何器件的边界扫描逻辑的特性和特征。这些文件由IC制造商提供,并被用来生成符合IEEE 1149.1标准的器件操作的算法描述。

多个边界扫描器件以菊花链形式串接起来。每个器件共享同样的TCK和TMS信号。 一个器件的TDO连接到下一个器件的TDI。由于所有的器件采用同样的TCK和TMS,因此所有器件同时且同步地顺序转换TAP控制器状态。因此,所有的器件都处于同一个TAP控制器状态下。当将数据(在 Shift-IR 或 Shift-DR 状态)移到边界扫描链中时,所有器件都有寄存器在内部连接在其 TDI 和 TDO 引脚之间。结果很明显,就是单个固定长度移位寄存器从系统 TDI 引脚转到系统 TDO。

返回页首

IEEE 1532配置和编程标准

利用先进PLD和配置PROM设计的新系统需要最好的编程和配置技术。IEEE 1532标准所制定的技术规范使设计人员可同时编程多片器件,利用增强的芯片功能最小化编程时间,同时生产出更容易维护的、功能强大的系统。通过提供一个功能强大的和可靠的编程环境,这一新标准为更方便的硬件升级铺平了道路。

IEEE 1532标准简化了任何合格的PLD的配置,即使是在远程环境下也是如此。其统一的编程方法几乎消除了任何器件编程不确定性,并可保证正确的系统启动顺序(包括在掉电故障后)。它允许用户容易地实现现场诊断和新功能,从而延长产品生命周期并降低现场维护成本。

编程和算法数据分开保存。可以在不影响另一个的情况下改变另一个,这样就消除了每次设计变更之后进行重新编译的必要。边界扫描工具和自动测试设备可以将编程效率最大化,还能将编程时间降至最短,从而降低了生产成本。

IEEE 1532标准具有明确定义的可提供增强功能的系统级指令,如有些指令可支持简单地实现同时编程,从而可进一步缩短编程时间。通过利用这些简单的指令,设计人员可以缩短产品上市时间并集中精力进行系统特性和设计优化,而不是花费大量时间纠缠配置问题。

返回页首

器件和软件支持

下列器件和产品系列可充分支持和利用IEEE 1532标准(参考IEEE Std 1532 BSDL文件):

CoolRunner?-II

Spartan? 系列 FPGA

Virtex? 系列 FPGA

System ACE?

Xilinx 还以免费下载的方式推出了世界上首个 IEEE 标准1532编程引擎 - J Drive。

自动测试设备(ATE)、第三方工具和在线编程器参与者

主要的电信和消费类电子公司合作制定了能够在各种不同的可编程器件上满足他们的需要的标准。主要的自动测试设备制造商(Agilent和Teradyne)、边界扫描工具供应商(ASSET Intertech、Corelis、Intellitech和JTAG Technologies)和在线编程器供应商(Data I/O和BP Microsystems)参与了IEEE-STD-1532的开发。

为了方便您的使用,我们提供了ATE和边界扫描(JTAG)工具及合作伙伴列表。

返回页首

串行矢量格式(SVF)

串行矢量格式(SVF)规范是基于边界扫描的刺激信息交换的标准。虽然它可以自由分配,但它不是开放的标准。目前,Asset Intertech拥有该标准的版权。

JEDEC

JEDEC编程文件 - 更正式的名称是用于在数据准备系统和可编程逻辑器件编程器间进行数据传输的JESD3-C标准数据传输格式。可从JEDEC网站下载该文件。

JEDEC链描述文件 - 更正式的名称是用于链描述文件的JESD32 标准。 这一文件格式描述串行链中任意的可编程器件连接。它试图用同一种语言均衡非1149.1类和1149.1类串行链的描述。但是,它不能描述复杂的边界扫描连配置,如分层或多支路架构。

BSDL

边界扫描描述语言(BSDL)标准1149.1b 用来描述 JTAG 1149.1 边界扫描兼容器件中的 1149.1 TAP 控制器和边界扫描寄存器。 BSDL还做为VHDL标准的子集实现。Xilinx 广泛地测试和验证了每个BSDL文件。

JTAG

JTAG是英文“Joint Test Action Group(联合测试行为组织)”的词头字母的简写,该组织成立于1985 年,是由几家主要的电子制造商发起制订的PCB 和IC 测试标准。JTAG 建议于1990 年被IEEE 批准为IEEE1149.1-1990 测试访问端口和边界扫描结构标准。该标准规定了进行边界扫描所需要的硬件和软件。自从1990 年批准后,IEEE 分别于1993 年和1995 年对该标准作了补充,形成了现在使用的IEEE1149.1a-1993 和IEEE1149.1b-1994。JTAG 主要应用于:电路的边界扫描测试和可编程芯片的在系统编程。

JTAG也是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。相关JTAG引脚的定义为:TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。GND

TI还定义了一种叫SBW-JTAG的接口,用来在引脚较少的芯片上通过最少的利用引脚实现JTAG接口,它只有两条线,SBWTCK,SBWTDIO。实际使用时一般通过四条线连接,VCC,SBWTCK,SBTDIO,GND,这样就可以很方便的实现连接,又不会占用大量引脚。

JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(Test Access Port测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP(In-System

Programmable;在线编程),对FLASH等器件进行编程。

JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。

在硬件结构上,JTAG 接口包括两部分:JTAG 端口和控制器。与JTAG 接口兼容的器件可以是微处理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC 或其它符合IEEE1149.1 规范的芯片。IEEE1149.1

标准中规定对应于数字集成电路芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。它将JTAG 电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。边界扫描寄存器电路仅在进行JTAG 测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。

JTAG的一些说明

通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个模块。

一个含有JTAG Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。

上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。

例如下载程序到RAM功能。了解SOC的都知道,要使用外接的RAM,需要参照SOC DataSheet的寄存器说明,设置RAM的基地址,总线宽度,访问速度等等。有的SOC则还需要Remap,才能正常工作。运行Firmware时,这些设置由Firmware的初始化程序完成。但如果使用JTAG接口,相关的寄存器可能还处在上电值,甚至时错误值,RAM不能正常工作,所以下载必然要失败。要正常使用,先要想办法设置RAM。在ADW中,可以在Console窗口通过Let 命令设置,在AXD中可以在Console窗口通过Set命令设置。

下面是一个设置AT91M40800的命令序列,关闭中断,设置CS0-CS3, 并进行Remap,适用于AXD(ADS带的Debug)

setmem 0xfffff124,0xFFFFFFFF,32 ---关闭所有中断

setmem 0xffe00000,0x0100253d,32 ---设置CS0

setmem 0xffe00004,0x02002021,32 ---设置CS1

setmem 0xffe00008,0x0300253d,32 ---设置CS2

setmem 0xffe0000C,0x0400253d,32 ---设置CS3

setmem 0xffe00020,1,32 ---Remap

如果要在ADW(SDT带的DEBUG)中使用,则要改为:

let 0xfffff124=0xFFFFFFFF ---关闭所有中断

let 0xffe00000=0x0100253d ---设置CS0

let 0xffe00004=0x02002021 ---设置CS1

let 0xffe00008=0x0300253d ---设置CS2

let 0xffe0000C=0x0400253d ---设置CS3

let 0xffe00020=1 ---Remap

为了方便使用,可以将上述命令保存为一个文件, 在Console窗口输入 ob 即可执行。

使用其他debug,大体类似,只是命令和命令的格式不同。

设置RAM时,设置的寄存器以及寄存器的值必须和要运行程序的设置一致。一般编译生成的目标文件是ELF格式,或类似的格式,包含有目标码运行地址,运行地址在Link时候确定。Debug下载程序时根据ELF文件中的地址信息下载程序到指定的地址。如果在把RAM的基地址设置为0x10000000, 而在编译的时候指定Firmware的开始地址在0x02000000, 下载的时候,目标码将被下载到0x02000000,显然下载会失败。

通过JTAG下载程序前应关闭所有中断,这一点和Firmware初始化时关闭中断的原因相同。在使用JTAG接口的时候,各中断的使能未知,尤其是 FLASH里有可执行码的情况,可能会有一些中断被使能。使用JTAG下载完代码,要执行时,有可能因为未完成初始化就产生了中断,导致程序异常。所以,需要先关闭中断,一般通过设置SOC的中断控制寄存器完成。

使用JTAG写Flash。在理论上,通过JTAG可以访问CPU总线上的所有设备,所以应该可以写FLASH,但是FLASH写入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,编程命令不同,而且块的大小,数量也不同,很难提供这一项功能。所以一般Debug不提供写Flash功能,或者仅支持少量几种Flash。

目前就我知道的,针对 ARM,只有FlashPGM这个软件提供写FLASH功能,但使用也非常麻烦。AXD,ADW都不提供写FLASH功能。我写Flash的方法时是,自己写一个简单的程序,专门用于写目标板的FLASH,利用JTAG接口,下载到目标板,再把要烧写的目标码装成BIN格式,也下到目标板(地址和烧 FLASH的程序的地址不同),然后运行已经下载的烧FLASH的程序。使用这种方式,比起FlashPGM的写Flash,速度似乎要快一些。

关于简单JTAG电缆。

目前有各种各样简单JTAG电缆,其实只是一个电平转换电路,同时还起到保护作用。JTAG的逻辑则由运行在PC上的软件实现,所以在理论上,任何一个简单 JTAG电缆,都可以支持各种应用软件,如Debug等。我就曾使用同一个JTAG电缆写Xilinx CPLD,AXD/ADW调试程序。关键再于软件的支持,大多数软件都不提供设定功能,因而只能支持某种JTAG电缆。

关于简单JTAG电缆的速度。

JTAG 是串行接口,使用打印口的简单JTAG电缆,利用的是打印口的输出带锁存的特点,使用软件通过I/O产生JTAG时序。由JTAG标准决定,通过JTAG 写/读一个字节要一系列的操作,根据我的分析,使用简单JTAG电缆,利用打印口,通过JTAG输出一个字节到目标板,平均需要43个打印口I/O, 在我机器上(P4

1.7G),每秒大约可进行660K次 I/O 操作,所以下载速度大约在660K/43, 约等于15K Byte/S. 对于其他机器,I/O速度大致相同,一般在600K ~ 800K.

关于如何提高JTAG下载速度。

很明显,使用简单JTAG电缆无法提高速度。要提高速度,大致有两种办法,

1。使用嵌入式系统提供JTAG接口,嵌入式系统和微机之间通过USB/Ethernet相连,这要求使用MCU。

2。使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微机之间使用EPP接口(一般微机打印口都支持EPP模式),EPP接口完成微机和CPLD/FPGA之间的数据传输,CPLD/FPGA完成JTAG时序。

这两种方法本人都实现过。第一个方法可以达到比较高的速度,实测超过了200KByte/S(注意:是Byte,不是Bit);但是相对来说,硬件复杂,制造相对复杂。第二种相对来说,下载速度要慢一些,最快时达到96KByte/S,但电路简单,制造方便,而且速度可以满足需要。第二种方案还有一个缺点,由于进行I/O操作时,CPU不会被释放,因此在下载程序时,微机CPU显得很繁忙。

关于简单JTAG电缆

目前有各种各样简单JTAG电缆,其实只是一个电平转换电路,同时还起到保护作用。JTAG的逻辑则由运行在PC上的软件实现,所以在理论上,任何一个简单 JTAG电缆,都可以支持各种应用软件,如Debug等。可以使用同一个JTAG电缆写Xilinx CPLD,AXD/ADW调试程序。关键再于软件的支持,大多数软件都不提供设定功能,因而只能支持某种JTAG电缆。

关于简单JTAG电缆的速度

JTAG 是串行接口,使用打印口的简单JTAG电缆,利用的是打印口的输出带锁存的特点,使用软件通过I/O产生JTAG时序。由JTAG标准决定,通过JTAG 写/读一个字节要一系列的操作,根据我的分析,使用简单JTAG电缆,利用打印口,通过JTAG输出一个字节到目标板,平均需要43个打印口I/O, 在我机器上(P4 1.7G),每秒大约可进行660K次 I/O 操作,所以下载速度大约在660K/43, 约等于15K Byte/S. 对于其他机器,I/O速度大致相同,一般在600K ~ 800K.

JTAG接口有四个引脚。以JTAG的术语来说,这些引脚组成了测试访问端口TAP。这些引 脚是:

? TMS: 测试模式选择。此引脚用来实现TAP 控制器各个状态之间的切换。

? TCK: 测试时钟。JTAG 操作是与TCK 同步的。

? TDI:测试数据输入--需要移位到指令寄存器或数据寄存器(扫描链)的串行输入数据。

? TDO:测试数据输出-- 自指令寄存器或数据寄存器串行移出的数据。

什么是ISP?

ISP是一种通用的程序下载方式,AVR单片机都有ISP下载接口。可以通过ISP下载线或者STK500把程序下载到单片机中。

ISP下载线成本低廉,制作简单,一个并口ISP下载线只需几十元即可得到。开发工具成本低也是AVR单片机的优势之一。

JTAG与ISP的区别和联系

区别:JTAG可以调试程序,而ISP只能下载程序。

联系:同作为AVR程序下载工具,都能把程序从电脑下载到单片机中。都能对芯片的熔丝位和锁定位进行编程。

JTAG调试与普通软件仿真的区别和联系

联系:都可以在计算机调试程序终端看到程序的运行效果,都可以设置断点,单步运行,进入循环,跳出循环,连续运行等操作。还能实时观察各寄存器的值,IO口状态等。

区别:软件仿真,用的是计算机来模仿单片机运行,不是全真的环境,很多时候会出现偏差甚至错误。而用JTAG在线调试,程序本身在单片机内运行,完全真实的硬件环境,更准确的反映程序运行的实际情况,有助于大型程序的调试。

1 JTAG原理分析

简单地说,JTAG的工作原理可以归结为:在器件内部定义一个TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试和调试。首先介绍一下边界扫描和TAP的基本概念和内容。

1.1 边界扫描

边界扫描(Boundary-Scan)技术的基本思想是在靠近芯片的输入/输出引脚上增加一个移位寄存器单元,也就是边界扫描寄存器(Boundary-Scan Register)。

当芯片处于调试状态时,边界扫描寄存器可以将芯片和外围的输入/输出隔离开来。通过边界扫描寄存器单元,可以实现对芯片输入/输出信号的观察和控制。对于芯片的输入引脚,可以通过与之相连的边界扫描寄存器单元把信号(数据)加载到该引脚中去;对于芯片的输出引脚,也可以通过与之相连的边界扫描寄存器“捕获”该引脚上的输出信号。在正常的运行状态下,边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器提供了一种便捷的方式用于观测和控制所需调试的芯片。另外,芯片输入/输出引脚上的边界扫描(移位)寄存器单元可以相互连接起来,任芯片的周围形成一个边界扫描链(Boundary-Scan Chain)。边界扫描链可以串行地输入和输出,通过相应的时钟信号和控制信号,就可以方便地观察和控制处在调试状态下的芯片。

1.2 测试访问口TAP

TAP(Test Access Port)是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAP控制器(TAP Controller)来完成的。下面先分别介绍一下TAP的几个接口信号及其作用。其中,前4个信号在IEEE1149.1标准里是强制要求的。

◇TCK:时钟信号,为TAP的操作提供了一个独立的、基本的时钟信号。

◇TMS:模式选择信号,用于控制TAP状态机的转换。

◇TDI:数据输入信号。

◇TDO:数据输出信号。

◇TRST:复位信号,可以用来对TAP Controller进行复位(初始化)。这个信号接口在IEEE 1149.1标准里并不是强制要求的,因为通过TMS也可以对TAP Controller进行复位。

◇STCK:时钟返回信号,在IEEE 1149.1标准里非强制要求。

◇DBGRQ:目标板上工作状态的控制信号。在IEEE 1149.1标准里没有要求,只是在个别目标板(例如STR710)中会有。

简单地说,PC机对目标板的调试就是通过TAP接口完成对相关数据寄存器(DR)和指令寄存器(IR)的访问。

系统上电后,TAP Controller首先进入Test-LogicReset状态,然后依次进入Run-Test/Idle、Select-DR-

Scan、Select-IR-Scan、Capture-IR、Shift-IR、Exitl-IR、Update-IR状态,最后回到Run-Test/Idle状态。在此过程中,状态的转移都是通过TCK信号进行驱动(上升沿),通过TMS信号对TAP的状态进行选择转换的。其中,在Capture-IR状态下,一个特定的逻辑序列被加载到指令寄存器中;在Shift-IR状态下,可以将一条特定的指令送到指令寄存器中;在Update-IR状态下,刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后,系统又回到Run-Test/Idle状态,指令生效,完成对指令寄存器的访问。当系统又返回到Run-Test/Idle状态后,根据前面指令寄存器的内容选定所需要的数据寄存器,开始执行对数据寄存器的工作。其基本原理与指令其存器的访问完全相同,依次为Select-DR-Scan、Capture-DR、Shift-D、Exit1-DR、Update-DR,最后回到Run-Test/Idle状态。通过TDI和TDO,就可以将新的数据加载到数据寄存器中。经过一个周期后,就可以捕获数据寄存器中的数据,完成对与数据寄存器的每个寄存器单元相连的芯片引脚的数据更新,也完成了对数据寄存器的访问。

目前,市场上的JTAG接口有14引脚和20引脚两种。其中,以20引脚为主流标准,但也有少数的目标板采用14引脚。经过简单的信号转换后,可以将它们通用。

下面通过对JD44B0X实验开发板的简易JTAG的基本原理进行分析,以及对JD44B0X和STR710试验开发板主板的JTAG原理进行对比,进一步阐述JTAG的工作原理。JD44B0X实验开发板的简易JTAG的原理图如图1所示。

图1中,74LS244为三态输出的8组缓冲器和总线驱动器,其功能如表1所列。

由表1可知,在JD44B0X实验板的调试过程中,这款简易JTAG的主要作用就是将PC机发出的电信号与实验板的电信号进行匹配,以实现驱动目标板的功能。

STR710和JD44B0X主板的JTAG原理图如图2和图3所示。

通过图2和图3的对比可以发现,虽然所用的仿真器有很大的差别,但是,实际上忽略一些上下拉电阻以及保护电容(这些电阻、电容对于电路功能没有意义),它们的基本原理图是十分相似的,唯一的差别就在于对RTCK信号(用于测试时钟返回)和DBGRQ信号(用于设置目标板工作状态)的处理。实际上,在IEEE

1149.1标准中这两个信号都不是强制要求的。因此,在分析仿真器(JTAG)的工作原理时完全可以忽略这两个信号的情况,而仅对IEEE 1149.1标准中强制要求的4个信号进行分析。

2 仿真器与简易JTAG的性能对比

2.1 仿真器硬件连接

PC机配置:1.66 GHz,256 MB内仔。

调试软件:ADS1.2。

目标板:JD44B0X。

完成任务:文件的下载。

硬件连接如图4所示。通过主机的并口与仿真器相连接,再将仿真器与目标板的JTAG调试接口连接。

2.2 性能对比

如表2所列,虽然通过不同的调试代理所需的下载时间有所不同,但是两种仿真器所存在的性能差异仍然很明显。在选刚简易JTAG下载文件的过程中,效率最高的调试代理所需的时间仍将近是仿真器的6倍,这就是仿真器的优势所在。性能的提高必然要付出更多的代价,对开发者来说这个代价就是成本。经过市场的考察,仿真器的价格一般在千元左右,而简易JTAG的价格一般在百元左右,也就是存在将近10倍的差别。另外,还需要考虑的就是其兼容性。兼容性包括与目标板的兼容和与调试代理的兼容。在与目标板的兼容方面,后面的内容中会有详细说明;在与调试代理的兼容方面也有所反映。简易JTAG能够与多个调试代理兼容,而仿真器只能使用其自带的调试代理,具有一定的局限性。

2.3 原因分析

既然所有JTAG的基奉原理都是一样的,为什么这两种仿真器的速度会存在如此大的差异,而且并不是所有的仿真器都是通用的呢?

首先介绍一下 ARM7扫描链架构,如图5所示。

与简易JTAG比较,在扫描过程中,STR710的仿真器为ARM7TDMI添加了一个专门的指针通道以及相应的存储空间store-multiple(STM)。因此在调试状态下,仿真器不再利用系统除了边界扫描寄存器外的任何其他资源,而是通过JTAG-style接口直接获取系统的状态信息,对系统状态进行观测以及调试,进而大大提高调试速度。

在STR710目标板中,ARM7TDMI可以通过外部信号和内部电路模块(ICE)进入调试状态。当目标板一旦进入调试状态后,内核就将其与存储器分离开来,这样内核就可以保证在不影响系统正常运作的状态下对系统的状况进行监测和调试。同时,ARM7TDMI内部状态的检测是通过JTAG-style接口进行的,这个接口允许指令不通过数据线直接进入到内核的扫描通道。这样在调试状态下,STM就可以直接嵌入到指令通道并存储ARM7TDMI寄存器的内容,在不影响系统工作的情况下将这些内容移位出来,使仿真器获得目标板的状态信息。

与仿真器比较,简易JTAG完成的工作就要少得多。它只是完成了对主机信号的电平转换,也就是相当于一个驱动器。上面提到的所有工作都要交给CPU去做,因此在使用简易JTAG下载文件时目标板自然会相应地降低速度。尤其是当程序相对较大时,其速度就会大大降低,对于一些开发人员来讲,这是相当致命的缺点。

关于仿真器与日标板的兼容问题,现在市场上的部分仿真器出现不同程度的不兼容问题,其产生的主要原因是对RTCK信号(DBGRQ信号极不常见,这里不作介绍)的处理情况存在一些差异(不包括周立功系列的实验开发板,它们的仿真器使用的是单片机,与大多数的仿真器都不能兼容)。例如,在STR710中是将STCK

信号与TCK信号直接相连了,而在nano2410A实验开发板中是将STCK信号直接接地,因此造成了ARM JTAG

Emulator在nano2410A实验开发板中的不兼容。在对nano2410A主板的JTAG进行了小小的改动后就完成了仿真器兼容性的扩展。

备注:①JD44B0X为北京交通大学自控室实验开发板,STR710为北京微芯力科技有限公司实验开发板;②实验数据为秒表所测。


本文标签: 测试 扫描 寄存器 边界