tags
课程
摸鱼的笔记
type
Post
status
Published
date
Jan 3, 2026
slug
dashudian
summary
category
摸鱼的笔记
password
icon
#1 直流特性
其中,,具体推导见纸质笔记

Keff等效:串联K1||K2,并联K1+K2
恒通管粗略估计认为也与输入相连,恒断管从电路中去掉
Rmk:反相器具有“可恢复性逻辑”,任意初始电平最后都能稳定地收敛到0/VDD,这一点用“蛛网图”就能说明
- 例题1

3区高度从Vout=Vit向上|VTP|,向下VTN,合计|VTP|+VTN
- 例题2
思路:找到最大(NMOS强)和最小的Kr,分别对应最小(NMOS强)和最大的Vit

电路比较复杂,上下两部分耦合,难以一下看出Kr的最值。这时候最好的办法就是遍历。先枚举0/1,而某一个信号连到输入表示“N1P0”。匹配其中Kn和Kp的最值从而计算Kr的最值,不能出现某个信号N和P都不导通的状态(N0P1)
本题中,AB对称
A | B | C | D | Keff |
0 | 0 | 0 | 0 | 3/5Kp(Kpmax) |
0 | 0 | 0 | 1 | Kn |
0 | 0 | 1 | 0 | 1/3Kp(Kpmin) |
0 | 0 | 1 | 1 | Kn |
0 | 1 | 0 | 0 | 1/2Kp |
0 | 1 | 0 | 1 | Kn |
0 | 1 | 1 | 0 | 1/2Kn(Knmin) |
0 | 1 | 1 | 1 | 3/2Kn |
1 | 1 | 0 | 0 | 1/2Kp |
1 | 1 | 0 | 1 | Kn |
1 | 1 | 1 | 0 | 2/3Kn |
1 | 1 | 1 | 1 | 5/3Kn(Knmax) |
Krmax:Knmax/Kpmin,N:1111 P:0010 ⇒ ABD作为输入,C=1 ⇒ 5/3Kn / 1/3Kp
Krmin:Knmin/Kpmax,N:0110 P:0000 ⇒ BC作为输入,A=D=0 ⇒ 1/2Kn / 3/5Kp
#2 瞬态特性
其中
u1和u2分别为计时开始和终止的电平比例,一般取u1=0.1,u2=0.9,即监控Vout从0.1VDD→0.9VDD的时间
tf只需要把PMOS换成NMOS,此处省略
通常用非阶跃近似简化为
如果Keff仍然采取“恒通~input”的估计,则充放电时间只由终态决定。
如果负载电容占主导,提升器件W/L可以提升速度;而如果寄生电容(栅电容、漏区电容与W成正比)占主导,就见效甚微
- 环振
N(奇数)个反相器收尾相连。如果不计连线延时,需要N>1
- 例题1

A | B | X
(Cn+Cp=3C0) | Y
(10fF=5C0) | path | K | max delay |
0 | 0 | 1 | 0 | →X→Y | 1/2Kp + Kn | 11t0 |
0 | 1 | 0 | 1 | →X→Y | Kn + 1/2Kp | 13t0 |
1 | 0 | 0 | 1 | →X→Y | Kn + 1/2Kp | 13t0 |
1 | 1 | 0 | 0 | →Y | 10t0 |
由于Keff只由末态确定,因此只需要枚举输入的末态,并对应给出各节点的末态电平。
注意点1:为方便计算,把所有电容化归到C0,并把所有时间化归到t0。
注意点2:path需要小心甄别,如A=B=1时,第二级能够直接放电而不需要等待前一级的信号,因此第一级不在path中。
如果求最大延时,需要验证存在一组先前状态,使得path中每一级都依赖前一级结果。
如果求最小延时,则一些path可能被缩短。比如A=B=1 → A=1,B=0,X没有变化,因此求最小延时不应计入路径。表格中计入的是最长路径,因为从A=B=0 → A=1,B=0,X变化了。
path正确的必要条件一:节点电平0101间隔。正确的path一定由数个等效反相器构成。
path正确的必要条件二:K一定是KnKp间隔的,因为Kp对应节点=1,Kn对应节点=0。据此,A=B=1时不应计入第一级延时。
注意点3:如果只求特定输入→输入的延时,需要排除Y不变的情况,如FA中A=B=1,就不能计算Cin→Cout的延时。
#3 传输门
- NMOS/PMOS传输门
NMOS传低电平,PMOS传高电平(记忆:与反相器中工作状态一致),否则有阈值损失,而且等效导电因子约*1/2

- 例题1


图C:上升延时,下降延时
图D:上升延时,下降延时
- CMOS传输门

