RISC-V MCU中文社区

【分享】 e203除法器算法改进(一)

发表于 全国大学生集成电路创新创业大赛 2023-05-30 19:43:05
0
644
2

队伍编号:CICC3280 团队名称:芯新星队

e203内部除法操作使用加减交替迭代法进行运算,除几个特殊运算外,正常的除法操作需要33个周期才能输出运算结果,极大程度地影响了系统的性能。我们对e203的除法器进行了新的算法实现并改进。目前高性能的除法运算大多使用SRT-4算法进行设计。以下是我们针对除法器进行改进的算法。

前导零预处理

为了加快除法的运算过程,通常采用前导零预处理的方法对除数以及被除数预处理。在处理期间必须保证结果的正确性(即确定整数除法计算的次数)。

在进行前导零预处理前,需要对操作数进行有符号数至无符号数的转换,转换后只需要在预处理时考虑前导零的情况,而不需要额外考虑前导一的情况,此方法可以大大降低硬件资源开销,并且在预处理之前将除数与被除数的符号位保留,最终求得的商和余数只需要进行符号位的添加即可。

前导零的预处理过程:主要的核心思想是采用移位的方法,并且保证在移位完之后除数的最高位为1,被除数的最高位为0(SRT算法的思想需要将被除数与除数当作小数看待)。由于双快速SRT-4算法单个周期可以同时计算出四个商,因此在进行前导零预处理时,需要保证移位过程中除数与被除数之间存在有4n个零的差值。为增强代码的可读性,整个前导零预处理的过程采用casex语句,代码示例如下:


casex(divisor)                      //除数的前导零预处理
   32'b1xxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx : 
       begin 
        divisor_temp  = divisor; //奇数时补3‘b0或5’b0,偶数时补2’b0或4’b0 
        dividend_temp  = {4'b0 , dividend , 1'b0 };  //扩展到37位
        iterations_temp  = 1;   //需要迭代计算的次数
        recovery_temp  = 30;  //得到最终余数需要移位的次数
end

经过前导零预处理,可以将除法功能模块的执行周期由原来的33的固定周期压缩至1~9的可变周期。

喜欢2
用户评论
Burch

Burch 实名认证

新星

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