第1章:数字电路基础——从布尔代数到触发器

各位同学,我是老张。在芯片行业摸爬滚打十几年,今天咱们聊聊数字电路最底层的那些东西。别看这些基础概念简单,我敢说,很多做了三五年设计的人,遇到时序问题照样翻车。咱们从最根本的布尔代数开始。

1.1 布尔代数:芯片世界的数学语言

说白了,数字芯片里只有两种状态:0和1。布尔代数就是处理这两个值的数学工具。你想想看,整个CPU、GPU、AI芯片,几十亿个晶体管,底层逻辑全是这套东西。

三个基本运算:

  • 与(AND):两个都是1,结果才是1。我习惯叫它「全票通过」。
  • 或(OR):只要有一个1,结果就是1。这叫「一票通过」。
  • 非(NOT):取反。1变0,0变1。

举个例子,你设计一个安全系统,需要两个传感器同时触发才报警。这就是与门。我在一个工业控制项目里用过这个逻辑,当时传感器信号有毛刺,差点误触发——嗯,后面会讲怎么处理。

核心公式(记住这几个就够了):

  • A · 0 = 0(与0归零)
  • A + 1 = 1(或1置1)
  • A · A' = 0(互补律)
  • A + A' = 1(排中律)
  • 德摩根定律:(A·B)' = A' + B'

德摩根定律特别实用。我在做低功耗设计时,经常用它来转换逻辑结构,减少晶体管数量。说白了,就是「与门的非等于非的或」,反过来也一样。

1.2 逻辑门:从公式到电路

布尔代数写出来是公式,用晶体管搭出来就是逻辑门。常见的门电路有这些:

门类型 逻辑符号 布尔表达式 真值表(简)
与门 & Y = A · B 00→0, 01→0, 10→0, 11→1
或门 ≥1 Y = A + B 00→0, 01→1, 10→1, 11→1
非门 1 Y = A' 0→1, 1→0
与非门 & + 圈 Y = (A·B)' 00→1, 01→1, 10→1, 11→0
或非门 ≥1 + 圈 Y = (A+B)' 00→1, 01→0, 10→0, 11→0
异或门 =1 Y = A ⊕ B 00→0, 01→1, 10→1, 11→0

我个人习惯用与非门和或非门做基础单元。为什么?因为CMOS工艺里,与非门和或非门的晶体管堆叠更对称,速度更快。我曾经在一个28nm的项目里,把所有与门都换成了与非门加非门,时序直接改善了5%。

小技巧:实际芯片里很少直接用与门和或门。大部分标准单元库只提供与非门、或非门和反相器。你需要学会用这些「万能门」搭出所有逻辑。

1.3 组合逻辑 vs 时序逻辑

这是数字电路里最重要的分水岭。我面试新人时必问这个问题。

组合逻辑:输出只取决于当前输入。没有记忆功能。比如加法器、多路选择器、译码器。

时序逻辑:输出不仅取决于当前输入,还取决于之前的状态。说白了,它有记忆。比如计数器、状态机、寄存器。

为什么会这样?因为时序逻辑里有存储元件——触发器和锁存器。它们能记住过去的信号。

我记得刚入行时,有个同事把组合逻辑的毛刺直接送进了时钟树,结果整个芯片功能紊乱。排查了三天才找到原因。从那以后,我对组合逻辑的输出一定要加一级寄存器才放心。

避坑指南:组合逻辑的输出可能有毛刺(glitch)。因为不同路径的延迟不一样,信号到达时间有先后。我曾经在一个高速ADC的接口设计里,因为没处理好组合逻辑的毛刺,导致采样数据全是错的。解决方案?在关键路径上加一级寄存器,或者用格雷码编码。

1.4 触发器与锁存器:存储的奥秘

这两个东西经常被搞混。我简单说说区别:

  • 锁存器(Latch):电平触发。使能信号有效时,输出跟随输入变化。说白了,它是透明的。
  • 触发器(Flip-Flop):边沿触发。只在时钟上升沿或下降沿采样输入。其他时间输出保持不变。

实际项目中,我强烈建议多用触发器,少用锁存器。为什么?锁存器在使能期间是透明的,任何输入变化都会直接传到输出,容易产生毛刺和时序问题。我在一个65nm的低功耗项目里,因为用了锁存器做流水线,结果静态时序分析(STA)跑出了几百条violation,改得我头皮发麻。

触发器的基本结构:

// D触发器行为描述(Verilog)
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        q <= 1'b0;
    else
        q <= d;
end

这段代码描述了一个带异步复位的D触发器。时钟上升沿采样,复位信号低有效。我习惯把复位写成异步的,因为上电时能保证寄存器处于已知状态。

关键参数(选型时必看):

  • 建立时间(setup time):数据必须在时钟沿之前稳定
  • 保持时间(hold time):数据必须在时钟沿之后保持稳定
  • 时钟到输出延迟(clk-to-q):时钟沿到输出变化的延迟

这三个参数决定了你的芯片能跑多快。我见过一个项目,因为库里的触发器建立时间太大,导致目标频率死活上不去,最后只能换工艺库。

知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了。你仔细看看,从布尔代数到触发器,是一条完整的链路。

数字电路基础:知识体系 布尔代数 与、或、非、德摩根定律 逻辑门 与非门、或非门、异或门 组合逻辑 加法器、多路选择器 时序逻辑 计数器、状态机、寄存器 触发器 & 锁存器 D触发器、JK触发器、SR锁存器 关键区别 组合逻辑:无记忆 时序逻辑:有记忆

这张图你看懂了吗?从布尔代数的数学基础,到逻辑门的物理实现,再到组合逻辑和时序逻辑的分野,最后落到触发器和锁存器这个存储单元上。整个数字芯片的底层逻辑,就是这么一层层搭起来的。

我的建议:初学者先别急着写代码。花一周时间,把布尔代数化简练熟,把真值表画明白。我见过太多人,Verilog写得飞起,结果综合出来的电路一堆冗余逻辑。基础不牢,地动山摇。

好了,这一章就到这里。记住,数字电路的核心就两件事:组合逻辑做运算,时序逻辑做存储。后面的章节,我们会一步步深入,从加法器到CPU,从触发器到整个芯片。慢慢来,不着急。


公众号:蓝海资料掘金营,微信deep3321