- 阈值恢复
NMOS传高电平只能到VDD-VTN,通过Mr再拉到VDD。
缺点:NMOS传低电平的时候(此时Out即将0→1)Mr一开始是开启的,(Mn||M1)对X的放电将与Mr对X的充电竞争,因此Mr不能太强

- CPL
线与的两条路通且只通一条,本质上就是MUX,有阈值损失,需要加反相器和阈值恢复
每个运算同时给出结果和结果的非。阈值恢复可以从“对方”那里引出


- DPL
比CPL用多一倍的管子,每次有1个NMOS和1个PMOS构成线与,由于传递的信号相同,避免了断路;同时消除了阈值损失;因为有两个通路也加快了速度

#4 动态电路
NMOS提前预充到VDD;PMOS提前预充到GND
NMOS/PMOS网络结构同CMOS设计

- 问题一:电荷分享


左图:A=1,B=0,NMOS网络不导通,但是M1作为传输管会使得C1分走部分CL的电荷,造成Vout下降
一般情况下CL>>C1,阈值损失导致C1电压只能到VDD-VTN
右图:解决办法。对每个节点都加入预存管,提前把C1充到VDD。
- 问题二:级联
如果NMOS直接级联,假设前级输出为0,但其从1→0需要经过一段时间,而后级NMOS接收到“1”的输入,会“错误地放电”。
然而,注意到PMOS面对错误的“1”并不会影响Vout,“0”的延后对其造成的影响只是PMOS网络的导通延后,进而Vout的拉高延后了。同理,NMOS对错误的“0”也具有容忍性。因此,我们可以将NMOS、PMOS交替级联。

注意PMOS的时钟需要取反,这样当,NMOS和PMOS均能预充,而当时,将在一个周期内一级一级地完成求值,求值总时间为各级下拉/上拉延时之和,
- 问题三:电荷泄露
NMOS存在电荷泄露问题,添加一个PMOS作为keeper。(会出现类似“2个PMOS的传输门”的结构)
这可以同时解决电荷分享的问题。

在NMOS网络下拉时,Mkp会与NMOS网络竞争,拖慢下拉速度。
- 时钟周期
T/2的时间应该允许网络进行 1)预充 2)逐级求值,一般而言2)的时间大于1),尤其是多级电路,预充是同步进行的,而求值则需要逐级进行
同时,在T/2的时间内,电荷应当不至于泄露掉。记电荷保持时间为
多米诺逻辑
在每一级之后加一个反相器。解决N-N和P-P级联问题,并有利于实现不带非的逻辑。


左图:(ABCDE)’
右图:前后同类加inv,前后不同类直接连
RMK:如果一级的输入全部来自前级多米诺(言下之意,前后级性质相同),则可以去掉MN1和MP2。例如对NMOS,前级输出全部被充到VDD,经过反相器送到本级都是低电平,NMOS网络不可能导通,因此也就能去掉(原本为了防止预充时NMOS网络导通而加入的)MN1。
- 其他多米诺结构


#5 复杂逻辑门
XOR & XNOR
- CMOS直接实现
左边:XOR,Y=(AB+A’B’)’
右边:XNOR,Y=(AB’+A’B)’

- NOR+AOI
以XOR为例,XNOR可以用NAND+OAI

- 传输门

左图:6管。A=1是传输门关,后级为正常反相器,Y=B’;A=0时传输门开,Y=B无阈值损失,同时后级实现有阈值损失的Y=B,不冲突
右图:8管。用B来做MUX的控制信号
MUX & DEMUX
- MUX2


左图:S=0时打开左边的反相器;S=1时打开右边的反相器
右图:S控制两个传输门,有且仅有一个打开
可以用2-1MUX实现XOR
- MUX4
两级共3个MUX2级联

传输门实现,更加规整。也可以进一步变成MUX2的级联
传输门还有一个好处,只需要把输入输出颠倒,就能直接实现DEMUX


Encoder & Decoder
左图:2^n个或非门(或非 等价于 非与)。如果用与非门,需要加一个反相器
右图:也可以采用动态电路来实现。由于是“与”的逻辑,因此富PMOS的动态电路其实会更高效,不会出现图中富NMOS电路一堆NMOS串联的问题


HA & FA
- 2HA+1OR
- 资源复用
S=1的情况:当Cout=1时,需要ABCin均为1;当Cout=0时,需要ABC有至少一个是1

- 镜像逻辑
全加器的输出具有镜像特征:当所有输入均取反,输出也取反
利用这一特征,NMOS和PMOS可以采用【相同】的结构。这样有利于在“或非”型逻辑中,减少PMOS的串联
为什么可以用相同结构?
假设任意一组使得NMOS网络导通的输入,其取反后必然能使相同结构的PMOS网络导通;同时,由于镜像逻辑的保证,NMOS网络(与原本的CMOS设计相同)一定不会导通


- 传输门
用A xor B的结果作为第二级MUX的控制信号

