在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 230|回复: 9

[求助] 求助,用SKILL写一个反相器

[复制链接]
发表于 前天 19:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

/* 创建或打开库 */
libName = "myLib"
techLibPath = "/eda/processlib/HHGRACE/350nm/BCD350GE/PDK/HG_BCD350GE_PDK_1P4M_TTOPME/models/bcd350ge_v14.scs"  ;
if(ddGetObj(libName) then
    printf("Library %s exists.\n" libName)
else
    createLib(libName techLibPath 'nil)

/* 创建原理图Cell */
cellName = "inverter"
viewName = "schematic"
cvId = schOpenCellView(libName cellName viewName "schematic" "w")
when(!cvId
    cvId = pcDefineCellView(list(
        'lib libName
        'cell cellName
        'view viewName
        'viewType "schematic"
    ))
)

/* 器件参数配置 */
pmosParams = list(
    list("w" 1e-6)    ; PMOS宽度
    list("l" 0.18e-6) ; 沟道长度
)

nmosParams = list(
    list("w" 0.5e-6)  ; NMOS宽度
    list("l" 0.18e-6)
)

/* 放置PMOS */
pmosId = dbCreateInst(
    cvId
    "/eda/processlib/HHGRACE/350nm/BCD350GE/PDK/HG_BCD350GE_PDK_1P4M_TTOPME/models/bcd350ge_v14.scs"    ;
    "phd24"            ; PMOS器件名
    "M1"               ; 实例名
    list(0:50 0)       ; 坐标(x:y)
    "R0"               ; 旋转角度
)
dbSetParamList(pmosId pmosParams)

/* 放置NMOS */
nmosId = dbCreateInst(
    cvId
    "/eda/processlib/HHGRACE/350nm/BCD350GE/PDK/HG_BCD350GE_PDK_1P4M_TTOPME/models/bcd350ge_v14.scs"    ;
    "nhd24"            ; NMOS器件名
    "M2"
    list(0:-50 0)
    "R0"
)
dbSetParamList(nmosId nmosParams)

/* 放置电源符号 */
vddId = dbCreateInst(
    cvId
    "analogLib"
    "vdd"
    "VDD"
    list(0:100 0)
    "R0"
)

gndId = dbCreateInst(
    cvId
    "analogLib"
    "gnd"
    "GND"
    list(0:-100 0)
    "R0"
)

/* 创建端口 */
inputPort = dbCreatePin(
    cvId
    "A"                ; 端口名
    "input"            ; 类型
    "left"             ; 方向
    list(-50:0)        ; 位置
)

outputPort = dbCreatePin(
    cvId
    "Y"
    "output"
    "right"
    list(50:0)
)

/* 连接线路 */
; 输入线
schHiCreateWire(cvId list(
    list(-50:0)        ; 输入端口
    list(0:0)          ; 栅极连接点
))

; 输出线
schHiCreateWire(cvId list(
    list(0:0)          ; 漏极连接点
    list(50:0)         ; 输出端口
))

; VDD连接
schHiCreateWire(cvId list(
    list(0:50)         ; PMOS源极
    list(0:100)        ; VDD符号
))

; GND连接
schHiCreateWire(cvId list(
    list(0:-50)        ; NMOS源极
    list(0:-100)       ; GND符号
))

/* 验证保存 */
schCheck(cvId)
dbSave(cvId)
dbClose(cvId)
printf("Inverter schematic created successfully in %s/%s.\n" libName cellName)
 楼主| 发表于 前天 20:01 | 显示全部楼层
小弟新手,在CIW中load 显示error,不知道代码有什么问题,大佬有写好的SKILL脚本吗
发表于 前天 20:05 | 显示全部楼层
一步步运行 debug不行么
发表于 前天 20:30 | 显示全部楼层
techLibpath给错了吧,不应该是model file
 楼主| 发表于 昨天 00:14 | 显示全部楼层


lurenjie123 发表于 2025-4-2 20:05
一步步运行 debug不行么


skill ide里面跑没有错误
 楼主| 发表于 昨天 09:07 | 显示全部楼层


dtt0000 发表于 2025-4-2 20:30
techLibpath给错了吧,不应该是model file


修改了一下,还是error,在SKILL IDE里面 有一行红色的,发楼下了
 楼主| 发表于 昨天 09:09 | 显示全部楼层
有一行红色

有一行红色

有一行红色
 楼主| 发表于 昨天 09:36 | 显示全部楼层


lurenjie123 发表于 2025-4-2 20:05
一步步运行 debug不行么


请问怎么一步步run,我设置了断点,但是点了next没反应,只能lint current tab
9e58fea0a0f7175ca805b022cd01919.jpg
发表于 昨天 16:36 | 显示全部楼层
你很多不存在的函数是生造出来的?还是你没有Load进来其他的代码呀?我这边没那些基础函数,也是跑不了的。本以为弄来一个好脚本可以玩一玩了呢 ......
 楼主| 发表于 昨天 17:28 | 显示全部楼层
procedure(createInverterSchematic(@key (libName "myLib")
                                  (cellName "inverter")
                                  (pmosWidth 1e-6)
                                  (nmosWidth 500e-9)
                                  (length 45e-9)
                                  (vddName "VDD")
                                  (gndName "VSS")
                                  (wireLayer "M1")
                                  (purpose "drawing"))
    prog((cvId pmosInst nmosInst inputPin outputPin vddPin gndPin)
        ; 检查目标库是否存在
        unless(ddGetObj(libName)
            error("Library %s does not exist! Create library first." libName)
        )

        ; 强制打开schematic编辑窗口
        cvId = dbOpenCellViewByType(libName cellName "schematic" "schematic" "w")
        unless(cvId
            error("Failed to create schematic cellview")
        )
        hiSetCurrentWindow(cvId->window) ; 设置当前窗口为schematic

        ; 创建PMOS晶体管(使用analogLib标准器件)
        pmosInst = dbCreateParamInst(
            cvId
            list("analogLib" "pmos" "symbol") ; 固定器件路径
            "MP0"                             ; 实例名
            list(                            ; 参数列表
                list("W" pmosWidth)
                list("L" length)
            )
            list(0:0 2:0)   ; 坐标(x y)
            0              ; 旋转角度
            "R0"           ; 方向
        )

        ; 创建NMOS晶体管
        nmosInst = dbCreateParamInst(
            cvId
            list("analogLib" "nmos" "symbol")
            "MN0"
            list(
                list("W" nmosWidth)
                list("L" length)
            )
            list(0:0 -2:0)
            0
            "R0"
        )

        ; 创建输入端口(左侧)
        inputPin = dbCreatePin(
            cvId
            list(-3:0 0:0)   ; 坐标
            "input"          ; 名称
            "input"          ; 类型
            "R0"             ; 方向
            0.24:0.24        ; 尺寸
        )

        ; 创建输出端口(右侧)
        outputPin = dbCreatePin(
            cvId
            list(3:0 0:0)
            "output"
            "output"
            "R0"
            0.24:0.24
        )

        ; 创建VDD电源(顶部)
        vddPin = dbCreateTerminal(
            cvId
            list(0:0 3:0)
            vddName
            "power"
            "R0"
        )

        ; 创建VSS地(底部)
        gndPin = dbCreateTerminal(
            cvId
            list(0:0 -3:0)
            gndName
            "ground"
            "R0"
        )

        ; 连线操作(栅极连接)
        schCreateWire(
            cvId
            "path"
            list(
                list(-2:0 0:0)  ; 输入线起点
                list(0:0 0:0)    ; 栅极连接点
            )
            0.1        ; 线宽
            wireLayer  ; 金属层
            purpose     ; 目的层
            nil        ; isRectangle
            nil        ; isStub
            "full"     ; snapMode
        )

        ; 连线操作(输出级)
        schCreateWire(
            cvId
            "path"
            list(
                list(0:0 1:0)   ; PMOS漏极
                list(0:0 -1:0)  ; NMOS漏极
                list(2:0 0:0)    ; 输出线终点
            )
            0.1
            wireLayer
            purpose
            nil
            nil
            "full"
        )

        ; 保存并关闭
        dbSave(cvId)
        dbClose(cvId)
        printf("Inverter %s/%s created successfully!\n" libName cellName)
        t
    )
)小弟新手,可能之前那个代码不太行,这次好像都是基础函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-4 10:01 , Processed in 0.031495 second(s), 8 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表