JTAG 标准IEEE STD 1149.1-2013学习笔记(一·)Test logic architecture、Instruction register以及Test data registers
我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计。
关注公众号【集成电路设计教程】,拉你进“IC设计交流群”。
注:转载请注明出处
一、Test logic architecture
首先此测试逻辑架构必须包含的组件有
- 一个 TAP 控制器
- 一个指令寄存器 IR
- 一组测试数据寄存器 DR
测试逻辑架构示意图如图1所示

图1 片上测试逻辑概念图
下面简单介绍下此示意图:
(1)TAP 控制器接收TCK,TMS和TRST(可选)信号,产生 IR、DR和其他组件所需的时钟和控制信号,控制所要执行的操作,如复位、移位、捕获和更新等。
(2)IR 指令解码选择所要进行操作的DR
(3)TMP控制器是可选组件,可接收指令解码信号,用于修改TAP控制器产生的一些控制信号。
所以此测试逻辑,就是通过JTAG接口根据指令去对DR进行读操作或者写操作,写数据从TDI输入,读数据从TDO输出。
二、Instruction register
参考JTAG标准第七章指令寄存器(Instruction register)
顾名思义,指令寄存器用来存储指令的,指令通过TDI输入到指令寄存器,再通过指令译码,产生对应控制信号, 用于选择要执行的测试操作或要访问的测试数据寄存器(DR)。
2.1 D型扫描触发器
在正式介绍IR结构之前,先介绍下带多路选择器的D型扫描触发器,此扫描触发器是扫描测试结构的基本单元。

图1 D型触发器和带多路选择器的D型扫描触发器
扫描触发器有两种工作模式,分别为:
- 正常工作模式:scan_enable 为 0,此时数据从D端输入,从Q端输出。
- 扫描移位模式:scan_enable 为 1,此时数据从scan_in 输入,从scan_out输出(Q与scan_out复用)
将这种扫描单元按照扫描移位模式连接起来,就构成了扫描测试中的基本结构,这里仅简单介绍全扫描。全扫描就是多个扫描单元相连接,上一单元的扫描输出,连接到目前单元的扫描输入,目前单元的扫描输出连接到下一单元的扫描输入,以此类推,构成一条移位寄存器链,如图2所示:

图2 全扫描
这样的扫描结构,可通过一个串行输入端,将期望的数据存入移位寄存器链并观察运行结果。
2.2 IR 电路结构
指令寄存器的电路结构与全扫描类似,同样是采用了移位寄存器链。其扫描单元如图3所示:

图3 IR扫描单元
表1 IR扫描单元信号概述
| 信号名 | 作用 |
|---|---|
| ShiftIR | 移位使能 |
| PI Data | 并行输入数据 |
| From last cell | 扫描输入(数据来自上一扫描单元的扫描输出端口) |
| ClockIR | 扫描单元时钟信号,仅在Capture-IR和Shift-IR状态时有效 |
| Update IR | 指令位触发器时钟信号,仅在Update-IR状态时有效 |
| Reset | 复位信号,用于强制性指令解码(BYPASS或IDCODE) |
| To next cell | 扫描输出(连接到下一扫描单元的扫描输入端口) |
| Instruction bit | 指令位,指示是否为该指令位对应的指令 |
构成的移位寄存器链如图4所示:

图4 带译码器的IR完整电路
扫描路径已经用红色笔标注了,所以IR就是根据TAP输出的控制信号,来进行对应的移位,更新,捕获等操作,译码器对指令进行译码,并将对应的指令位置1并输出来控制测试逻辑架构其他组件。其中在 Test-Logic-Reset 状态时,Instruction1将被复位,表示强制性指令BYPASS或者IDCODE。
2.3 指令寄存器的操作
在不同的 TAP 控制器状态下,IR进行的操作不同,详情见图5:

图5 每个 TAP 状态下IR的操作
可以看到 IR 扫描单元存储值只在Shift-IR状态和Capture-IR状态发生改变,且指令只在 Test-Logic-Reset 和 Update-IR 状态更新并生效,其中前者是复位到强制性指令BYPASS或者IDCODE,后者则是更新为译码器结果。
三、Test data registers
参考JTAG标准第九章测试数据寄存器(Test data registers)、第10章旁路寄存器(Bypass register)、第11章边界扫描寄存器(boundary-scan register)。
此标准所定义的测试逻辑架构中,测试数据寄存器至少要包括两种寄存器,分别为旁路寄存器(Bypass Register)和边界扫描寄存器(boundary-scan register),当然也有其他可选寄存器,如设备ID寄存器、芯片ID寄存器、初始化数据寄存器等。
3.1 TDR的实现
TDR是由多个测试数据寄存器组成,每个数据寄存器又基于移位寄存器实现,从而可以通过串行输入将数据写入选中的数据寄存器中,一种实现方案如图1所示:

图1 一组测试数据寄存器的实现
实线绘制的寄存器为必须实现的数据寄存器,虚线绘制的寄存器为可选实现的。可以看到数据通过TDI端口串行输入到DR中,再通过MUX选择要输出的数据,经TDO端口输出。
下面简单介绍下所实现的一些DR。
3.2 Bypass Register
该寄存器只有一个移位寄存器,即只能存储1bit数据,存在的意义是当进行某项测试操作时,不需要访问其他的DR,那么TDI就选择从旁路寄存器通过,从而减少对感兴趣段的测试访问时间,也就是让数据能尽快从TDI达到感兴趣段。
实现的电路结构图如图2所示:

