【Tessent MemoryBIST】【Ch6】Shared Bus Interface MBIST 【1】Basic Flow

Ref:Tessent™ MemoryBIST User’s Manual, v2023.1


基于 Tessent 工具实现的 Shared Bus Memory BIST 的整体结构如下所示。

在这里插入图片描述

本文将介绍使用 Shared Bus Interface 实现 Memory BIST 的基本内容,包括基本概念、架构、流程、配置文件以及 BIST hardware 的生成、插入和验证等。

Shared Bus Interface 提供了一个通用的 access port 用于访问多个 memories。这样的结构具有很好的可拓展性,module 内部 memories 增加的时候,module 边界处用于访问 memooryBIST 的端口可以保持不变。

Shared Bus Interface 的一个典型应用是测试 processor core modules 内部的 memories。

术语 Shared Bus memory cluster 或者 Shared Bus cluster 指的是一个 module ,它能够使用一个通用的 Shared Bus interface 来访问多个 memories。

通过 Shared Bus interface 访问的 memories 称之为 logical memories

logical memories 是由一个或者多个 physical memories 构成的地址空间。


Applying Memory BIST to a MemoryCluster


Shared Bus Memory Cluster Module 的示意图如下所示:

在这里插入图片描述

在该 design 中有一个名称为 SB1 的 Shared Bus interface,用以访问四个 logical memories (LM_0 ~ LM_3) 。

logical memories 指的是可以通过外部的 Shared Bus interface SB1 进行访问的地址空间,它可能是由一个或者多个 physical memories (图中的蓝色方块) 构成。

在该示例中,Shared Bus memory cluster module 只有一个 Shared Bus interface,但是 Shared Bus memory cluster module 是可以由多个 Shared Bus interface 的。

每个 Shared Bus interface 提供对 memory data、control 和 clk 端口的访问,以及对 Shared Bus memory cluster module 内部特定memories 进行寻址(address specific memories)所需的其他控制端口。

在上图给出的示例中,所有的 logical memories 都位于 Shared Bus memory cluster。但是,根据 IP 不同的实现方式,logical memories 可在 Shared Bus memory cluster 外部不同的 design hierarchy 进行实例化。【文章开头的那张图】


每个 logical memories 都可以在任何时间通过 Shared Bus interface 进行访问。通过 Shared Bus interface 的 array select port 来选择需要访问的 logical memories,使其处于 enable 状态。

一旦 Shared Bus interface 的 array select port 上的 array access code 被指定,对应的 logical memories 就可以通过 Shared Bus interface 的 clock、data 和 control ports 进行访问。

类似的, logical memory 可能由一个或者多个 physical memories 构成。选择和实例化设计中的 physical memories 构成 Logical Memory 的过程称之为 physical RAM integration。

在 RAM integration 之后,Tessent libraries 也需要进行调整,使其和 design 中的 physical memory implementation 相匹配。

【physical memories 的分组一般是 func 完成的,Tessent DFT 需要给定与之对应的 TCD 格式的 libraries。】

logical 和 physical memories 的层次化特性具有以下优点:

  • 在设计的早期,可以在 logical memory level 使用 behavioral model 对 Shared Bus interface 进行验证,不需要使用 physical memories;
  • physical memories 的实现方式不会影响整体的 Shared Bus access。用户可以根据设计需求选择 RAMs 和 stacking configuration。只需要在 logical level 进行局部修改。

Logical memory LM_1的构成如下图所示。logical memory 接收和驱动 Shared Bus interface 上的 8bit 数据通道(data channel)。两个 physical memories 以水平堆叠的方式实例化,它们两个的 4bit 数据端口组成了 LM_1 的 8bit data path。

在这里插入图片描述

如下图所示,在规划 memory BIST 的时候,每一个 Shared Bus memory cluster module 都会被分配一个专用的 memory BIST controller。 memory BIST controller 、interface logic 和 Shared Bus memory cluster module 处于相同的 level。

在这里插入图片描述

如果设计中包含 standard memories,会有一个特殊的 memory BIST controller 用于测试这些 memories。

被分配给 Shared Bus memory cluster module 的 memory BIST controller 不能用于测试位于 Shared Bus memory cluster 之外的 memories。

design 中可以有多个 Shared Bus memory clusters。


Why use a shared bus architecture


随着 design 中 memory 的数量越来越多,MBIST 逻辑所需要的额外开销越来越多。MBIST 逻辑和额外的 routing 需求会对芯片上和memory 相关的 func path 的时序造成影响。

Designs today contain many memory arrays, and they consume a substantial portion of the total chip area. This increase in memory size and number implies extra hardware cost for the associated memory built-in self-test (MBIST) logic. As a result, the area of the MBIST logic and the additional routing requirements may negatively impact the chip’s performance in the critical functional paths to and from memories.

A shared bus architecture provides a common access point for several memories, allowing designers to optimize routing and core performance. It also provides the flexibility to route DFT signals along functional paths behind the shared bus interface.

最主要的优点是:可以使 PD 的时序更好收敛。


Shared Bus Support Features


生成 Shared Bus interfaces 所需要的 embedded test hardware 和生成 standard memories 所需要的测试硬件的过程十分相似,并且完全支持 hierarchical flow。

如下图所示,首先会生成最基本的 memory BIST controller 和 memory interfaces。此外还会生成位于 memory BIST interfaces 和 memory cluster module 之间的 memory emulation logic、 multiplexing logic 等模块。

在这里插入图片描述

上图所示的 memory emulation logic blocks 和 Shared Bus memory cluster module 内部的 logical 或 physical memories 相对应,每一个 memory emulation logic module 都对应一个 logical 或 physical memory。

multiplexing logic 用于处理 Shared Bus interface ports、memory BIST controller 和 memory emulation modules 之间的控制逻辑和访问逻辑。

memory emulation modules 和 multiplexing logic 共同实现了对所有的 logical 或 physical memories 进行 virtual access,这使得 memory BIST controller 能够运行 BIST algorithms 并对所有的 logical 或 physical memories 进行一些标准操作。

BIST controller、memory interface modules、memory emulation modules 和 multiplexing logic 会构成一个 Shared Bus assembly module。

这样(Wrapping the BIST logic)使得在综合的过程中可以进行 cross-boundary area optimization ,并且能够减少综合之后设计中出现的 loose logic。


Shared Bus Interface MemoryBIST Implementation Flow


使用 Shared Bus interface 进行 memory test 的实现过程,以及其所需要的三个 memory library files。


Library Requirements


使用 Shared Bus interface 需要三个 memory library files:Memory Cluster Tessent Core Description、Logical Memory Tessent Core Description 和 Physical Memory Tessent Core Description。

Shared Bus memory cluster 和 logical memory TCD 通常是手动创建的。如果 IP 中包含描述通过share bus interface 访问 memory 的信息,也可以自动生成。

使用 memlibGenerate 可以将 MBIST Information File (MBIF) 转换为 Tessent libraries。【MBIF format 一般是由 IP 供应商提供】


Memory TCD 语法的具体内容参考:【Tessent】【Tessent Core Description】TCD — Memory & Memory Cluster


Memory Cluster Tessent Core Description

  • 和每一个 Shared Bus memory cluster module 相关联
  • 描述了 Shared Bus interface pins
  • 列出了 Shared Bus memory cluster module 内部所有的 logical memories
  • 描述了 logical memories 和 Shared Bus interface 之间的引脚映射关系

TCD 文件的基本格式:

