Menu Close

RISC-V指令集讲解(7)指令地址对齐和加减法溢出处理

对于load/store指令,数据在内存中的地址应该对齐。

  • 如果访存32位数据,内存地址应当与32位的数据对齐,也就是说,D_PC的最低两位应当为0(如果内存存数据以32 bit为单位,表示数据是4个字节对齐的);
  • 如果访存16位数据,内存地址应当与16位的数据对齐,D_PC的最低位应当为0(表示数据是2个字节对齐的);
  • 如果访存8位数据,因为内存的单位是一个字节,即不需要对齐。其具体在CPU设计中如何在硬件中实现见RISC-V LSU,SRAM,GPIO模块(2)D_sram模块中对地址移位的处理。

主讲老师:YVONNE、Tim Zhuang、William

本文隐藏内容 登陆 后才可以浏览

Posted in RISC-V教学视频
0 0 投票数
Article Rating
订阅评论
提醒
guest
4 评论
最新
最久 最赞
内联反馈
查看所有评论
wangff
wangff
23 天 前

学习本节课有几点收获,1、小端格式的数据地址是从右向左逐次增加,大端格式的数据地址是从左向右逐次增加;2、RISC-V目前仅支持小端格式;3、计算结果异常的处理,其中通用的方法是获取其中一个计算数的符号并存放在一个寄存器,获取结果的符号并存放在一个寄存器,最后通过比较这两个寄存器的值是否相等,判断是否计算结果异常。
老师们在授课中对字节对齐问题与计算结果异常问题做了多方面探讨,可以很好的引导学生形成解决问题的思路。

在听课中有几点疑惑,请老师进一步解释:
1、本次授课中提到的”D_PC”的概念之前课程好像没有提到,这里是指的load和store指令中的“offset”吗?
2、小端格式最终体现在对外设或者存储器的访问过程中,当我们从存储器中读取数据到cpu中,知道数据的实际表达大小,例如,从存储器读取的数据0x12345678,那么代表1是最高位数据,8是最低位数据;当我们从cup把0x12345678 写入存储器时,同样是1写在高地址,8写在起始地址(即最低地址),以上是我的理解,请问老师这样理解对吗?

Yvonne
管理员
23 天 前
回复给  wangff

1.D_PC的概念是指哈弗架构下数据存储器的PC,不是load和store指令中的“offset”,具体内容,可以参考这篇文章(RISC-V32个寄存器和译码模块(2)CPU硬件模块,https://www.icfedu.cn/archives/7067)及相应视频。D_PC在之后介绍RISC-V 核代码的时候会作详细的解释。

2.你的理解是正确的。

wx3E9Y49LGPB
wx3E9Y49LGPB
2 月 前

学习

wangff
wangff
3 月 前

本节课重点讲解了地址对齐中的小端格式(RISC-V采用的方式)、大端格式;加减法溢出处理的通用方式以及2种特殊方式(有符号溢出与无符号溢出)

相关链接