文章目录:
猜猜是什么原因导致我现在刚准备睡()
实验要求:
使用logism自主搭建出一个支持所给指令集的32位CPU,并通过课下正确性测试。
- 指令集:lw,sw,addu,subu,ori,j,beq。
- 内存大小:32字。只需要一个RAM。
- ROM大小:要求能执行32条指令。ROM不一定需要地址的全部位数。只需要一个ROM。
- PC需要复位功能,起始地址为0x00003000。
我的CPU: https://github.com/lixu10/Logisim_SingleClock_CPU
搭建过程
一头雾水,根本不会搭啊。幸亏有学长的教程:一本书教你通关计组实验 - Kamonto's Little Planet ,简直是神!
然而搭完之后提交得到了WA的结果,经过一天多的Debug,终于解决了所有问题。
太晚了懒得写了()
遇到的第一个BUG:负责地址计算结果多选器的控制信号里面,J指令对应的控制信号写错了。
二:评测平台需要的返回数据MemData理解错了,应该是内存写入值,写成内存读到的值了。
三:NPC计算新的PC值时,处理beq跳转地址出错,应该是与PC+4相加,我用的PC与之相加。
四:还是上面的位置,beq跳转地址从imm26扩展为32位,开始写成0扩展了,应该是符号扩展。
另外Debug过程中还发现了评测机的一个BUG,似乎可以轻松卡出来AC(),希望我上机考试不要用到