-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
我想请问
1.为什么ram读数据时地址要减去64'h0000_0000_8000_0000
2.ram的代码中读数据时不需要考虑是lb,lh,lw等等的这些吗,我看是直接读64位的
- 因为RAM中的数据是加载的objdump从elf可执行文件中生成的bin文件,可执行文件中从虚拟地址64'h0000_0000_8000_0000开始重定位,分配地址,而bin文件中将指令和数据从0开始放置。举个例子,int a = b[0]假设需要lw指令将b[0]的数据从内存中加载到寄存器里面,当我们生成可执行文件后,在链接的时候会进行重定位,根据规范,编译器会假设这个程序放置在从虚拟地址64'h0000_0000_8000_0000开始的一段空间,然后我们根据b[0]在数据段中的偏移和64‘h8000_0000这两个数可以计算b[0]的虚拟地址,最后填写到lw指令中,当你自己写的CPU运行到该指令时,会很自然地想要读取RAM这个地址(大于0x8000_0000)的数据,本来按照正常情况,这个地址确实应该有你想要的数据,但是我们bin文件是假设数据从0开始放置的,所以就需要你转换一下,减去0x8000_0000。
- 所以需要根据lb、lh和lw生成对应的控制信号——mask掩码来选取64位数据中自己想要的数据,当你编写Axi总线的时候,也要提供这样一个信号的。
Originally posted by @codefuturedalao in #9 (comment)
Metadata
Metadata
Assignees
Labels
No labels