6T SRAM单元深度解析:从六管结构到读写稳定性的工程权衡
发布时间:2026/9/27 6:13:14 锦皓数字建站

芯片公司里有句老话处理器负责算存储负责记但真正决定一颗SoC能不能跑起来的往往是那些藏在边缘角落里、看起来最不起眼的存储单元。CPU的一级缓存、二级缓存GPU的寄存器堆MCU里的小容量RAM往回追三层底层基本都站着同一种结构——6T SRAM单元。教科书上把它画成两根交叉线和六个晶体管看着确实简单可很多同学甚至刚入行的工程师真到了自己画版图或者做失效分析的时候才发现为什么这个单元写不进去为什么读一次数据就变了为什么低温下整片SRAM都出错这些问题不把六管从电流路径到尺寸权衡整条链路吃透是根本回答不了的。这篇文章就把6T SRAM从晶体管到数据锁存的完整流程掰开揉碎讲一遍适合正在学数字电路/集成电路设计的学生也适合刚接触存储设计、想在底层原理上补课的工程师。1. 6T单元的结构拆解六个晶体管怎样组成一个最小闭环1.1 两个交叉耦合反相器数据锁存的“种子”要理解6T第一步得先理解1T——反相器。一个标准的CMOS反相器由一只PMOS和一只NMOS串联组成输入高电平的时候NMOS导通、PMOS截止输出被拉到地输入低电平的时候反过来PMOS导通、NMOS截止输出被拉到电源。它干的事就是取反0变11变0。单看一个反相器你只会把它当成逻辑门。但如果把两个反相器首尾相接事情就起变化了第一个反相器的输出接到第二个反相器的输入第二个反相器的输出再接回第一个反相器的输入。假设一开始Q节点是1QB节点是0那么反相器A的输出Q1传给了反相器BB的输出QB0又传回给AA保持输出Q1。这两个反相器互相给对方“站台”谁也不松口于是一个稳定的闭环就形成了。这正是数据锁存的本质。所谓“锁存”不是靠什么东西把数据钉死在电路里而是用一对互相钳制的状态让电路自己维持住自己。只要不断电Q和QB这一高一低的组合就不会自己消失。这和DRAM有本质区别——DRAM靠电容上的电荷存数据电荷会漏所以必须不停刷新而SRAM靠正反馈维持状态只要电源在它就能一直待机。这也是为什么SRAM被称为“静态”随机存取存储器。1.2 M1到M6的角色分工与连接关系6T单元的电路图画法有几种但结构本质是一样的四个晶体管组成两个交叉耦合的反相器另外两个晶体管作为访问管也叫传输管、字线管把存储节点与位线连接起来。用最常见的命名方式来拆M1PMOS和M2NMOS组成反相器A它们的栅极连在一起作为反相器A的输入节点QB漏极连在一起作为输出节点Q。M3PMOS和M4NMOS组成反相器B栅极连在一起作为输入节点Q漏极连在一起作为输出节点QB。M5和M6是访问管都是NMOS。M5的源漏一端接Q另一端接位线BL栅极接字线WLM6的源漏一端接QB另一端接位线BLB栅极同样接字线WL。注意这里的关键是交叉反相器A的输出接反相器B的输入反相器B的输出再接回反相器A的输入。这一交叉就把两个反相器变成了一个双稳态触发器。BL和BLB是两条互补的位线一个负责传“正数据”一个负责传“反数据”具体谁正谁反取决于你的命名习惯但一定是一高一低成对出现的。1.3 为什么这个结构能“锁”住数据正反馈的微观解释用逻辑门的角度看交叉耦合产生的是逻辑上的循环但从晶体管电流的角度看这个循环本质上是一个正反馈放大器。假设Q1QB0。Q1使得M3截止、M4导通所以QB被M4拉低到0。QB0又使得M1导通、M2截止所以Q被M1拉高到1。Q越高M4导通得越强QB就越低QB越低M1导通得越强Q就越高。两个节点互相放大对方的变化最后都顶死在电源轨上。这就像一个两人互相复述的传话游戏A对B说“我说的是1”B对A说“你说的是1我也说1”第二轮A说“B都说1了我也坚持1”两个人越说越坚定最后谁也没法被轻易说服。正反馈的好处是只要外部不去强行干预存储节点会自己把自己维持在稳定的高电平或低电平上不需要像DRAM那样隔几毫秒就补一次电荷。2. 保持、写入与读取三种工作模式下的晶体管行为2.1 保持模式WL0六管单元进入平静期当WL为低电平时M5和M6处于截止状态存储节点Q和QB与位线BL、BLB完全断开。此时外部电路碰不到单元内部单元只靠两个交叉耦合反相器维持自身状态。这时的功耗来源只有一个——漏电。对于理想MOS管截止就是完全不通但实际晶体管的漏电途径很多亚阈值漏电、栅氧化层隧穿漏电、PN结反向漏电等。其中亚阈值漏电是主要成分而且随着工艺节点微缩和阈值电压降低漏电会指数级增长。这也是为什么一颗大缓存芯片即使在“什么都不干”的保持模式下也会有可观待机功耗的原因。保持模式下最怕的事是什么是数据掉电丢失和噪声把状态冲翻。好在交叉耦合的正反馈提供了足够的噪声容限只要电源电压正常节点Q和QB的状态就很难被小扰动改变。这一特性使得SRAM在不需要读写的空闲周期里非常“省心”也正因为它不需要刷新所以访问延迟比DRAM低得多。2.2 写入模式用强制的“0”推翻旧状态的拔河过程写入操作的目标是不管单元里原来存的是0还是1都要把新数据强行灌进去。这可不是简单把位线拉高拉低就完事的事因为在写入时存储单元内部的交叉耦合结构会拼命抵抗外部改变。以写“0”为例完整过程是这样的先将BL拉低到0将BLB拉高到1这是外部写驱动器的准备动作。然后拉高字线WLM5和M6同时导通。BL的低电平通过M5传到Q节点强行把Q往下拉BLB的高电平通过M6传到QB节点帮助QB保持在高位。当Q被拉到足够低反相器B的PMOSM3开始导通、NMOSM4开始截止QB进一步被拉高。QB拉高后反相器A的NMOSM2导通、PMOSM1截止Q被进一步拉低。正反馈接手状态翻转完成。此时即使WL关断单元也稳定在新状态Q0、QB1上。写“1”的过程完全对称只是BL和BLB的电位对调。这里有一个关键工程点写入的本质是“外部驱动器与单元内部锁存结构的一场拔河”。外部要通过访问管M5/M6把节点拉到反相器的翻转门限以下内部的反相器则会尽力把节点拉回原来的状态。如果访问管太弱或者内部下拉/上拉管太强外部信号可能赢不了这场比赛表现为“写不进去”。如果写“1”却写不进去本质上是Q节点被BLB通过M6拉低但节点Q那一侧的M1上拉管和M5下拉管BL的高电平通过M5试图拉高Q而M2下拉管试图维持Q低在僵持。实际设计中为了避免这种问题写入驱动器的驱动能力一般做得比单元强很多但只要访问管通路的电阻不够低很多人会在低电源电压下遇到写入失败的毛刺问题。这个问题后面会在尺寸设计一章详细展开。2.3 读取模式预充电与放电产生可检测的位线压差读取操作的设计思路和写入完全不同写入是“强行改变”读取是“小心观察”。之所以要“小心”是因为读取时位线的高电平会通过访问管触碰到存储节点如果处理不好读一次数据可能反而把单元里的数据冲翻。读“0”的完整过程读操作前外部预充电电路把BL和BLB都充电到VDD例如0.9V或1.2V。拉高WLM5和M6导通。假设单元存的是Q0、QB1。Q0意味着M2导通那么BL上的预充电电荷会经过M5、M2这条路径泄放到地BL电压开始下降。QB1意味着M4的栅极高、M4导通但M6另一端接的BLB也是高且M3截止所以BLB没有放电通路基本保持在VDD附近。BL和BLB之间就形成了一个电压差典型值几十到两百毫伏灵敏放大器检测到这个压差后把它放大成满摆幅的逻辑电平输出到数据总线上。读“1”的过程对称BLB侧放电BL保持高电平压差方向相反。读取的微妙之处在于扰动。在读“0”时BL的高电平通过M5传到Q节点。QL原本是0但外部高电平会试图把它往上抬。如果M2下拉管不够强Q可能会被抬到很高甚至翻转这就是读取破坏。虽然正常情况下M2比M5的驱动能力强不会翻但哪怕Q只是被抬高了一点也会给后续的“读后保持”埋下隐患。所以读操作本质上是一次“又观察又接触”的操作接触得越深观察得越清楚但破坏的可能性也越大。这也解释了为什么6T单元的晶体管尺寸不是随便定的读稳定性和写入能力对尺寸的要求正好相反必须做出权衡。3. 晶体管尺寸设计中的隐蔽权衡读稳定性与写入能力的矛盾3.1 核心比值下拉管、上拉管、访问管的相对强弱如果你去看芯片工艺的PDK库里SRAM单元的版图会发现同一个单元里六只管子的沟道宽度各不相同这不是设计师随手画的而是经过严格权衡后的结果。6T单元的设计实质是确定三组尺寸比例关系。第一组是下拉管M2/M4与访问管M5/M6的比值通常用β比来表示即下拉管的导电因子与访问管的导电因子之比。下拉管要做得比访问管宽很多原因很直接读取时位线高电平通过访问管尝试抬高Q节点必须由下拉管把Q牢牢拉在低电平上。如果访问管比下拉管还强读取就会把0翻成1。实际设计中β比通常要大于1.5到2左右才能保证读稳定。第二组是访问管与上拉管的比值通常叫γ比。上拉管是PMOS负责把存储节点拉高。写入时外部要通过访问管把节点拉低而上拉管会拼命抵抗如果上拉管比访问管强外部信号拉不低节点写操作就会失败。所以上拉管必须做得比访问管弱很多这样外部才能“轻易”把节点拉下来。典型设计中访问管的宽度和上拉管的宽度之比也通常在1.5以上。第三组是下拉管与上拉管的比值。这一组决定了反相器的开关门限翻转电压。为了让读出时单元两侧的翻转门限对称、让SNM最大化下拉管和上拉管的尺寸也要配合调整。用拔河来类比最形象读取时位线是“外人”试图把存储节点从0往上拉内部下拉管是“防守方”必须把节点压住写入时外部驱动器是“进攻方”试图把存储节点从1往下拉内部上拉管是“防守方”但这次我们希望进攻方赢。所以最理想的力量布局是下拉管孔武有力访问管中等偏弱上拉管体弱多病。这样“内部防守”在读取时足够强“外部进攻”在写入时又足够赢。3.2 读取扰动与静态噪声容限SNM静态噪声容限Static Noise MarginSNM是衡量SRAM单元稳定性的最核心指标。它描述的是在保证数据不翻转的前提下存储节点能承受多大的直流噪声电压。SNM越大单元抗扰动能力越强良率越高。测量SNM的经典方法是画“蝶形曲线”保持WL关闭或者读取时WL开启把Q节点的输入电压作为横轴QB节点的输出电压作为纵轴画出两个交叉耦合反相器各自的电压传输特性曲线VTC。这两条曲线围出来的“蝶形”区域最大可内接正方形的边长就是SNM。蝶形曲线看起来很抽象但理解起来很简单两条VTC曲线之间的距离就是你往存储节点上叠多少噪声电压才会让Q和QB失去稳定状态。如果蝶形曲线开口很大说明单元很“皮实”如果开口很小、都快贴在一起了说明单元处于摇摇欲坠的临界状态稍微来点噪声或者电压波动就会翻转。在65nm及更先进的工艺下典型单元的保持SNM大约在200到300mV量级读取SNM会更低。电源电压越低SNM越小——因为高低电平的差值被压缩了。这也是为什么超低电压SRAM的设计特别难你想降到0.6V以下省功耗但单元可能在0.7V就已经守不住数据了。关于电压墙问题后面的工程大坑章节还会展开。3.3 写入裕量与翻转点写不写进去取决于一个“临界高度”写入能力同样有一个量化指标叫写入裕量。直观的理解是要把存储节点从当前状态拉到反相器翻转门限以下才能触发正反馈翻转。如果外部通过访问管能拉低到门限以下写入成功如果只能拉到门限以上一点点一旦WL关闭状态又会弹回原样。具体到写“0”的操作BL0通过M5向Q放电但Q侧的反相器PMOSM1还在努力把Q往上拉。Q的电压最终停在什么位置取决于M5的放电能力和M1的上拉能力的“电流竞争”。Q被拉到低于反相器B的翻转门限之后B输出QB开始升高QB升高又反过来帮助拉低Q触发雪崩式翻转。写入裕量的设计难点在于这个“临界高度”不是固定的它随工艺偏差、电压、温度变化。同一颗芯片上不同位置的单元写入裕量可能有几十毫伏甚至上百毫伏的差异。为了覆盖所有工艺角设计者一般会在写时序中留出足够的WL开启时间同时在电路上保证写到最弱的单元也能成功翻转。3.4 典型尺寸方案实例给一个180nm工艺下的典型参考值注意这只是为了让读者建立数量级概念实际不同工艺节点差异很大下拉管NMOSW/L 0.36μm / 0.18μm是单元里最宽的下拉器件。访问管NMOSW/L 0.27μm / 0.18μm比下拉管窄。上拉管PMOSW/L 0.18μm / 0.18μm是单元里最弱的器件。在更先进的工艺里例如28nm节点最小宽度可能只有几十纳米级别但相对比例关系仍然成立下拉管最强、上拉管最弱、访问管居中。这一点从7nm、5nm的SRAM单元版图照片上也能直观看到——最粗壮的那几条就是下拉管。4. 从单个单元到片上阵列寻址、位线读写电路与时序配合4.1 行列译码与单元选择单个6T单元只能存1比特实际使用时必须把成千上万个单元排成阵列。阵列组织方式决定了访问一个地址时哪些单元被选中。SRAM阵列的基本结构是“行×列”同一行的所有单元共享同一条字线WL同一列的所有单元共享同一对位线BL/BLB。访问某个地址时地址信号先经过行译码器选中一行把该行的WL拉高这一整行的所有单元都被“唤醒”它们的访问管同时打开各自的存储节点同时连接到位线上。但一次访问只需要取其中一列或几列的数据所以列译码器再根据地址的低位从这一行中挑出对应的列把它们的位线接入灵敏放大器或写入驱动器。这里要特别说明“整行激活”在SRAM操作中是非常关键的事实。即使你只想读一个字节物理上整行的所有单元都被触碰了一遍。这对于数据保持是个潜在风险——半选问题下一章会专门讲。4.2 预充电电路、灵敏放大器与写入驱动器的分工在阵列外围有三种电路和单元并肩工作预充电电路每次读操作开始前把BL和BLB都预充到VDD。预充电不充分会让后续读操作产生错误的压差信号。现代高速SRAM的预充电管做得很宽就是为了在极短的周期内把大电容位线充满。灵敏放大器读操作的核心外围电路。位线上的压差只有几十到几百毫伏如果直接用逻辑门去判读既慢又不可靠。灵敏放大器像一个高增益的差分放大器一旦检测到位线压差达到阈值比如100mV它就快速把这一微小压差放大成满摆幅的输出信号。相当于给读取操作配了一个“放大镜”。写入驱动器写操作的核心外围电路它需要强驱动能力能够快速把位线拉到电源轨或地轨。写入驱动器通常比读电路强壮得多因为写入时要“打”赢单元内部锁存结构的抵抗力。有意思的是在不少SRAM设计中读和写走的是两条分开的数据通路写驱动器只负责驱动位线灵敏放大器只负责从位线上读取信号。这样分开设计的目的是避免互相干扰也让读写时序可以独立优化。4.3 一次完整读写操作的时间线把单元和外围电路串起来一次读操作的时间线大致如下地址输入建立译码器开始工作。预充电电路把BL/BLB充到VDD此时WL保持低。行译码器输出稳定WL拉高。单元访问管打开存储节点与位线导通。位线上开始形成差分压差这个过程取决于单元放电电流和位线电容通常需要几百皮秒到几纳秒。灵敏放大器使能检测并放大压差输出数据。WL拉低单元重新与位线隔离预充电电路开始为下一次访问做准备。写操作的时间线略有不同写驱动器先把位线拉到目标电平再拉高WL直接对单元强制写入等单元稳定后关断WL。写操作不需要经过灵敏放大但其成功与否完全取决于WL开启期间驱动器和单元之间的竞争结果。从时序上看SRAM的一个核心优势是“异步友好”不需要额外的刷新周期也不需要等待电容充电恢复数据读出来之后单元自己就保持住了。这也是片上缓存选SRAM而不是DRAM的根本原因——DRAM的刷新开销和长延迟在高速处理器缓存场景下是不可接受的。5. 工程实战中6T单元的大坑半选干扰、漏电与工艺偏差5.1 半选干扰读一个字节整行都在“被读”前面提到行译码器是整行选通的。假设一个SRAM阵列有1024行×1024列你要读地址第500行第100列。行译码器选通第500行这一行的1024个单元全部打开访问管。最终只有第100列的灵敏放大器被使能但另外1023个单元同样经历了一次完整的“物理接触”位线高电平通过访问管触碰了存储节点。这些未被选中的单元就是“半选单元”。它们的WL是高位线是预充电高电平它们的存储节点承受着和真正被读单元相同的读取扰动。如果单元设计时读稳定性不够半选单元可能在这一瞬间翻转数据就悄悄丢了。半选干扰是SRAM设计中最隐蔽、最折磨人的问题之一。它不直接体现在正常读写仿真里而是体现在“为什么我的芯片偶尔读错数据偶发且不可复现”的玄学故障中。版图和布局上通常通过把阵列分块、让每次访问只激活一小部分行来降低半选单元数量同时在单元设计阶段就要保证读取SNM足够大把半选翻转概率压到极低。5.2 亚阈值漏电与保持功耗前文提过保持模式也有漏电在先进工艺下这基本就是静态功耗的主战场。6T单元里的每个晶体管即使处于截止状态源漏之间也会有亚阈值漏电流。一个单元的漏电可能只有nA甚至pA级但一片大型SRAM包含几百万甚至几十亿个单元时总漏电就相当可观了。工程师应对保持漏电的主要手段是“电压缩放”在读/写操作时给存储阵列提供正常的工作电压在进入长待机时将电源电压降到最低保持电压VDD_MIN附近。这个VDD_MIN由单元的数据保持能力决定——电压不能低到SNM变成零否则数据就会在待机中悄悄丢失。超低功耗MCU的功耗预算大部分都耗在这种“保数据”和“漏电”的拉锯战上。需要特别提醒VDD_MIN不是固定的。同一片晶圆上不同die的漏电和SNM存在差异所以有些芯片在标称最低电压下能保住数据有些会丢数据。量产时通常需要在电压、温度测试环节单独筛选。5.3 工艺偏差下的单元失配与良率6T SRAM是整个芯片设计中对工艺偏差最敏感的结构之一。要做到单元面积最小只能用最小尺寸晶体管但最小尺寸意味着沟道长度和宽度的小幅波动都会对阈值电压、驱动电流产生显著影响。如果两只差分管失配反相器的翻转门限就会偏移SNM跟着恶化。打个比方交叉耦合的两个人原本势均力敌、互相牵制但其中一个人突然长得更壮了另一个人无论如何喊话都扳不回局面那么存储节点就容易偏到一边去。这个“长壮”在工艺上就对应着某个晶体管的阈值电压偏移或沟道宽度偏差。单元失配的直接后果是“良率下降”超大阵列中只要有一个单元失效整颗芯片可能就报废。为了应对这一点大型SRAM普遍会加冗余行/列测试时发现失效单元就把对应行/列替换成备用的冗余行/列。制程越先进工艺波动越大需要预留的冗余比例也越高。5.4 低电压设计中的“电压墙”难题前面多次提到低电压下SNM会收缩这是SRAM设计中最让人头疼的“电压墙”。6T单元的工作电压一降发现问题会接踵而至读操作时BL预充电高电平与地之间的摆幅变小可分辨位线压差变小灵敏放大器更难可靠工作写操作时外部通过访问管拉低节点但上拉管的电流在低电压下衰减变量关系变得更加病态。这也是为什么很多低功耗芯片会采用dual-rail供电方案核心逻辑工作在0.6V甚至更低但SRAM阵列单独供一个更高的电压比如0.8V。代价是额外的电源域和电平转换电路但换来了SRAM的可靠性。如果要在单个电压域下继续降电压就需要更换存储单元结构比如8T SRAM单元增加独立读端口或者带写辅助电路的改进型6T。在这个层面上6T不是被“优化”掉而是被“替换”掉——因为它保守稳定的双端口读写在低电压下已经撑不住了。6. 后记在一片SRAM里实际摸爬滚打之后的几条经验最后讲点我在实际项目中积累的体会不一定写在任何教科书里但连续调试过几轮SRAM的人应该会有共鸣。第一设计6T单元时不要只盯着仿真曲线好看。流片回来测的时候真正考验单元的是极低电压下的写操作和高温下的保持稳定性。我见过不少设计在25℃仿真下一切完美到85℃高温时SNM暴跌、误码率飙升。所以做单元设计的同事习惯把所有工艺角slow/fast/typ都跑一遍再留出至少20%的设计裕量这个习惯是对的。第二第一版SRAM测试芯片回来最应该测的不是满功能读写而是“边缘电压扫描”。把电压从高往低一档一档降每档都跑全地址读写看它在哪个电压点开始出现第一个bit失效率。这个“第一滴血”位置基本决定了这颗芯片的工作电压下限也暴露了单元设计和外围电路谁先撑不住。第三如果你只是写RTL、调逻辑的工程师不需要去手算每个晶体管的β比但一定要理解SRAM的读操作是扰动性的、写操作是竞争性的。这两个性质会直接导致你在系统集成时遇到“偶发读错”“低温写不进”等莫名其妙的问题。到时候能帮你快速定位问题的不是更复杂的仿真脚本而是对6T单元工作原理的清晰认知。第四仿真和实测永远有差距。灵敏放大器的最佳使能时间仿真给的是一个保守窗口实测中经常需要微调。给灵敏放大器使能留一点延迟往往比追求极限速度更能换来整个存储阵列的稳定性。6T SRAM看似简单但每一个晶体管、每一条连线背后都藏着一笔工程账。把这六个管子吃透了你再去理解什么寄存器堆、缓存一致性、内存控制器会发现底层逻辑都是相通的。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。