DFT测试之TAP/SIB/TDR
TAP的作用
tap全称是test access port,是将jtag接口转为reset、sel、ce、ue、se、si、tck和so这一系列测试组件接口的模块。
jtag的接口主要是下面几个信号:
信号名称 | 信号方向 | 信号描述 |
---|---|---|
TCK(测试时钟) | 输入 | 测试时钟,同步JTAG状态机和数据移位操作。 |
TMS(测试模式选择) | 输入 | 测试模式选择,控制JTAG TAP(Test Access Port)状态机 的转换。 |
TDI(测试数据输入) | 输入 | 测试数据输入,用于向芯片的JTAG逻辑串行输入测试指令或数据。 |
TDO(测试数据输出) | 输出 | 测试数据输出,用于从芯片的JTAG逻辑串行输出测试结果或状态。 |
TRST(测试重置) | 输入 | 可选信号,用于重置 TAP 控制器的状态机,低电平有效。如果没有该信号,也可通过 TMS 对 TAP 控制器进行复位。 |
上面的信号才是Jtag的接口信号,每一个信号都对应一个IOPAD。在设计中常会遇见tdo_en信号,这个信号是控制IOPAD在没有输出时,输出高阻态。它并不是实体的IO信号。也有可能会遇见tdi_en信号,控制IOPAD没有输入时,输入为高阻。单一般不会控制IOPAD的输入。
那么TAP就是把这些Jtag接口,主要是通过解析TMS的指令来生成以下组件控制信号。
端口 | 方向 | 全称 | 功能描述 | 时序 |
reset | 输入 | Reset | 异步或同步复位信号,用于初始化DFT逻辑(如扫描链)。 | 复位时立即生效,扫描链寄存器被清零或置位。 |
sel | 输入 | Select | 选择测试模式或功能模式: `sel=1` → 测试模式(扫描链激活) `sel=0` → 功能模式 | 通常在测试开始时拉高,测试结束时拉低。 |
ce | 输入 | Capture Enable | 控制扫描链捕获功能逻辑数据: `ce=1` → 捕获数据 `ce=0` → 保持或移位 | 在 `tck` 的上升沿生效。 |
ue | 输入 | Update Enable | 控制扫描链数据更新到功能逻辑: `ue=1` → 更新数据 `ue=0` → 保持 | 通常在 `tck` 的下降沿生效(取决于设计)。 |
se | 输入 | shift Enable | 控制扫描链模式: `se=1` → 移位模式(数据从 `si` 移入) `se=0` → 捕获模式 | 在 `tck` 的上升沿生效。 |
si | 输入 | Scan Input | 扫描链的串行输入数据,用于移入测试向量。 | 在 `tck` 的上升沿采样,数据逐位移入扫描链。 |
from_so | 输入 | From Scan Output | 来自另一条扫描链的串行输出(用于多扫描链级联)。 | 类似 `si`,但数据来自其他扫描链的 `so`。 |
tck | 输入 | Test Clock | 测试时钟,独立于系统时钟,控制扫描链的移位和捕获操作。 | 上升沿用于移位/捕获数据,下降沿可能用于更新(如 `ue`)。 |
so | 输出 | Scan Output | 扫描链的串行输出,用于移出测试响应数据。 | 在 `tck` 的上升沿或下降沿(取决于设计)输出扫描链的最后一位数据。 |
TAP的使用场景
大多数芯片采用 单 TAP + SIB(Scan Insertion Buffer) 的层次化架构,而非为每个 harden 分配独立 TAP:
单 TAP 控制所有 IP
-
芯片只有一个 顶层 TAP(遵循 IEEE 1149.1 JTAG 或 IEEE 1687 IJTAG 标准)。
-
通过 SIB(Scan Insertion Buffer) 动态选择访问不同 harden 的扫描链。
-
优点:节省面积、简化测试接口、兼容标准 JTAG 调试工具。
特殊情况:多 TAP(较少见)
某些场景可能为特定 harden 分配独立 TAP:
-
需求场景
-
安全隔离需求:如安全域与非安全域需物理隔离测试接口。
-
超大规模芯片:多个子系统需并行测试以减少时间。
-
第三方 IP 要求:某些硬核 IP 可能强制要求独立 TAP(如某些 GPU/DSP 核)。
-
-
缺点
-
面积开销:每个 TAP 需额外的 I/O 引脚和控制器逻辑。
-
测试复杂度:需多路复用芯片级 TAP 接口,或增加专用测试引脚。
-
向下图多个chip接成菊花链的形式,实际上就是每个chip里面的tap接成菊花链,当然一个chip内有多个tap也可以这样接,这样就是一个chip内的多个tap共用一套jtag接口,实际上不能实现并行测试,和使用单TAP+SIB的效果是一样的,而且TAP比SIB复杂太多了。如果要保证chip内多个tap能够并行测试,独立测试就需要多组jtag接口。
而且即使是单TAP+SIB,测试多个harden,出了在用jtag配置的时候需要串行【配置一般很快】,patter现在都是走SSN,SSN给多个harden灌patter之后,多个harden就可以并行测试。所以完全没有必要chip内多个tap
单TAP+SIB结构
每个sib有一个so输出,和一个sel_out输出。电路简图如下:
其中sib_ff2信号是sib在ue(update_En)时刻锁存的并打2拍信号,而sib是来自se(shift_en)有效时从si或者from_so shift进来的信号锁存。
下图给出了一个简单的三个harden级别的TAP+SIB结构
sib_xxx控制着xxx_sys是否在测试菊花链上,相当于一个开关。 在update时候锁存的sib_ff1表示是否bypass当前sib_xxx下的xxx_sys。为1表示不pypass;为0表示bypass。
当sib_ff1=1时:sel_out==1,此时si经过xxx_sys到sib_xxx的from_so在经过sib_xxx的so输出给后级sib和subsys
当sib_ff1=0时:sel_out==0,此时xxx_sys的输入si无法传递,so被sib_xxx bypass。si经过sib_xxx直接经过so传输给下级。
对于subsys测试来说只有si和so这一对输入输出数据线即可。但是subsys内部还可以存在多个sib和tdr组件,但是连接方式和上图类似,如下图的基本结构.具体不在细讲
TDR(Test data register)
主要用于在芯片测试过程中存储、控制和观察测试数据。
和sib的使用类似,或者可以说sib是一个单bit的特殊TDR。
tdr是个多bit的移位寄存器,输入为si,移位输出为so。在ue(updateEn)有效时刻,把tdr中信号锁存为tdr_ff,这个tdr_ff可以用来配置其他寄存器,用作控制作用;在ce时刻可以capture电路的输出响应;在SE时刻可以将测试数据串行或并行加载到电路中。分别描述如下:
1. 存储测试数据
-
TDR 用于临时存储测试输入(测试激励)或测试输出(测试响应)。
-
在 扫描测试(Scan Test) 中,TDR 可以作为扫描链(Scan Chain)的一部分,将测试数据串行或并行地加载到电路中。
2. 控制测试模式
-
在测试模式下,TDR 可以配置芯片的内部逻辑(如切换功能模式到测试模式)。
-
例如,通过 TDR 设置多路选择器(MUX)的输入,选择测试路径或功能路径。
3. 观察测试响应
-
在测试执行后,TDR 可以捕获电路的输出响应,并通过扫描链移出,供外部测试设备(ATE)分析。
-
帮助检测制造缺陷(如固定故障、桥接故障等)。
4. 支持多种测试方法
-
扫描测试(Scan Test):TDR 作为扫描触发器(Scan Flip-Flop)的集合,构成扫描链。
-
内建自测试(BIST):TDR 可能存储 BIST 的种子数据或中间结果。
-
边界扫描(Boundary Scan, IEEE 1149.1 JTAG):TDR 是边界扫描寄存器的一部分,用于测试板级互连。
5. 提高测试灵活性和覆盖率
-
通过动态配置 TDR 的值,可以针对不同模块或故障类型进行针对性测试。
-
支持分片测试(Partitioned Testing),降低测试复杂度。
相关文章:

