SKILL脚本能否实现原理图元器件的查找与替换功能?
SKILL 原理图批量元器件替换实现方案
实现逻辑总览
整个功能分为三个核心环节:读取CSV中存储的原始器件-替换目标映射关系→遍历当前打开原理图的所有元器件实例→匹配映射规则后调用原生API执行替换,保留原有连线和属性。
各环节实现说明
1. CSV映射表读取
你已经掌握SKILL文件I/O能力,可直接将CSV中的映射关系读取存入SKILL关联表,方便后续快速匹配。示例CSV格式为原始库名,原始单元名,目标库名,目标单元名,目标视图名,读取代码如下:
; 初始化映射关联表 replaceMap = makeTable("replaceMap" nil) ; 替换为你的CSV文件实际路径 csvPath = "/your/path/replace_list.csv" inFile = inopen(csvPath "r") if(inFile then while(getLine(inFile) line = getCurrentLine(inFile) ; 按逗号拆分字段,可根据实际CSV分隔符调整 fields = parseString(line ",") if(length(fields) >= 5 then ; 用原始库+原始单元名作为匹配key matchKey = strcat(nth(0 fields) ":" nth(1 fields)) replaceMap[matchKey] = list(nth(2 fields) nth(3 fields) nth(4 fields)) ) ) inclose(inFile) else printf("CSV文件打开失败,请检查路径\n") return() )
2. 原理图元器件遍历
通过SKILL原生API获取当前打开的原理图对象,遍历所有元器件实例:
; 获取当前激活的原理图窗口 schWin = schGetCurrentWindow() if(!schWin then printf("请先打开需要处理的原理图文件\n") return() ) ; 获取原理图对应的cellview对象 curCV = schGetWindowCellView(schWin) ; 遍历所有元器件实例 instList = curCV~>insts
3. 元器件替换核心API
SKILL原生提供schReplaceInstance()函数专门用于原理图元器件替换,支持保留原有连线、属性等配置,核心参数说明:
- 第一个参数:待替换的元器件实例对象
- 第二到第四个参数:目标元器件的库名、单元名、视图名
- 可选参数
?keepProp t:保留原器件所有用户自定义属性 - 可选参数
?keepConn t:保留原器件所有连线关系 - 可选参数
?pinMap <映射表>:如果替换前后器件引脚名不一致,可指定引脚映射关系
匹配替换的示例代码:
foreach(inst instList curKey = strcat(inst~>libName ":" inst~>cellName) ; 匹配到替换规则则执行替换 if(replaceMap[curKey] then targetLib = car(replaceMap[curKey]) targetCell = cadr(replaceMap[curKey]) targetView = caddr(replaceMap[curKey]) ; 执行替换 schReplaceInstance(inst targetLib targetCell targetView ?keepProp t ?keepConn t) printf("已替换器件 %s:%s/%s → %s/%s\n", inst~>name inst~>libName inst~>cellName targetLib targetCell) ) )
注意事项
- 执行脚本前请先备份原理图文件,避免误操作导致数据损失
- 请提前确认目标元器件在当前Cadence工程的库搜索路径中可正常访问
- 若替换前后器件引脚定义存在差异,需自行补充
?pinMap参数配置引脚映射关系 - 可根据需求调整匹配规则,比如加入按元器件位号匹配的逻辑
内容的提问来源于stack exchange,提问作者tlietz
相关产品推荐
相关产品推荐

