今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了,后面会陆续分享这方面的问题。
希望对大家的数字后端学习和工作有所帮助。
数字后端项目Floorplan常见问题系列专题
- 脚本中macro边加的是addHaloToBlock ,用placeBlockage 也可以吧,两者区别是什么呢?
两者功能是一样的。只不过addHaloToBlock会跟着macro走的,即挪走macro对应的halo会跟着走。
- 昨天训练营直播课有个同学提了一个问题 “FloorPlan阶段如何科学地预估每个Marco的走线资源与走线空间”,我想直白些问,怎样预估两个memory 之间的间距,简单举个例子具体说明吧。
这里需要先预估macro中间有哪些线可以用来绕信号线,比如只有纵向的M6可以绕的话,就根据M6的最小pitch,乘上macro的pin数量,得到这些信号线的总线宽,再加上一定的余量预估间距即可。
如果可用的绕线层更多,也是用同样的方法,平均下来再加上一定的余量进行测试。
假设macro的间距是5um,macro绕线全走中间的通道。以左图为例,Macro有30个pin,而M6的pitch是0.1um,那么30个pin全部用M6绕线的话,需要3um的间距,那么5um的间距是足够的。但是如右图所示,如果两个相同的macro相对而放,那么pin的数量就是60个,所需要的间距就是6um,5um明显就不够了。
考虑macro身上也能绕线,假设macro的间距是5um,macro的宽也是5um,在不考虑macro的pg绕线情况下。以左图为例,Macro有30个pin,而M6的pitch是0.1um,那么30个pin全部用M6绕线的话,需要3um的间距,那么macro加中间通道总共10um的间距是完全足够的。而如右图所示,如果两个相同的macro相对而放,那么pin的数量就是60个,所需要的间距就是6um,15um的绕线资源也是可以完成绕线的。
在实际考虑Macro的绕线资源时,需要去掉macro本身已经用的金属层,比如一般情况下M1到M4都是macro的内部绕线层,而M4是pg network。那么M4以上的金属层就可以拿来给macro绕线,当然这里需要剔除powerplan用到的资源进行综合计算。
一般情况下两个marco间的space更多是防止base layer drc,或者如果两个marco中间需要摆放标准单元,就需要留大点。
Core area相对于die_area 为什么要设置偏差值,偏差值一般设置成多少
为了避免port跟pg出现short的drc违例,一般我们会在core和die之间预留数倍row高度的空间来给port走线,这里给个参考值3。
- 其他形状的foorplan如何设置,如T形,U型的floorplan形状应该如何初始化?
ICC2中其他形状的floorplan可以用gui界面来设置,也可以参考gui界面给出的脚本。这里的2是指各条边的比例,工具会根据利用率和长宽比自动计算每条边的长度。也可以在Side size control选择Length,直接指定每条边的长度。其他的形状可以参考这个进行设置。
也可以用下面这个命令来initi 多边形的形状。
initialize_floorplan -boundary
- create_tap_cel1s -1ib_cell $tapcel1_ref -pattern stagger -distance 30 -skip_fixed_cells这条语句啥意思?
这句话的作用是摆放tap cell,主要作用是将Nwell连接到VDD,p-substrate 接到VSS,避免出现latch up。
Stagger是以棋盘的方式进行摆放,具体摆放见下方的箭头所示。
30是指每个row上两个tap cell的间距,这个需要大家查询design manual进行确定,这里给的值也希望大家思考合不合理。
-skip_fixed_cells是跳过macro cell进行摆放。
- 自己摆放floorplan怎么知道有没有DRC问题?或者需要check哪些东西?
macro之间的最小间距满不满足要求;
port之间的最小间距满不满足要求;
电源网络有没有出现drc的情况,比如via过孔满不满足要求;
strap的宽度和间距满不满足要求;
电源网络会不会跟port短路等情况;
做完floorplan和powerplan之后,可以插filler写出设计gds,然后进行calibre的drc检查。具体实现脚本见社区IC后端训练营脚本。
- upf在floorplan阶段不会使用吗?
本案例不使用upf。在做低功耗设计实现时可能会用到upf。
这里分享一个咱们低功耗四核A7 TOP hierarchical flow实现项目使用的golden upf模版。
-
don’t_use怎么确定list?除了foundry规定的一些cell,根据经验吗?
set dontuse_ref “/DEL
/FILL
/ANTENNA
/DCAP
/TIEH
/TIEL
/BOUNDARY
/TAPCELL
/BHD
/CK
/DCCK
/D24BWP
/D20BWP
/D0BWP
/G
/INVD21 "
这上面基本上就是一个参考设置了,DEL是延迟cell,主要用于修hold,但是它面积比较大;
FILL是填充单元,只有在postroute之后才需要插入;
ANTENNA是天线单元,只有在route阶段才需要开启;
DCAP是去耦单元,用于改善IR drop,同样只有在postroute之后才需要插入;
TIEH和TIEL是在place和优化过程中才需要使用,将逻辑0和1连接到VSS和VDD;
BOUNDARY和TAPCELL只有在floorplan阶段才需要使用,后续都不再使用;
BHD这个属于bus holde,本设计不需要使用。
CK和DCCK是时钟相关的buffer和inverter,只有在cts阶段才能使用
D24BWP、D20BWP和D0BWP属于最强和最弱的cell类型,大驱动的cell容易有em问题,最小驱动的cell驱动能力太弱,能提供的优化能力有限,而且不同corner下容易因process的偏差而出现timing不一致。
G*属于ECO cell,这个需要根据实际使用情况开启。这种cell是在做function eco时用来替换普通ECO cell用的,flow中一般都禁用。
上面只是提供一个参考,实际上项目中可能有其他don’tuse cell需求,这个需要根据实际情况进行调整。
请注意,设计一开始就需要将上面的cell设置dontuse属性,在某个阶段需要用到上面某种cell的时候,需要先将他的dontuse属性去掉,才能正常使用,不用之后重新设置dontuse属性。 -
def文件是怎么生成的?不应该是floorplan吐出来的吗?怎么是floorplan的输入了?
Def文件可以通过write_def命令写出。Def是记录各种物理信息的文件,可以包括blockage、macro、port、std cell和net的详细摆放信息;
大家需要在收到摆放完macro和port之后,输出一个def文件进行保存,下一次如果说想复现这一个方案,就不需要重新手动摆放,直接读取这个def文件即可。
- 读入DEF文件后diearea为0/1,这是否意味着DEF文件里并没有diearea信息,这是在后面的环节中才会得到吗?
Diearea信息是initial_floorplan提供的,def不提供这个信息。def文件中头文件都会有一个die size的坐标。如果通过defIn读入def,需要注意下两个版本的芯片尺寸大小是否一致的情况。