四、实验相关
1、实验要求
使用logism自主搭建出一个支持所给指令集的32位CPU,并通过课下正确性测试。同学们可以思考32位CPU代表了什么。
课上会通过新增指令的方式当场修改CPU,来考核课下设计的CPU。
指令集:
lw,sw,addu,subu,ori,j,beq。
内存大小、指令容量
内存32字,要求能执行32条指令。注意:只需要一个ROM和一个RAM,定义好规格就行。
需要在适当的地方添加输出信号以便评测,具体参见提交规格。
2、提供硬件
为减小工作量,我们给出部分重要模块和其硬件说明,无需自行设计。
寄存器堆:GRF.circ
0号寄存器值一直是0,其他寄存器初始值是0。
端口 方向 作用 A1 I 输入将要读取的第一个寄存器编号 A2 I 输入将要读取的第二个寄存器编号 A3 I 输入将要写入的寄存器编号 RD1 O 输出A1对应编号寄存器的数据 RD2 O 输出A2对应编号寄存器的数据 WD3 I 输入将要写乳寄存器的数据 CLK I 时钟信号 WE I 写入使能信号 RESET I 复位信号(同步或异步)
注意将提供模块电路复制到自己的GRF电路中。导入方式如下:

数据存储器:DM(使用logism的RAM选用“separate load and store”)

指令存储器:选用logism自带的ROM,大小符合需求。

3、测试相关
测试可以有效的排除bug,希望同学们能在完成后进行充分的测试。
参考测试策略:先逐条测试指令,验证其正确性,再连续执行指令,检验最终结果。
验证正确性可借助Mars来检验自己CPU指令的运行结果和相应寄存器和地址上的数据是否合理。
使用Mars测试时建议采取下述两种方式的任意一种观察:
每一条跳转或者分支指令后面加nop指令
关闭Mars的延迟槽,详情见下


4、参考资料
对指导书未涉及到的知识,可参考《数字设计和计算机体系结构》第7章的7.3节