DFT测试之TAP/SIB/TDR
TAP的作用 tap全称是test access port,是将jtag接口转为reset、sel、ce、ue、se、si、tck和so这一系列测试组件接口的模块。 jtag的接口主要是下面几个信号: 信号名称信号方向信号描述TCK(测试时钟)输入测试时钟,同…...

【推荐算法】DeepFM:特征交叉建模的革命性架构
DeepFM:特征交叉建模的革命性架构 一、算法背景知识:特征交叉的演进困境1.1 特征交叉的核心价值1.2 传统方法的局限性 二、算法理论/结构:双路并行架构2.1 FM组件:显式特征交叉专家2.2 Deep组件:隐式高阶交叉挖掘机2.3…...
C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException
【问题】 直接new一个PdfWriter的对象直接会报错: iText.Kernel.Exceptions.PdfException: Unknown PdfException. NotSupportedException: Either com.itextpdf:bouncy-castle-adapter or com.itextpdf:bouncy-castle-fips-adapter dependency must be added in…...

数据库表中「不是 null」的含义
例图: 1.勾选了「不是 null」(NOT NULL): 这个字段在数据库中必须有值,不能为空。也就是说,你插入数据的时候,必须给它赋值,否则插入会报错。 2.没有勾选「不是 null」ÿ…...
Elasticsearch的搜索流程描述
Elasticsearch 的搜索流程是一个结合 分布式查询、分片协同、结果聚合和排序 的复杂过程,其设计目标是在海量数据中实现快速检索和精准结果返回。以下是搜索流程的详细解析: 一、搜索流程总览 Elasticsearch 搜索流程示意图 (图源:Elastic 官方文档) 二、详细步骤解析 …...

