如果RISCV LOAD比存在的内存更宽,会发生什么?

时间:2016-11-09 15:39:24

标签: memory assembly riscv

以下程序的行为是什么?

li t0, 0xFFFFFFFF
lw t1, 0(t0)

是否定义了此实现(MMU或执行环境)?我在RISC-V规范中找不到这种情况。

1 个答案:

答案 0 :(得分:1)

RISC-V特权ISA将物理内存分为三种类型:主内存,I / O和空。

  

空区域也被归类为I / O区域,但具有属性   指定不支持访问。

该文件继续说,与主存储器(总是支持R / W)相反,I / O区域,因此空区域,可以指定支持哪种访问。

  

I / O区域可以指定读取,写入或执行访问哪些数据宽度的组合   得到支持。

每个区域都有一个或多个物理内存属性(PMA),表明区域是否被缓存,支持原子操作,是否有序以及支持哪种数据大小。

必须由硬件检查区域的PMA,如果违反任何约束,则报告陷阱或中断:

  

检查PMA是否有对物理内存的任何访问,包括已经过虚拟到物理内存转换的访问。为了帮助进行系统调试,我们强烈建议尽可能使用RISC-V   处理器精确地捕获PMA检查失败的物理内存访问。例如,当探测使用访问失败的传统总线体系结构作为发现机制的一部分时,可能并不总是可能存在精确的PMA陷阱。在这种情况下,来自从设备的错误响应将被报告为不精确的总线错误中断。

规范并未对空区域强加任何PMA,也没有定义任何PMA值,它明确指出

  

由于PMA与给定的物理平台组织紧密相关,因此许多细节本身就是特定于平台的,因此   软件可以通过哪种方式学习平台的PMA值。

当访问不存在的RAM地址时,由实现定义的特定微架构会发生什么。

通常,存储器总线具有上拉/下拉电阻。在这种情况下,从不存在的地址读取将导致由1或0组成的单词,并且将忽略写入。

根据硬件的不同,结果可能是任何事情,甚至是在总线上发出故障事务的异常信号。