队伍CICC2259 队员:刘宇轩 周嘉琪 冷思远
指导老师:李阳,曹超
misa寄存器的修改:
misa寄存器用于指示当前处理器所支持的架构特性。
misa寄存器的最高两位用于指示当前处理器所支持的架构位数。
1、如果最高两位值为1,则表示当前为32位架构(RV32)。
2、如果最高两位值为2,则表示当前为64位架构(RV64)。·如果最高两位值为3,则表示当前为128位架构(RV128)。
misa寄存器的低26位用于指示当前处理器所支持的RISC-V ISA中不同模块化指令子集,每一位表示的模块化指令子集如图所示。misa寄存器在RISC-V架构文档中被定义为可读可写的寄存器,从而允许某些处理器的设计能够动态地配置某些特性。但是在蜂鸟e203的实现中,misa寄存器为只读寄存器。恒定地反映不同型号处理器核所支持的ISA模块化子集。譬如蜂鸟e203核支持RV32IMAC,则反映于此寄存器中,最高两位值为1,低26位中 I/M/A/C对应域的值即为高。
所以当我们添加完成浮点数指令后,要记得把浮点数指令对应的misa寄存器的位拉高,不然的话调试器会报错,显示目前的处理器不支持使用F指令集。就算添加的指令集完全正确,这里没有注意到的话,做的都是无用功。修改的具体代码如下:

把F指令集对应的位拉高,注意不要和双精度的浮点指令集弄混淆。

这四条指令皆为需要使用到AGU和LSU的长指令,我们必须将它们的译码结果添加到发送给AGU的总线当中。

为了能够译码得到rv16的寄存器值,我们必须要把它们分为8组。因为不同组别的立即数译码过程也是不同的,分别对应了八套不同的立即数译码方案。所以,我们需要在相应的分组中添加我们刚刚添加的指令。


而它们需要哪些寄存器,以及需要寄存器参数的类型也要根据之前得到的分组情况来进行不同的判别。此处举了分组CL的例子,判别结果是这一组CL指令都需要rs1和rs2,但不需要rd。