RISC-V MCU中文社区

【分享】 蜂鸟E203的指令生命周期详解——以addi指令为例

发表于 开源蜂鸟E203 2023-05-28 19:20:41
0
1419
0

团队编号:CICC2879

团队名称:八点起床读书

团队成员:黄良煜、苏桢毅



分享一下刚刚开始读E203源码时候,单条指令是如何被decode和execute的。

E203的指令,是存放在,即itcm当中的。通过即取指模块的

端口传输到

端口,即执行模块当中。

需要注意的是,在ifu模块下,指令会先进行minidec,把指令的rs1值和rs2值先取出,然后传给exu模块,而在exu下的decode模块中,它就不做这个工作。

exu模块很大,他包含了regfiledecodealuwirtebackcsr在内的多个模块,可以说是CPU的主要中心。

一条指令,从取值模块中取出以后,首先是进入了decode模块进行译码:

它首先会被判定是否为rv32格式的指令:

假设这条指令是rv32addi指令,首先,这个信息会被存入alu_info_bus中:

同事,这条指令编码将会被分解:

文本

描述已自动生成

 

addi指令一共提取出rs1,imm(rs2)

然后,它便从decode模块中输出,传给dispatch模块

需要注意的是,在dispatch模块中,rs1rs2所索引的值直接从regfile中取出,而regfilers1rs2的地址在exu模块的输入端口获取。

 

 

 

然后,它被正式传入alu模块:

文本

描述已自动生成

ALU当中,rdrs1rs2imm的路径开始分开:

这些参数首先被传入alu_rglr,实际上相当于仲裁模块:

经过判断,该模块生成了alu所需的两个输入操作数,并传递给dpath模块:

这个模块是alu中执行运算功能的模块,在这里,指令将真正的需要进行计算

文本

描述已自动生成

文本

描述已自动生成

文本

描述已自动生成

到此,终于得到了加法器的结果,接下来要做的,是把计算结果写回regfile

文本

描述已自动生成

这样,计算结果被传递出了alu核心的部分,紧接着,它被传回rglr模块,包装成

引出,作为写回数据;同时,写回的rdalu顶层模块中就已经被引出ALU模块了

文本

描述已自动生成

对于非长指令而言,该指令直接进入wbck

文本

描述已自动生成

最后,写回regfile

文本

描述已自动生成

喜欢0
用户评论
situxiao

situxiao 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板