#6 加法器
行波进位加法器(Ripple-Carry Adder, RCA)

其中Tcarry为A/B/Cin→Cout的延时,Tsum为A/B/Cin→S的延时。对28管全加器,一般有Tsum>Tcarry。因此上面分析关键路径延时取Ci0→S3的延时,而没有取Ci0→Co3的延时。
跳跃进位加法器(Carry-Skip Adder, CSA)

为研究进位依赖关系,定义三个信号。表示进位一定是1,从本级产生(generate)与前一级无关。表示进位一定是0,被本级消除(kill)。表示本级Cout=Cin,直接传递前级的进位(propagate)。容易发现三个信号是互斥的,有且仅有一个信号为1。
把FA细化为按顺序执行的三个步骤(第3步只依赖本级的第1步和上一级的第2步)。(定义Ci为第i级的输出Cout)
- Setup.
- Carry.
- Sum.
在每一组中,如果发现4个Pi都是1,说明这一组的Cout=这一组的Cin,直接传输前一组的Cin。因此MUX的控制信号为
- setup是并行的。
- 最坏情况下,这样MUX无法选择C3=Cin,C3依赖C2依赖C1依赖C0,C0不依赖Cin但是依赖G0P0,因此第一组仍然有M*Tcarry,G0P0→C0→C1→C2→C3
- 后面三组如果出现Pi=0,意味着不依赖前一组,前一组不在关键路径中,只会缩短关键路径。因此,最坏情况是后面均为Pi=1,共需要经过(N/M-1)个bypass
- 最后一组,我们不再关心Cout(因为再经过一个bypass很快,如果本级有Pi=0,只会更快),我们需要关心S。由于S15=P15xorC14,最坏情况下C14依赖C13依赖C12依赖前一组的Cout。因此还需要(M-1)*Tcarry+Tsum
以上是最长延时,特定输入能缩短关键路径。如,ABCD+DCBA。每一组中,P0=P1=P2=1,G3=1,因此每一组中的S3依赖于C2-C1-C0-Cin,而每一组的Cin只需要经过一个carry和一个bypass,因为前一组的G3=1。综上T=Tsetup+Tcarry+Tbypass+3*Tcarry+Tsum。
总的来说就是看两个Pi=0之间的路径(包括Pi=0到最终输出的路径)
超前进位加法器(Carry-Lookahead Adder, CLA)

以上只显示了进位链。以下记组进位信号为GGj,GPj。容易验证,GGj和GPj也是互斥的。
与跳跃进位一样,都是在加速进位的传播。当GPj=1(意味着GGj=0)时,两种加法器都会直接选择GCout=GCin;而当GPj=0,跳跃进位会少走几个carry给出GCout,而超前进位通过提前计算GGj给出GCout。
TG指从PiGi生成GP,GG的过程,TGcarry指的过程。
对比跳跃进位,TG取代了M*Tcarry,TGcarry取代了Tbypass
进位选择加法器(Carry-Select Adder, CSA)

这里是把进位链和求和分开了。
实际上第一级可以直接输入Cin,可以少一个Tmux。
进位链
- 多输出多米诺(见多米诺逻辑)
- 传输门(左图)
以A xor B作为控制信号,具体可见上一章“HA & FA”


- 曼彻斯特进位链(右图)
动态电路实现。当且Pi=1时从左边放电;当Gi=1从下面放电。
延迟~N^2,这与一般N级动态电路不同,是因为前级输入没有连到gate。这里N个横着的串联管用elmore模型估计为N级RC延迟,因此延迟~N^2。
- 在曼彻斯特进位链中加入进位跳跃

#7 时序电路
DFF

前级clk=0透明,后级clk=1透明。
setup从D→A,能把A覆盖掉即可。tcq是从A到Q。
如果改成从两个反相器中间的节点引出输出:后级反相器接收到的是,但因为两极输出都反向了,不影响DFF功能。setup仍然需要经过两极反相器,但tcq只需要经过一级反相器就够了。
动态DFF

信息存在。
- ,第一级透明反相器,第二级预充,第三级只有一个上拉PMOS
- ,第一级只剩一个下拉NMOS(由于setup要求,此时D还不会变,因此x不变),第二级求值,第三级是反相器。
为什么2)之后就能锁存?
因为要使第二级出错,只能是x:0→1造成误放电,而第一级上拉通路已经关闭。
可以验证一下:如果在期间D:1→0,不会改变x的值。如果在期间D:0→1导致x:1→0,只要第二级已经完成了对y节点的放电,y节点不会再被拉高,因此也不会造成第二级结果错误。从第二种情况中,可以看到
#8 存储器
SRAM

以下假设阵列大小为2^(R+C)*W b。其中R为行地址长度,C为列地址长度,W为单个word的位宽。
- 6T cell



读取:BL和BLB一个被拉低,一个被拉高
写入:从内部节点放电(图中从QB向BLB放电),进而将Q拉高。“写0不写1”。
- 行译码器:R输入→2^R输出


左图:最简单的高有效(有且仅有一个输出为1)decoder由2^R个R输入NOR门构成。
右图:(第一级高有效,第二级低有效)当R比较大时,分多级译码。例如,NOR4=NOR2+AND。。这里第二级是NAND,因此整个译码器是低有效。
还可以用树状DEMUX实现,级联就是MUX反过来。比如R=3,可以第一级M1=2,第二级M2=1。

动态电路来实现:左边是高有效,右边是低有效。

- 列译码器
需要实现数据的双向传输 ⇒ 传输门


如果一个128*8b存储器,阵列为32*32,则C=2。左图列译码器需要2*INV+4*NOR2+4=24个晶体管;右图列译码器只需要2*INV+6=10个晶体管。
- Precharge和SA


两个设计中横向的晶体管都用于确保预充结束后BL和BLB电压一致
DRAM
- 1T1C cell

写“1”:BL=VDD,WL=1,Vx→Vs1=VDD-VTN
写”0”:BL=0,WL=1,Vx→Vs0=0
读取:预充BL=(Vs0+Vs1)/2。如果cell中是“1”,则BL电平上升;如果cell中是“0”,则BL电平下降
电荷传输效率
由于CBL通常大于Cs,因此T通常较小。同时为加快读取速度,需要在外面加Sense Amp。
- 3T cell

写“0”则Vx=0,写“1”则Vx=VWWL-VTN。读写分离,读取不再损坏内部数据。
ROM
- 并联结构


左边:D[0]=0100
右边:D[0]=1011
- 串并联结构(左图)
只有一行WL=0,其余均为WL=1。
D[0]=0100


- 预充ROM(右图)
实现无比逻辑
- 例题1
假设2-4译码器用的是与非门,单级结构。

设宽长比1:1的栅电容为C0。外围NMOS/PMOS导电因子为K0.
译码器延时:2*6C0/K0(注意每个inv连了两个NAND)+6C0/0.5K0(NAND串联下拉)+3*C0/K0(一根WL最多挂3个NMOS)=27C0/K0
阵列NMOS放电:6C0/0.5K0(注意阵列中NMOS宽长比为1:1)=12C0/K0
反相器:6C0/K0
共计45C0/K0为反相器驱动反相器的7.5倍。
#9 IO单元
ESD
- 输入保护


对深亚微米工艺,栅氧化层更薄,击穿电压更小。这时候需要提高保护二极管的掺杂浓度以降低其击穿电压

- 输出保护
输出端通常为漏端,与衬底形成反偏的PN结。只有对可靠性要求很高时才需要额外加二极管进行ESD保护
- 电源保护
(左图)栅极接GND的NMOS,源端N+与衬底形成PN结,VDD有正脉冲时被击穿
(右图)VDD正脉冲时Vx上升较慢,使Mp导通,VG上升,使右侧钳位NMOS导通,释放静电


输入缓冲器
- CMOS施密特触发器


右图的右侧曲线:考虑Vin从0增加到VDD。一开始Vin=0,Vout=VDD,Vx=VDD-VTN3。当Vin增大到VTN1,MN1导通,与MN3竞争下拉Vx。但Vin进一步上升,达到时,MN2和MN1均导通,Vout=0。
右图的左侧曲线:考虑Vin从VDD减小到0。一开始Vin=VDD,Vout=0,Vy=|VTP3|。对称地,直到Vin下降到时,Vout才会被上拉到VDD。
由于加入了反馈,Vout的情况与其上一时刻的电平有关,因此VTC变为两条,呈现出“回滞”特征。
这样的回滞曲线使得Vin在(V-,V+)间震荡时,Vout不会变化。只有当Vin从小于V-变为大于V+,Vout才会从VDD变成0(反之亦然),从而过滤了很多输入噪声,只有当输入电平呈现出明显的”变化意图“的时候,才会引起Vout的变化。
下图比较了(b)反相器作为输入级和(c)施密特触发器作为输入级

输出缓冲器
为匹配IO端的宏观输出电容,一般采用多级反相器作为输出缓冲器。

简化而言,如果不考虑结电容,每个反相器的W依次增大S,则每一级延时不变。
假设输入端驱动Cin延时为Tp0,则反相器链总延迟为
当S=e时,取到最小值。考虑到结电容影响,S可以取大一些,比如S=4.
- 作者:Tianyao Xiao
- 链接:https://xty27.top/article/dashudian
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





.webp?table=block&id=26f9eb83-9bee-8076-a3c5-ca0cac0be867&t=26f9eb83-9bee-8076-a3c5-ca0cac0be867)