Visual Studio问题记录
程序"xxx dotnet.exe"已退出,返回值为-2147450730 问deepseek:visual studio输出程序dotnet.exe已退出,返回值为-2147450730 dotnet.exe 编译时退出并返回错误代码 **-2147450730**(十六进制 0x80008076)&…...
GNSS终端授时方式-合集:PPS、B码、NTP、PTP、单站授时,共视授时
GNSS接收机具备授时功能,能够对外输出高精度的时间信息,并通过多种接口、多种形式进行时间信息的传递。 step by step介绍GNSS卫星导航定位基本原理,为什么定位需要至少4个卫星?这个文章的最后,我们介绍了为什么GNSS接…...
5.2 HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战
HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战 在HarmonyOS NEXT的全场景生态中,应用性能直接影响用户体验。通过专业的性能分析工具链、针对性的启动速度优化,以及精细化的功耗管理,开发者能够构建"秒…...
从EDR到XDR:终端安全防御体系演进实践指南
在数字化浪潮中,企业的终端安全面临着前所未有的挑战。从早期单纯的病毒威胁,到如今复杂多变的高级持续性威胁(APT)、零日漏洞攻击等,安全形势日益严峻。为应对这些挑战,终端安全防御技术不断演进ÿ…...

重启路由器ip不变怎么回事?原因分析与解决方法
在日常生活中,我们经常会遇到网络问题,而重启路由器是解决网络故障的常用方法之一。然而,有些用户发现,即使重启了路由器,自己的IP地址却没有变化,这让他们感到困惑。那么,重启路由器IP不变是怎…...

实践篇:利用ragas在自己RAG上实现LLM评估②
文章目录 使用ragas做评估在自己的数据集上评估完整代码代码讲解1. RAG系统构建核心组件初始化文档处理流程 2. 评估数据集构建3. RAGAS评估实现1. 评估数据集创建2. 评估器配置3. 执行评估 本系列阅读: 理论篇:RAG评估指标,检索指标与生成指…...
【CVE-2025-4123】Grafana完整分析SSRF和从xss到帐户接管
摘要 当Web应用程序使用URL参数并将用户重定向到指定的URL而不对其进行验证时,就会发生开放重定向。 /redirect?url=https://evil.com`–>(302重定向)–>`https://evil.com这本身可能看起来并不危险,但这种类型的错误是发现两个独立漏洞的起点:全读SSRF和帐户接管…...

