(二)EXU模块
EXU段包括指令译码,指令派发,指令发射,指令执行,内存操作,数据写回。而E203是简单的顺序单发射,顺序执行,顺序写回类型的处理器。
- 将IFU通过IR寄存器发送给EXU的指令进行译码和派遣。
- 通过译码出的操作数寄存器索引(Index)读取Regfile(如图中RD-Regfile)
- 维护指令的数据相关性(如OITF)
- 将指令派遣(Dispatch)给不同的运算单元执行(ALU、Long-Pipes、LSU、以及EAI)
- 将指令交付(检查指令分支预测是否正确,是否产生中断和异常)
- 将指令运算的结果写回Regfile(WB ARB)
(1)EXU译码模块(e203_exu_decode.v)
译码模块的输入信号来自于IR阶段,包含当前需要译码的指令,执行PC,预测结果,非对齐和存储器访问错误。
首先根据最后两个比特位判断当前译码指令是RV32还是RV16,再根据指令格式,产生不同的指令类型信息。如:寄存堆的索引和控制信号,跳转类型和所需计算的信息。
输出dec_info包含很多模块的控制信息,有BJP单元的控制信息,ALU单元的控制信息,CSR单元的控制信息,乘除单元的控制信息,AGU单元的控制信息。同时还要生成后面执行所需要的各类型立即数,当执行的指令为非法指令时,译码器模块还将产生各类型的异常指令异常信息。
(2)整数通用寄存器组(e203_exu_regfile.v)
RISC-V的整数指令都是单操作数或者两操作数指令,且蜂鸟E203属于单发射的微架构,因此Regfile模块只需要支持最多两个读端口;而蜂鸟E203的写回策略是按照顺序每次写回一条指令,因此只需要支持一个写端口。