转工艺笔记

tower 转到 xfab 工艺

原理图

  1. tower 工艺默认单位 um,而 xfab 工艺默认单位 m,需要修改 skill 脚本来实现(已解决)
  2. tower 工艺使用 fingerW 来计算总 W,xfab 工艺使用总 W 和 finger 数量(skill 脚本转换,已解决)

问题:

  1. 3.3V 管子选哪个?ne3?
  2. LVS 问题: 以 blockB_lyf full_adder_1bit 为例,尺寸有 1% 偏差(很多其它地方也是)
  3. 很多错误是转之前就存在的,原来的版图的 DRC 和 LVS 就存在问题

版图

  1. 将所需版图导出 Stream,GDS 文件
  2. 修改 map 文件(已完成),从源工艺到目标工艺
  3. 将导出的 gds 文件导入到目标工艺项目中
  4. 将末尾带编号的器件,换成库中对应尺寸的器件,然后删除并在上一级打散即可

map 文件

ACTIVE drawing 3 0
AREA2 drawing 4 0 
CS drawing 15 0
GC drawing 13 0
GC label 13 3
GC_nooconn ny 13 4
M1 drawing 16 0
M1 label 16 3
M2 drawing 18 0
M2 label 18 3
M3 drawing 28 0
M3 label 28 3
NS drawing 34 0
PAD drawing 19 0
TOP_M drawing 31 0
TOP_M label 31 3
TOP_V drawing 29 0
V2 drawing 17 0
V3 drawing 27 0
WB drawing 68 0
WN drawing 2 0
XN drawing 8 0
XP drawing 7 0
instance drawing
prBoundary drawing 190 0
text drawing 230 0

器件替换 Skill 脚本

procedure(CCSdelInstCreate(library @optional
    ;; Modify device list as per your primitive devices
    (deviceMapList '(
        ("pmos_18" ("PRIMLIB" "pe"))
        ("nmos_18" ("PRIMLIB" "ne"))
        ("pmos_33" ("PRIMLIB" "pe3"))
        ("nmos_33" ("PRIMLIB" "ne3"))
        ("ddwnps18" ("PRIMLIB" "ddnw"))
    ))
    ;; Modify propMapList as per the properties you want to copy
    (addSuffixProps '("w" "l" "fw")) 
    (propMapList '(
        ("l" "l")
        ("w" "wtot")
        ("m" "m")
        ("fingers" "ng")
    ))
    "tll"
)
let (
    (cv cellname name transform libId instId deviceList deviceTable propTable)

    libId = ddGetObj(library)
    unless(libId error("Specified library: %s does not exists, cannot proceed!\n" library))

    deviceTable = makeTable("deviceTable")
    foreach (dev deviceMapList 
        deviceTable[car(dev)] = cadr(dev)
        deviceList = cons(car(dev) deviceList)
    )

    propTable = makeTable("propTable")
    foreach (cellId libId~>cells
        ;; Check if the cell has schematic view
        if (exists(x cellId~>views~>name (x == "schematic"))
            then
            printf("Operating on Lib: %s Cell:%s View: schematic\n" library cellId~>name )
            cv = dbOpenCellViewByType(library cellId~>name "schematic"  "schematic"  "a")

            ;; Check if cellview has the instances of given device
            foreach (inst cv~>instances
                if (member(inst~>cellName deviceList) then
                    transform = inst~>transform
                    name = inst~>name
                    cellname = inst~>cellName

                    ;; Populate old property values to table
                    cdfId = cdfGetInstCDF(inst)
                    foreach (propList propMapList
                        propTable[car(propList)] = cdfFindParamByName(cdfId car(propList))~>value
                    ) ;; foreach

                    ;; Delete old instance
                    dbDeleteObject(inst)

                    ;; Create new instance
                    instId = dbCreateInstByMasterName(cv car(deviceTable[cellname])
                        cadr(deviceTable[cellname])
                        "symbol" name 
                        car(transform)
                        cadr(transform))

                    ;; Populate the inst parameter values from prop table
                    foreach (propList propMapList
                        let ((oldProp newProp oldValue)
                            oldProp = car(propList)
                            newProp = cadr(propList)
                            oldValue = propTable[oldProp]

                            if (oldValue && stringp(oldValue) && member(oldProp addSuffixProps)
                                then dbSet(instId strcat(oldValue "u") newProp)
                                else dbSet(instId oldValue newProp)
                            ) ;; end of if
                        ) ;; end of foreach
                    dbSet(instId "DeviceWidth" "calcMethod")
                ) ;; if member
            ) ;; foreach inst

            ;; Uncomment below line to check and save the cellview
            ;; if(dbIsCellViewModified(cv) then schCheck(cv) dbSave(cv))
        ) ;; if
    ) ;; foreach
) ;; let
) ;; proc