← 返回首页

SKILL Script Tutorial

admin Lv.10 skill 2026-06-01 15:19 👁 2 次浏览

Cadence SKILL 脚本编程入门教程

SKILL 是 Cadence Virtuoso 平台的脚本语言,基于 Lisp 语法,掌握 SKILL 编程能大幅提升版图设计效率。本文从实际应用出发,介绍 SKILL 的核心语法和常用版图自动化技巧。

SKILL 基础语法

; 变量定义
let((myVar)
  myVar = 10
  printf("Value: %d\n" myVar)
)

; 列表操作
myList = '(1 2 3 4 5)
car(myList)      ; 返回 1(第一个元素)
cdr(myList)      ; 返回 (2 3 4 5)(剩余元素)
cons(0 myList)   ; 返回 (0 1 2 3 4 5)

; 条件判断
when(db == nil
  printf("Error: database not found\n")
)

实用脚本示例1:批量添加 Label

procedure(addLabelsToPins(cv)
  let((pinList labelName layer)
    pinList = cv~>pins
    foreach(pin pinList
      labelName = pin~>name
      layer = pin~>layer
      dbCreateLabel(cv layer
        pin~>origin
        labelName
        "lowerLeft"
        "R0"
        0.1
      )
      printf("Added label: %s on %L\n" labelName layer)
    )
  )
)

实用脚本示例2:自动测量器件间距

procedure(checkDeviceSpacing(cv minSpacing)
  let((devices dev1 dev2 dist)
    devices = setof(x cv~>instances x~>cellName != "guard_ring")
    for(i 0 length(devices)-1
      for(j i+1 length(devices)-1
        dev1 = nth(i devices)
        dev2 = nth(j devices)
        dist = abs(car(dev1~>xy) - car(dev2~>xy))
        when(dist < minSpacing
          printf("WARNING: %s and %s spacing %.3f < %.3f\n"
            dev1~>name dev2~>name dist minSpacing)
        )
      )
    )
  )
)

实用脚本示例3:一键生成 Guard Ring

procedure(addGuardRing(cv instName ringLayer ringWidth)
  let((inst bbox x0 y0 x1 y1)
    inst = dbFindInstByName(cv instName)
    when(inst
      bbox = inst~>bBox
      x0 = car(car(bbox)) - ringWidth
      y0 = cadr(car(bbox)) - ringWidth
      x1 = car(cadr(bbox)) + ringWidth
      y1 = cadr(cadr(bbox)) + ringWidth
      dbCreateRect(cv list(ringLayer "drawing")
        list(x0:y0 x1:y1)
      )
    )
  )
)

调试技巧

  • 使用 printf 输出中间变量值,快速定位逻辑错误
  • 在 CIW 中输入 skillDebugger() 进入交互调试模式
  • 善用 errset 捕获异常,避免脚本中断
  • 脚本文件扩展名用 .il,通过 load("path/script.il") 加载

常用 API 速查

函数用途
dbOpenCellViewByType
打开 cellview
dbCreateRect创建矩形
dbCreateInst创建实例
dbCreateVia创建 via
hiGetCurrentWindow获取当前窗口
leHiCreateInst交互式创建 instance

进阶建议:学习 SKILL 不要死记语法,而是从解决实际问题出发。建议先从修改现有脚本开始,逐步理解 API 用法,再尝试编写完整自动化流程。

#DRC #Guard Ring #SKILL脚本 #Via规则 #Virtuoso #学习路线 #版图设计

💬 评论 (0)

登录 后发表评论
暂无评论,快来抢沙发吧!