《RISC-V开放架构设计之道》-RV32M+RV32MD+RV32A
<div class='showpostmsg'># RV32M 乘法和除法指令
!(/data/attachment/forum/202410/19/225336jylwybl2twyhhrtg.jpg.thumb.jpg?rand=8307.077413542345)
1. 乘法指令
1. 乘法,mul
2. 高位乘,mulh,可检查乘法溢出
3. 高位有符号-无符号乘,mulhsu,对多字的有符号乘法很有用
4. 高位无符号乘,mulhu,可检查乘法溢出
2. 除法指令
1. 除法,div
2. 无符号除法,divu
3. 求余指令
1. 求余,rem
2. 求无符号数的余,remu
整除法在处理器上经常是耗时的操作,有的时候可以用右移操作代替2的幂次的无符号除法
除数为常数时:先乘以一个近似的倒数,再矫正奇数高位的部分。
在早期的ARM-32中是不支持除法指令的,在2005年除法才被实现
# RV32F RV32D 单精度和双精度
!(/data/attachment/forum/202410/19/225337fde42revmvp3mvpu.jpg.thumb.jpg?rand=8111.960765857864)
RV32F和RV32D是单精度和双进度浮点指令,和其他的现代ISA一样,RISC-V遵循了IEEE 754-2019浮点标准
!(/data/attachment/forum/202410/19/225338s0n70mro4smonlmm.jpg.thumb.jpg?rand=2602.0709873259284)
RV32F和RV32D使用了32个独立的F寄存器而非X寄存器,可以在不增加RISC-V指令格式中寄存器字段所占用空间的情况下,将寄存器容量和带宽翻倍
如果处理器同时处理支持RV32F和RV32D,但进度仅仅使用F寄存器的低32位
# RV32A 原子指令
!(/data/attachment/forum/202410/19/225338xssnfr4fsmknxqsf.jpg.thumb.jpg?rand=9431.421143378957)
1. 内存原子操作,AMO
2. 加载保留/条件存储,LR/SC
原子操作指的是不可被中断的一个或一系列操作,在访问数据前加入了上锁机制,RISC-V提供了对原子指令的支持
# RV32C 压缩指令
!(/data/attachment/forum/202410/19/225339x8z11fs3n6nzekw8.jpg.thumb.jpg?rand=483.61271408928764)
1. RV32V的设计:
1. 每条短指令都必须对应一条标准的32位RISC-V指令,此外16位的指令仅对汇编器和链接器可见,编译器开发者和汇编语言程序员无需关心
2. 处理器的设计者不能忽略RV32C,通过这个方法来实现降低开销:
1. 执行指令之前通过一个译码器将所有的16位指令转为32位指令
2. 一个不支持任何扩展的32位RISC-V最小处理器需要8000个门电路,译码器仅需要400个,所以开销很小
# 参考资料
(https://blog.csdn.net/qq_38798111/article/details/129718824)
(https://xlinwei.github.io/docs/190720_RISC-V/risc06.html)
[使用Python 3 模拟RISC-V指令集C扩展(RV32C)中的指令功能](https://gitee.com/lwhengbit/rv32c/tree/master)
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]