计算机是怎么运行的?为什么它可以自动化的工作?这和时钟信号又有什么关系?

什么是晶振和时钟(信号)呢?在了解晶振和时钟之前,我们先来思考这么几个问题:计算机为什么需要晶振?计算机为什么需要时钟?晶振和时钟有什么关系?是什么将它们两个联系在一起?

计算机为什么需要晶振?计算机为什么需要时钟?在微机原理课上,你可能已经了解或知道,晶振就是用来产生时钟的啊,这两个问题是一回事吧?没错,晶振确实是用来产生时钟的,换句话说,如果计算机不需要时钟,那么产生时钟的晶振也不被需要了。所以,这两个问题的根落在了第二个问题上,计算机为什么需要时钟?在思考这个问题之前,还要再问自己一个问题,计算机一定要有时钟吗?时钟是用来干什么的呢?

如无特别说明,本文的时钟都是指时钟信号

如果不清出计算机到底是不是必须需要时钟,没关系,我们先来看看计算机是怎么工作的,在你按下了电源键之后,计算机的内部究竟发生了什么?本来现在可以来说这个问题了,但是好像只知其然而不知其所以然,感觉总缺点什么,因为我们好像还没说计算机是怎么一步一步发展到今天的,不去了解它的过去,又怎么去读懂它呢?关于计算机的发明史,就是人类科学技术的进步史。

第一话:电

计算机能发展到今天的成就,得益于很多其他学科所取得的成就,在电子计算机发明的前夜,我们细数一下那些在历史的长河中流光溢彩的成就。你要了解计算机,那么就要从电开始,因为电流是计算机得以工作的真正血脉。自从富兰克林发明了电,后人围绕着电的研究和发明就开始了。而电的老家是原子,直到道尔顿的出现,才真正完成了完整意义上的,科学的原子理论。后来人们逐渐发现了电压电流电路和电路图等,电学开始逐渐发扬光大。后来有人想到用电来表示数,开关可以控制电流的通断,而开关只有两种状态,要么开,要么关,所以只需要用两个数就能表示,这恰巧就是二进制啊,而二进制早在电发明的一个世纪前,就已经被莱布尼兹发明了。自此,二进制和电学结下了不解之缘,当开关断开时,电流被切断,这代表0;当开关接通时,电路中有电流通过,这代表1。或者再简单点, 有电表示1,没有电表示0,所以,二进制因为和电学的深厚交情,而电又是电子计算机的根本,所以二进制自然也就成了计算机的根基,这就是计算机的0-1世界。不过现在离电子计算机的诞生还早的很,但是历史的车轮滚滚向前。掌握了二进制和电,人们开始用开关设计电路,使它们可以完成二进制的加法运算,这个电路就叫全加器。随后又利用大量的全加器构成一个串联电路,这就是加法机。不过这个时候,你控制电路只能用手来不停的拨弄开关。

第二话:电子计算机发明的前夜

