当前位置:   article > 正文

JTAG协议笔记

jtag

JTAG协议笔记


最近简单学了JTAG,在这里做一个整理。

本文主要是理论部分,关于实践涉及的很浅。


1. JTAG是什么?

JTAG协议是一个名叫JOINT TEST ACTION GROUP的组织提出的,也因此而得名。后来该组织与IEEE一起制定了当前被广泛使用的IEEE 1149.1 JTAG标准。下文提到的JTAG协议一般指IEEE1149.1。

JTAG是一种调试协议,很多人把常用的烧录器JLINK与JTAG协议划等号是不对的。JLINK是通过利用JTAG协议提供的数据传输能力,与目标设备进行通信以完成程序的烧录过程。JTAG协议本身的核心功能是调试。


2. JTAG协议的边界扫描原理

芯片的每个主要输入信号和主要输出信号(也可以简单理解为引脚)都配备了一个名为边界扫描单元的多功能存储器。请参见图1箭头指向,上排引脚代表输入引脚,下排引脚代表输出引脚。
Principle of Boundary-Scan Architecture

图1 Principle of Boundary-Scan Architecture

上图中,外围的深色的10个小矩形就是芯片引脚,内部的蓝色椭圆代表芯片的内部电路,黄色的串成串的小方框就是边界扫描单元。

边界扫描单元的集合被配置为一个个并行输入并行输出(parallel-in, parallel-out)的移位寄存器。并行加载操作(称为"捕获capture"操作)会将设备输入引脚上的信号值加载到输入单元中,并将从核心逻辑传递到设备输出引脚上的信号值加载到输出单元中。并行卸载操作(称为"更新update"操作)会将已经存在于输出扫描单元中的信号值通过设备输出引脚传出,已经存在于输入扫描单元中的信号值将被传递到核心逻辑中。

数据还可以以串行模式在移位寄存器之间进行移位,从一个称为"测试数据输入"(TDI)的专用设备输入引脚开始,到一个称为"测试数据输出"(TDO)的专用设备输出引脚结束。测试时钟TCK通过另一个专用设备输入引脚提供,操作模式由一个专用的"测试模式选择"(TMS)串行控制信号控制。

图2显示了一个基本的通用边界扫描单元,即图1中的一个小黄框。它具有四种操作模式:正常模式、更新模式、捕获模式和串行移位模式。存储器元件被展示为一个简单的D触发器,具有前端和后端数据的多路复用。(注意图2中显示的电路只是满足标准定义要求的一种示例。IEEE 1149.1标准并不强制规定电路的设计,仅规定其功能规范。)

Basic Boundary-Scan Cell

图2 Basic Boundary-Scan Cell

在正常模式下,Data_In直接传递到Data_Out,这代表着非JTAG调试状态下,芯片正常工作时的信号传递。在更新模式(update)下,输出寄存器的内容通过Data_Out传递出来,这代表调试状态下,边界扫描单元中的值被插入了芯片的信号传递流程中,这个值可以是之前通过TDI串行输入到边界扫描单元中的。在捕获模式(capture)下,Data_In信号被路由到移位寄存器并且在下一个时钟周期捕获。这代表调试状态下,边界扫描单元可以捕获芯片原本数据流中的值。在移位模式下,一个寄存器的Scan_Out通过硬连线路径传递给下一个寄存器的Scan_In,即从图1中一个小黄框传递给下一个小黄框。需要注意的是,捕获和移位操作不会干扰从并行输入端到并行输出端的数据传递。这允许在运行过程中“即时”捕获操作值,并且可以在不干扰功能模式的情况下进行检查。

以上是JTAG协议的核心功能基本实现原理,下面将对整个JTAG协议(IEEE 1149.1)的基本架构进行介绍。


3. IEEE 1149.1 Device Architecture

图3是IEEE1149.1协议的架构。

IEEE1149.1 Chip Architecture

图3 IEEE1149.1 Chip Architecture

