☰
边沿触发D触发器电路图设计与仿真验证:从CMOS传输门到波形分析
2026/10/7 1:21:04 网站建设 项目流程

1. 从零理解边沿触发D触发器:为什么它值得你花时间

数字电路里,触发器是最基础的存储单元,而D触发器又是其中用得最广泛的一种。你手头如果有一块FPGA开发板、一颗单片机,或者正在学数字集成电路设计,D触发器几乎无处不在。它解决的问题很纯粹:在某个特定时刻,把输入端D的数据“锁”进电路里,并在下一个时刻到来之前保持不变。这个“特定时刻”就是边沿——上升沿或者下降沿。

为什么非要边沿触发?电平触发的锁存器在使能信号有效期间,输出会跟着输入变,这在级联使用时容易产生空翻和竞争。边沿触发只在时钟跳变的那一瞬间采样,其余时间输出稳定,这让时序逻辑的设计变得可控。你看到的计数器、移位寄存器、分频电路,底层全是边沿触发D触发器在撑着。

这篇文章面向的是想真正动手画出一个边沿触发D触发器电路图、并且通过仿真验证其功能的读者。不管你是电子类专业的学生、刚入行的数字IC设计工程师,还是想复习CMOS电路基础的从业者,下面的内容都能直接参考复现。我会从电路结构选型讲起,一步步给出完整的晶体管级电路图,然后手把手带你跑仿真,最后把我在实际调试中踩过的坑和排查方法一并分享出来。

核心关键词:D触发器、边沿触发、CMOS传输门、仿真、电路图。这几个词贯穿全文,你会在每个环节看到它们的具体落地方式。

2. 边沿触发D触发器的电路结构选型与设计思路

2.1 主从结构与传输门方案的取舍

边沿触发D触发器的主流实现方式有两种:主从锁存器级联和传输门脉冲触发。主从结构用两个电平敏感锁存器串联,主锁存器在时钟某一电平时采样,从锁存器在另一电平时输出,合起来实现边沿行为。这种结构逻辑清晰,但晶体管数量偏多,而且时钟信号需要驱动大量栅极,功耗和延迟都不太理想。

CMOS传输门方案则更简洁。传输门由一个NMOS和一个PMOS并联组成,控制信号互补。当时钟为低时,第一级传输门导通、第二级截止,输入D被采样到内部节点;当时钟跳变为高时,第一级截止、第二级导通,采样值传到输出。这种结构只用两个传输门加若干反相器就能实现,晶体管数少,速度快,也是工业界最常用的边沿触发D触发器拓扑之一。

我选择传输门方案来画电路图,原因有三:第一,结构对称,画出来好看也好理解;第二,仿真时节点少,波形干净,不容易出现莫名其妙的毛刺;第三,它是理解更复杂时序单元(比如带扫描链的DFT触发器)的基础。你把这个电路吃透了,后面看标准单元库里的DFF电路图会轻松很多。

2.2 时钟反相与内部节点的作用

传输门需要一对互补的时钟信号:CLK和CLK_B。CLK_B由CLK经过一个反相器产生。这个反相器不只是逻辑取反,它还起到缓冲和整形的作用。在实际电路中,时钟反相器的尺寸需要仔细设计,保证CLK和CLK_B的交叉点在一个合理的位置,否则传输门会出现同时导通的瞬间,导致数据竞争。

内部节点通常有两个:一个是主锁存器的输出节点(记作M),一个是从锁存器的输出节点(记作S)。M节点在CLK为低时跟随D,在CLK为高时保持;S节点在CLK为高时跟随M,在CLK为低时保持。最终输出Q经过一个反相器缓冲,同时产生Q_B。这个反相器除了驱动能力之外,还隔离了内部节点和外部负载,避免输出端的电容影响采样精度。

还有一个细节:主锁存器的保持状态靠一个反相器环或者弱反馈维持。常见做法是在M节点和地之间加一个由CLK_B控制的小尺寸NMOS,或者用一个反相器加传输门构成反馈回路。我倾向于用反相器环加传输门的方式,因为它在仿真中表现更稳定,保持状态下M节点不会因为漏电而慢慢漂移。

2.3 晶体管尺寸的初步估算

画电路图之前,得先确定管子的大致尺寸。这不是随便填的,尺寸直接影响仿真能不能跑通、波形好不好看。以下是我在0.18微米工艺下的常用经验值,你可以根据自己用的工艺库按比例缩放。

