Memory Repair (八)

Fast BISR Loading

快速BISR加载是一种可实施的BISR DFT硬件修改方案,旨在减少上电期间加载BISR寄存器所需的时间。本节内容描述了所创建的架构修改方案以及如何实现快速BISR加载。

Fast BISR Loading Overview

快速BISR加载是一种可实施的BISR DFT硬件修改方案,旨在缩短上电期间加载BISR寄存器所需时间。该实现方案不对修复数据进行压缩,而是直接存储在fuse box中。BISR硬件将修复信息从fuse box直接驱动至存储器的并行修复端口,从而显著提升设备或电源域上电时的速度。该方案仅适用于具有并行修复接口的可修复存储器,不支持串行修复接口的存储器。

fuse box需具备足够容量以存储整个芯片的修复信息。若采用增量修复(Incremental Repair)方案,则无需额外扩大fuse box容量。由于所有fuse box内容均通过其interface端口驱动,必须使用由eFuse宏定义的兼容interface。Siemens EDA为TSMC工艺提供兼容的fuse box interface,其他工艺需由用户自行提供。

对于集成大量存储器的芯片,可能需要采用修复共享(Repair Sharing)技术以减少独立存储器修复输入数量并缓解布线拥塞

Fast BISR Architecture

下图展示了快速BISR加载架构的整体视图。该示意图中,现有++串行BISR接口以橙色标示++ ,三个电源域内各有一条对应可修复存储器的BISR链。当实施快速BISR加载时,每个BISR寄存器通过++并行总线++ 直接连接至fuse box interface的读取缓冲器(如图中++紫色路径++所示),各BISR寄存器均与并行修复总线的专用位相连。

实施后系统将++同时保留并行与串行修复总线++:并行总线用于上电时快速加载BISR寄存器,串行interface则用于自主模式下的BISR链轮转操作。

当在DftSpecification中启用++快速BISR++ 加载时,系统会在BISR寄存器与存储器修复输入之间添加多路复用器(如图5-71所示)。这些多路复用器使得fuse box读取缓冲器中的修复方案能够并行加载至存储器输入端口。通过将SerialRepairEnable输入引脚设置为"0"即可启用并行加载功能------++该输入在TAP复位时默认置"0"++ ,且在功能上电模式下无需额外控制++。除在生成pattern时用户显式设置外,其他所有模式下该输入引脚均应保持"1"状态。++

第二组多路复用器位于BIRA模块与BISR寄存器之间,当SerialRepairEnable设为"0"时,可使BISR寄存器++捕获修复数据用于验证++。

在DFT插入阶段,若设计中存在BISR controller,则将SerialRepairEnable信号与其连接;若尚未集成BISR controller,则该信号会连接至物理模块的端口。

通过多路复用器连接存储器修复输入和BISR寄存器输入的并行修复总线,均接入fuse box interface的读取缓冲端口。实现快速BISR加载时,fuse box不进行数据压缩且直接存储存储器修复信息,因此需要更大容量。每个并行修复输入位都会自动连接至fuse box的对应位。

Fast BISR Integration on Lower Level Blocks

在集成子模块(sub_block)或物理模块(physical_block)子设计时,必须考虑每个模块内部的BISR实现方式,以确保成功实施快速BISR加载。表5-15列出的组合情况既标明了支持与不支持的配置方案,同时也为用户提供了应对设计变体的可选方案。

|-----------------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Parent Block | Child Block | Action |
| Serial | Serial | 这是标准使用场景。父模块和子模块中的BISR链均采用串行方式加载。若需要,可通过将子模块BISR链输入端连接至逻辑低电平(LogicLow),并从BISR段顺序文件中移除对应链的SI引脚,来禁用任意子模块BISR链。 |
| Parallel Serial | Serial | 不支持的情况。用户有三种选择方案: 支持快速BISR加载:通过在子模块中启用SerialRepairEnable,将MemoryBisr/memory_repair_loading_method设置为"from_read_buffer",并重新执行DFT插入流程。 完全禁用快速BISR加载:在DftSpecification中关闭父模块的SerialRepairEnable属性,即将MemoryBisr/memory_repair_loading_method设置为"serial"。 保留父模块的快速BISR加载,但禁用子模块的存储器修复:从BISR段顺序文件(BISR segment order file)中移除子模块的BISR链,并将SI引脚连接至LogicLow(逻辑低电平)。 |
| Parallel Serial | Parallel Serial | 这是支持的使用场景 。如有需要,用户可选择同时禁用子模块的并行和串行输入。 |
| Serial | Parallel Serial | 不支持的情况。用户可选择以下两种方案之一: 启用快速BISR加载:在父模块中通过将MemoryBisr/memory_repair_loading_method设为"from_read_buffer"来启用SerialRepairEnable,并重新执行DFT插入流程。 完全禁用快速BISR:强制将子模块的SerialRepairEnable输入端口接至LogicHigh(逻辑高电平),以关闭其并行端口功能。 |
[Table 5-15. Fast BISR Loading Support]

