Memory Repaire
- 1. Overview
- 2. Memory Repair
- 2.1 Column MUX
- 2.2 Type of Repair
- 3. Tessent Repair Architecture
- 3.1 BIRA
- 3.2 BISR
- 3.3 Implementing Soft Repair
- 3.4 Repair Steps
1. Overview
假设通过 MBIST 发现 SoC 中一个或多个 Memory 存在故障,不能正常进行读写操作,那么应该如何处理?
因为只有少数的 memory 出现故障,继续使用会带来安全隐患,直接丢掉则过于可惜。那么,一个折中的方法是对其进行修复。【Memory Repair】
随着集成电路的发展,芯片的集成度越来越高,memory 的数量越来越多,故障率也随之提高,因为对芯片进行 Memory Repair 的也越来越重要。
Memory Repair 就是修复缺陷的过程,通常是以备份替换的方式来对 Memory 进行修复。即在存储单元中添加备份的行和列,当某一个存储单元出现故障的时候,将其重新映射到备份单元。
【冗余设计:从使用者的角度看,有 100 个存储单元,但是真实的 design 中可能会有 120 个存储单元,多出的 20 个就是用于 Repair】
2. Memory Repair
2.1 Column MUX
Memory Repair 技术会用到 Column MUX,首先对其进行简单介绍。
一个大小为 1K x 32 的 memory 应该是有 1024 行、32 列,但是这样一个细长的结构在芯片中是不容易摆放的,floorplan 和时序收敛的难度都非常高。
因此,我们希望在不改变 memory 大小的情况下,更改 memory 的形状,以提升 memory 的性能,降低 Address decoder 的复杂度。Column MUX 技术就可以这项任务。
基于 Column MUX 技术,大小为 1K x 32 的 memory 的真实物理实现方式如下图所示。
该 memory 的实际的物理结构是 256 行、128 列,但是在对其进行读写的时候,还是要按照 1K * 32 进行操作。
因此,首先将 128 列分成 4 个阵列,每个阵列有32bits。
然后将每个阵列相同 bit 进行 mux,mux 的选择信号就是地址信号,可以选择不同位置的数据进行输出。
这样,在逻辑上就是一个 1K x 32 的 Memory。
2.2 Type of Repair
Memory Repair 有多种不同的分类方法。
-
根据修复过程中是否硬件电路或模拟电路的参与,可以将其分为:
-
Hard Repair:采用 eFuse 存储修复信息,掉电后信息不丢失,不依赖电源。ATE 测试完成之后,将修复信息烧写到 eFuse,然后再使用阶段再将这些修复信息加载到 memory;
-
Soft Repair:采用逻辑电路对 memory 进行修复,掉电后信息丢失,以来电源。修复信息必须再芯片每次启动时重新加载(存储在芯片外部)或者重新计算(重新进行 BIRA 冗余分析)。
通常情况下是两者结合使用,需要使用 eFuse 来确保数据不丢失。出厂测试阶段存现的故障时永久存在的,所以将其保存在 eFuse 中,但是使用阶段因老化等出现的新故障时无法烧写在 eFuse 中的,只能采用 Soft Repair。
Soft Repair 虽然增加了启动时间和控制电路的复杂性,但是和 Hard Repair 配合可以保证芯片在使用阶段,memory 可以正常工作。
-
-
根据冗余单元的位置,可以将其分为:
-
Extrenal:Redundant elements outside the memory。例如,100M 可用空间的真实大小是120M。
-
Internal:Redundant elements in the memory。例如。有一个块完全不使用的 Memory 专门用于 Repair。
-
-
根据修复的方式,还可以分为:
-
Column:列修复包括替换 single column 或 blocks of columns,直至 full width of a column multiplexer(IO Repair,即修复一个 mux 的所有输入列)
-
Row:行修复包括替换 blocks,rows,a subset of a row,down to a single word (word repair)
-
Column Repair
带有 Redudant Column 的 memory 的结构如下图所示,该 memory 使用了 Column Mux 技术。
① 该 memory 只有 1 列的冗余用于 repair;
② Column Repair 的修复是整体右移的过程:假设 Bit6 的 c0 出现故障,那么输入到 Bit6_c0 的数据会输入到 Bit6_c1,依次类推,最后原本保存在 Bit7_c3 的数据会保存到冗余列。
③ 输出端也会进行和输入端相同的操作,
④ 想要实现整体右移,还需要一个失效标志,即从哪一列开始进行整体右移。上图中棕色部分会设置一个失效标志位寄存器,正常状态下,寄存器中的值位 0,某一列失效的时候,该寄存器中的值会变成 1。
IO Repair
IO Repair 的整体结构如下:
① IO Repair 通常在 Memory 的两侧添加冗余单元;
② 修复过程和普通的 Column Repair 基本一样。当 Q[6] 检测到故障的时候,D[6] 的输出数据会保存早 Bit7,依次类型,D[7] 的数据保存到冗余列【redundant sub-array】。
③ 输出端口虽有所不同,但思路是一样的。新增加了一级的 mux,当 Bit6 不使用的时候,Q[6] 输出的就是 Bit7 的数据,和存储时相对应。
ROW Repair
行修复和列修复的思路基本一样,其整体结构如下图所示,灰色部分即为冗余单元。根据不同的设计,同样也可以实现单行、多行替换。
Column+Row Repair
此外,如果 design 中同时包含了冗余行和冗余列,还可以将行修复和列修复结合起来。具体的实现方式和修复模块的算法相关。
Summary
-
方法:Repair 其实就是整体移位的过程,具体的实现方法则是和冗余单元、控制电路相关。
-
代价:备份单元及其控制电路会占用额外的芯片面积,影响 timing,增加 power design 的复杂度。虽然如此,但是其对良率的贡献很大,所以是必须的。
-
优缺点:
行/列修复: 不需要复杂判断,处理简单(只需要一个移位标志寄存器),但是浪费严重(比如对于 IO Repair 而言,只有单独一列有故障的情况下,也需要替换整个 IO);
行+列修复:更加灵活,但是增加了一定的时间复杂度
3. Tessent Repair Architecture
Tessnet 工具实现的带有 Memory Repair 的 MBIST 整体架构如下图所示:
和 Memory Repair 相关的具体结构如下图所示:
BISR:Built-in Self Repair,Memory Repair 相关的逻辑电路,BISR Controller、BISR Chains 等;
BIRA:Built-in Repair Analysis,在进行 Memory Repair 之前,对 memory 的测试结果进行分析、诊断,给出 repair information;
Fuse:断电可存数据的 memory,提前烧写 Memory Repair 相关的数据到其中,芯片上电之后,将这些数据加载到 memory ,用以实现 Memory Repair。
Chip-level 的 BISR controller 连接到 Central fuse box,该 fuse box 可以实例化在 BISR controller 的内部或外部。如果是位于外部,central fuse box 和 BISR controller 之间需要有额外的连线。
Chips 中所有的 repairable memories 都有对应的 BISR register,其中保存了 repair solution。
所有的 BISR register 连接起来构成一个 chip-level BISR scan chain,chip-level BISR scan chain 连接到一个 BISR controller。
在出厂测试阶段,BIRA 提供的 Repair Informaiton 先时保存到 BISR chains 中,然后 BISR controller 会对从 BISR scan chain 扫描出的 数据进行压缩,然后将其保存在 fuse box 中。
在芯片使用阶段,BISR controller 将保存在 fuse box 保存的修复信息从重新加载到 BISR Chains 上,然后给到 memory 的 repair port,从而实现对 Memory 的修复。
3.1 BIRA
Memory Repair 的前提是 Repairable memories 中包含冗余(spare or redundant)的 rows 或 columns,并且能够将任何存在故障的行或列映射到 redundant element。
但是具体的映射方法由谁来提供呢?
因此在 Memory 测试完成之后,Memory Repair 的第一步是进行 Repair Analysis,提供 Repair Information(需不需要修复、如何修复等)。
现有的 memory BIST diagnostic 方法,如 Compare Status pins diagnostic approach、the Stop-On-Nth-Error diagnostic approach 等并不是最佳的修复分析方法,因为它们不仅需要大量的测试时间和最新的高速 memory testers,而且不能直接有效的提供 memory repair 相关信息。
为了能够使生产测试环境中 repairable memories 使用起来更加方便,可以使用 Tessent 提供的 Built-In Repair Analysis (BIRA) 来进行修复分析,确定一个 memory 是否为可修复的,并且基于特定 redundancy scheme 提供 Repair Information。
基于 BIRA 的修复分析是在 memory BIST controller 工作期间进行,分析的结果在测试完成之后被 scaned out(给到 eFuse 等)。
和 Memory 的类型相对应,BIRA 也可以分为 Row BIRA、Column/IO BIRA 和 Row+Col BRIA。
通常情况下,BIRA 电路和 comparators 位于相同的位置。即,如果 DftSpecification/MemoryBist/Controller/Step/comparator_location 被设置为 shared_in_controller,BIRA 电路就位于 mbist controller中;如果该值被设置为 per_interface,那么 BIRA 电路就位于 memory interface 中。
但是,无论 comparator_location 的值是什么,Row BIRA 电路的总是期望被放在 mbist controller,这样能够通过最大化共享 BIRA logic 所需要的 address pipeline registers,从而使面积最小化。
所以,Tessent 工具默认将 Row BIRA 始终放在 mbist controller 中,但是当 comparator_location 被设置为 per_interface 的时候,通过在 DftSpecification 中指定 row_bira_location:follow_comparators 可以强制将 BIRA 放到 memory interface 中。
3.2 BISR
一般情况下,BISR 用于特指 BISR Register,用于存储修复信息。
因为 memory 所需要的修复控制信号是通过 BISR Register 施加的,所以 BISR 也可以称为 Repair Interface。
在 Tessent 中,memory repair interfaces 有两种可用类型:
-
Serial:Memories with serial self-repair have scan ports on the memory module. The self-repair fuses are accessed serially by scanning in the repair fuse values.
-
Parallel:Memories with parallel self-repair interface have ports on the memory module that control each repair fuse.
如下图所示,MEM1 是 serial BISR interface,它带有 internal BISR register;MEM2 是 parallel BISR interface。
① Internal BISR Register 是 memory 本身自带的,和 DFT 无关;External BSIR 是 Tessent 工具统一插入的,Tessent 工具在会为所有的 repairable memory 插入 External BISR,便于构成 BISR Chains;
② 对于具有 parallel BISR interface (External BISR) 的 memory,repair 相关的信号被加载到 External BISR 中,然后并行施加到 memory 上;对于具有 serial BISR interface 的 memory,repair 相关的信号直接串行施加到 Internal BISR Register;
③ memory 内部的 Internal BISR 也会被串到 BISR Chains 上,和 memory 对应的 External BISR 并行,BISR_SELECT 用于在两者之间进行选择,决定哪一个 BISR 中的数据通过是 BISR Chains 被 Scan out。
所以,External BSIR 和 Internal BISR Register 的位宽和数据是完全一样的,
3.3 Implementing Soft Repair
Tessent 的 BISR Controller 支持两种类型的 Repair:Soft 和 Hard。
在 DFT Insertion 过程中,通过指定 DftSpecification 中的 repair_method 属性的值,可以指定 Repair 类型,工具的默认值是 hard。
如果 repair_method 的值为 hard,memory repair information 保存在 fuse box 中,repair information 能够永久的保存在芯片中;
如果 repair_method 的值为 soft,芯片每次启动或者 power domian 开启的时候,repair information 需要重新加载或重新计算:
① Reload:repair solution 保存在外部,通过 bisr_chain_access mode 进行加载;
② Recalculated:通过执行 memory BIST 重新进行 Redundancy Analysis,这个时候 BISR controller 在工作模式下不需要访问 fuse box。
Trade-Offs and Benefits
芯片的 power-up time 增加,因为在进入功能模式之前需要进行 Redundancy Analysis 和 Memory Repair。
一些在特定工作条件下才会出现的特殊缺陷不能被检测到。
但是,因为不用使用 eFuse,所以可以节省面积。而且,如果 memory 出现新的缺陷,并且是可修复的,那么新的 repair solution 就会被加载到 BISR Chains。
Hard Repair 中的内容是写死的,只能对出场测试阶段检测到的缺陷进行修复,所以通常情况下是两者配合使用。
此外, BISR controller 必须通过 MissionMode controller 单独控制,并且 BISR controller 的 TDR 不能被复位,以避免对 BISR Chains 进行复位。出于同样的原因,即使芯片工作在功能模式下,IJTAG Network 或 TAP 也必须不能 reset。
3.4 Repair Steps
简单来说,Memory repair 分为两个步骤:
① 分析测试过程中,memory BIST controller 给出的失效报告;
② 确定施加到需要修复的 repairable memory 的 repair inputs 的值。
基于 Tessent 工具实现的 Memory Repair 架构如下上图所示,基于此架构,Memory Repair 的具体流程如下所述。
① Chip 上电或复位,BISR Controller 将 BISR Chain(BISR Register)配置为全 0;
② 运行 memory BIST/BIRA Controller,对每个 memory 进行测试并获取 repair information,然后将其保存在局部的 BIRA Register 中;
③ 运行 " transferr BIRA to BISR " 指令,将保存在局部的 repair information 传输到 BISR Chains;
④ 经过 BIST Controller 将 BIRA Register Repair 状态信息移出,用于判断 Chip 中 memory 是否存在故障;
【Notes:(1) 这里的图可能有点早了,但是基本过程就是 BIRA 提供 Repair 信息,先将其放到 BISR Chains上,在将其给到 BISR Controller;(2) ③④应该是同步的,他们两个看上去使互补影响的两个步骤,主要是反馈测试结果】
⑤ 运行 BISR Controller Program Mode,将 BISR 存储的修复信息经过压缩之后烧写到 fuse 中;【Shift、压缩(节省空间)、烧写(高压)】
⑥ 芯片上电/复位,BISR Controller 自动使能,将修复信息从 fuse 加载到 BISR Chains,用于驱动 memory 上的 repair Port;
将修复信息保存到 efuse 模块的过程其实是在 ATE 测试阶段完成的,只执行一次;而将 efuse 中的修复信息加载到 BSIR Chains 则是在芯片使用阶段每次上电或者复位的时候都会执行。
⑦ 重新 run MBIST,验证 memory 是否被正确修复。