当前位置: 首页 > news >正文

一文读懂逻辑门

6b4b18bf4a562704a7e28a56798d7179.gif

20世纪60年代中期,Jack Kilby任职的德州仪器公司推出了5400和7400系列集成电路。这些芯片包含了执行逻辑运算的现成电路。这些特殊的电路称为逻辑门(或简称门),是布尔函数的硬件实现,我们称之为组合逻辑。德州仪器公司卖出了几十亿的集成电路。这些集成电路至今仍然有售。

逻辑门对硬件设计者来说是一个巨大的便利:他们不再需要从零开始设计一切,建造复杂的逻辑电路可以像建造复杂的管道一样轻松。就像水管工可以在五金店找到成箱的三通管、肘管和管接头一样,逻辑设计者们也可以找到AND门(与门)、OR门(或门)、XOR门(异或门)和反相器(运行NOT运算的工具)的“工具箱”。图2-26是这些门的符号。

6055ed4aec24cc3a2a81cc7629f73593.png

图2-26 门符号

正如你所期望的那样,如果A、B输入都为真,那AND门的Y输出为真。

图2-26中反相器符号的关键部分是○(圆圈),而不是与圆圈连接的三角形。没有圆圈的三角形表示缓冲区,作用只是把输入传递给输出。反相器的符号只在不与其他设备结合使用的情况下才会用到。

使用5400和7400系列零件的晶体管–晶体管逻辑(Transistor-Transistor Logic, TTL)构建AND门和OR门的效率并不高。因为简单门电路的输出是反向的,所以需要一个反相器来让简单门电路以正确的方向输出,而这样会使成本更高、速度更慢、能耗更大。所以,基本的门是NAND(与非)和NOR(或非),它们使用的是图2-27所示的反向圆圈。

6d7d6519141da8a59e4c598d69ae3a3c.png

幸运的是,这种额外的反向并不影响设计逻辑电路的能力,因为我们可以用德摩根定律解决反向问题。图2-28应用德摩根定律来说明NAND门相当于一个输入反向的OR门。

044fd7203f2aef800586ad3a1c58de18.png

到目前为止,如果不算反相器的话,我们看到的所有门都有两个输入,但事实上门可以有两个以上的输入。例如,一个三输入的AND门,只有三个输入都是真,它的输出才是真。既然知道了门的工作原理,我们来看看使用门时会出现的一些复杂情况。

01

利用迟滞现象提高抗噪声能力

前面提到,由于决策衡量准则的原因,使用数字(离散)器件可以获得更好的抗噪能力。但在有些情况下这是不够的。很容易假设逻辑信号从0到1的转换是瞬间发生的,反之亦然。在大多数情况下这是一个很好的假设,尤其是当我们将门连接在一起的时候。但现实世界中的信号往往变化得更慢。

我们来看缓慢变化的信号会是什么样的。图2-29显示了两个从0到1缓慢沿斜坡增加的信号。

63289d4ec79c163309678b14a3ab082e.png

左边的输入是没有噪声的,右边的信号有一些噪声。可以看到,嘈杂的信号导致输出产生故障,因为噪声会使信号不止一次地越过阈值。

我们可以使用迟滞现象来解决这个问题,即决策衡量准则受历史的影响。从图2-30中可以看出,传递函数不是对称的;实际上,箭头所示的上升信号(从0到1的信号)和下降信号(从1到0的信号)有不同的传递函数。当输出为0时,应用的是右边的曲线,输出为1时,应用的是左边的曲线。

369d166a8b157ad9b27fb88a58e47590.png

两条曲线给了我们两个不同的阈值:一个用于上升信号,另一个用于下降信号。这意味着,当一个信号越过其中一个阈值时,它需要跨得更远才能越过另一个阈值,而这也就转化为更高的抗噪能力。

可发挥迟滞功能的门被称为施密特触发器,以美国科学家Otto H. Schmitt(1913—1998)的名字命名,他发明了具有迟滞效应的电路。因为这种电路比普通的电路更复杂、更昂贵,它们只在最需要的地方使用。如图2-31所示的反相器,原理图符号描绘了迟滞现象的叠加。

ac0d349e56db4ef6a2c82ed12ed3825c.png

