时钟频率

转自: 作者:王殊 虞己某
链接:https://www.zhihu.com/question/29685396/answer/146013329

链接:https://www.zhihu.com/question/29685396/answer/145507426
 

1. 就拿这个加法器来举例子为什么需要时钟频率。


首先,这个加法器不可能只执行一次计算任务,而电子元件需要时间来改变它们的状态,所以每次计算都不是瞬间完成的,如果第一次计算还未结束,就输入下一次计算任务的信号,那么输出的结果就不能保证正确了,所以需要一个时钟信号,限制信号输入的速度。

其次,输入的信号不可能做到真正的同时输入,这意味着输入信号更新为下一次计算任务的时候,必须等待一段时间才能保证所有的输入都是第二次计算任务的。同理,靠后的门电路也需要等待前面电路的计算结果,自然也做不到同时输入信号。所以整个计算过程同样需要等待一段时间,在这段时间之后,输出的结果才是第二次计算任务的正确结果。

总的来说,就是现实中的电路不是每个时刻都符合逻辑上的设计,所以就需要一种手段,把符合逻辑设计的时间和不符合逻辑设计的时间区别开来,这样我们才能只采纳前者,而将后者舍去。


 

2.这大概要从,为什么有时钟(Clock)这个概念开始说。
这又要从flop和register开始说。
电子设备中,你要怎么去“保存”一个数据,读取和写入它呢?方法很多,现在只说教科书中最常见的。

这种,三角形带个泡泡的叫非门,像个横着的门带个泡泡的叫nand gate(与非门?) 非门是这样的,输入是0输出就是1,输入是1输出就是0。与非门,只当输入都是1时,输出是0,其他时侯输出是1。上面这个设计叫d flipflop,当clk是1的时候,D的值就会被写进去,然后clk=0的时候,Q就会一直是之前那个D,clk是0的时候,D的值再变,Q也不会变。
当然,实际上的设计一般clk还会AND 一个叫enable的输入,那么当enable是0的时候,clk那边就一直是0,你要写进去这个flipflop,就需要enable=1,clk=1,这时候D就被存进去了。
为什么需要clk呢,因为你的设计里面,这个寄存器在等上一个寄存器的数据,你不知道上一个寄存器的数据存好了没,是新的还是旧的,你要写进去的数据写好了没。如果每个寄存器都用不同的clk,这样设计很容易不同步async,就是我想同时写几个register,但是这个register已经写完了,那个我不知道他存好了没,全局的clk能帮助解决很多这类问题。这个clk很大程度上左右了设计里面很多东西的读写速度。这么说,clk越快就越好?也不对的,因为理论上虽然是这样,真实世界里面,这些电子元件全部都有反应速度的,clk变化比他们的setup time快的话,数据有可能还没来得及写进去,clk就变0了,写不进了。真实世界clk也不是方波,因为即使电压变得再快,从0到1v的变化也是需要时间的,不会是无时间从0突然变成1v

猜你喜欢

转载自blog.csdn.net/Jbinbin/article/details/81907256