zhangyachen.github.io icon indicating copy to clipboard operation
zhangyachen.github.io copied to clipboard

为什么CPU需要时钟这种概念?

Open zhangyachen opened this issue 7 years ago • 7 comments

最近在研究计算机里的基本逻辑电路,想到一个问题:为什么CPU需要时钟这样的概念?

首先考虑如下逻辑电路: image

当A=B=1时,Q=0。当输入信号发生变化时,逻辑元件不会立即对输入变化做出反应,会有一个传播时延(propagation delay)。当B变化为0时,由于B也作为XOR的直接输入,所以XOR异或门会立即感知一个输入变为0的状态变化,XOR输出变为了1。但是由于传播时延的作用,AND与门的输出会过一小段时间才变为0,XOR的输出会在变为1后隔一小段时间重现变为0。表现为下图就是这样:

image

上面这种现象叫作空翻(race condition),即指输出中出现了一个不希望有的脉冲信号。

一个简单的办法就是在输出端放置一个边沿触发器:

image

边沿触发器的作用就是只有当CLK端输入从0变到1时,数据端D的输入才会影响边沿触发器的输出。这样,所有的传播时延都会被边沿触发器所隐藏掉,这时Q端的输出将变得稳定。比如:

image

其中灰色的部分代表没有边沿触发器时的Q端输出状态。我们可以看出,当有了边沿触发器后,Q端的输出变得稳定,基本消除了传播时延。

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

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

参考资料:

欢迎大家关注我的知乎:https://www.zhihu.com/people/zhangyachen

或者可以关注下我的公众号,获得最及时的更新:

image

zhangyachen avatar Dec 31 '17 09:12 zhangyachen

你好,作为外行我有个问题:如果B的变化是在CLK的高电平发生时,race condition看起来照样会发生啊?是不是时序电路里有规定逻辑门组件的输入端的变化必须在CLK低电平时发出?

zbjxb avatar Jan 07 '18 14:01 zbjxb

@zbjxb 您的意思是不是当时钟电平为1时,B的变化也会在Q输出?这种情况在边沿触发器里是不存在的,但是会在电平触发器里存在,但是电平触发器现在已经被淘汰了,目前计算机用的都是边沿触发器。

zhangyachen avatar Jan 07 '18 15:01 zhangyachen

@zhangyachen 哦哦,谢谢

zbjxb avatar Jan 07 '18 17:01 zbjxb

您好,想问一下,为什么只有AND与门会有delay,XOR异或门的输出却会立即响应输入?XOR异或门没有delay吗

LJoiner avatar Feb 18 '20 05:02 LJoiner

@LJoiner 这个delay指的是 : XOR的两个输入,其中一个是直连B信号,其中一个输入是AND的输出,后者肯定比前者到XOR满的,是这个意思~~没有说XOR没有delay

zhangyachen avatar Feb 20 '20 13:02 zhangyachen

假如B在clk由0->1时变化会怎么样呢?是不是可能边沿触发器保存了延时的结果而不是最后的结果

pangxiaozhen77 avatar May 10 '21 03:05 pangxiaozhen77

假如B在clk由0->1时变化会怎么样呢?是不是可能边沿触发器保存了延时的结果而不是最后的结果

clk正跳变的瞬间,D是什么值,最终结果就是什么值。所以clk正跳变刚好发生在D的空翻,那么结果就是空翻,就错了。由此才说,时钟周期应当大到需要容纳所有逻辑门的传播时延,才不会错。

HuangFJ avatar Aug 26 '21 09:08 HuangFJ