据我所知,时钟控制着所有的逻辑运算,但是它也限制了计算机的速度,因为门必须等待时钟根据组件从低变高或从高变低。如果未合并任何时钟,则无论何时发出命令,门都将以尽可能快的速度变化,那么为什么不增加计算机速度,为什么要使用时钟呢?
据我所知,时钟控制着所有的逻辑运算,但是它也限制了计算机的速度,因为门必须等待时钟根据组件从低变高或从高变低。如果未合并任何时钟,则无论何时发出命令,门都将以尽可能快的速度变化,那么为什么不增加计算机速度,为什么要使用时钟呢?
Answers:
时钟在计算机中使用的原因很简单,即大多数电路(如果不是全部)都是同步时序逻辑。
在同步电路中,称为时钟的电子振荡器会产生一系列称为时钟信号的重复脉冲,这些重复脉冲会分配给电路中的所有存储元件。
现在,您可能会问“为什么在计算机中使用同步电路?”,这看起来似乎并不令人满意和理所当然。但是这是一个容易回答的回答太:
同步逻辑的主要优点是简单。对数据执行操作的逻辑门需要有限的时间来响应其输入的更改。这称为传播延迟。时钟脉冲之间的间隔必须足够长,以使所有逻辑门都有时间对变化做出响应,并且它们的输出在下一个时钟脉冲出现之前就“稳定”到稳定的逻辑值。只要满足此条件(忽略某些其他细节),就可以保证电路稳定可靠。这决定了同步电路的最大工作速度。
假设您有一个8位整数从内存发送到ALU进行计算,并且(至少在此示例中)在ALU需要它们之前和稍有不同的时间,存储电路在8条数据线上提供了信号。
此处使用时钟将确保8个数据线在一个时钟周期内保持表示的整数的正确值,并且ALU将在同一时钟周期内“收集”该数据。
我意识到那可能不是最好的描述,基本上没有时钟来确保数据一致性要比任何可能的速度提高都变得困难得多,您会遇到很多竞争状况问题。
像算术逻辑单元这样的电路将以几个数字作为输入,并产生一个数字作为输出。它可以保证在一段时间内,输出的所有位都将达到其正确的最终状态,但是输出位变为有效的实际时间量可能会因多种因素而有很大差异。
可以构造一个具有“有效”输入和“有效”输出的ALU,并指定在执行计算之前,如果“有效”输入在足够长的时间内为低,并且数据输入包含在“有效”输入变高之前的期望值,“有效”输出在输出位实际上正确之前不会变高。这样的设计可能需要的电路量是传统ALU的两倍[基本上,它必须跟踪每个位是“已知”为零还是“已知”为1;一旦知道每个输出位的状态,其“有效”输出就会变为真。
更糟糕的是,允许CPU能够更快运行的那些部分这样做才有帮助,前提是他们不总是一直在等待较慢的部分追赶。为了做到这一点,必须有逻辑来确定在给定的时刻机器的哪个部分处于“超前”状态,并据此选择行动方案。不幸的是,这种决定是电子产品最难做出的决定之一。通常只有在一个人可以保证永远不会有“关闭电话”的情况下,才容易地可靠地确定两个事件中的哪一个首先发生。假设内存定序器正在处理来自处理单元#1的请求,并且单元#1在此之后还有另一个请求挂起。如果#2单元在#1的第一个请求完成之前提交了一个请求,则存储单元应处理该请求;否则,它应该处理单元1的下一个请求。这似乎是一个合理的设计,但最终出了问题。问题在于,如果某个时间段使得在该时间段之前接收到的请求将立即被处理,而在此之后接收到的请求将不得不等待,那么确定该请求是否超过截止日期所需的时间将是与收到请求的时间和截止日期之间的差值大致成反比。存储单元确定来自#2的请求比截止日期提前了1毫秒的时间可能会大大超过服务来自#1的第二个请求所需的时间,但是该单元无法处理任一个请求,直到它决定先服务哪个。
一切都以一个公共时钟运行,不仅消除了电路确定计算输出何时有效的需求,而且还消除了计时“关闭调用”。如果系统中的所有内容均以100Mhz时钟为准,则直到时钟沿后1ns之前,信号都不会响应时钟而变化,并且响应于时钟沿而发生的所有事情都将在7ns内发生,那么一切将在时钟发生之前发生。特定的时钟沿将“赢得”至少3ns,直到时钟沿之后的所有未发生的事情都将“损失”至少1ns。确定一个信号是否在时钟之前或之后(肯定不会被关闭),要比确定两个任意定时的信号中的哪个先发生要容易得多。
好吧,如果您正在设计一个同步系统,您将拥有一个目标时钟速率,并且您将设计逻辑以在一个时钟周期内的一个周期内完成所有计算。这也意味着您需要结合安全余量,以适应各种条件,例如低电源电压,高温和“慢”芯片。设计了同步芯片,以使最长的逻辑路径(最慢的计算)在所有这些不利条件下都能及时完成。结果,当条件不是很糟糕时,您将在逻辑完成其操作与下一个时钟锁存结果之间有更多的时间/余量。因为您(通常)无法更改时钟频率,所以您失去了这一速度。
这里是完全异步逻辑范式存在的,例如一个我熟悉的是NULL约定逻辑。逻辑电路使用粗笔描写来描述正在发生的事情,它能够识别计算何时完成,并且能够有效地创建自己的“时钟”信号。这样可以使电路尽可能快地运行,并具有适度的功率和EMI优势。不幸的是,就设计密度和顶级性能而言,您要为异步特性付出代价。同样,尽管用于同步设计和验证的软件工具已经成熟,但是异步设计的许多设计和验证仍然是手动的,从而导致设计和构建异步设计需要付出更大的努力。
这也完全忽略了有时您需要一个特定应用程序的时钟作为时间参考的情况。例如,您的声卡不能异步运行,因为它需要以特定的精确采样率更新ADC或DAC,否则音频会失真。
如果未合并任何时钟,则无论何时发出命令,门都将以尽可能快的速度变化,那么为什么不增加计算机速度,为什么要使用时钟呢?
简而言之:因为人类不是超级智能的生物,必须采取捷径才能设计出数十亿个元素的电路。
当我们的机器霸主升空时,他们很可能摆脱时钟,克服细微的细微差别,例如尽管工艺有所变化也可以制造无时钟的电路,并利用某些速度增益。
扩大一点:离散的,可预测的东西更易于理性地分析和设计。作为一个巨大的附加好处,它们可以自我校正(在这种情况下,时序可以自我校正)。这就是我们首先使用数字逻辑的原因。(类似地,在编程中,我们经常使用整数而不是浮点数,使用熟悉的控制结构代替goto-spaghetti,以及使用一些清晰规则的语言代替非常“灵活”的语言,因为您永远不确定会发生什么情况直到代码运行。)