本节摘要:片上存储不是“再声明一个数组”。SRAM 宏有固定外形、电源轨、端口时序和稳定性契约;DRAM 式结构靠刷新续命。逻辑门数量可以涨很快,访问延迟和容量涨得慢,这就是内存墙在芯片内部的样子。本节从 6T 单元的静噪容限讲到宏在 floorplan 上怎么放,才能让数据通路真的吃得饱。
阅读完本节,你应当能够:
原文把存储器写成时空织机:计算是时间上的逻辑跃迁,通信是空间上的搬运,存储让二者能锚定。稳定性问题是:一个微小物理态,如何在热噪声、漏电、电压波动下保持可区分。
6T SRAM 是两个反相器交叉耦合,外加一对传输管。它不是天然稳如磐石,而是在工艺角、温度、电压立方体里漂移的平衡。静态噪声容限来自电压传输曲线交点能内切的最大方边。驱动管、负载管、传输管三组尺寸互相拆台:负载加宽抬高电平却加漏电;传输管加宽好写却容易读翻转。阈值漂几十到上百毫伏量级,就能让高温低压下的裕量只剩薄薄一层。先进节点单元面积不再按逻辑密度同比缩小,因为要给虚拟栅、保护环、偏置管留位置。稳定性靠结构增强,不靠“把管子画得更大一点”一句空话。
DRAM 的 1T1C 把稳定性交给时间:电容上的电荷按泄漏时间常数逃走,必须在刷新周期内全体行被救一次。温度升高泄漏加快,刷新要更勤,带宽被刷新吃掉。隐藏刷新、自刷新、温度补偿刷新,是把“存在”做成运维协议。片上若集成 DRAM 类宏,RTL 必须允许刷新气泡,不能当 SRAM 用。
存储器编译器吐出的是硬核:GDS、LEF、Liberty、电源引脚位置都冻了。你不能“稍微旋转一下电源轨”。集成像装配铸件:对准针脚、电压域、周边隔离。软核式的数组 reg [31:0] mem [0:1023]; 在 FPGA 里可能进块 RAM,在 ASIC 里可能被综合成触发器堆,面积和漏电爆炸。需要真正 SRAM 时,要实例化编译器模型,按它的建立保持和时钟到数据来打拍。
| 形态 | 谁决定坐标 | 前端怎么写 | 风险 |
|---|---|---|---|
| 触发器堆 | 放置工具 | 普通数组 | 大容量时面积功耗崩 |
| SRAM 宏 | 编译器冻版图 | 实例化黑盒 | 通道切断、端口时序 |
| ROM/OTP | 冻版图 | 内容文件 | 编程与测试路径 |
| 外接 DRAM | 封装与板 | 控制器+PHY | 刷新与训练 |
原文给过系统级悖论:逻辑门每代涨得快,片上容量近线性,访问延迟几十年只改善一个数量级而处理器频率改善两个数量级。所以架构要叠 SRAM 层次:靠近执行的小而快,远离的大而慢。物理上,小宏可以散落在数据通路旁;大宏必须在布图阶段沿边或成列放置,中间留金属运河。把 32 个大宏扔进核心中央,时钟树会绕湖,总线会爬坡。

