P3课上部分总结
(课下等p4结束后发布)
T1 qaq
题面
格式:qaq $s1 $s2 $s3
R型指令,func忘了
取GPR[rs]平方低32位,GPR[rt]平方低32位。两者相与,结果存到rd中
实现
非常显然,就是在ALU里新增一号运算,然后修改一下cpu controller,在R型指令里新增对这条指令的支持,就可以了。
T2 booez
题面
格式:booez $t1 $t2 label
I型指令,op忘了
若 $t1[15:0] 里1有奇数个1,$t2[31:16]有偶数个0,则跳转到label,否则不跳转
实现
我们非常自然会联想到beq,这两条指令非常相似。此处笔者在写博客的时候才发现自己课上做复杂了。
只需要模仿beq,但是ALU采用新的运算,判断题意给的表达式是否成立,若成立则结果为0(目的是让zero为0),否则为1即可。
笔者是新增了ALU的输出信号(摊手),有点笨
T3 csws
题面
格式:csws rt offset(base)
例:csws $t0 0($t1)
若$t0[31]==1,则将$t0保存到 Mem[$t1+offset]
否则,将0保存到Mem[$t1+offset]
(应该能看懂我凌乱的表达吧)
实现
这个和sw非常接近,只需要新增一个控制数据文件输入数据选择的信号,然后新增一个多路选择器,选择是将寄存器数据直接存进去还是做题目的计算后存进去,就可以了。
总结
虽然知道助教很辛苦,但是还是想吐槽一下,考试过程中前一个小时没法提交这种比较逆天的错误。最后延期了半个小时,不知道会不会大家造成影响。
update:是机房光纤的锅,和可爱的助教没有关系:)