每年总会看到几则存储器IP圈子的新闻,大多数时候扫一眼标题就过去了。但这次 sureCore 发布的“针对 16nm FinFET 工艺的低功耗 Memory Compiler”,我确实停下来多看了几眼。原因很简单:FinFET 工艺的漏电控制已经比平面工艺好了一大截,可嵌入式 SRAM 想在低电压下稳定工作,依然是整个低功耗 SoC 设计里最头疼的环节之一。sureCore 做的正是超低功耗嵌入式存储方案,这次把编译器直接放到 16nm FinFET 上,意味着以后做低功耗芯片的团队,不必再去定制一套存储方案才有机会拿到低压低功耗 SRAM,用编译器生成的存储阵列也能把功耗和良率兼顾起来。这篇文章我会从 Memory Compiler 的原理、FinFET 工艺的难点、sureCore 这类方案的核心技术、以及工程落地常见的坑几个角度,把这则新闻背后真正值得关注的东西拆开聊一聊。适合 SoC 架构师、后端物理实现工程师、低功耗设计和验证的同学参考,凡是手头正在做 IoT、可穿戴、移动设备的芯片,都建议花几分钟看完。
1. 这条新闻到底在说什么:sureCore 给 16nm FinFET 带来了一款低功耗存储编译器
1.1 先说结论:这不是一条普通的 IP 发布消息
sureCore 这家公司,业内做低功耗芯片的朋友应该不陌生。它是一家总部在英国的低功耗嵌入式存储 IP 公司,主打超低电压 SRAM 和存储编译方案。这次宣布的 16nm FinFET 低功耗 Memory Compiler,本质上是一个“存储器生成器”,你输入容量、位宽、端口、功耗模式等参数,它自动生成对应的 SRAM 或寄存器文件阵列,包括 GDS 版图、LEF、Liberty 时序功耗库、Verilog 行为模型等全套交付物。
这类新闻单看标题很容易被忽略,但如果你是做低功耗 SoC 的,这个发布的分量其实不轻。FinFET 工艺下逻辑电路可以跑到很低的电压,但 SRAM 不行,低压下单元稳定性、读写噪声容限、良率都会急剧恶化。以前要拿到低压可工作的 SRAM,往往得找定制存储团队,一版流片周期加上验证成本,都是不小开销。现在编译器级别的方案能覆盖低电压工作区间,这对项目选型的影响是直接的。
1.2 为什么 16nm FinFET 阶段才出现这样的低功耗编译器
你可能想问,FinFET 工艺都量产这么多年了,为什么现在才有人把低功耗 Memory Compiler 放到这个节点上?这里有一个技术背景层面的原因。FinFET 工艺相比平面工艺,漏电和短沟道效应确实改善了,但存储器编译器要做到低电压,不是简单把标准单元库换个工艺就能实现。低电压下 SRAM 的读写辅助电路、位线分割策略、保持电压管理、温度补偿机制,都需要针对工艺重新设计和验证。16nm FinFET 节点上做这件事,意味着存储编译器不能再走“通用参数化”的老路,而是要把低电压优化作为一等公民来设计。
1.3 对设计团队来说,这个方案补上了什么缺口
补上的是“标准编译器性能不够好”和“定制存储成本太高”之间的中间地带。传统 Foundry 提供的 Memory Compiler 设计偏保守,工作电压范围一般锁在正常操作区间,低电压下的时序和良率余量不一定够。定制 SRAM 性能和功耗确实好,但周期长、费用高、风险集中,小团队根本玩不动。sureCore 这类低功耗编译器,则直接把“低电压”作为核心卖点,设计师不需要理解每一级电路怎么改,只要在配置阶段告诉它工作电压范围、目标频率、功耗优化方向,它就会生成相应的版本。对团队来说,相当于拿编译器级别的成本,买到接近定制方案的低压能力。
2. Memory Compiler 是怎么工作的:一个参数化拼装存储器的过程
2.1 通俗理解:像点菜一样配置存储器
Memory Compiler 的工作方式,可以类比成点菜。你告诉它要几个人吃、什么口味偏好、要不要忌口,后厨就会给你配出一桌菜来。好的编译器生成的电路是经过反复验证的,而不是临时拼凑。对存储阵列来说,主要输入参数包括存储深度(depth)、字线宽度(word width)、列复用率(column mux)、bank 数、冗余行/列、ECC 是否开启、是否有 BIST、功耗模式、工作电压范围等。编译器根据这些参数自动切分存储阵列,生成外围电路,然后完成版图布局布线和特征化。
2.2 生成的文件分别给谁用
这个点很多初次接触编译器的同学容易搞混。编译器交付的一堆文件不是随便看看的,每一个都有明确用途。GDS 和 LEF 是给物理实现用的,GDS 是最终版图,LEF 是抽象逻辑视图,方便布局布线工具管理。Liberty 文件(.lib)是给时序和功耗分析用的,里面有 setup、hold、power、leakage 等信息。Verilog 行为模型给前端仿真和 FPGA 验证用。某些编译器还会提供 SPICE 网表,方便做更精细的功耗和可靠性和分析。千万别只盯着 GDS,时序库文件才是决定你的 SoC 能不能跑出目标频率的关键。
2.3 配置参数时的几个关键决策点
我见过不少项目第一次用低功耗编译器,配置阶段就埋了坑。第一个坑是目标电压范围设置得过宽。编译器会为电压范围做优化,你填一个 0.5V 到 0.9V 的范围,它内部的辅助电路和单元选择就会偏保守,面积和功耗都会增大。如果实际只需要 0.6V 到 0.8V,应该按真实需求填。第二个坑是 column mux 的选择。column mux 越高,IO 电路复用越多,面积越小,但访问路径变长,速度变慢。低电压下本来时序就紧张,mux 选太高很容易出现 setup 违例。第三个坑是冗余和 ECC 的问题。先进工艺下不做 redundancy 良率会很难看,但冗余行/列会带来面积开销,ECC 又会在读延迟上增加一个周期。这些都是性能、面积、功耗、良率之间的权衡,建议在项目早期就把规格定清楚,别等版图阶段再返工。
3. 16nm FinFET 工艺下做低功耗存储,到底难在哪
3.1 FinFET 结构看着漂亮,但低压 SRAM 的麻烦一点没少
说到 16nm FinFET,首先绕不开的就是 FinFET 结构本身。网上搜 finfet 结构示意图会看到经典的三维画法:衬底上立起一片片薄薄的硅鳍(fin),源漏位于鳍的两端,栅极像一座桥横跨鳍,并从上、左、右三个方向把沟道包住。这种结构解决了平面工艺在 28nm 以下遇到的短沟道效应,亚阈值漏电大幅下降,沟道控制能力也更强。打个比方,平面工艺的栅极像一条铺在平地上的路,路面越窄越难挡住两侧的水。FinFET 相当于把路修成了三面环绕的隧道,即使路面窄了很多,依然能有效控住水流。这也是 FinFET 工艺在先进节点成为主流的原因。
但 FinFET 对 SRAM 来说并不全是好消息。单元晶体管的驱动能力按“根”数离散化,一颗 FinFET 的鳍数只能取整数。这就导致单元尺寸和驱动强度无法像平面工艺那样连续调节,工艺波动加剧,单元的阈值电压失配更严重。低压下,SRAM 单元对失配非常敏感,读写噪声容限变小,极限电压(Vmin)被显著抬高。换句话说,FinFET 降低了漏电,却让“往低压走”这件事变得更难。
3.2 Vmin 才是低功耗 SRAM 的真正战场
很多低功耗存储的宣传册上,最显眼的指标是 Vddmin,也就是单元能够可靠工作的最低电压。这个值每降低 0.1V,动态功耗大致能降 20% 左右,因为动态功耗和电压平方成正比。公式很简单:P_dynamic = α C VDD² f,电压从 0.8V 降到 0.65V,功耗接近打六折。所以各家都拼命把 Vmin 往下压。但 Vmin 不是想压就能压的,它受读稳定性、写能力、保持稳定性三者共同约束,还要考虑工艺角、温度、老化的影响。到了 16nm FinFET 阶段,单靠工艺本身的进步已经压不动 Vmin 了,必须靠电路设计手段来突破,比如写辅助、读辅助、读端口分离等技术。
3.3 低压下的时序和温度效应更加复杂
低压下还有一个隐蔽的坑:时序变化呈非线性放大。电压越低,晶体管的过驱动电压越小,延迟随电压变化越敏感。同一颗芯片上,0.6V 时的 SS corner 延迟可能是 0.8V 时的两倍以上。配合 FinFET 工艺的温度反转效应,低电压低温下时序反而更差,这会让传统基于 SS/FF 角做的时序收敛策略失效。低功耗编译器如果只在典型电压点做特征化,没有覆盖低电压角的建模,集成到 SoC 里之后必然出现莫名其妙的时序违例。这也是为什么选编译器时一定得确认 Liberty 文件覆盖了目标低电压角和温度范围。
4. 低功耗存储器编译器内部的核心技术细节
4.1 读写辅助电路:突破 Vmin 的关键武器
低电压下 SRAM 单元读写困难,靠的就是辅助电路“帮一把”。写辅助的常见思路是负位线写辅助,在写操作瞬间把位线压到地以下,让存储节点更容易翻转。还有 wordline 过驱动,给字线一个高于 VDD 的脉冲,增强写入能力。读辅助则偏向读端口隔离,很多低压 SRAM 单元改用 8T 结构,把读端口从存储节点上独立出来,读操作不再直接扰动存储状态,从而降低 Vmin。这些技术在定制 SRAM 里已经用得很普遍,但要放进编译器并保证各种配置下的稳定性,工程难度会大很多。对于一家做低功耗存储编译器的公司来说,这部分积累才是真正的护城河。
4.2 位线分割和层次化设计让低压读写更快
位线是 SRAM 里最大的寄生电容来源之一。低位线越长,读操作时位线放电越慢,低电压下这个问题被进一步放大。低功耗编译器通常会采用位线分割(bitline splitting)技术,把长位线切成若干段,每段通过局部读电路连接到位线。这样读操作只对局部段放电,位线电容大幅下降,读速度和电压余量都提高了。对应的代价是多一层局部 IO 电路,面积会增加。但低电压下这点面积换来的是可靠的读时序,整体权衡下来非常划算。编译器能做到什么级别,很大程度上取决于它在不同容量配置下如何切分位线。
4.3 保持模式、电压域管理与动态电压调节
低功耗设计的重点从来不只是工作状态,更是睡眠和保持状态。编译器级别需要考虑支持 retention 模式,也就是把电压降到保持电压,单元里的数据依然不丢。sureCore 这类方案通常会提供宽范围电压支持,让 SoC 可以通过 DVFS 动态调节电压。此时编译器生成的存储还必须包含或者兼容隔离单元、电平转换单元,不然多个电压域之间互相咬合会出很多可靠性问题。我评估这类编译器时,都会问一个问题:保持电压最低能做到多少,从保持电压切换回正常工作电压需要多少个周期,唤醒路径的时序是否可控。这三个问题能回答清楚,才说明方案是成熟的。
4.4 单元库与工艺适配背后的工作量
16nm FinFET 的编译器和平面工艺编译器不同,它需要针对具体 foundry 的 PDK 重新设计 bitcell、辅助电路和特征化环境。查过 FinFET 结构示意的人会注意到,FinFET 单元的引出、鳍共享、栅极切断规则都和平面工艺完全不同,版图层面约束特别多。所以这类编译器通常都是按具体工厂和工艺节点绑定的,不是拿一套软核到处移植。项目选型时要注意确认你打算用的代工厂和具体工艺版本是不是在支持列表里。
5. 什么样的场景适合用这类低功耗存储编译器
5.1 典型应用:可穿戴、IoT、电池供电设备
最典型的场景是电池供电且长期处于待机状态的产品。比如智能手表、TWS 耳机、智能传感器、助听器、医疗贴片这类设备,处理器大部分时间都在睡觉,只有传感器数据到了才醒来处理一小会儿,然后又睡。这时 SRAM 的保持功耗往往是整机待机功耗的主要来源之一。低功耗编译器的价值在于把保持电压压低、把保持状态下的漏电降下来,配上快速唤醒策略,待机电流可以做到非常小。另一个应用方向是能量收集系统,供电电压本身很低,存储阵列必须能在 0.5V 甚至更低电压下工作,这种需求只有低压优化过的编译器能承接。
5.2 和 Foundry 编译器、定制 SRAM 的横向对比
为了说清楚定位,我列一张表对比一下三种常见方案:
| 方案 | 工作电压范围 | 面积/性能 | 成本周期 | 适用场景 |
|---|---|---|---|---|
| Foundry 标准编译器 | 较窄,通常覆盖典型电压 | 中等,优化保守 | 低,随工艺 PDK 提供 | 常规手机 SoC,不太在意极致功耗的模块 |
| 第三方低功耗编译器 | 宽,覆盖低电压和保持模式 | 优于标准编译器,接近定制 | 中,需单独授权和评估 | 低功耗 IoT、可穿戴、边缘设备 |
| 全定制 SRAM IP | 可以做到极限低电压 | 面积、功耗、性能最优 | 极高,周期长 | 对功耗和面积极度敏感的核心模块 |
从表格能看出,低功耗编译器的定位就是“花中等的钱,拿到接近定制的低功耗能力”。如果你的芯片对存储功耗不敏感,用标准编译器就够了。如果整机功耗是核心卖点,比如 TWS 耳机要撑一周使用,那低功耗编译器带来的收益就非常明显。
5.3 选型时的检查清单
我一般会建议团队在选型时按下面几条过滤:第一,目标工作电压范围是否覆盖你们 DVFS 的最低档位。第二,保持电压和唤醒功耗指标是否明确给出,是否有实测或特征化数据支撑。第三,Liberty 库覆盖的 PVT 角是否完整,特别是低电压低温角。第四,编译器生成的版图是否支持你们后端的金属层和布线要求。第五,是否有配套的 BIST、修复、ECC 方案,先进工艺没有这些,良率和可靠性很难保证。最后一条,授权模式和使用年限是不是跟产品生命周期匹配。
6. 集成过程中我实际踩过的坑和排查思路
6.1 低电压下读时序余量不足
低功耗编译器导入项目后,第一个容易翻车的地方是低电压读时序。现象往往是芯片跑到低电压档位时,读出来的数据偶发错误,或者静态时序分析在低电压角报出一堆 setup 违例。排查思路通常是先看有没有编译器选项没有开启 read assist。如果开启了还是不够,那就是配置中的 column mux 选太高,位线太长导致读路径过慢。还有一个被忽略的问题是位线预充电时间的设置,低电压下预充不充分,读操作大概率出错。我处理过类似问题,最后是降低 mux、打开 read assist,并且把预充电时序调整到合适位置才解决。
6.2 保持模式下数据丢失
数据保持模式和正常工作之间的切换,是一个非常隐蔽的坑。低功耗编译器的保持电压通常有一个范围,但温度会显著影响保持能力。低温时数据保持相对容易,高温时漏电变大,保持电压需要上调。另一个问题是唤醒路径上的时序,如果从保持电压恢复到正常工作电压时,没有等电压稳定就发起读写操作,轻则丢数据,重则闩锁。设计上需要加低电压检测和复位逻辑,保证在电压建立完成之前,存储阵列不接收读写请求。这个细节,很多编译器 datasheet 里写得不够醒目,但实际量产时影响很大。
6.3 功耗数据评估不准
有时候仿真出来的功耗和实测差异很大,问题可能不在编译器,而在使用方式。低电压下信号 transition 变慢,cell 的短路功耗占比上升,如果用典型的 transition 时间做功耗仿真,数值会偏低。另一个容易被低估的是唤醒瞬间的电流冲击。大容量 SRAM 从保持模式切回工作模式时,内部节点和位线重新初始化,瞬时电流可能很大,需要足够的去耦电容和电源供电能力。评估低功耗存储方案时,不要只看平均待机电流,要把唤醒峰值电流也纳入电源设计裕量。
6.4 实用建议:先做一个小模块验证
如果团队第一次用这类低功耗编译器,我强烈建议先在某一个不太关键的子模块上试水,而不是直接替换核心存储。用实际的 workload 跑一轮功耗仿真和时序收敛,确认编译器生成的库数据与真实行为一致,再逐步推开。还可以让编译器生成同一容量的多个配置版本,对比面积、功耗和时序,选择最匹配项目需求的那一版。这个验证过程虽然多花几周时间,但能省掉后续流片回来之后大量排查时间。
7. 一些自己的体会
sureCore 这次在 16nm FinFET 上推出低功耗 Memory Compiler,背后的技术积累和趋势信号都很明确:先进工艺节点的低功耗存储,已经从“定制作坊”走向“可配置量产”。我个人在实际评估这类方案时的体会是,不要被宣传的 Vmin 数字吸引住就急着做决策,重点要看整个电压-温度区间内读写的稳定性、保持功耗、唤醒路径设计,以及编译器的工艺适应度。多问几个为什么,多跑几个配置版本,用数据说话,比什么都稳。