零基础学组合逻辑电路:卡诺图不是画格子,是用眼睛做布尔代数
你有没有试过这样写Verilog?
assign y = (a & ~b & ~c) | (a & ~b & c) | (~a & b & c) | (~a & b & ~c);看着就累,综合后发现用了7个LUT,时序报告里关键路径上还挂着3级门延迟。
其实——这函数根本就是y = a ^ b。
只是你没看出来。
这不是代码问题,是逻辑直觉没长出来。而卡诺图,就是专门用来帮你把这层直觉“长”出来的工具。
它不是考试前死记硬背的图形技巧,也不是EDA工具里被自动跳过的古董步骤。它是数字世界里少有的、能让你用肉眼“看见”逻辑关系的界面——就像示波器之于模拟信号,卡诺图之于布尔函数。
我们不从定义开始,直接从一个真实场景切入:
你第一次手绘卡诺图时,大概率填错了行和列
真值表给你16行输入输出,你信心满满地准备画4变量卡诺图。
然后你在纸上写下:
行:00, 01, 10, 11 列:00, 01, 10, 11恭喜,你已经掉进第一个坑——这不是卡诺图,这是二进制矩阵。
真正的卡诺图行/列顺序必须是:
00 → 01 → 11 → 10为什么?因为只有这样,相邻格子才只差一位变量。
比如01和11相邻(仅A变),11和10相邻(仅D变),但01和10不相邻(A和D都变了)——它们在图中甚至不能挨着!
更反直觉的是:第一行和最后一行是相邻的,第一列和最后一列也是。
这意味着:
- m₀(0000)和 m₂(0010)能圈在一起(差一位:C);
- m₈(1000)和 m₁₀(1010)也能圈;
- 而且 m₀(0000)和 m₈(1000)——虽然都在第一列,但行号是00和10,中间隔了01和11,所以不相邻;