在这里插入图片描述

Logical Memory Tessent Core Description

  • 和 Shared Bus memory cluster module 中的每一个 logical memory 相关联
  • 用户基于所使用的 physical memories 创建或者修改
  • References library files of individual physical memories making up the logical memory

logical memory library file 使用的是 memory core library syntax 的超集,主要增加了 MemoryGroupAddressDecoding 和PhysicalToLogicalMapping 两个 wrappers。

【memory core library 就是普通的 memlib,不使用 shared bus interface 的 mbist 会用到这个库文件】

基本格式:
在这里插入图片描述

在 RAM integration 的过程中,用户可以使用任何可用的 memory 构成 logical memory address space。该过程结束之后,logical memory TCD 必须要修改的和 logical memory 的实现方式相匹配。

TCD 的修改包括:

① 添加 MemoryGroupAddressDecoding wrapper 用以说明 physical memories 如何激活;

② 添加 PhysicalToLogicalMapping wrappers 用以说明 physical memories 如何连接到 logical memory 的 ports。


示例:

具有 4 个 physical memories 的 logical memory LM_1 的结构如下图所示。logical memory 的大小是 32 words(每个 word 是 8 bit),它接收和驱动 Shared Bus interface 上的 8bit 数据通道。

在这里插入图片描述

在 logical memory TCD 中, data input、data output、address port 和 address segmentation 的定义如下:

在这里插入图片描述

physical memories 以 2x2 堆叠的方式进行实例化,每组 physical memories 的两个 4bit 数据端口构成了 LM_0 的 8bit data path。

Logical Memoory 的地址 A[4] 用于选择位于上方还是下方的 memories pairs,A[3:0] 则控制 physical memories 的 address inputs。

假定 logical memory 的 clk 和控制信号给到了所有的 physical memories,当 A[4] 为 0 的时候,MSB_lower 和 LSB_lower 两个 (physical) memory 使能,这两个 memory 同时被测试;当 A[4] 为 1 的时候 MSB_upper 和 LSB_upper 同时被选中然后进行测试。

MemoryGroupAddressDecoding Wrapper 用于指定激活 physical memory 的 address signal。

在这里插入图片描述


【这个 wrapper 的名称很直接的说明了它的功能。多个 physical memories 按照一定的方式构成了 logical memroy,从 logical memroy 的外部来看,它有一个很普通的 address port (A[4:0] ) 用于 32 个地址的选择。但是 logical memroy 并不是真实存在的,从它的内部来看,它是由多个真实的 physical memory 拼起来的,那么这个 A[4:0] 中的一部分就要用来选择具体访问哪一个 memory,另一部分用来选择选定 memory 中存储的数据】

【group 可以理解为这些 physical memory 要同时选中。比如上述示例中,4bit 的 physical memory 构成 8bit logical memroy 的时候,logical memroy 每一个地址肯定是要同时选中两个 physical memory 的】


PhysicalToLogicalMapping wrapper 将 physical memory 的 data、address and group write enable port 和 之间的关系。

假定 clock 和 其他控制信号(如读写使能信号等)被连接到所有的 physical memories。

如果 physical memory port 和 logical memory port 的功能相同的时候,工具会隐含的将两者映射。

在这里插入图片描述
在这里插入图片描述

补充:这里 MemoryTemplate 是 memory tcd library file 中的定义。

在这里插入图片描述


Pseudo-Vertical Stacking of Physical Memory

pseudo-vertical stacking 指的是将一个 W x D 的 physical memory 映射成一个 (n*W) x (D/n) 的 logical memory。

在这里插入图片描述

如下图所示,logical memory LM_64x8 中只有一个 32x16 的 physical memory,physical memory 的 lower data bits 用作 logical memory 的 lower bank,higher data bits 则用作 upper bank。

在这里插入图片描述

该 logical memory 对应的 TCD 文件如下所示:

