处理器指令周期执行时间

bun*_*ive 6 stm32 execution-time machine-instruction nop cortex-m

  • 我的猜测是__no_operation()内部(ARM)指令应该执行1 /(168 MHz),前提是每个NOP指令在一个时钟周期内执行,我想通过文档验证.

  • 是否有关于处理器的指令周期执行时间的信息的标准位置?我试图确定STM32f407IGh6处理器执行运行在168 MHz的NOP指令应该花多长时间.

  • 某些处理器每个指令周期需要多次振荡,有些处理器在将时钟周期与指令周期进行比较时为1比1.

  • 术语"指令周期"甚至不存在于STMicro提供的整个数据表中,也不存在于他们的编程手册中(列出处理器的指令集,顺便说一下).但是,8051文档明确定义了其指令周期执行时间,以及其机器周期特性.

old*_*mer 5

所有指令都需要一个以上的时钟周期来执行。获取、解码、执行。如果你在 stm32 上运行,你可能会因为舞会的缓慢而每次获取几个时钟,如果从知道它是 168Mhz 或更慢的 ram 运行。arm 总线通常需要一些时钟周期来做任何事情。

没有人再谈论指令周期,因为它们不是确定性的。答案总是“视情况而定”。

制造一辆汽车可能需要 X 小时,但如果你开始制造一辆汽车,那么 30 秒后开始制造另一辆,每 30 秒开始另一辆,那么在 X 小时后,你将每 30 秒拥有一辆新车。这是否意味着制造汽车需要 30 秒?当然不是。但这确实意味着一旦启动并运行,您可以在该生产线上平均每 30 秒生产一辆新车。

这正是处理器的工作方式,每条指令需要多个时钟才能运行,但是您将主题流水线化,以便同时在管道中进行许多处理,因此平均值是这样的,如果每个时钟给内核一个正确的指令,每个时钟可以完成一个指令。有了分支和缓慢的内存/ROM,你甚至不能指望得到它。

如果你想在你的处理器上做一个实验,然后用几百个 nops 做一个循环

beg = read time
load r0 = 100000
top:
  nop
 nop
nop
nop
nop
nop
...
nop
nop
nop
r0 = r0 - 1
bne top
end = read timer
Run Code Online (Sandbox Code Playgroud)

如果完成该循环需要几分之一秒,那么要么增加 nops 的数量,要么让它运行一个数量级的循环。实际上,您想要击中大量的计时器滴答声,不一定是挂钟上的秒或分钟,而是一些大小适中的计时器滴答声。

然后进行数学运算并计算平均值。

将程序放在 ram 而不是 rom 中重复实验

将处理器时钟减慢到不需要闪存除数的最快时间,重复从闪存运行。

作为 cortex-m4 打开 I 缓存,重复使用闪存,重复使用 ram(168Mhz)。

如果使用相同的测试循环,您没有从所有这些实验中获得一系列不同的结果,那么您可能做错了什么。

  • 这意味着如果您连续执行数十或数百次,平均每条指令将是一个处理器时钟周期。 (3认同)

jud*_*acl 5

如果您在复位和时钟控制 (RCT) 中仔细配置所有时钟,并且了解所有时钟,则可以准确计算大多数指令的指令执行时间,并至少对所有指令进行最坏情况评估。例如,我使用的是 stm32f439Zi 处理器,它是与 stm32f407 兼容的 cortex-m4。如果您查看参考手册,时钟树会向您显示 PLL 和所有总线预分频器。就我而言,我有一个带有 PLL 的 8 MHz 外部石英,配置为提供 84 Mhz 系统时钟 SYSCLK。这意味着一个处理器周期为 1.0/84e6 ~ 12 ns。

\n\n

如需了解一条指令需要多少个周期或 SYSCLK,请使用ARM\xc2\xae Cortex\xc2\xae\xe2\x80\x91M4 处理器技术参考手册。例如,MOV 指令在大多数情况下需要一个周期。大多数情况下,ADD 指令需要一个周期,这意味着 12 ns 后,加法结果存储在寄存器中,可供其他操作使用。

\n\n

在许多情况下,您可以使用该信息来调度处理器资源,例如定期中断,并且电气和低级嵌入式系统软件开发人员正在谈论这一点,并且在涉及严格的实时性和实时性时正在这样做。安全关键系统。通常,工程师在设计过程中会考虑最坏情况的执行时间,而忽略管道以获得快速而粗略的处理器内部负载。在实施过程中,您将使用工具进行精确的时间分析并改进软件。

\n\n

在设计和实现的过程中,不确定性的事情被减少到可以忽略不计。

\n