cva6的乘除模块由四个文件组成,移植时只需要这四个文件,每个文件如下:
(已上传cva6代码)
在mult.sv multiplier.svserdiv.svl ZC.SV中,乘除模块和管线的接口只有mult.sv,该交互发生在ex阶段,因此在移植时mult.SV
mult.sv文件实例化了在serdiv.sv和multiplier.sv中定义的模块。 这两个文件分别完成了除法和乘法,serdiv.sv实例化了lzc.sv文件中定义的模块。 该模块主要完成前0个计算。
mult模块输入输出信号input:
clk_i :时钟信号rst_ni :复位信号flush_i :流水线清洗信号mult_valid_i:表示是否需要调用mult,如果指令是m指令,则为1fu _ data _ I 后述的operand_a:rs1数据operand_b:rs2数据imm:可以使用,全位置0trans_id:也可以使用,如果是m命令,则为1fu_data_I33604比特
result_o:乘除结果,mult_valid_o:计算完成后,该信号为1mult_ready_o:为mult_trans_id_o:为358 www .
typedefenumlogic [ 3:0 ] {/multiplicationsmul,MULH,MULHSU,MULW,//DivisionsDIV,DIVU,DIVW,DIVUW ()
输入输出信号分析完成,在解码和执行阶段稍微修改代码,即可完成m指令的移植。 请注意,cva6的乘除模块是64位,如果要移植到32位cpu内核中,必须更改信号的位数。