晶体管类型宽度W长度L说明
传输门NMOSNMOS0.5um0.18um采样管,导通电阻要小
传输门PMOSPMOS1.0um0.18um与NMOS并联,宽度取2倍
时钟反相器NMOSNMOS0.5um0.18um驱动CLK_B
时钟反相器PMOSPMOS1.0um0.18um与NMOS匹配
输出反相器NMOSNMOS1.0um0.18um驱动能力稍大
输出反相器PMOSPMOS2.0um0.18um与NMOS保持2:1
反馈反相器NMOSNMOS0.3um0.18um弱反馈,尺寸小
反馈反相器PMOSPMOS0.6um0.18um弱反馈,尺寸小

PMOS宽度取NMOS的两倍,是为了补偿空穴迁移率低于电子迁移率的问题,让上升沿和下降沿的延迟大致对称。反馈反相器尺寸取小,是为了在采样阶段不影响主传输门的写入,只在保持阶段提供足够的反馈强度。这些数值不是绝对的,你在仿真时可以根据波形微调。

3. 手把手绘制CMOS传输门边沿触发D触发器电路图

3.1 准备工作和工具选择

画电路图可以用Cadence Virtuoso、Synopsys Custom Compiler,也可以用免费的LTspice或者开源的Xschem。如果你在学校或公司,大概率用的是Cadence。如果是个人学习,LTspice足够跑通这个电路,而且安装简单、上手快。我下面以通用画法为主,不绑定具体工具,你用什么软件都能照着画。

开始之前,确认你手里有工艺库文件。没有工艺库的话,LTspice可以用它自带的理想MOS模型,虽然和实际硅片有差距,但验证逻辑功能完全够用。Cadence的话需要加载PDK,选好NMOS和PMOS的符号。

3.2 第一级:时钟反相器与传输门

先从时钟路径开始画。放置一个NMOS和一个PMOS,栅极连在一起作为输入CLK,漏极连在一起作为输出CLK_B,源极分别接地和电源。这就是时钟反相器。画完之后,在CLK_B节点上标注一下,后面传输门的PMOS栅极要接这个信号。

接下来画第一个传输门。放置一个NMOS和一个PMOS,源极和漏极分别并联:NMOS的源接PMOS的源作为输入端D,NMOS的漏接PMOS的漏作为输出端M。NMOS的栅极接CLK,PMOS的栅极接CLK_B。这样当时钟为低时,CLK为低、CLK_B为高,NMOS和PMOS同时导通,D传到M;时钟为高时,两个管子都截止,M保持。

注意:传输门的NMOS和PMOS源漏不要接反。虽然MOS管对称,但在某些工艺下源漏互换会影响体效应,导致阈值变化。养成好习惯,输入端接源、输出端接漏。

3.3 第二级:从锁存器传输门与反馈保持

第一个传输门的输出M节点,接下来要接两个东西:一个是第二个传输门的输入,一个是反馈保持电路。第二个传输门的画法和第一个一样,但控制信号反过来:NMOS栅极接CLK_B,PMOS栅极接CLK。这样时钟为高时第二个传输门导通,M传到S;时钟为低时截止,S保持。

反馈保持电路由两个反相器组成。第一个反相器的输入接M,输出接一个传输门的输入;这个传输门的输出接回M。反馈传输门的控制信号和主传输门相反:主传输门导通时反馈传输门截止,主传输门截止时反馈传输门导通。这样在采样阶段反馈不干扰,在保持阶段反馈维持M节点的电平。

反馈传输门的尺寸要小,前面表格里给了参考值。如果反馈太强,采样时D端可能驱动不动M节点,导致写入失败;如果反馈太弱,保持阶段M节点会漏电。仿真时重点看M节点在保持期间的电平是否稳定。

3.4 输出缓冲与Q_B生成

第二个传输门的输出S节点,接一个反相器,输出就是Q。再在Q后面接一个反相器,输出Q_B。这两个反相器除了缓冲,还起到整形的作用。S节点的波形可能上升下降沿比较缓,经过两级反相器之后,Q和Q_B的边沿会变得陡峭,驱动能力也更强。

如果你需要Q和Q_B同时输出,注意两个反相器的延迟要匹配。可以在版图阶段做对称设计,仿真阶段先不管,功能对了再说。输出反相器的尺寸比内部反相器大一些,具体值参考前面的表格。

3.5 完整电路连接检查清单

画完之后,对照下面的清单逐项检查,避免低级错误:

  • CLK和CLK_B是否互补?用反相器连接,不要接错。
  • 第一个传输门:NMOS栅接CLK,PMOS栅接CLK_B。
  • 第二个传输门:NMOS栅接CLK_B,PMOS栅接CLK。
  • 反馈传输门:控制信号与主传输门相反。
  • 所有PMOS的源极或漏极是否接到了电源?NMOS是否接地?
  • 输出反相器链是否从S节点开始,经过两级到Q_B?
  • 电源和地的符号是否都标注清楚?

