分享

真题秀第二季,为校招保驾护航:笔试面试题第一期(数字后端方向)

 芯文苑 2018-08-15

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一般是-setupn-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. 在一个设计中有多个时序约束,象functionscan shift, scan capture, scan at-speed, mbist at-speed, jtag SDC,为了减少运行时间,不能把它们都放入MMMC中,你选择哪些放入MMMCsetup中,哪些放入MMMChold


     答案:这个要从每个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+文件(用于计算连线延时的)

  • 创建设计库,读网表

  • 芯片布局Floor plan,包括芯片形状,利用率Utilization(stdcell与core面积的比值, 比如设置为60~70%),PAD的位置和排序,宏单元的摆放等。

宏单元常摆放在靠近于其有连接关系的PD的角落上。如果摆放在中间,很多连线需要绕过它,引起route拥塞和连线延时加大。

  • 放置标准单元 place_opt

  • 时钟树综合clock_opt,主要目的是优化时钟的Fannout,减少时钟的Skew。

Hold时间的Fix是在CTS之后。CTS后ICC需要读取修改的SDC文件,主要是采用set_propageted_clock,使得SDC中对时钟属性的描述可以采用CTS后真实的值,

  • 连线 route_opt

  • 物理检测DRC/LVS/天线效应

DRC:物理设计规则,比如相同金属层间最小间距和最小宽度等。

LVS:Layout vs Schematic,检查版图和网表的功能等价性,比如是否有短路和端路等。

天线效应:连在栅极的金属太长,在刻蚀过程中积累电荷太多而导致击穿了MOS管栅极。可以采用往上跳层或者插入二级管单元的方法来修复。

  • 插入Cell filler使得芯片密度均匀

Cell Filler有带金属和不带金属两种,先插入带金属的Cell Filler(也叫Decap Filler),可以去除耦合电容。

  • 插入Metal fill使得每一层的金属密度均匀

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多