图3架构包括了以下元素:

  • 4个专用测试引脚:测试数据输入(TDI)、测试模式选择(TMS)、测试时钟(TCK)、测试数据输出(TDO)和一个可选的测试引脚测试复位(TRST*)。这些引脚被统称为测试访问端口(TAP)。这也对应着JTAG通信时需要的4根线。

  • 设备主输入和主输出引脚上的边界扫描单元,通过内部连接形成一个串行边界扫描寄存器(Boundary Scan)。

  • 一个带有输入TCK、TMS和TRST(可选)的有限状态机TAP控制器。

  • 一个n位(n≥2)指令寄存器(IR),保存当前指令。

  • 一个1位旁路寄存器(Bypass)。

  • 一个可选的32位识别寄存器(Ident),能够加载一个永久设备识别码。

在任何时候,只能将一个寄存器从TDI连接到TDO(例如IR、Bypass、边界扫描、Ident,甚至一些适合核心逻辑的寄存器)。所选的寄存器由IR的解码输出标识。某些指令是强制性的,例如Extest(选择边界扫描寄存器),而其他指令是可选的,例如Idcode指令(选择Ident寄存器)。
接下来将对每一点进行详细介绍。

3.1 指令寄存器The Instruction Register

指令寄存器(IR)包括一个可连接到TDI和TDO的移位部分(Scan Register),以及一个保持部分(Hold Register),用于保存当前指令,图4是指令寄存器的内部结构。

The Instruction Register

图4 The Instruction Register

根据寄存器的宽度和不同指令的数量,两个部分之间可能存在一些解码逻辑(Decode Logic)。通过TAP控制器,IR接收控制信号来实现移位部分的移入(shift-in)、移出(shift-out),以及将移位部分的内容传递到保持部分进行更新操作。还可以将某些硬连接的值加载(捕获capture)到IR的移位部分中。IR的长度至少为两位,以允许编码四个强制性指令-旁路(Bypass)、采样(Sample)、预装载(Preload)、边界扫描(Extest),但IR的最大长度没有定义。在捕获模式下,最低有效位必须是01(参见图4)。高阶位捕获的值没有定义。这些高阶位的一个可能用途是在未实现32位识别寄存器(Ident)时,捕获非正式的识别码。

总之,在IR的两个部分之间可能存在解码逻辑,具体取决于寄存器的宽度和不同指令的数量。IR的控制信号来自TAP控制器,用于在移位部分进行移入、移出操作,或者将内容传递到保持部分进行更新操作。至少需要两位长度的IR以编码强制指令,并且可以加载特定的预定义值。这些部分相互配合,控制和更新当前指令,并通过Test Data Out(TDO)引脚提供稳定的输出。这样,其他系统组件可以对指令进行解码和解释。

3.2 指令

本节介绍指令寄存器可以接受的相关指令,每个指令有自己对应的数据寄存器。比如旁路寄存器,识别寄存器等等。寄存器中,除了指令寄存器外,其余都属于数据寄存器,在后文会进行详细介绍。

IEEE1149.1-2001版本的标准描述了四个强制性指令:Bypass、Sample、Preload和Extest。

  • Bypass
    Bypass指令必须被赋予全1的代码。如果当前芯片并不是我们的调试目标,而它又在JTAG扫描链当中,那么便把Bypass指令被加载到指令寄存器(IR),TAP控制器会将测试数据输入(TDI)引脚上的数据直接通过Bypass寄存器并输出到测试数据输出(TDO)引脚上,跳过了目标设备的其他寄存器,提供一条TDI到TDO之间的最短通路。根据定义,IR的保持部分的初始状态应包含Bypass指令代码,除非已经实现了可选的识别寄存器(Ident),此时在保持部分应该存在Idcode指令代码。
  • Sample和Preload
    Sample和Preload指令在执行时都选择边界扫描寄存器。Sample指令设置边界扫描单元以采样(捕获)进入设备的值。Preload指令用于在某些后续操作之前将已知值预装载到输出边界扫描单元中。Sample和Preload指令的代码没有定义。
  • Extest
    Extest指令在进行互连测试之前选择边界扫描寄存器。在2001年之前的标准版本中,Extest的代码被定义为全0的代码。自2001年起,该代码不再定义。

