数字电路知识点记录
TL;DR
最近太无聊,重新拾起cs61c课程,开始有些痛苦的数字电路学习。
这个博客就用来记录一下各种硬件的引脚和电路设计等知识。
Warm up Bssic
在更高抽象的程序中,一般情况下都是串行的。
但是在硬件视角中,都是并行的。(电路很快,所以要有负反馈/回授等概念)
在硬件中,这些都是一瞬间发生的,所以是并行
Boolean Expression
布尔表达式,数字电路中的基础内容,通过True 和False构成的逻辑语句。
在绘制电路图前,需要先根据算法来构建对应的布尔表达式。
真值构建法
在数字电路中,通常需要先构建一个真值表,主要采用下面几种方式
① 积之和形式(SOP - Sum of Products / 主析取范式)
- 核心原则:关注输出为 1 的行。
- 构建步骤:
- 找出使输出
Y = 1的所有输入组合。 - 为每一行写出一个最小项(Minterm):变量为 1 写原变量,为 0 写反变量,中间用 AND 链接。
- 将所有最小项用 OR连接起来。
- 找出使输出
② 和之积形式(POS - Product of Sums / 主合取范式)
- 核心原则:关注输出为 0 的行。
- 构建步骤:
- 找出使输出
Y = 0的所有输入组合。 - 为每一行写出一个最大项(Maxterm):变量为 0 写原变量($A$),为 1 写反变量($\bar{A}$),中间用 OR 链接。
- 将所有最大项用AND连接起来。
- 找出使输出
Register 寄存器

Register如图所示包含4个引脚,D,Q,WE,R
| 引脚名称 | 全称 | 含义与作用 | 信号类型 |
|---|---|---|---|
| D | Data In (数据输入端) | 待写入的数据。在时钟上升沿到来时,如果允许写入,输入到 D 的数值就会被存入寄存器内部。 | 数据线 (多位) |
| Q | Output / Queue (数据输出端) | 当前保存的状态值。时刻对外输出当前存储在寄存器里的数据(即上一周期写入的内容)。 | 数据线 (多位) |
| WE | Write Enable (写使能端) | 写入控制信号。只有当 WE 处于高电平 (1) 时,寄存器才会在时钟触发时更新数据;若为 0,数据保持不变。 | 控制线 (1 位) |
| R | Reset (复位/清零端) | 强制清零信号。当 R 输入高电平 (1) 时,无论输入 D 是什么,寄存器内部的值都会被立刻清零。 | 控制线 (1 位) |
寄存器是靠时钟驱动存储,寄存器内部采用Edge-Triggered Flip-Flops构建,不会随时随地接收D端数值并且改变
在两个时钟沿之间(平稳期):寄存器内部的值不变
在时钟上升沿到达的瞬间:寄存器把此时刻输入端 D 上的电平锁存到内部,并更新输出端Q
如果寄存器不按周期存储,而是输入 D 一变就立刻存入内部,电路中包含很多负反馈
会导致不可控的竞争和Dead Lock
在这期间,Setup Time和Hold Time是两个核心条件
建立时间 (Setup Time)
在时钟上升沿到达之前,输入端 D 上的数据信号必须提前保持稳定的最短时间。
保持时间 (Hold Time)
在时钟上升沿到达之后,输入端 D 上的数据信号必须继续维持稳定的最短时间。
两者共同在时钟沿前后构成了一个稳定的数据有效窗口。
Multi-Bit Adder 多位加法器

| 引脚名称 | 缩写/标识 | 方向/类型 | 功能与作用说明 |
|---|---|---|---|
| Data A | Data A | 输入 (Input) | 加数 A 输入端,位宽与组件属性的 Data Bits 相同(默认为 8 位)。 |
| Data B | Data B | 输入 (Input) | 加数 B 输入端,位宽与组件属性的 Data Bits 相同(默认为 8 位)。 |
| Carry In | c in | 输入 (Input) | 进位输入端,1 位信号。用于多位加法器级联,若输入为 1,计算结果将额外加 1。若不连接,默认为 0。 |
| Output | Sum / 无 | 输出 (Output) | 加法和计算结果输出端,位宽与 Data Bits 相同(计算结果:(A + B + c_in) mod 2^N)。 |
| Carry Out | c out | 输出 (Output) | 进位输出端,1 位信号。当无符号加法运算发生溢出(计算结果大于最高位可表达范围 2^N - 1)时输出 1,否则输出 0。 |
A和B的传入位宽必须相同
FSM logic
FSM Logic(有限状态机逻辑,Finite State Machine Logic),它是数字电路中最核心的控制单元。
递增器就是一个简单的有限状态机,状态随着加法器逐渐递增。
CPU 执行一条指令分为 Fetch -> decode -> Execute -> Writeback,这本质上就是 CPU 内部的状态机在按照时钟节拍不断进行状态切换和信号控制
FSM核心要素
任何一个有限状态机逻辑,都可以拆解为以下 3 个要素:
- 状态(States):系统当前所处的模式或阶段(例如:
等待、读取、写入、报错)。必须是有限个。 - 输入(Inputs):触发状态改变或控制输出的外部信号。
- 状态转移与输出(Transitions & Outputs):在什么条件下从“状态 A”切换到“状态 B”,以及在此过程中产生什么控制信号。
所以在硬件系统中的FSM的基础结构就是:

状态机类别
| 类型 | 输出取决于什么? | 特点 |
|---|---|---|
| Moore 型状态机 | 仅取决于“当前状态” ($Output = f(State)$) | 输出非常稳定,只在状态改变时变化。响应相对延迟一个周期。 |
| Mealy 型状态机 | 取决于“当前状态”+“当前输入” ($Output = f(State, Input)$) | 外部输入一变,输出立刻响应(无需等下一个时钟),但容易产生毛刺(Glitch)。 |
MUX
多路选择器,作用是从多个输入中选择一个,输出到唯一输出端
用简单的二选一MUX举例演示原理
$$Y = (\bar{S} \cdot I_0) + (S \cdot I_1)$$这个公式就展示了它的基本原理
