RISC-V MCU中文社区

【分享】 e203乘除法模块(e203_exu_alu_muldiv.v)中的back2back和special case信号的含义

发表于 开源蜂鸟E203 2023-05-24 13:41:15
0
1206
0

一、团队介绍

团队名称:管他三七二十一
学校名称:华中科技大学
队伍成员:龚绎天、李泽立、王欣倓
指导老师:王超
大家好,本篇是我们队伍的第四篇分享,主要内容是补充介绍e203乘除法模块(e203_exu_alu_muldiv.v)中的back2back和special case信号的含义,水平有限,如有错误,欢迎大家批评指正。

二、 主要内容:

首先我们知道,对于e203的乘除法器,为了实现低功耗,低面积、高资源利用率,乘除法过程复用了alu数据通路,没有设计单独的乘除法器。

其中乘法采用基4booth编码得到部分积,并通过移位相加,复用alu加法器数据通路实现乘法,已知基4booth编码的32位有符号数乘法会产生部分积一条乘法的计算需要消耗十七个周期。

除法则采用加减交替法(即不恢复余数除法),除需31周期完成计算外,还需要两个周期进行溢出的检测等操作。


首先是module中的back2back信号,
根据模块RTL的第449,450行的信息,back2back是指,当译码检测到

1、 连续的mul和mulh指令,并且两条指令的两个源寄存器相同,则说明这两条指令的运算结果是可以在同一次乘法计算过程中得出,这样可以在17个周期完成两条指令的运算,
Mul指令输出低位,mulh(如mulhu等写回计算结果高位的指令)指令输出高位即可。

2、 连续的除法指令div(div、divu)和取余指令(rem、remu),并且两条指令的两个源寄存器相同,则说明这两条指令运算结果也可以在同一次除法计算过程中得出,从而在31周期内完成两条指令的运算。

满足上述两种情况时,则进行back2back处理,可以节约33或17个周期。


然后是module中的special case语句
根据模块RTL的第420行到440行的信息,special case是指的除法指令中,除数为0和除法溢出的情况。‘
1、首先是除数为零,这种情况下会使得商输出为0,余数输出为被除数。进行写回

2、然后是除法溢出的情况:
除法溢出仅仅发生在有符号除法指令,即div和rem指令中,对于divu和remu指令则不会发生这种情况,

除法溢出是指:
当除数为-1(补码表示为1111111111111),被除数为-(2^xlen),(补码表示为1000000000),这种情况下,商为(2^xlen),而补码无法表示(2^xlen),因为补码正数最大为(2^xlen-1),因此判定发生了溢出。

发生溢出之后,定义此时输出的商为1000000000,余数为0.分别作为div和rem指令的输出结果,进行写回

喜欢0
用户评论
小王

小王 实名认证

懒的都不写签名

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