APG Statements(1)

我们将首先查看的语句是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

第一行的值为默认

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.

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值