蜂鸟E200 RISC-V CPU:(一)取指

【取指过程】

【概述】

在这里插入图片描述
画圈的是有关取值的两个重要模块
IFU:Instruction Fetch Unit 取指单元
ITCM:紧耦合存储器,指配置一段较小容量(几十KB)的存储器(通常是静态存储器),用来存储指令,在物理上离处理器核很近而专属于处理器核。优点是实现非常简单,容易理解,且能保证实时性。

【IFU】

源代码的Hierarchy如下:
在这里插入图片描述
示意图:
在这里插入图片描述

E200处理器采用两级流水线,取指为第一级,执行、访存、写回、交付均在第二级。
在第一级需要利用BPU进行分支预测。
BPU分支预测三种情况:1、条件分支 2、直接跳转 3、间接跳转
PC:用于指令地址的生成,同时在一些PC相关的指令也会用到。

处理器产生一个PC,这个请求会给到地址判断和总线控制(ICB总线是和AMBA差不多的一款自定义的总线结构,自己看看就行),对读取PC的请求进行解析。指令可以存在ITCM里面,也可以存在总线上的Flash里,所以IR的来源是经过一个MUX来选择的。
指令进来以后,首先对这个指令进行简单的译码,指令译码之后,一部分用于下个PC的生成,同时放到IR里面进行寄存,送到执行单元里面进行进一步的执行,比如运算加减等等。
当前PC和下一个PC都会有寄存器记录下来。
如果BPU猜错了,就要flush流水线。
在这里插入图片描述

指令可以存在ROM里、QSPI-Flash里、ITCM里
ITCM有64k的空间,一些应用领域足够了
ROM的空间比ITCM要大一些,在RTL里,这个ROM是个假的

Hierarchy图示:
在这里插入图片描述

深红色的是指令可以存放的位置。
ifetch所有的地址访问都需要经过ift2icb模块的处理,这是一个总线公共的接口。
64k空间不够的时候,挂在Bus Interface上面。
一般的做法是把外部的搬到ITCM里面再运行,可以用多级存储体的结构来理解,一级cache、二级cache、三级cache、硬盘。
ITCM的端口是64位的,这意味着我们取出32位的指令一次可以取2条,16位的一次可以取4条。(当然也有可能出现跨边界的现象,必须取两次才能取完,用了一个状态机实现)。

模块代码解析:

【Mini-Decode】

这是一个纯组合逻辑的译码器,它是EXU中的Decod

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值