02

差分信号

有时候噪声太大,连迟滞都不能减弱噪声。想象一下走在人行道上,我们把人行道的右侧边缘称为正向阈值,左侧边缘称为负向阈值。你可能边走边想些自己的事情,这时有人推着一辆很宽的推车,把在人行道右侧的你撞了下去,然后一群慢跑者又迫使你闪避到左侧。在这种情况下,我们也需要保护。

到目前为止,我们都是根据一个绝对阈值(在触发施密特触发器的情况下为一对阈值)来衡量信号。但在某些情况下,由于噪声太大,已越过施密特触发器的阈值,导致触发器失效。

让我们试试“好哥们”系统吧。想象一下你正和一个朋友在人行道上走着,如果你的朋友在你的左边,我们就称这种情况为0,如果你的朋友在你的右边,我们就称为1。当那些推车和慢跑者过来时,你和你的朋友都会被推向人行道另一边,但你们并没有改变相对位置,所以如果这就是我们要测量的,那噪声对此没有任何影响。当然如果你们两个人只是在彼此附近走着的话,你们可能会被推来推去。所以牵着手或者搂着腰会更好。依偎在一起能更好地抵御噪声!这被称为差分信号,因为我们测量的是一对互补信号之间的差值。图2-32为一个差分信号电路。

10718b1e2a640a0b54bca36823875e61.png

从图2-32可以看到,驱动器将输入信号转换为互补输出,接收器将互补输入转换回单端输出。接收器中通常包含一个施密特触发器,以获得额外的抗噪能力。

当然,图2-32中的设备存在局限性。太多的噪声会将电子元件推到指定的工作范围之外—想象一下,人行道旁边有一栋楼,你和你的朋友都被推到了这栋楼墙边上。共模抑制比(Common-Mode Rejection Ratio, CMRR)是元件特性的一部分,表示可处理的噪声量。之所以称为“共模”,是因为它针对的是一对信号中两个信号共同的噪声。

差分信号应用于很多地方,比如电话线。在19世纪80年代,有轨电车首次出现时,差分信号大显身手。因为有轨电车会产生大量噪声,对电话信号造成了干扰。苏格兰发明家亚历山大·格雷厄姆·贝尔(Alexander Graham Bell)(1847—1922)发明了双绞线,将成对的电线缠绕在一起,相当于交缠在一起的电子等效物(见图2-33)。在今天双绞线无处不在,在USB、SATA(磁盘驱动器)和以太网电缆中均可找到它。

5db1cd14879b62fffd91febed3b06536.png

美国某乐队使用的音墙演唱会音响系统,是一个关于差分信号传导的有趣应用。音墙演唱会音响系统通过使用成对的麦克风,使一个麦克风的输出中减去了另一个麦克风的输出,从而解决了麦克风的反馈问题。这样一来,任何传进两个话筒中的声音都是共模并被抵消掉的。歌手对着其中一个话筒唱歌,他们的声音就会由音响系统传出。从乐队的现场录音中可以听到,来自观众的噪声听起来很尖锐,这是这套系统的一个缺陷。这是因为低频声音的波长比高频声音的波长长,与高频噪声相比,低频噪声更可能是共模的,所以来自观众的噪声没有被共模。

03

传播延迟

fa0238658e784a2e3c1be398da65313a.png

在《计算机系统解密:从理解计算机到编写高效代码》2.2.1节,我就提到过传播延迟。传播延迟是一个统计测量值,指输入的变化反映到输出中所需要的时间。传播延迟因制造工艺和温度的差异而产生,还受到和门的输出端相连接的元件数量和类型的影响。门有最小和最大延迟,实际延迟介于两者之间。传播延迟是限制逻辑电路最大速度的因素之一。设计人员如果想让设计的电路正常工作,就得使用最坏情况下的值。这意味着他们在设计时必须考虑最短和最长延迟的情况。

079e68b1fdaa151de476651187a15992.png

在图2-34中,灰色区域表示因传播延迟不能依赖输出的地方。

输出可能在灰色区域的左边缘处就发生变化,但不能保证到右边缘前一定会发生变化。而且随着更多的门被串联起来,灰色区域的长度也会增加。

