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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 363|回复: 3

[求助] Pcell的Cont均匀分布

[复制链接]
发表于 2024-12-3 00:49:07 | 显示全部楼层 |阅读模式
200资产

请问各位大侠,怎么实现制作的Pcell,当Width值改变时S/D端的Cont根据Width的值均匀的分布在有源区。(做出来的效果应该和PDK上一直)

我使用 skill(script) 使其他层随 w、l 变化,但无法使 CONT 像 PDK 内容一样均匀分布。 是否有生成 CONT(或 MOSFET)的脚本代码?我想解决这个问题。

最佳答案

查看完整内容

用SKILL的话,可以做很多精细化的操作啊。先根据W算出可以放下多少个孔,再根据W、孔的个数、DIFF包孔的值计算孔间距,然后根据计算出来的孔间距画孔。 或者直接用rod类函数,画源漏金属,孔作为sub rect,用'distribute方式填充
发表于 2024-12-3 00:49:08 | 显示全部楼层
用SKILL的话,可以做很多精细化的操作啊。先根据W算出可以放下多少个孔,再根据W、孔的个数、DIFF包孔的值计算孔间距,然后根据计算出来的孔间距画孔。

或者直接用rod类函数,画源漏金属,孔作为sub rect,用'distribute方式填充
 楼主| 发表于 2024-12-3 16:24:03 | 显示全部楼层


acrofoxAgain 发表于 2024-12-3 06:03
用SKILL的话,可以做很多精细化的操作啊。先根据W算出可以放下多少个孔,再根据W、孔的个数、DIFF包孔的值 ...


I wanted to create a script like this to make the dummy transistors in the default PDK easier to use.
I had a hard time putting together the skill code, but I used what you taught me and eventually succeeded.
Thanks.

发表于 7 天前 | 显示全部楼层
本帖最后由 Visen_Chiang 于 2024-12-5 18:37 编辑

1.定义变量
        AA_enc_CT    =  x                                      //DRC要求的最小AA_enc_CT

        CT_size         = a                                       //CT的size
        CT_smin       = b                                       //CT的最小space,区别于CT 3x3或者4x4阵列时space拉大的情况
        CT_pmin       = CT_size + CT_smin             //CT的最小pitch
2.进行一些运算
        NUM             = fix((W - 2*AA_enc_CT - CT_size) / CT_pmin) + 1     //减去2*AA_enc_CT是满足DRC,因为n个CT有1个CT_size加上n-1个CT_pmin
                                                                                                         //减去一个CT_size之后除以CT_pmin向中间取整,再把刚才删掉的那个CT加回来,就是CT的数目
        deltaY           = W - 2*AA_enc_CT - CT_size - (NUM - 1)*CT_pmin    //将CT压缩成最小的space之后,width还能剩下的满足DRC的可分配的空间
        ACT_enc_Y1  = AA_enc_CT + deltaY/2                                          //得到考虑了DRC要求的CT距离AA Y方向边缘的距离

        ACT_enc_Y2   = AA_enc_CT                                                         //另一种情况
3.生成图形(不讨论循环)
        AA = list("AA" "drawing")
        CT = list("CT" "drawing")
        rodCreateRect(
                ?layer        AA
                ?width       SA_X
                ?length      W
                ?origin       0:0
                ?subRectArray
                        list(
                                list(
                                        ?layer                       CT
                                        ?width                      CT_size
                                        ?length                     CT_size
                                        ?lowerLeftOffsetX       ???                                  //X方向上AA到CT的距离
                                        ?lowerLeftOffsetY       ACT_enc_Y2                     //Y2是CT到AA Y方向固定距离为DRC要求的最小space,其余的CT间距会自动均分
                                                                                                               //如果是ACT_enc_Y1的话,则会让AA按照最小距离等间距生成,并且Y方向居中
                                        ?upperRightOffsetX     -???                                 //为lowerLeftOffsetX的相反数,往上往右是正数,往下往左是负数
                                        ?upperRightOffsetY     -ACT_enc_Y2                    //为lowerLeftOffsetY的相反数
                                        ?spaceX                     CT_smin
                                        ?spaceY                     CT_smin                           //可以不写?spaceY
                                )
                        )
        );;end SAA


如上,生成CT是有两种方式的,一种是居中最小间距等间距生成CT,把空隙挤到上下两边,另一种是保证到AA Y方向边缘固定距离,CT之间均分空隙。
如果项目精度不是0.001的话还需要对CT的间距进行处理
比如精度为0.01,
                       新的间距  =  (fix(间距*100)+1)/100,
这样可以保证在格点上,当然生成CT的时候,lowerLeftOffsetX/Y,也要保证在格点上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-12 05:18 , Processed in 0.016500 second(s), 7 queries , Gzip On, Redis On.

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