后来,奥斯特发现电可以生磁,有人就在铁上缠了线圈然后通电,可以吸附小铁钉,这就是电磁铁。有了电磁铁的西铁特性,在它的基础上,又发明了继电器,莫尔斯电报就是用这个来工作的。又过了几年,法拉第发现了磁还可以生电,于是贝尔把一个线圈放进磁场中,并用一个纸片相连,由于说话时候产生声波,会让纸片振动,然后就会带动线圈在磁场中运动,这样就能产生强弱随时间变化的电流,于是电话就诞生了。后来的事就是爱迪生大战交流电,麦克斯韦预言了电磁波的存在,赫兹证明了电磁波的存在。电磁波又叫无线电波,自此人类进入了无线电通信的开端。到这里,离电子计算机的发明还很远,但是前面所有的发明,为后来计算机的诞生创造了可能。刚才一直再说的都是各种新技术的发明,其实在新技术不断大明的同时,人类的思维也在不断进步。计算机凝结了人类智慧的结晶,科学技术只是其中一个方面。抽象思维是人类最主要的思维方式,差不多也是我们人类所特有的。和形象思维不同,抽象思维通常被认为是在追求真理,因而会出问题。由于抽象思维包括概念,命题和推理,所以,如果这三个中的任何一个出问题,麻烦就来了。最早注意到这些问题的人生活在公元前6世纪的印度,公元前5世纪的中国(战国时期)和公元前4世纪的希腊。柏拉图的学生亚里士多德创作了《范畴篇》《解释篇》《分析前篇》《分析后篇》《论辩篇》《辨谬篇》。在英语里,亚里士多德研究的内容叫做“logic”,中国的严复将其称为“名学”,他翻译引进了《穆勒名学》。后来,干脆把这个外来词连同它的发音一起引进来,直接叫做“逻辑”, 而这门学问则叫做“逻辑学”。这个时候,人们表达逻辑还只是靠嘴说,没有一些符号来将逻辑表达出来。最早,莱布尼兹有了这种想法,他想用一些符号来代替人类的思考和推理过程,可惜他终究也没有发明这样的符号。直到一百多年以后,布尔对逻辑进行数学化,成功的创立了一门新的学科:逻辑代数,有时候人们也称之为布尔代数。所以,用布尔代数解决逻辑问题,就用1表示真,0表示假。随后,以逻辑代数为基础,布尔和他的支持者们最终完整的建立了一个新的学科门类——数理逻辑。后来,香农把布尔代数和电学结合了起来,开创了一个新的领域:开关电路。还记得在第一话萌芽的最后,那个时候要控制电路还得你用手不停的拨弄开关吗,现在了有了开关电路,我们就可以用电压和电流来代替人手去控制一些开关,一样能改变电路的通断状态,要用电流的通断来控制电路的开关需要使用继电器,而继电器早在前面已经发明了。
在这里插入图片描述
在继电器基础上,又发明了触发器。
在这里插入图片描述
给继电器加上电源,让它的输出作为输入,就是振荡器了,这东西在后面会很有用。
在这里插入图片描述
根据布尔的逻辑表达式和香农的开关电路,我们就可以设计出与门,或门和非门等等的逻辑门电路。与,或,非是三种最简单的门电路,自从有了它们,这个世界开始变得与以往不同,看看现在的什么数码相机,智能微波炉,智能冰箱,智能手机,掌上游戏机,微型计算机,数字电视,甚至第一话中的加法机,不管它们有多么复杂,搭建它们的最基础的砖头瓦块差不多很大一部分都是这三种门电路。之前我们的加法机还是手动开关,现在全部可以用逻辑门电路来实现它了。到现在,我们差不多可以利用逻辑门电路来实现一些计算了,但离一台真正的电子计算机诞生还有一段距离,但是很近了。

第三话:计算机时代的开路先锋

