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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
楼主: zhangnn2014

[原创] 求一键画好差分对的脚本

[复制链接]
发表于 2025-10-9 10:17:38 | 显示全部楼层


   
xtj1204 发表于 2021-4-21 16:08
去年根据论坛大神的灵感自己写了个脚本,不过只能契合自家的工艺


那大佬现在有能参考的脚本吗,或者能看一下你自己写的脚本吗。有偿都行。
回复 支持 反对

使用道具 举报

发表于 2025-10-9 23:01:21 | 显示全部楼层


   
氵Euphonium 发表于 2025-10-9 10:17
那大佬现在有能参考的脚本吗,或者能看一下你自己写的脚本吗。有偿都行。 ...


当时是在服务器上写的,后面只拷了一部分内容到本地,过两天我找找
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层


   
氵Euphonium 发表于 2025-10-9 10:17
那大佬现在有能参考的脚本吗,或者能看一下你自己写的脚本吗。有偿都行。 ...


思路就是用gui获取差分对的参数信息,然后再调用mos,打孔,连线


cond(
                (num== "4"
                        /****dum3        dum4*******/
                        /****M1(MA)    (MB)M2*****/
                        /****M1(MB)    (MA)M2*****/
                        /****M1(MB)    (MA)M2*****/
                        /****M1(MA)    (MB)M2*****/
                        /****dum1         dum2******/
                /*******************************************/
                /*****************createM1,M2************/
                /*******************************************/

                /****************create M1****************/
                fingers=4
                M1=dbCreateInstByMasterName(cv tech~>libName cellName "layout" "Mp" List(0 0) "R90" 1)
                M1~>l=length M1~>fw=width
                M1~>fingers=fingers
                /*****************Create M2****************/
                M2=dbCopyFig(M1 cv list(polyExtensionAA+polywidth+polyspace+polywidth+polyExtensionAAwidth*1e6:0 "R0" 1.0))
                /*******************************************/
                /*******************************************/

                /*********************************************************/
                /****create poly contact and poly rectangle for M1***/
                /*********************************************************/
                M1_xy=M1~>xy
                x1=car(M1_xy)+polyExtensionAA+contCenterToPoly
                y1=cadr(M1_xy)+length*1e6/2
                cont=dbCreateVia(cv polycontDefId list(x1 y1) "R90" viaParams)
                llx_poly=car(M1_xy)+polyExtensionAA
                lly_poly=cadr(M1_xy)
                urx_poly=car(M1_xy)+polyExtensionAA+polyWidth
                ury_poly=cadr(M1_xy)+length*1e6
                polyrect=dbCreateRect(cv list("0_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
                if(length*1e6>=1.54 then
                        for(i 2 fingers
                                cont=dbCopyFig(cont cv list(0:fingerPitch "R0" 1.0))
                                polyrect=dbCopyFig(polyrect cv list(0:fingerPitch "R0”1.0))
                        );end for
                else dbcopyFig(cont cv list(0:fingerPitch+length*1e6/2+fingerSpace/2 "R0" 1.0))
                        llx_poly=car(M1_xy)+polyExtensionAA lly poly=cadr(MI_xy)+fingerPitch
                        urx_poly=car(M1_xy)+polyExtensionAA+polywidth
                        ury_poly=cadr(M1_xy)+length*1e6+2*fingerPitch
                        dbcreateRect(cv list("0_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
                        dbCopyFig(cont cv list(0:3*fingerPitch "R0” 1.0))
                        dbCopyFig(polyrect cv list(0:3*fingerPitch "R0" 1.0))
                );end if
                /**************************************************/                       
                /**************************************************/

                /**************************************************/
                /***create poly contact and poly rectangle for M2****/
                /**************************************************/
                M2_xy=M2~>xy
                x2=car(M2_xy)-width*1e6-polyExtensionAA-contCenterToPoly
                y2=cadr(M2_xy)+length*1e6/2
                cont=dbCreateVia(cv polycontDefId list(x2y2) "R90" viaParams)
                llx_poly=car(M2_xy)-width*1e6-polyExtensionAA
                lly_poly=cadr(M2_xy)
                urx_poly=llx_poly-polyWidth
                ury_poly=cadr(M2_xy)+length*1e6
                polyrect=dbCreateRect(cv lis("0_L71" "drawing") list(llx_poly: lly_poly urx_poly:ury_poly))
                if(length*le6>=1.54 then
                        for(i 2 fingers
                                cont=dbCopyFig(contcv list(0:fingerPitch "R0" 1.0))
                                polyrect=dbCopyFig(polyrect cv list(0:fingerPitch "R0" 1.0))
                        );end for
                else dbCopyFig(cont cv list(0:fingerPitch+length*1e6/2+fingerSpace/2 "R0”1.0))
                        llx_poly=car(M2_xy)-width*1e6-polyExtensionAA
                        lly_poly=cadr(M1_xy)+fingerPitch
                        urx_poly=llx_poly-polywidth
                        ury_poly=cadr(M1_xy)+length*le6+2*fingerPitch
                        dbcreateRect(cv list("P0_L71" "drawing") list(llx_poly:lly_poly urx_poly:ury_poly))
                        dbcopyFig(cont cv list(0:3*fingerPitch "R0" 1.0))
                        dbCopyFig(polyrect cv list(0:3*fingerPitch "R0" 1.0))
                );end if
                /**************************************************/
                /**************************************************/

                /*************************************************************/
                /*****create gate connect path and dum to M1,M2******/
                /*************************************************************/

                /*********create gate connect path to MA*************/
                if(length*1e6>=1.54 then
                lecreatePath(cv list("1M_L111" "drawing")
                list(x1+0.02:y1-0.48 x1+0.02:y1+length*1e6/2+fingerSpace/2
                x2-0.02:y1+length*1e6/2+fingerSpace/2
                x2-0.02y1+length*1e6/2+fingerSpace/2)+2*fingerPitch
                x1+0.02y1+length*le6/2+fingerSpace/2)+2*fingerPitch
                x1+0,02y1+length*1e6/2+fingerSpace/2)+2*fingerPitch+fingerSpace/2+length*1e6/2+0.48)0.48)
                else
                leCreatePath(cv list("1M_L111" "drawing")
                list(x1+0.02:y1-0.48
                x1+0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2-via1CenterToMt1-mtToMtCenterSpace
                x2-0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2-via1CenterToMt1-mtToMtCenterSpace
                x2-0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2-via1CenterToMt1+mtToMtCenterSpace
                x1+0.02:cadr(M1 xy)+fingerPitch+length*1e6+fingerSpace/2+via1CenterToMt1+mtToMtCenterSpace
                x1+0.02:(y1+length*1e6/2+fingerSpace/2)+2*fingerPitch+fingerSpace/2+length*1e6/2+0.48) 0.48)
                );end if
                /*********create gate connect path to MB*************/
                if(length*1e6>=1.54 then
                leCreatePath(cv list("2M_L112" "drawing")
                list(x2-0.02:y2-0.48*2-0.02:y2+length*1e6/2+fingerSpace/2
                x1+0.02:y2+length*le6/2+fingerSpace/2
                x1+0.02:(y1+length*1e6/2+fingerSpace/2)+2*fingerPitch
                x2-0.02:(y1+length*1e6/2+fingerSpace/2)+2*fingerPitch
                x2-0.02:(y1+length*1e6/2+fingerSpace/2)+2*fingerPitch+fingerSpace/2+length*1e6/2+0.48) 0.48)
                else
                leCreatePath(cv list("2M_L112" "drawing")
                list(x2-0.02:y2-0.48
                x2-0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2-via1CenterToMt1-mtToMtCenterSpace
                x1+0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2-via1CenterToMt1-mtToMtCenterSpace
                x1+0.02:cadr(M1 xy)+fingerPitch+length*1e6+fingerSpace/2+via1CenterToMtl+mtToMtCenterSpace
                x2-0.02:cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2+via1CenterToMtmtToMtcenterSpace
                x2-0.02:(y1+length*1e6/2+fingerSpace/2)+2*fingerPitch+fingerSpace/2+length*1e6/2+0.48)0.48)
                );end if

                /************create via1  to MB***************/
                if(length*le6>=1.54 then
                via1_x=car(M1_xy)+polyExtensionAA+vialCenterToPoly
                via1_ y=cadr(M1_xy)+fingerPitch+length*1e6/2
                via1=dbCreateVia(cv via1DefId list(via1_x via1_y) "R90" viaParams)
                via1_y=cadr(M1_xy)+2*fingerPitch+length*1e6/2
                via1=dbCreateVia(cv via1DefId list(via1_x via1_y) "R90" viaParams)
                else
                via1_x=car(M1_ xy)+polyExtensionAA+via1CenterToPoly
                via1_y=cadr(M1_xy)+fingerPitch+length*1e6+fingerSpace/2
                dbCreateVia(cv via1DefId list(via1_x via1_y) "R90" viaParams)
                );end if
                via1_x=car(M2_xy)-width*1e6-polyExtensionAA-via1CenterToPoly
                via1_y=cadr(M2_xy)+length*1e6/2
                via1=dbCreateVia(cv via1DefId list(via1_x via1_y) "R90" viaParams)
                via1_y=cadr(M2_xy)+fingerPitch*3+length*1e6/2
                via1=dbCreateVia(cv viaDefId list(via1_x via1_y) "R90" viaParams)
                /**************create dum to M1,M2*****************/
                dum1=dbCopyFig(M1 cv list(0:-1.04 "R0" 1.0))
                dum1->l=dumLength dum1->fingers=1.0
                dum2=dbCopyFig(duml cv list(polyExtensionAA+polywidth+polyspace*polywidth+polyExtensionAAwidth*1e6:0 "R0" 1.0))
                dum3=dbcopyFIg(dumlcv list(:drainContToPotydumength*e6+fingerspace+3 fingerpitch+Length*1e6+drainContToPoly "R0" 1.0))
                dum4=dbCopyFig(dum3cv list(polyExtensionAA+polywidth+polySpace+polywidth+polyExtensionAAwidth*1e6:0“R0” 1.0))


回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层


   
xtj1204 发表于 2025-10-12 17:37
思路就是用gui获取差分对的参数信息,然后再调用mos,打孔,连线


万分感谢

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X 关闭广告

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

GMT+8, 2025-10-17 19:08 , Processed in 0.013851 second(s), 4 queries , Gzip On, Redis On.

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