第二章:数字电路基础回顾——组合逻辑 vs 时序逻辑
各位同学好,我是老张。今天咱们聊聊数字电路最基础的两个概念:组合逻辑和时序逻辑。别看是基础,我做了十几年后端,见过不少工程师在这上面栽跟头。
说白了,组合逻辑就是「输入一变,输出马上变」的电路。时序逻辑呢?它得靠时钟驱动,输出不仅看当前输入,还得看之前的状态。嗯,这个区别很关键。
2.1 基本门电路:芯片的「积木块」
先回顾一下最基本的门电路。这些门电路,就是构成一切数字芯片的原子单元。我个人习惯把门电路分成三类:
- 基本门:AND(与)、OR(或)、NOT(非)
- 复合门:NAND(与非)、NOR(或非)
- 异或门:XOR(异或)
你可能会问:「为什么NAND和NOR要单独拎出来?」因为在实际的芯片设计中,NAND和NOR才是主流。我在项目中遇到过,有些新手画原理图喜欢用AND+NOT拼成NAND,结果面积和延迟都翻倍了。其实标准单元库里直接就有NAND,干嘛不用呢?
来看一下真值表,这是理解门电路最直观的方式:
| 输入A | 输入B | AND | OR | NAND | NOR | XOR |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 |
2.2 布尔代数:化简的艺术
布尔代数,说白了就是用数学公式来描述逻辑电路。常用的几个定律:
- 交换律:A·B = B·A,A+B = B+A
- 结合律:(A·B)·C = A·(B·C)
- 分配律:A·(B+C) = A·B + A·C
- 德摩根定律:¬(A·B) = ¬A + ¬B,¬(A+B) = ¬A · ¬B
德摩根定律在逆向分析中特别有用。我曾经分析过一个加密芯片,里面全是NAND门,看得眼花缭乱。用德摩根定律一化简,发现其实就是个简单的XOR结构。你想想看,如果不懂布尔代数,光靠眼睛看网表,那得看到猴年马月去?
根据分配律:F = A·(B + ¬B) = A·1 = A
你看,两个门就简化成了一个缓冲器。
2.3 组合逻辑 vs 时序逻辑
好,现在进入正题。组合逻辑和时序逻辑的区别,我用一句话概括:
组合逻辑没有记忆,时序逻辑有记忆。
组合逻辑的输出,只取决于当前的输入。比如一个加法器,输入1+1,输出永远是2,不会因为之前加过什么而改变。
时序逻辑就不一样了。它靠触发器(Flip-Flop)来存储状态。输出不仅看当前输入,还得看之前的状态。举个例子,一个计数器,你给它一个脉冲,它加1。再给一个脉冲,它再加1。这个「当前值」就是它记住的状态。
在网表逆向中,区分组合逻辑和时序逻辑是第一步。我个人习惯这样判断:
- 看有没有时钟信号输入——有时钟的,大概率是时序逻辑
- 看有没有反馈回路——输出连回输入的,可能是时序逻辑
- 看有没有存储单元——比如D触发器、锁存器
2.4 知识体系总览
下面这张图,是我自己整理的本章知识结构。你看一眼,心里就有数了:
2.5 实战:从网表中识别逻辑类型
假设你拿到一段网表,里面有个模块是这样的:
module mystery (clk, a, b, q);
input clk, a, b;
output q;
wire w1;
NAND2 U1 (.A(a), .B(b), .Z(w1));
DFF U2 (.D(w1), .CK(clk), .Q(q));
endmodule
一眼就能看出来:U1是组合逻辑(NAND门),U2是时序逻辑(D触发器)。整体功能就是:先把a和b做与非运算,结果存到触发器里,在时钟上升沿输出。
这种结构在芯片里太常见了。我逆向过的一个通信芯片,里面密密麻麻全是这种「组合逻辑+触发器」的流水线结构。你只要抓住时钟信号这根主线,顺着它一层层往下捋,整个芯片的架构就清晰了。
1. 门电路是芯片的积木,NAND和NOR是主力
2. 布尔代数是化简工具,德摩根定律是逆向利器
3. 组合逻辑看输入,时序逻辑看时钟
4. 网表逆向第一步:分清组合和时序
好了,这一章就到这里。记住我说的:基础不牢,地动山摇。这些门电路和逻辑分类,后面每一章都会用到。你先把这些吃透了,后面分析复杂网表的时候,才能游刃有余。
公众号:蓝海资料掘金营,微信deep3321