前面讲了很多东西,包括继电器,触发器,逻辑门等等,这些都是铺垫,为了让你对于了解计算机为什么会自动工作(计算),这种“自动”的本质是怎么发生的有一个知识铺垫,所以在第一话和第二话中,进行了大量的铺垫。在第二话中,我们知道可以用继电器来制造一个运算电路,这个东西组成的 电路已经可以来实现一些计算了,第一次有了可以实现自动计算的电路了。但是人们却并不满足于此,那又是什么驱动着人们来改造它呢?首先,继电器要工作,需要电流驱动,但是它的吸合和释放却是一个机械过程,换句话说,它一半是机械的,一半是电子的。虽然人们倡导机械化,但是对于一个计算机来说,机械化太致命了。继电器可以用来做触发器,但是它毕竟是机械的一开一合,效率可想而知。计算机应当摆脱机械,包括笨拙的继电器,完全实现纯电子化的运算,这对于计算机的先驱们也是很自然地想法。世界上第一支电子二极管管发明于1904年,第三年,也就是1906年,才发明了电子三极管。而电子二极管和三极管的发明不是因为要造计算机,而是被广泛的应用在电话,电报和无线电通信。因为此时,电子计算机还没走过理论准备阶段。下面就是电子管的样子。
在这里插入图片描述
纯电子化的运算很奇妙,两股代表着不同数值的电流在某个装置内汇合,相互影响,变成另一股合适的电流,这就是计算结果。最重要的是,这个过程中没有机械的影子,看不到继电器衔铁的吸合与释放,而实现了这个想法的人就是阿塔纳索夫。阿塔纳索夫的核心思想是使用二进制,并采用电子管来制作进行加减乘除所需要的逻辑电路。电子管是新材料,继电器能做的它也能做。因为电子管是纯电子的,所以开关速度要比继电器快成千上万倍。下图就是阿塔纳索夫发明的世界上第一台电子管计算机。
在这里插入图片描述
但是电子管计算机中所用的电子管在当时非常昂贵,而且电子管造出来的计算机实在大的离谱,第一台电子管计算机占地170平方米,重达30吨,一个房间才能放下。下面就是使用了18800个电子管造出来的第一台“可编程“计算机ENIAC。
在这里插入图片描述
体积大自然能耗就高,吃电很凶, 据传ENIAC每次一开机,整个费城西区的电灯都为之黯然失色。1947年,肖克利和他的两位同事发明了晶体管。和电子管一样,晶体管也是制作逻辑门,乃至各种触发器的好材料。而且,使用晶体管,可以更省电,体积更小。下面就是晶体管的样子。
在这里插入图片描述
然后人们利用新的材料和新的技术,继续着设计。使用多个触发器可以构成一个寄存器,它可以保存计算的中间结果。下面就是一个寄存器的电路。
在这里插入图片描述
接着就设计一个加法器电路。因为在加法器的逻辑电路中,有一部分线路大家要共用,所以就把大家共用的公共线路称为总线,大家只要轮流使用总线就可以。为了让电路可以实现做一连串的加法,还要设计控制器电路。这时,要想相加两个数,还需要通过开关来手动装载每次需要的数,这很不方便,所以能不能设计一个电路,把需要计算的所有数和结果可以存起来,然后让控制器进行装载,然后相加。利用多个上升沿D触发器(本身也是一个电路)可以实现一个存储器。
在这里插入图片描述
然后,为了可以实现自动化的操作,还要设计地址译码器电路,取数控制器电路。具体怎么设计,并不是我们关心的,但是我们要知道,计算机可以实现”自动化“的操作,实质上都是逻辑电路来实现的。要想让这个加法器真正的自动化工作起来,除了设计好它的逻辑电路,还要告诉它怎么做,你有两种选择。我们先撇开加法器做加法的每一步具体过程,装载,相加等,我们来举一个吃饭的例子,来说明这两种选择。比如我们要命令一个人吃饭,你可以直接对他下达”吃饭“的命令,也可以命令他”先拿勺子“ ,然后”舀起一勺饭“,然后”张嘴“,然后”送到嘴里",最后"咽下去"。那你愿意每个逻辑单路单元弄一个开关,然后执行每一个动作都掰一下开关呢,还是提前编制一条指令,这条指令里包含一个操作码和操作数,操作码表明要执行的动作,是装载还是相加;操作数就是你要操作的那个数。操作码来指出这条指令的功能,比如你可以用10001表示“装载”,10010表示“相加”,电路的设计可以让装载完操作码后,然后通过循环移位,自动的到存放操作码的下一个存储器单元取操作数。这么一来,只需要提前将你编制好的指令的操作码和数据装载进存储器,然后就可以让加法器的电路按照你的指令来运作了。刚才为了实现一个可以自动取数并做加法的加法机,我们设计了存储器电路,地址译码器电路,控制器电路,寄存器电路,把这些逻辑电路单元组织起来,就可以实现一个简单的加法器了。 下面就是一个加法机的逻辑电路图,用一只开关就可以完成将所有的数从存储器里依次取出并逐个相加的过程。
在这里插入图片描述
在上面这个电路中,为了执行每条指令,你都得按动9次开关,所以这很累,还记得之前的振荡器吗,是它该大显身手的时候了,它可以代替你不停按开关的工作。振荡器会不停的向电路发出脉冲,所以存放在存储器中的指令会被一条接着一条执行,只要不断电,它将永无休止。看起来好像不太聪明的样子,所以,你还需额外的设计一条停机指令,比如11111它只有操作码,不需要操作数,在所有指令的后面,放一条停机指令,这样在所有指令都执行完后,当停机指令被送到译码器,振荡器将不再产生脉冲到达控制器,加法器也就停止工作了。为此,需要重新设计一下电路,像下面这样;
在这里插入图片描述
终于从加法机出来了,上面的自动加法机也是计算机,虽然不能用来听音乐,看视频,玩游戏,但是,你发现,它有存储器,有运算器(虽然只能做加法),一个控制器,还有一个驱动控制器的心脏——振荡器,这看着多么像计算机的雏形。