读端口时序:地址与控制必须在沿前稳定,数据在沿后若干时间才合法。RTL 若当成异步 ROM 组合读,STA 会看到穿过宏的超长路径,或者仿真与硅不一致。写合并、字节使能、时钟门控都必须用宏支持的引脚,不要在外面用组合去“模拟字节写”还把时序搞脏。
⚠️ 常见坑:把大数组写进 RTL 指望综合推断 SRAM,结果变成触发器海洋,放置密度与漏电一起爆。
💡 关键直觉:宏是湖泊。先定湖岸和运河,再造城,不要城造完再挖湖。
靠近计算的缓存要用高端口或多体交叉,减少银行冲突;容量型用单口加仲裁。仲裁延迟要进规格,否则算法以为每拍都能取到权重。存内计算把乘加塞进阵列,能效诱人,但良率、模拟精度和数字签核流程都变了,不能当普通宏即插即用。近存计算更务实:把 SRAM 紧贴脉动阵列,缩短金属,这是 floorplan 能立即做的。
冗余列与维修熔丝属于制造测试。BIST 发现坏位,熔丝替换。设计要为熔丝信息留寄存器,上电加载。忽略维修,等于把良率问题全推给单元设计。
双口面积和干扰都更贵。真并发读写才值得。假双口(两块乒乓)有时更干净,延迟多一拍换稳定性。
极小而极多端口的寄存器文件,常用定制多口阵列或触发器。中等容量再进 SRAM。端口数比容量更快地赶走标准宏。
第一步看容量和端口。很小又极多口,留在触发器或定制寄存器文件。中等容量单口,走 SRAM 编译器。需要同时读写,先评估乒乓是否够,再买双口。第二步看延迟:宏是同拍读还是下一拍。RTL 包装模块应把延迟藏在内部,对外仍是第1章的握手,避免全芯片散落“等一拍”的注释。
第三步看电源:宏是否允许与逻辑同域关断。不允许则隔离和常开供电要在 UPF 出现。第四步看测试:BIST 端口、修复寄存器、测试时钟。顶层 DFT 计划必须点名每块宏。第五步看放置:长边朝运河,电源针脚朝网格,不要把针脚埋进另一块宏的阴影。
编译器参数(列复用、银行数、流水级数)改一次,Liberty 和外形都变,等价于换硬核版本。参数必须进第6章兼容矩阵。有人在时序紧时偷偷把宏改成带流水的版本,RTL 包装没改,功能仿真仍当同拍读,这种 bug 极难查。
上电加载修复信息的路径要复位安全。熔丝读出本身可能慢,启动序列要等 BIST 完成再进功能。规格里的“复位后 N 拍可工作”必须包含这块时间,否则软件会在维修完成前访问坏地址。
上电后宏可能需要修复合入、BIST、DLL 锁定。软件若在这些完成前访问,会读到坏数据还以为是协议错。把“可访问”从复位释放里拆出来:复位释放只保证数字逻辑已知态,存储可访问是后一阶段。接口表加一列就绪信号。
编译器流水级数变化必须改包装模块的握手。同拍变两拍,对外 valid 晚一拍,所有调用方都要知道。用形式属性锁住:请求到数据的拍数恒为参数 K。K 进矩阵。有人“为了时序”改 K 却不改属性,联调会变成猜谜。
宏的电源针脚方向决定网格。针脚朝外才能接到条带。旋转宏图好看但针脚埋进阴影,IR 在银行内部先坏。布图评审看针脚,不看矩形漂不漂亮。
就绪信号从复位里拆出,软件等 BIST 与修复完成。拍数参数 K 用形式属性锁住并进矩阵。针脚朝网格,旋转图好看不算过。编译器参数改一次等于换硬核版本。包装模块对外保持握手,把宏的同拍或两拍藏在内部。
五步检查写成门禁:容量端口、读延迟拍数、电源域、BIST 与修复、针脚朝向。任一步跳过,后面联调会用另一种语言爆炸。就绪信号从复位拆出,软件等维修完成。K 拍属性锁死进矩阵。数组推断大容量禁止。双口面积贵,乒乓能用就用。寄存器文件极多口才定制。启动序列含熔丝读取时间。宏是湖泊,运河先画。编译器参数变更按换硬核发布。包装模块对外握手不变,对内消化同拍或两拍差异。针脚埋进阴影的旋转图,布图评审直接退回。
RTL 里一个大数组被综合成触发器,漏电和密度一起爆。改实例化编译器宏后,读延迟从同拍变下一拍,包装未改,全芯片对拍失败。形式属性把 K 锁成 1,包装改握手后恢复。软件在 BIST 完成前访问,启动偶发错数,就绪信号从复位拆出才稳住。针脚朝内的旋转图 IR 先在银行内部红,转回针脚朝网格。五步门禁任一步省,爆炸语言不同:面积、拍数、软件、电源。湖泊比喻在这里变成事故报告标题。
再补一条出门检查:大数组无推断;K 拍属性存在;就绪与复位分离;针脚朝网格;BIST 进顶层计划。五样没有,湖泊未登记。编译器参数进矩阵。乒乓优先于盲目双口。启动含熔丝时间。包装对外握手稳定。软件不得在维修前访问。旋转图以针脚为过关标准,不以矩形美观为过关标准。
容量端口评估跳过不许。K 拍属性跳过不许。电源域跳过不许。BIST 计划跳过不许。针脚朝向跳过不许。五步是门禁。大数组推断跳过更不许。就绪与复位未分离,软件会在维修前访问。参数改了不进矩阵等于偷换硬核。乒乓能用却上双口,面积税没有主人。旋转图以针脚过关。湖泊未登记就造城,运河只能事后爆破。
宏肌肉是五步门禁:端口、拍数属性、电源域、BIST、针脚。跳过不许实例化。推断大数组更不许。就绪与复位分离。参数进矩阵。乒乓优先。启动含熔丝时间。包装握手对外稳定。软件维修前访问当缺陷。旋转以针脚过关。湖泊未登记就造城,事后只能爆破挖河,日历和拥塞一起爆炸。门禁看起来慢,比炸河快。
双口宏还要写清同地址读写碰撞时谁赢。编译器通常给出“写优先、读旧值或禁止同拍”三类契约,RTL 包装必须选一类并在断言里锁死。包装若假设读总能拿到刚写的数据,而宏吐出旧值,功能仿真用行为模型会绿、门级会红。碰撞规则是端口时序的一部分,不是存储器数据手册的附录 trivia。
下一章进入签核:用提取后的延迟做建立保持,并用功耗与完整性证明电学也站得住。