ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

与非门搭建带使能端D触发器:从锁存到边沿触发的完整实验指南

与非门搭建带使能端D触发器:从锁存到边沿触发的完整实验指南 数字电路实验里触发器这部分是很多人第一次真正感受到时序概念的地方。组合逻辑那套输入变了输出立刻跟着变的直觉到了触发器这里就彻底失效了——输出什么时候变、变成什么取决于时钟和使能信号怎么配合。而用与非门搭D触发器几乎是所有数字电路课程的必修实验因为它把触发器内部最核心的锁存结构赤裸裸地摆在你面前没有任何封装可以躲。这篇内容面向的是正在做数字电路实验的学生、刚接触时序逻辑的硬件初学者以及需要快速复现这个经典电路的工程师。我会从与非门的基本特性讲起一步步推导出带使能端的D触发器结构给出完整的门级电路连接方式然后重点讲清楚实验中最容易翻车的几个地方——比如为什么你的触发器在使能有效时输出会振荡、为什么用不同型号的与非门芯片结果不一样、以及怎么用最少的门把这个电路搭出来。这些细节在教材上通常一笔带过但实际接线时每一个都能让你卡上半小时。1. 为什么偏偏选与非门来做D触发器1.1 与非门的逻辑完备性与实际优势数字电路里有个基本结论与非门是逻辑完备的意思是任何组合逻辑功能都可以只用与非门实现。这个性质在触发器设计里同样成立而且与非门做锁存结构有一个天然的优势——它的低电平有效特性刚好能对应触发器的置位和复位控制。具体来说一个二输入与非门当其中一个输入为低电平时输出必然为高电平跟另一个输入无关。这个特性直接构成了SR锁存器的核心两个与非门交叉耦合每个门的输出接到另一个门的一个输入就形成了一个能记住状态的双稳态结构。你给其中一个门一个低电平脉冲它就被置位给另一个门低电平脉冲它就被复位两个都不给低电平它就保持当前状态不变。用与非门而不是或非门来做还有一个很实际的原因在实际芯片里与非门的驱动能力和速度通常比或非门好尤其是在CMOS工艺下PMOS的载流子迁移率低于NMOS导致或非门的高电平输出驱动能力偏弱。所以教材和实验指导书里默认都用与非门来搭锁存器和触发器这不是随便选的。1.2 从SR锁存器到D锁存器的必然路径SR锁存器有个让人头疼的问题当S和R同时有效时输出状态是不确定的而且当两个控制信号同时撤销时输出可能进入亚稳态或者振荡。在实际电路里这种禁止态是必须消除的。D锁存器的思路很直接既然不允许S和R同时有效那就用一个输入D来控制让S和R永远互补。D为1时置位D为0时复位这样从外部看只有一个数据输入端不会出现禁止态。但这里有个关键问题——D锁存器是电平敏感的使能信号有效期间输出会跟着D一直变。这还不是真正意义上的触发器。真正的D触发器是边沿触发的只在时钟边沿那一瞬间采样D的值其他时间输出保持不变。从D锁存器到边沿触发D触发器需要用到主从结构或者维持阻塞结构。而带使能端的D触发器是在这个基础上再增加一个使能控制让触发器只在使能有效时才响应时钟。2. 与非门搭建D锁存器的完整推导2.1 基础SR锁存器的交叉耦合结构先看最基础的两门交叉耦合SR锁存器。取两个二输入与非门记为G1和G2。G1的输出Q接到G2的一个输入G2的输出Q非接到G1的一个输入。G1的另一个输入是S非低有效置位G2的另一个输入是R非低有效复位。这个结构的真值表很简洁S非R非QQ非状态0110置位1001复位11保持保持记忆0011禁止注意最后一行当S非和R非同时为0时两个输出都变成1这违反了Q和Q非应该互补的约束。而且当两个输入同时从0变回1时最终状态取决于两个门的延迟差异是不确定的。这就是禁止态的由来。2.2 用D输入消除禁止态的门级改造要消除禁止态最直接的办法是让S非和R非永远不可能同时为0。用一个D输入和一个使能信号EN来控制当EN有效时D经过一个非门产生D非然后D和EN做与非得到S非D非和EN做与非得到R非。这样当EN为1时如果D为1则S非为0、R非为1触发器置位如果D为0则S非为1、R非为0触发器复位。S非和R非永远互补禁止态被彻底消除。当EN为0时两个与非门输出都是1S非和R非都是1锁存器保持。这个结构就是经典的D锁存器总共用了四个二输入与非门两个做锁存两个做输入控制加一个非门。如果手头只有与非门非门可以用一个与非门的两个输入短接来实现所以总共五个与非门。2.3 使能信号在锁存器中的实际行为这里要特别强调使能信号的行为。在D锁存器中EN为高电平期间输出Q会跟随D变化。也就是说如果EN一直保持高电平D每变一次Q就跟着变一次。这不是边沿触发而是电平触发。很多人在实验里第一次搭出这个电路后发现触发器的输出在使能期间一直在动以为是电路有问题。其实这是D锁存器的正常行为不是故障。要得到边沿触发的行为必须用主从结构或者维持阻塞结构这是下一步的事。提示如果你在实验里只需要一个使能有效时跟随、使能无效时保持的器件D锁存器就够了。不要盲目追求边沿触发先想清楚你的时序需求。3. 从锁存器升级到边沿触发D触发器3.1 主从结构的核心思想主从结构是教科书里讲得最多的边沿触发器实现方式。它的思路是用两级D锁存器串联第一级叫主锁存器第二级叫从锁存器。时钟信号直接驱动主锁存器的使能经过一个非门后驱动从锁存器的使能。当时钟为高电平时主锁存器使能有效主锁存器跟随D输入从锁存器使能无效保持之前的状态。当时钟从高变低时主锁存器使能失效锁存住时钟下降沿前一刻的D值同时从锁存器使能有效把主锁存器锁存的值传到输出。这样输出只在时钟下降沿更新实现了边沿触发。主从结构总共需要多少个与非门每个D锁存器需要四个与非门加一个非门两级就是八个与非门加两个非门。如果非门也用与非门实现总共十个与非门。这个数量在实际搭电路时已经不少了面包板上会很拥挤。3.2 维持阻塞结构的简化思路维持阻塞结构是另一种边沿触发实现方式它用的门更少但理解起来稍微绕一点。核心思路是在D锁存器的基础上增加反馈路径使得在时钟边沿到来时输入的变化被阻塞住不会影响已经开始的翻转过程。具体来说维持阻塞D触发器用了六个与非门。其中四个构成基本的锁存结构另外两个构成维持和阻塞反馈。这个结构在74系列芯片里很常见比如74LS74就是维持阻塞结构的边沿D触发器。对于手工搭电路来说维持阻塞结构比主从结构省门但接线更绕容易接错。如果你是第一次做这个实验我建议先用主从结构把边沿触发的概念跑通再尝试维持阻塞结构。3.3 带使能端的边沿D触发器最终结构现在回到标题的核心带使能端的D触发器。在边沿触发的基础上增加使能端有两种常见的实现方式。第一种方式是在时钟路径上加控制用一个与非门一个输入接时钟另一个输入接使能信号。只有当使能有效时时钟才能通过这个与非门到达触发器内部。这种方式的好处是使能信号直接控制时钟的通断逻辑清晰。第二种方式是在数据路径上加控制使能信号和D输入做逻辑运算后再送入触发器。这种方式在使能无效时数据路径被封锁触发器内部保持。两种方式各有优劣。时钟路径控制的方式在使能切换时可能产生毛刺因为时钟信号被门控后边沿可能变形。数据路径控制的方式更安全但需要额外的逻辑门。在实际实验中我推荐用数据路径控制的方式虽然多用一个门但稳定性好很多。4. 完整电路连接与芯片选型4.1 推荐使用的标准逻辑芯片手工搭这个电路最常用的芯片是74HC00或者74LS00两者都是四二输入与非门。74HC00是CMOS工艺输入阻抗高静态功耗低适合电池供电或者对功耗敏感的场景。74LS00是TTL工艺输入电流较大但驱动能力强抗干扰性好。一个74HC00里有四个与非门搭一个D锁存器需要四个与非门加一个非门非门可以用一个与非门短接输入实现所以一个D锁存器刚好用掉一个74HC00。如果要搭主从结构的边沿D触发器需要两个74HC00。芯片型号工艺门数量单门延迟典型值适用场景74HC00CMOS49ns 5V低功耗、高输入阻抗74LS00TTL410ns强驱动、抗干扰74HCT00CMOS49nsTTL电平兼容CD4011CMOS460ns 5V宽电压范围选型时要注意电平兼容性。如果你用5V供电74HC00和74LS00都可以。如果用3.3V供电74HC00可以在3.3V下工作但74LS00不行。CD4011的工作电压范围很宽从3V到15V都能用但速度慢适合低频实验。4.2 门级连接步骤详解以主从结构带使能端的D触发器为例完整连接步骤如下。第一步搭主锁存器。取两个与非门G1和G2交叉耦合G1输出接G2输入G2输出接G1输入。G1的另一个输入是S1非G2的另一个输入是R1非。第二步搭主锁存器的输入控制。取与非门G3输入接D和EN输出接S1非。取与非门G4输入接D非和EN输出接R1非。D非由与非门G5短接输入产生。第三步搭从锁存器。取与非门G6和G7交叉耦合结构同主锁存器。G6的另一个输入是S2非G7的另一个输入是R2非。第四步搭从锁存器的输入控制。取与非门G8输入接主锁存器输出Q1和EN非输出接S2非。取与非门G9输入接Q1非和EN非输出接R2非。EN非由与非门G10短接输入产生。第五步接时钟和使能。时钟信号经过与非门G11与EN做与非后驱动主锁存器同时经过非门后驱动从锁存器。这个连接方式用了十一个与非门需要三个74HC00芯片。实际搭的时候面包板上的线会比较多建议先用不同颜色的线区分电源、地、时钟和数据信号。4.3 用DrawIO绘制电路图的技巧画数字电路图DrawIO是个很顺手的工具。它内置了数字电路符号库与非门、触发器、输入输出端口都有现成的图形。画的时候注意几点输入信号放左边输出放右边电源和地可以省略不画但要在标注里说明。门与门之间的连线尽量走直角交叉处如果相连要画实心圆点不相连就直接交叉。对于这个电路建议分两部分画左边画主锁存器和输入控制右边画从锁存器和输出控制中间用虚线框隔开。这样图面清晰也方便对照面包板上的实际布局。5. 实测中最容易翻车的五个地方5.1 使能信号抖动导致的输出振荡这是最常见的问题。机械开关产生的使能信号在按下和松开瞬间会有几十毫秒的抖动如果直接用开关控制使能端触发器会在抖动期间反复翻转输出看起来像振荡。解决办法有两个一是用RC滤波加施密特触发器做消抖二是用软件产生使能信号比如用单片机的一个IO口输出干净的高低电平。在实验里我强烈建议用单片机或者信号发生器产生使能信号不要用机械开关直接接。5.2 时钟信号边沿太慢引发的亚稳态如果时钟信号来自函数发生器边沿速率通常没问题。但如果用RC电路产生时钟边沿可能很慢导致触发器在边沿附近进入亚稳态输出出现毛刺或者延迟不确定。判断方法很简单用示波器看时钟信号的上升沿和下降沿如果从10%到90%的时间超过几十纳秒就要考虑加一个施密特触发器整形。74HC14是六施密特反相器很适合做这个。5.3 不同芯片混用导致的电平不匹配74HC系列和74LS系列混用时电平标准不完全一样。74HC的输出高电平在5V供电时大约是4.9V74LS的输入高电平门限是2.0V所以HC驱动LS没问题。但反过来74LS的输出高电平典型值是3.4V74HC的输入高电平门限是3.5V就可能在临界点上出问题。最稳妥的做法是同一块电路板上只用同一系列的芯片。如果必须混用中间加一个电平转换或者用74HCT系列做缓冲。5.4 电源去耦电容的缺失数字电路实验里电源去耦电容经常被忽略。每个芯片的电源引脚旁边都应该放一个0.1uF的陶瓷电容离引脚越近越好。没有这个电容芯片在翻转瞬间的电流尖峰会在电源线上产生噪声导致误触发。我见过很多次电路逻辑明明是对的但就是工作不稳定的情况最后发现就是少了一个去耦电容。这个坑不值得踩直接每个芯片配一个养成习惯。5.5 面包板接触不良的隐蔽故障面包板用久了弹簧片会松动接触电阻变大。数字电路对接触电阻很敏感尤其是时钟信号路径上一个接触不良的节点可能导致时钟边沿变形触发器工作异常。排查方法用万用表的通断档逐个节点测量连接是否可靠。或者换一块新面包板对比测试。如果电路时好时坏十有八九是接触问题。6. 从实验到实用这个电路的扩展方向6.1 二分频电路的直接应用D触发器最经典的扩展应用就是二分频。把Q非输出接回D输入每来一个时钟边沿输出翻转一次输出频率就是时钟频率的一半。这个二分频电路在时钟分频、频率合成里用得非常多。用带使能端的D触发器做二分频使能端可以用来控制分频的启停。使能有效时分频工作使能无效时输出保持时钟被忽略。这个功能在需要同步启停的场合很实用。6.2 移位寄存器的搭建思路多个D触发器级联可以构成移位寄存器。前一级的输出接后一级的D输入所有触发器共用同一个时钟。每个时钟边沿数据向右移动一位。使能端可以控制移位是否进行。用四个D触发器就能搭一个四位移位寄存器在串并转换、序列检测、数据缓存里都有应用。搭的时候注意所有触发器的时钟要严格同步时钟走线尽量等长避免时钟偏斜导致移位错误。6.3 用Multisim仿真验证逻辑在动手搭电路之前用Multisim仿真一遍可以省很多时间。Multisim里有74HC00的模型直接拖出来按电路图连接设置好时钟源和输入信号跑一下仿真看波形。仿真里可以很方便地观察使能信号、时钟、D输入和Q输出的时序关系确认逻辑正确后再上面包板。仿真里不会有的问题是接触不良和电源噪声所以仿真通过不代表实际电路一定工作但仿真不通过说明逻辑肯定有问题。6.4 从门级到芯片级的过渡实际工程里很少用分立门搭触发器都是用现成的触发器芯片比如74HC74双D触发器带置位复位、74HC175四D触发器带公共时钟和复位。这些芯片内部就是前面讲的维持阻塞或者主从结构只是集成在一个封装里。理解门级结构的意义在于当芯片行为不符合预期时你能从内部结构出发分析原因。比如74HC74的建立时间和保持时间参数如果你知道内部是维持阻塞结构就能理解为什么在时钟边沿附近D输入不能变化。7. 几个容易被忽略的参数细节7.1 建立时间和保持时间的实际含义建立时间是指在时钟边沿到来之前D输入必须保持稳定的最短时间。保持时间是指在时钟边沿到来之后D输入必须继续保持稳定的最短时间。这两个参数在74HC74的数据手册里都有标注典型值是建立时间20ns、保持时间5ns。在手工搭的电路里信号变化速度通常远慢于这个要求所以一般不用太担心。但如果你的时钟频率很高或者信号经过了很多级门延迟就要认真计算了。计算方法是从D输入的变化点到触发器的D引脚所有门延迟之和必须小于时钟周期减去建立时间。7.2 传播延迟对级联电路的影响每个门都有传播延迟74HC00在5V下的典型传播延迟是9ns。信号经过多级门后延迟会累积。在级联多个触发器时前一级的输出经过传播延迟后才到达后一级的D输入如果时钟同时到达所有触发器后一级可能在时钟边沿时还没收到前一级的稳定输出。解决办法是让时钟到各级触发器的路径延迟匹配或者降低时钟频率给信号传播留出足够时间。在低频实验里这不是问题但设计实际电路时必须考虑。7.3 扇出能力的限制一个门的输出能驱动多少个同类门的输入这个数量叫扇出系数。74HC系列的扇出系数很大通常能驱动几十个门。74LS系列的扇出系数是8左右。在搭这个电路时时钟信号要驱动多个门的输入如果时钟源驱动能力不足可能需要加缓冲器。判断方法查时钟源芯片的输出电流能力再查每个被驱动门的输入电流两者相除就是能驱动的门数量。如果不够加一个74HC04或者74HC14做缓冲。8. 我踩过的坑和总结的经验第一次搭这个电路的时候我用的是74LS00面包板是旧的电源是实验室的固定5V电源。电路接好后输出完全不对Q和Q非有时候同时为高有时候同时为低。查了半天逻辑确认接线没错最后发现是面包板中间有一段弹簧片坏了导致两个门之间的连线时通时断。后来换了新面包板加了去耦电容用单片机产生时钟和使能信号一次就跑通了。从那以后我养成了几个习惯搭电路前先用万用表检查面包板的关键节点每个芯片旁边必放去耦电容信号源优先用单片机而不是机械开关。还有一个经验是关于画电路图的。一开始我觉得画图浪费时间直接在面包板上试。但电路一复杂接线就乱了排查故障时根本不知道哪根线对应哪个节点。后来我强迫自己先用DrawIO画一遍标好每个门的编号和引脚再照着图接线。虽然前期多花二十分钟但排查故障时省下的时间远不止二十分钟。最后说一个关于芯片选型的实际体会。74HC00和74LS00在低频下表现差不多但在高频下74HC00的边沿更陡抗干扰能力反而更好。如果实验允许优先用74HC系列。CD4011虽然电压范围宽但速度太慢做边沿触发器时容易在时钟边沿附近出问题不建议用于这个实验。这个电路的价值不在于它本身有多复杂而在于它把时序逻辑最核心的几个概念——锁存、边沿触发、使能控制、建立保持时间——全部串在了一起。把这几个概念在这个电路上跑通后面学计数器、移位寄存器、状态机都会顺很多。
返回列表