2017年芯司机推出了真题秀专栏,百道真题助力校招。 2018年真题秀第二季将以全新的方式展现,方便大家的学习。 1. 使用一般的WLM (不是zero WLM,也不是按照物理位置算的DCT),DC是如何计算delay的? 答案:DC在计算延时的时候,net的rc就要根据所选取的wrie load model来计算,计算时由输出的fanout决定。以smic13的smic13_wl10为例: wire_load("smic13_wl10") { resistance: 8.5e-8; capacitance: 1.5e-4; area: 0.7; slope: 66.667; fanout_length(1,66.667); 根据fanout值,由fanout(1,66.667)可以得出互连线长度为66.667,然后根据resistance和capacitance计算出互连线电容为1.5e-4*66.667,互连线电阻为8.5e-8*66.667。 当然如果扇出值表中没有,就会用到slope,例如扇出为3时,此时估算的互连线长度为1*66.667+(3-1)*slope,再计算出RC值,然后DC由此计算net的延时。 2. 请尽可能详细的描述APR中常见的产生拥塞的原因及解决办法。 答案:根据阻塞发生的情况不同: 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代替触发器矩阵; 请前端修改算法 4) 应该尽量减少power route占有的资源,谨慎选择power mesh使用的金属层,VIA的大小等。在detail route完成之后,你如果已经试了各种解决signal congestion的方法,还有少量DRC无法解决时,可以考虑切掉部分power mesh 3. 如果对待数字后端实现中出现的时序问题 ? 答案:当通过ICC或者PT的report_timing 报出有时序问题的路径时,可以按照以下思路来解决: 1) 检查这条path是否合法,比如可能是条异步的path,或者半周期的path,这时可以找设计人员确认这是否是一条合法的path,或许是约束写错了,或者designer不小心写了一个负沿的寄存器。 2) 如果合法,需要确认这条path本来逻辑就很长,还是因为PR的floorplan导致的。 如果你发现时序路径上有一连串的buffer, 那很可能是floorplan导致这条path的cell之间距离很远,工具插入了很多buffer。 3) 如果是floorplan导致,可以尝试在placement时把这条path group起来,加大权重使得工具优先对待这条path。 4) 如果不是floorplan导致,那可以通过在pre-layout时报一下这条路径,以确认这条路径在综合时就已经有很大的时序违规了。 5) 如果是逻辑问题,建议还是自己先研究一下原因,以便在找设计人员的“麻烦”的时能给出一些建议,比如是不是有些很大fanout的cell,或者一串复杂的逻辑门,或者是否有很深的逻辑深度。 6) 设计人员可能告诉你这是一个多周期path,甚至是条不用check的path,这样就轻松了,直接加timing exception,甚至不用修就可以了。 7) 如果设计人员告诉你这是条真实的单周期path,这时还是先建议设计人员修改代码,当然PR阶段还是有手段可以解决,但要给自己保留一点余地,同时修改代码是一劳永逸的问题 8) 如果设计人员说不能修改,或者项目已经过了RTL freeze这个节点,那只能依赖后端的手段来实现了。 9) 到这个时候,才是你后端人员发挥的时候了,比如可以采用high effort的post-route时序优化命令,ECO修复方法,或者利用useful skew技术,通过调整时钟延时来修复,当然路径前后有得借才行。 10)如果还是不能解决,项目允许而且库也支持,可以 采用低阈值电压的Cell(LVT)来替换一些cell,以修复setup。当然LVT的使用也会引起功耗的增加,这个需要从全局去考虑,比如项目只允许使用0.5%的LVT。 4. 如何得到更好的时钟树skew和insertion delay 答案:如果是用普通的CTS的方法,可以从下面几个方面着手。不太可能一次就把CTS做得很好,要反复调试各种参数,达到最佳效果。 1) 合理的clock root和through pin。这个看似CTS会从SDC自动抓出来,但是并不一定是最好的,特别是多个clock相互有重叠的leaf pin时,要特别注意 2) 不要用太大或者太小的clock buf/inv 3) 选用RC最小的金属层。如果上面RC最小的金属层已经被占用,比如RC最小的top,top-1已经不够clock net时,而top-2到layer2都是一样的RC时,可以选用layer3/4。为什么不用更高层哪?因为这样既照顾了layer2/1的pin,有不用太多的via到更高层 4) 如果用double width clock wire,可以适当增大clock buf/inv的size 5) 合理的max fanout。有时clock buf/inv的fanout可以超过max_fanout的限制 6) 不要把skew设得太小 7) min_insertion_delay = 0ns 8) 合理的transition time,不要太小 9) 使用postCTS的CTS opt10)做clock tree时,就直接把clock net走线完成 5. 如果告诉你标准单元的门数,所有的类型和逻辑大小,其他IP的实际大小,以及IO cell的种类和数量,你如何估算整个芯片的面积? 答案:IO neck 和core neck 一般称作IO limited 和core limited IO limited :这个芯片的面积是因为IO个数限制(太多),而不得不做得那么大。core部分其实用不了那么大。这时面积计算就简化为每边IO个数的计算了。 Core limited:芯片面积是有core部分的决定的,IO没有那么多 在Core limited情况下,die size的估算如下: 芯片面积= core面积+ power ring面积+PAD ring面积 core面积= RAM面积+ 其他macro面积+ 标准单元面积 RAM面积= RAM 自身的面积+ RAM power ring面积+ keepout面积+ mbist面积 RAM自身的面积可以通过memory compiler或者查datasheet得到,有些RAM 可以不要power ring。如果要的话,按照power mesh的宽度x RAM的长宽x 2 = 面积keepout + mbist的面积一般是RAM自身面积的10% 其他macro的面积,比如PLL,ADC,DAC等,直接把面积加起来,再留3~5%的keepout面积就好了标准单元的面积=(预估的gate count x 每个gate的面积)/ utilization utilization与使用的金属层数和设计的用途有关,简单地计算方法是 5层metal:50% 6层metal:60% 7层metal:70% 8层metal:80% 以上不包括power专用的金属层如果设计是多媒体芯片,一般可以增加3~5% utilizaion,如果是网络芯片,则要减少3~5% 6. 说一下ECO的流程 答案:ECO有两种,pre-mask ECO和post-mask ECO,它的分界线就是base layer tape out之前和之后。 pre-mask ECO的流程是 1)后端写出网表,给前端 2)前端修改这个网表(一般不再做综合),可以使用任何标准单元(只要不是dont_use),交给后端 3)后端读入ECO网表,和ECO之前的place和route 4)ECO place&route,STA,DRC/LVS post-mask ECO流程,假设你不想动base layer 1)后端写出网表,给前端 2)前端修改这个网表(一般不再做综合),只能使用spare cell或者象gate array一样的ECO cell 3)后端读入ECO网表,和ECO之前的place和route 4)如果使用spare cell,不用ECO place;如果用ECO cell,要将ECO cell放在以前带gate array功能的fill cell的位置上,再按照指定的layer做ECO route 7. 如何设定multicycle path?为什么-hold一般是-setup的n-1?如果只有-setup没有-hold会怎样? 答案: clock domain: fast-slow: set_multicycle_path num -setup -from clk1 -to clk2 -start set_multicycle_path num-1 -hold -from clk1 -to clk2 -start slow-fast: set_multicycle_paht num -setup -from clk2 -to clk1 -end set_multicycle_path num-1 -hole -from clk2 -to clk1 -end data path: set_multicycle_path num -setup -from data1 -to data2 set_multicycle_path num-1 -hold -from data1 -to data2 hold 是对前后两个flip flop在相同时钟沿的检查.设了n-1就是返回n-1个周期做hold的检查,满足了两个flip flop在同一个时钟沿。如果没有-hold 默认是检查n前一个有效时钟沿,如果n>=2,hold的检查就不是在同一个时钟效沿,对hold的要求就要多n-1个周期,那样太苛刻了,一般时序无法收敛 8. 在只有一个function SDC的普通后端流程中,对于pre-CTS, post-CTS 和post-Route这三步,请分别讲述它们在时序收敛上的方法,一般会遇到的问题和解决方法。 答案: pre-CTS时,使用ideal clock,只fix setup post-CTS后,使用propagate clock,可以只fix setup,检查hold,但可以不fix hold post-Route后,依然使用propagate clock,fix setup和hold 具体遇到的问题和解决方法: pre-CTS: 如果有setup,重在调整floorplan,buffer tree结构 Post-CTS: 如果有setup,重在调整clock tree,buffer tree结构或者size Post-Route: 如果有setup/hold,微调clock tree/buffer tree的size,routing channel和图层,实在不行,回到CTS 9. 在一个设计中有多个时序约束,象function,scan shift, scan capture, scan at-speed, mbist at-speed, 和jtag SDC,为了减少运行时间,不能把它们都放入MMMC中,你选择哪些放入MMMC的setup中,哪些放入MMMC的hold 答案:这个要从每个SDC的特点着手,个人经验,与设计有关,不敢保证使用与所有设计。 1) scan shift:速度很慢,不用太担心setup,但是hold很重要,一旦hold有问题,所有与scan有关的测试全泡汤 2) scan capture:也是慢速,但是会有很多hold出来,特别是在不同的function时钟之间 3) scan at-speed:高速,解决了它的setup,其他DFT的setup基本上就连带着解决了 4) mbist at-speed:高速,但是涉及的逻辑不多 5) jtag:慢速,很容易与function SDC合并 所以结论是MMMC setup:function + scan at-speedMMMC Hold: function(+jtag)+ scan shift + scan capture 10.基于ICC的自动布局布线主要流程 答案:
Netlist, SDC, 逻辑库.db文件:加密格式,提供了每个标准单元的功能,延时,面积,功耗,逻辑DRC等信息。 Milkway的参考物理库:Synopsys专用的物理库格式,是一个目录,包括了每个标准单元的物理版图信息,例如形状,大小,pin脚位置,route blockage等信息。PR中常用到三种参考物理库:标准单元,IO Pad,宏单元等。每个库目录下包括了两种描述形式:Cell view和Frame View。Cell View描述了完整的cell的物理版图信息,Frame View只描述了版图的一个框架,其内部是个黑盒子。在PR过程中,常用Frame View以减少PR的时间,在最后输出版图的时候,把Frame view换成Cell view,从而得到完整的版图。 技术库文件Techfile(定义物理设计规则,Metal的编号,颜色等信息) Tlu+文件(用于计算连线延时的)
宏单元常摆放在靠近于其有连接关系的PD的角落上。如果摆放在中间,很多连线需要绕过它,引起route拥塞和连线延时加大。
Hold时间的Fix是在CTS之后。CTS后ICC需要读取修改的SDC文件,主要是采用set_propageted_clock,使得SDC中对时钟属性的描述可以采用CTS后真实的值,
DRC:物理设计规则,比如相同金属层间最小间距和最小宽度等。 LVS:Layout vs Schematic,检查版图和网表的功能等价性,比如是否有短路和端路等。 天线效应:连在栅极的金属太长,在刻蚀过程中积累电荷太多而导致击穿了MOS管栅极。可以采用往上跳层或者插入二级管单元的方法来修复。
Cell Filler有带金属和不带金属两种,先插入带金属的Cell Filler(也叫Decap Filler),可以去除耦合电容。
|
|