表5-15中涉及的串行(Serial)与并行(Parallel)存储器修复加载类型的详细说明,请参见下表5-16。

|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Type | Description |
| Serial | 当前设计层级中的所有BISR寄存器均通过从fuse box controller移位修复信息完成初始化。fuse box中的压缩数据会被解压,并通过串行方式载入BISR寄存器。存储器修复端口由BISR寄存器的输出信号驱动。必须等待BISR电源域组完成初始化后,存储器才能开始正常工作。 |
| Parallel | 在当前设计层级中,所有BISR寄存器均配置有多路复用器(multiplexer),用于选择驱动至存储器修复端口的修复信息源。这些BISR寄存器额外设有一个连接至fuse box读取缓冲器(read buffer)的输入端口,该端口可被选作驱动存储器修复端口的修复信息源。同时,这些寄存器仍支持传统的串行BISR加载方式。 |
[Table 5-16. BISR Loading Terminology]

Implementing Fast BISR Loading

以下章节将详细说明在设计中实现快速BISR加载的各项具体实施方案。

Fuse Box Interface

对于快速BISR加载实现方案,fuse box中的修复数据未经压缩,直接通过并行总线驱动至存储器修复端口。number_of_fuses属性必须足够大以确保能存储整个芯片的修复信息,且fuse box的全部内容必须能在fuse box interface端口上获取。这要求fuse box interface配备一个读取缓冲区,该缓冲区使用fuse box内容初始化,并在fuse box interface端口上驱动修复值。

如以下示例所示,Tessent Core Description (TCD) 的FuseBoxInterface提供了fuse box大小、读取缓冲区输出端口名称以及fuse box interface上read_buffer_select输入端口名称的声明。

若MemoryBISR/memory_repair_loading_method参数设置为"from_read_buffer",则read_buffer_select与read_buffer_output属性为++强制配置项++,否则为可选项。当这些属性被指定时,其端口名称与总线范围需与设计模块进行匹配验证,且必须明确声明read_buffer_output的总线范围。

若设计中没有通过fuse_box_module_interface属性关联的FuseBoxInterface封装模块,或需将连接指向fuse box interface模块端口之外的其他位置,则可通过ExternalFuseBoxOptions/ConnectionOverrides封装模块来指定read_buffer_select与read_buffer_output的连接关系。

DFT Insertion

在DftSpecification中,有三个属性用于在设计中插入快速BISR加载功能。其中一个属性用于启用该功能,另外两个属性用于描述接口端口名称。

要启用快速BISR加载,需将如下所示的memory_repair_loading_method属性设置为"from_read_buffer"。默认的BISR实现方式为"serial",其说明详见表5-16。

在子模块或物理模块interface中,serial_repair_enable和parallel_in属性用于指定端口名称。++仅当模块包含一个或多个具有并行修复输入的存储器时,才会创建这些端口++。serial_repair_enable指定的端口名称对应SerialRepairEnable信号,parallel_in指定的端口名称则对应并行输入总线(如图5-71所示)。除非memory_repair_loading_method设置为from_read_buffer,否则这两个属性将被忽略。若启用快速BISR加载时未明确指定这些属性,则端口名称将默认采用如下所示的DefaultsSpecification封装模块中定义的名称。

在启用++快速BISR++ 加载功能进行DFT插入时,系统会自动从BISR controller中移除修复数据压缩逻辑,++并将原始未压缩的修复数据存储在fuse box内++。同时会在BISR controller中添加一个测试数据寄存器(TDR)用于驱动SerialRepairEnable输出端口。子模块的处理遵循表5-15所述流程,并为包含一个或多个具有并行修复输入的可修复存储器的兼容模块添加并行加载多路复用器。

Tessent MemoryBIST会在ICL提取和ICL细化阶段,对每个存储器并行BISR输入与fuse box read_buffer_output端口(当BISR controller存在于顶层时)或当前块级设计parallel_in端口之间的连接进行逐位验证。这种自动化连接验证相比基于仿真的验证方式更加快速可靠。++对于未用于并行修复的存储器实例,其并行BISR输入可被置为固定连接。++

Pattern Generation

以下属性可用于控制BISR controller在自主(autonomous)和bisr_chain_access两种操作模式下的快速BISR加载pattern生成:

​​​​​​​ ​​​​​​​

