为什么在计算机中使用时钟?


22

据我所知,时钟控制着所有的逻辑运算,但是它也限制了计算机的速度,因为门必须等待时钟根据组件从低变高或从高变低。如果未合并任何时钟,则无论何时发出命令,门都将以尽可能快的速度变化,那么为什么不增加计算机速度,为什么要使用时钟呢?


没有足够的时间来提供正确的答案,但是从最基本的层面上讲,所有的数字事物都在向着同一位鼓手的节奏前进。查找同步与异步。
马特·杨

可能是计算机和机器时钟信号的重复,(并且这个问题已经不是一个真正的问题了……)
amadeus 2013年

对于狭窄的任务,模拟计算机可能比数字计算机快。
尼克·阿列克谢耶夫

1
这样他们知道现在几点了!(对不起,无法抗拒)
Scott Seidman

Answers:


32

时钟在计算机中使用的原因很简单,即大多数电路(如果不是全部)都是同步时序逻辑

在同步电路中,称为时钟的电子振荡器会产生一系列称为时钟信号的重复脉冲,这些重复脉冲会分配给电路中的所有存储元件。

现在,您可能会问“为什么在计算机中使用同步电路?”,这看起来似乎并不令人满意和理所当然。但是这是一个容易回答的回答太:

同步逻辑的主要优点是简单。对数据执行操作的逻辑门需要有限的时间来响应其输入的更改。这称为传播延迟。时钟脉冲之间的间隔必须足够长,以使所有逻辑门都有时间对变化做出响应,并且它们的输出在下一个时钟脉冲出现之前就“稳定”到稳定的逻辑值。只要满足此条件(忽略某些其他细节),就可以保证电路稳定可靠。这决定了同步电路的最大工作速度。

研究的一个活跃领域是异步计算,其中大多数(如果不是全部)电路都是异步顺序逻辑


Wikipedia上关于异步顺序逻辑的文章相当简短。区分没有单个时钟但可以保证电路的输入不会引起竞争条件的逻辑可能会有所帮助,或者在最坏的情况下,保证其输入可能具有竞争条件的任何电路的输出都不会成为逻辑。用过的。
2013年

我认为值得一提的是,JacekKarpiński有一台完全异步的计算机,名为KAR-65。不幸的是,我找不到任何有关英文的信息。
elmo 2013年

6

假设您有一个8位整数从内存发送到ALU进行计算,并且(至少在此示例中)在ALU需要它们之前和稍有不同的时间,存储电路在8条数据线上提供了信号。

此处使用时钟将确保8个数据线在一个时钟周期内保持表示的整数的正确值,并且ALU将在同一时钟周期内“收集”该数据。

我意识到那可能不是最好的描述,基本上没有时钟来确保数据一致性要比任何可能的速度提高都变得困难得多,您会遇到很多竞争状况问题。


6

像算术逻辑单元这样的电路将以几个数字作为输入,并产生一个数字作为输出。它可以保证在一段时间内,输出的所有位都将达到其正确的最终状态,但是输出位变为有效的实际时间量可能会因多种因素而有很大差异。

