版图设计配置指南:新建项目必做的四件事

通过环境配置实现:新建库时自动选择techLib,电路库自动配对版图库,定义工艺格点及固定Pin的生成参数,来提升设计效率。

兔二思
兔二思
技术博主

系列文章目录:

  1. 修改 CIW & Library Manager 默认窗口大小

  2. 修改 Layout & Schematic 默认窗口大小

  3. 调整字体大小

  4. 修正大字体导致表单文本重叠的问题

  5. CIW 窗口集成 oaScan 菜单

  6. 设置日志文件的保存位置

  7. 调整窗口标题栏的显示样式

  8. 设置 Palette(LSW) 面板显示样式

  9. 自定义 CellView 的启动偏好

  10. PDK 初始化设置( libInitCustomExit.il )

  11. 项目的初始化设置 - 本篇

    • 新建库自动选择 techLib
    • 库名映射
    • 工艺格点
    • 定义 Pin 的生成参数
  12. 特定工具 - Library Manager( cdsLibMgr.il )

  13. 特定工具 - Layout L / XL

  14. 特定工具 - Layout EAD


延续上一篇 PDK 初始化配置的内容,本篇我们进入设计库(Design Library)阶段,看看在项目设计初期,有哪些实用的环境设置。

新建设计库时自动选择关联的库

在用 Virtuoso 搭建新设计的时候,第一步通常是创建一个设计库。不过熟悉流程的朋友都知道,设计库本身只是个“空壳”,真正让它有血有肉的,是要把它和工艺库关联起来。默认情况下,每次新建库时都需要手动选择工艺库,但其实我们可以通过环境配置,让工具自动帮我们选好对应的 technology library 。

( 配置前后的流程对比 )

命令格式

;; .cdsenv

cdba  defaultAttachTech  string  t_techLibraryName

配置示例

;; .cdsenv

cdba  defaultAttachTech  string  "cds_ff_mpt"

📌顺带一提:目前通过环境变量的方式,只能设置“Attach 工艺库”这一种关联方式。如果像作者一样习惯用 “iTDB 形式”的设计库(也就是第二个Reference TechLib),暂时还没办法通过环境变量来操作。

库名映射:把电路库映射到对应的版图库

大家有没有遇到这样的小烦恼?

如果你的电路和版图不是放在同一库里设计,比如 schematic 放在 my_project_sch,layout 放在 my_project_lay。每次通过 Launch - Layout XL 新建版图时,弹出的“New File”表单,默认的库名是电路所在的库,也就是 my_project_sch。这时候你就得手动在下拉菜单选一下,选成 my_project_lay。虽然只是多点一下,但每次新建都要点总归有点烦,是吧?

其实有一个很好用的环境变量 —— schLayLibraryPair,它可以让你给电路和版图配个对。一旦配好,以后再通过 Layout XL 新建版图的时候,就会自动帮你填好库名,效率 +1 !

( New File 表单自动匹配库名 )

除了自动帮你在新建版图的时候选好目标库,schLayLibraryPair 的作用还不止于此:

它还能把这份映射关系传递到

“Configure Physical Hierarchy (CPH)”窗口中。

假设你设计的一个电路,顶层单元引用了一些来自共享库 share_sch 的子电路单元。当你准备生成层次版图时,你是不是需要在 CPH 配置窗口手动指定这些子单元的 Physical Library(物理库)。这个时候,如果你有很多共享单元,那你可能就要在 CPH 里手动点好多次…… 如果你预先在环境变量里写好了公共库的映射关系,那么当 CPH 自动分析电路层次时,他会自动把 share_sch 映射成 share_lay。整个版图流程更流畅,特别适合多库、多团队协作的场景。

(  CPH 自动映射好库名 )

如何配置?

例如,要将“my_project_sch”映射到“my_project_lay”,可以设置如下:

;; .cdsenv

layoutXL schLayLibraryPair string "((\"my_project_sch\" \"my_project_lay\"))"

也可以设置多个映射:

layoutXL schLayLibraryPair string "((\"my_project_sch\" \"my_project_lay\")  (\"share_sch\" \"share_lay\"))"

此外,schLayLibraryPair 还支持使用通配符,参考如下:

layoutXL schLayLibraryPair string "((\"*_sch1\" \"*_lay1\") (\"*_sch2\" \"*_lay2\"))"

这样一来,每次从对应的 schematic 创建 layout,就能自动跳到你设定好的 layout 库,非常省心有木有😄

设置工艺格点

什么是“工艺格点”?

