# 4.2. 时钟：计算机中的时间模型

到目前为止，不管我们是讨论组合电路还是时序电路，都没有考虑时间的因素，我们认为输入信号改变之后，输出信号的变化是完全实时的。而在现实中，所有的事情都会有延迟，一来电路组件的多个输入信号不可能达到“理论上”的同时输入，总会存在一个时间差，而且一个电路组件的输入信号通常是其它组件的输出信号，这会导致输入信号到达的时间差更加不可控；二来电路组件在进行“计算”时总是需要花费时间，“计算”的本质就是电子信号从电路的输入引脚传达到输出引脚的过程，所以电路越复杂，所需要的时间也就越多。所以对于任意的电路组件，当提供了输入信号之后总是要“等一会儿”，然后输出引脚上的信号才会变成正确的结果，这个等待的过程叫着同步。

如何确定同步时长，是芯片设计的重要考虑因素！

芯片就是一块集成了数以亿万个基础逻辑门的复杂电路，这些基础逻辑门像搭积木一样构成了最终的产品，此处我们将其看着一个黑盒，当提供不同组合的输入时，电子信号通过不同的路径最终形成输出结果，这里的输出结果可能是输出引脚上的信号，也可能是对内部状态的某种修改，不同路径代表着不同的计算，我们将这个过程看着是芯片执行了一条指令。不同指令的用时是不一样的，为了保证每条指令都正常执行，我们需要使用**耗时最长的指令所需要的时间**作为整个芯片的同步时长。

假设芯片的同步时长为 t, 也就是说系统在运行过程中，需要一种触发机制，在 0, t, 2t, 3t, … 等时刻触发芯片执行下一条指令。这种时刻的划分方式被称为时钟，而同步时长 t 被称为时钟周期。可见时钟周期的频率就是系统执行指令的频率，因此在设计时钟周期时，一方面要让其足够长，能够无差错地同步系统；另一方面也需要其尽量短，以便提升系统的运行速度。当前的主流 PC 处理器的时钟频率已经达到了数 GHz 级别，也就是说每秒钟 CPU 能够执行几十亿条指令。

&#x20;模拟时钟信号的电子元件叫着振荡器（Oscillator），振荡器周期性地在 0, 1 这两种状态之间变换，完整的一次变换就等价于一个时钟周期。下图的脉冲信号是时钟周期的一个可视化效果：

![Clock](/files/-MdWMhK-kFm4omPBsQ_Z)

可见现实世界中连续的时间，在计算机系统中被划分成了一个个等长的单位，变成了一个离散的概念。在这种时间模型下，整个系统的状态都是与时钟周期挂钩的，对系统状态的任何改变都要在下一个时钟周期才完全生效，而在同一个时钟周期内，系统的状态变化被看着是一个不可分割的原子行为。

在计算机系统中，统一的时钟信号会接入到所有的芯片中，以确保整个系统在相同的节奏下工作。

> 我们此处默认了一个情况，即我们的设计采用的是[同步电路](https://en.wikipedia.org/wiki/Synchronous_circuit)而不是基于事件的[异步电路](https://en.wikipedia.org/wiki/Asynchronous_circuit)。
>
> 在将多个电路组件组合起来时，同步电路需要等待自己上游电路的输出结果，因此需要通过时钟来进行同步；而异步电路是基于事件通知的，不需要时钟。同步电路设计起来更简单，异步电路更加复杂，因此现在的芯片设计都是基于同步电路进行的。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://s2.shizhz.me/s2e4/2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
