简介:本资源为SMIC中芯国际18纳米工艺节点的Cadence专用工艺库文件包,面向集成电路设计工程师、高校微电子专业师生及EDA工具使用者,解决先进工艺下数字/模拟电路仿真、综合、布局布线等关键流程中模型缺失与工具兼容问题。压缩包共2000个文件,主体为634个.tag(工艺参数定义)、633个.db与.cdb(标准单元与IO库数据库)、143个.cd%(版图描述)、125个.xx(寄生提取与规则文件),辅以SPICE模型(.sp_cal)、Verilog-A行为模型(.va)、DRC/LVS验证规则(.drc、.lvs_2p6m_ee)及PDF版release_note与readme,完整覆盖Cadence Virtuoso全流程需求;包体大小61.06MB,结构规范、版本明确(含smic18ee_2P6M标识及20100810时间戳)。目前已有9638人学习下载,用户可直接导入Cadence环境开展18nm芯片设计实践,获取高精度晶体管模型、多角点仿真文件(Cmax/Cmin/typ)、物理验证规则集及典型工艺配置范例,显著降低建模门槛与流程调试成本。
1. smic18工艺库文件:不是“拿来就能用”的PDK包,而是Cadence环境下流片前必须亲手验过的黑匣子
你手头刚拿到一份标着“smic18工艺库文件”的压缩包,解压后看到一堆.cdslib、.il、.scs、tsmc18mmrf风格的目录结构,第一反应可能是——“终于齐了,赶紧建库、画图、仿真!”但现实往往是:virtuoso启动时报Library not found,ADE L里调不出nmos18器件,spectre仿真直接卡在netlist generation阶段。这不是文件损坏,而是smic18工艺库在Cadence平台上的典型落地困境:它本质是一套高度耦合的工艺定义+仿真模型+版图规则+PDK接口四层嵌套体,缺一不可,且版本错配一丁点就全线崩盘。这份资源不是教学演示包,而是面向真实流片准备的工程资产,适合已完成基础电路设计训练、正进入tape-out前验证阶段的模拟/RF工程师,或是需要在自有Cadence环境中复现某成熟IP行为的验证工程师。它解决的不是“会不会画MOS管”,而是“能不能让Cadence真正理解SMIC 0.18μm工艺的电学边界、寄生提取逻辑和DRC/LVS检查语义”。
2. 工艺库结构解析与Cadence环境适配:从文件树到cds.lib的映射逻辑
smic18工艺库绝非单个文件,而是一组按功能分层组织的目录集合。常见结构如下(以典型交付包为例):
smic18_pdk/ ├── cdslib/ # Cadence库定义文件 │ ├── cds.lib # 主库声明文件(关键!) │ └── lib.defs # 库别名与路径映射 ├── models/ # 仿真模型文件 │ ├── spectre/ # Spectre仿真器专用模型(.scs格式) │ │ ├── smic18_v1p0.scs │ │ └── smic18_rf_v1p0.scs │ └── hspice/ # HSPICE兼容模型(.mdl格式,部分版本提供) ├── libraries/ # 器件符号、版图单元、参数化单元(Pcell) │ ├── nmos18/ # NMOS器件库(含symbol, layout, schematic视图) │ ├── pmos18/ # PMOS器件库 │ ├── res18/ # 电阻器件库 │ ├── cap18/ # 电容器件库 │ └── techfiles/ # 工艺技术文件(.tf文件,定义DRC/LVS规则) ├── doc/ # 工艺文档(PDF格式,含器件参数表、匹配规则、ESD说明) └── scripts/ # 辅助脚本(如批量建库tcl、LVS配置模板)提示:
cds.lib是整个工艺库在Cadence中“活起来”的起点。它不是配置文件,而是Cadence工具链的库注册入口。cds.lib中每一行DEFINE语句,都对应一个物理路径到逻辑库名的绑定。若路径写错、库名拼错、或路径中存在空格未转义,后续所有操作都会失败。
2.1cds.lib文件的手动校准:三步定位法
Cadence默认不读取任意位置的cds.lib,必须通过环境变量或启动参数指定。常见做法是将cds.lib放在项目根目录,并在启动virtuoso时显式加载:
virtuoso -cdslib ./cds.lib但更稳健的做法是全局生效:在用户主目录下创建~/.cdsinit,加入:
; ~/.cdsinit envSetVal("asimenv.startup" "cdsLibFile" 'string "/path/to/smic18_pdk/cdslib/cds.lib")然后在cds.lib中,必须严格遵循以下格式(注意空格、引号、斜杠方向):
DEFINE smic18_nmos /path/to/smic18_pdk/libraries/nmos18 DEFINE smic18_pmos /path/to/smic18_pdk/libraries/pmos18 DEFINE smic18_res /path/to/smic18_pdk/libraries/res18 DEFINE smic18_cap /path/to/smic18_pdk/libraries/cap18 DEFINE smic18_tech /path/to/smic18_pdk/libraries/techfiles参数说明:
DEFINE后第一个词是库逻辑名(必须全小写、无下划线、不能与Cadence内置库重名,如analogLib);- 第二个参数是绝对路径(强烈建议用绝对路径,避免相对路径在不同工作目录下失效);
- 路径末尾不能带斜杠(
/path/to/xxx/❌,/path/to/xxx✅),否则Cadence会报Invalid library path;- 若路径含空格(如
/home/user/My PDK/),必须用双引号包裹:DEFINE smic18_nmos "/home/user/My PDK/libraries/nmos18"。
2.2 模型文件(.scs)与仿真器的绑定机制
smic18的Spectre模型文件(.scs)不是直接被调用的,而是通过cds.lib中DEFINE的库名,在ADE L中通过Model Library Path字段关联。具体路径在ADE L → Setup → Simulator → Model Libraries中设置:
| Field | Value |
|---|---|
| Model Library Path | /path/to/smic18_pdk/models/spectre |
| Model File Name | smic18_v1p0.scs |
| Model Type | spectre |
逻辑说明:
Spectre仿真器启动时,会扫描Model Library Path下的所有.scs文件,解析其中的include语句(如include "./bsim3v3_18.scs"),并加载底层BSIM3v3模型定义。若.scs文件中include路径为相对路径(如./models/bsim3v3_18.scs),则必须确保该相对路径相对于Model Library Path有效。常见翻车点是:.scs文件里写的include "../models/bsim3v3_18.scs",但Model Library Path指向的是/models/spectre/,导致上级目录不存在。血泪经验:打开.scs文件,把所有include路径全部改为绝对路径,或统一挪到同一级目录下再引用。
2.3 技术文件(.tf)与Calibre/Assura的对接要点
techfiles/目录下的.tf文件(如smic18.tf)是DRC/LVS规则引擎的输入源。它不被Cadence直接读取,而是由物理验证工具(如Mentor Calibre或Cadence Assura)加载。在Assura中,需在Setup → Technology File中指定:
Technology File: /path/to/smic18_pdk/libraries/techfiles/smic18.tf关键参数说明:
.tf文件中定义了layer map(GDS层号映射)、drc rule deck(DRC检查规则集)、lvs rule deck(LVS网表比对规则)。若GDS导出层号与.tf中定义的layer map不一致(例如.tf写poly 1 0,但GDS实际用layer 27),DRC将漏报短路或断路。必须核对:用gdsii_viewer打开版图GDS,记下关键层(poly, diff, metal1)的layer/datatype号,再打开.tf文件搜索对应layer定义行,逐项确认。
3. 在Cadence Virtuoso中完成smic18器件调用:从空白库到可仿真的完整链路
调用smic18器件不是拖一个符号进原理图就完事,它依赖符号视图(symbol)→ 原理图视图(schematic)→ 仿真视图(spectre)→ 版图视图(layout)四视图的一致性。任一环节缺失或路径错位,器件即“不可见”。
3.1 创建smic18库并加载器件符号
启动virtuoso后,首先进入CIW(Command Interpreter Window),执行:
; 在CIW中执行 load "~/smic18_pdk/cdslib/cds.lib"若无报错,说明cds.lib语法正确。接着在Library Manager中点击File → Open → Library...,选择smic18_nmos库。此时应能看到nmos18单元,展开其symbol视图,确认图标正常显示。
逻辑说明:
Library Manager中看到库名,仅表示cds.lib注册成功;能看到symbol视图,才说明libraries/nmos18/symbol/目录结构完整且权限可读。若图标为空白或报Cannot open view,大概率是nmos18/symbol/cellName.symbol文件损坏,或symbol目录下缺少cds.lib中声明的smic18_nmos库名对应的library.properties文件(部分PDK要求此文件定义库元数据)。
3.2 在原理图中实例化器件并设置参数
新建schematic视图,在Add Instance对话框中:
Library: 选择smic18_nmosCell: 选择nmos18View: 选择schematic
点击OK后,器件出现在画布上。双击器件打开属性窗口,关键参数如下:
| Parameter | Typical Value | Description |
|---|---|---|
w | 1u | 沟道宽度(单位:μm),必须为数值+单位,不能写1(默认单位是m,1m=1e6μm,会炸) |
l | 0.18u | 沟道长度(单位:μm) |
nf | 1 | 指叉数(fingers),影响等效宽度与寄生 |
m | 1 | 并联数(multiplier),与nf共同决定总W/L |
model | nmos18 | 必须与.scs模型文件中定义的model name完全一致(区分大小写) |
参数说明:
w和l必须带单位(u=μm,n=nm,p=pm),Cadence不接受纯数字。若写w=1,系统按1米处理,仿真直接发散。model参数是连接原理图与.scs模型的桥梁——它必须与.scs文件中model nmos18 ...这一行的nmos18完全一致。若.scs中定义的是model nmos18_v1p0 ...,则此处必须填nmos18_v1p0,否则仿真报Unknown model。
3.3 ADE L中配置Spectre仿真:模型路径与温度设置
打开原理图,Launch → ADE L。在Setup → Simulator中:
Simulator:spectreNetlist Directory: 设置为独立路径(如./spectre_sim),避免与源文件混杂
在Setup → Model Libraries中添加:
Model Library Path:/path/to/smic18_pdk/models/spectreModel File Name:smic18_v1p0.scsModel Type:spectre
在Analog Design Environment → Analyses中添加DC/AC/Transient分析。特别注意温度设置:
; 在ADE L的Ocean Script中(或Setup → Environment → Temperature) temp = 27 ; 单位:摄氏度,smic18模型默认按27°C标定,非25°C!逻辑说明:
smic18的BSIM3v3模型参数是在27°C下提取的,若仿真设为25°C,阈值电压Vth会偏移约2mV,对高精度Bandgap或LDO设计造成可观测误差。务必在ADE L → Setup → Environment中显式设置Temperature = 27,而非依赖默认值。
4. 避坑:smic18工艺库在Cadence中高频翻车的五个现场
smic18工艺库的部署不是一次性的“复制粘贴”,而是充满隐性依赖的精密装配。以下是我在多个项目中踩过的、最常导致“器件不显示”“仿真报错”“DRC不过”的五个真实问题,按现象→原因→解决三段式还原:
4.1 现象:virtuoso中Library Manager能看到smic18_nmos库,但双击打开报Cannot open view 'schematic'
原因:libraries/nmos18/schematic/目录下缺少nmos18.sch文件,或该文件权限为只读(尤其从Windows压缩包解压到Linux时,文件属性丢失)。
解决:进入libraries/nmos18/schematic/目录,执行ls -l确认nmos18.sch存在且可读;若权限不足,运行chmod 644 nmos18.sch。若文件缺失,检查PDK包是否完整,或从scripts/目录运行gen_sch.tcl(如有)自动生成。
4.2 现象:ADE L中添加smic18_v1p0.scs后,运行仿真报Error: Unknown model 'nmos18'
原因:.scs文件中model nmos18 ...定义被注释掉,或model语句前有非法字符(如中文空格、BOM头)。用vim -b smic18_v1p0.scs查看二进制头,若开头为,说明是UTF-8 with BOM格式,Spectre无法解析。
解决:用dos2unix smic18_v1p0.scs清除BOM;用grep "model nmos18" smic18_v1p0.scs确认该行未被//注释;若使用include,确保被包含文件路径正确且可访问。
4.3 现象:版图绘制完成后,Assura DRC报Layer 1 datatype 0 not found in technology file
原因:.tf文件中layer map定义的GDS层号与实际版图导出层号不一致。例如.tf写poly 1 0,但版图中poly层导出为layer 27 datatype 0。
解决:用gdsii_viewer打开版图GDS,记录poly/diff/metal1的layer/datatype;打开.tf文件,搜索poly、diff等关键字,修改layer map行使其匹配实际GDS层号。例如将poly 1 0改为poly 27 0。
4.4 现象:spectre仿真时netlist生成卡住,日志末尾停在Reading model file...
原因:.scs文件中include的某个子模型文件路径错误,或该文件本身为空/损坏。Spectre会静默等待,不报错。
解决:在ADE L → Results → Log中查看完整日志,找到最后一条Reading...语句,记下被读取的文件名;用ls -l确认该文件存在且大小>0;用head -n 5 <filename>确认文件头部无乱码。
4.5 现象:virtuoso启动时提示Warning: Cannot find cds.lib in current directory,但已设置-cdslib参数
原因:-cdslib参数后跟的是相对路径,而当前工作目录(pwd)与cds.lib所在目录不一致。例如cd /tmp && virtuoso -cdslib ../pdk/cdslib/cds.lib,但cds.lib中路径是相对../pdk/写的。
解决:一律使用绝对路径启动:virtuoso -cdslib /full/path/to/smic18_pdk/cdslib/cds.lib;或在~/.cdsinit中用envSetVal硬编码绝对路径,彻底规避相对路径歧义。
5. 版图验证与LVS闭环:用Assura跑通smic18的DRC/LVS全流程
smic18工艺库的价值最终体现在版图能否通过流片前的物理验证。DRC(Design Rule Check)和LVS(Layout Versus Schematic)不是可选步骤,而是PDK可用性的终极检验。这里不讲理论,只给一套在Assura中100%跑通的实操链路。
5.1 DRC运行:从规则加载到错误定位
在Virtuoso中打开版图,Launch → Assura → DRC。关键设置如下:
| Tab | Setting | Value | Why |
|---|---|---|---|
| Setup | Technology File | /path/to/smic18_pdk/libraries/techfiles/smic18.tf | 必须指向PDK提供的.tf文件,非Cadence自带 |
| Input | GDS Input | your_layout.gds | 确保GDS层号与.tf中layer map一致 |
| Rules | Rule Deck | smic18_drc.rul | PDK包中techfiles/下通常附带此文件,勿用通用rule deck |
| Output | Report File | drc.report | 生成文本报告,便于grep定位 |
运行后,若出现DRC错误,在Assura DRC Results窗口中双击错误条目,版图自动跳转到违规位置。重点看错误类型:
min_width_poly:多晶硅最小宽度不满足,需检查poly层drawn width;min_spacing_diff:扩散区间距不足,常因源漏共享导致;enclosure_poly_active:poly对active的覆盖不足,需调整poly端头延伸。
技巧:DRC报告中
Layer列显示的是.tf中定义的层名(如poly),而非GDS层号。若报告中出现Layer: unknown,说明.tf中layer map未覆盖该GDS层,需补全。
5.2 LVS运行:网表比对的三个生死关
LVS失败90%源于网表提取不一致。smic18的LVS流程必须严格遵循以下三步:
步骤1:版图网表提取(Layout Netlist Extraction)
在Assura LVS → Setup → Layout中:
Extract Device: 勾选MOS、Resistor、Capacitor(根据版图含有的器件);Extract Connectivity: 勾选All Layers,确保metal1/metal2等互连层全部参与提取;Device Recognition:Technology File指向同一smic18.tf,确保器件识别规则与DRC一致。
步骤2:原理图网表生成(Schematic Netlist Generation)
在Assura LVS → Setup → Schematic中:
Netlist Source: 选择CDL(Cadence Design Language),这是smic18 PDK的标准输出格式;CDL File: 指向ADE L中Netlist Directory下生成的<top_cell>.cdl文件;Model Library: 添加/path/to/smic18_pdk/models/spectre/smic18_v1p0.scs,确保器件模型名与CDL中一致。
步骤3:LVS比对与调试
运行LVS后,若报Netlist Mismatch,按以下顺序排查:
| 排查项 | 检查方法 | 修正动作 |
|---|---|---|
| 器件数量不一致 | 查看LVS报告中Device Count行 | 检查版图中是否有未连接的dummy器件(如未接VDD的decap),或原理图中是否有instance未放置model参数 |
| 节点名不匹配 | 报告中Net Name Mismatch列出layout_net: net1vsschematic_net: VDD | 在版图中双击net1,Edit → Properties中将netName改为VDD;或在原理图中右键VDD网络→Edit Net Name保持一致 |
| 器件参数偏差 | 报告中Device Parameter Mismatch显示w=1.000uvsw=1.001u | Cadence默认允许0.1%容差,若需严格相等,在Setup → Options → Tolerance中设Parameter Tolerance = 0 |
关键参数表:LVS核心容差设置
Parameter Default Recommended for smic18 Reason Parameter Tolerance0.1% 0避免因浮点计算微小差异误报(如 w=1.000uvsw=1.0000001u)Net Name MatchingCase SensitiveCase Sensitivesmic18 PDK中 VDD与vdd视为不同网络,必须严格匹配Device Recognition ModeStandardStandardAdvanced模式可能误识别dummy poly为MOS,导致器件数多出
5.3 一个真实案例:LVS失败后如何3分钟定位到poly端头
某次LVS报1 device mismatch: extra MOS in layout,但版图中只画了一个nmos18。我打开LVS生成的layout.spice网表,搜索M0(默认MOS器件名),发现多出一行:
M1 net1 net2 VDD VDD nmos18 w=1u l=0.18u M2 net3 net4 VDD VDD nmos18 w=1u l=0.18u而原理图CDL中只有M1。接着用Assura → Utilities → Display Devices,在版图上高亮所有MOS,发现poly端头超出active区域0.1μm,被Assura识别为独立MOS(因smic18规则中poly over active需≥0.08μm,超出即触发dummy识别)。解决方案:用Stretch工具将poly端头往回拉0.05μm,重新DRC/LVS,通过。
从那以后我每次画完MOS,都强制走一遍Assura → Utilities → Display Devices,眼睛扫一遍高亮区域是否与预期完全重合——这一步花30秒,能省去后面2小时LVS debug。希望帮到你。
本文还有配套的精品资源,点击获取