第四话:萌芽

1936年,24岁的天才图灵提出了“图灵机”的概念。图灵机以布尔代数为基础,将逻辑中的任意命题用一种通用的机器来表示和完成,并能按照一定的规则推导出结论。图灵机的设想被誉为现代计算机的开山之作,它描述了一种假想的可实现通用计算的机器,下图就是图灵机的模型。
在这里插入图片描述
在这个模型中,有一条无限长的纸带,纸带上划分出了很多不同颜色的方格,在机器内部有一个机器头,可以在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在 每个时刻,这个机器头会从当前的纸带上读入一个方格的信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。 图灵机从来没有成为一台真正的机器,它是想象出来的,但却给同时代的人很大的启发。

第五话:现代的通用计算机

图灵的思想为现代计算机的设计指明了方向。一台计算机应当包括一个存储器和一个运算器,指令和数据都放在存储器里,在控制器的指挥下一条指令一条指令地自动执行。这种安排是从第二次世界大战开始的,并且这种形式一直沿用到现在。还记得前面说过的那个第一台“可编程”的电子管计算机ENIAC吗,它就是采用了这种结构形式。第一个提出采用这种结构形式并把这种设想付诸实践的是冯 · 诺依曼,所以这种体系结构又称为“冯 · 诺依曼体系结构”,这不是唯一的计算机体系结构,还有一种计算机体系结构叫哈佛体系结构。

第六话:集成电路时代

