RISC-V MCU中文社区

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

发表于 开源蜂鸟E203 2023-05-30 14:49:42
0
1417
2

团队编号: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中执行运算功能的模块,在这里,指令将真正的需要进行计算



说先将操作数传递给mux_op


根据先前rglr模块传来的信号,判断是否为M类型指令。


在一轮又一轮的译码后,计算加法。


最终的结果统一筛选回alu_dpath_res中





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



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


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


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



最后,写回regfile

喜欢2
用户评论
situxiao

situxiao 实名认证

懒的都不写签名

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