首页 > 解决方案 > RISCV-Boom中浮点寄存器中的值是什么格式的?

问题描述

我正在研究 Boomv3 中浮点指令的执行过程。我从一个简单的fadd.s指令开始。我添加了代码来输出 Boom/src/main/scala/exu/execution-units/functional-unit.scala 中 FPUUnit 类中寄存器的值。但输出结果并不完全符合浮点数的IEEE754。

我添加的代码是:

when(io.req.bits.uop.uopc === uopFADD_S  ){
printf("------------------FPUUnit------------------------------\n")
printf("rs1 :%x, rs2 :%x \n",io.req.bits.rs1_data, io.req.bits.rs2_data)
printf("io.req.bits.uop %d\n", io.req.bits.uop.uopc)
printf("io.resp.bits.uop %d\n", io.req.bits.uop.uopc)
printf("io.resp.bits.data %x\n", io.resp.bits.data )
printf("\n\n")
}

看下面两条指令,指令005470d3中f5的值为0,f8的值为1.5。

 10314:    d01072d3            fcvt.s.wu   f5,x0
  10318:   005470d3            fadd.s  f1,f8,f5

Boom 的输出是:

------------------FPUUnit------------------------- -----
rs1 :1f01fffff00400000, rs2 :1ffefffff00000000
io.req.bits.uop.inst 005470d3
io.req.bits.uop 87
io.resp.bits.uop 87
io.resp.bits.data 1ffefffff00000000

为什么 rs1 和 rs2 中的值不完全对应 0 和 1.5?

谢谢!

标签: floating-pointcpucpu-registersriscv32

解决方案


推荐阅读