传播延迟的范围很大,它的时间长度取决于工艺技术。单个元件,如7400系列零件,其延迟时间可以达到10纳秒(即亿分之一秒)。现代大型元件(如微处理器)内部的门延迟可以达到皮秒(万亿分之一秒)级。在元件的规格说明中,传播延迟通常以tPLH和tPHL表示,分别代表从低到高和从高到低的传播时间。

既然我们已经讨论了输入和在通往输出的电路上发生的事情,现在可以看看输出了。

04

输出的变化

我们已经讨论了一些关于门输入的问题,但我们还没有讨论很多关于输出的内容。针对不同的应用场合,有几种不同类型的输出。

图腾柱输出

普通门输出称为图腾柱,因为一个晶体管堆叠在另一个晶体管上的方式类似于图腾柱。我们可以用如图2-35所示的开关来模拟这种类型的输出。

69bd81e663815f81426374f27da5a06c.png

图2-35中左边的示意图说明了图腾柱输出是如何得名的。最上面的开关叫主动上拉开关,因为它把输出端连接到高逻辑电平,使输出端得到1。图腾柱的输出不能连接在一起。从图2-35可以看出,如果把一个0输出和一个1输出连接到一起,就会把正负电源连接在一起—就像穿越1984年电影Ghostbusters中的流一样糟糕,而且可能会使元件熔化。

开路集电极输出

另一种类型的输出称为开路集电极或开路漏极,具体称呼取决于所用晶体管的类型。该输出的原理图和开关模型如图2-36所示。

126d485d87cb90bbf27120b0fedfa1bb.png

乍一看,这似乎很奇怪,我们期望得到0作为输出,但输出会浮动,不是0的时候,我们并不知道它的值是多少。

由于开路集电极和开路漏极类型的输出没有主动上拉,我们可以将它们的输出连接在一起而不损害真实值。我们可以使用被动上拉,用一个上拉电阻将输出端连接到电源电压,也就是1的来源。对于双极型晶体管来说,电源电压叫作VCC,对于MOS(金属氧化物半导体)晶体管来说叫作VDD。被动上拉的效果是形成一个有线AND,如图2-37所示。

2a9e27d058b6b370f07103477d09db9a.png

可能发生的情况是,当两个开路集电极输出都很低时,电阻将信号拉到1。电阻器限制了电流,所以不会使电路着火。当任何一个开路集电极输出很低时,输出为0。你可以通过这种方式将大量的东西连接到一起,用大量输入消除AND门的需求。

开路集电极和开路漏极输出的另一个用途是驱动LED(发光二极管)之类的设备。开路集电极和开路漏极器件通常是为驱动设备而设计的,能够处理的电流要高于图腾柱输出器件。一些类型的输出允许将输出拉到一个比逻辑1更高的电压水平,这使它们可以与其他类型的电路相连。这一点很重要,虽然7400门系列的阈值是一致的,但其他的门系列阈值不同。

三态输出

虽然开路集电极电路允许输出连接在一起,但它们没有主动上拉的速度快。因此,我们暂时放下两态解决方案,引入三态输出。第三状态是“关闭”。有一个额外的使能输入可以打开和关闭输出,如图2-38所示。

6032c1335838d34ac476129acd696509.png

关闭被称为hi-Z,或高阻抗状态。Z是阻抗的符号,在数学上是电阻的复数形式。可以把三态输出想象成图2-35的电路。分别控制基极可以得到四种组合:0、1、hi-Z和熔断。显然,电路设计者必须确保选择的组合不会使电路熔断。

三态输出允许大量的设备组合在一起,但需要注意的是,一次只能使能一个设备。

本文摘编自《计算机系统解密:从理解计算机到编写高效代码》

3e599327081568e8a7b68f3f765c2e17.png

作者:[美]乔纳森·E.斯坦哈特(Jonathan E. Steinhart )

译者:张开元、张淼

计算机程序硬件软件从底层实现到高层展现原理讲解

对底层知识的多个主题进行了公平的覆盖

