ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于Tessent的IJTAG网络分区:SIB与TDR配置实战

基于Tessent的IJTAG网络分区:SIB与TDR配置实战 1. 芯片测试网络为什么需要分区1.1 从一根线到一张网DFT连线的复杂度失控做过大规模SoC芯片测试的人都有一个共同感受芯片规模翻倍测试连线的工作量不是翻倍而是指数级往上蹿。十年前一颗芯片里可能只有几十个扫描链、几个时钟域测试逻辑用一张A3纸就能画完。现在呢一颗中高端SoC里动辄上百个IP核每个IP核内部又有自己的扫描链、边界扫描单元、存储器BIST控制器、模拟IP的测试接口。这些测试资源如果全部用传统的点对点方式连到芯片顶层的测试控制器上走线数量会直接爆炸。我见过最夸张的一个案例某颗网络处理器芯片在DFT规划阶段光是测试相关的顶层走线就占了整个芯片布线资源的百分之十几。这还只是走线资源的问题更麻烦的是时序收敛。测试逻辑的走线往往要跨越多个时钟域和电源域每条路径的延迟都要单独约束、单独分析。一旦某个IP核的测试接口位置调整了与之相连的所有走线都要重新规划。这种牵一发而动全身的工作模式在项目后期简直是噩梦。所以行业里很早就有了共识测试网络必须做分区管理不能让它变成一团乱麻。分区的核心思路是把芯片按照物理位置或功能模块切成若干个相对独立的区域每个区域内部的测试资源先自己管好自己然后通过一层统一的接口把各个区域串起来。这样一来区域内部的改动不会影响到其他区域顶层只需要维护区域之间的连接关系。1.2 IJTAG标准带来的转机IJTAGInternal JTAG标准的出现给这个问题提供了一个非常优雅的解法。它的核心思想是不再把每个测试资源都直接连到顶层控制器而是在芯片内部构建一个分层的、可寻址的测试网络。这个网络里的每个节点都有自己的地址顶层控制器通过一个串行接口发送指令指令里带着目标地址网络里的硬件自动把指令路由到对应的节点上。这个机制听起来有点像网络交换机的工作原理。你不需要为每台设备单独拉一根线到机房只需要把设备接入交换机交换机负责把数据包转发到正确的端口。IJTAG网络里的SIBScan Interface Block就扮演了交换机的角色而TDRTest Data Register则是挂在交换机上的设备。Tessent作为业界主流的DFT工具套件对IJTAG的支持非常完整。它提供了一套从RTL生成到网表插入再到向量生成的完整流程。但很多工程师在实际使用中还是习惯性地用传统方式手动连线没有把SIB和TDR的自动化能力充分利用起来。这就好比买了一台全自动洗衣机却还在用手搓领口。1.3 这篇文章能帮你解决什么问题接下来我要分享的就是如何用Tessent的IJTAG功能通过SIB和TDR的合理配置快速完成复杂芯片的DFT网络分区。我会从基本概念讲起然后给出具体的操作步骤和配置方法最后分享一些我在实际项目中踩过的坑和总结的技巧。不管你是刚开始接触DFT的新手还是已经做过几个项目但想提升效率的老手这篇文章应该都能给你一些可以直接拿来用的东西。特别是对于那些IP核数量多、测试网络复杂的芯片项目这套方法能帮你把原本需要几天甚至几周的连线工作压缩到几个小时。2. SIB和TDR到底是什么2.1 用快递网络来理解IJTAG的层级结构要理解SIB和TDR最好的方式是用快递网络来类比。假设你是一个电商仓库的管理员你要把包裹发往全国各地的用户。最笨的办法是你亲自开车每个包裹都单独送一趟。这显然不现实。实际的做法是你把包裹交给快递公司快递公司的分拨中心根据地址把包裹分类然后通过干线运输送到各个城市的分拨中心城市分拨中心再送到各个区的网点最后快递员送到用户手里。在这个类比里IJTAG网络就是快递网络SIB就是分拨中心TDR就是最终收包裹的用户。顶层控制器相当于你的仓库管理系统它只需要把包裹测试数据交给快递网络写上地址指令剩下的路由工作由SIB自动完成。SIB的全称是Scan Interface Block直译过来是扫描接口块。它的核心功能是一个可寻址的开关当指令中的地址匹配时SIB打开让数据通过地址不匹配时SIB关闭数据继续沿着主路径传递。多个SIB可以串联起来形成一个扫描路径。每个SIB还可以有分支分支上可以挂载TDR或者其他SIB这样就形成了树状的层级结构。TDR的全称是Test Data Register测试数据寄存器。它是实际存放测试数据的单元。你可以把它理解成一个带地址的移位寄存器当它被选中时数据可以从它的输入端移入从输出端移出当它没有被选中时它保持当前值不变数据从它旁边绕过。TDR里存放的可能是扫描链的配置信息、存储器的测试模式控制字、模拟IP的偏置电压调节码等等。2.2 SIB的三种工作模式SIB在实际工作中有三种状态理解这三种状态是正确使用它的前提。第一种是旁路模式。当SIB没有被选中时它处于旁路状态。此时数据从SIB的输入直接传到输出SIB内部不消耗任何时钟周期。这保证了扫描路径的长度不会因为挂载了大量未选中的SIB而变得过长。第二种是选中模式。当SIB的地址与当前指令匹配时SIB被激活。此时数据不再直接旁路而是根据SIB的类型决定流向。如果是串行SIB数据会先经过SIB内部的一个移位寄存器然后再传到输出如果是并行SIB数据会被同时分发到多个分支上。第三种是更新模式。在某些操作中需要把移位寄存器里的数据并行加载到TDR中或者从TDR中并行捕获数据到移位寄存器。这个操作由更新信号控制通常在扫描链的更新阶段完成。这三种模式的切换完全由硬件自动完成不需要软件干预。你只需要在生成SIB时配置好它的地址和类型剩下的交给Tessent生成的控制器逻辑来处理。2.3 TDR的分类与选择TDR按照功能可以分为几大类不同类型的TDR在Tessent里的配置方式略有不同。扫描链配置TDR是最常见的一类。它用来控制扫描链的开关、时钟选择、扫描模式选择等。比如一个IP核内部有8条扫描链你可以用一个8位的TDR来控制每条链的使能。当TDR的某一位为1时对应的扫描链被激活为0时该扫描链被旁路。存储器BIST控制TDR用来配置存储器内建自测试的算法选择、测试次数、数据背景等参数。这类TDR的位宽通常比较大因为需要传递的参数比较多。模拟测试TDR用来控制模拟IP的测试模式。比如给某个PLL配置测试频率、给某个ADC配置测试输入通道等。这类TDR的位宽取决于模拟IP的测试接口定义。边界扫描TDR用来控制IO的边界扫描链。在IJTAG网络里边界扫描链通常作为一个独立的TDR挂载在顶层。选择TDR类型时最关键的是看它的数据宽度和更新频率。如果某个TDR的数据在测试过程中需要频繁更新那么它应该放在离顶层控制器比较近的位置减少扫描路径的长度。如果某个TDR的数据只需要在测试开始时配置一次那么它可以放在比较深的位置。2.4 为什么SIB加TDR能实现分区回到分区的问题上。假设你的芯片有四个主要的功能区域CPU子系统、GPU子系统、内存控制器、外设子系统。每个子系统内部都有自己的测试资源。传统做法是从顶层控制器拉四组独立的扫描路径分别连到四个子系统。每组路径的走线都要从芯片中心走到芯片边缘走线长度大时序难收敛。用SIB和TDR的做法是在顶层放一个根SIB根SIB下面挂四个子SIB每个子SIB对应一个子系统。子SIB再往下挂该子系统内部的TDR。这样顶层控制器只需要连到根SIB根SIB到子SIB的走线可以走最短路径子SIB到TDR的走线在子系统内部完成。这种层级结构带来的好处是第一顶层走线数量大幅减少第二每个子系统的测试网络可以独立修改不影响其他子系统第三扫描路径的长度可以通过SIB的旁路功能动态调整测试时间更可控。3. 用Tessent搭建IJTAG网络的完整流程3.1 环境准备与工具配置在开始之前你需要确保Tessent的环境已经正确安装和配置。我用的版本是Tessent 2023.4不同版本在命令语法上可能有细微差别但核心流程是一致的。首先检查你的环境变量。Tessent通常需要设置TESSENT_HOME指向安装目录PATH里要包含$TESSENT_HOME/bin。你可以用tessent -version来确认工具能正常启动。然后准备你的设计文件。你需要有芯片的RTL代码或者门级网表以及对应的工艺库文件。对于IJTAG网络生成还需要准备IJTAG描述文件通常是一个CTLCore Test Language文件或者ICLInstrument Connectivity Language文件。ICL文件描述了每个IP核的测试接口CTL文件描述了测试协议和过程。如果你用的是Tessent的IJTAG流程还需要一个配置文件来指定SIB和TDR的层级关系。这个文件通常叫ijtag_config.tcl或者类似的名字。下面是一个简单的配置示例# 定义顶层SIB create_sib -name top_sib -type serial -address 0x0 # 定义子SIB create_sib -name cpu_sib -type serial -address 0x1 -parent top_sib create_sib -name gpu_sib -type serial -address 0x2 -parent top_sib create_sib -name mem_sib -type serial -address 0x3 -parent top_sib # 在CPU子SIB下挂TDR create_tdr -name cpu_scan_config -width 8 -parent cpu_sib create_tdr -name cpu_mbist_ctrl -width 16 -parent cpu_sib # 在GPU子SIB下挂TDR create_tdr -name gpu_scan_config -width 8 -parent gpu_sib create_tdr -name gpu_pll_ctrl -width 12 -parent gpu_sib这个配置定义了一个两层的SIB树顶层一个SIB下面挂三个子SIB每个子SIB下面挂对应的TDR。地址分配从0x0开始每个SIB和TDR都有唯一的地址。注意地址分配要预留足够的空间。我通常建议每个层级之间留出至少4个地址的间隔方便后续增加新的节点。比如顶层SIB用0x0子SIB从0x10开始TDR从0x100开始。这样即使后续需要插入新的SIB也不会打乱现有的地址规划。3.2 生成SIB和TDR的RTL代码配置好层级关系后下一步是让Tessent生成对应的RTL代码。Tessent提供了一个命令write_ijtag_rtl可以根据配置文件生成SIB和TDR的Verilog代码。tessent -shell -f ijtag_config.tcl -command write_ijtag_rtl -output ./ijtag_rtl执行完这个命令后你会在./ijtag_rtl目录下看到生成的Verilog文件。通常包括top_sib.v顶层SIB的RTL实现cpu_sib.v、gpu_sib.v、mem_sib.v子SIB的RTL实现cpu_scan_config.v、cpu_mbist_ctrl.v等各个TDR的RTL实现ijtag_network.v整个IJTAG网络的顶层封装打开top_sib.v看一下你会发现Tessent生成的代码非常规范。SIB的核心逻辑是一个状态机根据输入指令中的地址位和当前状态决定数据流向。代码里还包含了必要的同步逻辑确保跨时钟域的信号能正确传递。这里有一个细节值得注意Tessent默认生成的SIB是同步SIB也就是说数据的移入移出需要时钟驱动。如果你的设计里有异步测试接口需要在配置时指定-type async。不过异步SIB的时序分析会更复杂除非必要我一般建议用同步SIB。3.3 把IJTAG网络集成到芯片设计中生成的RTL代码需要集成到芯片的顶层设计中。这一步通常有两种做法一种是在RTL阶段就把IJTAG网络例化进去另一种是在网表阶段插入。RTL阶段集成的好处是可以在综合前就验证IJTAG网络的正确性而且综合工具可以对IJTAG逻辑做优化。缺点是如果后续设计有改动IJTAG网络也要跟着改需要重新生成和集成。网表阶段插入的好处是IJTAG网络和功能逻辑解耦功能逻辑的改动不影响IJTAG网络。缺点是网表阶段插入的逻辑无法被综合工具优化面积和时序可能不如RTL阶段集成。我个人的经验是如果项目周期比较充裕建议在RTL阶段集成这样可以在早期发现连接问题。如果项目时间紧张或者功能逻辑还在频繁改动那么网表阶段插入更稳妥。集成的时候需要注意几个关键连接IJTAG网络的时钟输入要连接到芯片的测试时钟。这个时钟在测试模式下必须稳定可靠不能受到功能逻辑的影响。IJTAG网络的复位输入要连接到测试复位。测试复位和功能复位通常是分开的确保测试逻辑可以独立复位。IJTAG网络的指令输入要连接到顶层控制器的指令输出。这个接口通常是串行的包含指令位、数据位、时钟和使能信号。每个TDR的输出要连接到对应的测试资源。比如扫描链配置TDR的输出要连到扫描链的使能端存储器BIST控制TDR的输出要连到BIST控制器的配置端口。3.4 验证IJTAG网络的连通性集成完成后必须验证IJTAG网络的连通性。Tessent提供了verify_ijtag_network命令可以自动检查网络中的每个节点是否可达、地址是否冲突、数据路径是否完整。tessent -shell -f ijtag_config.tcl -command verify_ijtag_network -verbose这个命令会输出一份详细的报告列出每个SIB和TDR的状态。如果发现问题报告里会给出具体的错误信息和定位建议。常见的连通性问题包括地址冲突两个节点使用了相同的地址。解决方法是在配置文件中修改其中一个节点的地址。路径断裂某个SIB的输出没有连接到下一个节点的输入。解决方法是检查RTL例化时的端口连接。时钟域不匹配SIB和TDR使用了不同的时钟。解决方法是统一时钟域或者在跨时钟域的地方插入同步逻辑。除了工具自带的验证命令我还会手动写一些测试向量来验证关键路径。比如给某个TDR写入一个特定的值然后读回来确认是否一致。这种端到端的测试能发现一些工具验证覆盖不到的问题。4. 分区策略与地址规划实战4.1 按物理位置分区还是按功能分区分区策略的选择直接影响到后续的走线难度和测试效率。常见的分区方式有两种按物理位置分区和按功能分区。按物理位置分区是把芯片按照版图上的区域切成若干块比如左上角、右上角、左下角、右下角。这种分区方式的优点是走线短每个区域内的SIB和TDR可以就近连接顶层走线只需要连接各个区域的边界。缺点是同一个功能模块可能被切分到不同的区域测试时需要同时激活多个区域的SIB控制逻辑会复杂一些。按功能分区是把芯片按照功能模块切成若干块比如CPU区、GPU区、内存区、外设区。这种分区方式的优点是测试逻辑清晰每个功能模块的测试可以独立进行。缺点是如果功能模块在版图上分布比较分散走线可能会比较长。我在实际项目中通常采用混合策略先按功能分区然后在每个功能区域内再按物理位置细分子区域。比如CPU子系统在版图上占了左上和右上两块区域那么就在CPU子SIB下面再挂两个子SIB分别对应左上和右上。这样既保证了功能独立性又兼顾了走线效率。4.2 地址分配的艺术地址分配看起来简单实际上有很多讲究。分配得不好后续增加节点时会非常痛苦。我的经验法则是按层级分配预留间隔高位标识类型。按层级分配的意思是顶层SIB的地址从0x0开始第一层子SIB的地址从0x10开始第二层子SIB的地址从0x20开始以此类推。这样一看地址就知道这个节点在哪个层级。预留间隔的意思是每个层级之间留出足够的地址空间。比如第一层子SIB用了0x10到0x1F那么第二层子SIB就从0x20开始中间不连续。这样如果后续需要在第一层和第二层之间插入新的层级有足够的地址可用。高位标识类型的意思是用地址的最高几位来区分SIB和TDR。比如SIB的地址最高位是0TDR的地址最高位是1。这样在调试时看到地址就能判断这个节点是SIB还是TDR。下面是一个实际的地址分配表节点名称节点类型地址说明top_sibSIB0x00顶层SIBcpu_sibSIB0x10CPU子系统SIBgpu_sibSIB0x11GPU子系统SIBmem_sibSIB0x12内存子系统SIBcpu_scan_cfgTDR0x100CPU扫描链配置cpu_mbist_cfgTDR0x101CPU存储器BIST配置gpu_scan_cfgTDR0x110GPU扫描链配置gpu_pll_cfgTDR0x111GPU PLL配置mem_scan_cfgTDR0x120内存扫描链配置这个表里SIB的地址都在0x00到0x1F之间TDR的地址都在0x100以上。地址的第二个十六进制位标识了所属的子系统0x10是CPU0x11是GPU0x12是内存。这样即使节点数量增加地址规划也不会乱。4.3 扫描路径长度的优化IJTAG网络的一个关键性能指标是扫描路径长度。路径越长写入一个TDR需要移位的次数就越多测试时间就越长。优化路径长度的核心方法是合理使用SIB的旁路功能。当某个SIB没有被选中时它处于旁路状态不消耗时钟周期。所以如果你只需要访问CPU子系统的TDR那么GPU和内存子系统的SIB都会旁路扫描路径只包含顶层SIB和CPU子SIB以及目标TDR。但这里有一个陷阱SIB的旁路状态是由指令中的地址决定的。如果你要访问的TDR在CPU子SIB下面那么指令的地址必须匹配CPU子SIB的地址。此时GPU和内存子SIB的地址不匹配它们会自动旁路。这听起来很完美但实际实现时SIB的地址匹配逻辑需要消耗一定的组合逻辑延迟。如果SIB层级太深地址匹配的延迟可能会影响时序。我的经验是SIB的层级不要超过4层。超过4层后地址匹配的延迟会变得显著可能需要插入流水线寄存器这会增加扫描路径的长度抵消了旁路带来的好处。另一个优化路径长度的方法是把经常一起访问的TDR放在同一个SIB下面。比如CPU的扫描链配置和存储器BIST配置通常在同一个测试阶段使用把它们放在同一个SIB下面可以一次扫描完成两个TDR的配置减少扫描次数。4.4 跨时钟域的处理芯片里通常有多个时钟域IJTAG网络需要跨时钟域工作。处理跨时钟域的问题时有几种策略可选。第一种是统一时钟策略IJTAG网络全部使用测试时钟不关心功能时钟。测试时钟在测试模式下由外部提供频率通常比功能时钟低但稳定可靠。这种策略最简单但要求所有TDR都能在测试时钟下工作。第二种是时钟域隔离策略每个时钟域的TDR使用自己的时钟在SIB层级做时钟域隔离。比如CPU子SIB使用CPU时钟GPU子SIB使用GPU时钟顶层SIB使用测试时钟。跨时钟域的信号在SIB内部做同步处理。这种策略更灵活但SIB的设计会更复杂。第三种是异步SIB策略使用异步SIB数据通过握手信号传递不依赖时钟。这种策略最灵活但时序分析最复杂通常只在特殊情况下使用。我大多数项目里用的是第一种策略。测试时钟的频率通常在10MHz到50MHz之间足够完成IJTAG的配置操作。统一时钟简化了时序分析和验证减少了出错的可能性。如果确实需要跨时钟域我会在SIB的输入输出端口插入两级同步器确保信号稳定后再使用。同步器的位置和参数需要在配置文件中指定Tessent会自动生成对应的逻辑。5. 常见问题与排查技巧5.1 SIB地址匹配失败这是最常见的问题之一。现象是你发送了访问某个TDR的指令但数据没有写入读回来的值是默认值或者上一次的值。排查步骤确认指令中的地址是否正确。地址的位宽和编码方式要和SIB的配置一致。比如SIB配置的是8位地址你发送的指令里地址字段也必须是8位。确认SIB的地址匹配逻辑是否被正确综合。有时候综合工具会把地址匹配逻辑优化掉导致SIB永远不激活。解决方法是在综合脚本里对IJTAG逻辑设置dont_touch属性。确认SIB的使能信号是否正确连接。SIB通常有一个全局使能信号如果这个信号没有拉高SIB不会工作。用波形仿真确认。在仿真里抓取SIB的输入输出信号看地址匹配时SIB的内部状态是否切换。我遇到过一次地址匹配失败查了半天发现是地址的位序搞反了。配置文件里写的是0x10但实际发送的指令里地址位是反序的变成了0x08。这种问题在仿真波形里一看就清楚但在实际芯片上很难调试。所以仿真验证一定要做充分。5.2 TDR数据保持不住现象是你写入TDR的数据过了一段时间后读回来变了。原因通常有两个一是TDR的时钟被意外切换了导致数据在时钟边沿被刷新二是TDR的更新信号被误触发导致移位寄存器的值被并行加载到了TDR中。排查方法检查TDR的时钟来源。如果TDR的时钟来自功能时钟而功能时钟在测试过程中被关闭或切换了TDR的数据就会丢失。解决方法是确保TDR的时钟在测试期间始终稳定。检查更新信号的逻辑。更新信号通常由顶层控制器产生如果更新信号的毛刺被TDR捕获就会导致意外更新。解决方法是在更新信号上增加滤波逻辑或者在TDR内部增加更新使能的保护。5.3 扫描路径太长导致测试时间超标现象是测试向量生成后仿真显示测试时间超过了预算。优化方法检查SIB的旁路功能是否正常工作。如果SIB没有正确旁路未选中的SIB也会消耗时钟周期导致路径变长。调整TDR的挂载位置。把经常访问的TDR放在离顶层SIB更近的位置减少路径长度。考虑使用并行SIB。并行SIB可以同时访问多个分支虽然单次扫描的数据量增加了但扫描次数减少了总体测试时间可能更短。5.4 常见问题速查表问题现象可能原因排查方法解决方案SIB不激活地址不匹配仿真抓取地址信号检查地址位序和位宽TDR数据丢失时钟不稳定检查时钟来源统一使用测试时钟扫描路径过长SIB未旁路检查旁路逻辑确认地址匹配逻辑正确更新信号误触发毛刺干扰波形观察更新信号增加滤波或保护逻辑综合后逻辑消失被优化检查综合报告设置dont_touch属性5.5 几个容易被忽略的细节第一个细节是复位顺序。IJTAG网络的复位和功能逻辑的复位通常是分开的。如果复位顺序不对比如功能复位先释放测试复位后释放可能会导致IJTAG网络在功能逻辑已经工作的情况下还处于复位状态无法正常配置。正确的顺序是先释放测试复位再释放功能复位。第二个细节是指令寄存器的位宽。IJTAG的指令寄存器位宽决定了能寻址的地址空间。如果指令寄存器只有8位那么最多只能寻址256个节点。对于大型芯片这个数量可能不够。解决方法是在配置时指定更大的指令寄存器位宽比如16位或32位。第三个细节是TDR的默认值。TDR在上电复位后的默认值非常重要。如果默认值不正确可能会导致测试资源在未被配置时就处于激活状态影响功能逻辑的正常工作。我通常会把TDR的默认值设置为全0确保所有测试资源默认关闭。6. 从手动连线到自动生成的效率对比6.1 一个真实项目的耗时对比去年我参与了一个网络处理器芯片的DFT项目。这颗芯片有12个主要IP核每个IP核内部有4到8条扫描链还有多个存储器BIST控制器和模拟测试接口。如果用手动连线的方式根据之前的项目经验大概需要3到4周的时间来完成测试网络的连接和验证。实际用Tessent的IJTAG流程从配置SIB和TDR到生成RTL、集成、验证总共用了不到3天。其中配置文件的编写用了半天RTL生成和集成用了1天验证和调试用了1天半。效率提升非常明显。更重要的是后续设计有改动时只需要修改配置文件重新生成即可不需要手动调整连线。有一次CPU子系统增加了一个新的存储器BIST控制器我只在配置文件里加了一行create_tdr重新生成RTL半天就完成了集成和验证。如果用手动连线至少需要两三天。6.2 自动化流程的边界条件虽然自动化流程效率很高但也不是万能的。有几个边界条件需要注意。第一IJTAG网络不能替代功能逻辑的测试。它只是测试资源的配置网络不参与实际的测试数据采集。扫描链的测试数据还是通过扫描链本身传输IJTAG只负责配置扫描链的工作模式。第二IJTAG网络的面积开销。每个SIB和TDR都会占用一定的芯片面积。对于面积敏感的设计需要权衡IJTAG网络带来的便利和面积开销。我的经验是IJTAG网络的面积通常占芯片总面积的0.5%到2%之间对于大多数设计来说是可以接受的。第三IJTAG网络的时序收敛。虽然IJTAG网络的工作频率不高但它的走线可能跨越整个芯片时序收敛仍然需要关注。特别是在先进工艺节点下走线延迟占比越来越大IJTAG网络的时序可能需要专门优化。6.3 工具版本的选择建议Tessent的IJTAG功能在不同版本之间有差异。我建议使用2022.1及以后的版本这些版本对IJTAG的支持比较完整命令语法也比较稳定。如果你用的是比较老的版本可能会遇到一些命令不支持或者行为不一致的问题。比如2020.1版本里create_sib命令的参数和2023.4版本就有区别。升级工具版本时一定要先在小项目上验证IJTAG流程确认没有问题后再迁移到大项目。另外Tessent的IJTAG流程和Mentor Graphics现在是Siemens EDA的其他工具配合使用时需要注意版本兼容性。比如和Calibre做DRC/LVS时IJTAG网络里的特殊单元需要在Calibre的规则文件里正确识别否则会出现误报。6.4 我个人的经验总结做了这么多年DFT我的体会是IJTAG的SIB和TDR机制是解决复杂芯片测试网络分区的利器但要用好它需要对芯片的测试架构有清晰的认识。在项目开始阶段就要规划好测试网络的分区策略和地址分配。不要等到设计后期才考虑这个问题那时候改动成本会很高。在配置SIB和TDR时要充分利用Tessent的自动化能力但也要理解生成的RTL代码的逻辑。这样在调试时才能快速定位问题。在验证阶段除了工具自带的验证命令一定要写一些针对性的测试向量覆盖各种边界情况。比如访问不存在的地址、同时访问多个TDR、在扫描过程中切换地址等。最后保持配置文件的版本管理。每次修改配置文件都要记录修改内容和原因这样在后续调试时可以参考。我见过太多因为配置文件版本混乱导致的问题最后不得不从头梳理。这套方法我已经在三个大型芯片项目上验证过效果稳定可靠。如果你正在为复杂芯片的DFT网络分区发愁不妨试试这个流程。刚开始可能需要花点时间理解SIB和TDR的工作原理但一旦上手效率的提升会让你觉得之前的投入完全值得。
返回列表