IEEE1149.1标准定义了一些可选指令(不需要实现,但在使用时具有规定的操作)。可选指令的示例包括:

  • Intest
    Intest是一种选择边界扫描寄存器的指令,用于在对设备的核心逻辑应用测试之前进行准备。
  • Idcode
    Idcode是一种选择在TDI和TDO之间的识别寄存器的指令,用于加载内部硬连接的Idcode值并通过TDO读取。请注意,如果加载了Idcode指令,如果设备上没有识别寄存器,则必须将Idcode指令解释为Bypass指令。
  • Runbist
    Runbist指令启动内部自测试例程,并将通过/失败结果寄存器放置在TDI和TDO之间。

1993年修订版1149.1a引入了两个新指令:Clamp和Highz。Clamp是一种指令,它在设备的输出上驱动预设的扫描单元值(最初使用Preload指令进行设置),然后在TDI和TDO之间选择Bypass寄存器。Clamp用于在某些设备的输出上建立安全的“保护”值,以避免总线争用问题。

Highz与Clamp类似,但是设备设计成所有输出都可以处于高阻态(三态输出)或输入接收模式(用于双向扫描单元)。Highz在输出引脚上建立这些值,但保持Bypass寄存器作为选定的寄存器。请注意,执行High指令时,用于此操作的使能控制信号直接来自IR。不使用Preload。

除了Bypass指令外,所有其他指令的代码均未定义。考虑到需要四个强制性指令,IR的最小长度为两位,最大长度未定义。任何指令都可以有多个代码,所有未使用的代码都被解释为Bypass指令。请注意,设计者可以使用特定代码来实现“私有”指令——即功能不公开的指令。在这种情况下,设计者必须声明这些代码是私有的,以便用户可以避免加载这些代码。

3.3 使用指令寄存器

在继续描述该体系结构的其他部分之前,将首先研究如何加载IR和解码它的内容。首先思考如下图5所示的电路。

Using the Instruction Register — Step 1

图5 Using the Instruction Register — Step 1

假设目标是将Chip1置于旁路ByPass模式(以缩短将测试刺激传递到更下游设备的扫描链的时间),并将Chip2和Chip3置于Extest模式,以准备对Chip2和Chip3之间的互连进行设置测试。为实现这一设置,需要将Bypass指令(全为1)加载到Chip1的IR中,Extest指令(全为0)加载到Chip2和Chip3的IR中。

第1步,将所有三个设备的IR连接在其各自的TDI和TDO引脚之间。这是通过在连接到所有设备的并行TMS(和TCK)线上发送特殊的序列值实现的。注意,TMS(和TCK)线路并行连接到每个TAP控制器。任何在TMS上的序列值都将以相同的方式被每个TAP控制器解释。稍后,我们将看到用于选择在TDI和TDO之间的IR的确切的TMS序列。现在,我们假设存在这样的序列。
第2步通过IR的全局连接将适当的指令加载到各个IR中。假设每个设备的IR是简单的两位,这个操作等同于将序列110000串行加载到边缘连接器的TDI引脚,将00放置在芯片2和3的IR中,将11放置在芯片1的IR中。现在,IR已经设置好,正确的指令加载到了它们的移位部分。
第3步(参见图6)在TMS上放置进一步的值,导致每个TAP控制器发出控制信号值,将IR的移位部分的值传输到保持部分,其中它们成为当前指令。这是更新操作。此时,各种指令将被执行——即,芯片1取消选择IR并选择位于TDI和TDO之间的旁路寄存器(Bypass指令),芯片2和3取消选择它们的IR并选择位于TDI和TDO之间的边界扫描寄存器(Extest指令)。设备现在已经设置好,并且准备进行Extest操作。

Using the Instruction Register — Step 3

图6 Using the Instruction Register — Step 3

3.4 The Test Access Port (TAP)

