什么是机器周期?

What exactly is a machine cycle?

我对 "machine cycle" 的确切定义有点困惑。

比如网上有些source说是:

The four steps which the CPU carries out for each machine language instruction: fetch, decode, execute, and store.

而据称享有盛誉的书 Programming the Z80 说:

We have seen that all instructions are executed in three phases: FETCH, DECODE, EXECUTE. We now need to introduce some definitions. Each of these phases will require several clock cycles. The Z80 executes each phase in one or more logical cycles, called a "machine cycle."

现在让我困惑的是——据我了解——第一个基本上是说:机器周期是一个获取-解码-执行周期,而这本书基本上是说:一个机器周期是在每个取指、解码或执行周期中发生的一个或多个时钟周期单独

那么,什么是什么?

The four steps which the CPU carries out for each machine language instruction: fetch, decode, execute, and store.

这些步骤中的每一个通常都会在不同的周期中发生。 "Execute"是一个复杂的过程,涉及一些子步骤和大量的运行sistors,但对于大多数指令来说,它仍然可以在一个周期内完成。这就是在这些地方设置 CPU 部分之间边界的部分原因。


the first one is basically saying: A machine cycle is a fetch-decode-execute cycle

不,它不是这么说的。那是完全错误的。旧的非流水线 CPUs 通常每个周期的吞吐量少于一条指令,因为 每条指令在下一条指令开始之前需要多个周期


一个CPU时钟周期,或机器周期,是一个从低电压到高电压再返回的周期。 https://en.wikipedia.org/wiki/Clock_signal。 CPU 使用此时钟输入来同步各个步骤。

CPU 的最大时钟速度受单个时钟周期内需要发生的最慢事件的限制。例如也许解码阶段有很多 gate delays,所以如果时钟 运行 更快,当时钟 t运行从高到低定位。

流水线 CPU 将尝试同时占用其各个阶段,而不是等到一条指令执行完毕后再解码(或什至获取)下一条指令。参见 https://en.wikipedia.org/wiki/Classic_RISC_pipeline

z80有两个不同的概念"cycle"。区别很重要,因为 z80 是一个多周期架构,它每个 "step" 使用多个时钟周期,并且(通常)每个指令使用多个 "steps"。

"steps" 被称为机器周期(M-cycles),它们执行 "high level" 任务,例如从内存读取,执行 ALU 操作等。复杂指令,例如 inc (iy+42) 需要很多机器周期,用于解码前缀、主操作码、读取偏移量、将其添加到 iy、进行增量并写回结果。条件跳转甚至有不同数量的 M 循环,如果条件为假,它们会省略执行实际跳转的 M 循环。

然后每个 M 周期需要多个(3 到 6)个时钟周期(也称为 T 周期或 T 状态,除非指的是旧的多周期处理器,否则这个术语几乎已经失效)。例如,内存读取需要 3 个周期,操作码解码通常需要 4 个周期,一些内部操作需要 5 个周期,而 16 位增量似乎以某种方式将 OCF 延长了另外 2 个周期。

这完全是 z80 特有的。

在其他地方,术语 "machine cycle" 已用于指代某种指令的 "complete trip" 从开始到结束。这不是 z80 上下文中的意思。