计算机编程不是抽象的,程序是在机器上运行的。了解计算机如何工作以及程序如何在计算机上运行是成为一名更好的程序员的必要条件。在本书中,资深工程师Jonathan E. Steinhart深入探讨了计算机背后的基础概念,比如计算机硬件,软件在硬件上的行为,如何编写高效的程序,计算机安全基础知识,以及在编写代码时需要考虑的现实问题。本书对底层知识的多个主题进行了公平的覆盖——介绍有助于提高整个系统质量的许多领域的知识(包括计算机硬件、组合逻辑、时序逻辑、计算机体系结构、计算机组成原理、操作系统、系统程序设计等)。

RECOMMEND

推荐阅读

06f8b45db3e74e7e86d8e64b97fed306.png

作者:[美] 兰德尔 E.布莱恩特(Randal E. Bryant)

大卫 R. 奥哈拉伦(David R. O'Hallaron)

译者:龚奕利 贺莲

将所有计算机系统相关知识融会贯通

助你成为凤毛麟角的高级程序员的必备神书。

如果你研究和领会了这本书里的概念,你将开始成为极少数的“牛人”!

本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。卡内基-梅隆大学、北京大学、上海交大等国内外众多知名高校选用指定教材。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为,以及造成效率低下的原因。从程序员的角度来学习计算机系统是如何工作的会非常有趣。最理想的学习方法是在真正的系统上解决具体的问题,或是编写和运行程序。这个主题观念贯穿本书始终。

85454f55e3c298447e6a02e8c1018970.gif

eae92b24c642c76549c78c93a62f6a32.png

扫码关注【CSAPP小课堂】视频号

cf2ae72e05d134f9c2215d90030065bd.gif

更多精彩回顾

书讯 | 11月书讯(上)| 拿下这些新书,赢在起跑线

书讯 | 11月书讯(下) | 拿下这些新书,赢在起跑线

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 架构设计的新思路,《架构之道》读书笔记

收藏 | 终于有人把微服务讲明白了

上新 | 【新书速递】构建高质量软件:持续集成与持续交付系统实践

赠书 | 数据大牛都在啃的15本书

fa9eff592324be944fced03db9ab14fa.gif

c2c6f536f743b7bc3ac2a94f1b494b05.gif

点击阅读全文进入专题

相关文章:

  • 【新书速递】金融商业算法建模手册
  • 开源 12 年后,Go 语言成为一刀流剑客
  • 被 CSAPP 虐了!
  • 7张图揭晓RocketMQ存储设计的精髓
  • 看漫画来告诉你:什么是 “元宇宙” ?
  • 【第80期】浅谈如何成为技术一号位?
  • SpringBoot 实战:加载和读取资源文件内容
  • 终于有人把云计算与数据库的关系讲明白了
  • 为什么 Rust 是编程的未来?
  • 四种代码洁癖类型,程序员看了直呼内行
  • JavaScript成最受欢迎的编程语言,社区规模近 1650 万
  • 微软不会放弃Electron:Electron 快速入门及IPC 通信
  • 什么是边缘计算?它是怎样火起来的?终于有人讲明白了
  • 进阶必看的 RocketMQ ,就这篇了
  • 深度解析用户画像标签体系构建方法
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • C# 免费离线人脸识别 2.0 Demo
  • Hibernate【inverse和cascade属性】知识要点
  • JS题目及答案整理
  • Linux快速复制或删除大量小文件
  • React-Native - 收藏集 - 掘金
  • webpack+react项目初体验——记录我的webpack环境配置
  • 关于Java中分层中遇到的一些问题
  • 缓存与缓冲
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 数据仓库的几种建模方法
  • 硬币翻转问题,区间操作
  • 如何用纯 CSS 创作一个货车 loader
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #{}和${}的区别?
  • #if 1...#endif
  • (Matlab)使用竞争神经网络实现数据聚类
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一) storm的集群安装与配置
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ..回顾17,展望18
  • .apk 成为历史!
  • .NET : 在VS2008中计算代码度量值
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 药厂业务系统 CPU爆高分析
  • .net2005怎么读string形的xml,不是xml文件。
  • .net打印*三角形
  • .NET开发人员必知的八个网站
  • .NET连接MongoDB数据库实例教程
  • .net下的富文本编辑器FCKeditor的配置方法
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /bin、/sbin、/usr/bin、/usr/sbin
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [BZOJ 3282] Tree 【LCT】