电子管计算机的庞大我们已经见识到了,后来有了晶体管,计算机的体积变小了不少。下面是世界第一台晶体管计算机TRADIC(“催迪克”)。
在这里插入图片描述
第一台晶体管计算机诞生于肖克利获得诺贝尔奖那年,1956年。在翻过了肖克利这一页后,晶体管的发展继续向前。1958年,基尔比发明了集成电路。1959年,诺伊斯发明了一种新的工艺,可以在一块本征硅上制造大量晶体管,这就是制造CPU的雏形。我想这里有必要简单说一下晶体管是怎么工作的,因为后来集成电路中的那些小到肉眼看不见的晶体管和它的工作原理是一样的。先来回忆一下晶体管的样子:
在这里插入图片描述
没错,记住它有三只脚丫子,这三只脚丫子都有名字,分别叫做基极(B),集电极(C),和发射极(E)。它的工作原理也很简单,以NPN晶体管为例,看下面这张图就很容易理解;
在这里插入图片描述
图里B,C,E分别代表基极,集电极,发射极。想象在集电极和发射极中间是一根水管,左侧有一根小水管连接着水管中的阀门。水压代表电压,流经水管的水流代表电流。当水流流经小水管时,将打开集电极和发射极之间的阀门,让水流经过发射极流向地面。怎么样,是不是很好理解呢? 你可能会问,这么大的晶体管,怎么做到小到看不见集成到电路里的呢?别着急,下面会说到的。从诺伊斯发明这种工业化生产集成电路的方法开始,在随后的几十年里,这种技术该进了好多回,每改进一回,集成的晶体管数量都会千百倍的增加,这就是著名的摩尔定律:集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍。
在这里插入图片描述
差不多接近尾声了,最后,我们来解释一下晶体管怎么做到小到看不见,放到集成电路中的,顺便,我们一起来看一下CPU的内部世界。CPU就是中央处理单元,它可以说是主板上最重要的一个部件,前面我们讲电,逻辑电路,加法器等等,最终其实都是为了理解CPU是怎么工作的。CPU可以说是人类的一个壮举,其内部复杂的简直难以想象。我们了来看一个Pentium处理器的内部逻辑电路,下面这幅图:
在这里插入图片描述
可以看到,在这个CPU的内部结构中,有许多的逻辑电路单元,通过我们前面很多话的铺垫,相信你已经不难理解,这些逻辑电路单元怎么相互配合实现自动化的运算。CPU的内部电路就是由众多的逻辑门构成的,就像下面这幅图:
在这里插入图片描述
上面只是一个很简单的CPU的逻辑电路,实际的CPU要想实现复杂的自动化的运算和控制整个电路,内部的电路结构要比这个复杂的多,比如下面这幅图是一个模拟真实CPU的图:
在这里插入图片描述
如果看到不太清,我们可以把某一个部分放大来看:
在这里插入图片描述
你可以看到这里面有很多的走线,实际上,它们就是铜线,但却只有几十纳米粗细,肉眼无法看到。这些铜线连接着众多的逻辑门,输送着电流。接下来,我们看个真的CPU内部结构。通过电子显微镜成像,我们可以看到一个真实的CPU的内部细节:
在这里插入图片描述
把某个区域放大来看看:
在这里插入图片描述
可以明显的看到,众多的铜线交错纵横,貌似它们是分层的结构,再放大来看下:
在这里插入图片描述
这次可以清楚的看到,CPU内部的铜线的铜线确实是分层的,而且越往下,铜线越细。再放大看看:
在这里插入图片描述
差不多好像可以看到晶体管了,这里的晶体管和之前介绍的那种三只脚的晶体管原理是一样的,只不过工艺的进步,可以让它的实现变得更小。我们举一个逻辑门的例子来说,就以与门的构造为例:
在这里插入图片描述
上面的符号,学过逻辑电路的一定不会陌生,这是一个与门,揭开它的白色盖子,让我们看看它内部电路怎么构造的:
在这里插入图片描述
上图,就是与门的内部电路实现,在真实的CPU中,差不多也是这个样子。可以清楚的看到,与门的实现用了3个晶体管,你应该对晶体管怎么工作的不太陌生了,因为上面刚刚介绍过它是怎么工作的,如果忘了,可以再返上去看下。
在这里插入图片描述
原来晶体管的那三只引脚,已经被十几纳米的铜线所替代了。如果你对这些铜线是怎么架起来的很有兴趣,可以去看一下Intel的CPU生产流程工艺,这是在一个叫做光刻的过程中完成的。现在,我们对CPU怎么自动的来工作的,应该有一些明白了,可能还有些模糊,最后,我们一起来总结一下。我们只从最本质的层面来说,也就是不会说它是怎么取址执行的,不谈论寄存器,不论它是AMD的,还是Intel的CPU,在它们各自的内部,可能都有自己的微架构,甚至同品牌但不同型号的微架构也会有所不同,所以抛开这些细枝末节的东西,我们从最本质的层面来说。最本质的是什么?电!CPU是电驱动的。如果用一句话总结CPU怎么运行的,可以这样来描述:电流沿着铜线不停的通过晶体管组成的门电路。这就是CPU在运行的时候,内部正在发生事情。至于CPU具体怎么取址执行的,这些其实已经是在更高的层面来说了,可以具体到某个CPU架构来说,不是这篇文章的重点。现在我们已经从最本质的层面知道了CPU内部是如何运作的了。

回答晶振和时钟

