Arm 如何在cortex M处理器中获取指令

Arm 如何在cortex M处理器中获取指令,arm,cpu-architecture,cortex-m,cortex-m3,Arm,Cpu Architecture,Cortex M,Cortex M3,据我所知,Cortex M0/M3处理器只有一个存储指令和数据的内存空间,只能通过内存总线接口进行访问。因此,如果我理解正确,处理器必须在每个时钟周期读取一条新指令才能进入管道,但这意味着总线将始终忙于读取指令,因此如何可以同时读取数据(例如加载字/存储字指令)? 此外,从内存读取指令的延迟是多少?因为如果它不是一个周期,那么处理器必须不断地停止自己,直到下一条指令被提取,那么它是如何处理的呢 感谢您所描述的被称为“冯诺依曼瓶颈”,在具有共享数据和程序内存的纯冯诺依曼体系结构的机器中,访问通常是

据我所知,Cortex M0/M3处理器只有一个存储指令和数据的内存空间,只能通过内存总线接口进行访问。因此,如果我理解正确,处理器必须在每个时钟周期读取一条新指令才能进入管道,但这意味着总线将始终忙于读取指令,因此如何可以同时读取数据(例如加载字/存储字指令)? 此外,从内存读取指令的延迟是多少?因为如果它不是一个周期,那么处理器必须不断地停止自己,直到下一条指令被提取,那么它是如何处理的呢


感谢您所描述的被称为“冯诺依曼瓶颈”,在具有共享数据和程序内存的纯冯诺依曼体系结构的机器中,访问通常是交错的。不过,你可能想看看“修改后的哈佛体系结构”,因为这基本上就是在这里使用的。备份存储像在冯·诺依曼机器中一样共享,但指令和数据获取路径像在哈佛机器中一样是分开的,关键是它们有单独的缓存。因此,如果指令或数据提取导致缓存命中,则不会发生内存提取,也不会出现瓶颈


恐怕你问题的第二部分没有多大意义,因为从指令周期的角度讨论指令获取时间是没有意义的。根据定义,如果指令提取由于某种原因而延迟,则该指令(以及后续指令)的执行必须延迟。通常,这是通过将NOP插入管道直到下一条指令准备就绪(称为“冒泡”管道)来完成的。

re:第2部分:指令提取可以管道化,以隐藏部分/全部提取延迟。Cortex-M3有一个带3字FIFO的预取单元。 (最多可容纳六条16位Thumb指令。)

该缓冲区还可以在数据加载/存储发生时提供指令,这些指令在配置中相互竞争(不是哈佛拆分总线,也没有数据或指令缓存)


这种预取当然是推测性的;丢弃在树枝上。(它很简单,很小,不值得做分支预测来尝试在解码之前从正确的位置获取,甚至知道即将到来的指令流包含分支。)

是的,这就是它的发生方式,处理器会大量暂停,这在大处理器和小处理器中都会发生,很难为流水线处理器提供数据(尽管其中一些管道在cortex ms上较浅,但仍采用管道连接)

我使用过的许多部件,我接触过大多数供应商,闪存的时钟速度为内核的一半,因此即使在零等待状态下,您也只能每隔一个时钟收到一条指令(平均而言,开销自然会增加)如果一次取一个半字,如果一次取一个字,而很多内核都提供了这样的功能,那么理想的情况是每两个时钟取两条指令,或者每只拇指取一条指令。2当然,你会受到影响。ST肯定有一个预取器/缓存器,它有一个别致的营销名称,做得很好。其他人也可能会提供,或者仅仅依靠什么arm提供的服务各不相同

不同的cortex ms有不同的总线混合。我讨厌冯·诺依曼/哈佛的参考文献,因为实际的哈佛架构几乎没有实际用途,因此“修改”形容词,意思是他们可以做任何事情,并试图吸引学校教授哈佛意味着性能的人。总线可以有多个事务在飞行中,有不同数量的总线,当你进入并释放外围设备的时钟时,这是有点明显的,apb1时钟控制ahb2时钟控制等外围设备,fl但是我们可以从sram运行代码,所以它不是哈佛。忘记哈佛和冯·诺依曼的术语,只关注实际的实现

总线文档和核心文档一样容易获得。如果您购买了合适的fpga板,您可以要求免费评估核心,然后您可以近距离了解其实际工作方式

一天结束时会有一些并行性,但在许多芯片上,闪存的速度只有一半,因此如果你没有获取2个/s或其他解决方案,你几乎无法实现,并且如果你有其他相同的总线访问,就会经常停滞。同样地,在许多芯片上,外围设备的运行速度无法与内核的运行速度一样快,因此仅此一项就导致了停滞,但即使是如果外设在同一个时钟上运行,并不意味着它可以像sram一样快速地完成csr或数据访问,因此您也会在那里发生暂停

没有理由认为,从这些部件中获得的每时钟一条指令的性能会超过一个全尺寸arm或x86或其他部件

虽然有一些重要的细节没有文档记录,只有在获得核心时才能看到,但每个核心和总线上都有文档记录,以便大致了解如何调整代码以提高性能,或者如何调整代码的实际性能。我知道我已经在这里和其他地方演示了这一点,即使使用ST来查看闪存和sram之间的性能差异,并查看执行基准测试所需的时钟比指令多

你的问题在几个方面都太宽泛了,cortex-m0和m3有很大的不同,一个是第一个推出的,功能丰富,另一个是根据尺寸调整的,一般来说只有很少的东西不一定要以这种方式竞争。那么延迟时间有多长,等等,这完全是芯片公司和芯片公司的家族纽约的问题非常广泛,所有的cortex-m产品都有,对这个问题有几十种不同的答案。ARM制造核心而不是芯片,芯片供应商制造芯片,从不同的地方购买IP,制造他们自己的,一些小部件