1. 为什么高算力芯片必须认真对待片上测温
做芯片的人大概都有这种感觉:流片回来,上电测试,跑起来没问题,一切都很开心。但真正到了性能压测阶段,问题往往不是出现在逻辑功能上,而是出现在热上面。频率稍微拉高一点,温度立刻飙上去;温度一高,漏电变大,频率反而上不去;本来设计目标是在高频下运行的模块,实际跑起来缩了水。高算力芯片尤其如此,算力越强,功耗密度越高,片上发热就越集中在某些小区域里。片上温度监控和热传感器布局就是在这种背景下被推到台前的。
这个项目解决的痛点很直接:在高算力芯片设计阶段,如何安放温度传感器,让芯片在跑真实负载的时候能够准确感知"哪里最热""热到什么程度",从而让动态调频调压(DVFS)、过温保护(thermal throttle)、任务调度这类机制能够及时响应。换句话说,热传感器不是随便放几个就算完事,放的位置、数量、类型、校准方式都直接影响热管理策略的有效性。
这篇内容适合三类人看:一类是做SoC架构、做时钟功耗域设计的工程师,一类是做芯片验证和板级调试的硬件工程师,还有一类是跑系统软件、做thermal管理策略的底层软件工程师。当然,如果你是研究生,正在做芯片相关的课题,这篇文章也能帮你避开不少我踩过的坑。
先说说这个项目的整体背景。芯片设计其实有两种不同的热视角:一种是封装级热设计,看的是整颗芯片的结温、壳温,用的是商业软件做仿真,关注的是散热器、TIM材料、气流方案;另一种就是本项目的视角——片上热监控,关注的是芯片内部不同区域的实时温度差异。前一种决定散热方案的边界,后一种决定芯片在工作时能不能"聪明地"保护自己。高算力芯片往往是后一种需求更迫切,因为你不可能永远靠硬件冗余去扛热,软件侧的动态管理必须建立在准确的温度感知之上。
这里有一个很关键的概念需要先理清:片上温度传感器读到的温度和封装级结温是两个概念。结温是整个芯片热状态的一个等效值,而片上传感器读到的是局部硅片表面的真实温度。在做热管理策略时,如果只依赖结温估算,误差非常大。举个具体的例子,一颗多核处理器,如果所有核都在跑高负载,结温可能显示95℃,但某个特定的向量计算单元可能已经到105℃了。如果只按结温去调控,这个单元就会过热点,导致局部加速老化甚至功能错误。所以,传感器布局的第一目标是"找到真实的热点位置",第二目标是"用尽量少的传感器覆盖尽量多的热点区域"。
2. 传感器类型和布局策略是绑在一起选的
2.1 片上测温的几种主流手段
谈布局之前,先花一点篇幅把传感器类型聊清楚。因为布局策略和你选的传感器类型强相关,不同的传感器有不同的面积、精度、功耗和物理位置约束,不能简单地混为一谈。
常见的片上温度传感器方案有三类。第一类是基于寄生BJT的温敏器件,原理是双极晶体管的基极-发射极电压Vbe与绝对温度近似成线性关系,通过将一个PTAT(与绝对温度成正比)电流源和参考电压做比较,再用Σ-Δ ADC把电压量化为数字码,就可以获得温度读数。这类方案精度高,在-40℃到125℃范围内可以做到±1℃以内的误差,但缺点是面积大、功耗较高,需要比较多的校准时间。
第二类是基于MOS管阈值电压或迁移率温度特性的传感器。通常是利用两个不同偏置条件下的MOS管电流比值与温度的关系来测温。这类方案比BJT方案面积小,功耗低,但精度一般只能做到±3℃~±5℃。在数字芯片里实现比较灵活,可以直接利用标准单元库里的基础器件来做。
第三类是环形振荡器(Ring Oscillator,RO)测温。原理是CMOS反相器链的传播延迟随温度升高而变慢,通过测量振荡频率变化来推算温度。这类传感器面积最小,响应速度快,可以实现"多点密集部署",但精度与电源电压相关性很强,需要额外的电压补偿,校准也更麻烦。我见过一些高算力芯片方案里,在热点区域周围动态地把真实热点附近的RO传感器与精度较高的BJT传感器做交叉校准,效果不错。
选型上没有绝对的标准答案。我的个人看法是:用于DVFS闭环控制的传感器,精度要放在第一位,推荐用BJT方案;用于热点位置感知和任务迁移决策的传感器,密度更重要,RO方案更合适。实际项目里往往是混合部署,在关键热点区域放高精度传感器,在大范围内密集放低成本传感器做温度地图。
2.2 布局问题的本质是"有限传感器+未知热点"的博弈
如果你去读一些相关文献,会发现传感器布局问题常常被建模成优化问题,目标函数可能是在所有可能功耗分布下最大化最坏情况下的热点检测概率,或者是最大化传感器与热点之间的空间相关性。但从工程实践的角度看,这个问题本质上是这么一回事:传感器的数量不可能太多,面积和功耗都有预算限制;热点的位置和强度又随负载模式动态变化;你要用有限的信息去做全局决策。
高算力芯片的热源并不是均匀分布的。以一颗典型的多核SoC为例,CPU集群、GPU集群、NPU/加速器、内存控制器、SerDes PHY、电源管理单元,这些都是明显的热源。但在真实工作负载下,热点的位置可能远超你的预期。某次做体验测试时,我们更新了某加速器固件,结果是加速器本身温度没怎么变化,反而是它相邻的高速缓存控制器温度飙了十几度——原因是固件改变了访存模式,缓存控制器的工作强度变大,而它的物理位置离主热传感器比较远,之前设计时根本没有考虑过这个区域会有热点。
这就是传感器布局的核心矛盾:你无法在设计阶段枚举所有可能的热点位置,因为负载模式、软件调度、甚至工艺角的差异都会改变热分布。你只能通过合理的布局策略,让传感器覆盖那些"大概率热"、且"热起来会出问题"的区域。
2.3 布局设计的关键策略
基于实际项目经验,我总结出几个布局策略,按优先级排序:
首先,芯片全局热点区域必须覆盖。哪些是全局热点?CPU/GPU计算单元的内部,尤其是寄存器堆旁边、浮点运算单元附近;内存控制器;高速接口的模拟前端。这些位置在绝大多数负载下都会热,是热管理的核心监控对象。
其次,功耗密度突变区域要额外关注。比如大小核切换的电源域边界、时钟网格上靠近时钟缓冲树的位置、局部电源门控的恢复区域。这些区域在特定操作模式下会有瞬时功耗尖峰,温度响应快但消退也快,需要响应速度快的传感器去捕捉。
再次,布局要留冗余和对称性。芯片实际工作时,热流方向的微小偏差、封装基板的热阻不均匀,都会导致原本对称的布局出现测温偏差。所以,在关键的对称功能块上,最好还是分别放传感器,不要试图用"半边代表全局"的省料思路。
最后,传感器周围要有净空区。很多新手容易忽略这一点:传感器本身测量的是它所在位置附近的硅温,但它周围的金属布线和有源器件会干扰它的读数——金属层会把热量导走,附近有源器件的自热会让读数虚高。设计规则上一般要求传感器周围留出一定距离的"无源区",这个距离根据工艺不同有差异,但基本原则是,传感器1到2微米范围内不应该有任何发热单元。
3. 逆温现象:最容易忽视的布局噩梦
逆温(temperature inversion)这个词,做数字后端的人肯定不陌生,指的是时序路径上的延时随温度变化出现反向,即低温下时序反而变差。但在热传感器布局这个场景里,逆温现象有完全不同的另一层含义,却是项目里最容易踩的坑。
片上温度分布和功耗分布并不总是正相关的。正常情况下,功耗高的位置温度高,传感器布局只要跟着功耗地图走就行。但在某些特定的电压-频率组合下,芯片的漏电功耗占总功耗的比例会显著上升,而漏电功耗本身是温度的正反馈函数——某个区域初始温度稍高,漏电就大,漏电大又进一步提高局部温度,形成正反馈。这种正反馈会导致热点位置发生偏移,甚至可能出现在逻辑上"不太可能热"的区域。
还有一个更微妙的现象:在低电压、低频率的轻负载状态下,芯片的动态功耗占比下降,漏电功耗占比上升,而漏电功耗的分布与阈值电压的分布强相关,受工艺偏差影响极大。这就意味着,同一颗芯片在不同电压条件下运行时,真实的热点位置可能是漂移的,而且不同工艺角下的漂移方向都不一样。
这对传感器布局的影响是深远的。如果你只在动态功耗高的区域放了传感器,在低电压模式下,热点跑到别的地方去,你在该区域内没有任何感知,热管理策略就成了睁眼瞎。我们当时在方案上专门做了冗余设计,在漏电敏感区域也部署了低成本的RO传感器。虽然这些区域在常规负载下永远用不上,但它们的价值恰恰体现在那些"不常规"的工作模式里。
怎么识别漏电敏感区域?一个比较实用的方法是在设计阶段做漏电功耗地图扫描。在物理实现完成之后,用功耗分析工具,把动态功耗置零,只保留漏电功耗,看漏电功耗密度高的区域分布在哪里。通常这些区域是芯片角落里那些阈值电压偏低的标准单元集群,或者是SRAM阵列,因为SRAM的漏电路径多。把这些区域与动态功耗热点区域取并集,才是传感器布局应该覆盖的完整集合。
4. 实操过程:从功耗热点分析到传感器布局落位
4.1 功耗与热联合仿真流程
传感器布局不是拍脑袋定的,需要数据和流程支撑。我们项目里实际操作下来,完整流程大致分为六步。
第一步,功耗地图提取。用RTL门级网表,配合典型工作负载的仿真激励,跑功耗分析。这一步的关键是负载要选得准。不同负载下功耗地图差异极大,至少要准备三类负载:峰值性能负载、典型混合负载、低功耗待机负载。分别在三种负载下提取功耗分布,再取最大值做热点识别。
第二步,热模型构建。把功耗地图喂给热仿真工具,建立芯片-封装-散热器的完整热模型。这一阶段需要输入芯片的厚度、各层金属的导热率、TSV/凸点的位置与热阻、封装基板的层叠结构、TIM材料的导热系数、散热器的热阻等。如果你的芯片还没有具体封装方案的细节,可以参考同工艺、同定位芯片的典型值做第一版估算,后续封装方案确定后再更新。
第三步,热点区域识别。从热仿真结果里提取稳态温度分布,标记超过目标阈值的区域。同时提取瞬态温度响应,看哪些区域的温度上升速率最快。稳态热点和瞬态热点往往是不同的。对于DVFS控制来说,瞬态响应快的区域更需要部署响应速度快的传感器。
第四步,传感器候选位置生成。将热点区域与物理设计中的实际单元位置对应起来,在标准单元摆放密度高、供电网络完整、且满足净空要求的位置,生成传感器候选点列表。
第五步,布局优化。如果候选点数量超过传感器预算,做取舍。这一步可以用一个简单的贪心算法或者手动决策:优先保留覆盖多个热点候选点的传感器位置;优先保留位于温度梯度陡峭区域的传感器——因为梯度陡峭意味着很小的空间距离温差很大,一个传感器可以代表的范围很小,策略上需要额外的传感器来加密。反之,如果某个热点区域温度梯度很平缓,一个传感器可以覆盖很大范围,就可以少放。
第六步,布局后验证。把最终的传感器布局放回热仿真模型,重新检查在所有参考负载下,传感器读数和真实热点温度之间的误差是否在可接受范围内。这一步也可以顺带评估传感器故障时的鲁棒性,比如某个传感器失效后,最近邻传感器的读数与真实值的偏差会不会超过安全阈值。
4.2 传感器布局区域的选择心法
下面这张表是我在实际项目中常用的布局位置优先级参考,针对典型的高算力SoC。注意,这不是标准答案,而是一个思考框架,具体项目要根据实际的功耗地图来调整。
需要说明的是,表中的"优先级"反映的是传感器部署的先后主次,而不是说低优先级区域可以完全不考虑。高算力芯片的面积预算充分时,RO传感器做多点部署的成本很低,可以适度放一些到低优先级位置,作为扩展温度地图的辅助数据点。
4.3 监控逻辑与校准方案
传感器布下去,只是第一步。后续的监控逻辑和校准方案才是让数据真正发挥价值的关键。
从传感器原始读数到最终用于控制决策的温度值,中间至少经过两级处理。第一级是原始码值到温度的转换,依赖传感器本身的传递函数和校准参数;第二级是多个传感器读数的融合处理,比如插值得到完整温度地图,或者用加权平均估计"等效热点温度"作为核心热管理依据。
校准是一个特别容易被低估的环节。片上传感器的工艺偏差很大,不校准的BJT传感器精度可能只有±5℃,校准之后才能到±1℃以内。校准通常分两步:出厂测试阶段的静态校准,以及运行阶段的动态校准。出厂静态校准是在晶圆测试和封装测试阶段,通过外部温控设备改变芯片温度,记录传感器的输出码,拟合出每个传感器的校准系数。动态校准则是利用芯片内部的参考温度源,比如片上加热电阻和参考传感器组合,周期性校验传感器的漂移状态。
有些项目还会加一轮"系统级校准",把片上传感器的读数与外部红外热像仪拍摄的芯片表面温度做对比,修正封装和测试环境引入的偏差。这个方法精度很高,但只适用于开发调试阶段,量产产线上没有条件逐颗做红外标定。这种情况下,通常是在量产测试中抽测若干样本,建立统计模型,把校准参数按批次层面做统一补偿。
4.4 监控响应的工程权衡
热传感器的响应延迟也是一个值得展开的工程权衡点。高算力芯片在负载突变时,热点区域的温度变化速率可以达到每毫秒几摄氏度。如果传感器响应太慢,监控系统看到的温度变化会有明显的滞后,DVFS调度就会做过冲或者欠调。
传感器的响应速度主要由热时间常数决定,它取决于传感器自身的物理尺寸、周边材料的热容和热导。RO传感器因为可以做得非常紧凑,热时间常数小,响应快,适合做高频采样;BJT传感器因为包含模拟电路和ADC转换,响应时间在微秒到毫秒量级,适合做中低频采样。实际方案中,可以把RO传感器的输出做高频快速中断触发,BJT传感器的输出做低频精确校准。
某次我们在流片实测中发现一个有意思的现象:两个相邻的RO传感器放在同一个热点附近,一个报告温度在快速上升,另一个却几乎纹丝不动。排查原因是其中一个RO传感器所在的位置被时钟网络的金属屏蔽层完全覆盖,金属层的高导热性让它受热点加热的延迟明显变大。后来布局时专门在净空区设计上做了改进,避免传感器上方有大面积金属覆盖。这类问题在仿真阶段不容易暴露,但实测中会实实在在影响控制效果。
5. 常见问题与排查技巧实录
这个项目做了几个迭代之后,积累了不少常见的坑。有些问题在文档和论文里不常写,但对实际项目很有价值,我挑典型的几个分享出来。
问题一:传感器读数整体偏高或偏低,无法对齐封装测试的参考温度。
排查方向:第一,检查传感器供电电压是否和参考电压一致,供电偏差对BJT传感器的影响非常明显;第二,检查校准系数的存储和读取流程,确认软件侧用的校准参数与实测硬件配置一致;第三,确认芯片测试时封装的散热条件与仿真建模时的假设是否一致。如果芯片贴着测试座而没有粘TIM和散热器,传感器的读数会比正常散热条件高很多,这会误导后续的阈值标定。
问题二:不同传感器之间的读数差异很大,但在仿真中不应该有这么大差异。
排查方向:优先怀疑传感器周边布局的差异。有些传感器附近有密集的电源门控单元,门控开关瞬间的电流尖峰会在传感器信号线上耦合噪声,导致ADC转换结果异常。对策是加强传感器模拟电源和地线的隔离,或者给传感器的输出信号加数字滤波。另外也可以用多次采样取中值的方式降低偶发噪声的影响。
问题三:某个传感器读数长时间不变,像是"卡死"了。
这种情况一般是传感器本身进入了错误的偏置状态。BJT传感器在某些电源上电顺序异常时,内部电流源可能没有建立到正确的偏置点,输出码一直停在某个固定值。排查时先看该传感器对应的控制寄存器是否被错误配置为关闭状态,然后看供电是否正常,最后看该传感器输出引脚的电平是否被其他信号短路。如果都不是,那就是需要重新初始化传感器的寄存器序列,在固件里加入传感器自检逻辑,读值长期不变时主动触发复位。
问题四:DVFS策略在过热保护时动作太频繁,性能下降明显。
这类问题不是传感器本身的问题,而是监控逻辑的阈值设置问题。热点区域的温度波动是正常的,如果阈值设置得太靠近工作温度上限,一点小波动就会触发降频。我的建议是设置两级阈值:预警阈值降频,紧急阈值停机,同时加入滞回控制——也就是温度降到比触发阈值低若干度之后才恢复原来的频率。这个滞回区间一般设置成5~10℃,既能避免频繁切换,又不会让芯片持续处于过热边缘。
问题五:低功耗模式下传感器自身功耗占比过大。
高算力芯片在低功耗待机模式下,传感器的供电和采样频率需要动态调整。如果所有传感器都保持全速采样,光传感器功耗就能占到待机功耗的很大比例。合理方案是把传感器分成两组:一组保持低频采样,维持基础温度监控;另一组完全断电,等到功耗状态切换前再快速上电。这需要在设计阶段给传感器做好独立的电源域划分。
6. 工具链选型与团队协作建议
传感器布局这项工作,横跨架构设计、物理实现、模拟设计、系统软件几个团队。工具链的选型直接影响流程效率和结果可靠性。
热仿真工具方面,商业工具和开源工具各有优势。商业工具精度高,芯片-封装-散热器一体化的模型接口比较完善,缺点是license成本和模型准备的工作量比较大。开源工具灵活度高,可以实现自定义的传感器布局优化算法,但热模型精度依赖用户对模型参数的把握。
功耗分析工具相对成熟,主要挑战在于输入激励的质量。如果网表和激励向量不够代表性,功耗地图就会失真,后续所有的热分析和布局决策都建立在错误的地基上。我们项目里专门花时间做过激励向量的质量审查,确保向量覆盖了典型的峰值场景而非只是理论极限场景——很多团队会用极限场景去规划传感器数量,结果传感器数量虚高,面积浪费严重。
传感器本身的电路设计通常是模拟设计团队负责,但布局位置往往由数字后端团队决定。这两个团队的沟通非常关键。模拟团队倾向把传感器放在电源干净、干扰小的位置,数字后端团队则倾向于把传感器放在逻辑密集的高温区域。最好的工作模式是让模拟团队先给出传感器的物理约束清单,数字后端在满足约束的前提下按功耗地图去选位。如果反过来,位置先定了,再要求模拟团队去适应,往往要付出额外的设计迭代代价。
系统软件团队的需求也建议提前收集。比如,实时操作系统里跑thermal daemon需要知道传感器的布局拓扑、传感器的量程和精度、读传感器的寄存器映射。这些信息最好在设计阶段就定好文档模板,否则等芯片回来了再补文档,软件团队只能对着寄存器地址猜语义。
我见过一个比较成功的项目实践:热管理团队在芯片设计阶段就建立了一个"热管理敏捷仿真环境",把传感器布局方案、热模型和系统软件策略仿真放在同一个框架里,每次更新传感器布局方案,就能直接在虚拟平台上跑DVFS策略验证。这样做的效率提升非常明显——布局方案在流片前就被反复验证过,回来之后的调试周期大幅缩短。如果你的团队资源允许,非常建议在项目早期就把这套框架搭起来,哪怕第一版粗糙一点,后面迭代起来受益是巨大的。
7. 一些你不能偷懒的验证环节
最后聊几个在流片验证阶段容易被偷懒省略,但对温度监控系统可靠性至关重要的测试项目。
温度梯度极限测试:芯片正常工况下温度梯度相对温和,但在进入和退出低功耗模式的瞬间,片上某些区域可能出现极高的瞬态温度梯度。测试时要专门构造这类场景,在短时间内反复切换重负载与深度睡眠,观察传感器读数的跟踪能力和热管理策略的响应是否及时。这类测试暴露的问题往往是传感器布局中的"盲区"——比如两个传感器之间的间隙过大,瞬态热点恰好出现在间隙处,控制策略完全没有感知。
传感器冗余切换测试:高算力芯片对可靠性要求高,个别传感器失效时系统应该能自动切换到备选传感器。测试时要人为模拟传感器失效场景,比如通过JTAG强制将某个传感器的读数置为无效,验证固件能否及时检测并切换数据源。这个测试看起来简单,但实际做的时候经常发现固件里对传感器故障状态的检测逻辑不完整,切换后对插值算法的数据源更新也有遗漏。
跨温区精度验证:片上传感器在不同温度点的精度表现不是线性的。低温区和高温区的误差特征不同,校准系数在中间温度区间表现良好,但在两端可能明显偏离。验证时至少覆盖-20℃、0℃、25℃、50℃、85℃、105℃这几个典型温度点,用高精度外部温控设备做对比标定。
回头说说这个项目的价值。热传感器布局在设计阶段看起来只是一堆摆放位置的选择,但它实际决定了芯片最终能够实现多激进的性能指标。传感器布局合理,DVFS可以大胆地把运行点推到温度上限附近,因为你知道真实热点在哪里、温度状态什么时候接近危险;传感器布局不合理,你就只能保守地留足温度余量,让芯片性能白白损失。尤其在高算力竞争激烈的领域,几个百分点的持续性能差异就足以决定产品在市场上的位置。
如果让我给刚启动类似项目的团队一个建议,那就是:尽早构建起"功耗地图+热模型+传感器策略"的可迭代框架,然后以此为基础,每做一次物理设计版本更新,就同步更新温度传感器的布局方案。不要等到物理设计快冻结了才想起来安排传感器布局——那时候可以调整的空间已经很小了。