团队编号:CICC2879
团队名称:八点起床读书
在做F指令扩展时,对于一些运算模块,难免得需要进行仿真波形验证,而在这个时候就需要用到生成立即数来进行验证。生成立即数的方法跟RV32I指令一样,如下:
RISC-V使用I-type格式的指令和U-type格式的指令加载立即数,I-type格式包含12位立即数,U-type格式包含20位立即数,而且这20位是加载到寄存器的高20位的。所以,一条I-type指令加上一条U-type指令就可以加载32位的常量,包括32位的立即数或内存地址。有些情况下只需要一条I-type指令,或者一条U-type指令就可以了。
例如加载常量0x12345678:
lui x15,0x12345 # 首先加载常量的高20位
addi x15,x15,0x678 # 再将低12位加到高20位
而对于F寄存器,则需要另一条F指令在将S寄存器转移到F寄存器,即浮点搬运指令 FMV.W.X
该指令结构为:
1111000 00000 rs1 000 rd 1010011
通过设置合适的参数,即可将x[rs1]转移到f[rd]。