Port(A[5:0]) {
	Function : Address;
	Direction : Input;
}
Port(D[7:0]) {
	Function : Data;
 	Direction : Input;
}
Port(Q[7:0]) {
 	Function : Data;
 	Direction : Output;
}
MemoryGroupAddressDecoding (Address[5]) {
	Code(1'b0) : MEM_LSB;
	Code(1'b1) : MEM_MSB;
}
AddressCounter {
	Function(ColumnAddress) {
		LogicalAddressMap {
		 	ColumnAddress[0] : Address[0];
		 	ColumnAddress[1] : Address[1];
		 	ColumnAddress[2] : Address[5];
		}
		CountRange [0:7];
	}
 	Function(RowAddress) {
 		LogicalAddressMap {
 			RowAddress[0] : Address[2];
 			RowAddress[1] : Address[3];
 			RowAddress[2] : Address[4];
 		}
 		CountRange [0:7];
 	}
}
PhysicalToLogicalMapping(MEM_LSB) {
 	MemoryTemplate : SYNC_1RW_32x16_RC_BISR;
 	MemoryInstanceName : PM_32x16;
 	PinMappings {
 		PhysicalMemoryDataInput[7:0] : LogicalMemoryDataInput[7:0];
 		PhysicalMemoryDataOutput[7:0] : LogicalMemoryDataOutput[7:0];
 		PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
	}
}
PhysicalToLogicalMapping(MEM_MSB) {
 	MemoryTemplate : SYNC_1RW_32x16_RC_BISR;
 	MemoryInstanceName : PM_32x16;
 	PinMappings {
 		PhysicalMemoryDataInput[15:8] : LogicalMemoryDataInput[7:0];
 		PhysicalMemoryDataOutput[15:8] : LogicalMemoryDataOutput[7:0];
		PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
	}
}

① Logical memory 地址信号中的 A[5] 将 physical memory data path 分割为两部分,剩下的 A[4:0] 则是 physical memory 的地址输入。

MemoryGroupAddressDecoding wrapper 中的通过定义 selection code 来激活特定的 physical memory data path split;

② PhysicalToLogicalMapping wrapper 则是描述 physical memory 和 logical memory 的端口之间的映射关系。在每一个 logical memory TCD 中,通过使用多个 PhysicalToLogicalMapping wrappers 来描述 physical memory 的 pseudo-vertical stacking,每一个 PhysicalToLogicalMapping wrappers 的 MemoryInstanceName 都使用相同的 physical memory instance。

③ 如果 physical memories 带有冗余,还需要指定 hierarchical instance path,使工具能在插入 BISR 和 BIRA 电路。


Example Logical Memory With Multiple Pseudo-Vertical Stacked Physical Memories


如下图所示,两个 32x16 的 physical memories 构成了 logical memory LM_128x8。

在这里插入图片描述

其对应的 TCD 文件如下所示:

MemoryTemplate(LM_128x8) {
	Algorithm : SMarchChkbCil;
	OperationSet : SyncWR;
	Port(A[6:0]) {
		Function : Address;
		Direction : Input;
	}
 	Port(D[7:0]) {
 		Function : Data;
 		Direction : Input;
 	}
 	Port(Q[7:0]) {
 		Function : Data;
 		Direction : Output;
	}
	AddressCounter {
	 	Function(ColumnAddress) {
	 		LogicalAddressMap {
	 			ColumnAddress[0] : Address[0];
	 			ColumnAddress[1] : Address[1];
	 		}
	 		CountRange [0:3];
		}
	 	Function(RowAddress) {
	 		LogicalAddressMap {
	 			RowAddress[0] : Address[2];
	 			RowAddress[1] : Address[3];
		 		RowAddress[2] : Address[4];
	 			RowAddress[3] : Address[5];
	 			RowAddress[4] : Address[6];
	 		}
	 		CountRange [0:31];
	 	}
	}
	MemoryGroupAddressDecoding (Address[6:5]) {
	 	Code(2'b00) : MEM_LSB0;
	 	Code(2'b01) : MEM_MSB0;
		Code(2'b10) : MEM_LSB1;
		Code(2'b11) : MEM_MSB1; 
	}
	PhysicalToLogicalMapping(MEM_LSB0) {
		MemoryTemplate : SYNC_1RW_32x16;
		MemoryInstanceName : PM_32x16_0;
		PinMappings {
			PhysicalMemoryDataInput[7:0] : LogicalMemoryDataInput[7:0];
			PhysicalMemoryDataOutput[7:0] : LogicalMemoryDataOutput[7:0];
			PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
		}
	}
	PhysicalToLogicalMapping(MEM_MSB0) {
 		MemoryTemplate : SYNC_1RW_32x16;
 		MemoryInstanceName : PM_32x16_0;
 		PinMappings {
 			PhysicalMemoryDataInput[15:8] : LogicalMemoryDataInput[7:0];
 			PhysicalMemoryDataOutput[15:8] : LogicalMemoryDataOutput[7:0];
 			PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
 		}
 	}
 	PhysicalToLogicalMapping(MEM_LSB1) {
 		MemoryTemplate : SYNC_1RW_32x16;
 		MemoryInstanceName : PM_32x16_1;
 		PinMappings {
 			PhysicalMemoryDataInput[7:0] : LogicalMemoryDataInput[7:0];
 			PhysicalMemoryDataOutput[7:0] : LogicalMemoryDataOutput[7:0];
 			PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
 		}
 	}
 	PhysicalToLogicalMapping(MEM_MSB1) {
 		MemoryTemplate : SYNC_1RW_32x16;
 		MemoryInstanceName : PM_32x16_1;
 		PinMappings {
 			PhysicalMemoryDataInput[15:8] : LogicalMemoryDataInput[7:0];
 			PhysicalMemoryDataOutput[15:8] : LogicalMemoryDataOutput[7:0];
 			PhysicalMemoryAddress[4:0] : LogicalMemoryAddress[4:0];
 		}
 	}
} 

① Logical memory address 的 A[6] 用来选择两个不同的 physical memory,A[5] 则是用来选择每一个 physical memory 具体的 data path,MemoryGroupAddressDecoding wrapper 中指明了这两个地址信号的作用;

② 在 logical memory TCD 中,通过指定多个 PhysicalToLogicalMapping wrappers 来描述多个 physical memories 的 pseudo-vertical stacking;


Physical Memory Tessent Core Description

  • 和每一个 physical memory 相关联
  • 在标准的 Tessent MemoryBIST flow 也会使用
  • 如果是使用 memory compiler 生成的,不需要对其进行修改

physical memory library file 和普通的 memory BIST 使用的 standard memory library file 是一样的,这里就不具体介绍。


Examples


LV lib 的具体示例。

示例1:Physical Memory TCD

design 中一个真实存在的 memory:

123

其对应的 TCD 描述如下所示,两者对 port 的描述是完全一样的。

在这里插入图片描述

示例2:Logical Memory TCD

Logical Memory 的结构:两个 32x4 的 physical memory 构成了 一个 32x8 的 logical memory。

在这里插入图片描述

对应的 TCD 文件:

MemoryTemplate(LM_32x8) {			// Declare logical MemoryTemplate for LM_32x8.
	Algorithm: SMarchCHKBcil;		// Define default Algorithm and OperationSet
	OperationSet: SyncWR;
	
	// Logical Memory Ports,each port has a Prot wrapper.
	Port(A[4:0]) {
		Function: Address;
		Direction: Input;
	}
	Port(D[7:0]) {
		Function: Data;
		Direction: Input;
	}
	Port(Q[7:0]) {
		Function: Data;
		Direction: Output;
	}
	Port(RE) {
		Function: ReadEnable;
		Direction: Input;
	}
	Port(WE) {
		Function: WriteEnable;
		Direction: Input;
	}

	// memory BIST controller generates the address counting sequence based on 
	// the address mappings provided in this AddressCounter wrapper
	AddressCounter {
		Function(ColumnAddress) {
			LogicalAddressMap {
				ColumnAddress[0]: Address[0];
				ColumnAddress[1]: Address[1];
			}
			CountRange [0:3];
		}
		Function(RowAddress) {
			LogicalAddressMap {
				RowAddress[0]: Address[2];
				RowAddress[1]: Address[3];
				RowAddress[2]: Address[4];
			}
			CountRange [0:7];
		}
	}

	// Specifies the MSB of the address port (A[4:0]) to select a logical memory
	// In this example, 2 physical memories are used to extend the IO, so both are listed for each code option.
	MemoryGroupAddressDecoding(Address[4]){
		code(1'b1): MEM_0, MEM_1;
		code(1'b0): MEM_0, MEM_1;
	}

	// specify the pin mappings between the physical memories and the logical memory.
	// Every physical memory has its own PhysicalToLogicalMapping wrapper.
	// two physical memories (SYNC_1RW_32x4) to form one logical memory with a size of 32x8 
	PhysicalToLogicalMapping(MEM_0) {
		MemoryTemplate: SYNC_1RW_32x4;
		PinMappings {
			PhysicalMemoryDataInput[3:0]: LogicalMemoryDataInput[3:0];
			PhysicalMemoryDataOutput[3:0]: LogicalMemoryDataOutput[3:0];
			PhysicalMemoryAddress[4:0]: LogicalMemoryAddress[4:0];
		}
	} 
	PhysicalToLogicalMapping(MEM_1) { 
		MemoryTemplate: SYNC_1RW_32x4;
		PinMappings {
			PhysicalMemoryDataInput[3:0]: LogicalMemoryDataInput[7:4];
			PhysicalMemoryDataOutput[3:0]: LogicalMemoryDataOutput[7:4];
			PhysicalMemoryAddress[4:0]: LogicalMemoryAddress[4:0];
		}
	}
	
	// Because all logical memory address bits are used by both physical memories, 
	// the MemoryGroupAddressDecoding wrapper is not needed, 
	// and all physical memories are assumed to be enabled when the logical memory is selected.
	
} 

示例3:Memeory Cluster TCDs

Memory Cluster 的结构如下:

在这里插入图片描述

对应的 TCD 文件如下:

MemoryClusterTemplate(CLUSTER) {	// Declare memory cluster library file for module CLUSTER. 
									// The name specified in the parenthesis must correspond to 
									// the actual memory cluster module name.
	
	// Declares that the memory cluster module will not have logic test implemented.
	InternalScanLogic: Off;
	
	// Declare clk port. This port is common to all interfaces. 
	// Global signals such as scan test mode and reset should also be defined here with SafeValue settings.
	Port(clk) {
		Function: clock;
		Direction: Input;
	}
	
	// Declare shared bus interface wrapper for SB1
	MemoryBistInterface(SB1){
		// Declare the ports that are used by the SB1 shared bus interface.
		// The ports defined in this wrapper can later be used inside the LogicalMemoryToInterfaceMapping wrapper.
		Port(SB1_A[5:0]) {
			Function: Address;
		}
		Port(SB1_DI[15:0]) {
			Function: Data;
			Direction: Input;
		}
		Port(SB1_DO[15:0]) {
			Function: Data;
			Direction: Output;
		}
		Port(SB1_RE) {
			Function: ReadEnable;
			Direction: Input;
		}
		Port(SB1_WE) {
			Function: WriteEnable;
			Direction: Input;
		}
		Port(SB1_SEL[2:0]) {
			Function: MemoryGroupAddress;
			Direction: Input;
		}
		Port(nrst) {
			Function: InterfaceReset;
			Direction: Input;
		}
		// The specified code values correspond to the values that must be applied on the SB1_SEL port 
		// (with MemoryGroupAddress port function) to enable the corresponding logical memories. 
		MemoryGroupAddressDecoding(GroupAddress){
			code(3'b001): LM_0;
			code(3'b010): LM_1;
			code(3'b011): LM_2;
			code(3'b100): LM_3;
		}
		// Specify pin mappings for logical memory LM_0.
		LogicalMemoryToInterfaceMapping(LM_0) {
			MemoryTemplate: LM_32x8;	// A logical memory template named LM_32x8 must be provided
			PipelineDepth: 9;
			// Specify pin mapping between logical memory LM_0 and SB1 interface ports.
			PinMappings {
				LogicalMemoryDataInput[7:0]: InterfaceDataInput[8:1];
				LogicalMemoryDataOutput[7:0]: InterfaceDataOutput[8:1]; 
				LogicalMemoryAddress[4:0]: InterfaceAddress[4:0];
			}
		}
	}
}

Descriptions:

  1. 每一个 logical memory 都要有一个 LogicalMemoryToInterfaceMapping Wrapper,该示例中并没有给完整。
  2. PipelineDepth: 9 : This assumes that the data round trip to/from the memory BIST controller is 10 clock cycles because the memory itself always adds a delay of one clock cycle.

Shared Bus Learning


在 Tessent MemoryBIST 中,连接到 shared bus interface 的 memories 的结构和访问机制必须使用 TCD 格式的文件进行描述。 memory cluster core 对应的 TCDs 格式的库文件的创建和验证通常是手动进行的,但是其中的部分内部是可以使用 shared bus learning flow 实现自动化。

shared bus learning flow 的整体流程如下,推荐在 DFT insertion 之前, 为每个 shared bus memory cluster core 单独进行该流程。

在这里插入图片描述

  • Setp1:生成 memory cluster core RTL,将其在 design 中实例化,并创建 memory cluster 和 logical memory TCD。

    memory cluster 和 logical memory TCD 通常是手动创建的,但是对于 commercial cores,如果 IP provider 提供了 MBIST Information File (MBIF) ,那么可以使用 memlibGenerate utility 自动生成 TCD 文件。

    MBIF 描述了如何通过 shared bus interface 访问 memory。

  • Step2&3:完成 physical RAM integration。

    在该过程中,选择并实例化 physical memories 到 logical memory 中。

  • Step4:在 RAM integration 完成之后,更新 TCD 文件,使其和 physical memory 的实现方式相匹配。

    使用 set_memory_cluster_library_generation_options 命令可以自动进行该过程。

  • Step5:使用 tracing-based validation 来验证 memory cluster 和 logical memory TCD。

    使用 set_memory_cluster_validation_options 命令可以自动进行该过程。

  • Step6:在包含正常 memory cluster core 的 design 中,执行常规的 dft flow。

    shared bus learning 过程中使用的文件和 data processing flow 如下图所示:

在这里插入图片描述


Physical-to-Logical (P2L) Mapping Automation


在 RAM integration 的过程中,任何可用的 physical memory 都可以构成 logical memory 的 address space,一个 logical memory 可以有多个 physical memories。

如下图,logical memory LM_2 只有一个 physical memory,但是 logical memory LM_1 有两个水平堆叠的 physical memory。

LM_1 中的两个 physical memory 同时使能,它们的数据端口功能构成了 LM_1 的 data path。

在这里插入图片描述

在将 physical memories 添加到 cluster core RTL 之后,logical memory TCD 必须能够表明 physical memories 在 memory BIST 过程中是如何激活的。

logical memory TCD 必须反应 physical memories 和 logical memory 端口之间的连接关系,下述两个 wrapper 就是用于实现该目的。

  • MemoryGroupAddressDecoding wrapper —— This wrapper specifies the address signals used to activate the physical memories and defines the selection codes. It is needed when a vertical stacking configuration is present.
  • PhysicalToLogicalMapping wrapper —— This wrapper associates the data, address, and group write enable ports of the physical memory to the ports of the logical memory.

set_memory_cluster_library_generation_options 命令能够自动创建这些 wrappers。该命令能够提取 physical memories 和 logical memory 之间的映射关系,并将其更新到 logical memory TCD 中。


【MemoryGroupAddressDecoding wrapper 为什么是垂直堆叠的时候需要呢?】

如下图所示,水平堆叠相当于是拓展每个地址对应的 bit 数,垂直堆叠相当于是拓展地址空间的数量。对于水平堆叠的情况,一个地址信号可以同时选中两个 mem 中数据,直接将其输出就可以得到 bit 数拓展之后的数据。但是对于垂直堆叠的情况,上下两个 mem 存在相同的地址,这个时候需要一个选择信号来决定获取的具体是哪一个 mem 中的数据。

对于下图所示的情况,A[4] 就是 select signal,MSB_upper 和 LSB_upper 构成了一个 memgroup,MSB_lower 和 LSB_lower 构成了另一个 memgroup。A[4:0] 可以分为两部分,一部分用来选择 memory group,另一部分用来作为原本的选址信号。

在这里插入图片描述


Implementing the P2L Mapping Flow

------------------------------------------------------

使用 set_memory_cluster_library_generation_options 命令可以自动 map memory cluster core ,具体过程如下所述。该过程会更新 logical memory TCD files,使其包含描述 logical memory 内部的 physical memory 配置情况的 MemoryGroupAddressDecoding 和 PhysicalToLogicalMapping wrappers。

Prerequisites

  • Design that contains only the memory cluster core and its physical memories
  • Memory cluster TCD
  • Logical memory TCD without P2L information
  • Physical memory TCD

Procedure

  1. Load the design and memory libraries

    design 中包含一个 memory cluster core 和 physical memories,以及相对应的 TCD 文件。

    set_context dft –rtl
    
    # Load the library for the technology cells
    read_cell_library ../tech_cells.lib
    
    # Search paths for memory TCD files
    # They may be read in explicitly using read_core_descriptions
    set_design_sources –format tcd_memory –y MEM –extensions {lib lvlib}
    
    # Search paths for design files
    # They may be read in explicitly using read_verilog
    set_design_sources –format verilog –y RTL –extensions {v vb}
    
    # Load the top-level design
    read_verilog RTL/WIRELESS_CORE.vb	
    
  2. Design elaboration and setup

    The full design is elaborated and the tool is configured for memory test,包括 memory cluster 的分析。

    set_current_design WIRELESS_CORE
    
    # Define the clock reaching the core
    add_clocks clk –period 12ns
    
    # Enable analysis for memory test
    set_design_level sub_block
    set_dft_specification_requirements –memory_test on
    
  3. Enable the P2L mapping

    在 setup mode 下,使用 set_memory_cluster_library_generation_options 命令进行 P2L maping。

    set_memory_cluster_library_generation_options \ 
     -generate_physical_to_logical_info
    
    // Warning: The default memory cluster initialization file for
    // cluster libraries generation was created.
    
    // Edit this file manually if the default initialization sequence 
    // needs to be modified.
    

    该命令会创建一个 memory cluster initialization file。该文件是一个 tessent dofile 文件,工具会在 next circuit analysis 阶段使用它来配置 memory cluster 进入 MemoryBIST mode。

    该初始化文件保存在当前工作目录下,其名称为:

    WIRELESS_CORE_rtl.memory_cluster_mbist_mode_init
    

    WIRELESS_CORE 是 current design 的名称。

  4. Generate the P2L mapping

    circuit analysis 和 physical-to-logical mapping 发生在 system mode 从 setup 转换为 transition 的过程,如下所示。

    在这里插入图片描述

    circuit analysis 是基于 flat design model 进行,flat design model 是工具内部对 hierarchical design 的扁平化表示。

    The memory cluster initialization file is sourced to condition the memory cluster core RTL for memory test

    通过 trace flat model,工具尝试确定 physical memory instances 的位置,以及确定 logical memory 内部的堆叠方式。

Results

提取成功之后,P2L mappings 会被写入到 Tessent Shell 内部的 logical memory TCD。默认情况下,完整的 logical memory TCD 会被写入到当前工作目录下的 memory_tcd_outdir 文件夹中。输出文件的名称和原始的 logical memory TCD 文件的名称是一致的。

最后是需要检查新增加的 PhysicalToLogicalMapping wrappers 的正确性的。如果原始文件中的包含的一些配置数据没有被保留,必须从原始文件中将其找回。


Library Validation


shared bus memory cluster library validation 是使用 tracing-based 的方法,通过和从 learned memory cluster structure 中收集的数据进行对比,来验证 memory cluster TCD 和 logical library TCDs 中内容。

Trace-based 验证方法是对 dft flow 中的 library validation 的拓展,重点关注的是 memory TCDs 文件的语义一致性。

Shared bus memory cluster library validation 具有如下功能:

  • Validation that no memory is missing memory BIST, including instances that are determined to be physical memories connected to a shared bus interface, but are not accessible using the selection codes specified in the memory cluster TCD.

  • Validation of the mappings specified in the LogicalMemoryToInterfaceMapping and PhysicalToLogicalMapping wrappers. This includes the following paths:

    DataInput、DataOutput、Address、ReadAddress、WriteAddress、GroupWriteEnable

  • Validation of the PipelineDepth property

Validation 是基于用户提供的 matching expressions 进行的,也就是说,你必须使用通配符或者正则表达式指定一个 pattern,从而能够使工具在验证开始之前识别 physical memory modules。

下述内容描述了如何使用set_memory_cluster_validation_options命令进行验证。


Implementing the Library Validation Flow

使用 set_memory_cluster_validation_options 命令,通过和 memory cluster core RTL 中内容进行对比,实现对 TCDs(memory cluster TCD, logical memory TCDs and physical memory TCDs)进行 trace-based validation。

Prerequisites

  • Design that contains only the memory cluster core and its physical memories
  • Memory cluster TCD
  • Logical memory TCDs with P2L information
  • Physical memory TCDs

Procedure

  1. Load the design and memory libraries

  2. Design elaboration and setup

  3. Enable the memory cluster TCD and logical memory TCD validation

    set_memory_cluster_validation_options {SYNC.* RAM.*} –regexp
    // Warning: The default memory cluster initialization file for
    // cluster libraries validation was created.
    // Edit this file manually if the default initialization sequence
    // needs to be modified.
    
     `set_memory_cluster_validation_options` 也会在当前工作目录下生成 memory cluster 初始化文件。
    
  4. Validate the memory cluster TCD and logical memory TCD

    The circuit analysis and validation occurs during the transition from system mode setup to system mode analysis.

    在这里插入图片描述

    The circuit analysis is based on the flat design model, which is an internal, flattened representation of the hierarchical design

    Memory cluster initialization file 在该阶段会被读取,用于 memory cluster core RTL 的 memory test,工具会使用每一个 logical memory 的 selection code。基于 flat model 进行 tracing,工具会尝试确定 physical memory instances 的位置,并确定 logical memory 中的 stacking configuration。


Memory Cluster TCD Validation at the Logical Level

通常情况下,set_memory_cluster_validation_options 是用于 shared bus learning flow,在 RAM integration 之后,对最终得到的 memory cluster TCD 和 logical memory TCD 进行验证。

该命令也可以用于只在 logical level 进行验证。

logical level 的验证需要定义 design 中的 logical memories。Logical memories 应当被看作是 memory modules,使用 memory cluster TCD 中的唯一 selection codes 进行激活。

清晰的 logical memory boundaries 在 design 中可能存在也可能不存在,因此在对 RTL 进行 RAM integration 之前,generic (behavioral) RAMs 应该被实例化并且作为 logical memories 进行考虑。

memory cluster TCD 中的每一个 selection code 都将会激活一个 generic RAM。

如果 logical memory 没有清晰的 boundaries,Logical-level validation 将会失败,因为同一个 parent instance 会有多个 generic RAMs 实例,它们需要被同时选中。


Enabling MemoryBIST Mode for a Cluster


Circuit tracing 是基于 flat design model (an internal, flattened representation of the hierarchical design)进行的, memory cluster 必须被配置为 MemoryBIST mode ,然后才能对电路进行 memory test 相关的分析。

因此,必须给 Tessent MemoryBIST 提供 MemoryBIST mode 的 entry sequence。

initialization sequence 的创建和定制方法如下所述。

Memory Cluster Initialization File Generation

在 P2L Mapping 的 flow 中,工具会自动生成一个 dofile,其中包含了默认的 memory cluster initialization sequence,在基于 flat model 的 simulation context 中会用到。

默认的 initialization sequence 假定一个 generic protocol,并对下述定义在 memory cluster TCD 中的 shared bus interface 的 inputs 进行约束。

  • Port function InterfaceReset —— defines the Shared Bus Interface Reset port(s)
  • Port function BistOn —— defines the Shared Bus Interface Request port(s)
  • Port function ConfigurationData —— defines the Shared Bus Interface Configuration Data port(s)

一个 initialization sequence 的示例如下所示。interface 上的 reset 和 request 端口被设置为其对应的 active values。20个 clock cycles 之后,interface reset 置于 deactivated ,然后持续 50 个 clock cycles。

# Cluster module: CLUSTER

# Enable active-low interface reset port
add_simulation_forces [get_ports nrst] -value 0;

# Enable active-high interface request port
add_simulation_forces \
 [get_pins MbistOn1 \
 -of_instances [get_instances \
 -of_modules [get_modules CLUSTER -use_module_matching_options]]] \
 -value 1;

# Apply 20 system clock cycles
simulate_clock_pulses [get_clocks] -repetitions 20;

# Release interface reset port
add_simulation_forces [get_ports nrst] -value 1;

# Apply 50 system clock cycles
simulate_clock_pulses [get_clocks] -repetitions 50;

如果 IP 供应商提供了electronic file (应该是mbif),memlibGenerate utility 能够自动将 reset、request 和 configuration data ports 写入到 memory cluster TCD 。

mbif 中可能还会定义一些额外的输入,它们在 memory test mode 中必须被 assert。如果 memory cluster TCD 是自动创建的,默认的 memory cluster initialization file 也会对这些信号进行正确的约束。

memlibGenerate utility 假设 Shared Bus Interface reset 是低电平有效。

Memory Cluster Initialization File Modification

set_memory_cluster_library_generation_options 命令创建的默认初始化文件可能是不完整的,根据 core IP 提供的文件,相应的 protocol 可能需要进一步修改。

此外,当 memory cluster TCD 是手动生成的时候,部分用于进入 MBIST mode 或者 initialize/reset cluster module 的 input ports 可能会被忽略,这些 ports 也是需要驱动的。

如前所述,该初始化文件在 check_design_rules 命令执行的时候被使用,在此之前的所有手动修改都可以应用到工具中。

初始文件保存在当前工作目录下,其名称为:

<design_name>_<insertion_id>.memory_cluster_mbist_mode_init

check_design_rules 命令会自动应用初始化文件,该文件中其中包含了 design 中每一个 Shared Bus cluster module 的 initialization sequence。

每一个 sequence 以 cluster module name 为开始,它可以初始化属于特定 cluster module 的所有 Shared Bus interfaces。

在对 cluster initialization file 进行给修改的时候,要使用 design introspection 命令,例如 get_pins, get_ports 等,而不是直接指定 pin/ports 的 hierarchical paths。

这是因为 quick-synthesis 会被当作 cluster validation procedure 的一部分执行,在该 flow 中,一些 post-synthesis names 可能会发生改变。

get_modules -use_module_matching_options 命令可以解决 modules 名称一致的问题。

如果添加到 initialization file 中的信号不是 primary inputs 或者 cluster module 自身,它们将不会被自动保存在 flat design model 中。此时,工具会给处 error ,告诉你 pin 在 flat model 中不存在。

在 default initialization file 生成之后,check_design_rules 命令执行之前,必须执行如下命令:

set_attribute_value pin_port_name -name preserve_in_flat -value "yes"

Memory Cluster Initialization File Debugging

在 analysis 过程中,如果没有成功进入 MemoryBIST mode ,可能的原因如下:

  • MemoryBIST acknowledge signal error (the signal being “X” or an inactive state) might be reported by the tool if your IP defines one.
  • No physical memory may be accessible from the Shared Bus Interface.
  • All physical memories are accessible, regardless of the selection values specified using the Shared Bus Interface.

通常情况下,IP 的 Shared Bus Interface 上会有 MBIST acknowledge signal。在check_design_rules 执行的时候,initialization sequence 施加之后,Tessent MemoryBIST 会检查它的值。

如果 MBIST acknowledge signal 是 X 或者是 inactive 状态,不会进入 MemoryBIST mode,并且工具会 report 一个 error message。该 error message 中会包含启动Tessent Visualizer 和展示 tracing path 的命令。所展示的路径是从 InterfaceReset port 到 MBIST acknowledge port 的路径。当前 simulation context 下,对应的仿真值也会展示。

在这里插入图片描述

【从这里看,mbistack 端口似乎是一个输出端口?】

initialization sequence 可以使用下述方式进行交互式的 debug:

  1. Adding a new simulation context (refer to the add_simulation_context command).
  2. Sourcing the modified initialization file from your working directory.
  3. Observing the influence of the modified sequence on the MBIST acknowledge signal in Tessent Visualizer.

Tessent MemoryBIST 报告 MBIST acknowledge signal error 的时候,使用如下方法进行调试可能会有所帮助。

  1. 检查 memory cluster initialization file 的完整性,通常需要检查如下信号是否被正确约束:

    (1) A pin/port with Port Function BistOn — Enables MemoryBIST mode and disables some functional logic.

    (2) A pin/port with Port Function InterfaceReset — Specifies the signal that is used to reset the Shared Bus Interface.

    (3) A pin/port with Port Function ConfigurationData — Specifies the signal that is used to configure access to the logical memories.

    (4) Other signals that are documented by your IP provider that must maintain the same state through all MemoryBIST testing.

    如果这些信号没有被 initialization sequence 约束,需要查看 IP 的相关文档,确定其所需要的 initialization sequence。

  2. 如果 initialization sequence 包含了所有需要的信号,可以使用 Tessent Visualizer 来寻找 MBIST acknowledge signal 为 X 值或者 inactive 值的源头。

  3. 检查是否有额外的逻辑(不是原始 IP 中的内容)连接到了 memory cluster。这些逻辑也可能需要在 memory cluster initialization file 中进行约束。

    为了测试是否存在这种情况,可以在 Shared Bus Learning disabled 的请款下执行 check_desing_rules 命令。如果 check_desing_rules 报告出任何 memory clock tracing 相关的 blocking conditions,那么这些 blocking conditions 在进行 Shared Bus Learning 的时候也会出现。

    这些额外的 blocking conditions 需要通过在 memory cluster initialization file 中添加正确的约束来解决。


Shared Bus Learning Assumptions and Limitations



Design Loading


和标准的 standard memory BIST flow 一样,第一步也是加载设计,具体包括 setting the correct context、reading libraries、reading the design 和 elaborating the design。

为了使用 Shared Bus feature 的特性,必须要加载 MemoryCluster、logical and physical memory core library files。

示例:
在这里插入图片描述


Specify and Verify DFT Requirements


和标准的 mbist 一样,使用 set_dft_specification_requirements 命令指定 DFT 需求,一是告诉工具执行特定的 DRC 检查(mbist 相关),二是告诉 create_dft_specification 在生成 dftspecification 的时候包含 MemoryBist 或 MemoryBisr wrappers。

Examples

最基本的需求设定命令如下所示:

在这里插入图片描述

使用上述命令之后,工具会在 DFTSpecification 中生成 Shared Bus 相关的 wrapper。

memory_access_level 是 DFTSpecification 中的 MemoryCluster wrapper 中的一个属性(property),它会对 memory bist controller 的配置产生影响。

【DftSpecification()MemoryBist/Controller()/MemoryCluster()/memory_access_level】

memory_access_level 的默认值是 auto,不同的值带来的影响如下所述。

  • logical

    memory BIST controller 工作在 logical memory level,这意味着会为 logical memory 创建一个 virtual memory(emulating a memory from the controller viewpoint)。

    logical memory 的 physical composition 是不考虑的(irrelevant)。

    构成 logical memory 的所有 physical memories 在一个步骤内完成测试。

    每一个 logical memory 都有一个 memory BIST interface。

    Notes:

    使用该选项的时候,logical memory TCD 文件中需要定义一个 RedundancyAnalysis wrapper。

  • physical

    memory BIST controller 工作在 physical memory level,每一个 physical memory 都会有一个 virtual memory,从而构成logical
    array。

    每一个 physical memory 都有它自己的 memory BIST interface 以及和e physical memory access code 相关的专用的 controller step。

    使用该选项时,如果 logical memory core library 中存在 RedundancyAnalysis wrapper,工具会 忽略其中的内容。

  • auto

    该选项用于平衡上述两个选项的优缺点。

    如果满足下述条件,工具会为 physical memories 生成 virtual memories,否则,工具为 logical memory 生成 virtual memory。

    (1) logical memory core library 中至少存在一个 PhysicalToLogicalMapping wrapper,它定义了 physical 和 logical memory ports 之间的关系;

    (2) logical memory 没有与之关联的 BIRA 逻辑,即 logical memory core library 中没有 RedundancyAnalysis wrapper。

Notes:

virtual memory,顾名思义,它是一个并非真实存在的 memory。

如下图所示,虚线框其实就当于是 virtual memory ,memory BIST Controller 访问的是虚线框(即 virtual memory)上的端口。从 design 本身的角度看,virtual memory 并不是一个真实的存储空间;但是从 memory BIST Controller 的视角来看,它访问的好像是一个真实的 memory。

在这里插入图片描述

在某种程度上,virtual memory 和 logical memory 之间是可以画上等号的。或者说 virtual memory = memory + 访问端口,这个memory 是 logical memory 或者 physical memory。


Create&Process DFT Specification


该步骤和 standard memory BIST flow 完全相同,都是使用 create_dft_specification 让工具自动生成 DftSpecification。

但是,工具自动生成的 DftSpecification 中会包含 Shared Bus 相关的内容。

一个含有单一 memory cluster module 实例的 design block 对应的 DftSpecification 内容如下图所示:

在这里插入图片描述

DftSpecification 生成之后,使用 report_memory_cluster_configuration 命令可以报告 cluster 的配置信息,具体内容如下图所示。

在这里插入图片描述

这个报告中包含的信息:

  1. 当前 cluster 中总共包含 4 个 logical memory(LM_#)、9个 physical memory(physical memory id)。
  2. 在测试的时候,会按照 Step 列给定的顺序对 memory 进行测试。

Process DFT Specification 过程也是和 standard memory BIST flow 中的完全一致,使用 process_dft_specification 让工具自动生成即可。


Extract ICL


该步骤也和 standard memory BIST flow 一样, extract_icl 命令寻找所有的 modules(Tessent instruments and non-Siemens EDA instruments)及其对应 ICL modules,为 current design 创建 ICL 并准备好进行 pattern generation。

【Create Patterns Specification 和 Process Patterns Specification 会使用到该步骤中为 current_design 生成的 ICL】


Create&Process Patterns Specification


基本方法和 standard memory BIST flow 也是一样的。

patterns specification 是一个 configuration file,用于告诉 process_patterns_specification 命令常见什么样的测试。可以对默认的 patterns specification 进行编辑或者配置,从而生成想要的 pattern。

使用 process_patterns_specification 为一个带有 memory cluster module instantiation 的 design block 生成 PatternsSpecification 的示例如下。

PatternsSpecification(CORE,rtl,signoff) { 
	Patterns(ICLNetwork) { 
		ICLNetworkVerify(CORE) { 
		} 
	} 
	Patterns(MemoryBist_P1) { 
		ProcedureStep(initialize_memory_cluster) { 
			iCall(CORE_rtl_tessent_mbist_c1_shared_bus_assembly_inst_CORE_rtl_tessent_mbist_c1_
			shared_bus_glue_logic_inst.initialize_memory_cluster) { 
			} 
		} 
		ClockPeriods { 
			clk : 1.25ns; 
		} 
		TestStep(run_time_prog) { 
			MemoryBist { 
				run_mode : run_time_prog; 
				reduced_address_count : on; 
				
				Controller(CORE_rtl_tessent_mbist_c1_shared_bus_assembly_inst_CORE_rtl_te
				ssent_mbist_c1_controller_inst) { 
					DiagnosisOptions { 
						compare_go : on; 
						compare_go_id : on; 
					} 
				} 
			} 
		} 
	} 
} 

默认情况下,memory BIST controller 在一个 TestStep 中测试 cluster module 中的所有 memories。memories 的测试顺序是 report_memory_cluster_configuration 给出 steps。

根据所选择的 memory access level,可以使用 PatternsSpecification 中的 freeze_step 属性对 logical 或 physical memories 单独进行测试。

如下示例,只对 first scheduled memory 进行测试。MemoryClusterOptions wrapper 中指定的 configuration_data 的值可以覆盖 memory cluster library 中的 LogicalMemoryToInterfaceMapping wrapper 中指定的默认 ConfigurationData value。

PatternsSpecification(CORE,rtl,signoff) { 
	Patterns(ICLNetwork) { 
		ICLNetworkVerify(CORE) { 
		} 
	} 
	Patterns(MemoryBist_P1) { 
		ProcedureStep(initialize_memory_cluster) { 
			iCall(CORE_rtl_tessent_mbist_c1_shared_bus_assembly_inst_CORE_rtl_tessent_mbist_c1_
			shared_bus_glue_logic_inst.initialize_memory_cluster) { 
			} 
		} 
		ClockPeriods { 
			clk : 1.25ns; 
		} 
		TestStep(run_time_prog) { 
			MemoryBist { 
				run_mode : run_time_prog; 
				reduced_address_count : on; 
				
				Controller(CORE_rtl_tessent_mbist_c1_shared_bus_assembly_inst_CORE_rtl_te
				ssent_mbist_c1_controller_inst) { 
					/
					// only the first scheduled memory is tested
					AdvancedOptions +{ 
						freeze_step : 0; 
						MemoryClusterOptions +{ 
							configuration_data(I1) : 2'b00; 
						} 
					} 
					/
					DiagnosisOptions { 
						compare_go : on; 
						compare_go_id : on; 
					} 
				} 
			} 
		} 
	} 
} 

process_patterns_specification 的时候,如果 Shared Bus memory cluster module 的 interface ports 使用了 InterfaceReset 或BistOn port functions,通常需要为 Shared Bus interface 创建一个 initialization sequence (iProc)。

Shared Bus memory cluster initialization sequence 使用 TDR bits 驱动, 在 memory BIST controller 启动之前执行。

initialization sequence 会在 PatternsSpecification/Patterns/ProcedureStep 中使用 icall 引用。

如果需要对 initialization sequence 进行修改,可以在如下位置找到:

tsdb_outdir/instruments/<design_name>_<design_id>_mbist.instrument/
<design_name>_<design_id>_tessent_mbist_<controller_id>_shared_bus_glue_logic.pdl

一个 initialization iProc 的示例如下所示,该示例中的 Shared Bus cluster module 具有 interface reset,但是没有 BIST enable(a port with a BistOn port function)。

iProcsForModule CORE_rtl_tessent_mbist_c1_shared_bus_glue_logic 
iProc initialize_memory_cluster {} { 
	 iWrite nrst_toCluster 0b1 
	 iApply 
	 iNote "Activating InterfaceReset port(s) of the cluster module CLUSTER via outputs of the glue logic module instance [get_icl_scope -iCall]" 
	 iWrite nrst_toCluster 0b0 
	 iApply 
	 iRunLoop 16 
	 iNote "Deactivating InterfaceReset port(s) of the cluster module CLUSTER via outputs of the glue logic module instance [get_icl_scope -iCall]" 
	 iWrite nrst_toCluster 0b1 
	 iApply 
	 iRunLoop 16 
} 

Run and Check Testbench Simulations、Test Logic Synthesis


和标准的 mbist 的流程是一样的。

# Run and Check Testbench Simulations
run_testbench_simulations 
check_testbench_simulations

# Test Logic Synthesis
run_synthesis

Limitations


使用 Tessent MemoryBIST 的 Shared Bus memory interfaces 会有一些限制:

  • Shared Bus interfaces cannot be driven in parallel by the same memory BIST controller, even if the Shared Bus interfaces are identical in terms of function.
  • Shared Bus memory cluster modules with logical memories that are accessed concurrently through the Shared Bus must meet one of the following criteria:
    • logical memory data inputs do not overlap on the data inputs of the cluster module interface.
    • logical memory data input connections use identical (fully overlap) data inputs of the cluster module interface.
  • When the memory access level is logical, PhysicalAddressMap and PhysicalDataMap in the physical memory libraries is not supported. The workaround is to manually code this information into the logical memory core library files.
  • Because the memory BIST circuits reside outside the Shared Bus memory cluster, any memory bypass or scan observation logic required for scan test must be integrated directly inside the Shared Bus memory cluster.
  • For hardware optimization reasons, only shared comparators are supported for Shared Bus memory clusters. The comparator circuit is instantiated in the memory BIST controller so that it can be shared among logical memories.
  • All memories within a Shared Bus memory cluster module must belong to the same power domain group.

Some Commands


Shared Bus MBIST Flow 中一些 Tessent Command。


set_memory_cluster_libbrary_generation_options


Configures the automation of Shared Bus physical to logical(P2L)mapping and logical memory TCD file generaiton.

Usage

在这里插入图片描述

Description

set_memory_cluster_libbrary_generation_options 命令能够自动实现 physical memory 和 logical memory 之间的映射,在 logical memory TCD 文件中增加 MemoryGroupAddressDecoding 和 PhysicalToLogicalMapping 两个 wrappers。

set_memory_cluster_libbrary_generation_options 命令的使用需要满足:(1) current design 中存在 cluster 和 memories;(2) memory cluster TCD;(3) physical memory TCDs;(4) 不包含 P2L 信息的 logical memory TCDs 。

该命令执行之后,工具会在当前目录下生成一个名称为 <design_name>_<design_id>.memory_cluster_mbist_mode_init 的 memory cluster 初始化文件。

正常情况下,该初始化文件不需要修改。当 check_design_rules 命令执行的的时候(具体是 P2L mapping 的提取和分析的时候),会自动 run 该文件。

默认情况下,所生成的 logical memory TCD 文件会保留其原始的名称,然后被保存到当前工作目录下的 memory_tcd_outdir 文件夹中。

Arguments

  • generate_physical_to_logical_info

    必要的选项,开启 P2L 的自动映射并生成 logical memory TCD 文件

  • -cluster_instance cluster_instances

    指定 P2L mapping 对应的 cluster instance。默认情况下,工具会对 design 中存在的所有 cluster module 进行 P2L mapping。

  • -init_file_name init_file_name

    指定 memory cluster initialization 文件的名称

  • -output_directory dir_path

    指定修改之后的 logica memory TCD 文件的保存位置。默认情况下,所生成的文件的后缀名和原始文件一样。

  • -original_location

    将修改之后的 logica memory TCD 文件保存到原始 logica memory TCD 文件所在的位置。

  • -output_file_extension extension

    指定修改之后的 logica memory TCD 文件的后缀名。使用 -original_location 将修改之后的文件保存到原始文件所在的位置的时候,可以使用该选项指定后缀名,以免覆盖原始文件。

  • -replace

    覆盖已有的文件。

Examples

假设原始文件的名称为 Logical.tcd

如果想要更改后缀名,

set_memory_cluster_libbrary_generation_options -generate_physical_to_logical_info -output_file_exension modifiled

更改之后的文件名为 : Logical.modifiled

如果想要追加后缀名,

set_memory_cluster_libbrary_generation_options -generate_physical_to_logical_info -output_file_exension tcd.modifiled

追加之后的文件名为:Logical.tcd.modified

命令本事是修改后缀名,如果想要追加,其实就是自己把原先的后缀名也写在上面。


set_memory_cluster_validation_options


Enable Shared Bus Memory cluster library validation.

Usage

在这里插入图片描述

Descriptions

set_memory_cluster_validation_options 命令针对当前设计中的 memory cluster,对 memory cluster TCD 和 logical memory TCDs 进行 tracing-based validation。

主要验证内容如下:

  • No memory is missing memory BIST coverage.
  • Mappings and connectivity specified in the LogicalToMemoryInterfaceMapping 和 PhysicalToLogicalMapping TCD wrappers are correct.
  • That the specified PipelineDepth property for the logical memories is correct.

使用 set_memory_cluster_validation_options 命令的时候,工具会在当前工作目录下创建一个 memory cluster initialization dofile,其名称为 <design_name>_<design_id>.memory_cluster_mbist_mode_init。

Arguments

  • name_patterns

    A required string or Tcl list strings that specifies one or more patterns the tools uses to identify memory module names.

  • regexp

    name_patterns 参数使用的是正则表达式,而不是简单的通配符。

  • logical_to_interface_only

    只对 memory cluster TCD 中的 LogicalToMemoryInterfaceMapping Wrappers 中描述的映射关系进行验证。

    该选项一般在验证的早期使用,例如,还没有将 physical RAM 集成到 design 的 Logical memory 的时候。

    在 2023 版的工具中,该选项为:logical_memory_to_interface_only

  • cluster_instances cluster_instances

    指定进行验证的 cluster_instances。默认情况下,工具会验证每个 cluster module 的一个实例。

  • -init_file_name init_file_name

    指定初始化文件的名称。

Examples

示例1

假设design 中存在如下 memory modules,并且它们连接到 Shared Bus Interface:

SYNC_1R1W_16x8、SYNC_1R1W_32x4、RAM_32x4、RAM_128x128

如果你想将其识别为 memory modules,可是使用下述命令进行匹配和验证:

set_memory_cluster_validation_options {SYNC.* RAM.*} -regexp

示例2:

假设 design 中存在如下连接到 Shared Bus Interface 的 logical memory modules:

LM_0、LM_1、LM_2、LM_3

在 logical level 对其进行验证的命令为:

set_memory_cluster_validation_options {LM.*} -regexp -logical_to_interface_only

每一个被当作是 logical memory 的 module 都需要在 memory cluster TCD 中有唯一的 selection code。

从这里看,使用该选项的时候,name_pattern 应该是 logical memory instances name。

在这里插入图片描述


set_quick_synthesis_options


Set options for quick synthesis.

Usage

在这里插入图片描述

Descriptions

check_design_rules、extract_icl 或者是切换到 analysis system mode 的时候,工具会执行快速综合。

Quick synthesis 创建新的 instance、port、pin 和 net 等新的设计对象来构建 RTL 的结构,然后对其进行分析。在 Quick synthesis 中创建的对象,其 created_by_synthesis 属性(attribute)会被设置为 true。

如果 RTL 是不可综合的,工具会给出一个 error 信息。但是,并不像其他的 error message 一样,启动 Quick synthesis 的真实命令并不会自动停止,因为工具不能预测相关的 synthesized 模块是后续 DRC 检查所需要的。

由于 hierarchical pre-traceing 的性质,traces 在这些 modules 停止的原因可能工具不能综合这些 modules。

Arguments

  • -Skip_synthesis_of_two_dimensional_arrays_larger_than {unlimited | integer}

    为 design 中的 memories 指定一个 bit-counter 阈值。如果总 bit 数大于指定的阈值,那么该 module 不会被编译,并且会被视为 block box。

    默认值是 4096 bit。

    该选项的目的是防止对加载到 Tessent Shell 中的 memory behavioral models 进行综合。

    如果 RTL 中有较大的 multi-dimensional arrays,并且你想要对其进行综合。可以将 add_black_boxes –module module 命令作用于所有的 behavioral memory models,并且增大该阈值一满足需求。明确的将 modules excludes 设置为 black-box 可以使其不被综合。

    此外,如果不想将其设置 block box,仅仅是不让其综合,可以将 memory modules 的 exclude_from_synthesis 设置为 true。

    在 quick synthesis 过程中,包含 multi-dimensional array 的 modules ,如果其总 bit 数超过阈值,那么它会被自动设置 block box,同时,同于还会给出一个类似下图所示的 warning:

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值