skill简介

编程
0 字 / 约 0 分钟
2025/8/17

SKILL 是 Cadence 模拟设计环境(ADE/Virtuoso)内置的一门 高级交互式语言,语法同时兼容 Lisp 的列表处理类 C 的流程控制
换句话说:凡是你能在 GUI 里点的、拖的、填的,SKILL 都能一句话完成;GUI 里做不到的,它也能做。


1. SKILL 能做什么?

场景GUI 内GUI 外
原理图新建、移动、旋转器件,连线,修改属性批量替换 M=8M=16,自动生成差分对
版图画矩形、打孔、DRC一键生成 Pcell、自动布 guard ring、批量 rename cell
仿真ADE 里点选 tran 1n 100n创建 DOE 扫描、批量跑 corner、自动提取结果到 CSV
数据查看波形、测上升时间解析 SPICE 网表、统计功耗、与 MATLAB 交互
流程手动保存 OA 库每晚定时 check-in、生成 diff report

一句话:只要你能描述规则,SKILL 就能自动化


2. SKILL 解释器:CIW(Command Interpreter Window)

  • 启动即见:打开 Virtuoso 后,最上方的小窗口就是 CIW。
  • 即时交互:在 CIW 的 > 提示符后输入任何 SKILL 表达式,立即执行。
    cadence
    ; 打印当前设计库
    println( getCurrentLib() )
    
    ; 在光标处放一个 PMOS
    dbCreateInst( deGetCellView() "pmos" "techLib" "pmos4" 0:0 "R0" 1 )
  • 历史与补全:上下键回溯命令;Tab 补全函数名。
  • 脚本入口:CIW 的 load("~/myScript.il") 可把外部 SKILL 文件一次性载入。

3. 语言特色一瞥

cadence
;; Lisp 风格:列表 + 递归
(defun factorial (n)
  (cond ((zerop n) 1)
        (t (* n (factorial (sub1 n))))))

;; C 风格:for/while + 数组
procedure( printArray(a)
  for(i 0 sub1(length(a))
    printf("%d\n" a[i])
  )
)
  • 变量:动态类型,无需声明。
  • 对象:面向 OA 数据库(db、tech、inst、net …)。
  • 扩展:与 C 语言接口(ipcBeginProcess)或 Python(skillBridge)。

4. 30 秒上手范例

需求:把当前 cell 中所有电阻值从 1k 改为 2k

  1. 在 CIW 输入或保存为 fixR.ilload
    cadence
    foreach(inst dbGetTrueOverlaps(deGetCellView() bBox list("res"))~>inst
      when(inst~>objType == "inst" && inst~>master~>name == "res")
        inst~>r = 2e3
    )
    println("Done!")
  2. 回车 → 版图里所有 res 立即翻倍。

5. 下一步

  • 系统教程:Cadence Online Support ▸ Training ▸ SKILL Language Programming
  • 速查表:在 CIW 输入 help("strcat") 查看任何函数原型。
  • 社区资源:GitHub 搜索 cds-skill-lib,或直接 load 同事祖传脚本继续魔改。

把重复劳动交给 SKILL,把时间留给真正的模拟设计!