我们现在回到TAP及其控制器(图7)。TAP是一个测试接入端口,用于与嵌入式系统内部的测试逻辑电路进行通信,它接受来自JLINK(或其他JTAG控制器)的TDI、TDO、TCK和TMS四根线的信号(这四根线我后面会详细介绍)。TAP端口受TAP Controller控制,它们构成了一个状态机模型,受输入信号的控制,在16种状态之间进行切换。

TAP Controller Global View

图7 TAP Controller Global View

必需终端包括:
  • 测试数据输入(TDI)
    TDI是数据输入的接口。所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的(由TCK驱动)。其默认值为1。
  • 测试数据输出(TDO)
    TDO是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过TDO接口一位一位串行输出的(由TCK驱动)。在移位操作期间有效,其默认值为Z。
  • 测试模式选择(TMS)
    TMS信号用来控制TAP状态机的转换。通过TMS信号,可以控制TAP在不同的状态间相互转换。TMS信号在TCK的上升沿有效。其默认值为1。TMS信号受控于JTAG控制器(例如JLINK)。
  • 测试时钟(TCK)
    TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。

可选终端为:

  • 测试复位(TRST*)
    TRST可以用来对TAP Controller进行复位(初始化)。不过这个信号接口在IEEE 1149.1标准里是可选的,并不是强制要求的。因为通过TMS也可以对TAP Controller进行复位(初始化)。其默认值为1且为低电平有效。

TMS和TCK(以及可选的TRST*)连接到一个有限状态机控制器,该控制器产生各种控制信号。这些信号包括专用于IR的信号(ClockIR、ShiftIR、UpdateIR)和通用于所有数据寄存器的信号(ClockDR、ShiftDR、UpdateDR)。实际响应的数据寄存器是由IR的并行输出生成的条件控制信号启用的寄存器,根据特定的指令来确定。

此外,还有通用的选择(Select)、复位(Reset)和使能(Enable)信号。

图8显示了TAP控制器的状态表。状态转换弧上的值是TMS的值。状态转换发生在TCK的上升沿上,输出值在TCK的下降沿上改变。假设 TAP Controller 的当前状态为 Select-DR-Scan,在 TCK 的驱动下,如果 TMS = 0,TAP Controller 进入 Capture-DR 状态;如果 TMS = 1,TAP Controller进入 Select-IR-Scan 状态。

图8  TAP Controller State Table Diagram

图8 TAP Controller State Table Diagram

