Reindeer-RISCV学习笔记(3)


在这里插入图片描述
在这里插入图片描述

流水线控制

下面这个是状态机,uncond表示无条件转移。
在这里插入图片描述

我们来看看control的控制信号给了些谁:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

fetch

fetch就是计算指令地址(inc或者jar),然后等待SDRAM读取结束后输出fetch_enable_out信号,该信号控制decode。

等待SDRAM读取结束由MCU外部的mem control给出。

下面是细节说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在control里面:
在这里插入图片描述
取指结束后发出fetch_enable_out,通知decode处理。

decode

这里基本上都是组合逻辑,直接工具RISCV指令格式进行译码输出,所以主要看一下输出信号:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
收到fetch_enable_out后,解码然后发出ctl指令控制exe部分。

在这里插入图片描述
再来看一个跳转指令
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
还没太看懂这个跳转地址是怎么得到的,这个后面再研究。
在这里插入图片描述

execution

这部分比较直接,就是根据IR的具体内容进行运算,得到不同的指令控制和数据信号,用来控制其他模块工作。

在这里插入图片描述
在这里插入图片描述

主要也是组合电路,其中乘除法由单独模块实现,时间较长。
在这里插入图片描述
在这里插入图片描述

这部分还包括寄存器读操作。
在这里插入图片描述

在这里插入图片描述

data_access

这部分包括寄存器写操作和内存访问操作,以及CSR写操作。

寄存器写操作
但是rd的地址和内容都是由是一部传递过来的,放在data_access只是延迟了一个时钟。
在这里插入图片描述
内存访问其实包括两部分,一部分是内存地址访问SDRAM,一部分是外设地址访问外设:
在这里插入图片描述
内存访问完成信号由外部引入
在这里插入图片描述
外设地返回信号则由mm_reg返回:
在这里插入图片描述
FSM
在这里插入图片描述
在这里插入图片描述

如何实现odd and even的

我怎么看都觉得这是个单周期指令CPU,并不是真正的四级流水线结构,如果我看错了请指出。

arm控制suspend

因为处理器结构的原因,实现流水线级的suspend略微有些麻烦,所以这里实现指令级的suspend,保证发出suspend信号后,阻塞下一条指令。
在这里插入图片描述

如果要进行单步调试的话,只需要suspend拉高,然后给出一个clk的低电平脉冲就行了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朽木白露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值