当前位置: 首页 > news >正文

Memory Repair (一)

参考来源:Tessent™ MemoryBIST User’s Manual, v2023.4

            Overview of Memory Repair Capabilities

         表 5-1 显示了 BIRA 电路的位置。通常 BIRA 电路与比较器位于同一位置。也就是说,如果 DftSpecification/MemoryBist/Controller/Step/comparator_location 设置为 shared_in_controller,则 BIRA 位于 BIST 控制器中,如果 comparator_location 设置为 per_interface,则 BIRA 位于 BIST 接口中。一个例外是,即使 comparator_location 设置为 per_interface,也可以在控制器中插入行修复 BIRA 电路。这样就可以通过最大化共享 BIRA logic所需的地址 pipeline registers 来最小化面积。这是默认选项。通过在 DftSpecification 中指定 row_bira_location:follow_comparators 将 Row BIRA 逻辑设置为 per_interface 时,可以将 comparator_location 设置为 时,可以强制 Row BIRA 逻辑的位置位于内存接口中。

        1. 当 row_bira_location 设置为 controller 时,行 BIRA 逻辑位于控制器上。当 row_bira_location 设置为 follow_comparators 时,行 BIRA 逻辑位于内存接口。

        Row and Column BIRA 引擎可能并不总是找到修复解决方案,即使存在修复解决方案,因为该引擎不会对修复解决方案执行详尽搜索。为了最大限度地减少面积和测试时间,引擎首先分配所有备用列,除非它在同一地址遇到多位错误。在这种情况下,即使有备用列可用,引擎也会分配一个备用行。此修复策略无法为具有按特定顺序出现的公共行或列地址的某些错误组合找到解决方案。然而,由于这些组合的数量较少,对产量的影响可以忽略不计。

        具有自我修复功能的内存必须在内存库文件中指定正确的修复映射信息。有两种类型的内存修复接口可用 — 串行和并行: • 具有串行自我修复功能的内存在内存模块上具有扫描端口。通过扫描 repair fuse 值来串行访问自修复保险丝。 • 具有并联自修复接口的存储器在内存模块上具有控制每个修复保险丝的端口。

        图 5-2 显示了一个包含 MEM1 和 MEM2 两个存储器的模块。存储器 MEM1 具有串行 BISR 接口,并与其内部 BISR 寄存器一起显示。可修复存储器 MEM2 具有并行 BISR 接口。显示了 external BISR register 和 memory parallel repair ports 之间的 parallel connections。还显示了 BISR 链控制信号。该图说明了 BISR 寄存器如何连接以形成可使用 BISR_SI 和 BISR_SO 端口访问的单个 BISR 链。当值扫描到 BISR 链中时,内部 BISR 寄存器的内容与外部 BISR 寄存器相同。BISR_SELECT 信号控制选择内部或外部 BISR 寄存器的多路复用器。BISR_SELECT 信号控制要扫描出的 BISR 寄存器。内部 BISR 寄存器必须与外部 BISR 寄存器长度匹配。

        BISR 控制器支持两种修复方法:软修复或硬修复。修复方法是在 DFT 插入期间使用 DftSpecification 中的 repair_method 属性指定的。当 repair_method 设置为 hard 时,内存修复信息将存储在保险丝盒中,从而可以将修复信息永久存储在设备内部。这是默认的修复方法

        当 repair_method 设置为 soft 时,内存修复信息不会永久存储在设备内部。每次打开设备或 Power Domain 区域电源时,都必须重新加载或重新计算它。如果修复解决方案存储在外部,则可以使用 bisr_chain_access 模式加载它。另一种选择是通过运行内存 BIST,然后为受影响区域运行 BIRA 到 BISR 数据传输来重新运行冗余分析。实施软修复方法时,不需要熔断器盒接口模型。与熔断器盒访问相关的 BISR 控制器作模式被禁用,例如 self_fuse_box_program 和 verify_fuse_box 自主模式,以及所有fuse_box_access 运行模式。

        Memory Library Preparation and Repair Registers Description

        IO替换:对于 IO 替换,当一个或多个故障位于同一列上,或者一个或多个故障列位于同一内存 IO 中时,内存是可修复的。

        列替换:对于列替换,当一个或多个故障位于同一列上,或者只有一个故障列在指定的修复范围内时,内存是可修复的。要识别故障列,内置的修复分析电路必须记录有缺陷的 IO 值以及有故障的列地址。

        要实施内置修复分析,必须在内存库文件中定义 RedundancyAnalysis 包装器。RedundancyAnalysis 包装器中的属性和包装器包含有关可修复内存段、段中备用元素的数量以及将有缺陷的 IO/列替换为备用列时要记录的地址的信息。图 5-5 总结了用于支持 IO/列修复分析的内存库文件的语法。

        使用可选的 ColumnSegmentRange 包装器定义内存地址空间的一部分,其中备用元素可以替换有缺陷的元素。ColumnSegmentRange 包装器在内存库的 RedundancyAnalysis 包装器中定义。如果只定义了一个 RedundancyAnalysis/ ColumnSegment 包装器,则无需指定此包装器。在此配置中,列段包含整个内存地址空间。

        SegmentAddress 属性:使用可重复的 SegmentAddress 属性指定用于对 ColumnSegment/ColumnSegmentCountRange 限制进行编码的有效列地址位。这些范围限制用于定义 segment 的备用元素可以替换有缺陷的 IO/Column 元素的列地址空间部分。

        ColumnSegment 包装器是实现 IO/列修复所必需的,用于定义具有备用元素的内存空间的一个或多个段。对于 IO/列修复分析,您必须至少指定一个 RedundancyAnalysis/ ColumnSegment 包装器。假定每个 ColumnSegment 都有一个备用元素。

        ColumnSegmentCountRange 和 RowSegmentCountRange 属性:使用可选的 ColumnSegmentCountRange 和 RowSegmentCountRange 属性来定义定义的段地址位的 lowRange 和 highRange。当有缺陷的元件在此地址范围内时,可以从此段分配备用元件。

        NumberOfSpareElements 属性:使用 NumberOfSpareElements 属性指定已定义段中冗余元素的数量。默认值为 1。

        ShiftedIORange 属性:使用 ShiftedIORange 属性定义一组 IO/数据位,其中备用元素可以替换有故障的 IO。当此组内有缺陷元件时,可以从此段分配备用元件。此属性的默认值等于整个 IO 范围。

        FuseSet 包装器:在 ColumnSegment 包装器中使用强制性 FuseSet 包装器提供有关 fuse register 的详细信息。fuse register 包含用于识别有缺陷的 IO/列的 bitmapping 信息。

        Fuse 属性:使用可选的 Fuse 属性来指示在检测到故障时要记录在 fuse 寄存器中的内存地址端口。您必须使用以下语法定义地址端口:

        多个 fuse register bits 是可能的,但它们必须从 0 开始索引。检测到故障时,可以在 BIRA 熔断器寄存器中捕获常数 LogicHigh 或 LogicLow 值。

        FuseMap Wrapper :使用强制性 FuseMap 包装器定义用于将有缺陷的 IO 映射到相应保险丝寄存器值的保险丝的 HighBitRange 和 LowBitRange。

        FuseMap 包装器独立于 Fuse 属性。

        NotAllocated 属性 :使用可选的 NotAllocated 属性指定一个 fuse 寄存器值,该值指示不需要对列段进行修复。如果未定义此属性,则在需要修复时将分配位用作指示符,并记录错误的 IO 信息。分配位是 fuse registers的 MSB 位。

        ShiftedIO 属性 :使用必需的 ShiftedIO 属性指定要记录在保险丝寄存器中的值,该寄存器标识每个有缺陷的 IO。

        内存阵列的每一半都有一个冗余 IO,可以修复相应半部分内的任何 IO。假设每个冗余 IO 都通过 5 位保险丝进行编程,如下所示: • 位 [3:0] 用于识别有缺陷的 IO。• 位 [4] 是熔断器寄存器的 MSB;它用作分配 bit。

        此冗余规范在 memory interface 或 memory controller 中实现了三个 registers,用于修复分析报告。这些寄存器可以在运行存储器 BIST 后移出,以便于保险丝盒编程。下图所示的 2 位寄存器BP1_RA_MEM1_REPAIR_STATUS_REG表示整体内存可修复性。其余两个 registers 对应于 FuseSet wrappers。5 位 FUSE_REG 寄存器记录有缺陷的 I/O,并将分配位作为 MSB 包括在内。

        这里手册写的32位,按照我的理解应该是16位,比较疑惑,先做下标记。

        在此示例中,内存分为两个块。在内存块中,内存阵列的每一半都有一个冗余 IO/列,可以修复相应一半内的任何 IO/列。假设每个冗余 IO 都由一个 5 位保险丝编程。有缺陷的 IO/列的保险丝盒位映射如表 5-2 所示。

                       

        此冗余规范在 memory interface 或 memory controller 中实现了 5 个 registers 来报告修复信息。这些寄存器可以在运行存储器 BIST 后移出,以便于保险丝盒编程

        下图所示的 2 位寄存器 BP1_RA_MEM1_REPAIR_STATUS 表示整体内存可修复性。其余四个 registers 对应于 FuseSet 包装器,并记录内存 IO 的 5 位编码,如表 5-2 中所定义。fuse 寄存器不包括分配位,因为 NotAllocated 属性是在 FuseMap 定义中指定的。

        此处显示了,内存IO有5位编码,bit位似乎和FuseMap的编码位数相关。这也说明图中32bit位是合理的。但是,FuseMap有些位,并未对应IO?

        当您使用 Tessent Shell MemoryBIST 实现内置修复分析时,该工具会在硬件中创建一组寄存器,用于存储 BIST 运行的修复结果。这组寄存器包括以下内容: • 每个具有冗余的存储器都有一个修复状态寄存器 • 存储器库文件中定义的每个存储器修复段的一个或多个熔断寄存器

        DftSpecification 的 MemoryBist/Controller/Step 包装器中的 comparator_location 属性设置确定与可修复内存关联的 I/O 和列修复分析硬件的位置:• comparator_location:shared_in_controller – 在内存控制器中创建修复分析寄存器。• comparator_location:per_interface - 在相应的内存接口中创建修复分析寄存器。

        修复状态寄存器指定内存是需要修复、不可修复还是不需要修复(当未检测到故障时)。修复状态寄存器的位解码分配如表 5-3 所示。

        修复状态寄存器位于setup chain上。因此,这些 registers 可以从 memory controller 或 memory interface 串行扫描出来。

        对于每个内存段,每个备用元件都需要两个寄存器: • 分配寄存器(如果未指定 NotAllocated 属性) • FuseSet 寄存器

        分配寄存器(如果存在)包含一个位,用于指定备用元件是被分配(需要修复)还是未分配。此位具有以下名称:

        <memory_instance_name>_<segment_name>_SCOL#_ALLOC_REG

        此位中的值 0 表示未分配 (无需修复) ,1 表示已分配 (需要修复) 。如果分配,则 FuseSet register 中的值由内存库文件中的 FuseSet 包装器决定。

        FuseSet 寄存器包含由 Segment的 FuseSet 包装器指定的 fuse 位。寄存器由以下部分组成:• 与有缺陷的元件相对应的 I/O 映射值。• 如果定义了 FuseSet 包装器中的 Fuse 属性,则 FuseSet 寄存器还包括在内存地址总线上为有缺陷的元件驱动的地址值

        当设置 comparator_location: shared_in_controller 时,BIRA 寄存器位于内存 BIST 控制器内部,端口命名约定具有以下前缀:

        <memory_instance_name>_<segment_name>_SCOL<x>_...

        这<memory_instance_name>对应于 MemoryInterface 中的 instance_name 属性或 DftSpecification MemoryBist/Controller/Step 包装器中的 ReusedMemoryInterface 包装器定义的内存实例。这<segment_name>对应于<SegmentName>内存模板包装器中的 ColumnSegment()。<x> 索引对应于第 N 个备用元素。备用元素从 0 开始编号。

        当设置 comparator_location: per_interface 时,BIRA 寄存器位于内存接口内部,端口命名约定具有以下前缀:<segment_name>_SCOL<x>_...这<segment_name>对应于<SegmentName>内存模板包装器中的 ColumnSegment()。<x> 索引对应于第 N 个备用元素。备用元素从 0 开始编号。内存修复分析的结果可以通过监控以下端口来确定:

        • _REPAIR_STATUS

        • <prefix>_FUSE_REG  此输出端口报告有缺陷元件的 IO 映射值。

        • <prefix>_FUSE_ADD_REG  此输出端口包含必须分配冗余元件的内存列地址。

        • <prefix>_ALLOC_REG  此单位输出端口指示是否必须分配备用元件。

        在 Row replacement 机制中,额外的行被内置到 memory 数组中。这些冗余元素可以修复整个内存或特定 bank 中的任何失败行。替换机制取决于内存设计。例如,冗余元素可能会替换一个实现中的单个物理行,而另一个方案总是替换多个连续的行,即使只有一行失败。图 5-12 说明了一个可修复内存的结构,其中包含两个具有专用冗余行的 bank。

                 

        要实施内置修复分析,必须在内存库文件中定义 RedundancyAnalysis 包装器。        

        RedundancyAnalysis 包装器中的属性和wrapper, 包含有关可修复内存段、段中备用元素的数量以及将有缺陷的行位置替换为备用的要记录的地址的信息。

         图 5-13 总结了用于支持行修复分析的内存库文件的语法。

        

        使用可选的 RowSegmentRange 包装器定义内存地址空间的一部分,其中备用元素可以替换一个或多个有缺陷的行。RowSegmentRange 包装器在内存库的 RedundancyAnalysis 包装器中定义。

        以下使用条件适用:• 如果在 RedundancyAnalysis 包装器中仅定义了一个 RedundancyAnalysis/RowSegment 包装器,则无需指定 RowSegmentRange 包装器。在这种情况下,RowSegmentRange 包装器默认包含整个内存地址空间。• 如果在 RedundancyAnalysis 包装器中定义了多个 RowSegment 包装器,则需要 RowSegmentRange 包装器,并且为所有包装器指定的所有 Segment 范围必须合并以包含整个内存地址空间。

        SegmentAddress 属性 :使用可重复的 SegmentAddress 属性指定用于对 RowSegment/RowSegmentCountRange 限制进行编码的有效行地址位。这些范围限制用于定义行地址空间的部分,在该部分中,段的备用元素可以替换有缺陷的行元素。

        以下使用条件适用:• SegmentAddress [y] — 对于所有指定的 SegmentAddress 属性,y 必须从 0 开始,并包含到 n-1 的所有有效整数,其中 n 是指定的 SegmentAddress 属性的编号。• name 必须标识在指定了 Port/Function: Address 的内存库文件中定义的端口。如果地址端口是总线端口,则名称必须标识总线端口中的单个位。

        RowSegment 包装器是实现行修复所必需的,用于定义具有备用行元素的内存空间的一个或多个段。

        对于行修复分析,您必须至少指定一个 RedundancyAnalysis/RowSegment 包装器。假定每个 RowSegment 都有一个备用元素。

        如果指定了 RedundancyAnalysis/RowSegmentRange 包装器,则定义的 RowSegment 包装器的数量必须包含整个内存地址空间。

        NumberOfSpareElements 属性 :使用 NumberOfSpareElements 属性指定已定义段中冗余元素的数量。默认值为 1。

        RowSegmentCountRange 属性:使用可选的 RowSegmentCountRange 属性,根据 RowSegmentRange 包装器中定义的有效行地址位,为定义的段指定 lowRange 和 highRange。当有缺陷的元件位于此段范围内时,可以从此段分配备用元件。仅当至少定义了一个 RedundancyAnalysis/RowSegmentRange/SegmentAddress 位时,才能指定 RowSegmentCountRange。

        FuseSet 包装器使用强制性的 RowSegment/FuseSet 包装器将 fuse 寄存器位映射到内存上的地址端口。fuse register bit 记录有缺陷元件的 this address port 的值。此包装器为每个 RowSegment 包装器指定一次。• Fuse 属性:使用可选的 Fuse 属性指示检测到故障时要在 Fuse 寄存器中捕获的内存地址端口。这些 fuse bits 是按 row segment 定义的。检测到故障时,BIRA 熔断器寄存器也可以捕获 Constant LogicHigh 和 LogicLow 值。

        以下使用条件适用: o 每个 FuseSet 必须至少定义一个 Fuse。o 名称必须是标量端口或总线端口的单个位。o name 必须是由内存库文件中具有 Function: Address 的 Port 包装器定义的端口。可以使用常数值 LogicHigh 和 LogicLow 代替地址位。

        本节讨论可修复存储器的示例 memory library 文件的结构。图 5-14 中的内存库文件语法示例定义了图 5-12 中所示的内存的行修复分析功能。内存包含 2 个 16 行和 4 列的 bank。每个 SoundBank 实现 2 个冗余元件

        

        内存库文件的此示例语法向 Tessent Shell MemoryBIST 指定行段的以下信息:

        • 样本内存有两个 bank。每个 bank 都有两个可供维修的备用元件。每个 bank 的两个备用元件可以修复仅在该 bank 内发生的故障。FuseSet 包装器定义要为每个可修复元素记录的地址位。

        • 两行段中的每一行都位于 AddressPort ADR 定义的地址空间中ADR[6]。在地址空间内选择 RowSegment(Bank0),其中 ADR[6] 为 1'b0。在地址空间内选择 RowSegment(Bank1),其中 ADR[6] 为 1'b1。

        • 对于行段范围,SegmentAddress 位 0 定义为内存地址端口 ADR[6]。

        • 每个行段都包含两个由 NumberOfSpareElements 属性定义的备用元素。这意味着对于 RowSegment(Bank0),有两组保险丝,每组保险丝都记录行段中内存有缺陷部分的端口 ADR[5:2] 的值。同样,对于 RowSegment(Bank1),有两组保险丝,每组保险丝都记录行段中内存有缺陷部分的端口 ADR[5:2] 的值。

        图 5-15 总结了用于支持 row 和 IO/column 元素的内置修复分析的内存库文件的语法。

        

        

        可以同时使用冗余的行和列/IO 元素来替换内存中有缺陷的行和列元素

        使用 RowSegmentRange 和 ColumnSegmentRange 包装器指定可以分配 RowSegment 和 ColumnSegment 包装器中定义的备用元素的边界。此分段还定义了内置修复分析模块使用可用于此内存区域的备用行和 IO/列资源计算最佳修复解决方案的区域。

        RowSegmentRange 包装器定义 RowSegment/RowSegmentCountRange 属性和 ColumnSegment/ RowSegmentCountRange 属性使用的重要行地址位。RowSegmentCountRange 属性定义相应 RowSegment 或 ColumnSegment 的行地址边界。

        ColumnSegmentRange 包装器定义 ColumnSegment/ColumnSegmentCountRange 属性使用的重要列地址位。ColumnSegmentCountRange 属性定义相应 ColumnSegment 的列地址边界。

        以下使用条件适用:• 在所有 RowSegment 或 ColumnSegment 包装器中指定的 RowSegmentCountRange 限制必须包含整个内存空间。• 具有不同 RowSegmentCountRange 限制的 RowSegment 包装器不得重叠。• 在所有 ColumnSegment 包装器中指定的 ColumnSegmentCountRange 限制必须包含整个内存空间。• 具有不同 ColumnSegmentCountRange 或 RowSegmentCountRange 限制的 ColumnSegment 包装器不得重叠。

        SegmentAddress 属性 使用 RowSegmentRange 和 ColumnSegmentRange 包装器中的 SegmentAddress 属性来指定使用哪些地址端口来定义内存段的范围。如果在 RedundancyAnalysis 包装器中只定义了一个 RowSegment 或 ColumnSegment 包装器,则 RowSegmentRange 或 ColumnSegmentRange 包装器相应地默认包含整个内存地址空间。

        以下使用条件适用:• SegmentAddress[y] – 对于所有指定的 SegmentAddress 属性,y 必须从 0 开始,并包含到 n-1 的所有有效整数,其中 n 是指定的 SegmentAddress 属性的编号。

        • name 必须用 Port/ Function:Address 标识内存库文件中定义的端口。如果地址端口是矢量端口,则名称必须标识矢量端口中的单个位。

        使用 RowSegment 和 ColumnSegment 包装器定义具有备用元素的内存的一个或多个段。必须至少指定一个 RowSegment 和一个 ColumnSegment 包装器,以进行行和 IO/列修复分析。如果指定了 RowSegmentRange 包装器,则定义的 RowSegment 包装器的数量必须包含整个内存地址空间。

        FuseSet Wrapper 使用强制的 FuseSet 包装器将 fuse 寄存器位映射到内存上的地址端口。fuse register bit 记录有缺陷元件的 address port 的值。此包装器在每个 RowSegment 和 ColumnSegment 包装器中指定一次。        

        • fuse属性 :使用 RowSegment/FuseSet 和 ColumnSegment/FuseSet 包装器中的 Fuse 属性来定义用于将有缺陷的元件替换为备用元件的fuse所需的地址位。这些 fuse bits 是按 row segment 定义的。检测到故障时,BIRA fuse寄存器也可以捕获 Constant LogicHigh 和 LogicLow 值。以下使用条件适用: o 每个 FuseSet 必须至少定义一个 Fuse。o 名称必须是标量端口或矢量端口的单个位。o name 必须是在内存库文件中定义 Function: Address 的端口包装器。可以使用 Constant LogicHigh 和 LogicLow 值来代替地址位。

        本节为具有行和 IO/列冗余的内存提供了一个示例。图 5-16 说明了具有行和 IO/列冗余的内存示例。

        

        图 5-17 说明了一个内存库文件语法示例,用于定义图 5-16 中示例内存的修复分析功能。

        

        

        内存库文件的此示例语法向 Tessent Shell MemoryBIST 指定行段和 IO/列段的以下信息:

        • 样本内存有两个 bank (或行段)。每个 bank 都有两个备用行和两个备用 IO 可供修复。每个 bank 的两个 spare row 元素可以修复仅在该 bank 内发生的故障。FuseSet 包装器定义要为每个可修复元素记录的地址位。每个列段的单个备用 IO 决定了每个 bank 使用两个 ColumnSegment 包装器。总共需要四 (4) 个 ColumnSegment 包装器 — 2 个用于 Bank0,2 个用于 Bank1。

        • 两个行和列段中的每一个都位于 AddressPort Address[10] 定义的地址空间中。RowSegment(Bank0) 和 ColumnSegment(Bank0_xxx) 在地址空间内定义,其中 Address[10] 为 1'b0。RowSegment(Bank1) 和 ColumnSegment(Bank1_xxx) 在地址空间内定义,其中 Address[10] 为 1'b1。

        • 对于行段范围,SegmentAddress 位 0 定义为内存地址端口 Address[10]。

        • 每个行段都包含两个由 NumberOfSpareElements 属性定义的备用元素。这意味着对于 RowSegment(Bank0),有两组保险丝,每组保险丝都记录行段中内存有缺陷部分的端口 Address[9:7] 和 Address[0] 的值。同样,对于 RowSegment(Bank1),有两组保险丝,每组保险丝都记录行段中内存有缺陷部分的端口 Address[9:7] 和 Address[0] 的值。

        • 每个 ColumnSegment 都有 FuseMap 寄存器。FuseMap 寄存器捕获指定的 ShiftedIO 熔断器映射值,该值指示检测到错误的 IO。在实施 IO/列修复时,FuseMap 是必需的。fuse map 值用于识别内存的故障 IO。熔断映射值可在内存供应商提供的内存数据表中找到。

        

        内存修复接口有两种类型 — 并行和串行。每个内存只能使用一种类型的修复接口。具有 parallel repair 接口的内存具有用于分配冗余元素的端口。具有 serial repair interface 的 memory 具有一个内部 shift register ,用于分配 redundant elements。

        在 Memory Tessent Core Description (TCD) 或内存库文件中,您可以使用 PinMap/SpareElement 包装器中的属性指定 BISR 详细信息,如“Parallel BISR Interface”和“Serial BISR Interface”部分所述。

        当实现并行 BISR 接口时,您可以使用内存库文件中 PinMap/SpareElement 包装器的 Fuse、FuseMap 和 RepairEnable 属性来指定与指定 fuse 寄存器关联的内存修复端口名称。PinMap/SpareElement 包装器的属性提供了有关如何将 BISR 熔丝寄存器连接到内存修复端口的指导,如后面的章节所述。

        具有 serial repair 接口的 memory 具有一个内部 shift register ,用于分配备用元件。在实现串行 BISR 接口时,您必须使用内存库文件中 PinMap/SpareElement 包装器的 Fuse、FuseMap 和 RepairEnable 属性中的 RepairRegister[x] 索引来描述内部 BISR 寄存器的顺序。

        给定内存的总 BISR 长度 (N) 等于内存库文件中组合的 RowSegment 和 ColumnSegment 包装器中指定的 RepairRegister[x] 属性的数量。RepairRegister[0] 指定最接近 BISR scanOut 端口的 BISR 寄存器位,首先扫描其值,RepairRegister[N-1] 指定最接近 BISR scanIn 端口的 BISR 寄存器位,最后扫描其值。为每个内存生成一个 BISR 寄存器。在内存模板中,RepairRegister[x] 索引必须从 0 到 N-1 连续。必须使用 0 到 N-1 之间的所有索引,并且每个索引只能使用一次。

        在描述 RepairRegister[x] 索引时要小心,因为它们必须与内部存储器 BISR 寄存器顺序匹配。存储器数据表提供了内部 BISR 寄存器排序。内部 BISR 链的顺序与数据表指定的顺序之间的任何不匹配都会导致在内存内扫描的修复数据不正确。建议您通过内存库认证工具 (memlibc) 运行内存模板以验证内存模板。该认证工具与故障插入内存仿真相结合,可快速识别内存模板与内存模型中的内部 BISR 寄存器之间的任何不匹配。有关此主题的更多信息,请参阅“在 Tessent Shell 中使用 memlibCertify 验证 TCD 内存库文件”。如果内部 BISR 链的 output 存在内置 retiming latch,请使用 Port wrapper 中的 Retimed 属性来指示存在 retiming latch。

        本节提供了一个示例内存库文件,该文件显示了如何使用 Port 包装器来声明内存修复端口,以及如何使用 PinMap 包装器来指定修复解决方案到内存的映射。图 5-18 总结了用于支持内置自我修复的示例内存库文件的语法。

        

        内存库文件中的 Port 包装器用于声明可修复内存上的内存修复端口。根据内存中使用的修复接口的类型,使用以下端口函数指定修复端口,如 Port 包装器的 Function 属性中所指定:

        

        使用串行 BISR 接口时,所有带有 Function:Select 的端口都将被拦截(门控)。这会强制在通过内部 BISR 链移动时取消选择内存。

        PinMap 包装器的内容使您能够将 BIRA 引擎计算的修复解决方案应用于内存修复端口或内存的串行修复寄存器。PinMap/SpareElement 包装器指定从 BISR fuse 寄存器到相应 memory repair ports 的 mappings, or connections。当 DftSpecification MemoryInterface/repair_analysis_present 属性为“auto” (默认设置) 并且内存的内存库文件包含 RedundancyAnalysis 包装器时,Tessent Shell MemoryBIST 会生成并实例化内存的自修复硬件和连接。PinMap:SpareElement 包装器的内容根据所使用的修复接口类型而有不同的解释,如以下部分所述。

        Parallel Memory Repair Interface:使用 PinMap/SpareElement 包装器,您可以指定从 BISR fuse 寄存器到相应内存修复端口的映射。这些 pin 映射直接将 BISR fuse 寄存器端口连接到内存修复端口。

        Serial Memory Repair Interface:使用 PinMap/SpareElement 包装器,您必须指定内部 BISR 寄存器的顺序。Tessent Shell MemoryBIST 根据此顺序构建相应的外部 BISR 寄存器。RepairRegister[x] 索引指定每个fuse在外部 BISR 寄存器中的位置。

        BISR Usage Conditions:

        使用此 BISR 功能时,必须在相应的 RowSegment 或 ColumnSegment 包装器中声明 PinMap/SpareElement 包装器。• 在 RowSegment 或 ColumnSegment 包装器中指定时,PinMap 包装器可能包含多个 SpareElement 包装器。RowSegment 包装器内的 PinMap/ SpareElement 包装器的数量必须等于 NumberOfSpareElements 属性。

        您还可以在 PinMap/SpareElement 包装器中指定 RepairEnable、Fuse、FuseMap 和 LogicLow 属性,如以下部分所述。repair interface确定适用的使用条件:

        

        RepairEnable Property:使用 PinMap/SpareElement 包装器中的 RepairEnable 属性指定内存的端口或启用修复元素分配的 BISR 链寄存器。

        Fuse Property:使用 fuse[<bitIndex>] PinMap/SpareElement 包装器中的 属性指定内存端口用于控制备用行或列元素地址的 BISR 寄存器。您可以多次使用此属性。此属性将 FuseSet/Fuse 中的每个位映射到内存上的相应修复端口。每个 PinMap/SpareElement 包装器索引必须与 FuseSet/Fuse 索引匹配。

        FuseMap Property:使用包装器中的 FuseMap [ <bitIndex>]PinMap/SpareElement  属性来指定控制备用 IO 元素端口的内存端口。此属性只能在 ColumnSegment 包装器中指定,并且必须对每个 FuseMap 位重复。此属性将shifted IO fuse map 位映射到内存上的相应修复端口。每个 PinMap/SpareElement/FuseMap 索引必须在 FuseSet/Fuse[x:y] 索引范围内。

        

        以下各节演示了两个简单的可修复内存示例及其相应的内存库文件: • 行修复和并行 BISR 接口 此示例显示了使用并行 BISR 接口的具有两个冗余行的内存。冗余行使用内存模块上的 REN0、RR0[3:0]、REN1、RR1[3:0] 端口进行分配。• 列修复和串行 BISR 接口此示例显示了使用串行 BISR 接口的具有一个冗余列的存储器。使用内存模块上的串行 BISR 端口访问冗余列分配。

        

        下图中的示例显示了使用串行 BISR 接口的具有一个备用列的内存。