TAP控制器初始化时处于Test-Logic-Reset状态("Asleep"状态)。只要TMS保持为1(默认值),状态将保持不变。将TMS拉低会导致状态转换到Run-Test/Idle状态("Awake and do nothing"状态)。通常情况下,我们希望进入Select-IR-Scan状态,以准备加载和执行新指令。
我们可以根据需要依次经过Capture-IR、Shift-IR和Update-IR等各种状态。最后一个操作是Update-IR操作,在此操作中,加载到IR的移位部分的指令将被转移到保持部分,成为当前指令。这导致IR不再作为连接在TDI和TDO之间的寄存器被选中,而是选择由当前指令标识的数据寄存器作为TDI和TDO之间的新目标寄存器(例如,如果指令是Bypass,则Bypass寄存器是选定的数据寄存器)。从此刻开始,我们可以使用通用的Capture-DR、Shift-DR和Update-DR控制信号来操作目标数据寄存器。
请注意,如果实例中没有设计TRST*,则TAP控制器没有主复位功能。TAP控制器规定必须在Test-Logic-Reset状态下上电。如果需要重新初始化控制器,可以通过将TMS保持高电平并以最多五个时钟周期进行TCK时钟操作来实现。一般而言,TMS = 0会保持当前状态,而TMS = 1会导致状态转换。大家可验证,在任何起始状态下,只需进行五个TCK时钟周期即可将控制器恢复至Test-Logic-Reset状态,前提是TMS保持逻辑1。
状态表的每个主分支都包含额外的Exit和Pause状态。Exit状态允许从移位操作转换到更新操作。它还允许控制器进入暂停状态,例如:如果所有设备都选择了边界扫描寄存器作为数据寄存器,并且外部测试仪的引脚通道正在加载或卸载测试数据(例如,在使用Extest测试互连结构时)。如果串联的边界扫描寄存器的长度大于与测试仪通道相关联的存储器,则需要在通过边界扫描路径恢复移位操作之前更新或卸载通道内存的内容。暂停状态使得这个动作成为可能,而Exit2状态则允许返回到移位操作。
这个状态机看似很复杂,其实理解以后会发现这个状态机其实很直接、很简单。观察上图,我们可以发现,除了Test-Logic Reset和Test-Run/Idle状态外,其他的状态有些类似。例如Select-DR-Scan和Select-IR-Scan对应,Capture-DR和Capture-IR对应,Shift-DR和Shift-IR对应,等等。在这些对应的状态中,DR表示Data Register,IR表示Instruction Register。JTAG寄存器分为两大类,数据寄存器和指令寄存器。其实标识有DR的这些状态是用来访问数据寄存器的,而标识有IR的这些状态是用来访问指令寄存器的。
在详细描述整个状态机中的每一个状态之前,首先让我们来想一想:要通过边界扫描链来观察和控制芯片的输入和输出,需要做些什么?如果需要捕获芯片某个管脚上的输出,首先需要把该管脚上的输出装载到边界扫描链的寄存器单元里去,然后通过 TDO 输出,这样我们就可以从 TDO 上得到相应管脚上的输出信号。如果要在芯片的某个管脚上加载一个特定的信号,则首先需要通过 TDI 把期望的信号移位到与相应管脚相连的边界扫描链的寄存器单元里去,然后把该寄存器单元的值加载到相应的芯片管脚。下面,让我们一起来看看每个状态具体表示什么意思?完成什么功能
  • Test-Logic Reset 系统上电后,TAP Controller 自动进入该状态。在该状态下,测试部分的逻辑电路全部被禁用,以保证芯片核心逻辑电路的正常工作。通过 TRST 信号也可以对测试逻辑电路进行复位,使得 TAP Controller 进入 Test-Logic Reset 状态。前面我们说过 TRST 是可选的一个信号接口,这是因为在 TMS 上连续加 5 个 TCK 脉冲宽度的“1”信号也可以对测试逻辑电路进行复位,使得 TAP Controller 进入 Test-Logic Reset 状态。所以,在不提供 TRST信号的情况下,也不会产生影响。在该状态下,如果 TMS 一直保持为“1”,TAP Controller将保持在 Test-Logic Reset 状态下;如果 TMS 由“1”变为“0”(在 TCK 的上升沿触发),将使 TAP Controller 进入 Run-Test/Idle 状态。
  • Run-Test/Idle 这个是 TAP Controller 在不同操作间的一个中间状态。这个状态下的动作取决于当前指令寄存器中的指令。有些指令会在该状态下执行一定的操作,而有些指令在该状态下不需要执行任何操作。在该状态下,如果 TMS 一直保持为“0”,TAP Controller 将一直保持在 Run-Test/Idle 状态下;如果 TMS 由“0”变为“1”(在 TCK 的上升沿触发),将使 TAPController 进入 Select-DR-Scan 状态。
  • Select-DR-Scan 这是一个临时的中间状态。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller进入 Capture-DR 状态,后续的系列动作都将以数据寄存器作为操作对象;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Select-IR-Scan 状态。
  • Capture-DR 当 TAP Controller 在这个状态中,在 TCK 的上升沿,芯片输出管脚上的信号将被“捕获”到与之对应的数据寄存器的各个单元中去。如果 TMS 为“0”(在 TCK 的上升沿触发),TAP Controller 进入 Shift-DR 状态;如果 TMS 为“1” (在 TCK 的上升沿触发),TAPController 进入 Exit1-DR 状态。
  • Shift-DR 在这个状态中,由 TCK 驱动,每一个时钟周期,被连接在 TDI 和 TDO 之间的数据寄存器将从 TDI 接收一位数据,同时通过 TDO 输出一位数据。如果 TMS 为“0” (在 TCK的上升沿触发),TAP Controller 保持在 Shift-DR 状态; 如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入到 Exit1-DR 状态。假设当前的数据寄存器的长度为 4。如果 TMS 保持为 0,那在 4 个 TCK 时钟周期后,该数据寄存器中原来的 4 位数据(一般是在 Capture-DR 状态中捕获的数据)将从 TDO 输出来;同时该数据寄存器中的每个寄存器单元中将分别获得从 TDI 输入的 4 位新数据。
  • Update-DR 在 Update-DR 状态下,由 TCK 上升沿驱动,数据寄存器当中的数据将被加载到相应的芯片管脚上去,用以驱动芯片。在该状态下,如果 TMS 为“0”,TAP Controller 将回到Run-Test/Idle 状态;如果 TMS 为“1”,TAP Controller 将进入 Select-DR-Scan 状态。
  • Select-IR-Scan 这是一个临时的中间状态。如果 TMS 为“0” (在 TCK 的上升沿触发),TAP Controller进入 Capture-IR 状态,后续的系列动作都将以指令寄存器作为操作对象;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Test-Logic Reset 状态。
  • Capture-IR 当 TAP Controller 在这个状态中,在 TCK 的上升沿,一个特定的逻辑序列将被装载到指令寄存器中去。如果 TMS 为“0”(在 TCK 的上升沿触发),TAP Controller 进入 Shift-IR状态;如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入 Exit1-IR 状态。
  • Shift-IR 在这个状态中,由 TCK 驱动,每一个时钟周期,被连接在 TDI 和 TDO 之间的指令寄存器将从 TDI 接收一位数据,同时通过 TDO 输出一位数据。如果 TMS 为“0” (在 TCK的上升沿触发),TAP Controller 保持在 Shift-IR 状态; 如果 TMS 为“1” (在 TCK 的上升沿触发),TAP Controller 进入到 Exit1-IR 状态。假设指令寄存器的长度为 4。如果TMS 保持为 0,那在 4 个 TCK 时钟周期后,指令寄存器中原来的 4bit 长的特定逻辑序列(在 Capture-IR 状态中捕获的特定逻辑序列)将从 TDO 输出来,该特定的逻辑序列可以用来判断操作是否正确;同时指令寄存器将获得从 TDI 输入的一个 4bit 长的新指令。
  • Update-IR 在这个状态中,在 Shift-IR 状态下输入的新指令将被用来更新指令寄存器。