当select_read_buffer属性设置为on时,驱动图5-71中多路复用器的SerialRepairEnable信号被置为"0"。这使得由fuse box读取缓冲区输出驱动的模块并行输入能够到达存储器修复端口。++若同时启用enable_bira_capture属性,并行修复输入还将在移位周期开始时被捕获到BISR寄存器内并扫描输出。++

当select_read_buffer属性设置为off时,驱动多路复用器的++SerialRepairEnable信号被置为"1"。++此时BISR寄存器输出的修复值将驱动存储器修复端口。若在此情况下启用enable_bira_capture属性,BIRA引擎生成的值也将在移位周期开始时被捕获到BIRA寄存器中。

通常在子模块(sub_block)或物理模块(physical_block)层级设计中不存在BISR controller或fuse box,这些组件一般只在芯片设计层级插入。对于子模块和物理模块设计层级,BISR寄存器的并行修复输入端口会连接至顶层端口。++当为这些模块生成pattern且select_read_buffer设置为on时++,需要使用iProc在模块主输入端提供iForcePort语句来模拟读取缓冲区值,避免未知值被捕获到BISR寄存器中。下方所示的iProc提供了一个实现示例:

​​​​​​​

需要注意的是,BisrChainAccessOptions/default_write_value和BisrRegisterAccessOptions/write_value++属性仅适用于采用串行修复方法初始化BISR寄存器值的场景。++

在芯片层级进行pattern生成且设计中存在fuse box和controller时,快速BISR加载流程首先需要将fuse box内容载入读取缓冲区。从fuse box到读取缓冲区的数据传输方法取决于fuse box interface逻辑,本文档不作详述。此步骤需由终端用户手动完成,通常通过添加额外的TestSteps(包括激活FuseBoxAccess以启动fuse box到读取缓冲区的传输)来实现。更多详细信息,请参阅"硬增量修复特定注意事项"章节中的图5-60。

External Repair

外部修复(external repair)功能使您能够对不具备专用修复逻辑的存储器实施修复。该特性通过利用额外的存储器I/O作为备用单元,并在memory interface中添加必要逻辑来实现相关操作。

以下内容详细说明了external repair特性,以及如何将其集成到Tessent Shell MemoryBIST设计流程中。

External Repair Overview

通常,存储器修复功能通过包含备用列或行单元的存储器来实现。这类存储器内置了解码和多路复用逻辑,可在需要时访问备用单元。当不具备内置修复逻辑的存储器时,++或出于可靠性考虑需要全面测试修复逻辑时++,可采用外部存储器修复(external memory repair)方案。

外部修复通过将++额外的一个存储器I/O作为备用单元++,并在memory interface中添加必要控制逻辑来实现。对于采用增量修复(Incremental Repair)的场景,通过对备用I/O和外部修复逻辑的完整测试,可有效提升设计质量和可靠性。该技术可在制造过程中或高可靠性系统中实施增量修复。

如图5-72所示,实现外部修复的存储器示例:++该存储器具有5个I/O端口++ ,但功能上仅使用其中4个。第五个I/O作为备用端口,其输入接地,输出不连接功能逻辑。++需注意的是,存储器TCD中的逻辑数据输出端口必须由存储器单个物理端口的数据输出端口组成。++

BIST interface除包含用于拦截存储器输入以实施BIST的常规逻辑外,还集成了用于测试存储器扇入/扇出逻辑的观测与控制电路。工具会自动添加图中++红色高亮++的外部修复逻辑,包括根据BISR寄存器提供的修复地址(图中未显示)对输入/输出进行移位选择的多路复用器。同样未展示的是,拦截位写入使能输入的多路复用器结构与数据输入端的复用器完全一致。

该修复逻辑的实现方式支持在存储器旁路模式(bypass mode)下通过扫描ATPG或逻辑BIST进行全功能测试。旁路模式需配置以下两个属性:

• scan_bypass_logic --- 设置为或推断为sync_mux(推荐)或async_mux

• observation_xor_size --- 设置为或推断为auto

工具仅将interface的RepairEnable和RepairAddress输入标记为"隐含检测(DI)"。这种设计可确保后续任意I/O都能被替换,这对需要执行存储器修复的系统尤为重要。相比之下,具有嵌入式修复逻辑的存储器因其解码器和多路复用逻辑的可访问性有限,难以进行彻底验证。

修复逻辑的实现还支持对已修复存储器施加多次加载或RAM顺序pattern。在此模式下,当存储器应用修复方案时,旁路寄存器输入端的移位操作可能导致ATPG测试捕获的值不可预测,因此旁路寄存器输入被门控为逻辑0。同理,旁路寄存器输出也不具备可观测性------部分比特位可能在输出memory interface前发生移位,导致存储器扇出寄存器捕获的值不可控。此外,对修复后的存储器施加多次加载pattern时,存储器输出的最高有效位也会出现不确定值。但这些输出仅连接至MBIST逻辑,且施加多次加载pattern时会禁止捕获所有存储器输出,从而确保仅测试功能路径。

