ARTICLE DETAIL

资讯详情

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

3D IC Memory-on-Logic堆叠DFT设计:ATPG与JTAG测试架构实战

3D IC Memory-on-Logic堆叠DFT设计:ATPG与JTAG测试架构实战 3D IC 的 Memory-on-Logic 堆叠是这两年被问得最多、也最容易在测试环节翻车的一类结构。逻辑晶圆和存储晶圆各自单独测都是好的键合到一起之后测试访问路径突然变得又长又窄ATPG 的 pattern 传不进去JTAG 链断在中间某一层良率数据拿不到最后只能靠猜。这篇内容就是围绕这个场景展开的Memory-on-Logic 堆叠结构下DFT 到底该怎么设计ATPG 和 JTAG 这两条主线怎么打通工程上哪些坑是必须提前埋好测试结构的。适合做 3D IC DFT、测试架构、以及负责堆叠良率分析的工程师参考也适合刚接触 3D 测试、想搞清楚为什么堆叠之后测试难度陡增的读者。1. Memory-on-Logic 堆叠给测试带来的结构性变化1.1 从 2D 到 3D测试访问路径发生了什么在传统 2D 芯片里DFT 工程师的假设很朴素所有待测逻辑都在同一个 die 上扫描链、压缩逻辑、JTAG TAP 控制器都在同一块硅片上测试激励从芯片引脚进来经过几级多路选择就能到达目标寄存器。路径短、可控、可预测。到了 Memory-on-Logic 堆叠这个假设直接被打破。逻辑 die 在下存储 die 在上两者通过微凸点micro-bump或混合键合hybrid bonding连接。逻辑 die 上的 DFT 结构还在但存储 die 上的测试访问必须穿过键合界面。键合点的数量是有限的通常远少于两个 die 内部各自需要的测试信号数量。这就带来第一个核心矛盾测试带宽被键合界面卡住了。我习惯把这种结构类比成两栋楼之间只有一部窄电梯。楼里各自的走廊再宽货物要跨楼运输就只能挤这部电梯。DFT 设计要做的就是让跨楼运输的货物尽可能少、尽可能规律。具体到信号层面跨 die 的测试访问通常依赖几类通道一是键合点直接引出的测试信号数量受限于凸点预算二是通过 IEEE 1838 定义的 Die-to-Die 接口用少量引脚串行化传输三是复用功能路径把测试数据塞进正常的数据通道里。这三类通道的选择直接决定了后续 ATPG 和 JTAG 的实现方式。1.2 键合界面为什么是测试的死穴键合界面的问题不只是线少还有线不可靠。微凸点在键合过程中可能出现空洞、偏移、冷焊混合键合虽然密度高但对表面平整度和颗粒极其敏感。这些物理缺陷反映到测试上就是跨 die 路径的间歇性失效。更麻烦的是键合之后如果发现某条跨 die 测试路径坏了你没法像 2D 芯片那样简单换个引脚。键合是不可逆的至少量产阶段不可逆所以 DFT 设计必须假设部分跨 die 连接会失效并让测试结构具备一定的容错和诊断能力。这就引出一个关键设计原则跨 die 测试路径要可观测、可旁路、可分段。不能设计成一条黑盒通道坏了就整颗报废。实际工程中我会在跨 die 接口上插入边界扫描单元和旁路多路选择器让每一段都能单独测、单独隔离。1.3 存储 die 的测试需求与逻辑 die 的差异逻辑 die 的测试以扫描链和 ATPG 为主关注的是固定型故障、跳变延迟故障、桥接故障。存储 die 的测试逻辑完全不同核心是 March 算法、数据保持、读写裕量、以及存储阵列的行列故障。这两套测试语言本来就不一样。Memory-on-Logic 堆叠之后如果存储 die 没有自己的 BIST 控制器测试激励就得从逻辑 die 通过键合界面送过去数据量大、速率要求高键合界面根本扛不住。所以工程上的主流做法是存储 die 自带 MBIST 和修复逻辑逻辑 die 只负责触发和收集结果。这个分工非常重要。它把跨 die 的测试流量从海量测试数据压缩成控制命令加结果状态键合界面的压力瞬间小了一个数量级。我在项目里见过反例为了省面积存储 die 不做 MBIST结果跨 die 测试通道成了瓶颈测试时间翻了三倍最后不得不改版。2. 跨 die 测试访问架构的选型与取舍2.1 IEEE 1838 到底解决了什么问题IEEE 1838 是专门为 3D 堆叠测试定义的标准核心是三个东西Die Wrapper、Flexible Parallel PortFPP、以及串行的测试访问机制。Die Wrapper 给每个 die 包一层边界让 die 在堆叠前后都能被独立访问FPP 提供并行测试通道串行机制则用少量引脚完成配置和数据传输。它的价值在于标准化了堆叠中如何单独访问某一层这件事。没有 1838 之前每家做 3D 测试都是自己定义私有接口测试设备、EDA 工具、IP 之间互不兼容换个供应商就得重做一套。1838 把这些接口统一了ATPG 工具可以直接生成符合标准的 wrapper 和访问逻辑。但要注意1838 不是万能的。它定义的是访问架构不定义测试内容。你的 ATPG pattern、MBIST 算法、修复策略还是得自己设计。而且 1838 的串行访问在层数多的时候配置时间会累积需要权衡。2.2 并行访问与串行访问的工程权衡并行访问的优点是快测试数据可以同时打到多个 die 上缺点是吃引脚、吃凸点。串行访问省引脚但配置和传输时间长尤其是需要反复切换测试模式的时候。实际项目里我一般这样取舍访问方式适用场景引脚开销测试时间典型用途并行 FPP层数少、凸点预算充足高短逻辑 die 扫描测试串行 1838层数多、凸点紧张低长配置、MBIST 控制混合大多数量产场景中中扫描走并行控制走串行混合方案是主流。扫描链数据量大走并行通道模式配置、MBIST 启动、结果读取走串行。这样既控制了引脚数又不至于让测试时间失控。有个细节容易被忽略并行通道的时序收敛。跨 die 的并行通道经过键合点寄生参数和 2D 芯片完全不同建立保持时间要重新约束。我见过项目因为没做跨 die 时序约束ATPG pattern 在仿真里过、在硅上挂排查了两周才发现是键合路径的延迟没建模。2.3 测试访问架构对 ATPG 的约束ATPG 工具在生成 pattern 时需要知道测试访问路径的模型。如果跨 die 路径被建模成黑盒工具就没法把故障传播到可观测点覆盖率会掉得很难看。正确做法是把跨 die 访问结构完整地描述给 ATPG 工具包括 Die Wrapper 的边界单元、FPP 的多路选择、以及串行访问的移位逻辑。这样工具才能把跨 die 路径当作普通逻辑来处理生成有效的 pattern。这里有个实操经验跨 die 路径的故障模型要单独定义。键合点的失效模式和普通逻辑门不一样可能是电阻性开路、间歇性短路。用标准的 stuck-at 模型覆盖不到这些需要补充桥接故障和延迟故障模型。我在项目里会专门为跨 die 接口生成一组定向 pattern不依赖随机 ATPG。3. ATPG 在堆叠结构下的实操要点3.1 扫描链如何跨 die 组织扫描链跨 die 是 Memory-on-Logic 测试里最棘手的问题之一。逻辑 die 的扫描链本来在片内闭环现在要延伸到存储 die 的边界甚至穿过存储 die 的 wrapper。主流做法有两种一是扫描链不跨 die每个 die 的扫描链独立通过 wrapper 和访问架构分别测试二是扫描链跨 die 拼接把两个 die 的扫描链串成一条长链。第一种方案测试时间短、故障隔离好但需要更多的测试访问通道。第二种方案省通道但一条链上任何一段坏了整条链都不可用诊断困难。我倾向于第一种尤其是在量产阶段。理由很简单3D 堆叠的良率本来就比 2D 低如果扫描链跨 die一个键合点坏了可能导致整条链失效良率损失被放大。独立扫描链虽然通道开销大但故障隔离能力强诊断数据也干净。如果确实要用跨 die 扫描链务必在键合界面插入可旁路的边界单元。这样某一段坏了可以旁路掉剩下的链还能继续测。3.2 测试压缩在跨 die 场景下的适配测试压缩如 EDT、DFTMAX在 2D 芯片里是标配能把 pattern 数量压一个数量级。但跨 die 之后压缩逻辑的位置很关键。如果压缩逻辑只在逻辑 die 上存储 die 的测试数据要先通过键合界面送到逻辑 die 的压缩器再解压。这会让跨 die 通道的带宽需求暴增因为压缩前的数据量是压缩后的几倍甚至十几倍。正确做法是在每个 die 内部各自做压缩跨 die 只传压缩后的数据和控制信号。这样键合界面的带宽压力最小。代价是每个 die 都要有独立的压缩器和解压器面积开销增加但相比测试时间和良率损失这个代价是值得的。还有个坑压缩器的种子seed管理。跨 die 场景下多个压缩器需要同步种子要统一管理。如果种子配置错了pattern 解压出来是乱的测试结果完全不可信。我在项目里会专门做一组种子校验 pattern在正式测试前跑一遍确认压缩链路正常。3.3 覆盖率收敛的难点与定向 pattern 补充跨 die 结构的覆盖率收敛难点不在逻辑本身而在跨 die 路径的可控性和可观测性。随机 ATPG 很难覆盖到键合点的故障因为这些点的控制路径太长、观测路径太窄。我的做法是分三步先用标准 ATPG 跑一遍看覆盖率基线识别出跨 die 路径相关的未覆盖故障。针对这些故障手动或半自动生成定向 pattern专门激励和观测跨 die 接口。把定向 pattern 和随机 pattern 合并做最终覆盖率验证。定向 pattern 的设计要点是让跨 die 信号在尽可能多的组合下被激励。比如键合点的开路故障需要让信号在两个方向都翻转桥接故障需要让相邻信号处于不同逻辑值。这些用随机 ATPG 碰运气效率太低定向生成更靠谱。覆盖率目标方面跨 die 接口我一般要求 99% 以上比片内逻辑的 98% 更严。因为跨 die 接口的故障影响面更大一个键合点坏了可能让整个堆叠失效。4. JTAG 在 3D 堆叠中的链路设计与调试4.1 多层 TAP 控制器的级联方式JTAG 在 3D 堆叠里的角色从芯片级调试接口变成了堆叠级配置和诊断总线。每个 die 都有自己的 TAP 控制器这些 TAP 怎么级联直接决定了调试效率。标准做法是把各层 TAP 串成一条链TCK、TMS、TDI、TDO 依次穿过。但这样有个问题如果某一层的 TAP 挂了整条链都不可用。而且串行链的配置时间随层数线性增长。改进方案是星型或混合拓扑用一个顶层 TAP 控制器做仲裁各层 TAP 可以独立选择。这样坏了一层不影响其他层配置时间也短。代价是顶层要多一些控制逻辑。我在项目里更倾向混合拓扑顶层 TAP 负责全局控制各层 TAP 通过一个可配置的旁路网络连接。正常测试时用串行链诊断时切换到独立访问模式。这样兼顾了效率和可诊断性。4.2 跨 die JTAG 信号的时序与信号完整性JTAG 的 TCK 频率在 2D 芯片里可以跑到几十兆甚至上百兆但跨 die 之后键合点的寄生电容和电阻会让信号边沿变缓时序裕量急剧缩小。实测经验跨 die 的 TCK 频率通常要降到片内的三分之一到一半。具体降多少取决于键合工艺和走线长度。混合键合的寄生参数比微凸点小能跑更高频率微凸点则要保守一些。除了降频还要注意信号完整性。跨 die 的 TMS 和 TDI 是单端信号容易受串扰影响。我一般会在键合界面附近加施密特触发器整形必要时用差分信号传输再转单端。TDO 是输出方向驱动能力要足够否则顶层收不到干净的数据。还有个容易忽略的点跨 die JTAG 信号的上电顺序。如果某一层 die 还没上电它的 TAP 输入是高阻可能把整条链拉乱。所以要么保证上电顺序要么在 TAP 输入加隔离单元。4.3 用 JTAG 做堆叠后诊断的实战流程堆叠之后的诊断JTAG 是最重要的工具。我通常按这个流程走链路连通性检查先跑 IDCODE 读取确认每层 TAP 都能被访问。如果某层读不到先查供电和时钟再查键合连接。边界扫描测试用 EXTEST 模式检查跨 die 的互连。这一步能发现键合点的开路和短路。内部扫描访问通过 TAP 配置各层的扫描链跑简化的 ATPG pattern确认逻辑功能正常。MBIST 触发与结果读取通过 TAP 启动存储 die 的 MBIST读取通过/失败状态和故障地址。修复验证如果 MBIST 报了可修复故障触发修复逻辑再跑一遍确认修复生效。这个流程里第 2 步和第 4 步最容易出问题。边界扫描测试需要正确的 BSDL 描述如果 BSDL 和实际键合映射不一致测试结果就是错的。MBIST 结果读取要注意时序存储 die 的 MBIST 完成信号跨 die 传回来有延迟读太早会拿到无效数据。5. 工程实践中踩过的坑与应对5.1 键合偏移导致的测试路径失效键合偏移是量产中最常见的缺陷之一。微凸点偏移几个微米可能造成接触电阻增大甚至开路。反映到测试上就是某些跨 die 路径间歇性失效测试结果忽好忽坏。排查这种问题的难点在于它不是稳定失效用普通的功能测试很难抓到。我的做法是在跨 die 路径上加入可编程的延迟和裕量测试。通过 JTAG 配置不同的时序裕量观察路径在什么条件下开始失效。如果裕量明显小于设计值基本可以判定是键合质量问题。另一个手段是多次采样。对同一路径连续测多次统计失效频率。间歇性失效的频率和键合质量强相关可以作为工艺监控指标。5.2 测试模式切换时的竞争与死锁3D 堆叠的测试模式很多逻辑扫描、MBIST、边界扫描、互连测试。模式切换时如果控制信号跨 die 传输有延迟可能出现竞争甚至死锁。我遇到过一次典型死锁逻辑 die 已经切到扫描模式存储 die 还在 MBIST 模式两边状态机互相等待JTAG 链卡死。最后只能重新上电。解决办法是模式切换要握手。逻辑 die 发出切换请求后要等存储 die 确认再真正切换。握手信号走独立的跨 die 通道不和其他测试信号复用。这样虽然多占一点资源但避免了死锁风险。5.3 测试时间与良率数据的平衡3D 堆叠的测试成本本来就高如果测试时间再失控量产经济性就没了。但测试时间压太狠良率数据又不准可能放过坏品。我的经验是分层测试策略堆叠后先做快速连通性和 MBIST 测试把明显坏的筛掉对通过的样品再做完整扫描测试和参数测试。这样大部分坏品在快速测试阶段就被拦截完整测试只跑在好品上平均测试时间大幅下降。快速测试的覆盖率不用追求很高但必须能抓到键合缺陷和存储阵列的硬故障。这两类故障占了堆叠失效的大部分抓住它们良率数据就有意义。5.4 从硅后数据反推 DFT 设计改进硅后测试数据是 DFT 设计改进的金矿。我会重点看三类数据跨 die 路径的失效分布、MBIST 的故障类型分布、以及 JTAG 链路的错误日志。如果跨 die 路径失效集中在某些区域可能是键合工艺的均匀性问题也可能是 DFT 结构在这些区域的冗余不足。如果 MBIST 报的故障以单比特为主说明存储阵列质量不错如果多比特故障多可能是行列驱动或电源问题。JTAG 错误日志能反映链路设计的健壮性。如果某层 TAP 经常掉线要考虑是不是该层的时钟或复位设计有问题。这些信息反馈到下一版 DFT 设计能显著提升堆叠良率。6. 面向量产的 DFT 设计检查清单6.1 堆叠前必须确认的 DFT 事项在键合之前每个 die 的 DFT 结构必须单独验证通过。这一步不能省因为堆叠后再发现问题返工成本极高。我会确认这几项扫描链在片内完整闭环压缩逻辑工作正常MBIST 在存储 die 上独立跑通JTAG TAP 能正常读写 IDCODE边界扫描单元的描述和实际引脚一致。这些都在堆叠前验证堆叠后只需要验证跨 die 部分。还有一项容易漏跨 die 接口的 DFT 结构要在堆叠前做环回测试。把跨 die 的输出环回到输入验证接口逻辑本身没问题。这样堆叠后如果跨 die 测试失败可以确定问题在键合不在接口逻辑。6.2 堆叠后测试流程的固化堆叠后的测试流程要固化下来形成标准操作。包括上电顺序、时钟配置、JTAG 链初始化、各测试模式的进入和退出顺序、以及结果判定标准。流程固化不只是写文档还要在测试程序里体现。我见过项目因为测试程序里模式切换顺序写错导致批量误判。后来把流程做成状态机每一步都有确认才稳定下来。流程里要包含异常处理如果某一步失败是重试、跳过、还是标记报废。这些策略要提前定好不能到量产了还在临时决定。6.3 良率分析与 DFT 迭代的闭环良率分析不是测试的终点而是 DFT 迭代的起点。每次良率波动都要能追溯到具体的测试项和故障类型。这要求测试数据有足够的粒度不能只记录通过/失败。我会在测试程序里记录每个测试项的结果、失效的具体路径或地址、以及测试时的环境参数。这些数据积累起来就能看出趋势指导 DFT 结构优化。闭环的关键是快速迭代。从良率数据发现问题到 DFT 设计修改再到新版本验证周期越短越好。3D IC 的迭代成本高更需要精准定位问题避免盲目改版。6.4 常见问题速查表现象可能原因排查方向JTAG 链读不到某层 IDCODE供电、时钟、键合开路先查电源和时钟再查键合连通性扫描测试覆盖率异常低跨 die 路径未建模、压缩器种子错误检查 ATPG 模型和种子配置MBIST 结果读取不稳定跨 die 完成信号延迟、时序裕量不足增加等待周期检查时序约束测试模式切换死锁跨 die 握手缺失、状态机竞争增加握手信号独立通道传输间歇性测试失败键合偏移、接触电阻增大多次采样裕量测试工艺监控测试时间超标跨 die 通道带宽不足、模式切换频繁优化访问架构分层测试策略这张表是我从多个项目里总结出来的实际排查时按这个顺序走能省不少时间。当然每个项目情况不同具体问题还要结合硅后数据具体分析。7. 写在最后的一点个人体会3D IC 的 Memory-on-Logic 测试说到底是在有限的跨 die 资源和无限的测试需求之间找平衡。DFT 工程师的价值不在于把测试做得多么完美而在于用最小的跨 die 开销拿到足够可信的良率数据。我做了几个堆叠项目之后最大的体会是测试架构要在设计早期就介入。等到逻辑和存储都设计完了再考虑怎么测往往已经晚了跨 die 通道不够、wrapper 没预留、MBIST 没集成这些问题后期补代价极大。早期介入哪怕只是多留几条跨 die 测试线后面都会轻松很多。另一个体会是不要迷信标准。IEEE 1838 是好东西但它不是即插即用的。标准给的是框架具体怎么用还是要结合自己的工艺、产品、测试设备来定。我见过生搬标准结果测试效率反而下降的案例也见过在标准基础上做裁剪、效果很好的案例。关键是理解标准背后的意图而不是照抄。最后硅后数据一定要认真看。仿真再完美硅上总会有意外。那些意外里藏着下一版设计改进的方向也藏着工艺和测试的深层问题。把数据用起来DFT 设计才能真正迭代起来。
返回列表