我们可以把工艺格点(Technology Grid)简单理解成设计空间中的坐标网格,这个网格的大小由 PDK 严格定义,其背后对应的是芯片制造中工艺的物理限制。不同的制程节点和厂商会有不同的格点标准,具体数值可以在 PDK 附带的 Design Manual 中找到。

( Design Manual 格点信息 )

如果你忽略了这个规则直接开始画图,后续在 DRC 验证阶段就很容易出现 “Off-grid” 错误。所以强烈建议你在画第一条线之前,先看看 PDK 文档,搞清楚 X 和 Y 方向上的 grid 间距,然后把 Layout 工具里的格点设好。这样能省下你后面很多不必要的返工时间。

图形界面设置入口

点击 VLS 的菜单栏 Options > Display > 输入数值:

(  Display Options - Grid Controls )

命令格式

;; .cdsenv

layout  xSnapSpacing  float  float_number
layout  ySnapSpacing  float  float_number

配置示例

;; .cdsenv

layout  xSnapSpacing  float  "0.005"
layout  ySnapSpacing  float  "0.005"

📌Tip:工艺格点参数来源于具体的工艺,应随工艺库统一配置。所以如果你有权限修改 PDK,更推荐直接把格点设定写进 PDK 目录下的 .cdsenv 文件中,这样更加方便。

设定 Pin 的生成参数

格点也设置好了,下一步可以开始生成器件了!一般这个时候,我们会通过 LayoutXL - Generate All From Source 这个命令,把电路中的器件和 Pin 都放置在版图中。放置前会弹出一个 Generate Layout 对话框,在这个界面可以看看哪些参数是需要勾选和调整的。特别是 I/O Pins 标签页,刚开始设计的时候,好一番捣鼓吧?其实这些选项都对应着具体的环境变量,只要提前配置好,后续生成时就能自动套用。

( I/O Pins 标签页 )

下面我们就来↑↑按图索骥↓↓,介绍一些能控制 Pin 生成行为的环境参数。也许其中就藏着那个“它应该有但找不到”的设置呢~

Pin 层常用的环境变量介绍

;; .cdsenv

; ① 指定 Pin 下拉菜单中的图层列表,过滤可选的LPP
layoutXL initIOPinLayerNames string "M1 M2 M3 M4 M5 M6" ;; {filter_validLayer_names}

; ② Pin 所在的金属层,比如用 M1 或 M2
layoutXL initIOPinLayer string "M2 drawing"

; ③ Pin 的宽度、长度
layoutXL initPinWidth float "0.23"
layoutXL initPinHeight float "0.23"

; ④ 是否为 Pin 自动创建 label,选用哪个标签类型(引脚标签 | 文本显示 | 不创建标签和文本)
layout createPinLabel boolean t
layoutXL initIOLabelType string "Label"  ;; {Label | Text Display | None}

; ⑤ 二选一:指定 label 为固定尺寸或者自动调整大小
layout labelHeight float "0.1"
layout pinTextAutoHeight boolean nil

; ⑥ label 字体样式
layout labelFontStyle cyclic "stick"  ;; {gothic | roman | math | euroStyle | swedish | ...}

; ⑦ 指定 Pin Label 的图层列表和默认图层
layout pinTextLayerNames string "M1TXT M2TXT M3TXT"  ;; {filter_validLayer_names}
layout pinTextLayer string "M1TXT"
layout pinTextSameLayer boolean nil

; ⑧ 指定 Pin Label 所在的Layer Purpose
layout pinTextPurpose string "pin"
layout pinTextSamePurpose boolean nil

; ⑨ Pin Label 的默认对齐方式和方向
layout labelJustify cyclic "centerCenter"  ;; {lowerLeft | centerLeft | upperLeft | ...}
layout pinTextOrientation cyclic "R0"  ;; {RO | R90 | R180 | R270 | MY | MYR90 | MX | MXR90}

📌以上提到的 Pin 和 Label 所涉及的图层设置,实际使用时可以根据具体工艺来调整,建议参考工艺文件中的“Layer Coding Information”章节进行确认和修改。另外,变量名也可能因版本有所不同,具体以你使用的版本文档为准(在对应的设置界面中点击 Help,快速查询)。

( Layer Coding Information )

最后的话

🔔该系列文章已接近尾声!截至目前,Virtuoso 环境变量配置的核心应用场景已基本覆盖(共11项),感谢大家的持续关注。接下来的几篇,我会聚焦在一些特定工具的配置,比如 Library Manager、Layout XL / EAD ,后续还计划补充部分与 Schematic/ADE 工具相关的配置方法,可以继续关注系列更新(应该不🐦)。

👏觉得有用,欢迎点赞、留言和分享~

⋅ END ⋅