从电铃得到启发,制作CPU时钟

不知您是否还记得小时候学校里的电铃?——是的!铃声响起就可以拎着书包往外跑那种!但我想说的不是这个,而是它的工作原理。不知您是否知晓呢?

电铃

如果将继电器、电池、和开关接成这样的电路,会发生什么事情呢?

这个电路有点古怪,因为继电器的输入和输出被接在一个回路中;而以前看到的接法,都是分开的。不过没关系,我们一起来思考:开关闭合后会发生什么事情?

  • 开关闭合后,电路连通;
  • 电路连通,电磁铁产生磁性,闸刀被吸引下来,电路断开;
  • 电路断开,电磁铁失去磁性,闸刀恢复原状,电路又连通;
  • 电路连通,电磁铁产生磁性……

因此,开关闭合后,闸刀将不断重复下拉和恢复的动作。如果在闸刀上安装一个小锤子,然后在旁边放一个铃,我们就得到一个电铃!开关闭合后,闸刀带动锤子不断敲铃,从而发出铃声。

您可能会觉得奇怪,我们要制作脉冲时钟,扯电铃干嘛呢?请稍安勿躁,谜底马上就揭晓!

反馈电路

同样,我们可以将电池换成更抽象简洁的电源和接地符号来表示:

看到这个图示,您应该可以马上想起 非门 。非门也是以 d 端为输入,以 b 端为输出,ae 端作为供电。这个电路只是将非门的输出重新连回输入,可以直接用非门符号这样简化:

  • 开关断开时,非门没有电压输入,因而有电压输出,灯泡常亮;
  • 开关闭合后,非门输出端的电压加到输入端,导致输出端失去电压,灯泡熄灭;
  • 输入端跟着输出端又失去电压,导致输出端恢复电压,灯泡又亮;
  • 输入端跟着输出端又获得电压,导致输出端失去电压,灯泡又灭;

由此,灯泡一会亮一会熄灭,周而复始。非门则一会输出电压( 1 ),一会失去电压( 0 ),波形图为一个典型的脉冲方波。这个方波就像一阵阵鼓声,指引着其他部件有条不紊地工作。

波形图横轴为时间,表示距离此刻 t 时间之前;纵轴为非门输出,1 表示输出电压,0 表示不输出电压。

我们注意到,这个电路有一个显著的特点:非门的输出被连回输入端。像这种输出反过来作用到输入上的电路,通常被称为 反馈电路feedback )。

振荡器

如果我们将开关也省略掉,就得到一个这样的电路:

这个电路看上去有点互相矛盾:

  • 非门输入跟输出应该相反;
  • 但输入跟输出连在一起,意味着它们应该相同;

不过您不要忘了,电子元器件从输入到产生输出是需要时间的!以实现非门的继电器为例,从输入端发生变化,到其内部闸刀发生拨动,是有一定时间差的!

因此,即使输入和输出端都是相同的,输出端过一段时间后就会发生改变,成为输入端相反的状态。输入端被动改变后,输出端又会再次改变,如此反复。

那电路输出什么呢?其实很简单,就是要么输出电压,要么没有电压,不断循环切换。如果用抽象的数学语言来描述,就是一会输出 1 ,一会输出 0 ,反复切换。

这种电路被形象地称为 振荡器oscillator ),输出在不同状态间来回震荡。振荡器电路比较特别,它不带任何输入,也不用人为控制,即可自发的生成震荡信号。

计算机内部就是用这样的振荡器,来协调各种组件,让它们同步工作的。

时钟频率

振荡器总是在两个状态间来回切换,因此输出构成一个典型的方波:

振荡器从某个状态开始,经过一段时间后又回到原来的状态,这个过程定义为振荡器的一个 循环cycle ),一个循环占用的时间就是振荡器的 周期period )。

振荡器每秒钟经历的循环个数称为 频率frequency ),单位为 赫兹Hz )。假设某个振荡器的周期为 0.05 秒,那么它的频率是:$\frac{1s}{0.05s} = 20$ (每秒 20 个循环)。因此,频率 f 是周期 p 的倒数: $f = \frac{1}{p}$ 。

振荡器的周期通常是固定的,因此可以利用循环计数进行计时。正因为这点,振荡器又经常被称为 时钟clock )。时钟的运行速度由频率决定,频率越高,时钟每秒经历的循环次数越多。

CPU 的时钟频率,即 CPU 的主频,是衡量 CPU 性能的重要指标。主频越高,CPU 每秒能执行的指令数越多,意味着 CPU 执行速度越快。

现代 CPU 频率大多以 GHz 为单位来衡量,这个单位相当于 10 亿 Hz ,即每秒经历 10 亿个周期。我们利用电铃制作的时钟显然达不到这个速度,不过它们的作用都是一样的!

小菜自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注:

【自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注: