>> >> >> Reference << << << <<<<<<Ref>>>>>>
Logic Circuits and Digital System
Modified: 2025-12-31 | Author:ljf12825

逻辑电路与数字系统是计算机硬件和电子学的基础,涉及信号的处理、存储和运算等基本操作
它们由一系列的逻辑门、寄存器、时序逻辑单元等构成,通过逻辑运算实现特定功能

逻辑电路

逻辑电路由基本的逻辑门组成,这些门接受输入信号并根据特定的规则产生输出

逻辑门

名称描述真值表
与门(AND Gate)只有所有输入都是1时,输出才为1A AND B = A * B
或门(OR Gate)只要有一个输入为1, 输出就为1A OR B = A + B
非门(NOT Gate)对输入信号进行反转,0变1, 1变0NOT A = A'
异或门(XOR Gate)只有输入不同才输入1, 相同则输出0A XOR B = A ⊕ B
与非门(NAND Gate)与门输出取反A NAND B = (A * B)'
或非门(NOR Gate)或门输出取反A NOR B = (A + B)'

组合逻辑电路

组合逻辑电路是指其输出只与当前输入相关的电路,不依赖于先前的输入。常见的组合逻辑电路有

加法器

加法器是数字电路中最基本、最重要的运算单元之一,它的核心功能是执行两个二进制数的算术加法。它是CPU中算术逻辑单元(ALU)的基石

半加器

想象一下,我们只计算两个1位的二进制数相加,比如0+0, 1+1, 0+1, 1+0 这需要两个输出

能完成这个功能的电路就叫半加器

真值表

ABSC_out
0000
0110
1010
1101

观察真值表,可以发现

电路图

A ──┐
    │ XOR ──> S
B ──┘

A ──┐
    │ AND ──> C_out
B ──┘

为什么叫半加器,因为它只能处理两个输入,无法处理来自低位的进位。在真正的多位加法中,每一位的计算都需要考虑三个输入:A, B和来自低位的而进位

全加器

为了解决半加器的缺陷,引入了全加器。全加器是构建任何多位加法器的核心模块

真值表

ABC_inSC_out
00000
00110
01010
01101
10010
10101
11001
11111

实现方式 全加器可以用两个半加器和一个或门来构建

  1. 第一个半加器计算A和B的和与进位
  1. 第二个半加器计算S1和C_in的和与进位
  1. 最终的进位输出是C1或C2任何一个为真即可

电路图(由两个半加器构成)

        ┌──────────┐
A ──────┤          │      ┌──────────┐
        │  半加器1 ├─S1───┤          │
B ──────┤          │      │  半加器2 ├─── S (最终和)
        └──────────┘      │          │
            │ C1      C_in└──────────┘
            │              │
            │              │ C2
            └──────────────┼────┐
                           │    │ OR ─── C_out (最终进位)
                           └────┘

多位加法器:串联全加器

可以用全加器来构建计算多位二进制数(比如4位、8位、32位、64位)的加法器
最直接的方式是行波进位加法器

结构

4位行波进位加法器示意图

    A3 B3        A2 B2        A1 B1        A0 B0
     │  │         │  │         │  │         │  │
    ┌▼──▼┐       ┌▼──▼┐       ┌▼──▼┐       ┌▼──▼┐
C_in│    │   C_in│    │   C_in│    │   C_in│    │
◄───┤ FA ├──────►┤ FA ├──────►┤ FA ├──────►┤ FA ├───► C_final
    │    │C_out  │    │C_out  │    │C_out  │    │C_out 
    └──┬─┘       └──┬─┘       └──┬─┘       └──┬─┘
       S3           S2           S1           S0

缺点

现代高速加法器:超前进位加法器

超前进位加法器的设计为了解决行波进位的速度问题

核心思想

与其等待进位信号一步步传递,不如提前计算每一位的进位
它通过一个复杂的逻辑电路,直接根据所有位的输入(A0, B0, A1, B1, …)和最初的C_in, 并行地计算出每一位的进位(C1, C2, C3, …)

实现原理

它利用了“进位生成”和“进位传播”的概念

那么,每一位的进位可以表示为:

可以看到,只要有了A0A3, B0B3和C_in,通过一层多输入的逻辑门(与或门),就可以同时算出C1, C2, C3, 而不需要等待前一级的结果

优缺点

从简单的半加器到复杂的超前进位加法器,这个演进过程完美地体现了计算机工程中的一个核心权衡:在速度、复杂度和成本之间做出取舍。而这一切,都始于对"1 + 1 = 10" 这个二进制运算的深刻理解

一句话概括超前进位加法器核心思想:水到渠成

总结

类型功能关键输入关键输出特点
半加器两个1位二进制数相加A, BS, C_out基础单元,无法处理进位输入
全加器三个1位二进制数相加A, B, C_inS, C_out构建任何加法器的核心模块
行波进位加法器多位二进制数相加A[n], B[n]S[n]结构简单,速度慢,有进位延迟
超前进位加法器多位二进制数相加A[n], B[n]S[n]结构复杂,速度极快,无进位延迟

乘法器

乘法的基础是”位移与加法“
以两个4位二进制数A(A3 A2 A1 A0)B(B3 B2 B1 B0)为例,其计算过程类似于十进制乘法

         A3 A2 A1 A0  (被乘数)
       x B3 B2 B1 B0  (乘数)
----------------------
         A3 A2 A1 A0  <-- B0为1时,这是第一行部分积
       A3 A2 A1 A0    <-- B1为1时,这是第二行部分积(左移1位)
     A3 A2 A1 A0      <-- B2为1时,这是第三行部分积(左移2位)
   A3 A2 A1 A0        <-- B3为1时,这是第四行部分积(左移3位)
----------------------
P7 P6 P5 P4 P3 P2 P1 P0  (最终乘积)

乘法器的核心任务就是高效地生成这些部分积,并将它们相加

移位加法乘法器

这是最直观、最容易理解的方法,直接模拟上述手算过程

工作原理(以4位为例)
  1. 初始化:将一个8位的乘积寄存器P清零
  2. 循环检查:从最低位开始,依次检查乘数B的每一位B[i]
  3. 判断与加法:如果B[i] == 1,则将被乘数A左移i位后的值,加到乘积寄存器P
  4. 循环:重复步骤2和3,直到检查完乘数B的所有位
结构示意图
    被乘数 A (4位) ────┐
    乘数 B (4位) ──> [控制逻辑] ──> (检查当前位B[i]是否为1)
    乘积 P (8位) <── [加法器] <── (左移器,根据i移位A)
                    [移位控制] (控制左移位数)
优缺点

阵列乘法器

为了提升速度,采用”空间换时间“,将多个加法器组织成一个阵列,以便并行地计算部分积的和

核心思想:同时生成所有部分积,并用一个加法器阵列一次性将它们加起来

结构(以4位无符号数为例)
  1. 部分积生成:通过一排与门阵列实现。B0A的每一位相与,生成第一行部分积;B1A的每一位相与,生成第二行(左移1位),以此类推。这样就得到了四个部分积
  2. 加法器阵列:使用全加器作为基本单元,以类似”人工计算“时按列相加的方式,将部分积斜向对齐后,一层一层地加起来
简化示意图(体现按列相加的思想)
        A3   A2   A1   A0
      x B3   B2   B1   B0
-------------------------
      P03  P02  P01  P00  (B0 & A) <- 第一行部分积
   P13  P12  P11  P10     (B1 & A) <- 第二行部分积
P23  P22  P21  P20        (B2 & A) <- 第三行部分积
P33  P32  P31  P30        (B3 & A) <- 第四行部分积
-------------------------
[全加器阵列,按斜线连接的列进行加法,并传递进位]
-------------------------
P7   P6   P5   P4   P3   P2   P1   P0
优缺点

现代高性能乘法器:沃里斯树

对于CPU中的高性能乘法器,单纯的行波进位阵列仍然不够快。于是引入了更先进的结构————沃里斯树

核心思想:使用一种树形结构来快速压缩部分积的数量

工作流程比喻

要把一大堆(比如16堆)硬币数清楚

  1. 阵列乘法器:像银行新手,两堆两堆地数,数完合一起再和下一堆数,效率低
  2. 沃里斯树:像经验丰富的团队
优缺点

总结

类型核心原理速度硬件成本应用场景
移位加法乘法器串行、迭代、移位加慢(O(n))对面积和功耗及其敏感,速度要求不高的嵌入式系统
阵列乘法器并行、组合逻辑、加法器阵列中(O(n))早期处理,对速度有一定要求但不需要极致的场景
沃里斯树并行、树形结构、部分积压缩快(O(log n))现代高性能CPU、GPU、DSP

从乘法器的发展可以看出,计算机工程始终在速度、面积(成本)、功耗这个”不可能三角“中进行权衡和优化

比较器

比较器是数字电路中用于比较两个数字大小的基本组件,其核心功能是判断两个二进制数A和B的大小关系,并输出三个可能的结果之一:A > B, A < B, 或A = B

1位比较器

比较两个1位的二进制数A和B

真值表
ABA > BA < BA = B
00001
01010
10100
11001

根据真值表,可以直接写出逻辑表达式

电路图
A ──┐
    │ AND ────> A > B
B ──┘ NOT

A ──┐ NOT
    │ AND ────> A < B
B ──┘

A ──┐
    │ XNOR ───> A = B
B ──┘

这个1位比较器是构建更复杂比较器的基础模块

多位比较器:级联比较器

如何比较两个多位数(例如4位)A3 A2 A1 A0B3 B2 B1 B0
最直观的方法是从最高位开始逐位比较,就像比较两个十进制数一样\

工作原理(以4位为例)
  1. 比较最高位(A3, B3)
  1. 比较次高位(A2, B2):规则同上,但前提是更高位都相等
  2. 这个过程一直持续到最低位。如果所有位都相等,则A = B

这种设计需要一个级联或串联的结构

结构示意图
        ┌───────┐    ┌───────┐    ┌───────┐    ┌───────┐
A3,B3 ─>│ 1位   │    │ 1位   │    │ 1位   │    │ 1位   │
        │比较器 │───>│比较器 │───>│比较器 │───>│比较器 │─> A = B
A2,B2 ─>│       │    │       │    │       │    │       │
        └───────┘    └───────┘    └───────┘    └───────┘
           │             │             │             │
           ▼             ▼             ▼             ▼
         A > B         A > B         A > B         A > B
         A < B         A < B         A < B         A < B

实际级联时,需要将高位的”相等“输出连接到低位的”使能“输入,表示”只有当我相等时,你下一位的比较结果才有效“

优缺点

现代高速比较器:并行比较器/查找表式比较器

为了解决级联比较器的速度瓶颈,现代高性能电路通常采用并行方法
核心思想:利用一个庞大的”与-或“逻辑阵列,直接根据所有位的输入,同时(并行地)产生三个输出信号(A>B, A < B, A = B

工作原理

它不进行逐位比较,而是直接”查找“最终结果。以2位比较器为例,其逻辑可以直接从真值表推导出来
对于A (A1 A0)B (B1 B0)

电路实现

上述每一个输出(A>B, A<B, A=B)都可以用一个多输出的组合逻辑电路(与或门阵列)来实现。一旦输入A1, A0, B1, B0就位,这三个输出信号几乎同时产生

优缺点
实践中的权衡

在实际的CPU设计中,对于超宽位(如64位)的比较,通常会采用分组并行的混合方法。例如,将一个64位比较器分成4个16位的并行比较器,然后再用一个快速的逻辑层来整合这4个16位的结果,从而在速度和电路复杂度之间取得一个良好的平衡

总结

类型核心原理速度硬件成本应用场景
1位比较器基本逻辑门直接实现极低构建模块
级联比较器从高位到低位串行比较慢 (O(n))对速度要求不高的简单控制逻辑
并行比较器用组合逻辑阵列直接得出结果极快 (~O(1))现代高性能CPU、ALU中的比较操作

时序逻辑电路

时序逻辑电路的输出不仅取决于当前的输入,还与历史输入(即过去的状态)有关。时序逻辑电路中常常使用“触发器”来存储状态。常见的时序逻辑电路包括:

触发器

时序逻辑电路能够“记忆”的关键,在与它包含了存储元件,最主要的就是触发器

触发器是一种具有两种稳定状态(0和1)的电路,可以长期保持其中一种状态,直到特定的输入信号(通常是始终信号)让它改变

D(Data)触发器

D触发器是一种具有记忆功能的时序逻辑单元,它能存储一位二进制数据(0或1)

关键特性与工作原理

D触发器的核心工作机制可以概括为:在时钟信号的特定边沿,将输入端D的当前值捕获,并成为输出端Q的新值,并保持这个值直到下一个时钟边沿

  1. 基本端口:
  1. 时钟边沿触发 这是D触发器的最关键的特性。它不是持续地响应D端的变化,而是只在时钟信号一个非常短暂的瞬间进行采样

在时钟沿之外的时间,无论D端输入如何变化,Q端的输出都始终保持不变。这个“保持不变”的特性,就是“锁存”或“记忆”功能的体现 3. 时序要求 为了让D触发器可靠地工作,数据输入D必须在时钟边沿附近满足一定的稳定性要求

如果违反了这两个时序要求,触发器可能会进入一个不稳定的“亚稳态”,导致输出无法预测

真值表
CLKDQ(下一刻)说明
^00时钟上升沿时,若D=0, 则Q变为0
^11时钟上升沿时,若D=1, 则Q变为1
0/1/vXQ(保持)非上升沿时,D的任何变化都不影响Q
增强型D触发器

在实际应用中,基本的D触发器通常会增加一些控制输入端,使其功能更强大

带有异步复位和置位的D触发器真值表(假设低电平有效)
RST(复位)SET(置位)CLKDQ
01XX0(异步复位,最高优先级)
10XX1(异步置位,最高优先级)
11^00(正常采样:D=0 -> Q=0
11^11(正常采样:D=1 -> Q=1
11非^XQ(保持)(保持状态)
内部结构

一个主从D触发器通常由两个电平触发的D锁存器级联而成

  1. 当CLK=0时:
  1. 当CLK从0跳变为1时(上升沿):
  1. 当CLK=1时:

这种“主-从”结构,通过两个锁存器交替开关,实现了在边沿瞬间采样并锁存数据的功能

T(Toggle)触发器

核心功能:当T输入为1时,每个有效的时钟边缘都会使输出状态反转;当T输入为0时,输出状态保持不变
简单来说,它是一个受控的反转开关

关键特性与工作原理
  1. 基本端口
  1. 工作模式 T触发器的功能可以用一个非常简单的规则来描述
真值表
CLKTQ(当前)Q(下一刻)说明
^000T=0,保持状态
^011T=0,保持状态
^101T=1,翻转状态(0->1)
^110T=1,翻转状态(1->0)
非^XQQ无时钟边缘,永远保持
一个重要的特例:T恒为1

如果将T触发器的T输入端永久接高电平(逻辑1),那么它变成了一个二进制分频器或2分频计数器

这就是“分频”概念的由来,它是构成计数器的基础

T触发器的实现

在标准的集成电路芯片中,并不存在一个名为“T触发器”的独立元件
这是因为T触发器通常由D触发器转换而来。通过添加一个简单的组合逻辑电路,就可以让D触发器表现出T触发器的行为
将D触发器的输出Q和输入D通过一个异或门连接起来,T信号作为异或门的另一个输入

逻辑推导

这样,就用D触发器和一个异或门“搭建”出了一个T触发器

JK触发器

JK触发器是一种具有记忆功能的基本逻辑单元,它有一个时钟输入端(CLK)、两个数据输入端(J和K)、以及至少一个输出端(Q)。它的核心特性是

符号与引脚
     ┌───┐
  J ─┤   │
     │   ├── Q
CLK ─┤>  │
     │   ├── /Q(Q非)
  K ─┤   │
     └───┘
真值表
CLKJKQn+1(下一个状态)功能描述
^00Qn保持:输出保持不变
^010复位:输出被置为0
^101置位:输出被置为1
^11/Qn反转:输出取反
四种工作模式

可以根据J、K的四种输入组合,将JK触发器的工作分为四种模式

  1. 保持(Hold)- J=0,K=0
  1. 复位(Reset)- J=0,K=1
  1. 置位(Set)- J=1,K=0
  1. 翻转(Toggle)- J=1,K=1

寄存器

有限状态机

有限状态机(Final State Machine, FSM)是一种数学模型,用于描述具有有限个状态的系统以及状态之间的转移过程
有限状态机在实际中用来建模系统的行为,可以用于表示一系列输入条件下系统的变化过程

FSM的基本组成

有限状态机由以下几部分组成

FSM的分类

有限状态机通常分为两种主要类型

FSM的工作原理

FSM的工作过程可以概括为

  1. 接收输入:FSM接收到一个外部输入信号
  2. 状态转移:根据当前状态和输入信号,FSM决定是否发生状态转移
  3. 产生输出:在Mealy型FSM中,输出受当前状态和输入状态的影响;在Moore型FSM中,输出仅受当前状态的影响

FSM的状态转移图

FSM通常用状态转移图(State Transition Diagram)来表示,其中

FSM的状态转移表

状态转移表是FSM的另一种常见表示方法,它列出了所有状态以及在不同输入下的状态转移和输出

当前状态输入下一状态输出
500500
501511
510520
511501

设计一个FSM

设计FSM的步骤通常包括

  1. 定义状态:确定系统的所有可能状态
  2. 定义输入:确定会影响状态变化的输入
  3. 定义状态转移规则:指定在不同输入下如何从一个状态转移到另一个状态
  4. 确定输出规则:根据FSM的类型,定义输出与状态或输入的关系
  5. 绘制状态转移图:用图形的方式表示所有状态及其转移关系

FSM可以通过编程语言进行实现,通常的实现方式有

数字系统

数字系统是由多个逻辑电路组合而成,能够执行更复杂的任务。数字系统通常包括以下几个部分

数字电路设计方法

数字电路的设计可以采用两种主要方法

FSM在逻辑电路中的应用

计数器

序列检测

数字时钟