数字电路
基础构件
布尔代数
- 核心: 一切计算的数学基础。变量只有0和1,代表假与真、低与高、关与开。
- 基本操作: AND(与)、OR(或)、NOT(非)。一切复杂的逻辑都可以由这三者构建。
- 对系统开发者的意义: 这是机器所能理解的“最原始的语言”。编译器最终会将你的C代码转化为由这些逻辑组成的电路行为。
逻辑门
- 定义: 实现布尔函数的物理器件。是数字电路的“原子”。
- 关键门电路: AND, OR, NOT, NAND(与非), NOR(或非), XOR(异或)。
- 系统视角:
- NAND和NOR是“通用门”:仅使用一种类型的门就可以构造出任何布尔函数。这意味着CPU的复杂性源于简单、重复的单元。
- 你的代码中的每一个位操作(如
&, |, ~, ^)都直接对应着底层逻辑门的操作。
组合逻辑
- 定义:电路的输出仅取决于当前的输入**,与电路过去的状态无关。没有记忆功能。
关键电路与系统关联
- 译码器:
- 功能: N位输入,2^N位输出。在任一时刻,只有一位输出是有效的(如1)。
- 系统应用: 内存地址译码。CPU发出的地址线通过译码器来选择特定的内存单元或I/O设备。这是理解内存映射I/O和地址空间的基础。
- 多路选择器:
- 功能: 从多个输入中选择一个作为输出。
- 系统应用: 无处不在!例如,在ALU中选择执行哪种运算,在处理器中选择将哪个寄存器的值写入总线,在流水线中控制数据流向。
- 加法器:
- 半加器、全加器: 构建块。
- 行波进位加法器: 直观但慢。关键要理解进位传播延迟是限制CPU主频的因素之一。
- 系统视角: ALU的核心组件。你写的
a + b 最终就是在这样一个电路中完成的。理解进位延迟有助于理解为何某些运算优化(如循环展开)能提升性能。
- 算术逻辑单元(ALU):
- 功能: 计算机的“计算心脏”。它是一个复杂的组合逻辑电路,通过控制信号来选择执行加法、减法、位与、位或等操作。
- 系统视角: 这是软件与硬件交互的关键界面之一。CPU执行指令时,会将操作数送入ALU,并设置ALU的控制线(由指令的操作码决定),然后取出结果。理解ALU,就理解了指令执行的基本周期。
时序逻辑
- 定义: 电路的输出不仅取决于当前输入,还取决于电路过去的状态(历史)**。这是实现“记忆”的关键。
基本存储单元:
- SR锁存器: 由交叉耦合的NOR或NAND门构成的最基本存储单元。是构建更复杂存储元件的基础。
- D触发器:
- 这是最重要的概念!
- 功能: 在时钟信号的边沿(如上升沿)瞬间,将输入D的值捕获并保存到输出Q,直到下一个时钟边沿到来。
- 关键特性: 建立时间 和 保持时间。这是数字电路设计的黄金法则。系统不稳定(如超频失败)往往与违反这两个时间有关。
- 系统视角:
- CPU寄存器 就是由D触发器阵列构成的。
- 程序计数器(PC) 就是一个特殊的寄存器,其输入是下一条指令的地址。这清晰地展示了指令执行的序列化是如何通过硬件实现的。
- 理解了D触发器,就理解了同步数字系统如何在一个统一的时钟下协同工作。
存储结构:
- 寄存器: 快速存储少量数据(如CPU中的通用寄存器)。
- 寄存器文件: 一组寄存器的集合,可以通过地址(寄存器号)来读写。这直接对应了你代码中的变量操作。
- 内存(RAM):
- 可以看作一个巨大的、可寻址的寄存器阵列。
- 核心组件: 地址译码器(选择哪个单元)、存储单元阵列(通常是触发器或电容)、读写控制逻辑。
- 系统视角: 清晰地展示了 “地址” 如何物理地选择存储位置,以及 “数据” 如何在该位置被写入或读出。这消除了“内存”这个概念的神秘感。
构建LC-3微架构
- 将所有前述组件组合成一个可运行的、图灵完备的计算机。
数据通路:
- 定义: 数据在处理器内部流动的路径。包括寄存器文件、ALU、内存接口等,通过总线连接。
- 系统视角: 你的C代码被编译成指令,指令控制着数据通路中的多路选择器、ALU操作和寄存器写入,从而完成计算。数据通路是软件指令的“执行舞台”。
控制逻辑:
- 定义: 根据当前执行的指令(机器码),生成所有控制信号,来“指挥”数据通路如何工作。
- 实现方式: 一个巨大的组合逻辑电路(或微码ROM)。输入是指令的操作码和状态位,输出是控制数据通路的各种信号(如ALU控制、寄存器写使能、内存读写等)。
- 系统视角: 这是连接软件(指令) 和硬件(数据通路) 的桥梁。它解释了为什么
ADD R1, R2, R3 这条汇编指令能让CPU完成加法。理解控制逻辑,就彻底明白了“指令驱动硬件”的本质。