当前位置:首页 期刊杂志

针对Lx5280 GUN 模拟器的正确性测试

时间:2024-05-20

夏兴昇

(江苏经贸职业技术学院 江苏 南京 211168)

在移植之后产生的针对Lx5280的模拟器是否符合需求,我采用联合测试的方法,和汇编器as、调试器insight(gdb窗口形式)共同测试。综合考虑对新增寄存器和对新增指令的测试,由于添加的寄存器和指令结合紧密,我采用对Lx5280各个新增功能分模块测试。

被测指令程序的装载,我通过两种方式:

(1)通过汇编程序汇编指令后通过insight装入。

(2)在Lx5280汇编没有移植好前通过手动汇编方式。在insight寄存器窗口给寄存器赋值及指令memory窗口在当前指令地址处写入手动汇编指令的的机器指令码。这种方式也适用于在汇编、调试、模拟器联合调试时确认错误范围。同时可以增加测试的灵活性。

采用单步测试方法,测试结果通过insight寄存器窗口和memory窗口观察。

详细测试如下:

1 对Circular Buffers功能的测试

这里涉及cbs[0-2]、cbe[0-2]六个寄存器,涉及指令有LBP[.Cn]、LBPU[.Cn]、LHP[.Cn]、 LHPU[.Cn]、 LWP[.Cn]、 LTP[.Cn]、 SBP[.Cn]、SHP[.Cn]、 SWP[.Cn]、STP[.Cn]

指令格式:×××[.Cn]rT,(pointer)stride

如lbp.1 $5,($10)1

基本功能是:对point寄存器间接寻址后赋值给rT寄存器,即rT=[point]。同时对point寄存器加上stride,即point+=stride。Cn值为0-2,决定采用三个Circular Buffers中那一个,0可省略。

测试步骤:

(1)测试 cbs[0-2]、cbe[0-2]赋值,如对 cbs0 赋值

li $2,0xbfc00384

mtru $2,cbs0

通过insight寄存器窗口观察,观察赋值是否正确。

(2)测试存取字长正确性,如以下指令

(3)测试有符号和无符号扩展存取操作

在取字节和半字操作中,会把它们扩展到32位存入通用寄存器。这里有带符号扩展和无符号扩展。

首先通过memory窗口对($10)赋值0xff

(4)测试 point的自加,即 point+=stride

执行后由于上溢发生,$10被赋值0xbfc00384,实现了存取数据buffer循环功能。

2 对Zero Overhead Loop功能的测试

这里涉及lpc0、lps0、lpe0三个寄存器,无相关新增指令。

基本功能:当PC值和LPE0匹配时,且LPC0不等于0,则PC被赋值为LPS0,同时LPC0减1,用硬件实现了的程序循环功能。

测试步骤:

(2)观察结果

在单步方式下,程序运行到lpe0(0xbfc003dc)后,就自动跳转到lps0(0xbfc00384),同时lpc0减 1,这样循环 5次后结束循环,顺序执行0xbfc003dc后面程序。

3 对DMAC单元的测试

这里涉及 m0l、m0h、m1l、m1h、m2l、m2h、m3l、m3h、mmd 9 个寄存器,涉及指令有七类,分别是

CMULTA

复数乘法

DIVA(U)

除法指令

MULTA(U)、MULTA2、MADDA(U)、MADDA2[.S]

乘法及乘加指令

MSUBA(U)、MSUBA2[.S]、MULNA2乘减指令

SUBMA[.s]、ADDMA[.s]

累加器加减指令

MTA2[.G]、MFA、MFA2

存取累加器到通用寄存器指令

RNDA2

累加器取整指令

测试步骤:

(1)测试 m0l、m0h、m1l、m1h、m2l、m2h、m3l、m3h、mmd 9 个寄存器的读写操作及MTA2[.G]、MFA、MFA2指令。

(2)测试除法指令DIVA(U)

(3)测试复数乘法CMULTA

(4)测试乘加指令 MULTA(U)、MULTA2、MADDA(U)、MADDA2[.S]

(5)测试乘减指令 MSUBA(U)、MSUBA2[.S]、MULNA2

(6)测试累加器加减指令 SUBMA[.s]、ADDMA[.s]

(7)测试累加器取整指令RNDA2

(8)测试与mmd相关指令

mmd寄存器含有三个域,

MF选择乘法的算数模式

0:整数模式

1:小数模式

MS选择饱和溢出边界

0:40位饱和

1:32位饱和

MT在32×32位乘法操作中截断选择

0:不截断

1:在32×32位乘法中截断 rS[15:00]x rT[15:00]乘积.

RND在RNDA2指令中的舍入取整选择.

00:最接近(或偶)舍入取整

01:向正方向(大值)舍入

1x:保留

测试(2)-(7)都是在 mmd=0 的测试,即整数模式,40 位饱和,不截断,最接近取整。

在小数模式状态下,乘法操作结果会主动左移一位。相关指令有

MULTA(U)、MULTA2、MADDA(U)、MADDA2[.S]、MSUBA(U)、MSUBA2[.S]、MULNA2

小数模式测试代码为:

饱和模式影响的指令是带有[.s]的指令,MADDA2[.S]、MSUBA2[.S]、SUBMA[.s]、ADDMA[.s]

32位饱和模式测试代码如下:

截断模式在32位乘法下,会截断rS[15:0]*rT[15:0]结果,相关32位乘法 MULTA(U)、MADDA(U)、MSUBA(U)

RND取整模式相关指令是RNDA2,向上取整模式测试代码:

4 对双字读写指令测试

这里新增了两条指令LT、ST,是对原MIPS体系读写指令的扩充,不涉及Lx5280的新增寄存器。

这两条指令的作用从memory读写双字(64位)到一对偶数开始的通用寄存器中。测试如下:

通过insight寄存器窗口观察$2,$3及$4,$5和memory窗口观察0xbfc00394和0xbfc00398内容是否相同。

5 对新增寄存器读写指令测试

这里有六条新增指令

MFRU、MTRU

读写 cbe[0-2]、cbs[0-2]、lpc0、lps0、lpe0、mmd

MFRK、MTRK

(目前保留)

MFLXC0、MTLXC0

读写 ESTATUS、ECAUSE、INTVEC

对MFRU、MTRU和MFLXC0、MTLXC0四条指令测试,而对保留的MFRK、MTRK不测试,测试代码如下:

6 对新增算数操作指令测试

这里新增的指令也是对MIPS算数指令的扩充,也不涉及新增寄存器, 相关指令有:ADDR2、SUBR2、SLTR2、SLLV2、SRLV2、SRAV2、MIN、MAX、ABSR、MUX、CLS、BITREV,测试代码:

7 对条件移动指令测试

这里新增的指令也是对MIPS算数指令的扩充,也不涉及新增寄存器,相关指令有:CMVEQZ[.H][.L]、CMVNEZ[.H][.L],

指令形式:CMVEQZ[.H][.L]rD,rS,rT

CMVNEZ[.H][.L]rD,rS,rT

基本功能:CMVEQZ指令是当rT==0时,rD=rS CMVNEZ指令是当rT!=0时,rD=rS

测试代码为:

8 测试总结

经调试、修改后的模拟器通过了上述详细测试,证明模拟器能够可靠使用,表明移植成功,实现了模拟器的移植目标。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!