1. Virtuoso原理图数据导出需求解析
在芯片设计流程中,Cadence Virtuoso作为行业标准EDA工具,承载着从原理图设计到物理实现的全流程工作。但原生数据格式(如OA库)的封闭性常常成为数据流转的瓶颈。最近在多个设计团队中频繁出现这样的需求:如何将Virtuoso中的原理图信息(包括器件参数、连接关系、层次结构等)导出为JSON这类通用结构化数据格式?
这个需求的典型场景包括:
- 设计数据归档与版本管理(JSON比二进制文件更易做diff)
- 跨平台数据交换(与第三方仿真工具或数据分析系统对接)
- 自动化设计检查(通过脚本解析JSON进行DRC规则验证)
- 设计文档自动生成(基于JSON生成HTML/PDF格式报告)
以H桥驱动电路设计为例,当需要将功率管参数传递给热仿真工具时,传统做法是手动截图+Excel整理,而JSON导出可实现:
json复制{
"MOSFET": {
"M1": {
"type": "PMOS",
"W": "10u",
"L": "0.18u",
"Vth": "0.45V"
},
"M2": {
"type": "NMOS",
"W": "5u",
"L": "0.18u",
"Vth": "0.35V"
}
}
}
2. Virtuoso数据提取技术路线
2.1 SKILL脚本核心能力解析
Virtuoso内置的SKILL语言是数据提取的关键,其核心对象模型包括:
- schId:原理图窗口句柄
- cvId:设计单元视图(CellView)标识
- instId:器件实例对象
- netId:网络连接对象
典型数据提取流程:
skill复制; 获取当前打开的原理图
schId = geGetEditCellView()
cvId = schId~>cellView
; 遍历所有器件实例
foreach(instId cvId~>instances
printf("Instance: %s\n", instId~>name)
; 提取器件参数
foreach(param instId~>parameters
printf(" Param: %s = %s\n", param~>name, param~>value)
)
)
; 遍历所有网络连接
foreach(netId cvId~>nets
printf("Net: %s\n", netId~>name)
)
2.2 JSON生成技巧
SKILL本身不支持直接生成JSON,需要通过字符串拼接实现。关键处理点包括:
- 特殊字符转义(如引号、换行符)
- 数组和对象的嵌套处理
- 数据类型转换(Virtuoso中的单位量纲处理)
改进后的JSON生成函数示例:
skill复制procedure(jsonEscapeString(str)
