带你手写CPU(三)
东北电力大学吧
全部回复
仅看楼主
level 13
wo5028928 楼主
今天更新的是逻辑运算指令,移位指令,移动指令,和简单的算术指令,并解决部分相关问题。
在五级流水线中,五条指令(理想状态)在同一时刻分别处于wb,mem,ex,id,if阶段,也就是说,如果当前指令需要上一条指令得到的数据的话,流水线会产生气泡,即当前指令需要延时两个周期以等待数据
2015年09月05日 00点09分 1
level 13
wo5028928 楼主
为了消除气泡,我们可以把mem,wb的输出重新接在id上,当当前指令需要的数据寄存器地址等于上一条指令的目的寄存器地址时,直接将该数据送到id,立刻解决气泡
2015年09月05日 00点09分 2
level 13
wo5028928 楼主
重要的事情要讲三遍
完备!完备!完备!
slt指令比较大小举例,要考虑两个操作数的正负号,差的正负号,少一个状态轻则出一堆乱七八糟的lantch,重则不能实现功能
再说三遍
完备!完备!完备!
2015年09月05日 00点09分 3
level 13
wo5028928 楼主
所谓对指令的支持,并没有什么技术上的难点,纯体力工作而已,代码格式都一样
,r-type的话两个操作数都取自寄存器,设置寄存器读使能。i-type只读取第一个寄存器,第二个操作数0扩展或者符号扩展,也就一个mux的事。
2015年09月05日 00点09分 4
level 13
wo5028928 楼主
执行阶段几乎全是case
每个aluop对应一种操作,设置目的寄存器写使能
再说三遍
完备!完备!完备!
2015年09月05日 00点09分 5
level 13
wo5028928 楼主
hi lo寄存器 作用是存储乘除法指令结果,或者针对这两个寄存器的加载,移动指令。和regfile module的写法一样。
只有一点要注意的地方,写hilo寄存器时要关闭通用寄存器写使能
2015年09月05日 00点09分 6
level 13
wo5028928 楼主
下集预告
流水线暂停和除法指令,看心情写条件转移
2015年09月05日 00点09分 7
level 11
不明觉厉。。。。
2015年09月05日 02点09分 8
level 12
顶下
2015年09月05日 03点09分 9
1