时钟如何将手动逻辑转化为自动计算?

发布: (2026年1月5日 GMT+8 21:22)
9 min read
原文: Dev.to

Source: Dev.to

我们如何进行加法

要了解计算机的工作原理,首先让我们看看如何对一组数字进行相加,例如 [24, 34, 77]

  1. 将前两个数字相加
    24 + 34 = 58.
  2. 将中间结果(58)存储在内存中或写下来。
  3. 将最后一个数字加到中间结果上:
    58 + 77 = 135.

在此过程中,我们使用大脑作为“内存”来保存数字 58。

设计一个简单电路

电路组件

  • 8‑bit 开关 – 我们为什么需要它?
  • 加法器 – 执行加法。
  • 锁存器(内存) – 保存中间结果。

使用电路的加法序列

步骤锁存器(内存)输入加法器计算操作
开始0240 + 24 = 24通过按下开关(闭合电路)将 24 存入锁存器。
下一步243424 + 34 = 58将 58 存入锁存器。
下一步587758 + 77 = 135将 135 存入锁存器。

理论上这看起来很完美,但实际电路并不会这样工作。

问题:反馈回路错误

电流传播极快。当你按下手动开关时,只要手指保持在按钮上,门就会保持打开状态。即使是一次极短的按压(例如 0.1 秒),CPU 也会将其视为持续数千纳秒的“高”信号。

由于闩锁输出被反馈到加法器,形成了 反馈回路

时间情况结果
0 s按下按钮。0 (memory) + 24 (input) = 24.
0.1 s(仍在按压)锁存器检测到高电平信号,再次加上相同的 24。24 + 24 = 48.
0.2 s重复。48 + 24 = 72.

在你甚至来不及抬起手指之前,电路已经把同一个数字 加了数百次,产生了一个巨大的、错误的数值。这就是 反馈回路错误

根本原因: 电路保持“打开”状态的时间过长。我们需要它在每次点击时 仅打开一次,不受按钮按住时长的影响。

理解按钮按压(情景)

按键次数按住时间释放时间
11 s2 s
23 s1 s
30.5 s

如果绘制波形,如下所示:

  • 高电平(上)——按钮被按下。
  • 低电平(下)——按钮未被按下。

信号的四个阶段

  1. 上升沿 – 按钮被按下的瞬间 (0 → 1)。
  2. 高电平 – 按钮保持按下的持续时间。
  3. 下降沿 – 按钮被释放的瞬间 (1 → 0)。
  4. 低电平 – 按钮未被按下的持续时间。

上升沿下降沿在每次按压中只出现一次,无论按钮保持多长时间。如果我们让电路仅对上升沿作出响应,就能实现每次点击恰好一次的加法

锁存器 vs. 触发器

FeatureLatch (Level‑Triggered)Flip‑Flop (Edge‑Triggered)
Activation在整个高电平期间保持激活仅在上升沿触发
Control难以控制(持续)精确的单脉冲操作

解决方案: 将锁存器替换为 Flip‑Flop,并使用按钮的 CLK(时钟) 引脚驱动它。

解决方案:边缘触发

重新设计电路

  1. 用 Flip‑Flop 替换 latch
  2. 将加法器的输出 直接连接到 Flip‑Flop 的数据输入。
  3. 将按钮 连接到 Flip‑Flop 的 CLK 引脚。

操作顺序

步骤Flip‑Flop 状态输入加法器计算操作
Start0240 + 24 = 24在上升沿,Flip‑Flop 捕获 24 并忽略按压的其余部分。
Next243424 + 34 = 58在下一个上升沿捕获 58。
Next587758 + 77 = 135在下一个上升沿捕获 135。

一些 CPU 电路(例如计数器)是由 flip‑flop 构成的。

使用时钟信号实现自动化

时钟周期概览

周期阶段描述
1加法器阶段上升沿 – 输入送入加法器。
高电平 – 加法器执行加法。
下降沿 – 加法器完成计算(传播延迟)。
低电平 – 电路等待,使结果稳定。
2捕获阶段上升沿 – 触发器锁存加法器的结果,系统进入下一个数字。
高/下降/低电平 – 为下一次加法做准备。

大脑:控制单元

在真实的 CPU 中,控制单元 像指挥家一样工作。它使用内部计数器来跟踪时钟周期,并精确指示计算机的每个部件 何时发送数据何时保存数据

为什么加法器不是边沿触发的

与锁存器或触发器不同,加法器 没有时钟引脚。它 不会等待 某个信号来开始加法;它始终是“打开”状态。只要任意输入发生变化,输出(和)就会立即开始变化。

延迟 —— 对于加法器唯一需要考虑的时序因素是它的 传播延迟(propagation delay),即在输入变化后新和变得稳定所需的时间。正是这种延迟导致我们需要使用独立的时钟阶段(加法器 → 捕获)来确保可靠的工作。

传播延迟与时钟速度

输出并非“瞬间”完成,是因为 传播延迟——电流在加法器内部所有晶体管之间传播所需的物理时间。
我们必须确保时钟速度不要太快,否则触发器可能会在加法器完成计算之前就尝试存储结果!

添加数字 [24, 34, 77]

计算机将工作划分为 cycles(周期)。每个周期都遵循时钟的“心跳”。

CyclePhaseWhat Happens
1 – The WorkRising edgeflip‑flop 从 0 开始。系统将 0 和第一个输入 (24) 推入 adder。
High / Falling / Low levelsadder 执行加法。系统在 Low level 期间等待,以确保传播延迟结束,结果 (24) 稳定。
2 – The SaveRising edgeflip‑flop 捕获来自 adder 的 24。control unit 随后选择下一个数字 (34) 进行下一步。
High / Falling / Low levels什么也不做(数据仅被存储)。
3 – The WorkRising edgeflip‑flop(此时保持 24)和新输入 (34) 被送入 adder。
High / Falling / Low levelsadder 完成加法运算。到 Low level 结束时,结果 58 已准备好。
4 – The SaveRising edgeflip‑flop 捕获 58。control unit 选择最后一个数字 (77)。
5 – The Final WorkRising edgeflip‑flop 将 58 与输入 77 送入 adder。
High / Falling / Low levelsadder 完成计算。
6 – The Final ResultRising edgeflip‑flop 捕获最终总和:135

控制自动化

在这些周期结束时,加法器已经完全完成。这就是 受控自动化:每一步都有自己在时钟波形上的特定“时刻”,因此各操作永不冲突或相互干扰。

时钟的主要任务是 同步

  • 时钟频率必须根据系统中最慢的电路 来选择。在我们的例子中,加法器是最复杂的部分。
  • 如果时钟设置得太快,flip‑flop 可能会在加法器完成工作之前就尝试捕获数据。
  • 时钟的低电平 必须足够长,以覆盖加法器的 propagation delay,从而保证每一次捕获的结果都是 100 % 准确的。

受控自动化(代码仓库)

上述描述概述了代码仓库中使用的时序和同步策略。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……