检查完毕,电路图就算画好了。接下来进入仿真环节。

4. 仿真验证:从激励设置到波形分析

4.1 仿真环境搭建与模型配置

LTspice里新建一个原理图,把刚才画的电路放进去。MOS模型用.model语句定义,或者直接调用工艺库。如果是理想仿真,可以用以下简化模型:

.model NMOS NMOS (LEVEL=1 VTO=0.5 KP=120u LAMBDA=0.02) .model PMOS PMOS (LEVEL=1 VTO=-0.5 KP=60u LAMBDA=0.02)

这个Level 1模型虽然粗糙,但跑逻辑功能没问题。电源电压设1.8V,对应0.18微米工艺。如果你用Cadence,直接调PDK里的模型,电源电压按工艺要求设。

时钟信号用PULSE源:上升沿和下降沿都设成100ps,周期20ns,占空比50%。D输入端用另一个PULSE源,周期设成时钟的两倍,比如40ns,这样能观察到D在时钟边沿前后的变化。具体设置:

VCLK CLK 0 PULSE(0 1.8 0 100p 100p 10n 20n) VD D 0 PULSE(0 1.8 5n 100p 100p 20n 40n) VDD VDD 0 1.8

仿真类型选TRAN,仿真时间设100ns,步长设10ps。步长太大会漏掉边沿细节,太小会跑得慢。10ps是个折中值,跑几十个周期几秒钟就出结果。

4.2 关键节点波形观察与判读

跑完仿真,把CLK、D、M、S、Q、Q_B六个节点的波形都调出来。重点看以下几个时刻:

第一个时钟上升沿到来时,D的值是多少?M节点应该保持上升沿之前D的值,S节点在上升沿之后更新为M的值,Q跟着S变。下降沿到来时,M更新为D的新值,S保持,Q不变。

我实测下来,最容易出问题的是M节点。如果反馈太强,M在采样阶段跟不上D的变化,波形会看到M上升缓慢或者只上升到一半。如果反馈太弱,M在保持阶段会慢慢往下掉,几十纳秒后可能掉到阈值以下,导致下一级误判。

判读波形时,用光标测量几个关键参数:传输门导通时的传播延迟(D到M)、从锁存器的传播延迟(M到S)、输出反相器的延迟(S到Q)。这些延迟加起来就是D到Q的总延迟,通常在几百皮秒量级。如果延迟超过1ns,检查管子尺寸是不是太小了。

4.3 建立时间和保持时间的测量方法

建立时间和保持时间是D触发器的核心时序参数。建立时间是指在时钟边沿到来之前,D必须稳定的最短时间;保持时间是指在时钟边沿之后,D必须继续保持的最短时间。

测量方法:固定时钟周期,逐步移动D的跳变沿,观察Q的输出是否正确。具体操作:把D的跳变时刻从时钟边沿前1ns开始,每次往前移100ps,直到Q的输出出现错误。记录下最后一个正确时的D跳变时刻与时钟边沿的时间差,就是建立时间。保持时间同理,把D的跳变时刻从时钟边沿后0ns开始,逐步往后移,直到Q出错。

我实测这个电路在0.18微米工艺下,建立时间大约200ps,保持时间大约100ps。你的结果可能不同,取决于管子尺寸和模型参数。这个测量过程比较繁琐,但值得做一遍,你会对时序概念有更具体的认识。

4.4 功耗与延迟的折中分析

仿真跑通之后,可以顺便看一下功耗。在电源端加一个电流探头,对电流波形积分得到平均功耗。时钟频率越高,功耗越大,因为传输门和反相器的充放电次数增加了。

延迟和功耗是一对矛盾。增大管子宽度可以减小延迟,但会增加寄生电容,导致功耗上升。我试过把传输门NMOS宽度从0.5um加到1um,延迟降了大约30%,但功耗涨了将近50%。实际设计中要根据应用场景取舍:如果是高性能处理器,优先保延迟;如果是低功耗物联网芯片,优先保功耗。

5. 常见问题与排查技巧实录

5.1 仿真不收敛或波形异常怎么办

仿真发散是新手最常遇到的问题。现象是波形乱跳、电压跑到电源轨之外、或者仿真直接报错。原因通常有三个:一是电路有悬空节点,比如某个MOS的栅极没接信号;二是初始条件没设好,节点电容上的初始电压不确定;三是步长太大,数值积分不稳定。

