• 注册
  • 查看作者
  • 数字IC后端设计实现floorplan及powerplan规划

    数字IC后端设计实现floorplan及powerplan规划

     

    今天是一年一度的“双十一”光棍节,又称剁手日或者电商节,号称全球最狂欢的节日。吾爱IC社区的小编在此祝各位节日快乐,购物愉快!在这么狂欢的购物节日,小编买了一个麦克风。因为很多粉丝想让我讲课,于是乎买一个先自己测试下。

    估算模块或者chip面积

    本文暂时只讨论模块级的设计。根据前端综合release的report(含标准单元standard_cell,memory ,ip的面积信息),数字后端工程师会估算出模块的面积。这个估算方法建议每个项目都做一个以表格形式来做统计,方便为其他项目提供参考。需要注意的是,建议将standard cell和memory的利用率分开统计,memory利用率的经验值一般按80%来计算。

    数字IC后端设计实现流程之initial design

    初始化Initial模块形状

    估算完模块的面积后,block owner会向top负责人报告子模块需要的大概面积,方便顶层top做partition。模块的boundary一般都是负责top level floorplan的工程师基于全局考虑做partition后,为每个子模块分配的形状。比较有经验的top负责人往往在partition时会考虑模块实现难易程度来分配各个模块的boundary。之所以芯片中有多边形的模块,主要有以下几方面的原因:

    1. 芯片top level floorplan中有些地方top不太好利用(节省面积)

    2. 模块的物理实现比较简单

    3. 负责模块的数字后端工程师能力比较强

    初始化模块floorplan可以用如下命令实现:

    Initialize_floorplan

    在ICC中初始化模块形状时,需要注意的是方形和多边形的初始化命令是不一样的。方形的初始化命令应该用create_floorplan来实现。

    初始化命令主要包含模块的boundary, row, track, core to die等信息,对应gui界面如下图所示。

    摆放io port

    初始化模块boundary后,所有的io port均在原点。在ICC中是需要将这些port,create出对应的terminal,摆放好它们的位置。面对成千上万的port,很多junior engineer并不知道如何去摆放这些port,这个是新手的通病。

    那么多port,显然我们不可能手工去create terminal 和摆放对应的port。吾爱IC社区的小编今天分享一个方法:

    1. 从netlist中利用脚本获得所有的io port。这一步非常简单,因为io port在net不外乎以input,output或者inout的形式出现在netlist中top module的最上面的接口声明部分。你可以用TCL或者perl来自动获取这些port,并写到一个文件中。

    2. 对获取到的io port文件,进行排序。如果某些模块对io port的sequence有特别要求,则需要严格按照top的要求重新调整io port顺序,否则只需要按照字母顺序即可(时钟信号建议单独处理,摆放在port中间位置)。

    3. 根据调整后的io port sequence文件,编写pin constraint。这步主要指定对应terminal所用的层次以及terminal之间的间距。

       

    4. 最后执行create_fp_pins,工具按照pin constraint来自动摆放io port。

    如果需要查看摆放io port的整套脚本,可以访问小编知识星球查看具体脚本。

    摆放memory 和ip

    初始化模块形状后,所有的macro,如memory,ip也都在原点处。如果你的模块中有两三百个memory,你要如何快速完成memory的摆放呢?

    具体做法:

    由于memory特别多,建议先让工具摆放一遍。使用命令如下:

    Set_fp_stragety  -macros_on_edge  on

    这步主要指定摆放的方式为将memory摆放在boundary四周。默认情况下,工具会将memory摆放在中间区域。

    Create_fp_placement

    执行create_fp_placement后,此时memory和standard cell均已摆放好。但是我们只关心memory的位置,所以你可以将标准单元standard cell remove掉。需要特别注意的是工具摆放memory时不会考虑poly orientation,所以需要特别留意这点。关于poly orientation的相关注意事项,可以参考之前推送的文章。

    有了初始的memory位置后,我们可以利用ICC中plan group来进行data flow分析,从而精细化摆放memory。

    Powerplan规划

    摆放好io port和memory后,就需要进行powerplan规划。对于一个不做power domain的模块,它的powerplan就非常简单,就是构建一个交叉的power mesh network即可。本文主要讨论基于power domain的powerplan规划。在做powerplan规划之前,需要提前确定某个工艺的特定Metal Stack,从而决定block level应该要用那些层来打power。

    • Power Switch Cell供电(MTCMOS)

    对于需要做power domain的设计,需要加MTCMOS。加MTCMOS需要注意以下几点:

    MTCMOS数量。关于设计中需要加多少数量的MTCMOS,小编已经推送过,各位可以参见往期文章以及知识星球上的内容。MTCMOS数量多少是基于IR Drop(动态IR Drop和静态IR Drop结果),面积Area,绕线资源等方面tradeoff来决定的。

    手把手教你做floorplan规划-数字后端设计实现floorplan篇

    Create MTCMOS后,需要为其做好powerplan规划,包含global vdd和local vdd的电源网络规划。由于MTCMOS上的global power pin是底层出pin的,而global power strap是高层供下来的,所以在MTCMOS上会有很多大孔。当设计中MTCMOS过多时,可能会导致routing resource不足,从而出现short,diff net spacing等physical drc。

    在规划local vdd电源网络时,需要考虑电源网络供电路径的电阻最小化。

    • Level shifter cell供电

    在数字后端实现中,我们会经常用到Level shiftr。 Level shifter cell的power 连接是非常有讲究的。实践表明,很经常碰到level shifter区域存在特别大的IR drop问题。出现这种问题一般都是没人认真去研究level shifter power的连接方法。Level shifter是两条row高度的cell,其中含有VDD,VSS和VDDL(VDDH)。VDDL和VDDH是secondary power pin。在画power时,需要将其画成一个额外的power rail,确保每个Level shift cell secondary power pin的正常供电。

     

    更多关于数字IC后端设计实现中secondary power pin的连接方法见往期推文。

    • Memory供电

    Memory上power ground pin一般是Metal4出pin的,所以可以用Metal5进行衔接,然后再将Metal5连接到更高层的金属上。

    需要注意的是实际芯片出来,memory上出问题的概率还是蛮大的。所以在数字后端设计实现时,需要确保memory供电足够充足。对于一个做power domain的设计,需要在memory周围加够MTCMOS,打够power strap。

    • IP供电

    这里指的IP是指SOC设计中所用到的物理phy。在给这类IP打power 时,需要查阅vendor相关文档,整理出一个check list来。一般vendor会给出IP本身与四周其他IP的最小间距要求,与core logic区域之间的最小间距以及某电源网络路径最大电阻的要求等等。

    即使你严格按照了vendor要求来做floorplan和powerplan,你仍然需要将你的做法同vendor进行再次确认。做这一步目的是防止甩锅和背锅,老司机一定懂得。

    如何qualify floorplan和powerplan?

    • verify_pg_nets来检查

     

    Verfy_pg_nets的结果需要认真看,主要看设计中是否存在floating pin,特别是MTCMOS是否存在floating的global vdd。对于结果报告,需要我们能够分辨出哪些是真错,哪些是假错(或者说不用关心的错误),比如floating shape的错误就可以完全不用管。

     

    • 跑一个初始版本的DRC

     

    这步主要用来检查memory,ip和标准单元standard cell的poly orientation方向是否一致以及powerplan是否存在physical DRC等。

    • 人工review floorplan和powerplan

     

    这步是小编每个项目都会去做的,也强烈推荐各位也去做这个事情。因为有的时候你现有的floorplan和powerplan可能工具分析结果并没有大问题,但是从我们自身积累的工作经验出发,我们可能能够找出设计出的不足,比如某些memory的channel留得太大,channel间MTCMOS不够,局部区域供电网络不够robust等。一个不是很完美的floorplan和powerplan,如果你叫上两三个资深点的工程师去review,肯定会被抓出不少毛病来的。

    小编知识星球简介:

    在这里,目前已经规划并正着手做的事情:

    • ICC/ICC2 lab的编写

    • 基于ARM CPU的后端实现流程(已经发布)

    • 利用ICC中CCD(Concurrent Clock Data)实现高性能模块的设计实现(已经发布)

    • 基于ARM 四核CPU  数字后端Hierarchical Flow 实现教程(准备中)

    • 时钟树结构分析

    • 低功耗设计实现

    • 定期在星球布置作业题(星球已经支持布置作业功能)

    在这里,各位可以就公众号推文的内容或者实际项目中遇到的难题提问,小编会在24小时内给予解答(也可以发表你对数字后端设计实现中某个知识点的看法,项目中遇到的难点,困惑或者职业发展规划等)。

    反正它是一个缩减版的论坛,增强了大家的互动性。更为重要的是,微信有知识星球的小程序入口。星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有六十九位星球成员,感谢这位童鞋的支持!欢迎各位铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标。(星球的门槛将会越来越高,有需求的朋友趁早上车)

    本篇文章来源于微信公众号: 吾爱IC社区

  • 0
  • 0
  • 0
  • 1.6k
  • 请登录之后再进行评论

    登录
  • 单栏布局 侧栏位置: