由于集成了嵌入式存储器,微处理器,CPU,模拟IP,混合信号IP,DSP,时钟和时钟,因此我们的智能手机,平板电脑,智能电视和语音助手(如Alexa或Google Home)中提供的高效实用程序成为可能。这也是的我们实际设置的芯片复杂程度如下图所示复杂无比,对于芯片中各个模块的电路流片后DFT(Design for Test)工作是一项非常大的挑战。相应的测试仪器标准也是不断的更新迭代,从最初的JTAG标准扩展到ECT(Embeded core test)标准,到现在发展成的IJTAG标准,下面针对各个标准的细节给出相应的细节表述。
1. IEEE Standard 1149.1
JTAG 是 JOINT TEST ACTION GROUP 的简称。IEEE 1149.1 标准就是由 JTAG 这个组织最初提出的,最终由IEEE 批准并且标准化的。所以,这个 IEEE 1149.1 这个标准一般也俗称 JTAG 调试标准。标准给出了硬件对外接口描述,控制器状态机和基本的硬件描述语言BSDL和ICL以及过程描述语言PDL。下面简单对这几个核心内容说明。
1.1 TAP(Test access port)
JTAG整体硬件实现框图如上图所示。其中TAP 是一个通用的端口,最为通过 TAP 可以访问芯片提供的所有数据寄存器(DR)和指寄存器(IR)。对整个 TAP 的控制是通过 TAP Controller 来完成的。TAP 总共包括 5 个信号接口 TCK、TMS、TDI、TDO 和 TRST :其中 4 个是输入信号接口和另外 1 个是输出信号接口。一般,我们见到的开发板上都有一个 JTAG 接口,该 JTAG 接口的主要信号接口就是这 5 个。下面,我先分别介绍这个 5 个接口信号及其作用。
Test Clock Input (TCK):TCK 为 TAP 的操作提供了一个独立的、基本的时钟信号,TAP 的所有操作都是通过这个时钟信号来驱动的。TCK 在 IEEE 1149.1 标准里是强制要求的。
Test Mode Selection Input (TMS):TMS 信号用来控制 TAP 状态机的转换。通过 TMS 信号,可以控制 TAP 在不同的状态间相互转换。TMS 信号在 TCK 的上升沿有效。TMS 在 IEEE 1149.1 标准里是强制要求的。
Test Data Input (TDI):TDI 是数据输入的接口。所有要输入到特定寄存器的数据都是通过 TDI 接口一位一位串行输入的(由 TCK 驱动)。TDI 在 IEEE 1149.1 标准里是强制要求的。
Test Data Output (TDO):TDO 是数据输出的接口。所有要从特定的寄存器中输出的数据都是通过 TDO 接口一位一位串行输出的(由 TCK 驱动)。TDO 在 IEEE 1149.1 标准里是强制要求的。
Test Reset Input (TRST):TRST可以用来对TAP Controller进行复位(初始化)。不过这个信号接口在IEEE 1149.1标准里是可选的,并不是强制要求的。因为通过 TMS 也可以对 TAP Controller 进行复位(初始化)。
实际工作过程中,上位机(软件和硬件)通过操作 TAP 接口,实现TAP内部控制器状态机的CSU(Capture, Shift, Update)读写周期轮转,进而将高层意义数据的输入与输出JTAG控制器实现“内核逻辑”的测试。比方说,对数据寄存器(DR)进行访问的一般过程是:
1.通过指令寄存器(IR),选定一个需要访问的数据寄存器;
2.把选定的数据寄存器连接到 TDI 和 TDO 之间;
3.由 TCK 驱动,通过 TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过 TDO 读出来。
1.2 TAP状态机(FSM)
TAP 的状态机如图 1 所示,总共有 16 个状态。在图中,每个六边形表示一个状态,六边形中标有该状态的名称和标识代码。图中的箭头表示了 TAP Controller 内部所有可能的状态转换流程。状态的转换是由 TMS 控制的,所以在每个箭头上有标有 tms = 0 或者 tms = 1。在 TCK 的驱动下,从当前状态到下一个状态的转换是由 TMS 信号决定。假设 TAP Controller 的当前状态为 Select-DR-Scan,在 TCK 的驱动下,如果 TMS = 0,TAP Controller 进入 Capture-DR 状态;如果 TMS = 1,TAP Controller
进入 Select-IR-Scan 状态。
这个状态机看似很复杂,其实理解以后会发现这个状态机其实很直接、很简单。观察图1,我们可以发现,除了 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。寄存器分为两大类,数据寄存器和指令寄存器。其实标识有 DR 的这些状态是用来访问数据寄存器的,而标识有 IR 的这些状态是用来访问指令寄存器的。
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.3 JTAG访问的一般过程
先看看指令寄存器和数据寄存器访问的一般过程,以便建立一个直观的概念。
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 状态,完成对数据寄存器的访问。
2. IEEE Standard 1500
IEEE1500相比于IEEE1149-1标准,主要是便携式芯片出现,为了满足多个内核只需要一个JTAG接口完成DFT测试而推进。
3. IEEE Standard 1687
随着嵌入式仪器的越来越多,进而退出了最新的IEEE1687标准。同事1687标准提出了使用ICL语言描述DFT硬件设计架构,使用PDL语言描述对嵌入式设备的操作。
4. 总结
从软件角度,随着硬件结构的复杂,对于某个特定TDR的访问也变得比较困难,相应的代码处理流程也越来越复杂。目前针对1149-1/1500标准的BSDL过程和芯片内部测试相对来说比较简单,测试过程也比较好实现。对于基于1687标准的的测试过程复杂很多。具体如何使用合适的软件语言将ICL语言翻译成相关的软件结构模型,并基于合理高效的算法实现PDL语言对硬件TDR访问目前还是一个比较热门的研究话题。相关问题的讨论或者需要本人技术支持的,可以直接私信我。