我们将首先查看的语句是XALU、YALU或ZALU。这两个语句用于生成用于测试内存设备的地址位。上面的块图显示了X或Y地址生成器的操作。用户有6个寄存器可用:
- XALU(X地址逻辑单元):用于生成X地址位,这些位用于访问内存设备中的特定行。
- YALU(Y地址逻辑单元):用于生成Y地址位,这些位用于访问内存设备中的特定列。
- ZALU(Z地址逻辑单元):用于生成Z地址位,这些位用于访问内存设备中的特定层(在三维内存结构中)。
这些ALU通常与寄存器结合使用,以控制地址的生成方式。用户可以配置这些寄存器来设置地址模式、步进大小、起始地址等。通过这些ALU和寄存器的组合,可以实现复杂的内存测试模式,以确保内存设备的正确性和性能
Main Main2 Base Base2 Field Field2
这种设计允许更灵活地生成地址,但同时也要求开发者在编写指令时注意寄存器的使用规则。通过分别控制这两组寄存器,可以为不同的测试阶段或内存区域指定不同的地址模式,但每个指令中只能选择其中一组来确保地址生成的一致性和逻辑的清晰。
对于X、Y和Z寄存器,最大大小是24位,而在任何给定时间点,Y和Z的总使用量最多不能超过40位。寄存器的实际大小是在进行设置时决定的。
numx()
和 numy
是用于定义X和Y地址寄存器的函数或指令。这些寄存器被用作ALU(算术逻辑单元)的A输入或B输入。ALU是一个简单的计算单元,能够对两个输入执行各种操作,如加法、减法、增量、减量、逻辑与、逻辑或等。
ALU操作的结果可以被写回到任何一个寄存器(main、base、field)中。在ALU操作完成后,选择其中一个寄存器作为输出到DUT(被测设备)。这个寄存器的内容将被发送到地址TOPO RAM,然后通过Pin Scramble机制进一步处理。
Pin Scramble是一种技术,用于重新排列内存设备的物理引脚输出,以匹配测试系统中的逻辑地址映射。这有助于确保测试系统能够正确地访问内存设备中的特定地址,即使物理引脚布局与逻辑地址映射不一致。
通过这种方式,numx()
和 numy
函数或指令与ALU操作一起,构成了一个强大的地址生成和测试机制,用于对内存设备进行全面的测试。
XALU 与YALU具有相同的电路,包含六个字段,下表是每个字段可能的值,以yalu为例
yalu sourceA, sourceB, carry/ borrow, function, destination, output
第一行的值为默认
|
|
|
|
|
|
xcare | xcare | coff | none | nodest | oymain |
counter | counter | con | increment | dymain | oybase |
auxa | auxa | cmeqmax | decrement | dybase | oyfield |
auxb | auxb | cbeqmax | add | dyfield | oymain2 |
ymain | ymain | cfeqmax | subtract | dymain2 | oybase2 |
ybase | ybase | cmeqmax | all1s | dybase2 | oyfield2 |
yfield | yfield | cbeqmin | zeros | dyfield2 | |
yudata | yudata | cfeqmin | comp | ||
ymain2 | ymain2 | cmnemax | double | ||
ybase2 | ybase2 | cbnemax | or | ||
yfield2 | yfield2 | cfnenex | nor | ||
cmnemin | and | ||||
cbnemin | nand | ||||
cfnemin | xor | ||||
xnor | |||||
aorbbar | |||||
anorbbar | |||||
aandbbar | |||||
anandbbar |
SourceA和SourceB
🔔 SourceA和SourceB是作为ALU(算术逻辑单元)输入的参数。这些参数指定了ALU进行操作所需要的输入值。
"xcare"是第一个参数。每当你看到这个参数,理解为"不关心"或"不在乎"。它与X地址位生成器无关。ALU执行的某些操作或函数可能不需要一个或两个源。当源不需要时,使用"xcare"参数。
"ymain"、"ybase"、"yfield"参数用于选择一个地址寄存器作为ALU的输入。这些参数对应于Y寄存器,指定了应该用于ALU操作的寄存器。
"yudata"参数用于选择"udata"字段(一个APG指令的特殊数字字段)。这个参数允许ALU操作特定的指令字段,以实现更复杂的操作。
总的来说,这些参数为ALU操作提供了所需的输入和控制,使得YALU能够灵活地对各种不同的寄存器和值进行处理,以执行各种算术和逻辑操作。
Carry/Borrow
🔔 在ALU执行增量或减量操作时,"Carry/Borrow"字段用于指定进位或借位。这些操作通常在执行加法或减法时使用,因为它们涉及到进位或借位的概念。
- 增量(Increment):当ALU执行增量操作时,它将源操作数A(SourceA)与进位位(Carry Bit)相加。这意味着,如果进位位为1,那么源操作数A将增加1;如果进位位为0,源操作数A将保持不变。增量操作通常用于计数器或指针的递增。
- 减量(Decrement):当ALU执行减量操作时,它从源操作数A中减去借位位(Borrow Bit)。这意味着,如果借位位为1,那么源操作数A将减少1;如果借位位为0,源操作数A将保持不变。减量操作通常用于计数器或指针的递减。
进位位和借位位在多字节算术运算中尤为重要,因为它们允许操作跨越字节边界。例如,在执行多字节加法时,如果一个字节的加法结果产生了进位,这个进位需要被传递到下一个更高字节的操作中。同样,在执行多字节减法时,如果一个字节的减法操作需要借位,这个借位也需要被传递到下一个更高字节的操作中。
通过使用"Carry/Borrow"字段,ALU能够处理更复杂的算术操作,并确保在执行这些操作时正确处理进位和借位。这提高了ALU在处理多字节数据时的灵活性和准确性。
Function
增量(Increment):将源A(SourceA)与进位位相加。这意味着将源A的值增加1,并考虑任何可能的进位。
减量(Decrement):将源A减去借位位。这相当于将源A的值减少1,并考虑任何可能的借位。
加法(Add):将源A与源B(SourceB)相加,并加carry bit
减法(Subtract):将源A减去源B,并减去borrow bit
全1(All 1s):ALU的输出是全1。这通常是一个特殊操作,用于设置输出为所有位都是1的状态。
全0(Zeros):ALU的输出是全0。这也是一个特殊操作,用于设置输出为所有位都是0的状态。
Destination
目标字段决定哪个寄存器会接收结果
Addressout
oymain
Contents of the main register are sent to the DUT.
oybase
Contents of the base register are sent to the DUT.
oyfield
Contents of the field register are sent to the DUT.
oymain2
Contents of the main2 register are sent to the DU T.
oybase2
Contents of the base2 register are sent to the DUT.
oyfield2
Contents of the field2 register are sent to the DU T.