1. 模块的partition
block的形状往往是负责top实现的工程师给出的。一个比较有经验的数字后端工程师,在切模块形状的时候,往往会考虑如下几点:
是否能够节省chip面积(比如IP边边角角,top用不到的区域,是否可以给block)
基于block 现有的boundary,block implementation 的风险如何(需要对block的timing和physical有较深的认知)
pin assignment or IO placement(是否有feedthrough的需求等)
考虑top和block 接口的timing
图1 Abutted and Non-Abutted floorplan
这里需要指出的是,top给你一个block的boundary后,你应该尽快去做模块的后端实现评估(Timing,Congestion,Area以及Hold fixing等情况)。假如评估后发现实现难度很大,或者搞不定,此时需要及时向负责人汇报,共同解决问题。虽然还是建议自己努力去解决问题,但是在实际项目中需要控制好时间节点,总不能评估半个月后发现不行,继续埋头苦干半个月吧。
2. Voltage area creation
对于multi-voltage和multi power domain的设计,有的数字后端工程师喜欢create voltage area,创建Voltage domain。有的则喜欢在前期阶段和前端沟通后,对不同的Voltage domain进行切分,比如将Gated domain,不同的voltage domain单独切出来,后端实现单独hardening,这样数字后端工程师实现时只需规划好各个模块的powerplan规划即可(不需要run based UPF flow)。
对于一个flatten 的design,如果存在多个voltage domain,此时往往需要通过创建voltage domain,后端实现时需要load 对应的UPF,引导工具来做对应的placement(UPF坑可能比较多哦)。
常见的创建voltage domain的方法有两种,如图2和图3所示。一种是各个voltage domain是abutted在一起的,另外一种则是各个domin间是存在channel(Non-Abutted)。
图2 Voltage area (Abutted)
图3 Voltage area (Non Abutted)
3. Macro(含Memory,IP)和IO placement
在摆放Memory和IP前必须注意poly的方向。90nm及以下工艺都要求memory,ip,io的poly orientation必须和standard cell的poly orientation保持一致(FAB提供的DRC runset会check这条rule)。
建议阅读之前推送的文章,文中也涉及到Poly 方位的问题:
Final netlist release前,你应该做好哪些工作?
图4 Macro orientation示意图
根据 data flow 和design hierarchy 来摆放Macro。如果有reference的floorplan,可以作为参考(仅仅是参考哦!),比如ARM的CPU和GPU,官方都会提供reference的。
图5 Macro placement
那么,如果你没有前端给你的 data flow,也可以通过icc中create_plan_group来创建对应的逻辑group,可以非常清楚地知道各个子模块间(含Memory)的逻辑连接关系,如图6所示。
图6 通过查看逻辑连接关系规划placement
出pin方向讲究多
考虑绕线资源和timing。memory出pin方向尽量靠core logic区域。
memory之间是否需要留space
如果两个memory之间的通道,你想工具摆放cell,那么需要确保它们之间有对应的power strap,否则会导致rail floating,如图7所示。如果需要留space,那留多少合适呢?留大了浪费面积,留小了则可能导致rail floating,绕线资源不够等问题(这个问题留给大家思考,比较简单)。
图7 memory之间space规划
原则上Memory要摆放在boundary边上。(为什么要摆放在四周?什么时候可以摆放在core区域?)
IP的摆放需要考虑和core logic保持一定space,这个space需要留多少,vendor都会给出一个建议值的,遵守他们的rule就行。
4. 添加placement blockage和 routing blockage
memory之间需要加什么类型的blockage
blockage分为hard,soft和partial 三种类型。具体功能这里不多说,大家都很清楚。如果memory之间想预留点空间,摆放buffer,则可以添加soft blockage或者partial blockage中的buffer only类型,如图8所示。图中SRAM之间的channel是否可以摆放Register? 如果不可以,为什么?
IP周围需要加placement blockage和routing blockage
加placement blockage是防止core logic的standard cell 摆放太靠近IP,从而对IP造成干扰。加routing blockage是阻止core logic在IP限定range内走线。
IO需要和core logic区域保持一定的距离,防止LatchUp效应。
图8 添加blockage示意图
图9 LatchUp 示意图
5. Adding power switch cell
对于一个要做power domain的模块,我们需要添加power switch cell。通过这个power switch来控制该模块中standard cell电源的开关。power switch 有两种类型。一种是HEADER,通过关断VDD来实现poweroff。另外一种是FOOTER,通过关断VSS来实现poweroff。power switch cell有一个Global power pin,一个Local power pin。
至于 power switch cell需要加多少合适,留给大家思考(主要考虑IR Drop)。
图10 power switch added in required power domain
图11 Power switch 类型
6. 添加一些特殊cell (Well Taps, EndCaps, Spare Cells, Metal ECO-able cells etc)
Well Tap cell
目前大部分的standard cell library提供的标准单元都是tap-less(substrate connections are not done)。因此我们在floorplan阶段需要按照FAB的要求来添加Well-tap cell,将wells连接到VDD/VSS上。
EndCap Cells
endcap cell 一般是摆放在Macro周围和每条row的首尾两端,主要目的是确保Macro周围的环境和core logic的环境是一样的。
Spare cells
spare cell 字面的意思就是备用的cell。这里cell一般是用来做ECO用的。至于这类cell在哪个阶段insert,以何种方式insert,留给各位思考。另外还有一种是ECOCAP CELL,这类cell也是用来做ECO的(他们何有区别,各自的优缺点分别是什么?)。数字IC设计中ECO的那些事,其实并不是事!
7.Qualify floorplan
做完以上这些工作后,如何去quailfy 一个floorplan,powerplan呢?
verify_pg_nets 检查是否存在floating pins (floating shapes是否可以skip?)
run drc to check poly orientation
review floorplan of IP with vendor
由于篇幅有限,本文对于powerplan只是简单提及,powerplan完全可以作为一个专题来讲,留在后续做分享。
领取专属 10元无门槛券
私享最新 技术干货