每天分享 Cadence 操作 · Schematic 自动化

Cadence SKILL:如何创建 Schematic 并放置管子

从新建 schematic cellView 开始,获取编辑对象,放置 NMOS 与 PMOS,创建连线,最后保存并关闭。

CadenceSKILL每天分享 Cadence 操作Cadence 的 SKILL 应用
Cadence schematic 中放置的 PMOS、NMOS 及连接线

脚本执行结果:PMOS 位于 NMOS 上方,并由一条线连接。

Cadence SKILL 创建 schematic、放置器件并连线的代码

完整 SKILL 示例:创建 cellView、放置器件、连线、保存并关闭。

本文通过一个最小示例演示如何用 Cadence SKILL 创建新的 schematic,并在其中放置 analogLib 的 NMOS 与 PMOS,再创建一条连接线。示例完成后会保存并关闭 cellView。

1. 创建新的 Schematic

使用 deNewCellView 创建并打开新的 cellView:

create-schematic.il
windowId = deNewCellView(
  "test1"
  "testschematic"
  "schematic"
  "schematic"
  nil
)
  • test1:新 cellView 所在的 library 名称。
  • testschematic:新建 cell 的名称。
  • schematic / schematic:view 名称与 view 类型。创建 layout 时可改为 layout。
  • nil:使用默认窗口大小。

2. 获取正在编辑的 CellView ID

创建窗口后,需要取得对应的数据库对象 ID。后续放置器件、连线、保存等操作都依赖这个对象:

get-cellview.il
cvId = geGetEditCellView()

3. 放置 NMOS

在坐标 (0 0) 放置 analogLib 中的 NMOS symbol,实例名为 nm0,方向为 R0

place-nmos.il
nm0 = dbCreateInstByMasterName(
  cvId "analogLib" "nmos" "symbol"
  "nm0" list(0 0) "R0" 1
)

4. 放置 PMOS

使用相同方法,在 (0 1) 放置 PMOS,使其位于 NMOS 上方:

place-pmos.il
pm0 = dbCreateInstByMasterName(
  cvId "analogLib" "pmos" "symbol"
  "pm0" list(0 1) "R0" 1
)

5. 创建连接线

schCreateWire(0 0)(0 1) 之间创建一条 full wire:

create-wire.il
schCreateWire(
  cvId "draw" "full"
  list(0:0 0:1)
  0.0625 0.0625 0.0
)

6. 保存并关闭

所有对象创建完成后,先保存,再关闭 cellView:

save-close.il
dbSave(cvId)
dbClose(cvId)

完整示例

create_schematic.il
procedure(test1()
  windowId = deNewCellView(
    "test1" "testschematic"
    "schematic" "schematic" nil
  )
  cvId = geGetEditCellView()
  nm0 = dbCreateInstByMasterName(
    cvId "analogLib" "nmos" "symbol"
    "nm0" list(0 0) "R0" 1
  )
  pm0 = dbCreateInstByMasterName(
    cvId "analogLib" "pmos" "symbol"
    "pm0" list(0 1) "R0" 1
  )
  schCreateWire(
    cvId "draw" "full"
    list(0:0 0:1)
    0.0625 0.0625 0.0
  )
  dbSave(cvId)
  dbClose(cvId)
)
test1()

下期预告

用 SKILL 创建基础反相器

下一篇将在本文基础上补齐器件端口连接、电源与输入输出网络,自动生成一个最基础的 CMOS 反相器。

查看更多 Cadence 教程