简介:SMIC 18纳米工艺库是面向Cadence EDA工具链的中芯国际PDK资源,专供模拟、数字与混合信号芯片设计及版图验证使用,帮助设计师在原理图仿真、寄生参数提取、时序分析和物理检查中获得与实际流片一致的精度。资源包约61MB,合计2000个文件,主要类型包括标准单元数据库(db/cdb)、工艺标记(tag)、DRC/LVS规则文件、不同工艺角下的C模型和call仿真脚本,覆盖从前端综合到后端Signoff的常见需求。压缩包子文件名中的2P6M对应工艺叠层信息,20100810则标识版本发布日期,便于团队识别与选型。文件内的Cmax、Cmin和typical模型参数可直接用于Cadence Virtuoso等主流通用工具进行工艺角仿真,db/cdb库则支撑综合与时序收敛,配齐后能大幅缩短工艺适配和物理验证准备时间。已有9562人学习/下载,适合需要匹配SMIC 18纳米工艺的IC设计工程师和高校研究者。
1. 拿到smic18工艺库,先搞清楚它到底是什么
做芯片设计的人,手机里多少都存过几个“smic18工艺库文件”的压缩包。解压出来一看,一堆文件夹,名字千奇百怪,什么digital、analog、doc、pdk,里面又是.lib、.db、.v、.lef、.tf、.gds、.cdl……第一次接触的人很容易直接懵掉。我最早拿到这套库的时候也一样,后来帮团队搭环境、跑通了几条全新工艺的流程,才慢慢形成了一套固定的处理套路。这篇文章就把smic18工艺库文件从类型到使用到避坑,系统性拆一遍。
先纠正一个常见误会:smic18并不是指某一个单独文件,而是SMIC 0.18微米CMOS工艺对应的整套设计套件,行业内有时候叫PDK,有时候统称工艺库。0.18微米这个节点,现在听起来不算先进,但在很多不需要追最先进制程的领域依然是主力选手:LCD驱动芯片、电源管理、电机驱动、车规模拟前端、特定传感器接口芯片,都在用0.18微米来设计。原因不复杂:流片成本相对低,设计规则相对宽松,核心电压1.8V、IO电压3.3V甚至5V的组合,正好覆盖模拟电路对耐压、功耗和一致性的要求。
1.1 一套能跑通整个芯片流程的“图纸包”
很多教程会把工艺库说得玄乎,其实就是一套“图纸包”。你画版图、做仿真、跑时序、做物理验证,全都要靠这套图纸包里的不同文件来提供信息。它至少包含三块:数字标准单元库、IO库、模拟PDK。有些项目还会单独提供Memory Compiler,用来生成SRAM的时序模型和物理视图。
这三块东西的使用阶段完全不同。数字标准单元库服务于逻辑综合、布局布线、静态时序分析;IO库给芯片焊盘周围用的输入输出单元,包含ESD保护和电平转换结构;模拟PDK则是给模拟电路设计用的,提供晶体管模型、版图元件、设计规则文件。你在项目里如果只用了其中一部分,不代表其他文件没用,只是流程还没走到那一步而已。
1.2 数字、模拟、物理验证:三种视角看同一套库
同一个smic18工艺,在数字工程师、模拟工程师和物理验证工程师眼里,是完全不同的三样东西。数字工程师关心的是:这个标准单元的延迟是多少?驱动能力够不够?用哪个corner的.lib去综合?模拟工程师关心的是:这个MOS管的阈值电压、击穿电压、噪声模型准不准?用HSPICE还是Spectre仿真?物理验证工程师关心的是:DRC规则文件里金属最小宽度是多少?通孔重叠面积什么要求?LVS能不能对上?
所以,你在smic18工艺库里会看到大量重复信息的文件,比如同一个标准单元,.v里面有它的逻辑功能,.lib里面有它的时序和功耗,.lef里面有它的抽象物理边界,.gds里面有它真正的多边形版图。它们描述的是同一个东西,只是从不同视角去看。理解了这个,就不会再纠结“为什么库里有这么多看起来重复的文件”。
2. smic18工艺库文件全解析:每个文件在流程里承担什么角色
我第一次用smic18库的时候,最痛苦的不是跑工具,而是不知道每个文件是干嘛的。为了查一个文件后缀,翻了半天文档,最后还是靠看工具报错反向推断。现在把这些梳理成一张表,接手的同事基本看一遍就能明白。
| 文件类型 | 主要用途 | 常见工具/流程 | 使用阶段 |
|---|---|---|---|
| .lib | Liberty时序库,记录单元延迟、transition、功耗、约束 | DC、PT、Genus | 综合、STA |
| .db | .lib编译后的二进制格式 | DC、PT | 综合、STA |
| .v / .vg | Verilog网表模型,供门级仿真和综合输出 | VCS、ModelSim、DC | 仿真、综合 |
| .lef | 抽象物理库,包含单元外框、pin坐标、blockage | Innovus、ICC2 | 布局布线 |
| .tf | techfile,定义金属层、通孔、设计规则抽象描述 | Innovus、ICC2 | 布局布线 |
| .gds | GDSII版图,完整多边形数据 | Calibre、Virtuoso | 物理验证、Tapeout |
| .cdl / .spi | 晶体管级网表 | Calibre LVS、HSPICE | LVS、仿真 |
| .model | SPICE模型文件,描述MOS器件电学特性 | HSPICE、Spectre | 模拟仿真 |
| .qrc / .tluplus | 寄生参数提取文件 | StarRC、QRC | 后仿、STA |
2.1 逻辑与时序视图:lib / db / v
拿一个典型的smic18数字库举例,解压后常看到lib_tt、lib_ss、lib_ff这样的目录,分别对应 Typical、Slow、Fast 三种工艺角。每个目录下有几个关键文件:
.lib 是Liberty格式的时序库,所有单元的功能、delay、transition、power都被记在里面,静态时序分析全靠它。很多新手会问:为什么工具不直接读.lib,还要转成.db?因为Liberty是纯文本,信息量大,解析起来慢。用Library Compiler把.lib编译成.db,相当于提前做了一层索引,DC、PT读起来飞快。
我自己处理smic18库时的习惯是,如果拿到手只有.lib没有.db,就自己转一遍:
lc_shell read_lib /pdk/smic18/digital/lib_tt/smic18_tt_1v8_25c.lib write_lib smic18_tt_1v8_25c -format db -output /pdk/smic18/digital/db/smic18_tt_1v8_25c.db.v文件是数字网表模型,门级仿真时用。它跟.lib里的功能描述是对应的,但更偏行为级,仿真工具能直接解析。如果你拿到的smic18包里没有.v,也可以用Verilog-XL或VCS去读单元描述,但最好还是找代工厂要完整版本,自制的很容器出功能不匹配的问题。
2.2 物理与版图视图:LEF / TF / GDS / CDL
后端物理设计用的是另一套文件。.lef是抽象版图,只保留单元的轮廓框、pin的位置、布线阻挡层信息,不包含内部多边形。为什么PR阶段不看完整版图?因为布局布线只关心引脚在哪、占多大面积、哪些层不能走线,没必要加载每个单元内部的上千个多边形。等到了物理验证阶段,才需要加载.gds做真正的DRC/LVS检查。
.tf是techfile,定义金属层、通孔,以及各层的设计规则描述。PR工具画金属线、打via时,全靠它来确定走线宽度、间距、通孔尺寸。 .gds是GDSII版图,是完整的数据,用于DRC、LVS和最终的Tapeout。.cdl则是晶体管级网表,LVS阶段会从版图提取一个网表,再和.cdl做对比,确保你画的版图和原理图一致。
这里要特别提醒:LEF和GDS经常分别存放在不同目录,但它们的层定义必须严格一致。如果LEF里的metal1走线宽度和GDS里实际画的metal1层对不上,PR阶段看不出来,DRC一跑就是成片报错,这种情况我在项目里至少遇过两次。
2.3 模拟与SPICE视图:Model / PDK
模拟设计拿到的是另一份东西。smic18的SPICE模型文件通常按工艺角提供,比如SS、TT、FF分别对应不同阈值速度组合,模型里会给出MOS管的阈值电压、迁移率、击穿电压等参数。仿真器的选择会直接影响结果,需要确认HSPICE或Spectre版本能不能兼容这套模型。老版本库可能用BSIM3v3.2模型,新版本可能出现BSIM4模型,如果你拿默认参数去仿真,出来的工作点可能偏得离谱。
PDK里还包含设计规则文件、无源器件模型(电阻、电容、电感)、版图元件symbol和callback。模拟工程师在Virtuoso里画版图时,器件是由PDK自动生成的,能避免很多画错宽长比的问题。新手最容易犯的错是:把数字库里的器件当模拟器件用,或者反过来,导致模型调用出错。
3. 从零部署到跑通流程:目录整理、综合配置与corner选择实操
很多团队把smic18工艺库的部署工作看得过于简单,以为解压到服务器上就能开工。其实环境准备才是整个项目里最磨人的一步,路径配错、视图缺层、库版本和工具不匹配,随便一个问题就能卡住一整天。
3.1 先做目录整理和文件清点
拿到smic18库压缩包,第一步不是解压就干,而是先找readme或doc目录。里面通常会写清楚库版本号、金属层数(比如1P4M还是1P6M)、工作电压、温度范围、支持的工具版本。这一步看似简单,实际上能省掉后面至少一半的排查时间,因为你所有“玄学报错”,最后追根溯源都是版本不匹配。
我习惯建一个统一目录,比如/pdk/smic18,下面再分digital、analog、memory、doc四个子目录,然后把数字库、模拟PDK、Memory Compiler分别放进去。目录里再放一个setup.csh或setup.sh,把库路径通过环境变量暴露给DC、PT、Innovus等工具。
export SMIC18_DIGITAL=/pdk/smic18/digital export SMIC18_DB=$SMIC18_DIGITAL/db export SMIC18_LEF=$SMIC18_DIGITAL/lef export SMIC18_TF=$SMIC18_DIGITAL/tf环境变量配好后,先在命令行手动敲一遍,确认路径可读,再去工具里测试加载。不要一次性把所有变量塞进.bashrc,不然工具报错时根本分不清是库的问题还是环境的问题。
3.2 DC综合与后端PR的库配置
综合阶段,DC需要指定target_library和link_library。以smic18数字库为例,常见配置是:
set target_library [list smic18_tt_1v8_25c.db smic18io_tt_3v3_25c.db] set link_library "* $target_library"注意,综合时先拿TT角跑功能收敛,等RTL基本稳定了,再用SS和FF跑时序分析。有的团队一开始就上SS综合,逻辑综合工具会为了满足慢速条件拼命优化路径,结果面积和功耗失控,后面再拉性能反而不容易。
后端PR阶段,Innovus或ICC2需要读取tech.lef、标准单元LEF、macro LEF,同时还要给标准单元准备对应的NDM或OA视图。老项目里经常用Milkyway格式,新工具通常建议用OpenAccess。如果你手上的smic18库同时有OA和Milkyway两套视图,优先确认当前PR工具支持的格式,再去set init_lef_file,避免吃库失败。
3.3 时序分析与物理验证的corner选择
smic18常见的PVT组合是SS/1.62V/125℃ 用来检查setup,FF/1.98V/-40℃ 用来检查hold。有的库还会给TT/1.8V/25℃ 做典型功耗分析。实际工程中,setup和hold分析必须用不同的corner,因为芯片在制造后可能偏慢也可能偏快,在低温高压下,持有时间最短,最容易出现hold violation。
很多人在PR阶段只跑一个TT角,觉得“功能对了就行”,结果一到signoff,用SS角查setup、用FF角查hold,冒出来一堆因为corner没覆盖到的路径。特别是有时钟树后,hold修复要看FF角,setup修复要看SS角,时序报告里能同时体现两方面约束,才算是闭环。
物理验证阶段,Calibre DRC/LVS需要用到smic18配套的rule文件。这里必须按实际工艺版本选择对应的金属层数,1P4M和1P6M的rule文件不能混用,否则通孔和金属覆盖率检查全是虚报。
4. 实战中的常见问题与排查思路
工艺库出问题,报错往往五花八门,但根因基本就那么几类。我在不同项目里帮同事排查过很多次,整理下来最常见的有下面4类。
4.1 读库报错:一半以上是版本和依赖问题
DC或PT读.db时报错,最优先检查两件事。第一,.db是不是用当前工具兼容的Library Compiler版本生成的,老版本转出来的.db在新工具里可能直接拒读。第二,路径里有没有.lock文件,有些工具在读写库文件时会生成锁文件,没删干净会让后续读取异常。如果确认这两点都没问题,再怀疑库文件本身。
另外提醒一句:同一个smic18库,不同版本之间.lib里的单元名和pin名可能不完全一致。综合后做形式验证,如果出现大量“找不到引脚”的报错,先查库的版本号,再查工程里是否有历史遗留的旧库路径。
4.2 LEF/TF与GDS不一致,DRC成片报错
没有比PR阶段一切正常、一到Calibre DRC就整版报错更让人头大的了。最常见的原因是tech LEF里的金属层宽度、通孔定义,和GDS里实际画出来的图形不配套,或者TF里的layer map对不上。
排查办法很直接:用Virtuoso或KLayout打开一个标准单元的GDS,再用文本编辑器打开tech LEF,逐层对比金属层名称、绘制层号和目的层号。smic18不同版本之间Metal stack的命名规则会变,比如有的版本用M1/M2,有的版本用METAL1/METAL2,一个字母差,工具就不认。
4.3 模型版本不匹配,仿真结果明显偏差
模拟仿真里最容易踩的坑是模型版本和仿真器版本不匹配。smic18的老库可能基于BSIM3v3.2,新库可能提供BSIM4模型。如果你的仿真器默认版本和库的模型参数不一致,阈值电压和饱和电流测出来都会明显偏,你调电路参数调一整天,最后发现换一个模型版本就全对了。
我的建议是,每个新项目开工前,先建一个最低配置的测试电路——一个NMOS,一个PMOS,跑一遍DC扫描,把Ids-Vgs曲线和库文档里的参考曲线对比一下。对得上再继续大规模仿真,对不上就先解决模型版本问题,别拿不准的模型去做设计决策。
像天线规则和密度规则,在PR阶段不处理,后面补救代价很大:既要改floorplan,还可能要加diode,严重时直接推迟Tapeout。跑smic18项目时,PR工具里要提前加天线检查选项。另一个容易被忽略的是金属密度规则,dummy metal怎么加,加在哪一层,都要按库里的density rule来,否则DRC会报大片“metal density below minimum”的错误。
4.4 容易被忽略的天线规则和密度规则
很多人刚学PR时眼里只有时序,把所有精力都放在收敛setup、hold上,却把天线效应和金属密度当成小事。smic18工艺有专门的天线规则文件,要求PR工具检查每条金属线上累积的电荷是否可能击穿栅氧化层。解决方法通常是插入天线二极管(antenna diode),但如果前期不在floorplan里留位置,后期硬塞会打乱整个布局。
金属密度规则同样麻烦。代工厂对每一层金属的最小/最大图形密度有硬性要求,不达标就只能靠加dummy metal来补。有的PR工具能自动加dummy,有的需要跑到物理验证阶段手工处理。我的习惯是在PR阶段就把density rule读进去,让工具提前产生dummy填充,虽然会增加一点数据量,但比最后DRC一片红要省心得多。
跑了几个smic18项目下来,我最深的体会是:工艺库文件本身不复杂,但一定要先花时间把目录结构、版本关系、corner组合理清楚。稳扎稳打,先跑一个最简单的测试用例——从综合到APR到STA到LVS/DRC——确认整条流程通了,再去动真实逻辑。这样做问题排查成本最低,也最容易发现工艺库文件本身的问题。
本文还有配套的精品资源,点击获取