现在,我们已经知道了计算机是怎么一步一步被创造出来的,CPU运行的时候内部实际又在发生着什么。有了一个比较系统的认识以后,现在就可以来回答我们开头提出的那个问题:计算机一定要有时钟吗?时钟是用来干什么的呢?现在我们就把时钟弄明白,它存在的意义是什么,要解决什么问题。通过前面的介绍,你已经知道了CPU是靠电流驱动的,而1代表有电流,0代表没电流,而电流的通断由晶体管来控制着,晶体管就像一个开关一样。如果我们用一个波形图来表示电流的变化情况,它的变化应该是这样的:
在这里插入图片描述
在凹下去的地方就是0,凸起来的地方就是1。可以看到,从0变化到1并不是瞬间完成的,而是有一个斜率,这就意味着在从0变化到1是有一段过渡的时间。为什么不是瞬间完成呢?其实你可以回想一下你拧开水龙头的情景,当你拧动水龙头的时候,水流是从小逐渐变大的,而电流的变化也有这种现象。电流本质是沿着一个方向运动的电子,当你开始加一个5V的电压,电压从0到5V也需要过渡的时间,所以刚加电压的时候,只能驱动少量电子向一个方向运动,随着电压逐渐变大,被驱动的电子也越来越多,所以电流是在逐渐变大。我们把从0变化到1(或者从1变化到0)所用的时间称为传播延迟。但是,这个过渡时间(传播时延)其实是极其短暂的,基本是在纳秒(ns)级别,对于我们来说纳秒几乎感觉不到,但是对于电路来说,却不能忽略。为什么不能忽略?如果你想明白了那你就知道时钟存在的意义了,如果没有猜到,没关系,那就先把这个问题跳过去,后面会解释的。因为这个过渡时间是纳秒级别的,所以上面这个图的斜率其实非常陡,就像下面这样:
在这里插入图片描述
这种图对于分析问题非常不方便,如果你是研究问题的人,你愿意对着这样的图来研究下去吗?所以,人们为了图看起来更方便,就直接把它画成一条直来直去的竖线,就成了下面这幅图:
在这里插入图片描述
把这样的一个方波,就称为一个脉冲。在我们现在讨论的话题里,也就是关于CPU的脉冲的时候,把这种脉冲称为时钟脉冲,它还有另一种常见的叫法,叫时钟信号,都是一回事,简称为时钟。你可能会好奇问为什么叫时钟呢?难道和我们看时间的钟表有什么关系吗?请你回想一下,前面我们说过有一个东西叫振荡器,它可以不停的产生脉冲信号,这种东西被用在安上电池才能走动的钟表中。在这种钟表里面,有一个振荡器,它每隔一秒产生一个脉冲,用来驱动一个小小的电机,促使它每次转动一个角度,并通过齿轮传动机构带动秒针跟着向前移动一步,还“嗒”地响一下。由于这个原因,这种振荡脉冲经常被称为时钟脉冲,或者时钟信号,以表彰它至今仍在某些钟表里面努力工作的精神。现在知道为什么叫时钟脉冲了吧,原来和钟表中的振荡器有关。前面我们讲的振荡器是为了给电路的一个脉冲,让整个电路在脉冲的驱动下工作。你可能会马上想到,晶振就是产生时钟的,那主板上的晶振也是为了产生时钟脉冲然后驱动CPU工作吧?如果你这么想,显然你认为CPU依靠时钟脉冲才能工作。其实,CPU没有时钟照样可以工作,这种CPU叫做异步CPU(asynchronous CPU),而我们平常所说的需要时钟的CPU属于同步CPU(synchronous CPU),目前市面上在销售的CPU差不多都是同步CPU。而且,可以告诉你的是,异步CPU还比同步CPU更快,那为什么不用异步CPU呢?因为异步CPU的设计更加复杂,在最开始的门电路设计上就已经与同步CPU不一样了。还有一点,我认为是代价的衡量,因为即使异步CPU更快,这个时间在每一次改变晶体管状态的时候属于纳秒(ns)级别的,即使快1000ns,对于人来说几乎感觉不到,但是异步的设计无疑增加时间和人力的成本,究竟要不要为了纳秒级别的提升而设计比同步CPU更加复杂的电路,相信设计CPU的工程师们一定比我们更清楚。所以,现在你应该知道了,时钟不是为了驱动CPU工作的,那时钟究竟是干什么的呢?刚才说只有同步CPU才会需要时钟,那就来理解一下同步这个词,理解了“同步”,就知道时钟的作用了。理解同步,需要举一个生动的例子,运动会的100米比赛再好不过了。现在有5个人要参加比赛,有一根起跑线。当比赛即将开始,5个人陆续向起跑线走来。第一个人先到了,但是他还不能起跑,因为这个比赛有五个人,他还要再等等其他四个人都站到起跑线上才能开始。如果不需要等待,假设他们的速度都是一样快,那离起跑线最近的那个人势必先到达终点,那这场比赛就乱套了。所以,只有等五个人全部站在了起跑线上,也就是说这5个人同步了,然后就可以跑了。
在这里插入图片描述
同步理解了,那时钟呢?现在,我们要记录一个时间,就是刚才的5个人中,走到起跑线时间最多的那个人的时间作为他们这组的同步时间,就是最多用多长时间你们这5个人就能在起跑线上都站好了,假设这个时间是20秒,我们就把这个时间叫做一个时钟周期。也就是在这个时钟周期内,保证5个人已经全部站在起跑线上了,这个时候裁判一打抢,他们就可以跑出去。我们假设这个比赛不止一组,刚才那5个人是第一组。裁判是个机器人,他每隔20秒就打一次枪,也就是一个时钟周期就打一次枪。现在轮到第2组,经过一个20秒的时钟周期,5个保证全部到了起跑线,然后裁判机器人打枪,第二组起跑。接下来的每一组都是如此,5人站到起跑线,起跑,5人站到起跑线,起跑。所以,时钟周期的意义就是能保证5个人能全部出现在起跑线上,也就是可以确保这5个人同步了,然后再进行下一步的动作。当然这是一个比较通俗的解释,为了可以对时钟的作用有一个感觉,知道它是为了控制一个时间范围,起到同步的作用。在前面,我们已经知道了CPU是通过很多的逻辑门来工作的,而逻辑门的实现就是依靠晶体管的开关作用。比如现在有两条电流要经过一个非门,第一条电流它过来时候可能是从别的门的输出过来的,第二条电流可能直接过来的,没经过逻辑门。那当这两条电流到达逻辑门的时候,肯定是第二条电流先到达。第一条电流因为要经过一个逻辑门,所以会有传播延迟,等它从那个逻辑门出来的时候,第二条已经先于它到达了非门。由于第二条电流一到达,非门就会发生变化,但是要想非门正确输出,必须等待第一条电流也到达后, 将两条电流汇合的结果再作为输出。非门不能在第二条电流一到达就产生输出,要给它一个时间限制,假如是20纳秒,经过20纳秒后,非门才能输出。而在20纳秒内,第一条电流一定会到达,因为这个20秒是按第一秒能到达的最长时间算的。通过一个具体的例子更能说明问题,考虑下面一个逻辑电路:
在这里插入图片描述
当A=B=1时,Q=0。当输入信号发生变化时,逻辑元件不会立即对输入变化做出反应,会有一个传播时延(propagation delay)。当B变化为0时,由于B也作为XOR的直接输入,所以XOR异或门会立即感知一个输入变为0的状态变化,XOR输出变为了1。但是由于传播时延的作用,AND与门的输出会过一小段时间才变为0,XOR的输出会在变为1后隔一小段时间重现变为0。表现为下图就是这样:
在这里插入图片描述
上面这种现象叫作空翻(race condition),即指输出中出现了一个不希望有的脉冲信号。

