尝试通过示例了解时钟周期

时间:2013-02-11 19:53:58

标签: embedded microcontroller clock microprocessors

我正在努力完全理解时钟周期是什么,所以我想出了一个测试示例,我希望有人确认或驱散并提供更好的理解。如果我有这么简单的代码行,在设备上运行的while循环

while(true)
{
  int x = 5;
}

命令:int x = 5是否每个时钟周期执行一次?换句话说,时钟速度是指设备能够在每单位时间内读取和执行命令的速度吗?

3 个答案:

答案 0 :(得分:9)

时钟周期只是振荡器的一个周期,它驱动处理器的逻辑,处理器在该周期内可能实现的功能取决于处理器架构和其他因素,如内存速度。

您的示例中的代码采用高级语言,如果直接翻译,几乎可以肯定会转换为多个计算机级指令。例如,在伪机器代码中:

loop:
   MOV addrx,#5
   JMP loop

这将是每个循环至少两个机器周期。高级代码与生成的机器指令之间几乎没有或没有确定性关系;虽然在这个简单的例子中,它似乎也是如此。

问题因处理器如何实现指令集而变得更加复杂。典型的RISC处理器在单个周期内执行指令,而在CISC处理器上,不同的单个指令各自根据其复杂性采用不同的周期数。

另一个考虑因素是内存总线延迟。通常,处理器能够以比能够访问存储器更快的速度执行指令,这对于闪存尤其如此。访问较慢内存的指令可能会引入等待状态,其中处理器停止运行直到数据到达。

某些处理器能够并行执行指令,允许在一个周期内执行多条指令。其他人使用SIMD(单指令多数据)指令,可以同时对不同的数据执行相同的操作。

另一种影响指令吞吐量的技术是管道,其中一条指令可能需要多个周期,但是每个周期都可以启动一条新指令,所以说5个四周期指令是否一个接一个地开始,结果是每个周期产生一次。

一些处理器采用哈佛架构,该架构使用单独的总线来同时提取数据和指令。

采用其他技术来维持指令吞吐量,例如分支预测。高级语言编译器通常会生成代码,以最大限度地发挥上述所有技术的潜力。

通常,为特定架构提供的性能指标是MIPS / MHz - 表示每个时钟周期通常执行的指令数(在许多时钟周期内分摊)。例如,ARM Cortex-M3管理1.25 MIPS / MHz,而瑞萨SH-4则达到1.8 MIPS / MHz。

答案 1 :(得分:6)

我从哪里开始......

任何处理器都有一个“时钟”,可以确保在下一件事发生之前,电子元件有时间从一种状态转换到另一种状态。在现代设备的速度下,没有任何东西是“瞬时的” - “阶梯”变成“斜坡”,甚至非常短的痕迹也会导致电子信号传输的延迟。

根据CPU的架构,它可以“在一个时钟周期内”执行某些操作,而其他操作则需要“多个周期”。想想长除法 - 你做了一系列减法 - 移位操作,在完成上一部分操作之前,你不知道接下来需要做什么。另外,更容易看到如何在一个循环中实现完整的操作。

当特定的“高级”指令被转换为机器代码时,生成的代码可能需要一个或多个周期 - 而简单的指令可以采取一个或多个步骤。根据编译器,目标和所选的优化,以上任何一种情况都可能发生在您的上述代码中:

  • 编译器意识到“while”条件始终为true,并且循环内部没有任何变化。它进一步意识到你从不使用x的值,它选择不执行所有指令

  • 编译器决定对int变量x使用内置寄存器,并在编译时对其进行初始化。执行循环期间没有时间

  • 编译器将'5'加载到寄存器中,查找表中x的偏移量,计算指针,并将寄存器复制到偏移地址中。可以是任意数量的周期。

不确定这对你有什么帮助 - 但问题相当复杂......

答案 2 :(得分:2)

不幸的是,它并不像你建议的那么简单。

您可能想看看relatedt wikipedia arcticle http://en.wikipedia.org/wiki/Sequential_logic

试图简化时钟周期是同步操作电路从一个定义状态切换到下一个定义状态所需的时间。

事实上,它通常与CPU执行指令所需的时间有关。您可能需要查看CPU的手册,执行时间通常是执行所需指令所需的时钟周期数。

不幸的是,实际上并不是那么简单,因为有些聪明的CPU如果满足特殊要求就能更快地执行指令。例如。通过指令流水线推送指令,cpu可能已经开始对下一条指令进行操作,而previos指令的一部分时间超过一个时钟周期仍在处理中。

如果指令可能会重新排序,如果他们的重新排序不会改变程序流程,或者指令会提前进行推测计算,那么甚至可能会重新排序。

另一方面,一条指令在时钟周期方面运行可能需要更长的时间,如果必须从存储器中取出指令,这将花费更多的时间。