第二章:SRAM编译器简介

各位同学,今天我们来聊聊SRAM编译器。说实话,我刚入行那会儿,听到「编译器」三个字,第一反应就是写代码用的那个GCC。后来做了一次SRAM定制化项目,才明白此编译器非彼编译器。

SRAM编译器,说白了就是一套自动化工具。它能根据你的配置参数——比如存储深度、位宽、读写端口数——自动生成SRAM的GDSII版图、网表、时序模型和功耗模型。你想想看,如果没有它,每次改个容量就得手动画版图,那得画到猴年马月去?

2.1 什么是SRAM编译器

SRAM编译器,也叫Memory Compiler。它是一个软件工具,输入是一组配置参数,输出是一整套SRAM的物理实现文件。

我习惯把它理解成一个「乐高积木生成器」。你告诉它要搭多大的房子、几个窗户、几个门,它自动把积木拼好,还附带说明书(时序库)和效果图(版图)。

典型的输入参数包括:

  • 存储深度:比如1024个字
  • 位宽:比如32位
  • 读写端口数:单口、双口、伪双口
  • 工艺节点:28nm、16nm、7nm等
  • 功耗优化选项:低漏电、高性能等

输出文件通常包括:

  • GDSII版图:物理设计用
  • Verilog网表:仿真用
  • Liberty时序库:STA用
  • LEF抽象:布局布线用
  • 功耗模型:CPF/UPF用

核心要点:SRAM编译器不是编译器,而是「存储器自动生成器」。它把人工设计SRAM的重复劳动,变成了参数配置的自动化流程。

2.2 编译器的作用与价值

为什么我们需要SRAM编译器?这个问题我当年也问过师傅。他反问我:「你愿意花三个月画一个SRAM,还是花三天配参数?」

价值主要体现在三个方面:

2.2.1 缩短设计周期

手工设计一个定制SRAM,从架构设计到版图验证,少说两三个月。用编译器,配置好参数,点一下生成,几小时到一天就搞定。我在项目中遇到过客户临时改规格,从256x32改成512x16,重新跑一遍编译器就完事了。要是手工设计,改版图改到哭。

2.2.2 降低设计风险

编译器生成的SRAM,是经过硅验证的。什么意思?就是这颗SRAM已经在某个工艺节点上流片验证过了,时序、功耗、良率都有数据支撑。你自己手画的SRAM,你敢保证第一次流片就能正常工作?

避坑指南:我曾经见过一个团队,为了省几万美元的编译器授权费,自己手画了一个SRAM。结果流片回来,读操作时序不满足,整个芯片废了。省了小钱,赔了大钱。

2.2.3 支持设计空间探索

芯片架构阶段,你需要快速评估不同SRAM配置对面积、功耗、性能的影响。编译器可以批量生成几十种配置,让你对比选择。手工设计根本做不到这一点。

举个例子,你可以在一天内生成以下配置并对比:

配置 深度 位宽 面积(μm²) 读功耗(mW) 写功耗(mW)
A 512 32 12000 0.85 0.92
B 1024 16 9800 0.72 0.78
C 256 64 15000 1.10 1.20

你看,有了这些数据,架构师就能做出更明智的决策。

2.3 主流商用编译器介绍

目前市面上主流的SRAM编译器,基本被两家公司垄断:ARM和Synopsys。我两家都用过,各有千秋。

2.3.1 ARM SRAM编译器

ARM的SRAM编译器,全称叫ARM Artisan Physical IP。它覆盖的工艺节点很广,从180nm到5nm都有。ARM的编译器生成的SRAM,特点是面积小、功耗低,特别适合移动端和IoT芯片。

我个人习惯用ARM编译器做低功耗设计。它的功耗优化选项很丰富,比如:

  • 电源门控(Power Gating)
  • 保留模式(Retention Mode)
  • 动态电压频率调整(DVFS)支持

ARM编译器的输出文件命名规范,我举个例子:

ra1shd_1024x32m4_tt1p2v25c.lib   # 典型工艺角时序库
ra1shd_1024x32m4_ss0p99v125c.lib  # 慢工艺角时序库
ra1shd_1024x32m4_ff1p32vm40c.lib  # 快工艺角时序库
ra1shd_1024x32m4.gds              # 版图
ra1shd_1024x32m4.v                # 网表

命名规则解读:ra1shd表示单口高密度,1024x32是容量,m4是金属层数。

小技巧:ARM编译器生成的SRAM,命名里包含了关键信息。学会看命名,能快速判断这颗SRAM的类型和规格。

2.3.2 Synopsys SRAM编译器

Synopsys的编译器叫Synopsys DesignWare SRAM Compiler。它的优势在于和Synopsys自家的EDA工具链集成度极高。你用Design Compiler做综合,用IC Compiler做布局布线,用PrimeTime做STA,全部无缝对接。

Synopsys编译器生成的SRAM,性能通常比ARM的略好一些,但面积稍大。适合高性能计算、网络芯片这类对速度要求高的场景。

它的配置界面是图形化的,叫Memory Compiler GUI。你可以在里面拖拽配置,实时看到面积和功耗的预估。我记得第一次用的时候,觉得这个界面真方便,比ARM的命令行模式友好多了。

Synopsys的输出文件:

sp_hd_1024x32_tt1p2v25c.db       # 二进制时序库
sp_hd_1024x32_ss0p99v125c.db
sp_hd_1024x32_ff1p32vm40c.db
sp_hd_1024x32.gds
sp_hd_1024x32.v

注意,Synopsys的时序库是.db格式(二进制),而ARM的是.lib格式(文本)。两者可以互相转换,但转换过程中可能丢失一些信息。

2.3.3 如何选择

选ARM还是Synopsys?我的建议是:

  • 看工艺:你的代工厂支持哪家的IP,就用哪家。台积电的工艺,两家都支持;但有些二线代工厂可能只支持其中一家。
  • 看工具链:如果你整个流程都用Synopsys的工具,那用它的编译器最省事。反之,如果用ARM的,可能需要做一些格式转换。
  • 看需求:低功耗选ARM,高性能选Synopsys。当然,这不是绝对的,具体还得看工艺节点和配置。

总结一下:SRAM编译器是数字芯片设计中不可或缺的工具。它把SRAM设计从「手工作坊」变成了「自动化工厂」。ARM和Synopsys是两大主流选择,各有优势。选型时,结合工艺、工具链和设计需求来定。

嗯,这一章就讲到这里。下一章我们深入SRAM编译器的内部架构,看看它到底是怎么工作的。


专注资料整理