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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5993|回复: 18

[求助] 批量调STDCELL的脚本,功能加强

[复制链接]
发表于 2021-3-3 15:05:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zhaoxu12 于 2021-3-3 15:07 编辑

脚本功能描述:1、将一个库或者数个库里的cell(全部是STDCELL),全部调用到一个命名为TOP的cell里;                      2、需要按照STDCELL的拼接点挨个拼接好;
                      3、TOP的分布希望是数排,每一排有10-20个,因为全部放一排的太长了,不方面看;
                      4、每排的STDCELL需要背靠背放三排,目的是检查STDCELL是否有拼接错误。

下面是我写的脚本,可以实现1 2的功能,但是TOP的instances是长长的一排。

20210302.jpg

请各位大神帮忙看看,3 4 的功能要怎么实现? 谢谢啦!


发表于 2021-3-3 15:50:21 | 显示全部楼层
试试把foreach换成for,再加一个y控制每10或20个就从新的一排开始排列
for(i 0 length(allcells)-1
    if(i/10*10==i
    then y=y+xxx ; 换新的一排
        ....
    else
        ...
)
发表于 2021-3-3 15:51:08 | 显示全部楼层
4没看明白什么意思
发表于 2021-3-4 08:42:32 | 显示全部楼层
建议你在放置器件前先遍历整个库,计算一下所有标准单元的总宽度,根据你的单元高度得到总面积,计算出一个正方形的边长,逐个放置单元,放到宽度超出边长时,就换一行。这样得到的图形不一定正方形,但是基本差不多了。
 楼主| 发表于 2021-3-4 15:44:49 | 显示全部楼层


annyzer 发表于 2021-3-3 15:50
试试把foreach换成for,再加一个y控制每10或20个就从新的一排开始排列
for(i 0 length(allcells)-1
    if( ...


没学明白,能详细说下么?

之前我的思路是先把第一个cell放到原点,用caadr获取TOP的bBox的x值,再用dbCreateInst将下一个cell和TOP里的拼接在一起,依次循环将所有的调完,可这样TOP是一排分布的。
可是想放成多排,这个方法并不适用。

4是这个意思:每一排的cell要背靠背放三排。
b6475d83ceb89f440efbfb4fa01201ff.jpg
 楼主| 发表于 2021-3-4 15:46:53 | 显示全部楼层


bigtd_csd 发表于 2021-3-4 08:42
建议你在放置器件前先遍历整个库,计算一下所有标准单元的总宽度,根据你的单元高度得到总面积,计算出一个 ...


具体怎么循环呢?能不能示范一下?
发表于 2021-3-4 16:22:02 | 显示全部楼层


zhaoxu12 发表于 2021-3-4 15:46
具体怎么循环呢?能不能示范一下?


bigtd_layout_nm="layout"
bigtd_sizex_mag=0.5
bigtd_sizeh_std=46.469
bigtd_id_cv=hiGetCurrentWindow()~>cellView
bigtd_design_cell=bigtd_id_cv~>cellName
bigtd_id_lib=bigtd_id_cv~>lib
bigtd_nm_lib=bigtd_id_lib~>name
bigtd_sizex_total=0.0
foreach(bigtd_id_cell bigtd_id_lib~>cells
        when(bigtd_id_cell~>name != bigtd_design_cell
        bigtd_id_temp=dbOpenCellViewByType(bigtd_nm_lib bigtd_id_cell~>name bigtd_layout_nm)
        when(bigtd_id_temp != nil  
            bigtd_id_sizex_temp=car(car(cdr(bigtd_id_temp~>bBox)))-car(car(bigtd_id_temp~>bBox))-2*bigtd_sizex_mag
            bigtd_sizex_total=bigtd_sizex_total+bigtd_id_sizex_temp
        )            
        )
)
bigtd_sizex_cl=bigtd_sizex_total/(int(sqrt(bigtd_sizex_total/bigtd_sizeh_std))+1)
temp_co_x=0.0
temp_co_y=0.0
temp_or="R0"
foreach(bigtd_id_cell bigtd_id_lib~>cells
        when(bigtd_id_cell~>name != bigtd_design_cell
        bigtd_id_temp=dbOpenCellViewByType(bigtd_nm_lib bigtd_id_cell~>name bigtd_layout_nm)
        when(bigtd_id_temp != nil
            temp_nm_inst=strcat("i_",bigtd_id_cell~>name)
            temp_co_list=list(temp_co_x temp_co_y)
            bigtd_id_cr=dbCreateInst(bigtd_id_cv bigtd_id_temp temp_nm_inst temp_co_list temp_or)
            bigtd_id_sizex_temp=car(car(cdr(bigtd_id_temp~>bBox)))-car(car(bigtd_id_temp~>bBox))-2*bigtd_sizex_mag
            temp_co_x=temp_co_x+bigtd_id_sizex_temp
            when(temp_co_x >= bigtd_sizex_cl
                temp_co_x=0.0
                temp_or_flag=temp_or
                when(temp_or_flag=="R0"
                    temp_co_y=temp_co_y+2*bigtd_sizeh_std
                    temp_or="MX"
                )
                when(temp_or_flag=="MX"
                    temp_or="R0"
                )
            )
        )            
        )
)
skill-插入当前库中所有单元的版图.docx (136.82 KB, 下载次数: 171 )



 楼主| 发表于 2021-3-5 11:10:16 | 显示全部楼层


bigtd_csd 发表于 2021-3-4 16:22
bigtd_layout_nm="layout"
bigtd_sizex_mag=0.5
bigtd_sizeh_std=46.469


谢谢谢谢!!好详细,刚看到你的消息,我去学习一下,万分感谢!






发表于 2021-4-23 08:30:35 | 显示全部楼层
赞一个
发表于 2021-8-8 21:51:24 | 显示全部楼层
http://bbs.eetop.cn/thread-898112-2-7.html---消失的7楼---聊天专用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

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

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