高精度滚珠导轨在医疗设备中的多元应用场景
在医疗行业不断追求高效、精准与安全的今天,医疗设备的性能优化至关重要。每一个精密部件都像是设备这个庞大“生命体”中的细胞,共同维持着设备的稳定运行。滚珠导轨,这一看似不起眼却功能强大的传动元件,正悄然在医疗设备领域发…...
深入理解Java单例模式:确保类只有一个实例
文章目录 什么是单例模式?为什么我们需要单例模式?单例模式的常见实现方式1. 饿汉式(Eager Initialization)2. 懒汉式(Lazy Initialization)3. 双重检查锁定(Double-Checked Locking - DCL&…...

JavaScript性能优化实战:从核心原理到工程实践的全流程解析
下面我给出一个较为系统和深入的解析,帮助你理解和实践“JavaScript 性能优化实战:从核心原理到工程实践的全流程解析”。下面的内容不仅解释了底层原理,也结合实际工程中的最佳模式和工具,帮助你在项目中贯彻性能优化理念&#x…...

【应用】Ghost Dance:利用惯性动捕构建虚拟舞伴
Ghost Dance是葡萄牙大学的一个研究项目,研究方向是探索人与人之间的联系,以及如何通过虚拟舞伴重现这种联系。项目负责人Cecilia和Rui利用惯性动捕创造出具有流畅动作的虚拟舞伴,让现实中的舞者也能与之共舞。 挑战:Ghost Danc…...

使用 Mechanical 脚本获取联合反作用力和力矩
介绍 在上一篇文章中,我们详细介绍了在 Ansys Mechanical 静态/瞬态结构、随机振动和/或响应谱分析中提取所有螺栓连接的反作用力的过程。他,我们将讨论如何使用 Python 代码结果对象对关节连接执行相同的作,这对于随机振动/响应谱分析非常有…...
Java垃圾回收机制详解:从原理到实践
Java垃圾回收机制详解:从原理到实践 前言 垃圾回收(Garbage Collection,简称GC)是Java虚拟机自动管理内存的核心机制之一。它负责自动识别和回收不再被程序使用的内存空间,从而避免内存泄漏和溢出问题。深入理解垃圾…...
thinkphp8.1 调用巨量广告API接口,刷新token
1、在mysql中建立表sys_token; CREATE TABLE sys_token (id int UNSIGNED NOT NULL,access_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,expires_in datetime NOT NULL,refresh_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,refresh_token_expires_in …...
物联网数据归档方案选择分析
最近在做数据统计分析。我在做数据分析时候,需要设计归档表。有两种方式, 方式1:年月日。 其中,日表是每小时数据,每台设备有24条数据 月表是每天数据,每台设备根据实际月天数插入 年表是每月数据,每台设备有12条数据。 方式2:年月日时。 其中,小时表,是每个设备每小…...

微服务架构下的服务注册与发现:Eureka 深度解析
📦 一、引言 🌐 微服务架构中服务注册与发现的核心价值 在微服务架构中,服务注册与发现是支撑系统可扩展性、高可用性和动态管理的关键基础。 ✅ 核心价值解析 动态扩展与弹性伸缩 服务实例可随时上线/下线,无需手动更新配置&am…...

Qt/C++学习系列之QButtonGroup的简单使用
Qt/C学习系列之QButtonGroup的简单使用 前言QButtonGroup刨析源码 具体使用界面设计具体函数使用初始化信号与槽函数(两种方式) 总结 前言 在练手项目中,使用了QButtonGroup。项目需求有互斥的要求,在使用QRadioButton的基础上&a…...

CETOL 6σ v12.1 三维公差分析软件现已可供下载
一、新版本发布 德克萨斯州麦金尼 — 2025年6月5日 —Sigmetrix 宣布其最新版本的 CETOL 6σ 公差分析软件(v12.1)现已可供立即下载。公差分析在诸多方面为企业发展带来益处。它通过平衡质量与制造成本,助力企业提升盈利能力。企业还可借此缩…...

【JavaEE】Spring Boot项目创建
Spring Boot介绍 在学习Spring Boot之前,我们先来认识一下Spring Spring官方是这样介绍的: 可以看到,Spring让Java程序更加快速,简单和安全。Spring对于速度,简单性和生产力的关注使其成为世界上最流行的Java框架 Sp…...

KAG与RAG在医疗人工智能系统中的多维对比分析
1、引言 随着人工智能技术的迅猛发展,大型语言模型(LLM)凭借其卓越的生成能力在医疗健康领域展现出巨大潜力。然而,这些模型在面对专业性、时效性和准确性要求极高的医疗场景时,往往面临知识更新受限、事实准确性不足以及幻觉问题等挑战。为解决这些问题,检索增强生成(…...
车牌识别技术解决方案
在城市化进程不断加速的背景下,小区及商业区域的车辆管理问题日益凸显。为解决这一问题,车牌识别技术应运而生,成为提升车辆管理效率与安全性的关键手段。本方案旨在详细介绍车牌识别系统的基本原理、功能设计、实施流程以及预期效益…...
C/C++ 面试复习笔记(4)
1.在多线程的 Linux 程序中,调用系统函数(如pthread_create 创建线程、pthread_mutex_lock 锁定互斥锁等)可能会返回错误码。 与单线程环境相比,多线程环境下的错误处理有哪些需要特别注意的地方?请举例说明如何在多线…...
Unity 大型手游碰撞性能优化指南
Unity 大型手游碰撞性能优化指南 版本: 2.1 作者: Unity性能优化团队 语言: 中文 前言 在Unity大型手游的开发征途中,碰撞检测如同一位隐形的舞者,它在游戏的物理世界中赋予物体交互的灵魂。然而,当这位舞者的舞步变得繁复冗余时,便会悄然消耗宝贵的计算资源,导致帧率下…...
Git仓库的创建
Git服务器准备 假设Git所在服务器为Ubuntu系统,IP地址10.17.1.5。 一. 准备运行git服务的git用户,这里用户名就直接设定为git。 1. 创建一个git用户组,并创建git用户。 sudo groupadd git sudo useradd git -g git 2. 创建git用户目录&…...

从零到一:Maven 快速入门教程
目录 Maven 简介Maven 是什么为什么使用 Maven? 安装 Maven下载 Maven 配置 Maven解压文件配置本地仓库保存路径配置国内仓库地址 Maven 的核心概念了解 pom.xml 文件坐标依赖范围生命周期compileprovidedruntimetestsystemimport 依赖传递依赖排除依赖循环 继承1. …...