4 位全加器设计与七段数码管显示实现
在 CPU 的心脏里,有一个叫 ALU(算术逻辑单元) 的模块,它负责所有数学和逻辑运算。而其中最基本、最频繁的操作,就是 加法 。
但你知道吗?CPU 并不会直接'知道'1+1=2。它是靠一堆小小的'全加器'(Full Adder),一位一位地把二进制数加起来的。
全加器:数字世界的'原子单位'
我们先看最小的积木块—— 一位全加器 。
它有三个输入:
- A 和 B:要相加的两个比特
- Cin:来自低位的进位(比如个位加完可能向十位进 1)
输出两个结果:
- Sum:当前位的结果
- Cout:是否要向高位进位
它的核心公式非常简洁:
Sum = A ⊕ B ⊕ Cin
Cout = (A ∧ B) ∨ (Cin ∧ (A ⊕ B))
别被符号吓到,'⊕'是异或,'∧'是与,'∨'是或。用基础门电路就能搭出来。
小知识:为什么叫'全'加器?因为它比'半加器'多处理了一个进位输入,更适合级联使用。
这种结构完全是组合逻辑——没有寄存器、没有时钟,输入一变,输出立刻响应,延迟只有几纳秒。
把四个'小加法器'串起来:造出 4 位加法引擎
单个全加器只能算一位。那怎么算'0110 + 0011'这样的 4 位数呢?
答案是: 级联四个全加器 ,形成所谓的'串行进位加法器'(Ripple Carry Adder)。
工作流程像接力赛:
- 第 0 位:A₀ + B₀ + Cin → 得到 S₀ 和 C₁
- 第 1 位:A₁ + B₁ + C₁ → 得到 S₁ 和 C₂
- ……
- 最终得到 4 位和值 S₃S₂S₁S₀ 以及最终进位 Cout
虽然简单直观,但也带来了问题: 进位信号要一级一级传过去 ,就像排队开门,前面没开后面就等着。这就造成了'传播延迟'。
以 74HC 系列 CMOS 门为例,每级延迟约 10ns,四层级联总延迟可达 40ns 以上,限制了最高工作频率在 30–50MHz 左右。对于高速系统来说太慢了。
高阶技巧:想提速怎么办?可以用'超前进位'(Carry Look-Ahead)技术,提前预测进位,大幅减少延迟。不过对初学者而言,串行进位足够清晰易懂。
FPGA 实现:用 Verilog 写出你的第一个加法器
下面这段代码,可以在 FPGA 上真实运行:
// 单个全加器
module full_adder (
input A, B, Cin,
output Sum, Cout
);
assign Sum = A ^ B ^ Cin;
assign Cout = (A & B) | (Cin & (A ^ B));
endmodule
// 4 位串行进位加法器
module full_adder_4bit (
input [3:0] A, B,
input Cin,
output [3:0] Sum,
output Cout
);
wire C1, C2, C3;
full_adder fa0 (.A(A[0]), .B(B[0]), .Cin(Cin), .Sum(Sum[0]), .Cout(C1));
full_adder fa1 (.A(A[1]), .B(B[1]), .Cin(C1), .Sum(Sum[1]), .Cout(C2));
full_adder fa2 (.A(A[2]), .B(B[2]), .Cin(C2), .Sum(Sum[2]), .Cout(C3));
full_adder fa3 (.A(A[3]), .B(B[3]), .Cin(C3), .Sum(Sum[3]), .Cout(Cout));
endmodule

