RISC-V MCU中文社区

【分享】 RISCV F扩展简介——浮点寄存器

发表于 开源蜂鸟E203 2023-05-31 19:46:39
0
1876
0

队伍介绍:
报名编号:CICC1829
团队名称: 你说的对对队

这是我们队伍的第6篇帖子

“F”即单精度浮点(single-precision floating-point),增加了32个位宽为32bit的浮点寄存器(f0~f31)和一个浮点控制状态寄存器fcsr(用来控制浮点的操作模式和异常状态的记录)。 浮点寄存器的宽度用FLEN术语来描述,对于单精度浮点扩展来讲FLEN=32。大多数的浮点指令都只依赖浮点寄存器来完成操作,除此外,浮点的load和store指令用于在储存器和浮点寄存器之间传输数据。同时也有一些指令用于整数寄存器和浮点寄存器之间的直接数据交互。
图片alt
上图为浮点寄存器,浮点寄存器与通用整数寄存器基本一致,唯一的区别在于其f0寄存器不需要硬件接0.
具体实现如下:
always @(posedge CLK, posedge RES_CPU)
begin
for (i = 0; i < 32; i = i + 1)
begin
if (RES_CPU)begin
regFR[i] <= 32’h00000000;
end

    else
    begin
        if (DBGABS_FPR_REQ & DBGABS_FPR_WRITE & (DBGABS_FPR_ADDR[4:0] == i))
            regFR[i] <= DBGABS_FPR_WDATA;
        else if (wbck_flw & ((WB_LOAD_DST & `ALU_MSK) == `ALU_FPR) & (WB_LOAD_DST[4:0] == i))
            regFR[i] <= WB_FPU_LD_DATA; // Writing Conflict Priority FPU < WB 写回优先级WB>FPU       
        else if (pipe_i_fr_dst & (pipe_i_token[16:12] == i))
            regFR[i] <= pipe_i_fr_dst_data;
        else if (pipe_f_token[17] & (pipe_f_token[16:12] == i))
            regFR[i] <= fdata_float_out_final; // 结果写回浮点寄存器
        else if ((pipe_c_token[7:1] == 7'b1101000) & (pipe_c_token[16:12] == i))
            regFR[i] <= fcvt_i2f_float_out;
    end
end

end

喜欢0
用户评论
春去秋来

春去秋来 实名认证

蒋天择

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板