图2 旁路寄存器
表1 DR输如输出信号概述
| 信号名 | 作用 |
|---|---|
| ShiftDR | 移位使能 |
| From TDI | 串行扫描输入 |
| ClockDR | 移位时钟信号,仅在Capture-DR和Shift-DR状态时有效 |
标准中提供了一个例子:
现有一个包含 100 个芯片的电路板,每个芯片的边界扫描寄存器中有 100 位。 如果所有芯片同时串联连接,则电路板上的边界扫描路径将包括 10000 个移位寄存器。 现在需要仅访问测试路径上的一个芯片,这会导致测试时间过长。但若存在旁路寄存器的话,便可大大减少路径上经过的移位寄存器级数,具体方法是将 99 个芯片设置为仅通过其旁路寄存器进行移位,而被测芯片在路径中仍是通过边界扫描寄存器去测试。 这将使总串行路径级数减少为 199 级,与 10000 级相比大幅减少。
3.3 Boundary-scan register
在DR中,边界扫描寄存器(BSR)是最复杂了,标准中用来解释该寄存器的篇幅也比较长,这里简单介绍一下,后续等自己理解加深后再更新。

图3 无BSR的组件
该组件有输入输出管脚,输入输出缓冲器,输入信号分为时钟信号和非时钟信号,输出信号部分可通过一些控制信号控制其输出。
BSR的作用就是用来观察这样一个片上系统逻辑的输入输出引脚传输的数据,接下来介绍一下BSR单元
- “observe-only”单元

图4 “observe-only”单元
为三端单元,两个输入端,一个输出端,其中一个输入端接Pin,用于将输入或者输出管脚的信号加载到移位寄存器中,另外两个端口用于与其他单元相连接,组成完整的扫描链。
- “control-and-observe” 单元

图5 “control-and-observe”单元
为四端单元,两个输入端口,两个输出端口,其中一个输入端接Pin,用于将输入或者输出管脚的信号加载到移位寄存器中,一个输出端口用于将存储的数据加载到Pin上,另外两个端口用于与其他单元相连接,组成完整的扫描链。此单元构成的BSR就可以将期望的测试输入向量加载到芯片中。
其内部结构如图6所示:

图6 “control-and-observe”单元内部结构
这里多了一些输入端口,传输时钟信号和控制信号,方便通过指令对BSR进行一些操作。
参考文献
【1】IEEE Standard for Test Access Port and Boundary-Scan Architecture IEEE Std 1149.1-2013
【2】SoC设计方法与实现 第三版 郭炜
- 更多技术文章和学习资料,请关注我的公众号:【集成电路设计教程】
- 全平台统一:【雪天鱼】
JTAG 标准IEEE STD 1149.1-2013学习笔记(一·)Test logic architecture、Instruction register以及Test data registers的更多相关文章
- Dynamic CRM 2013学习笔记(二)插件基本用法及调试
插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可 ...
- Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解
CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> ...
- Dynamic CRM 2013学习笔记 系列汇总
这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") &a ...
- Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具
基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的 ...
- Dynamic CRM 2013学习笔记(五)禁止修改、删除审批通过后的单据
审批通过后的单据,一般要对其进行控制,不能修改,不能添加,删除等,下面分别介绍下如何实现: 一. 禁止修改: 1. 主表控制,如果页面上审批状态为审批中或审批通过,就把整个页面都disable掉 1: ...
- Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...
- Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件
上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...
- Dynamic CRM 2013学习笔记(十四)复制/克隆记录
经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的 ...
随机推荐
- java 反射 的详细总结
1.前言 什么是反射? 引用教科书的解释: 在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的 ...
- yii2安装配置完成后,网页打开报错yii\web\Request::cookieValidationKey must be configured with a secret key
下载了Yii2.0的basic版,配置好nginx之后,浏览器访问,出现如下错误: Invalid Configuration – yii\base\InvalidConfigException yi ...
- Java Date 类型比较
//某时间Date time = tRemind.getTime();//现在时间Date now = new Date();//结果大于0则是现在时间大于某时间//结果等于0则为刚好相等//结果小于 ...
- 学习Layui笔记-父窗口获取子窗口的radio
最近学习layui,使用radio做单项选择的时候,发现layui无论怎么取值,都是默认取到第一个radio的值. 百度下找解决方法. html页面部分 <div class="lay ...
- 《剑指offer》面试题24. 反转链表
问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...
- mysql数据库优化1
目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...
- 【vps】Centos 7安装python3.8.5
[vps]Centos 7安装python3.8.5 前言 由于服务器的搬迁,从香港搬到了大陆,原来的香港服务器即将到期,所以趁着大陆服务器在备案的时候,将新服务器的配置先配置一下.这篇文章就是分享C ...
- Solon Web 开发,七、视图模板与Mvc注解
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Cesium入门1 - Cesium介绍
Cesium入门1 - Cesium介绍 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium简介 Ce ...
- Qt之QFontDialog
widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { ...