数字电路设计基础
数字电路设计基础
参考资料
前言
数字电路是模拟电路的一个子集,在理想情况下,我们可以把模拟电路中的高电平视作1,低电平视作0,简化逻辑电路的设计,由此带来的好处是数字电路适合设计更复杂的系统。
基础
数制
十进制(Decimal)
从小学我们就学习了十进制的计数与算数,如同我们有10个手指一样,十进制由0,1,2,3,4,5,6,7,8,9这十个数字组成,多个十进制数字组合在一起可以形成更大的十进制数。 在十进制数字中,每一列的权都是前一列的10倍,从右到左,每列的权分别是1、10、100、1000等,也就是我们常说的个位、十位、百位、千位等。十进制数的基是10,满10进1,9742可以用如下的方式表示 $$ 9742_{10}=9\times10^3+7\times10^2+4\times10^1+2\times10^0 $$
二进制(Binary)
二进制的基是2,满2进1,只有两个数字0和1。 在二进制数字中,每一列的权都是前一列的2倍,从右到左,每列的全分别是$2^1, 2^2, 2^3, 2^4 ...$等,13可以用如下的方式表示 $$ 13_{10}=1\times2^3+1\times2^2+0\times2^1+1\times2^0 $$ 可以记一些常用的2的幂次:
| 幂次 | 结果 |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 |
| 6 | 64 |
| 7 | 128 |
| 8 | 256 |
| 9 | 512 |
| 10 | 1024 |
| 11 | 2048 |
| 12 | 4096 |
| 13 | 8192 |
| 14 | 16384 |
十六进制(Hexadeciaml)
书写一个很大的二进制数将十分冗长且易于出错,4位一组的二进制数可以表示$2^4=16$种数字,因此使用基数为16的表示会更方便,这称为十六进制。十六进制数使用数字0~9和字母A~F(大小写都可以),每一列的权是前一列的16倍,基是16
| 十进制 | 二进制 | 十六进制 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
字节、半字节和全字
一个0/1称为一个比特(bit),8个比特一组称为字节(byte),4个比特一组称为半字节(nibble).
微处理器处理的一块数据称为字(word),它不是固定的多少bit,在8、16、32、64位处理器中,一个字分别包含8、16、32、64个bit,具体可以学习处理器相关知识。
在一组bit中,权为1的那一位称为最低有效位(least significant bit, lsb),处于另一端的位称为最高有效位(most significant bitm, msb)
![]()
一个不是到是不是巧合的巧合,希腊文的进制与中文不一样,中文是个、十、百、千、万、十万、百万...,但是希腊文是个、十、百、千、百万、十亿,刚好千(K)约等于$2^{10}$,百万(M)约等于$2^{20}$,十亿(G)约等于$2^{30}$
由此演化出来现在的一些单位,比如$2^{10}$个字节可以说是1K Byte(1KB),$2^{20}$个字节可以说是1M Byte(1MB),$2^{30}$和字节可以说是1G Byte(1GB)
原码、反码、补码
Bed觉得这些东西挺麻烦的,而且大多数只在考试的时候用的上()。在讲原码、反码、补码的概念之前,需要先介绍一下有符号数的表示。
- 无符号数:只能表示正整数,例:1011表示8+0+2+1=11
- 有符号数:可以表示所有整数,最高位是符号位,0表示整数,1表示负数,例:1011表示-(0+2+1)=-3
在知道有符号数的表示方式后,再来看有符号数的原码、反码、补码
- 原码:顾名思义,就是正常的表示方式
- 反码:正数的反码是它自己,负数的反码是除符号位外取反,例:1011的反码是1100
- 补码:正数的补码也是它自己,负数的补码是除符号位外取反+1,例:1011的补码是1101
| 十进制 | 原码 | 反码 | 补码 |
|---|---|---|---|
| -8 | 无法表示 | 无法表示 | 1000 |
| -7 | 1111 | 1000 | 1001 |
| -6 | 1110 | 1001 | 1010 |
| -5 | 1101 | 1010 | 1011 |
| -4 | 1100 | 1011 | 1100 |
| -3 | 1011 | 1100 | 1101 |
| -2 | 1010 | 1101 | 1110 |
| -1 | 1001 | 1110 | 1111 |
| 0 | 1000/0000 | 1111/0000 | 0000 |
| 1 | 0001 | 0001 | 0001 |
| 2 | 0010 | 0010 | 0010 |
| 3 | 0011 | 0011 | 0011 |
| 4 | 0100 | 0100 | 0100 |
| 5 | 0101 | 0101 | 0101 |
| 6 | 0110 | 0110 | 0110 |
| 7 | 0111 | 0111 | 0111 |
| 8 | 无法表示 | 无法表示 | 无法表示 |
可以看出来4-bit有符号数中,补码的表示范围比原码大,N位数的表示范围:
- 无符号原码:$[0, 2^N-1]$
- 有符号原码:$[-2^{N-1}+1, 2^{N-1}-1]$
- 有符号补码:$[-2^{N-1}, 2^{N-1}-1]$
逻辑和逻辑门
与、或、非
二进制位与位之间的运算称为逻辑运算,包含与&、或|、非~/!。
- 与(AND):Bed的理解是取交集,两个都真结果才为真
- 或(OR):Bed的理解是取并集,两个有一个为真结果为真
- 非(NOT):最好理解,真进行非运算就是假,假进行非运算就是真
- 缓冲区(BUF):这个是纯电路单元,从逻辑上来说输出等于输入,实际电路中它是用来增加驱动能力的

组合两输入逻辑门
- 异或:两个输入不一样时结果为真
- 同或:两个输入一样时结果为真
- 或非:两个输入均为假时结果为真
- 与非:两个输入有一个为假时结果为真

数字抽象
在实际物理世界中,电压值时连续的,但是在数字世界中只有0和1,如何使用0/1表示连续的电压值呢?
电源电压
假设系统中的最低电压是0V,称为地(ground, GND)。系统中的最高电压来自电源,常称为$V_{DD}$
逻辑电平
通过定义逻辑电平(logic level),可以将连续变量映射到离散的二进制变量。第一个门称为驱动源(driver),第二个门称为接收端(receiver)。驱动源的输出连接到接收端的输入。驱动源产生LOW(0)输出,其电压处于$0\sim V_{OL}$间;或者产生HICH(1)输出,其电压处于$V_{OH}\sim V_{DD}$之间。如果,接收端的输入电压处于$0 \sim V_{IL}$间,则接收端认为其输入为LOW。如果接收端的输入电压处于$V_{IH} \sim V_{DD}$之间,接收端认为其输入为HIGH。如果由于噪声或部件错误,接收端的输入电压处于$V_{IL} \sim V_{IH}$之间的禁止区域(forbiddenzone),则输入门的行为不可预测。$V_{OH}$和$V_{OL}$称为输出高和输出低逻辑电平,$V_{IH}$和$V_{IL}$称为输入高和输入低逻辑电平。
噪声容限
如果驱动源的输出能够被接收端的输入正确解释,则必须满足以下条件:
$NM_L$和$NM_H$分别被称为低电平和高电平的噪声容限
直流电压传输特性
理想的反相器应在输入电压达到门限$V_{DD}/2$时产生一个跳变,实际上电压时缓慢变化的
![]()
组合逻辑设计(Combinatial)
布尔表达式、最大项、最小项、卡诺图比较简单且已与理解,这里省略
时序
输出响应输入的改变而改变需要一定的时间,这个时间称为延迟。描绘电平随时间变化的图称为时序图,从低电平到高电平的转变称为上升沿,从高电平到低电平的转变称为下降沿,延迟的测量点是高低电平转换的中间点
![]()
传播延迟和最小延迟
组合逻辑电路的时序特征包括传播延迟(propagation delay)和最小延迟(contamination delay)。
- 传播延迟$t_{pd}$:当输入改变直到一个或多个输出达到它们的最终值所经历的最长时间
- 最小延迟$t_{cd}$:当一个输入发生变化直到任何一个输出开始改变的最短时间

例:给定一个4输入逻辑电路,关键路径是A->n1->n2->Y,不算线延迟,只算门延迟,$t_{pd}=2\times t_{pd-AND} + t_{pd-OR}$,传输是最慢的;最短路径是D->Y,$t_{cd}=t_{cd-AND}$,传输是最快的
![]()
毛刺
一个输入信号的改变导致多个输出信号的改变,称为毛刺(glitch)或冒险(hazard)
如图所示,当这个三输入逻辑电路中的B由1变成0时,理想情况下n1和n2节点会同时改变,n1从0变成1,n2从1变成0,Y保持1不变;实际上存在延迟,B的变化传播到n1节点的时间为一个非门+一个与门,记为$t_1$,B的变化传播到n2节点的时间为一个与门,记为$t_2$,由于$t_1 > t_2$,那么就存在一个$\Delta t = t_1 - t_2$,在$\Delta t$内,n1还没从0变成1,n2已经从1变成0,此时Y的输出就会从1变成0,等到n1也变成1,Y的输出又从0变成1,这就是一个毛刺
![]()
时序逻辑设计(Sequential)
时序逻辑的输出取决于当前的输入值和先前的输入值,具有记忆
锁存器和触发器
存储器件的基本模块是一个双稳态元件。$Q=0$时,作为$I1$的输入,输出$\overline{Q}=1$,而$\overline{Q}$作为$I2$的输入,输出$Q=0$,形成一种耦合的稳态结构。
![]()
SR锁存器
上面说的反相器耦合稳态结构只能保证由稳定的0/1输出,不能改变,所以实际应用价值不大。SR锁存器是最简单的时序电路,由一对交叉耦合的或非门组成
R可以理解为Reset信号,S可以理解为Set信号,我们规定上一种稳态输出为$Q_{prev},\overline{Q_{prev}}$,新的稳态为$Q,\overline{Q}$,表达式有:
$$
Q=\overline{\overline{Q_{prev}}+R}\
\overline{Q}=\overline{Q_{prev}+S}
$$
- 当$S=0,R=0$时有: $$ Q=\overline{\overline{Q_{prev}}+0}=\overline{\overline{Q_{prev}}}=Q_{prev}\ \overline{Q}=\overline{Q_{prev}+0}=\overline{Q_{prev}} $$ 形成交叉稳态结构,$Q,\overline{Q}$保持不变
- 当$S=0,R=1$时有: $$ Q=\overline{\overline{Q_{prev}}+1}=\overline{1}=0\ \overline{Q}=\overline{Q_{prev}+0}=\overline{Q_{prev}}=\overline{0}=1 $$ 由于$Q$被$R$钳位到0,形成$Q=0,\overline{Q}=1$的稳态
- 当$S=1,R=0$时: $$ Q=\overline{\overline{Q_{prev}}+0}=\overline{\overline{Q_{prev}}}=Q_{prev}=1\ \overline{Q}=\overline{Q_{prev}+1}=\overline{1}=0 $$ 由于$\overline{Q}$被$S$钳位到0,形成$Q=1,\overline{Q}=0$的稳态
- 当$S=1,R=1$时:
$$
Q=\overline{\overline{Q_{prev}}+1}=\overline{1}=0\
\overline{Q}=\overline{Q_{prev}+1}=\overline{1}=0
$$
由于$Q,\overline{Q}$分别被$S,R$钳位到0,形成$Q=0,\overline{Q}=0$的稳态
故真值表如下:

D锁存器
在SR锁存器的基础上,加入了时钟端口$CLK$和数据端口$D$。$CLK=0$时,$S$和$R$都是0,SR锁存器的$Q$保持不变;$CLK=1$时,$S=D$,$R=\overline{D}$,此时$D=1$时$Q=1$,$D=0$时$Q=0$,对外表现出来的就是$Q=D$
D触发器
一个D触发器包含两个背靠背的D锁存器,$L1$称为主锁存器,$L2$称为从锁存器,互联节点为$N1$
- 当$CLK=0$时,主锁存器是透明的,从锁存器是不透明的,$L1$的输出$Q$变成$D$,$L2$的输出$Q$保持不变
- 当$CLK=1$时,从锁存器是不透明的,从锁存器是透明的,$L1$的输出$Q$保持不变,$L2$的输出$Q$变成$N1$
- D触发器的输出变化分两步走,当有数据D到来时,它在时钟$CLK=0$时送到$N1$,在时钟$CLK=1$时由$N1$接力送到$Q$,对外表现就是在时钟从0变成1的时刻,D触发器的输出$Q$变成输入$D$,且在下一个时钟上升沿到来之前,$Q$不会再随输入$D$变化
带使能端的触发器
a)在功能上实现了$EN=0$是寄存器输出保持不变,但是时钟信号依然在翻转,不利于低功耗设计
b)使用与门对$CLK$进行门控,理想状态下是OK的,实际上在时钟上执行逻辑可能使时钟延迟并导致时序错误
带复位功能的触发器
![]()
晶体管级锁存器和触发器的设计
![]()
同步逻辑设计
简单来说,同步电路就是电路中所有寄存器使用同一个时钟,或者同一个时钟源衍生出来的时钟;一部电路就是电路中存在两个或以上完全独立不相关的时钟
有限状态机
有限状态机(Finite State Machine, FSM),这个名字源于具有$k$位寄存器的电路可以处于$2^k$种状态中的某一种唯一状态。一个有限状态机有$M$个输入、$N$个输出和$k$位状态。它还接收一个时钟信号和一个可选择的复位信号。有限状态机包含两个组合逻辑块,下一个状态逻辑(next slatelogic)和输出逻辑(output logic),以及一个存储这个状态的寄存器。在每一个时钟沿,有限状态机进入下一个状态,这个下一个状态是根据当前状态和输入计算出来的。根据有限状态态机功能规范的描述,FSM通常分为两类。在Moore型有限状态机中,输出仅仅取决于机器的当前状态。在Mealy型有限状态机中,输出取决于当前状态和当前输入。有限状态机提供了系统的方法来设计给定功能规范的同步时序逻辑电路。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
- 作者
- Bed
- 发布于
- 2026-10-26
- 许可协议
- 保留所有权利

评论区
分享你的想法,与大家交流讨论
正在加载评论…