ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CPU底层逻辑:从PMOS和NMOS两种元件到完整处理器

CPU底层逻辑:从PMOS和NMOS两种元件到完整处理器 CPU这东西绝大多数人只关心主频、核心数、缓存大小跑分高不高。但CPU为什么能算数、能记事、能一条一条执行指令往最底层挖靠的是一套非常巧妙的逻辑结构而这套逻辑的起点只需要两种元件。我第一次在仿真软件里用一个PMOS加一个NMOS搭出反相器、再看到波形干净利落地翻转时是真的愣了一下原来那些复杂得吓人的处理器最底下不过是这么朴素的道理。很多人听到“CPU底层是两个元件”都会愣一下觉得太夸张。但实际上从最简单的逻辑门到几十亿晶体管的处理器中间没有其他神秘材料全是同一套思路的不断放大。理解这条链路比背多少代架构、多少条指令集都更接近CPU的“灵魂”。这篇就顺着“两种元件 → 逻辑门 → 运算器 → 存储器 → 整颗CPU”这条线往下拆讲清楚每一步为什么这么设计以及这些设计真正厉害在哪。适合想补硬件底子的同学也适合准备面试、或者手痒想自己搭一个mini CPU的人。1. 两种元件到底是什么一对互补的“电控开关”1.1 晶体管其实就是一把由电压控制的开关要理解CPU的底层先忘掉所有复杂概念只记住一句话数字电路里的晶体管本质就是一把由电压控制的开关。现代芯片里用的开关叫MOSFET全称是金属氧化物半导体场效应晶体管。它有栅极、源极、漏极三个关键端子栅极到源极之间的电压决定源极到漏极之间这条“河道”通不通。打个比方把它想象成一根水管上的电动阀门阀门的开合由控制信号决定阀门一开水流电流就能从一头流到另一头。这个比喻里有两个要点第一控制信号只看电压不需要持续注入电流所以管子在稳态下几乎不消耗驱动能量第二开和关的状态切换非常快现代工艺下开关时间在皮秒量级这才能支撑GHz级别的时钟。晶体管之所以能统治数字世界是因为“开关”这个动作本身就是逻辑的基础。一个开关要么断开要么闭合天然对应二进制里的0和1。剩下的问题只有一个如何把多个开关组合起来让它们协作完成“与、或、非”这些逻辑操作答案就在开关的两种类型上。1.2 NMOS和PMOS一个负责拉低一个负责拉高MOSFET按导电类型分成两类NMOS和PMOS它们的开关逻辑正好相反。NMOS是栅极给高电平时导通给低电平时断开。它擅长传导逻辑0导通时能把输出稳稳拉到地GND。PMOS反过来栅极给低电平时导通给高电平时断开擅长传导逻辑1导通时能把输出稳稳拉到电源VDD。听起来只是“互补”两个字但工程上的坑全藏在这里。单独拿NMOS做逻辑门能顺利拉低却拉不高当它试图把输出拉到接近电源电压时源极电压一路抬升栅源电压差不断缩小管子很快就自己关断了输出永远差一个阈值电压够不到VDD。PMOS则完全对称拉高没问题拉低拉不干净。也就是说单用一种管子搭出来的逻辑门输出电平天生“不干净”。一个门不干净可能还能忍但CPU里有几十上百级的级联每一级都损失一点信号很快就烂到没法识别了。所以早期只用NMOS或PMOS的逻辑终究没有成为主流。注意这里说的“拉低”“拉高”是针对数字逻辑的输出端点而言。NMOS放在下拉网络、PMOS放在上拉网络这是CMOS设计里不能搞反的基本原则。1.3 互补结构为什么“妙”静态零功耗加满幅输出工程师最后选择的做法是把两种管子放在一起用上面放PMOS负责往高拉下面放NMOS负责往低拉输入同时接到两个管子的栅极。以最简单的反相器为例输入为高电平时NMOS导通、PMOS断开输出被拉到地输入为低电平时PMOS导通、NMOS断开输出被拉到电源。关键点来了无论输出停在哪个稳定状态从电源到地这条通路上总有一个管子是断开的。这意味着只要电路状态不变化电源到地之间就没有直流通路静态电流几乎为零。同时输出要么是完整的VDD要么是完整的GND是“满幅”的标准逻辑电平。这套结构就叫做CMOS互补金属氧化物半导体。“互补”两个字换来的是两个黄金性质静态几乎不耗电、输出永远标准。前者决定了芯片能堆多少晶体管后者决定了数字信号能传多远多深。可以说CMOS不是某个偶然的设计而是一对矛盾省电和满幅在物理约束下逼出来的最优解。2. 从一对管子到整套逻辑门最小单元怎么“长”出来2.1 反相器数字逻辑的第一块积木一对互补管组成的第一个完整逻辑单元就是反相器Inverter也就是非门输入0输出1输入1输出0。别看它简单反相器几乎是数字世界里最重要的一块积木。它定义了“电压”和“逻辑”之间的翻译规则低于某个阈值算逻辑0高于某个阈值算逻辑1中间是过渡区。输入从低跳到高时输出不会瞬间跳到低而是要经过一个短暂的斜坡这个斜坡对应的时间就是传输延迟。延迟越小同样时间内能完成的逻辑级数就越多CPU能跑的主频也就越高。反相器也是理解功耗的最佳样本。每次输出从0变1都要给负载电容充电从1变0又要放掉这些电荷。每次充放消耗的能量约为C×V²再乘上每秒翻转的次数得到动态功耗公式PαCV²fC是负载电容V是工作电压f是翻转频率α是活动因子。这个公式里最刺眼的项是V²——电压降10%功耗能降约19%电压降20%功耗降36%。所以低功耗设计的第一课永远是能降电压就绝不只靠降频率。2.2 与非门和或非门串并联换来的“万能门”有了反相器做模板再往前走一步就能组合出与非门和或非门。结论先放这把两个PMOS并联作为上拉网络、两个NMOS串联作为下拉网络就得到两输入与非门NAND反过来两个PMOS串联、两个NMOS并联就得到两输入或非门NOR。为什么是这种放置方式因为串联意味着“必须全通才通”并联意味着“任一导通即通”。放到上拉网络里PMOS并联时只要有一个输入为0就有一条路把输出拉到1只有输入全为1才没有任何上拉路径。放到下拉网络里NMOS串联时必须两个输入都是1输出才能被拉到0。这个直觉和真值表完全吻合AB与非门输出或非门输出0011011010101100这里有个每个数字逻辑课都会讲、但很多人没嚼出味道的结论与非门和或非门都是“万能门”。任意逻辑函数只要用与非门一种门就能搭出来只用或非门也一样能搭。非门可以靠把与非门两个输入短接得到与门用与非门加一级反相器或门用三个与非门异或门用四个与非门。为什么强调这个因为芯片制造工艺里与非门往往是最快、最省面积的基本单元工程师做电路优化时核心工作之一就是把人写出来的逻辑表达式翻译成尽可能少的与非/或非结构。这不是纯理论游戏而是实实在在的面积和性能买卖。2.3 布尔代数才是CPU真正的“语法”逻辑门家族常用的有与、或、非、与非、或非、异或、同或。它们全部按照布尔代数工作布尔代数就是CPU处理数字的语法规则。同或和异或值得单独留意。异或门输出1的条件是两个输入不同同或门输出1的条件是两个输入相同。它们在加法器、比较器、校验码电路里反复出现原因很简单二进制加法的本质就是“异或加进位”而比较两个数是否相等本质上就是看它们逐位“同或”的结果能不能全部为1。理解了这层关系再看ALU的内部结构就不会觉得它是一个黑盒了——它就是一堆布尔表达式被翻译成门电路再用多路选择器按操作码选一条结果出来。3. 逻辑门怎么拼出CPU运算、存储与控制的完整链路3.1 组合逻辑从全加器到ALU从门电路到CPU第一步是搭运算器。半加器是最小的例子和位用异或门SA⊕B进位用与门CA·B两个门就完成了两个二进制位的加法。全加器再引入进位输入逻辑变成SA⊕B⊕Cin进位输出Cout(A·B)Cin·(A⊕B)。把32个全加器按进位串联起来就是能做32位整数的加法器。把加法和逻辑运算、移位、比较堆在一起用多路选择器按操作码选择结果就成了ALU。组合逻辑的特点是一锤子买卖输出只由当前的输入决定没有记忆也不依赖时间顺序。它是计算能力的基础但光有它还不够——CPU必须能记住中间结果必须能按时钟节拍一步一步推进这就引入了时序逻辑。3.2 时序逻辑两个反相器首尾相接就成了记忆CPU的记忆功能在电路层面靠的依然是那两个元件。最经典的存储结构是把两个反相器首尾相接成一个环第一个反相器的输出接第二个的输入第二个的输出接回第一个的输入。这个环里只有两个稳定状态要么左边输出高、右边输出低要么反过来。没有外部信号推它它就一直保持现状推它一下它就翻转到另一个状态并继续锁住。这就是双稳态结构是SRAM存储单元和寄存器的最原始雏形。在这个环外面再加上两个读写控制管就成了标准的六管SRAM单元再给环加上时钟控制就能做成D触发器进而组成寄存器堆。CPU里的寄存器、缓存、指令队列本质上全是这种“反馈环锁状态”思路的量产。所以你看CPU的两大核心能力——计算和记忆——底层都归到同一对互补管上计算靠开关管的串并联拼出逻辑记忆靠反馈环把逻辑状态钉住。两个看似完全不同的需求用同一套元件、两种连接方式就都解决了。3.3 数据通路加控制通路一个完整CPU的骨架把计算和记忆放到一起CPU的工作就可以抽象成两条路一条是数据通路一条是控制通路。数据通路负责干活程序计数器PC给出下一条指令的地址取回指令指令里的操作数送进寄存器堆再进ALU计算结果写回寄存器必要时访问内存。控制通路负责指挥控制器根据指令的操作码生成一组控制信号决定寄存器堆读哪个口、ALU做什么运算、结果写到哪、下一条指令从哪里取。两条路都是逻辑门搭的差别只在于数据通路吃的是“数据”控制通路吃的是“指令编码”并用这些编码去驱动数据通路上那些多路选择器。很多计算机组成原理实验比如“单总线CPU设计”或“MIPS单周期CPU设计”就是让学生在一个有限的逻辑门模型里亲手搭一遍这条路。我自己当年做这类实验最大的感受是画真值表、写控制信号表是一回事看着波形图里PC、指令、ALU输出按节拍一步一步走起来你才算真正理解CPU不过是一台严格按布尔逻辑运转的时序机器。课程越往后越花哨但骨架永远就这一副。4. 为什么说这是CPU的灵魂三个底层硬道理4.1 静态功耗趋近于零CPU才敢堆上百亿晶体管先做一道简单的估算题感受一下功耗的压力。假设一颗CPU里有1亿个门每个门平均带2×10⁻¹⁵F的负载电容工作电压1V时钟频率3GHz平均活动因子0.1那么动态功耗可以写成P≈N·α·C·V²·fN是门的数量。代入数值10⁸×0.1×2×10⁻¹⁵×1×3×10⁹60瓦。这跟现实中高性能处理器数十上百瓦的功耗量级基本吻合。如果逻辑门不是CMOS这种互补结构而是静态时电源到地一直有电流的电路那功耗还要再翻好几个量级芯片一旦通电就会过热根本不可能集成几十上百亿个管子。CMOS之所以能成为绝对主流本质原因是它利用“一个导通、另一个必断开”的互补关系掐断了所有稳定的直流通路。这笔省下来的静态功耗就是芯片设计者敢于不断堆晶体管的底气。4.2 满幅输出与信号再生数字链路才敢无限级联CMOS还有一个容易被忽视但极其重要的特性信号每过一级门都会被重新“校正”一次。因为输出被PMOS或NMOS拉到完整的VDD或GND所以在输出端看到的一定是干净的标准电平。于是不管输入信号经过长导线衰减、被噪声干扰成什么样只要还能被识别成0或1经过一级门电路之后输出又是一条满幅的信号。这个性质叫信号再生。可以类比成复印每次复印出来的文件都是清晰的原件而不是越印越模糊的副本。模拟电路最怕噪声逐级累积信号越来越脏数字电路靠“每过一级就重写一遍”的机制把这个问题绕开了。没有满幅输出就没有信号再生没有信号再生任何几十级以上的逻辑链路都会崩溃更不要说CPU里那种动辄几十万级的复杂路径了。4.3 工艺微缩与电压下降架构演进背后的物理推手CMOS框架还有一个异常契合工程界的优点适合越做越小。把管子尺寸缩小负载电容变小充放电更快传输延迟变小把工作电压降低每开关一次消耗的能量更小。过去几十年芯片工艺从微米级一路缩到几纳米CPU主频和性能持续起飞靠的就是CMOS对尺寸和电压的高度适配。不过这条路也有尽头。晶体管缩小到一定程度后亚阈值漏电开始抬头静态功耗重新变得不可忽视电压也不能无限下调因为阈值电压也要跟着降再降漏电会更严重。这也是近几代CPU从“无脑冲主频”转向“多核并行加能效优化”的物理原因。看懂这一层你就明白CPU架构的演进表面上是指令集、缓存、调度策略的事底下真正起约束作用的还是那对互补管最基本的物理特性。5. 常见问题与排查技巧实录5.1 分立MOS管搭电路最容易犯的错就是接反如果是在面包板上用分立MOS管做实验最常见、也最隐蔽的坑是把NMOS和PMOS的源漏接反或者压根选错管子类型。NMOS在数字电路里的常规接法是源极接地、漏极接输出PMOS反过来源极接电源、漏极接输出。一旦接反逻辑可能还能“大体工作”但输出电平永远不对或者表现为该导通时不导通令人非常头疼。我的习惯是上电前先用万用表量一遍引脚确认栅极、源极、漏极各自对应哪个引脚再确认栅源电压极性是否和管子类型匹配NMOS需要栅极高过源极才导通PMOS需要栅极低于源极才导通。这一步做好了能省下半天排查时间。5.2 逻辑对不上真值表先查悬空再查扇出仿真或实验电路里输出和真值表对不上时按优先级排查三件事输入有没有悬空、输出带不带得动负载、有没有管子处于半导通状态。悬空输入在CMOS电路里最危险。栅极是高阻抗节点悬空就等于接了一根天线周围噪声稍大一点输出就会乱跳。解决办法很简单不用的输入手动接到固定电平不能直接搁着。提示在仿真软件里悬空输入往往不会直接报错但输出会出现奇怪的亚稳态现象。遇到这种问题第一反应就应该是检查所有输入是否接好了固定电平。扇出问题则表现为“该高不高、该低不低”原因是单个门驱动能力不够拖不动太多负载电容。这时候不是逻辑错了是驱动强度不够要么少接几个负载门要么加大驱动管的宽长比——后端设计里那一堆“尺寸优化”说穿了就是在治这个病。5.3 用功耗公式看发热频率和电压的取舍我当年排查一块嵌入式板子发热问题时做过一次估算印象特别深。同样一颗芯片工作电压从1.2V降到1.0V动态功耗变成原来的(1.0/1.2)²≈0.69直接掉了三成左右板子温度肉眼可见地降下来。这就是为什么现代CPU都有动态调频调压机制也是低功耗设计最核心的一条经验先看能不能降电压再看要不要降频率。如果硬件平台允许微调电压优先把电压压到能稳定运行的下限热设计余量不够时锁频而不是盲目限流往往效果更好。这个思路同样适用于调试一个设备异常发热第一反应不是换散热器而是看一下有没有哪个模块电压给高了、或者频率跑得太激进。5.4 面试“最小门数”题考的是同一套功夫有些同学面试时被问“用与非门搭异或最少要几个门”“怎么用与非门实现或门”觉得是脑筋急转弯。其实这些题考察的就是你对门级结构熟不熟。我的建议是别背答案记住两条推导工具第一把与非门的两个输入短接就是非门第二德摩根定律AB可以改写成(A·B)的形式——实际是(A·B)。然后现场推导就行A和B各用一个与非门短接得到再把A和B送进第三个与非门输出恰好就是AB三个门搞定。异或门稍微绕一点四个与非门也能搭出来。这些看似琐碎的技巧在做逻辑化简、减少芯片面积、优化关键路径延迟的时候和面试题一样管用。能把这类题讲清楚的人通常也是真的吃透了“门是最小功能单元”这件事。最后分享一点我这些年带新人、做项目时反复强调的体会。很多人学CPU原理一开始就背架构图、背指令集结果越学越虚反而是先亲手把“两个元件怎么变出逻辑门”验证一遍后面再看任何架构都像看同一棵树上长出来的不同枝桠。如果你有条件建议用Logisim或者Verilog把加法器、寄存器堆、单周期CPU各搭一遍。搭的过程中你会反复撞见同样的选择哪些信号该走组合逻辑、哪些状态该保持、哪条路径该加缓冲。而这些问题的答案最终都指向同一个原点——那一对互补管构成的巧妙逻辑。理解了它CPU对你就不再是黑盒而是一台看得懂、算得清的机器。
返回列表