棋子 · 2019年12月18日

如何从32位到64位AHB数据总线

我必须为具有64位数据总线(ARM11,Cortex-R4)的ARM处理器编写C程序,然后再执行一些仿真(Verilog)。到目前为止,我仅使用具有32位宽AHB数据总线(ARM9)的处理器。当我从32位数据总线转换为64位数据总线时,我还不清楚在这里对我有什么变化?在此问题上,我必须考虑哪些主要考虑因素?我为ARM966编写的程序是否可以为ARM11编译,并且ELF文件中的全局更改是什么?我假设ARM指令和地址总线为32位宽(并且还没有ARM处理器具有32位宽的地址总线)。我打算将ELF文件放入64位宽的Verilog存储器中进行仿真-在这种情况下,是否所有内容都必须对齐8个字节?
请给我一些有关这些问题的评论。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2019年12月18日

从程序员的模型角度来看,没有什么可担心的。您为ARM9编写的C程序可以被编译并以ARM11为目标。但是,当然,诸如MMU设置和CP15寄存器之类的东西将有所不同。

对于Verilog仿真,可以使用32位或64位内存。
如果使用的是ARM1136(64位AHB),则可以使用AHB精简器将总线转换为32位AHB,然后使用32位内存仿真模型。
AHB缩小器是AMBA开发套件(ADK)的一部分。当然,您也可以开发64位AHB存储器仿真并直接连接到64位AHB。您可以像往常一样将数据数组创建为32位,将程序映像读取到该数组中,然后为每个64位访问将两个字合并为一个64位数据。代码和数据不必是64位对齐的。但是,如果您使用的是双字数据,则将其与8字节边界对齐将有助于提高访问速度。

对于Cortex-A8(AXI总线),ARM Fabric IP还具有可配置的AXI组件,该组件可以将64位AXI总线转换为32位总线,您可以使用我们的AXI内存控制器之一,例如PL350。在这种情况下,您可以将内存模型开发为SRAM类型的设备。
上0下

你的回答