说明
执行阶段一般根据指令的不同类型划分不同的执行模块。
对于E203来说:
- 普通的alu指令由e203_exu_alu_rglr模块处理
- M扩展乘除法指令由e203_exu_alu_muldiv模块处理
- load/store指令和A扩展指令由e203_alu_lasagu模块处理
- csr指令由e203_exu_alu_csrctrl模块处理
- 分支跳转指令由e203_exu_alu_bjp模块处理
- 自定义扩展指令由e203_exu_nice模块处理
- 其它指令具体问题具体分析
- mret/dret/fencei也需要跳转,因此交由*_bjp模块处理
- nop/ecall/ebreak/wfi不需要任何运算,只需要交付即可,因此交由*_rglr模块处理
- ……
若干模块都需要执行基础的算术逻辑运算,比如*_rglr模块、_bjp模块、_lsuagu模块、_mdv模块,为了减小资源占用面积,这些模块公用数据通路的运算逻辑(_dpath模块)。
代码详解(e203_exu_alu.v)
执行阶段的主体代码在文件e203_exu_alu.v,简要框图如上。主要分为指令分发(派遣)、指令具体执行、执行结果聚合后输出。
指令分发(派遣)
首先根据指令译码阶段给出的相关