mervin_li的个人空间 https://blog.eetop.cn/1582944 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

<数字后端项目>迭代求完美之Floorplan

热度 9已有 29371 次阅读| 2018-8-31 23:45 |个人分类:后端项目经验|系统分类:芯片设计

天气: 晴朗
心情: 高兴
前言:对于后端工程师来说,floorplan大概是最考验功力的地方。个人对design的数据流的理解和工具进行place的behaver的理解,二者综合起来进行布局才有可能大概率的获得一个较好的结果。那么考量的标准是什么呢?主要就是congestion和timing的结果了。目前,还没有哪家的工具和算法能够完全不借助工程师的经验去进行floorplan,所以这一步一直是限制EDA工具智能化的一个瓶颈。当然,各大EDA供应商也从未停止探索。比如,借助机器学习和AI算法等来加强EDA工具的自主性,来减少人力的劳动。不过,这仍旧是一个漫长的过程,短期内还是需要依靠工程师的功力。

摘要:一版好的Floorplan往往是经过几轮迭代调整,逼近完美而得来的。这里就涉及两大部分,一部分是基本操作,在熟悉各种rule的前提下快速布局,节省手工操作的时间;另一部分就是try布局,结合前段综合以及后面place和route的结果进行反复迭代,达到快速逼近收敛的效果。这里先分享基本操作的一些技巧,帮助工程师提高工作效率。

第一步,分析block和top的关系,根据客户或者设计的需求确定core / chip的大小和形状。需要达到什么样的利用率,core to die的间距是多少等等不一而论。

第二步,分析数据流,理清module之间的talk关系。

A. 直接从前端拿到数据流关系图,进行hard macro的摆放布局;

针对macro数量巨大的情况进行快速分类,将module进行打散,然后根据子module name的关键字将相应的memory摆放到core内,然后用颜色分类,快速区分不同module的macro。有脚本如下:

proc placeMemByName {sram high} {
         set x 0
         set y $high
         set mem [dbGet [dbGet  top.insts.cell.subClass block -p2].name $sram]
         foreach i $mem {
                   placeInstance $i $x $y -placed
                   set width [dbGet [dbGet top.insts.name $i -p].box_sizex]
                   set x [expr $x + $width]
         }
}

利用这个脚本快速将macro放进core内,然后上色:setMultiColorsHier
之后就可以根据数据流的关系图进行macro的顺序摆放。

B. 在缺少前端提供的数据流图的时候,也可以先快速把macro摆进core内,然后在自行分析数据流的关系。

方法一,就是按照gui界面的module之间的flightline的关系绘制数据流,然后进行估计摆放;
方法二,为了进一步确认module之间的具体数据交互关系,可以使用report_timing
进行分析,这一步可能需要花点时间,但是只需要做一次。
例如:report_timing -from [get_cells [all_registers] -filter "fullname =~ *A*" -hierarchical]  -to [get_cells [all_registers] -filter "full_name =~ *B*" -hierarchical]
可以将相应的module的关键字写成list,利用foreach循环report得到完整的数据交互关系文件,再自行分析。

第三步,迭代求完美

初版floorplan布局完成之后,可以进行powerplan等后续操作,然后保存def文件。
兵分两路,一路将def反馈给综合人员,进行 phycail aware 的综合,进一步优化;
另一路,进行place,看overflow和timing的情况,然后直接route,看drc的情况。

这两路同时进行,第二路可以根据overflow和drc的情况进行分析,有针对的调整,以期得到更优化的floorplan;第一路,等待综合结果和上一版进行比较,是否得到优化,采用更优化的一版再run。

如此这般,反复迭代,直到得到一个满足各方面要求的floorplan来。这个迭代次数有可能是一次,有可能是多次,全看工程师的功夫了。不过,如今工具的有很大的改进,比如C家的INNOVUS,可以用工具进行自动floorplan,那么我们也可以借鉴工具做的布局,虽然工具未必完美,倒是有一定的参考价值。

小结:floorplan是后端工程师做项目的开始步骤,也是关键步骤,这里的功夫需要一定的脚本能力,更需要对布局的理解和经验,甚至是一种感觉。而这种感觉自然是靠经验支撑起来的,这一步是后面一切操作的基石,做好了,后期工作就会很顺利,不然就是一个反复迭代的过程。在迭代中求得完美,也是工程师的素养。当然,经验的积累就是要靠不断地尝试和灵活的借鉴,利用手头一切可以利用的资源最大化的提高工作效率。

floorplan的操作流程大体如此,更细致的操作技巧有待后续分享。




6

点赞

刚表态过的朋友 (6 人)

发表评论 评论 (4 个评论)

回复 skew 2021-3-16 20:52
学习一下哈
回复 leluo 2022-8-4 03:01
请问那个脚本里的SRAM是啥意思呢
回复 mervin_li 2022-8-14 13:12
leluo: 请问那个脚本里的SRAM是啥意思呢
就是memory 模块,只是举个例子
回复 老胡爱吃鱼 2022-9-6 15:07
学习

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 15

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 137

    粉丝
  • 58

    好友
  • 152

    获赞
  • 54

    评论
  • 3162

    访问数
关闭

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

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

GMT+8, 2024-4-20 05:06 , Processed in 0.029497 second(s), 16 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部