本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/132

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

首先考虑如下逻辑电路:

当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)。所以需要时钟周期来容纳传播时延,并且时钟周期应当大到需要容纳所有逻辑门的传播时延。

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

参考资料:

为什么CPU需要时钟这种概念?的更多相关文章

  1. linux时钟基本概念、CST与UTC、以及NTP简单设置

    1,安装linux的时候在设置时间的时候有一个选项:system clock uses UTC,那么这个UTC是什么意思呢? 世界协调时间(Universal Time Coordinated,UTC ...

  2. CPU、内存通俗概念

    在计算机的组成结构中,有一个很重要的部分,就是存储器.存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作.存储器的种类很多,按其用途可分为主存储器和辅助存储器 ...

  3. 实时时钟、系统时钟和CPU时钟的区别

    http://blog.sina.com.cn/s/blog_68f909c30100pli7.html 实时时钟:RTC时钟,用于提供年.月.日.时.分.秒和星期等的实时时间信息,由后备电池供电,当 ...

  4. linux 时钟源初步分析linux kernel 时钟框架详细介绍

    初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...

  5. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)

    在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工 ...

  6. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】

    转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 数据结 ...

  7. 单周期cpu设计代码解读

    目录 写在前面 单周期cpu设计代码讲解 概念回顾 Verilog代码讲解 写在前面 欢迎转载,转载请说明出处. 单周期cpu设计代码讲解 概念回顾 一.电子计算机的部件 分为:中央处理器(cpu). ...

  8. 为什么用时序电路实现CPU

    时序电路 我们带着如下疑问来看时序电路: 1.为什么CPU要用时序电路,时序电路与普通逻辑电路有什么区别. 2.触发器.锁存器以及时钟脉冲对时序电路的作用是什么,它们是如何工作的. 带着这两个问题,我 ...

  9. CPU中断的工作原理,从最底层讲起

    前言 中断的概念属于硬件层.虽然我们在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要. 我们在使用线程切换及状态管理.异常处理.硬件与处理器的交互.I/O操作等指令时,中断都在默默的为我们 ...

随机推荐

  1. [最短路][模版]P1346 电车

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

  2. JavaEE中的MVC(一)Dao层彻底封装

    最近Android工作实在难找,考虑是不是该转行做Java了,今天开始,花几天的事件,研究一下JavaEE各层优化. 首先是Dao层 增删改方法封装 使用PreparedStatement执行一条Sq ...

  3. spring boot 错误,求大神帮解决

    Exception in thread "main" java.lang.IllegalStateException: Failed to read Class-Path attr ...

  4. Regasm

      程序集注册工具(Regasm.exe) 读取程序集中的元数据,并将所需的项添加到注册表中.注册表允许COM 客户程序以透明方式创建.NET Framework类.类一经注册,任何COM 客户程序都 ...

  5. 软件测试管理QC

    一.QC简介 1)是HP公司的产品,是B/S结构的产品 2)在QC服务器中,打开IE浏览器,在地址栏中输入QC服务器的网址或者IP地址. 查看虚拟机的IP地址: 本地连接-属性-TCP/IP协议(重点 ...

  6. Webpack飞行手册

    前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...

  7. Serverless无服务应用架构纵横谈

    Serverless无服务应用架构纵横谈 一.Serverless是啥 自从互联网兴起以来,Server就成了网络的核心部件.所以围绕Server的生意圈,也发展得如火如荼. 从最早的电信托管,到虚拟 ...

  8. Aurora 论坛图片下载

    Aurora 论坛图片下载是一款快速下载指定网页图片的利器,还可以下载高清原图呢.现支持的网站:①蜂鸟网论坛②中关村摄影论坛③POCO摄影空间④图虫网其他摄影论坛陆续添加中... 效果图: 项目地址: ...

  9. 写出优雅又地道的pythonic代码(转自网络)

    本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...

  10. CDH集群搭建部署

    1. 硬件准备     使用了五台机器,其中两台8c16g,三台4c8g.一台4c8g用于搭建cmServer和NFS服务端,另外4台作为cloudera-manager agent部署CDH集群. ...