用skill语言写抽取多层次cell。建立spef数据的代码
时间: 2024-02-20 20:57:12 浏览: 60
基于Skill语言的版图数据处理程序开发.pdf
以下是用skill语言编写的抽取多层次cell并建立spef数据的代码:
```
procedure extract_multilevel_cell(cell_name)
// 定义抽取多层次cell的过程,输入参数为cell_name
dbSetEditCell(cell_name)
// 进入cell_name所在的库,并设置该cell为编辑状态
cellTopCellView = "schematic"
// 设置cell的顶层视图为schematic
cellInstList = cellFlatten(cellTopCellView)
// 列出所有实例
for cellInst in cellInstList do
// 遍历所有实例
cellType = dbGetProp(cellInst, "type")
// 获取实例类型
if (cellType == "cell") then
// 如果该实例是一个cell
extract_multilevel_cell(cellInst)
// 递归调用该过程,继续抽取该cell的子cell
else
// 如果该实例不是一个cell
extract_inst_spef(cellInst)
// 调用建立spef数据的过程
end
end
dbSave()
// 保存修改后的cell
end
procedure extract_inst_spef(inst_name)
// 定义建立spef数据的过程,输入参数为inst_name
instPortList = dbCellGetPorts(inst_name)
// 获取实例的端口列表
instPinNameList = ""
// 定义实例的引脚名称列表
for instPort in instPortList do
// 遍历实例的端口列表
instPortName = dbGetProp(instPort, "name")
// 获取端口名称
instPortDir = dbGetProp(instPort, "direction")
// 获取端口方向
if (instPortDir == "input") then
// 如果该端口是输入端口
instPinNameList = instPinNameList + instPortName + ","
// 将该端口名称加入实例的引脚名称列表
end
end
instPinNameList = instPinNameList[1:-2]
// 去掉列表末尾的逗号
spefName = inst_name + ".spef"
// 定义spef文件名称
dbWriteSpef(spefName, inst_name, instPinNameList)
// 建立spef数据
end
```
以上代码实现了抽取多层次cell并建立spef数据的功能。输入参数为需要抽取的cell的名称。其中,`extract_multilevel_cell`过程递归调用自身,用于抽取该cell的子cell;`extract_inst_spef`过程用于建立实例的spef数据。
阅读全文