【发布时间】:2016-05-13 01:10:05
【问题描述】:
在我们的嵌入式平台上,某些设备具有 16 位数据总线(例如 FPGA)。但是,我们需要将它们读取为 32 位值(例如 32 位浮点)。
我的理解是,当 16 位内存被 32 位数据加载指令 (LDR) 访问时,ARM 处理器会执行 2 次 16 位取指来组装一个 32 位数量。
这是正确的吗?
例如,我希望 ARM 处理器从具有 16 位数据总线的设备中加载 uint32_t 值,而不必进行 2 次 uint16_t 读取,然后将 uint16_t 值合并为一个 uint32_t 变量.
我们是否需要显式获取 2 个 16 位数量,然后组装为 32 位数量?
哪些 ARM 文档包含此说明?
是否有任何特定的 ARM 配置设置让 ARM 从 16 位数据总线进行 2 次提取以形成 32 位数量(在寄存器中)?
仅供参考:我们使用的是 ARM Cortex A8 和 IAR EW IDE/编译器。
平台运行的是“系统”模式而不是“拇指”模式。
【问题讨论】:
-
用户手册......
-
amba/axi 文档。你有一个 16 位宽总线的 Cortex A8 吗?我会假设 64 位宽,也许是 32,但 16 没有意义。顺便说一句,总线和处理器负责所有这些,请参阅 amba/axi 文档。在非 64 位对齐的地址上针对 64 位宽 axi 的 8 字 stm 指令至少会导致奇数字的长度为 1 传输,然后是长度为 3 的传输和另一个长度为 1 的传输来处理另一个奇数单词。所有这些都由硬件神奇地处理,软件永远不需要关心。
-
(除非你是在推平台的性能或者是在测试芯片设计)
-
所有这些都在芯片内处理,如果您的 fpga 在该芯片上的某个总线上,那么您必须查看该芯片供应商的文档。如果您在 fpga 中使用 arm,那么您可能可以直接访问 amba/axi,或者您可能需要查看 fpga 芯片供应商的文档。不管它是什么都有据可查,这取决于你附加到什么接口。
-
你太复杂了,拇指模式在这里也无关紧要,它被转换成手臂指令,然后被送入管道和/或它与 amba/axi 总线或其他总线无关在远端,总线上没有任何东西表明正在使用的指令集解码器。
标签: c arm fetch cortex-a8 databus