您的位置:首页 > 其它

自己动手写CPU之第六阶段(4)——验证移动操作指令实现效果

2014-08-14 13:28 309 查看
将陆续上传本人写的新书《自己动手写CPU》(尚未出版),今天是第23篇,我尽量每周四篇

6.4 测试程序

本节将通过一个测试程序验证为OpenMIPS处理器添加的移动操作指令是否实现正确,测试程序如下,对应本书附带光盘Code\Chapter6\AsmTest目录下的inst_rom.S文件。

.org 0x0
.set noat
.global _start
_start:
// 给寄存器$1、$2、$3、$4赋初值
lui $1,0x0000          # $1 = 0x00000000
lui $2,0xffff          # $2 = 0xffff0000
lui $3,0x0505          # $3 = 0x05050000
lui $4,0x0000          # $4 = 0x00000000

// 对于movz指令而言,由于寄存器$1为0,所以将$2的值赋给$4
movz $4,$2,$1          # $4 = 0xffff0000

// 对于movn指令而言,由于寄存器$1为0,所以不赋值,$4保持不变
movn $4,$3,$1          # $4 = 0xffff0000

// 对于movn指令而言,由于寄存器$2不为0,所以将$3的值赋给$4
movn $4,$3,$2          # $4 = 0x05050000

// 对于movz指令而言,由于寄存器$3不为0,所以不赋值,$4的值保持不变
movz $4,$2,$3          # $4 = 0x05050000

// 连续三条mthi指令,分别将寄存器$0、$2、$3的值保存到HI寄存器
mthi $0                # hi = 0x00000000
mthi $2                # hi = 0xffff0000
mthi $3                # hi = 0x05050000

// 读取HI寄存器的值到$4,同时可验证HI、LO寄存器带来的数据相关问题是否处理正确
mfhi $4                # $4 = 0x05050000

// 连续三条指令mtlo,分别将寄存器$3、$2、$1的值保存到LO寄存器
mtlo $3                # lo = 0x05050000
mtlo $2                # lo = 0xffff0000
mtlo $1                # lo = 0x00000000

// 读取LO寄存器的值到$4,同时可验证HI、LO寄存器带来的数据相关问题是否处理正确
mflo $4                # $4 = 0x00000000

程序的注释给出了预期效果,将上述inst_rom.S文件,与第4章建立的Bin2Mem.exe、Makefile、ram.ld这三个文件拷贝到Ubuntu虚拟机中的同一个目录下,打开终端,使用cd命令进入该目录,然后输入make all,即可得到用于ModelSim仿真的指令存储器初始化文件inst_rom.data。

在ModelSim中新建一个工程,添加本书附带光盘Code\Chapter6目录下的所有.v文件,然后可以编译。再复制上面的inst_rom.data文件到ModelSim工程的目录下,就可以进行仿真了。

ModelSim仿真输出如图6-7、6-8所示,观察$4、HI、LO寄存器值的变化可以知道OpenMIPS正确实现了移动操作指令。





好了,移动操作指令至此就已经实现了,也验证通过了,下一步将实现算术操作指令,敬请关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