估算模块或者chip面积
本文暂时只讨论模块级的设计。根据前端综合release的report(含标准单元standard_cell,memory ,ip的面积信息),数字后端工程师会估算出模块的面积。这个估算方法建议每个项目都做一个以表格形式来做统计,方便为其他项目提供参考。需要注意的是,建议将standard cell和memory的利用率分开统计,memory利用率的经验值一般按80%来计算。
初始化Initial模块形状
估算完模块的面积后,block owner会向top负责人报告子模块需要的大概面积,方便顶层top做partition。模块的boundary一般都是负责top level floorplan的工程师基于全局考虑做partition后,为每个子模块分配的形状。比较有经验的top负责人往往在partition时会考虑模块实现难易程度来分配各个模块的boundary。之所以芯片中有多边形的模块,主要有以下几方面的原因:
芯片top level floorplan中有些地方top不太好利用(节省面积)
模块的物理实现比较简单
负责模块的数字后端工程师能力比较强
初始化模块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社区的小编今天分享一个方法:
从netlist中利用脚本获得所有的io port。这一步非常简单,因为io port在net不外乎以input,output或者inout的形式出现在netlist中top module的最上面的接口声明部分。你可以用TCL或者perl来自动获取这些port,并写到一个文件中。
对获取到的io port文件,进行排序。如果某些模块对io port的sequence有特别要求,则需要严格按照top的要求重新调整io port顺序,否则只需要按照字母顺序即可(时钟信号建议单独处理,摆放在port中间位置)。
根据调整后的io port sequence文件,编写pin constraint。这步主要指定对应terminal所用的层次以及terminal之间的间距。
最后执行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的连接方法见往期推文。
推荐阅读:
低功耗设计实现中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,肯定会被抓出不少毛病来的。
联系客服