后端面试--每日一题(011)
What are various techniques to resolve routing congestion?
请详细解释解决走线阻塞的问题
难度:4
提示:
1) routing congestion发生在后端,前端一般不太考虑这个问题,需要后端自己去想办法解决,但是解决的办法不只在后端,也有一些方法需要前端的配合
2) 阻塞有多种情形,要分别讨论,没有一个统一的解决办法。能够把大部分的阻塞情况列举出来,就已经够4级的水平啦
哈哈。
这个问题我来回答回答,看下解决的方法够不够多。
1.带FeedThrough的情况。
如果一个Design呆FTS,一般来说1K 的fts会增加大概1%的Utilizaiton,如果可以适当的减少Fts,那么是对减少DRC有帮助。
如果不能减少fts, 这个东西就有得玩了,一把fts走线拉直了,别Cross,在做Placement的时候,让优化fts timing的buffer | invter 尽量放在让fts走直的路径上。调整Floorplan,让fts走直,如果是竖向的fts比较对,在摆放macro的时候,在适当的距离上留上一定的channel。
2.Fts影响很少的情况
这个就得把Routing后的结果拿来看了,如果你拿到的flooprlan的share是个多边形,那么说对于Memory比较多的Design有好处,利用memory把那个凸出来的地方给堵上,就是尽量消灭掉floorplan的边角,像这种边角的地方容易出routing的DRC。
在复杂的Cell边上留些空地,也就是+cell Padding.
定义出routing DRC的地方的Utilization。
利用不同的EDA工具,来试试看下能不能解决DRC的问题。
前端综合也是可以的,比如用DC,RC来综合试试。综合的时候+些Margin去综合。
假如排除前端的影响,解决DRC的根本办法发就是在Floorplan上。降低Utilization,或者调整你的floorplan.
加placement blockage
至于前端可以解决congestion,不了解啊,望陈小编指点一下
望陈小编指点~
1)阻塞在RAM(macro)之间:可能RAM之间的距离没有计算正确,可以加大RAM之间的间距;扭转RAM的方向,使得RAM的IO pin朝向更容易走线的那边;如果是多个RAM共用地址或者数据线,尽量把RAM的地址数据pin对齐
2)阻塞出现在RAM和帮助单元交界的地方:在RAM周围加一条halo(keepout);把RAM放在四周,尽量把中间留下的空间变成方形;加一些由小的placement blockage组成的矩阵
3)阻塞出现在标准单元的某一块:也可以加一些由小的placement blockage组成的矩阵;module/instance padding;利用placement guide将减少那块地方的标准单元个数;scan chain reordering也会改善一些阻塞;定义density上限;使用congestion driven的placement,并且要求place之后做congestion优化;在综合是禁止使用那些pin太多太密集的标准单元(多半是那些复杂的组合逻辑单元);请前端使用RAM代替触发器矩阵;请前端修改算法
谢谢小编回答,我会把小编后端面试的题目从1开始收集,好东西啊
你要是拿去换钱的话,记得给我分成
哈哈,没问题,到时候发一个陈涛后端面试问答集锦
阻塞还有没有可能发生在ram拐角的地方?就是矩形的四边
说错了, 是ram的四个拐角的地方。解决办法是不是也是加placement blockage
楼上正确!
感觉大家都在纠缠在blockage/space 这一方面,有没有想到比较烂的special route 也会经常导致routing congestion呢,比如io与ip 之间 20um space,你用m1 走track,然后一18um m6纵向与m1打满孔,是不是封死了所有层次的metal routing track ? 可能这比较极端,那你用一8um m6走呢,可能碰巧所有的信号线都走得通,不过也都min width/ min space了。 也或者走不通了,就差一两跟,其实这种情况还是挺多的,就是fp 做的烂了点。
这点很重要!
应该尽量减少power route占有的资源,谨慎选择power mesh使用的金属层,VIA的大小等。在detail route完成之后,你如果已经试了各种解决signal congestion的方法,还有少量DRC无法解决时,可以考虑切掉部分power mesh
是的,detail routing之后,看一下比较紧张的地段,可以灵活地切除一些mesh并且不影响em/ir的情况下,或者顺着数据流灵活改变一下孔的array ,还是上面例子,m1~m6,必有v1 m2 v2 m3 v3 m4 v4 m5等layer,比如你的array 阵列是50 x 50 (当然层次不一样,空width/pitch 不同),不切除mesh,把array 改为30x50 ,可能就让出了m2 m4 纵向 几十个channel ,可能效果立竿见影,又没有影响太大的em能力,假设m6是main power line , m1是local的。 类似的细节是提升后端品质的一个很好的因素。在routing有问题的时候大动干戈去移ip是很不好的做法,动作过大 ,over work了,很多时候分析一下p/g special line,可能会有好的效果。
謝謝小编回答
您好!请问下什么是FTS啊?
学习了,不错
学习了,谢谢
综合的时候少用端口多的单元也能解决一些问题啊
综合的时候少用端口多的单元也能解决一些问题啊
对于小编说的再标准单元的某一块之间,确实有时候会出现一下cell很小,但是pin很多的单元,这种情况也可能出现congestion,解决的办法是对这些cell在place之前设置一个间距,就是离它最近的cell的最小grid,具体的命令忘记了,好像是spceifyCellPad,UG上有介绍。
现在走险不是可以通过软件完成摸!
小编总结的很全了,主要就是memory channel出现congestion的处理,还有全是标准单元但有congestion的处理。若全是标准单元但仍有congestion,要么是local density太高,要么就是pin density太高,这时候就要限制cell density来降低pin density,另外如果是用ICC的话,在placement的时候使用global router来进行congestion removal以及congestion removal用high effort都是有帮助的。
同问,请赐教!
看他的分析,感觉是feed through
求正解!
拥塞出现在标准单元的情况。如果能在RTL改掉最好,最不喜欢在后端处理。碰到最多的引起拥塞的逻辑是大的case逻辑和大的移位逻辑。
能想到和做到的是把大的case拆成小的然后infermux或者不使用AO、OA等比较复杂的pin多的单元。
不知道还有没有别的好的方法。PR上的keepout,降低density等那是实在没办法才会用的。
曾想去硬化些大的mux,只是想想没去实现也不知效果怎样。
真详细!