团队编号:CICC1649
团队名称:巴巴托斯
浮点运算单元的设计和优化可以从以下几个方面入手:
1.浮点寄存器设计:为了实现浮点运算指令子集(RV32F或者RV32D),需要添加一组专用的浮点寄存器组,总共需要32个通用浮点寄存器。其中RV32F浮点指令子集的每个通用浮点寄存器的宽度为32 bit;RV32D浮点指令子集的每个通用浮点寄存器的宽度为64 bit。可以参考整数通用寄存器的设计方法,实现单精度浮点指令集时,数据长度都是32位的,和整数长度一致。
2.浮点运算指令实现:蜂鸟E203可以通过在EXU内添加一个与ALU平行的模块:浮点处理单元(float point unit),专用于处理浮点指令。该单元可以更高效地执行浮点数计算,如加减、乘除、乘加、开方、比较等。
3.乘除法器优化:对于乘法操作,为了减少乘法操作所需的周期数,可以采用基(Radix-4)的Booth编码,进行一次乘法操作需要17个时钟周期。对于除法操作,采用普通的加减交替法,同样对于无符号乘法进行一位符号扩展后统一当作有符号数进行运算,最终得到完全准确的除法结果,总共最多需要36个时钟周期。
4.浮点指令扩展:计划先完成单精度浮点指令集(F)的拓展,可以执行以下26条指令:Flw、fsw、fmadd.s、fmsub.s、fnmsub.s、fnmadd.s、fadd.s、fsub.s、fmul.s、fdiv.s、fsqrt.s、fsgnj.s、fsgnjn.s、fsgnjx.s、fmin.s、fmax.s、fcvt.w.s、fcvt.wu.s、fcvt.s.w、fcvt.s.wu、feq.s、flt.s、fle.s、fclass.s、fmv.w.x、fmv.x.w。