我试图了解当STM32H7(Cortex M7)正在执行LDRB指令时(假设缓存被禁用,为简化起见),物理上数据总线上会发生什么。是否有32位访问内存并且4个字节中的3个被废弃了?是否取决于内存类型?如果代码在连续地址上执行四个LDRB,那么与周期数相比,如何与执行单个32位LDR进行比较?
答案 0 :(得分:2)
Cortex-M7具有64位AMBA4 AXI接口。
这只是答案的一部分,因为该数据总线将在某处连接到STM32H7的存储器,但是我们可以假定该存储器的接口至少与总线一样宽。内存控制器很可能会从内存中读取全宽(但可能不是以核心频率读取)。
读取的数据将在总线上返回,无论握手花费了多少周期,占用读取通道。对于字节读取,返回的数据应该是一个字节。
执行4字节读取可以避免外部存储器访问,但会使总线忙于4个传输。总线可以支持多个未完成的传输(受芯片设计限制,而不是处理器限制)。在架构上,允许处理器 合并传输(但这自然可以由已禁用的缓存来完成)。
一阶近似,因为有一个64位的AXI,所以可以以与执行4字节读取相同的周期数加载8个32位寄存器。实际上,它可以更快,因为您可以使用单个LDM
而不是4 LDRB
指令,并且取指令共享同一条总线。
应该注意的是,存储是potentially more complex,因为更难建立忽略部分写入数据的逻辑,并且合并写入也相当容易。
(这是一个“通用”答案,而不是M7微体系结构的反映,您需要进行自己的基准测试以了解问题的详细含义)。