本文将介绍四种类型的 jtag 数据寄存器,分别是:
boundary scan register (bsr) 边界扫描寄存器
bypass register (br) 旁路寄存器
device id register 设备 id 寄存器
user data register(s) 用户自定义数据寄存器
在讨论边界扫描寄存器之前,重要的是,让我们首先了解为什么我们需要边界扫描寄存器。
图 1:示例中 pcb 上的 3 片芯片以及它们之间的连接示意图
假设这么一种情况,我们需要将 3 片由不同厂商开发生产的芯片焊接组装在同一块电路板上。这些芯片在出厂时都已经由各自厂商使用自动测试设备( automatic test equipment,ate)测试通过。
但如果我们在把它们组装到电路板上之后,它们之间的连接性有可能会出现问题,这种情况下,我们如何发现其中的连接故障?如果只是测试连通性问题,我们没法将电路板重新送回 ate 处再次测试其上的所有芯片,因为 ate 的花费是非常昂贵的。
在图 1 所示的示例中,chip 2 的 io 本身并不是电路板级的 io,如果出于一些调试原因,我们想通过 chip 2 的 io 来访问 chip 2,那么我们如何做到这一点?
boundary scan register (bsr) 边界扫描寄存器
边界扫描寄存器就是用来解决上述两个问题的。
如果 3 个芯片都支持 jtag 访问以及边界扫描,那么我们可以控制和观测任何设备的 io,即使它们不是板级的 io。和扫描以及 atpg (scan and atpg)的概念类似,我们可以向 bsr 中移入我们想要的数值,并观测 bsr 中的结果,来测试芯片之间的连接性。这类测试被称之为边界扫描测试。
jtag 接口允许多个设备以 daisy chain 的方式连接到同一个 jtag 接口上。具体来说,tms 和 tck 并行地连接到各个设备上,而 tdi 和 tdo 则以图 2 之中的串行方式连接。
note: 我们在系统任何层级中,都只能有一个 tap (板级/芯片级/ip 模块级)。因此所有芯片都使用同一个 tap,而不是每个芯片使用一个专门的 tap。
图 2:边界扫描(图中橘色的矩形表示的是芯片中的边界扫描单元)
边界扫描寄存器 (bsr) 中的寄存器被插在设备的核心逻辑和 io 引脚之间。在普通运行模式下,这些单元在通路上会被旁路,从而相当于不存在。在测试模式下 bsr 被使能,可以被用于控制 io 引脚,以及读取 io 引脚上当前的数值。
图 3:bsc 内部结构图
bsc 支持四种模式,每种模式情况如下表所示。
bypass register (br) 旁路寄存器
旁路寄存器是一个位宽为 1 的寄存器,用于提供一条 tdi 和 tdo 之间的直接通路。这条直接通路的存在可以为电路中器件测试提供最小的测试时间开销。假设我们在电路板上有多个串行连接的芯片,如图 4 所示,如果我们想访问其中单个芯片,比如 chip2。在没有旁路寄存器存在的传统做法中,我们需要将数据移位经过 chip1 和 chip3 中所有 bsc,才能访问 chip2 中的 bsc,这增加了太多不必要的移位时间开销。为了避免上述延迟,我们需要旁路 chip1 和 chip3 中所有 bsc,这样数据穿过 chip1/3 等 jtag 设备时,每个 jtag 设备只需要一个时钟周期延迟。
在上述示例中,具体来看:
如果我们穿过整个 chip1 和 chip3,那么需要 12 + 8 + 12 = 32 clocks。
但如果我们旁路 chip1 和 chip3,那么只需要 1 + 8 + 1 = 10 clocks。
当需要旁路芯片时,我们需要将 bypass 寄存器对应的 opcode 加载到指令寄存器中,使指令译码器逻辑建立一条只穿过 bypass 寄存器的旁路 tdi-tdo 路径。
图 4:旁路寄存器使用方式示例
device id register 设备 id 寄存器
id 寄存器仅用于设备识别。假设我们有多个共享调试接口或者 tap 的 jtag 设备。为了确保我们正在访问正确的调试接口,每个设备的有一个 id 寄存器,其中的数值(即设备 id 代码)是独一无二的。设备 id 用于使用户或者调试工具识别并确认自己访问的是正确的调试接口。
user data register(s) 用户自定义数据寄存器
这些用户自定义的寄存器用于在调试时,控制或者观测核心逻辑中的内部功能寄存器和内部端口,如图 5 所示。一般来说,通过 jtag 可以访问的内部功能寄存器,提供了 jtag 访问和正常功能逻辑访问两套接口。你可以参照后一节的 jtag 访问示例,来了解我们是如何通过用户数据寄存器来访问内部功能逻辑寄存器的。
图 5:如何通过用户数据寄存器来访问内部功能逻辑寄存器的示意图
和指令寄存器类似,用户数据寄存器中也包括了两级寄存器,如图 6 所示。hold 寄存器保持先前的数据,shift 寄存器则在不影响当前数据的情况下,逐步移入新的数据。用户数据寄存器的控制信号来自于 tap 控制器,具体的控制信号数值取决于当前 fsm 状态机的状态,使用户数据寄存器 shift 寄存器移入/移出用户数据(即 shift-dr 状态下的串行更新过程),或者使 shift 寄存器的内容传递到 hold 寄存器中(即 update-dr 状态下的并行更新过程)。
值得注意的是,我们可以设计多个用户数据寄存器,每个寄存器有不同的 opcode。当我们装填特定的 opcode 到指令寄存器后,对应的用户数据寄存器才会转变为可读可写,可控制也可以观测相应的内部功能逻辑。
图 6:用户数据寄存器示意图
提升蓝牙解决方案竞争力 微芯3亿美元并购创杰
淘宝众筹倒计时!壳乐派crowpi2学生好伙伴,STEAM编程老师的好帮手!
2016年VR产业发展中8个问题的解答
深天马连续两年稳居首要客户榜首——信濠光电,发布IPO申请
长虹海思巨头牵手 共同打造物联网应用新场景
四种类型的 JTAG 数据寄存器介绍
传统制造业IT/OT团队逐渐汇流
手机创新周期开启:iPhone8预计达1亿台 92%果粉在等待 三星S8情何以堪
WP8国内上市时间确定12月中旬
区块链需要在游戏的包裹下打通现实世界的应用场景
三种LED驱动电源电路的成本性能比较
树莓派4 ubuntu core启动时间并记ubuntu系统安装流水账
华友钴业与LG化学将在印尼、摩洛哥合作生产电池材料
音频警报的制作教程
土壤肥料检测仪的使用方法
OPPOK3体验 到底怎么样
AP2KS REV1.1多功能便携式液晶显示器驱动板卡介绍
英伟达扩张自动驾驶汽车版图 宣布同Uber大众合作引入AI平台
银隆钛酸锂电池技术从何而来?它的发展前景如何
隔离式I2C/PMBus链路解决方案在多方面的应用介绍