可以构造一个具有“有效”输入和“有效”输出的ALU,并指定在执行计算之前,如果“有效”输入在足够长的时间内为低,并且数据输入包含在“有效”输入变高之前的期望值,“有效”输出在输出位实际上正确之前不会变高。这样的设计可能需要的电路量是传统ALU的两倍[基本上,它必须跟踪每个位是“已知”为零还是“已知”为1;一旦知道每个输出位的状态,其“有效”输出就会变为真。

更糟糕的是,允许CPU能够更快运行的那些部分这样做才有帮助,前提是他们不总是一直在等待较慢的部分追赶。为了做到这一点,必须有逻辑来确定在给定的时刻机器的哪个部分处于“超前”状态,并据此选择行动方案。不幸的是,这种决定是电子产品最难做出的决定之一。通常只有在一个人可以保证永远不会有“关闭电话”的情况下,才容易地可靠地确定两个事件中的哪一个首先发生。假设内存定序器正在处理来自处理单元#1的请求,并且单元#1在此之后还有另一个请求挂起。如果#2单元在#1的第一个请求完成之前提交了一个请求,则存储单元应处理该请求;否则,它应该处理单元1的下一个请求。这似乎是一个合理的设计,但最终出了问题。问题在于,如果某个时间段使得在该时间段之前接收到的请求将立即被处理,而在此之后接收到的请求将不得不等待,那么确定该请求是否超过截止日期所需的时间将是与收到请求的时间和截止日期之间的差值大致成反比。存储单元确定来自#2的请求比截止日期提前了1毫秒的时间可能会大大超过服务来自#1的第二个请求所需的时间,但是该单元无法处理任一个请求,直到它决定先服务哪个。

一切都以一个公共时钟运行,不仅消除了电路确定计算输出何时有效的需求,而且还消除了计时“关闭调用”。如果系统中的所有内容均以100Mhz时钟为准,则直到时钟沿后1ns之前,信号都不会响应时钟而变化,并且响应于时钟沿而发生的所有事情都将在7ns内发生,那么一切将在时钟发生之前发生。特定的时钟沿将“赢得”至少3ns,直到时钟沿之后的所有未发生的事情都将“损失”至少1ns。确定一个信号是否在时钟之前或之后(肯定不会被关闭),要比确定两个任意定时的信号中的哪个先发生要容易得多。


4

数字系统可以是同步异步。在异步系统上,输出可以在任何给定时刻发生变化,这与同步系统不同,后者取决于时钟来更改其输出。

大多数数字系统是同步的(即使它们可以具有一些异步部分),因为可以更轻松地完成项目和缺陷分析,因为输出只能随时钟变化。

我已经从 Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.


3

好吧,如果您正在设计一个同步系统,您将拥有一个目标时钟速率,并且您将设计逻辑以在一个时钟周期内的一个周期内完成所有计算。这也意味着您需要结合安全余量,以适应​​各种条件,例如低电源电压,高温和“慢”芯片。设计了同步芯片,以使最长的逻辑路径(最慢的计算)在所有这些不利条件下都能及时完成。结果,当条件不是很糟糕时,您将在逻辑完成其操作与下一个时钟锁存结果之间有更多的时间/余量。因为您(通常)无法更改时钟频率,所以您失去了这一速度。

这里完全异步逻辑范式存在的,例如一个我熟悉的是NULL约定逻辑。逻辑电路使用粗笔描写来描述正在发生的事情,它能够识别计算何时完成,并且能够有效地创建自己的“时钟”信号。这样可以使电路尽可能快地运行,并具有适度的功率和EMI优势。不幸的是,就设计密度和顶级性能而言,您要为异步特性付出代价。同样,尽管用于同步设计和验证的软件工具已经成熟,但是异步设计的许多设计和验证仍然是手动的,从而导致设计和构建异步设计需要付出更大的努力。

这也完全忽略了有时您需要一个特定应用程序的时钟作为时间参考的情况。例如,您的声卡不能异步运行,因为它需要以特定的精确采样率更新ADC或DAC,否则音频会失真。


1

如果未合并任何时钟,则无论何时发出命令,门都将以尽可能快的速度变化,那么为什么不增加计算机速度,为什么要使用时钟呢?

简而言之:因为人类不是超级智能的生物,必须采取捷径才能设计出数十亿个元素的电路。

当我们的机器霸主升空时,他们很可能摆脱时钟,克服细微的细微差别,例如尽管工艺有所变化也可以制造无时钟的电路,并利用某些速度增益。

扩大一点:离散的,可预测的东西更易于理性地分析和设计。作为一个巨大的附加好处,它们可以自我校正(在这种情况下,时序可以自我校正)。这就是我们首先使用数字逻辑的原因。(类似地,在编程中,我们经常使用整数而不是浮点数,使用熟悉的控制结构代替goto-spaghetti,以及使用一些清晰规则的语言代替非常“灵活”的语言,因为您永远不确定会发生什么情况直到代码运行。)


即使同步逻辑更易于设计,但通常会设计出以10MHz时钟运行的计算机,以便在必须确定事件X是否在Y之前发生的任何地方,一个或两个事件都将被延迟。必须与主时钟建立特定的关系,这样事件才不会同时发生。此外,在少数情况下可能同时采取行动,可以接受增加两个或三个周期的固定延迟,以将一个或两个信号强制转换为固定的时钟关系。
2013年

如果设计是异步的,则可能会发现随机的99%指令占用5ns,0.9%随机占用10ns,0.09%占用30ns,0.009%100ns,0.0009%300ns,0.00009%1us,0.000009%3us等,而没有关于系统解决时序歧义可能需要多长时间的有力保证。在大多数情况下,具有次优但可预测的性能要好于平均速度更快但具有不可预测的变化(有时会很严重)的性能。
supercat

@supercat 1)不能将电路设计为不会同时发生事件吗?(至少在输入足够规则的情况下)2)是否可以将电路设计为没有同时发生事件的地方?
Aleksandr Dubinsky 2013年

如果知道两个事件的相对时间,则可以通过延迟一个事件或另一个事件来防止它们同时发生。知道它们的相对定时越准确,所需的延迟就越少。如果不知道相对时间,则可以将可能同时发生的两个事件解析为首先发生的指示,但为了最大程度地减少最坏情况的行为,必须在最坏情况下接受一些相当严重的妥协。无时钟计算机正常工作所必需的折衷将比使用时钟差。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.