说了那么多,下面,让我们先看看指令寄存器和数据寄存器访问的一般过程,以便建立一个直观的概念。
  1. 系统上电,TAP Controller 进入Test-Logic Reset状态,然后依次进入:Run-Test/Idle →Select-DR-Scan →Select-IR-Scan →Capture-IR →Shift-IR →Exit1-IR →Update-IR,最后回到Run-Test/Idle状态。在Capture-IR状态中,一个特定的逻辑序列被加载到指令寄存器当中;然后进入到Shift-IR状态。在Shift-IR状态下,通过TCK的驱动,可以将一条特定的指令送到指令寄存器当中去。每条指令都将确定一条相关的数据寄存器。然后从Shift-IR →Exit1-IR →Update-IR。在Update-IR状态,刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后,进入到Run-Test/Idle状态,指令生效,完成对指令寄存器的访问。
  2. 当前可以访问的数据寄存器由指令寄存器中的当前指令决定。要访问由刚才的指令选定的数据寄存器,需要以 Run-Test/Idle 为起点,依次进入 Select-DR-Scan →Capture-DR →Shift-DR →Exit1-DR →Update-DR,最后回到Run-Test/Idle状态。在这个过程当中,被当前指令选定的数据寄存器会被连接在TDI和TDO之间。通过TDI和TDO,就可以将新的数据加载到数据寄存器当中去,同时,也可以捕获数据寄存器中的数据。具体过程如下。在Capture-DR状态中,由TCK的驱动,芯片管脚上的输出信号会被“捕获”到相应的边界扫描寄存器单元中去。这样,当前的数据寄存器当中就记录了芯片相应管脚上的输出信号。接下来从Capture-DR进入到Shift-DR 状态中去。在Shift-DR状态中,由TCK驱动,在每一个时钟周期内,一位新的数据可以通过TDI串行输入到数据寄存器当中去,同时,数据寄存器可以通过TDO串行输出一位先前捕获的数据。在经过与数据寄存器长度相同的时钟周期后,就可以完成新信号的输入和捕获数据的输出。接下来通过Exit1-DR状态进入到Update-DR状态。在Update-DR状态中,数据寄存器中的新数据被加载到与数据寄存器的每个寄存器单元相连的芯片管脚上去。最后,回到Run-Test/Idle状态,完成对数据寄存器的访问。

