riscv乘除法模块(M指令)移植(from cva6)

cva6的乘除法模块由四个文件组成,移植时只需这四个文件,分别是:
(cva6代码已上传)

  • mult.sv
  • multiplier.sv
  • serdiv.sv
  • lzc.sv

其中,乘除法模块和流水线的接口只有mult.sv,此交互发生在ex阶段,因此移植时只需要考虑mult.sv文件的输入输出信号。
ex模块中对mult的实例化
在mult.sv文件中对serdiv.sv和multiplier.sv中定义的模块进行了实例化,这两个文件分别完成了除法和乘法运算,而serdiv.sv中对lzc.sv文件中定义的模块进行了实例化,这个模块主要完成对前导0个数的计算。

mult模块输入输出信号

input:

clk_i:时钟信号
rst_ni:复位信号
flush_i:流水线冲刷信号
mult_valid_i:指示是否需要调用mult,若指令是M指令,则为1
fu_data_i:
	fu:4位,如果是M指令,则置5,否则置0.
	operator:7位枚举类型,设置见后文
	operand_a:rs1数据
	operand_b:rs2数据
imm:没有用到,全置0
trans_id:可以不用,全置0

output:

result_o:乘除法的结果
mult_valid_o:计算完成后,此信号会置1
mult_ready_o:没用
mult_trans_id_o:没用

关于fu_data_i.operator信号,源码为7位,里面定义了非常多的指令类型,但是由于我只想移植该模块实现M指令,其余指令实现不需要此信号,因此将其改为4位,定义如下:

typedef enum logic [3:0] { 
// Multiplications
MUL, MULH, MULHU, MULHSU, MULW,
// Divisions
DIV, DIVU, DIVW, DIVUW, REM, REMU, REMW, REMUW,
NOTMULT
} fu_op;

(最后的NOTMULT表示任何非M指令)
输入输出信号分析完毕,只需要在译码和执行阶段稍微修改代码,就可以完成M指令的移植。需要注意的是,cva6中的乘除法模块是64位,如果要移植到32位的cpu核,则需要修改信号的位数。

在 SV (System Verilog) 编程中,当你想要进行普通除法运算,而不考虑整除情况时,可以像在常规编程语言中那样直接使用 `/` 操作符来进行除法运算。System Verilog 支持多种算术运算,包括加、减、乘以及除等操作。其中除法有两种表示形式: 1. **正常除法** (`/`):用于获取两个数字相除后的商。例如: ```sv integer dividend = 10; integer divisor = 3; integer quotient; quotient = dividend / divisor; // 计算结果将是3,因为只保留整数部分。 ``` 2. **向下取整除法** (`div`):如果想要得到向下取整的结果,可以使用 System Verilog 的 `div` 运算符。这在处理负数时尤其有用,因为它会返回小于等于目标的最大的整数。例如: ```sv integer dividend = -10; integer divisor = 3; integer quotient; quotient = dividend div divisor; // 结果将是-3,而不是-4。 ``` 然而,在实际应用中,对于大多数情况来说,正常的除法 `/` 就能满足需求。`div` 运算符主要用于特定场景下的数值计算,特别是在处理负数时希望得到向下取整的结果的情况。 ### 相关问题: 1. **系统Verilog 中的其他算术运算符有哪些?** 系统Verilog 提供了一系列算术运算符,除了 `/`, `div` 外,还包括: - `+` 和 `-`: 加法和减法运算符。 - `*`: 乘法运算符。 - `**`: 幂运算符。 - `%`: 取模运算符。 2. **如何在System Verilog中进行位移运算?** 系统Verilog 支持三种位移运算符,分别为: - `<<`: 左位移运算符,向左移动指定的数量位。 - `>>`: 右位移运算符,向右移动指定的数量位。 - `>>>`: 无符号右移运算符,总是从最高位补零。 3. **如何利用System Verilog中的数学库进行复杂的数学运算?** System Verilog 自身并不包含数学库,但用户可以自行实现复杂数学运算,或是通过第三方库实现更高级的功能。例如,可以实现基于状态机的算法,解决复杂数学问题;也可以引入外部工具链支持的硬件加速库,提高性能。此外,某些环境或集成开发环境可能会提供额外的支持和功能集,帮助开发者更容易地进行数学运算和其他计算任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值