相关文章:

  • 【报错解决方案】cannot open shared object file: No such file or directory
  • Unity3D仿星露谷物语开发54之退出菜单及创建可执行文件
  • 非标RFID电子标签工业载码体如何定制?
  • win11如何重启
  • OpenCV---findCountours
  • 11.13 LangGraph记忆机制解析:构建生产级AI Agent的关键技术
  • Linux的五种IO模型
  • 《软件工程》实战— 在线教育平台开发
  • 2.1 Maven项目架构管理工具
  • Pathway:重新定义实时数据处理的Python框架
  • PHP实战:安全实现文件上传功能教程
  • SQL进阶之旅 Day 5: 常用函数与表达式
  • K8s边缘集群赋能工业自动化:从传感器监控到智能决策的全流程升级
  • 跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
  • UE5 蓝图,隐藏一个Actor,同时隐藏它的所有子物体
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()
  • 【STM32】HAL库 之 CAN 开发指南
  • JS高级 - 对象
  • 十一、Samba文件共享服务
  • 2025年- H55-Lc163--124. 二叉树的最大路径和(深搜)--Java版
  • 专业帮人做网站号码/怎么优化标题和关键词排名
  • 做自媒体与做网站/微信指数官网
  • 用网址进入的游戏/关键词优化的原则
  • 电影网站开发技术/百度推广云南总代理
  • 17网站一起做网店普宁香港街/推广普通话演讲稿
  • 做ppt常用图片网站有哪些/seo流量软件