修复分析(repair analysis)能在所有电压和温度条件下同步测试备用I/O与存储器主体,使增量修复可安全调用备用资源。而采用嵌入式修复逻辑的存储器可能需要额外测试步骤来验证备用I/O。另一优势是:若修复分析同时检测到备用单元和存储器主体故障,将立即判定该存储器不可修复,从而省去嵌入式修复方案必需的"修复后测试"步骤。需注意的是,当仅备用单元故障时,分析仍会判定存储器可修复,并通过编程熔丝标记备用单元故障状态(此时存储器仍可使用),后续分析若发现主体故障才会最终判定不可修复。

Implementing External Repair

本节将说明如何在Tessent Shell流程中实现外部存储器修复(external memory repair)。由于该实现步骤与本章前述的嵌入式修复逻辑存储器方案差异甚微,以下仅重点描述与常规设计流程的不同之处。

Design Preparation

第一步是生成功能设计所需的内存模块,并额外增加一个I/O端口。随后按常规方式将内存插入设计中,但需将数据输入的MSB(最高有效位)固定为0,同时保持数据输出MSB为悬空状态。此方法允许同一内存模块以两种不同方式使用:支持或不支持外部修复。例如,可将9位内存模块用作支持外部I/O修复的8位内存,或直接作为不带修复功能的9位内存。

若内存采用外部修复,其Tessent Core Description(TCD)中不得包含RedundancyAnalysis封装器------无论TCD是手动创建还是通过内存编译器自动生成。该封装器的存在表明内存已内置修复逻辑。

注意

Tessent MemoryBIST不会自动替换设计中的内存为含额外I/O的版本。用户需自行生成并插入具有正确I/O数量的内存模块。

可通过get_memory_instances命令的以下参数来筛选和创建适用于外部修复的内存集合:

-external_repair_ready

-repairable

-non_repairable

-type memory_type

DFT Insertion for External Repair

完成设计准备后,下一步需要为memory BIST插入配置内存实例和DftSpecification。本节重点讨论与配置外部内存修复(external memory repair)相关的具体内容。

MemoryBIST会为步骤1中指定的每个内存生成外部修复逻辑(external repair logic)。默认情况下,通过generate_external_repair_logic选项指定的每个内存都会生成一个修复分析模块(BIRA)和一个BISR模块。但本章节介绍的其他方法允许您排除BIRA模块或BISR模块,这在自定义修复流程中可能是必要的。您可以通过在DftSpecification中将Controller/Step/MemoryInterface/repair_analysis_present属性设置为off来排除BIRA模块。也可以通过从bisr_segment_order_file中移除相应内存来排除BISR模块段。

如"Repair Sharing"章节所述,本方案也支持BIRA/BISR逻辑共享。但需注意的是,即使启用共享功能,图5-72中红色标注的外部修复逻辑仍会专用于每个内存。

External Repair Assumptions and Limitations

在实现外部内存修复(external memory repair)时需遵循以下假设条件和限制,适用情况下提供了相应的解决方案:

  1. 修复功能仅支持单个IO。对于超宽内存(如IO数量超过64位),可能限制BIRA模块的最高工作频率。可通过设置DftSpecification中RepairOptions/enable_multicycle_operation属性来缓解此限制。

  2. 带额外IO的内存必须由用户手动实例化,Tessent MemoryBIST不会自动插入或替换内存模块。

  3. 内存TCD中的逻辑数据输出端口必须由同一物理端口的数据输出组成。以下示例展示了一个无效配置:逻辑端口"A"由两个不同物理端口(DOUT1[7:0]和DOUT2[3:0])拼接而成。

  4. 具有GroupWriteEnable功能的端口宽度必须与数据输入端口保持一致。

  5. 不支持共享总线后的内存。由于共享总线通常仅提供功能输入/输出接口,即使修复逻辑能与内存接口解耦并置于物理内存周围,也会丧失外部修复的大部分优势。

  6. 不支持具有标量端口的内存。

  7. 当应用多重加载模式(load patterns)时,设计中现有的嵌入式扫描链无法捕获数据输入/输出值。Tessent MemoryBIST不会对此进行检查,因为这属于具体实现问题。

  8. 内存数据端口不支持嵌入式测试逻辑,因此内存TCD中数据端口不允许设置TestInput和TestOutput属性。

  9. 若存在OutputEnable功能的内存输入端口,必须通过将DftSpecification中Step/MemoryInterface/output_enable_control属性设为"always_on"来将其固定为激活值。

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习