ARTICLE DETAIL

资讯详情

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

Tessent MBIST控制通路演进:从BSCAN到BAP的架构解析

Tessent MBIST控制通路演进:从BSCAN到BAP的架构解析 1. 整体设计思路为什么MBIST控制通路从BSCAN走向BAP芯片DFT这行干久了你会发现一个很有意思的现象很多测试逻辑的架构演进本质上是在解决同一个问题——怎么用最少的物理管脚把最多的测试控制信息送进芯片内部再把测试结果拿出来。Tessent MBIST从早期直接挂在boundary scan链上做控制到后来引入BAPBIST Access Port作为统一访问端口走的正是这条路。先说清楚这几者的关系。BSCAN就是IEEE 1149.1标准里的边界扫描链它通常通过TDI、TDO、TCK、TMS这四根或者加TRST五根测试管脚在芯片外部建立一个串行访问通道。Tessent MBIST用来测片内存储器比如SRAM、寄存器堆、ROM接口逻辑等它需要在测试模式下对存储器阵列施加March算法比对读出数据判断有没有坏单元。问题来了MBIST控制器和BSCAN链本身是两个相对独立的结构MBIST需要一个控制端口BSCAN是一条串行移位的寄存器链这两个东西怎么衔接早期有人直接把MBIST控制器的控制信号绑到BSCAN用户定义的data register上做完一次shift把控制字更新出去再等待测试完成。这种方式在小芯片、存储器数量少的时候完全够用。但当一颗SoC里动辄几十上百个存储器实例要跑的MBIST算法有多种测试频率、时钟域、fail状态回传逻辑越来越复杂再靠裸的BSCAN链去做逐位搬移控制字效率就很低了。这就催生了BAP。BAP在Tessent里承担的角色相当于一个芯片内部的“测试总线总闸”。它一头接BSCAN链或者TAP控制器另一头接多个MBIST控制器通过寄存器映射的方式来寻址和分发命令。你可以把BSCAN理解成一条进小区的市政马路BAP是小区内部的楼栋门禁总线而MBIST控制器则是每家每户的智能电表——你不需要为每个电表单独拉一根线只需要门禁总线上带一个房间号就能读到任何一户的度数。这篇文章适合三类人看刚入手Tessent想搞明白BSCAN和MBIST之间怎么就多了一个BAP的DFT工程师已经在用BAP但是遇到读写、pattern生成、ATE时序问题想查漏补缺的从业者还有正在做测试架构选型想判断到底要不要上BAP方案的项目负责人。前面两种最典型第三种建议看完第二部分再决定。2. 协同工作机制BSCAN链、TAP状态机与BAP的握手流程2.1 TAP状态机如何“顺路”访问BAP要理解BSCAN和BAP是怎么协同的绕不开TAP状态机。如果你已经在用Tessent对IEEE 1149.1的状态机一定不陌生通过TCK上升沿采样TMSTAP控制器在Test-Logic-Reset、Run-Test/Idle、Shift-DR、Update-DR、Capture-DR这些状态之间跳转。BSCAN链本身就是一个挂在TAP上的data registerTAP通过指令寄存器选择当前要访问哪一条data register链。BAP的出现没有推翻这套机制。它只是在芯片内部把原来的“一条长BSCAN移位链”变成了“一个BAP从机模块 多条短控制链”。访问方式变成了先用TAP指令选中BAP然后通过TDI把地址和写数据送进BAP的移位链更新之后BAP内部地址译码模块把数据分发到对应的MBIST控制器寄存器。读操作则反向MBIST控制器的状态寄存器的内容被捕获到BAP移位链里再通过TDO移出来。这个设计有几个非常实际的好处。第一不需要为每个MBIST控制器单独分配一条BSCAN chain链长不会随存储器数量线性增长。第二可以在不同的时钟域之间做隔离——BAP寄存器工作在TCK域MBIST控制器工作在自己的测试时钟域中间只传递经过同步的控制字避免跨时钟域打拍问题。第三ATE测试时只需指定一个用户指令后续的地址扩展完全由BAP内部译码逻辑处理测试pattern的编写和维护成本大大降低。我经常用一句话给刚入行的同事解释BSCAN管“怎么移位进来”BAP管“移进来的数据写到哪个MBIST控制器”MBIST管“拿到命令后怎么测存储器”。三者各管一段接口清晰职责不重叠。2.2 关键信号链路的逐段拆解在Tessent里BAP和MBIST控制器之间的接口信号通常遵循一种类似“类寄存器总线”的规范。虽然没有统一要求必须叫某个名字但实际项目里几乎都会包含以下几类信号写数据总线用于携带MBIST控制寄存器、算法选择寄存器、地址范围寄存器的配置值。写地址/写使能用于选择要写入的寄存器偏移地址并触发写入动作。读数据总线回传MBIST控制器的状态寄存器、fail count寄存器、done标志位。忙/完成标志告知外部当前MBIST是否正在执行测试序列能否接收下一条命令。复位与时钟BAP自身用TCK同步需要给MBIST控制器侧提供测试时钟的同步副本确保移位更新和MBIST内部的运行时钟不打架。实际项目中我会这样区分BAP侧所有信号都跟TCK同步MBIST侧所有信号都跟它自己的mblckMBIST时钟同步。两端之间用两级同步器或者简单的脉冲同步来处理跨时钟域。这一步看起来不起眼但我见过不止一个项目因为没有处理好BAP写使能跨时钟域导致MBIST控制器偶尔收不到正确命令在量产测试时出现极低比例的误判。如果你打开Tessent生成的网表会看到BAP内部大概有两组寄存器堆一组用来做指令分发叫做command block一组用来收集状态叫做status block。指令分发寄存器在TAP状态机进入Update-DR时被激活而状态寄存器在Capture-DR阶段被加载。这也是为什么在Spectrum、Tessent工具生成的pattern里MBIST测试通常会看到类似“capture status, then shift out”的固定序列。2.3 BAP与SSN的关系要拎清楚现在很多新项目在用Tessent SSNStreamed Scan Network有些同学会疑惑SSN是不是取代BAP了答案不是。SSN解决的是扫描链数据的广播和压缩网络它替代的是传统的mux scan chain通过时分复用把扫描链数据流化而BAP解决的是测试控制寄存器的寻址访问两者解决的问题层次不同。不过在实际flow里BAP时钟和SSN网络有时会放在同一个测试时钟域下管理因为两者都工作在慢速测试时钟下。我在一个项目里同时用过SSN管扫描链、BAP管MBIST控制二者共用TCK域频率互不干扰。接线时要小心一点的是不要在BAP的寄存器更新路径上插入SSN的压缩逻辑否则Update-DR时序容易出问题。这个细节在工具约束里看不出来但仿真时如果出现BAP寄存器更新失败优先查这里。3. 核心实现细节与实操要点Tessent中BAP相关逻辑怎么配3.1 初始化流程从RTL到MBIST控制器插入在Tessent flow里BAP相关逻辑的插入不是一个独立步骤而是在MBIST控制器插入阶段一起完成的。常见流程是这样第一步准备好RTL网表保证所有存储器都有对应的库单元描述。Tessent Memory BIST工具在运行时会识别存储器实例并为每个存储器或每组存储器创建MBIST控制器。第二步在Tessent Shell里设置基本约束。时钟、复位等约束和普通DFT约束一致但要注意MBIST控制器的测试时钟通常需要额外定义并且要在配置里告诉工具这个时钟和TCK是异步还是同步关系。如果BAP和MBIST在同一个测试时钟域需要在约束中把两者的关系定义成同步。第三步执行insert_mbist。Tessent会做两件事给每个存储器包一个MBIST控制器然后自动例化BAP模块把所有MBIST控制器的控制端口挂到BAP总线上。这一步生成的文件包括新的网表、BAP地址映射报告、以及MBIST pattern generation所需的接口文件。这里有一条重要的经验插入MBIST之前务必先跑一遍DRC。Tessent的dft_drc会检查存储器类型是否支持MBIST、时钟结构是否存在组合环路、BSCAN链是否完整。如果残留了未连接的TAP信号后面生成pattern时会报一堆奇怪的错排查起来很痛苦。3.2 BAP地址映射与寄存器分配的要点BAP给每个MBIST控制器分配地址这个地址映射关系会写到工具报告里。不同版本的Tessent在默认地址排布上略有差异但逻辑是一样的每个控制器至少需要几个配置寄存器写入测试算法、启动测试和一个状态寄存器读出完成标志、失败标志。实际使用时我建议维护一张地址映射表把每个存储器的名字和BAP地址对应起来。不要觉得工具报告已经生成了就不用管后面写测试pattern、做硬件调试、甚至在ATE上跑诊断脚本都要反复查这个表。我们有次在实验室定位一个fail问题焊了飞线直接通过JTAG去访问BAP地址没有这张表根本无从下手。另外要注意BAP地址位宽是有限的。Tessent会根据BAP总线上挂的控制器数量自动扩展地址位宽但如果设计里手动定了BAP地址位宽的上限后面新增存储器实例跑insert_mbist时可能会报地址空间不足。提前规划存储器数量的余量比后面改配置省事得多。3.3 BSCAN边界链与BAP的物理连接在顶层BAP的串行接口要挂到boundary scan链上通常挂到用户自定义data register而不是挂在boundary register链上。这里的区别是boundary register是标准定义的IO边界单元用于互连测试用户data register才是给芯片内部测试逻辑用的。Tessent在自动连接时会给BAP分配一个user instruction比如BAP_SEL或MBIST_ACCESS之类的命名。ATE上跑MBIST时需要先把TAP指令寄存器移位到该user instruction然后再进行后续的DR操作。很多人在刚开始写ATE pattern时忘记这一点还是以为直接shift BSCAN链就能访问MBIST结果当然读不到正确的fail寄存器值。连接完成后最好把BSCAN链长度和BAP指令的编码记录在验证计划里。因为这两个参数会直接影响测试pattern中TAP序列的长度ATE调试定位问题时第一件事就是核对pattern里的指令编码与实际网表是否一致。3.4 测试时钟域与复位策略的检查清单这个部分我最想强调因为BAP相关的跨时钟问题往往在SDF仿真时才暴露。建议把所有检查点列成一张表逐项确认BAP移位寄存器由TCK驱动写使能发生在Update-DR附近这个更新脉冲能否被MBIST时钟域正确采样。MBIST控制器的状态位如done、fail从运行时钟域同步到TCK域的路径有没有足够的同步级数通常至少要两级触发器。复位策略要统一BAP寄存器和MBIST控制器的复位信号应该来自同一个测试复位源不能在分叉路径上插入电平转换或门控逻辑否则复位释放后的初始状态不定仿真会出X态。测试时钟的频率不要太激进。BAP本身不复杂但MBIST算法跑起来时存储器内部访问时间才是真正的瓶颈。控制通信路径的频率可以比存储器运行频率低很多不影响测试时间多少。以前我做过一个项目把TCK设到50MHzBAP和MBIST控制器通信的时钟域也是50MHz仿真时单看BAP读写都正常。结果到了SDF后仿真MBIST的fail标志反馈路径上出现了setup违例导致done位采不到。原因是反馈路径横跨了两个时钟域又没加同步器。后来把反馈信号重新打了两拍问题立刻消失。这类问题在功能前仿真是绝对不会暴露的只有在时序仿真或芯片实测中才会浮出来务必提前预防。4. 实操过程记录一次MBISTBAP完整验证流程4.1 环境准备与工具链版本选择Tessent版本的选择比很多人想象的重要。不同版本对BAP的处理细节有差异特别是坐标、地址映射、以及自动生成的wrapper结构。如果项目有历史遗留脚本不要轻易升级到最新版先看release notes里MBIST部分是否有breaking change。我们团队目前的经验是同一颗芯片项目内统一用一个Tessent版本不要混用否则BAP配置脚本和pattern文件会出现兼容性成谜的问题。顺带说一下tessent安装包的部署。Tessent工具对License管理比较严格安装时要注意设置好LM_LICENSE_FILE或者license服务器配置。版本不同工具调用接口也有差异比如有些版本需要单独配置Tessent Shell的启动脚本。把环境变量和License配置统一写进一个setup脚本能避免很多低级错误。4.2 关键脚本片段与配置命令下面是一个常见的MBISTBAP配置流程的简化示意实际项目里命令会更多但主干就这么几条# 进入Tessent Shell导入设计 read_cell_library slow_vdd1v8.lib -verbose read_verilog -r top_netlist.v current_design top # 定义测试时钟与TCK add_clocks 0 mblck_risc_core -period 20 add_clocks 0 tck -period 40 # 配置存储器BIST插装 set_config mbis t enabled true set_config mbis t add_bist_for ram_inst_a true set_config mbis t add_bist_for regfile_b true set_config mbis t bap_enable true # 插入MBIST控制器与BAP insert_mbist注意bap_enable才是打开BAP自动生成的关键开关有些早期脚本写的是create_bap或者add_bap语法不同。以你当前使用的Tessent版本command reference为准。插装完毕后可以查一下生成的地址映射report_bap_mapping如果看到每个MBIST控制器都分配了独立的地址并且顶层自动例化了一个bap_top模块说明BAP框架已经搭好。接下来就是连接BSCAN链。Tessent通常会在insert_dft阶段自动将BAP的串行口连接到TAP上前提是你把BSCAN链的约束先做好比如set_dft_signal view existing_port这样的定义。4.3 Pattern生成与仿真验证流程MBIST的pattern生成分两个层次internal pattern内部MBIST控制器自己去跑March算法external pattern通过TAP/BAP去控制MBIST、读取结果。BAP机制主要用于后者。在Tessent里先跑一次extract把网络信息提取出来然后使用create_pattern生成MBIST pattern。这一步会生成wgl波形或STIL格式的测试文件里面包含了完整的BAP访问序列选中BAP指令、写入算法、启动测试、等待完成、读出状态。做功能仿真时我给的建议是不要只跑一遍就完事。至少需要三个层次的仿真第一层纯综合前仿真。RTL里包含MBIST控制器和BAP行为模型这种仿真速度最快适合验证控制流程是否正确。第二层综合网表仿真。加入门级延迟重点看BAP的Update-DR和MBIST启动信号之间是否存在时序问题。第三层SDF时序仿真这是最有说服力的但速度也最慢可以挑几组典型pattern跑不必全部覆盖。经验之谈SDF仿真中如果BAP的状态寄存器读取值偶尔为X或与预期不符多半是同步器级数不够或复位释放时间不对。不要急着改约束先用波形把BAP读写MBIST控制器的关键信号拉出来看定位是更新路径问题还是反馈路径问题再动手修改。4.4 ATE上实测的注意事项Pattern生成完不是结束还要写到ATE机台上跑。这里有三个经常踩的坑一是TAP初始化序列不能省。ATe上电后TAP控制器默认处于Test-Logic-Reset状态需要先跑一段TMS时序进入Shift-DR。有些人图省事直接用Run-Test/Idle去访问BAP指令移位寄存器没有正确加载后面全部白跑。二是BAP访问之后要留足等待时间。MBIST跑一个March算法需要若干个存储器时钟周期pattern里虽然会插入等待但SDF仿真通过不等于实际芯片就恰好满足。建议在ATE pattern里对done标志位做轮询或者预留充足的时间等待而不是直接假定固定周期后必定完成。三是fail信息读取要及时。如果MBIST测试结果是failBAP里会有fail count和fail address寄存器但如果读得太晚或者中间插入了其他指令这些寄存器内容可能被覆盖。正确的做法是检测到fail后立即读取不要等全部pattern跑完再统一收集。5. 常见问题与排查技巧实录5.1 BAP寄存器读写失败现象在仿真或ATE上向BAP写入MBIST算法选择寄存器后读回的状态寄存器和预期完全不符甚至全为0。排查思路先确认TAP指令是否正确选到了BAP对应的user data register。很多情况下是TAP指令寄存器长度或编码不一致导致的特别是当设计里既有BSCAN boundary register又有多个用户data register时指令译码很容易错位。此时需要回到网表找到BAP例化处的指令译码逻辑核对生成的指令编码。再把TCK域的BAP移位链和TDO路径在波形上拉出来看看有没有预期的串行数据出现在TDO上。如果没有多半是TAP状态机卡在Capture-DR或Update-DR阶段检查TMS时序是否满足标准。如果波形上TDO有数据但和期望不符就要看BAP内部地址译码模块了。可能原因包括BAP地址总线连接反转、地址位宽不匹配。这时候地址映射表就派上用场了逐位核对比特顺序。5.2 MBIST启动后done位一直不拉高现象写入启动命令后MBIST控制器的done标志始终为0仿真波形显示MBIST内部状态机根本没有启动。第一步检查启动命令是否真的被MBIST控制器采到。BAP的写使能更新发生在TCK的Update-DR而MBIST控制器工作在自己的时钟域需要一个跨时钟域的握手或至少两级同步。如果同步器没有正确产生命令可能丢失。第二步检查MBIST控制器的运行时钟是否正常翻转。BAP写进去的数据即使正确MBIST时钟没跑起来就等于没收到命令。查看mblck在启动前后有没有脉冲。这里经常遇到的问题是时钟门控信号MBIST时钟由某个test mode信号门控但BAP写命令时test mode还没有置位。第三步检查复位信号有没有被意外拉起来。MBIST控制器在测试过程中不能持续被复位否则内部状态机一直回到初始状态。可以用波形里看rst_n信号在启动命令后有没有毛刺。5.3 SDF后仿真出现X态传播现象门级时序仿真时BAP读回的数据出现X导致整个MBIST测试结果判断失败。这类问题最常见的原因是异步信号没有正确同步。BAP的TCK域和MBIST的运行时钟域之间如果存在异步路径SDF仿真会把这些路径标记为timing violation产生X态并向后传播。解决思路要么添加同步器要么在SDF仿真时对异步路径设置false path和case analysis。但要注意在MBIST测试场景下这两个时钟域的相位关系在ATE上通常是确定的因为pattern里控制了时序关系所以可以设置异步约束。而在实际量产测试时TCK和内部测试时钟通常由同一个pattern源产生相位关系在芯片内部已经确定。我的做法是确认同步器数量足够同时在SDF仿真约束中声明异步路径两者缺一不可。5.4 快速排查表为了方便现场定位问题我整理了一张快速排查表问题现象优先排查项常见根因BAP访问总读回0TAP指令、TDO路径指令编码错误或移位链未选通BAP写入不生效Update-DR时序、时钟门控写使能跨时钟域丢失MBIST不启动、done不拉高mblck、复位信号、启动命令测试时钟未跑或复位持续有效SDF仿真X态跨时钟路径、复位释放缺少同步器或异步约束缺失ATE上偶发fail误判done反馈等待时间、fail读取时机等待周期不足或读取太晚BAP地址空间不足地址位宽、存储器实例数量规划时未留足余量5.5 一个实测现场的定位案例去年调一颗芯片实验室反映MBIST测试在某个温度条件下偶发fail但ATE上重复跑同一pattern却时好时坏。刚开始怀疑是存储器本身的问题后来发现fail的状态码通过BAP读回来时某些位不稳定。我们用逻辑分析仪直接挂在TAP接口上抓取BAP的移位输出。对比多个样本发现fail状态寄存器的某一位在读出时存在毛刺这个毛刺发生在TCK的上升沿附近刚好处于建立时间窗口内。查询网表发现该状态位直接从MBIST控制器的时钟域引出来中间只有一级同步器另一级在综合时被优化掉了。解决方案是在RTL中对该状态位加约束强制保留二级同步器重新综合后问题消失。这个案例说明BAP回读路径上的跨时钟同步往往是最不起眼但也最致命的环节。6. 我个人在实际项目中的体会回头再看BSCAN到BAP的演进我的感受是DFT架构的复杂度本质上是在为可观测性和可控性买单。BSCAN提供了标准化的外部访问通道BAP把内部访问从“逐位搬移”变成了“按地址读写”虽然多了一层硬件逻辑但换来的是脚本化、自动化、可扩展的测试控制方式。在项目里使用BAP之后最大的收获不是省了多少条扫描链而是让测试pattern的生成和维护变得有条理了。以前每加一个存储器实例都要重新梳理一遍BSCAN链的控制时序现在只需要更新地址映射表pattern自动跟着变。这种收益在项目早期感觉不明显越到后期、存储器数量越多价值越大。最后分享一个小技巧每次生成完BAP地址映射表我都会把报告存一份到版本库里并和MBIST pattern版本建立关联。这样哪怕过了半年再去调一颗老芯片的量产测试也能快速知道当时这片芯片的BAP布局是什么样的不用重新啃网表。好的DFT工作习惯往往是这些看起来很笨但很可靠的细节积累出来的。
返回列表