3.5 旁路寄存器The Bypass Register

图9展示了一个典型的旁路寄存器设计。它是一个1位寄存器,由旁路指令选中,并提供基本的移位功能。没有并行输出(这意味着Update-DR控制对寄存器没有影响),但在Capture-DR控制下有效果-寄存器捕获了一个固定值0。在Test-Logic/Resetsatiate状态,TDI和TDO之间默认选择的就是旁路寄存(在设备没有设计ID寄存器的前提下)。

The Bypass Register

图9 The Bypass Register

3.6 识别寄存器The Identification Register

可选的识别(Ident)寄存器是一个32位寄存器,具有捕获和移位模式操作(图10)。捕获的32位用以下字段标识设备:

  • 第0位(最低有效位)始终为1。
  • 第1至11位使用紧凑形式的JEDEC标识码标识设备制造商。
  • 第12至27位提供一个16位的自由格式部件号字段。
  • 第28至31位提供一个4位的自由格式字段,用于指定同一基本设备的 最多16个不同版本。
    图10  Device Identification Code Structure
图10 Device Identification Code Structure

一旦捕获,32位的id码可以被TDO移位移出来检查。图10也展示了一个实例。下面将解释为什么识别寄存器(Ident register)的**最低有效位(lsb)**是1,以及为什么旁路寄存器(Bypass register)捕获一个固定值0。

3.7 使用lsb=1功能

考虑以下的现场服务场景。一台客户的计算机系统出现故障。怀疑特定板卡上的硬件故障是导致故障的原因。这个板卡有很多变种,服务工程师需要确定板卡类型和组件版本。工程师所知道的是板卡上有边界扫描(boundary-scan)组件,并且了解到主要的(边沿连接器)TDI、TDO、TMS、TCK端口以及电源和地线的位置。下面的步骤可以确定板卡上的边界扫描组件是否具有识别寄存器。

  1. 第一步:
    给板卡上电,并通过TMS序列值进入选择DR-Scan状态。默认情况下,每个边界扫描设备在上电时加载到保持阶段的指令必须是Idcode(如果该设备包含识别寄存器)或者Bypass(如果该设备不包含识别寄存器)。这是标准规定的。如图11所示。

图11  Use of the lsb = 1 Feature — Step 1

图11 Use of the lsb = 1 Feature — Step 1

  1. 第二步:
    在默认选中的旁路(Bypass)或识别(Ident)寄存器中捕获硬连接的值(Capture-DR)。
  2. 第三步:
    通过主要的TDO输出将捕获的值移出(Shift-DR)。参见图12。带有前导0的标识表示设备没有识别寄存器(这个0就是前文Bypass寄存器默认捕获的0)。带有前导1的标识表示设备具有识别寄存器,此时下一个31位是关注的内容。

图12  Use of the lsb = 1 Feature — Step 3

图12 Use of the lsb = 1 Feature — Step 3

在真正的“盲目”查询情况下(即不知道板上有多少设备具有IEEE1149.1功能),可以通过主要的TDI输入一个非法序列,并等待该序列出现在主要的TDO上来终止进程。这个序列是制造商标识字段的第1-7位连续为1。JEDEC编码系统避免了这种序列。通常在这个序列后面添加另一个0,以防万一主要的TDI被卡在1的状态。参见图12。

