cpu设计实战 lab 5

LAB 5

简述

经过 lab 4 的讨论,lab 5其实蛮简单的了,我们现在实现的 19 个指令除了 load 指令,都可以在执行期得到写回的数据,于是除了 load 都可以直接向译码级前递,而 load 在执行级时,若和译码级的指令发生写后读,则暂停一拍。

还有一个问题,如果译码级和多级都发生写后读,我们应该选取最新的值,即离此条指令最近的一次写后读进行前递,即需要一个具有优先级四选一选择器,选择是三条前递路径中的还是当前寄存器堆读出的。

现在目标就很明确了,让我们动笔吧。

开冲
回写级

寄存器号 5 bit,寄存器数据 32 bit,开一条 37 bit 的数据通路即可。

assign ws_to_ds_fwd = {37{ws_valid}} & {37{ws_gr_we}} & {ws_dest,ws_final_result};
访存级

和上面类似的。

assign ms_to_ds_fwd = {37{ms_valid}} & {37{ms_gr_we}} & {ms_dest,ms_final_result};
执行级

这里就需要向前传递寄存器号 5 bit,寄存器数据 32 bit,和 1 bit 的当前指令是否是 load 指令,借此控制译码级是否阻塞

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值