一个简单的办法就是在输出端放置一个边沿触发器:
在这里插入图片描述
边沿触发器的作用就是只有当CLK端输入从0变到1时,数据端D的输入才会影响边沿触发器的输出。这样,所有的传播时延都会被边沿触发器所隐藏掉,这时Q端的输出将变得稳定。比如:
在这里插入图片描述
其中灰色的部分代表没有边沿触发器时的Q端输出状态。我们可以看出,当有了边沿触发器后,Q端的输出变得稳定,基本消除了传播时延。

从上面的例子我们可以看出CPU为什么要时钟:目前绝大多数的微处理器都是被同步时序电路所驱动,而时序电路由各种逻辑门组成。正如上面说的那样,逻辑门需要一小段时间对输入的变化做出反应(propagation delay)。所以需要时钟周期来容纳传播时延,并且时钟周期应当大到需要容纳所有逻辑门的传播时延。

前面我们也说了有异步CPU,它采用Asynchronous sequential logic设计,即不需要时钟信号做同步。但是这种异步逻辑电路虽然速度比同步时序电路快,然而设计起来比同步时序电路复杂的多,并且会遇到上面说的空翻现象(race condition),所以,现在绝大多数的CPU还是需要时钟做信号同步的。

现在彻底明白了时钟的作用了吧?由于现在是集成电路,所以产生时钟的元件就由晶振来承担了。最后总结一下,我们的思路是从一个问题开始嵌套的问下去,一直追问到本质,然后又通过分析本质,逐级回溯到最初的问题,看似没有联系的几个方面,实则有着千丝万缕的联系,所以说,计算机是人类智慧的结晶。

发布了48 篇原创文章 · 获赞 18 · 访问量 8751

猜你喜欢

转载自blog.csdn.net/weixin_44395686/article/details/105348105