3.8 边界扫描寄存器Boundary-Scan Register

现在我们更详细地看一下边界扫描单元。边界扫描单元被放置在设备的信号输入端口、输出端口以及双向(输入/输出)端口和三态(0、1、Z)端口的控制线上。

这些单元通过连接在一起形成边界扫描寄存器。连接的顺序由引脚的物理相邻性和/或其他布局限制确定。边界扫描寄存器可由Extest、Sample、Preload和Intest指令选中。

边界扫描单元有许多不同的设计。图13显示了一种简单的设计,只能进行捕获和移位操作。这样的单元可以用于对Data_In信号特别敏感的设备输入,例如系统时钟。(注意:4个强制性指令中没有一个要求对输入扫描单元进行更新操作。)

图13  Basic Boundary-Scan Cell (Input)

图13 Basic Boundary-Scan Cell (Input)

图14展示了一个更通用的边界扫描单元设计。这种设计能够执行三种操作,即捕获(capture)、移位(shift)和更新(update),并且可以作为设备信号引脚上的输入或输出单元。该设计具有分离的移位器和保持器功能的触发器(flip-flop)。数据可以通过边界扫描移位路径进行移位,而不会干扰保持部分的值(该值可以通过输出多路复用器路由到数据输出端口)。

图14  Basic Boundary-Scan Cell (Input/Output)

图14 Basic Boundary-Scan Cell (Input/Output)

在提供边界扫描单元时,主要是在除了电源和地线之外的所有设备输入和输出信号引脚上放置边界扫描单元。需要注意的是,在引脚与边界扫描单元之间除了驱动放大器或其他形式的模拟电路之外,不能有任何电路。

对于引脚的输入信号传递,应该在核心逻辑的每个主要输入上都放置边界扫描单元。这样,每个输入都可以独立设置值,为Intest提供最大的灵活性。

同样地,在引脚的输出信号传递中,如果每个输出引脚都具有边界扫描单元,那么Extest就可以设置不同且独立的值。

如果存在三态输出引脚,则必须在输出驱动放大器的状态控制信号处放置边界扫描单元。图15展示了一个简单的三态输出引脚示例。
图15  Control of Tristate Outputs(控制三态输出)

图15 Control of Tristate Outputs(控制三态输出)

图16显示了双向I/O引脚的设置。在这里,我们可以看到需要三个边界扫描单元:一个用于输入端,一个用于输出端,以及一个用于控制I/O状态。

图16  Bidirectional Input/Output Pins(双向输入/输出引脚)

3.9 访问其他核心逻辑寄存器

IEEE1149.1架构允许定义和使用“私有”指令来访问任何适当的内部移位寄存器。一个例子是通过TDI-TDO路径使用指令InScan来访问内部扫描路径寄存器。

这种私有指令的定义和使用可以为设计师提供更大的灵活性,以访问和操作核心逻辑中的特定寄存器。通过适当的指令设置和数据传输,可以利用TAP控制器的边界扫描功能来实现对这些内部寄存器的访问。
私有指令的具体定义和用法会根据特定设计的要求而有所不同。通过在TAP控制器中添加适当的状态和控制信号,可以实现对这些内部寄存器的选择性访问和配置。

另一个重要的可选指令是RunBist。由于设备内部自测试结构的日益重要,RunBist的行为在标准中有所定义。自测试例程必须是自初始化的(即不允许外部种子值),而RunBist的执行主要针对位于TDI和TDO之间的自测试结果寄存器。一旦启动自测试例程,TAP控制器将保持在运行-测试/空闲状态,直到测试完成。自测试时钟可以是TCK,或者更通常是一个更快速的时钟。

在自测试周期结束时,目标寄存器保存了通过/失败的结果。重要的是,这个值不会被后续的TCK脉冲改变。通过这种方式,可以在同一板上对不同设备上的不同长度的并行自测试进行。当最终(即运行时间最长的)自测试完成时,所有结果可以沿着由链接的各个结果寄存器组成的寄存器路径输出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/856922
推荐阅读
相关标签
  

闽ICP备14008679号