解决办法:首先检查所有节点是否都有直流通路。悬空节点加一个大电阻到地或电源,比如1G欧姆。其次,在仿真设置里加.ic语句,给关键节点设初始电压,比如.ic V(M)=0 V(S)=0。最后,把最大步长设小一点,比如1ps,虽然跑得慢,但能收敛。

提示:LTspice里如果遇到收敛问题,可以在.options里加METHOD=GEAR和MAXORD=2,通常能改善。

5.2 输出波形出现毛刺或竞争

毛刺通常出现在时钟跳变的瞬间。原因是CLK和CLK_B的交叉点不理想,导致两个传输门短暂同时导通。解决办法是调整时钟反相器的尺寸,让CLK_B的跳变稍微滞后于CLK,保证先关断再导通。

另一个原因是反馈传输门的控制信号和主传输门配合不好。检查反馈传输门的栅极连接是否正确:主传输门NMOS栅接CLK时,反馈传输门NMOS栅应该接CLK_B。如果接反了,采样阶段反馈导通,会和输入信号打架,产生毛刺。

5.3 保持阶段电平漂移的定位与修复

保持阶段M节点电平慢慢往下掉,是漏电导致的。0.18微米工艺下,关断的NMOS漏电在皮安量级,如果M节点的电容只有几飞法,几十微秒后电压就会明显下降。但在常规仿真时间(几百纳秒)内,这个漂移通常看不出来。

如果你确实观察到了漂移,先检查反馈反相器的尺寸是不是太小了。把反馈反相器的宽度加倍试试。如果还不行,在M节点加一个弱保持电路,比如一个栅极接CLK_B的PMOS,源接电源、漏接M,尺寸取最小。这样保持阶段PMOS微弱导通,补充漏电。

5.4 常见问题速查表

现象可能原因排查方法解决措施
仿真不收敛悬空节点、初始条件不明检查所有节点连接加初始条件、减小步长
输出无变化传输门控制信号接反核对CLK和CLK_B连接交换控制信号
波形有毛刺时钟交叉点不理想观察CLK和CLK_B波形调整反相器尺寸
保持电平漂移反馈太弱或漏电大测量M节点保持电压增大反馈管尺寸
建立时间过长传输门导通电阻大测量D到M延迟增大传输门宽度
功耗过高管子尺寸过大测量电源电流减小非关键路径管子

5.5 我踩过的几个坑

第一个坑:一开始忘了画反馈传输门,M节点在保持阶段直接浮空,仿真结果完全不对。后来加上反馈,但反馈传输门的控制信号接错了,采样阶段反馈导通,D端驱动不动,波形一直上不去。这个错误我查了半天才找到,因为波形看起来像是管子尺寸不够,实际上是控制逻辑错了。

第二个坑:时钟反相器的PMOS宽度设得和NMOS一样,导致CLK_B的上升沿特别慢,传输门在时钟跳变时出现同时导通。后来把PMOS宽度加倍,问题解决。这个教训是:时钟路径上的反相器,PMOS一定要比NMOS宽,保证上升下降对称。

第三个坑:仿真步长设了100ps,结果边沿细节全丢了,波形看起来方方正正,实际上有振荡。后来改成10ps,才看到真实的过冲和振铃。所以仿真步长不要贪大,宁可多跑几秒。

6. 从电路图到版图:后续可以扩展的方向

电路图跑通之后,如果你做的是集成电路设计,下一步就是画版图。传输门D触发器的版图比较规整,两个传输门可以做成对称结构,时钟反相器放在中间,输出反相器放在右侧。注意时钟线要尽量宽,减小电阻和延迟;内部节点M和S的走线要短,减小寄生电容。

版图画完做LVS和DRC,然后提取寄生参数再做后仿真。后仿真和前仿真会有差异,主要是寄生电容导致延迟增加。如果后仿真时序不满足,回头调整管子尺寸或者走线宽度。

如果你只是做板级设计,用分立元件搭D触发器,可以用74HC74这类芯片,内部就是边沿触发D触发器。但用分立MOS管搭的话,要注意阈值电压匹配和温度漂移,实际搭建时可能需要加偏置电路。

这个电路还可以扩展成带置位和复位端的D触发器,只需要在M节点和S节点各加一个或非门或者与非门,控制信号从外部引入。带扫描端的DFT触发器也是在这个基础上加一个多路选择器,原理一样,只是多了一个测试模式。

我个人在实际操作中的体会是,画电路图这件事,看十遍不如画一遍。你照着上面的步骤走一遍,把仿真跑通,把波形调出来看,比读任何教材都管用。遇到问题不要怕,按排查表一步步来,大部分问题都是连接错误或者尺寸不合理,耐心调一调就能解决。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询