| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> ic后端面试汇总 -> 正文阅读 |
|
[嵌入式]ic后端面试汇总 |
尽量摆放在四周,和外界数据交互
CTS的目的就是减小时钟偏差(clock skew) 除了PPA(performance、power、area)之外,时钟树还应该robust。即所谓设计中的时钟树在任意设计需求的corner下都能满足时序。总之,CTS的结果应为一个满足时钟树特性定义的高质量时钟树网络
对于快速设计。时钟树的skew和latency影响时序收敛、功耗和面积。平衡可以使得timing收敛简单一点; 对于慢速设计,时钟树的skew和latency对时序收敛的影响降低。但是对于skew大的时钟树,工具修复时序会增加更多的面积和功耗。创造一个skew小的时钟树,虽然看似在时钟树上多用了buffer,但是会减少在修复时序问题时需要的buffer 所以,平衡对于时序收敛、面积和功耗都是有好处的。
闩锁效应是由NMOS的有源区、P衬底、N阱、PMOS的有源区构成的n-p-n-p结构产生的,当其中一个三极管正偏时,就会构成正反馈形成闩锁。 避免闩锁的方法就是要减小衬底和N阱的寄生电阻,使寄生的三极管不会处于正偏状态。
input transition、output load、PVT
否则会出现亚稳态
分为rise和fall transition,一般指信号从10%到90%需要的时间
4种;input到DFF、DFF到DFF、DFF到output、input到output
将RTL变成netlist过程,主要分为3个阶段: Translation:翻译,主要把描述RTL级的HDL语言 Logic optimization:逻辑优化,就是把路径调整一下,门给改一下等等。 Gate mapping :门级映射,把优化了的统一门级描述
skew主要指时钟到达不同DFF时出现时序偏差,这个偏差叫作skew
create_clock生成的是master clock,create_generate_clock是由master clock生成的,比如通过一个分频器,不会单独产生一个时钟,连接到master clock。
静态时序分析;优势是:1.100%覆盖率 ?2.速度快 ?3.考虑串扰,工艺偏差的影响
DC综合 placement单元放置 routing布线 都需要时序分析。 主要区别是CTS之前使用的都是虚拟时钟,设计约束文件SDC定义的时钟(SDC对电路的时序,面积,功耗进行约束) 各个阶段的时序分析model也不一样,比如DC使用的是线负载模型,routing之后就是实际的布线数据。
LEF只描述单元的底层细节,比如端口位置,层定义和通孔定义。只用于布局布线。GDSII拥有单元的全部信息,但由于过大,不利于工具的布局布线。
调整size,更换阈值电压,修复DRC(transition和load会影响延迟),流水线,useful skew
1.setup hold violation 2.DRC检查,input transition,output load 3.corner是否全 4.sdc检查,后仿作为最后检查sdc的过程,比如false path 5.噪声
互连线寄生参数,使用starRC
double width和double space,高层走线
主要是泄露功耗 1.提高阈值电压 2.电源门控 3.体偏置。进而改变阈值电压,如果正向体偏置就会提高性能。
包含短路功耗和开关功耗 1.降低电压 2.DVFS 3.多电压域 4.降低负载 5.降低时钟频率
减少crosstalk
串扰。信号线之间的干扰。产生glitch和transition time的变化。transition和delay有关系,同向transition变小,反向transition变大。glitch会产生逻辑错误。
1.单元面积 2.单元尺寸 3.流水线
组合逻辑,DFF间路径
满足良率的同一金属层或者不同金属层的几何尺寸的最小值的集合,就是设计规则检查。 版图和lef文件进行比较(lef由单元lef和技术lef,这边技术lef定义设计规则,单元lef)
1.工具自动修,在DRC违规的地方添加routing guide,做iteration routing 2.工具抓取出DRC违例的地方,删除这些net,做routing eco。
主要输入两个文件。一个是得到的版图GDSII文件和工艺厂商提供的设计规则文件。工具通过标出违反设计规则的位置,进而手工修改违规。
根据sdc中clock的uncertainty(包含skew),CTS之后使用实际的CTS计算skew。
共同路径悲观去除。在OCV时需要乘以一个derate系数,共同路径的部分需要移除悲观量。
芯片中没有氧化层覆盖的金属或者多晶硅收集游离电荷。 给存在天线效应的金属层接上二极管;跨层走线;插入缓冲器
netlist 工艺库(逻辑库db lib 物理库lef) 工艺文件 TLU+
create_clock create_generated_clock set_driving set_load set_input_delay set_output_delay set_case_analysis set_false_path set_multicycle_path set_max_fanout set_max_transition set_min_capacitance set_max_capacitance
1.逻辑 2.floorplan 3.时序路径的延迟,cell size,阈值电压,buffer 4.工具层次,group的weight 5.线延迟,插buffer
不需要。1.没有实际的CTS 2.很好修,插buffer
特点:delay cell延迟比较大,buffer驱动能力强 较大的violation使用delay cell。
优先修复setup。hold比较好修。并且setup决定我们的性能
可分为source latency和network latency。 source latency是这clock 信号来源到芯片的 clock输入端的delay,而network latency是指芯片clokc输入端到 flip-flop clock输入的delay。 一般不需要设置。 1.不同clock source latency不同,考虑时序,需要设置。 2.不同时钟network latency (insert delay cell)不同时,需要考虑时序,也需要设置。
1.memory要放在边缘,和外界数据交互 2.SRAM地址线对齐 3.有关联的Macro放在一起
1.高层金属更厚,有更强的EM能力 2.对低层信号线干扰更小 3.不会占用低层的信号线
片上工艺偏差,因为OCV对时序分析造成影响,那么进行时序分析时需要将这些OCV考虑进来。 在STA中,通过对不同的时序路径添加derate来实现对OCV的建模
DC,floorplan,routing
根据线负载模型,由扇出计算出线长,再乘以单位线长上的电阻和电容,计算RC。利用Elmore 模型计算delay。
从架构定义——前端设计——后端设计——生产制造——封装——测试
LVS (Layout vs Schematic) 版图与原理图比较,DRC(design rule check )设计规则检查,timing signoff,功耗,功能,性能(频率),面积
较高层的走线,一般是5,6,7;double space和double width
EM,fanout较大,电流大。
CTS之前 setup:clock uncertainty = jitter + skew + margin hold:clock uncertainty = skew + margin CTS之后 setup:clock uncertainty = jitter + skew + margin hold:clock uncertainty = skew + margin
电压降,分为静态和动态。静态是由于连线电阻分压;动态是由于门同时打开,局部电流过大。 有IR drop应该合理设置电源I/O PAD的数量和位置;为电源网络添加去耦电容
版图原理图一致性检查,又称电气规则检查。 主要步骤将RTL抽取成spice网表,然后比对。 比对单元数量,单元个数,节点个数等。
版图原理图一致性检查 将版图抽取出spice模型和初始netlist进行对比。
时钟前面和一个latch加一个与门,latch主要是消除毛刺
以DC后的RTL和netlist为例。读入netlist,RTL和svf判断,根据逻辑锥和svf判断是否存在错误
电迁移。金属原子移动。 1.减小fanout 2.增加线的width 3.单元驱动能力过强 4.连线过长
综合时,模型粗略,过约SDC,时钟频率调高。 CTS之前没有真实的时钟树,uncertainty加大 PR工具和signoff工具一致性问题,margin也会有区别
在每个DFF的Q端做create_generated_clock
用latch可以borrow timing,即便enable信号不满足setup,也可以成功采到实现gating功能。 如果用Flop,一旦因为干扰或者时序本身的问题,很可能导致第一拍采不到数,会使得gating的时序落后一拍,如果时序要求严格,会产生问题
在OCV中,随级数增加,derate不变 在OCV中,公共路径的derate也会被CRPR去掉 OCV中,随着级数的增加,derate不变。但是这样time会很难满足,因为OCV本身的影响已经很严重了。 所以出现了AOCV,随着级数的增加,derate减小,这样可以让time更容易满足 在ocv中,如果设derate是1%,那么对于3级buffer链的derate值就是: 1%d+1%d+1%d=1%3d(每个buffer的延迟是d); 在aocv中,同样1%的derate,多级cell会对derate乘一个小于1的修正系数r,那么对于3级buffer链的derate值就是: 1%d+1%dr+1%drr=1%*d(1+r+r^2)<1%*3d 也就是说,随着深度增加,derate值在减小
1)PVT(生产工艺,电压,温度) 2)input transition, output load 3)Vth
1)zero wire load model 2)基于fanout的传统 WLM 3)基于物理位置(距离)的wire load model,在Cadence的RC中叫PLE,Synopsys叫DC Ultra Topographical
在CTS的spec文件中定义 clka 是 root,clkb 为 throughpin,再加上那些应该有的skew,transition,insertion delay等就好了,其它的事CTS会给你做
1) routing congestion发生在后端,前端一般不太考虑这个问题,需要后端自己去想办法解决,但是解决的办法不只在后端,也有一些方法需要前端的配合 2) 阻塞有多种情形,要分别讨论,没有一个统一的解决办法。能够把大部分的阻塞情况列举出来,就已经够4级的水平啦 答案: 1)阻塞在RAM(macro)之间:可能RAM之间的距离没有计算正确,可以加大RAM之间的间距;扭转RAM的方向,使得RAM的IOpin朝向更容易走线的那边;如果是多个RAM共用地址或者数据线,尽量把RAM的地址数据pin对齐 2)阻塞出现在RAM和帮助单元交界的地方:在RAM周围加一条halo(keepout);把RAM放在四周,尽量把中间留下的空间变成方形;在有阻塞的地方加一些由小的placementblockage组成的矩阵 3)阻塞出现在标准单元的某一块:也可以加一些由小的placement blockage组成的矩阵;module/instancepadding;利用placement guide减少那块地方的标准单元个数;scan chainreordering也会改善一些阻塞;定义density上限;使用congestion driven的placement,并且要求place之后做congestion优化;在综合是禁止使用那些pin太多太密集的标准单元(多半是那些复杂的组合逻辑单元);请前端使用RAM代替触发器矩阵;请前端修改算法 4)应该尽量减少power route占有的资源,谨慎选择power mesh使用的金属层,VIA的大小等。在detailroute完成之后,你如果已经试了各种解决signal congestion的方法,还有少量DRC无法解决时,可以考虑切掉部分power mesh
clock mesh 是一种方法。 如果是用普通的CTS的方法,可以从下面几个方面着手。不太可能一次就把CTS做得很好,要反复调试各种参数,达到最佳效果。 1)合理的clock root和through pin。这个看似CTS会从SDC自动抓出来,但是并不一定是最好的,特别是多个clock相互有重叠的leafpin时,要特别注意 2)不要用太大或者太小的clock buf/inv 3)选用RC最小的金属层。如果上面RC最小的金属层已经被占用,比如RC最小的top,top-1已经不够clocknet时,而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 opt 10)做clock tree时,就直接把clock net走线完成
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%
使用BUF: 优点:逻辑简单,便于post-CTS对时钟树的修改 缺点:面积大,功耗大,insertion delay大 使用INV: 优点:面积小,功耗小,insertion delay小,对时钟duty cycle有利 缺点:不易做时钟树的修改
(1) 宽 = 2倍的长 (2) 长 = 2倍的宽 去除不太好用的layer(比如metal1)和power专用layer(比如RDL)后,比较剩下的layer可以提供的H和V的routingresource,如果H的多,就选宽的,反之,就选高的。
1)stagger IO,2重io 可以算一个方法 2)IO可以不全放到四边,只要封装没问题就行啦 – flip chip 算第二个方法 3)如果有多套IOcell可以选择,尽量选瘦的 4)调整芯片的长宽比
hold 是对前后两个flipflop在相同时钟沿的检查.设了n-1就是返回n-1个周期做hold的检查,满足了两个flip flop在同一个时钟沿。如果没有-hold默认是检查n前一个有效时钟沿,如果n>=2,hold的检查就不是在同一个时钟效沿,对hold的要求就要多n-1个周期,那样太苛刻了,一般时序无法收敛
clock和generated clock一般由设计spec决定。除非有些个别的local generated clock可以有前端工程师自己添加 IO timing与系统设计有关,应该参考/兼顾其他芯片的IO时序,由前端工程师作出 exception(false path, multicycle path)一般是由前端工程师在做设计时决定的 后端可以提供clock network delay/skew,DRV,以及帮助检查SDC是否合格
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,routingchannel和图层,实在不行,回到CTS preCTS和postCTs主要就是差个clock skew的问题 还有build clock的方法,这个很重要, 很多inter-clock pathviolation都是由于没有balance好造成的 所以你在postCTS后的timing有时候有很奇怪的结果, postRoute主要是SI 影响,timing 会变差些, 可以做postroute opt来修复回来,减少下crosstalk的影响,
如果CTS支持multi-mode,直接使用即可。 如果不支持,或者MMCTS效果不理想,就是在CTS spec中,同时定义function 和 DFT 的时钟,然后在scanclock里面,把MUX设为leave pin,再让它们与function clok到MUX的延迟做动态平衡
这个要从每个SDC的特点着手,个人经验,与设计有关,不敢保证使用与所有设计。 scanshift:速度很慢,不用太担心setup,但是hold很重要,一旦hold有问题,所有与scan有关的测试全泡汤 scancapture:也是慢速,但是会有很多hold出来,特别是在不同的function时钟之间 scanat-speed:高速,解决了它的setup,其他DFT的setup基本上就连带着解决了 mbist at-speed:高速,但是涉及的逻辑不多 jtag:慢速,很容易与function SDC合并 所有结论是 MMMC setup:function + scan at-speed MMMC Hold: function(+jtag) + scanshift + scan capture
使用SDF做时序分析,无论使用什么tools,其结果应该是一样的,没有差异 使用SPEF时,因为工具需要把SPEF换算成SDF,这时会产生差异。 所以建议使用一个你信得过的工具生成SDF,然后大家都使用这个SDF做STA和仿真
如果是用latch+and/or在组合成的clock gatingcell,比较麻烦,以后估计不多见了,暫不讨论。TomPaul提到的问题都很让人头痛,特别是做CTS时,如何处理那些个latch的clkpin。Place时,latch和and/or cell一定要靠得很近。 一般使用ICG cell时, place:使用clock gating awareplacement选项 CTS:主要看工具的本领了,一般是希望在满足setup的前提下,ICGcell要尽量靠近clock root route:除了clock net优先以外,不记得还有什么可做的了
sso ,即simultaneous switchingouputs,即允许同时切换的信号IO的数量。多个信号IO同时切换时,因更多电流流过pad ring,在pad电源IO的bondingwire及片外引线上的电感上,产生Ldi/dt的压降。也即ssn,同时切换噪声。主要是会引起地弹,即ground bounce。 避免sso有很多方法。如增加供给pad用的电源IO数量,采用doublebonding或triple bonding,采用slew rate control的IO,避免把pad电源IO放在corner上(corner处bondingwire引线最长,L最大),等。 主要还是采用增加pad用电源IO数量的办法,计算方法一般foundry会提供,一般是给每个信号PAD一个DF值(还要根据bondingwire电感值做出选择),把自己用的所有信号IO的DF值加在一起,能得出所需要的POWER PAD的数量。
CLOCK ports 不需要加,其他都要 可以,set_input_delay -add_delay 可以,create_clock -add
大的流程是: 1)根据系统(其他芯片的)要求,芯片内部的floorplan,决定信号PAD的位置 2)计算出power PAD的个数,插入到信号PAD里面 3)加其他的PAD,比如IO filler,powercut,power on control,corner PAD,ESD等 细节可以包括: 1)如何计算core power PAD:估算corepower,再加50%,算出电流,除以每个core power IO的最大电流,就是大致的PAD个数。插入到信号PAD ring后,还要再计算powerEM,防止一根电源线上的电流过大。 2)如何计算IO powerPAD:从信号IO的功耗算起,同时计算SSO,取2个结果里面较大的 3)在什么地方插入powercut:不同的电压core电压和不同的IO电压之间,power island之间,数字和模拟电源之间。 4)power on control PAD,一段每个IOring需要一个 5)ESD一般要加在每个不同的电源之间
输入端不行,输出端可以 输入悬空会因为周围电场的变化而引起cell内部的翻转,继而影响到其他的逻辑的正确性
从电源布线的角度讲,那些远离电源端的地方,电源布线少的地方,容易出现ir-drop的问题。 比如wire bond芯片的中间,flipchip的四角,analog macro的边上(因为有些analog的上面不容许数字电源布线) 从swtiching activity的角度讲,toggle rate高并且celldensiy高的地方IRdrop大,所以切记不要为了balance clock tree,把一堆clock buffer摆在一起。 如果是静态IRdrop,频率高的地方IRdrop大。
对timing的影响:slowtransition使得速度变慢,fast transition使得速度变快 对power的影响:slowtransition时功耗增大,fast时功耗减小 对gatecount的影响:要分以下2种情况,(1)如果整体的transition要求较高,slow transition会增加gatecount;(2)如果整体的transition要求不高,input transition对gate count没有大的影响 注意:inputtransition会逐级传送到chip里面的,虽然效力在逐级减小
cloning是在有多个sink的情况下,不改变逻辑功能把当前cell复制一份,分别驱动下一级的cell,这样可以减少当前单元的负载,从而获得更好的时序,有时是为了placement的考虑,譬如几个sink的方向不同,缺点是会增加上一级的负载 buffering是在不改变信号的情况下对信号再生,提高它的驱动能力,通常是两级反相器构成,可以提高电路的运行速度,有时也用来当延时单元,特点是不会增加上一级的负载 在多个sink的时序都比较紧的情况下适合用cloning,如果sink对timing的要求区别挺大的,可以用buffering,一部分时序较紧的由上一级直接驱动,剩下的可以加一级buffer后驱动
LEF是一种简化版的GDS,它只包括size和metal层有关的信息,比如pin,blockage等,其他baselayer的东西只在GDS里面可以看到。 同时LEF还有一些GDS里面没有的信息,比如,metal的R,C,routingand placement rule等 LEF是一个文本文件,可以修改编辑。GDS是二进制文件,比较难修改
形式验证是为了验证综合前后或者layout前后,电路是否在数学模型上有改变吧。那综合前后的形式验证为例,用formality进行形式验证时需要DC提供验证节点,然后FM根据这些节点去验证综合前后的电路在数学逻辑功能上是否等价。形式验证不需要任何激励测试向量,他能保证逻辑上电路没有发生变化。 仿真的话有分为layout前后的仿真,前仿真主要用于测试功能是否正确,需要测试激励,后仿真主要用于测试是否满足时序(当然也就测试了功能是否正确),同样也需要激励信号。仿真的目的是模拟电路实际工作状态,看输入和输出是否满足设计要求。 如果要说区别的话,我个人感觉形式验证就像数字电路中的analyse,分析电路功能,看是否满足设计要求,而仿真的话更多的是在模拟实际电路工作情况。
因为clock tree与leafpin的物理位置密切相关,DC没有这些个信息,做了也不准,所以就不做了。也是因为后端知道DC给的clcok tree根本不准,所以一旦遇到,就直接删除 至于resettree,是可做可不做,如果reset的时序很难的话,还是建议做一下,看看DC时是否可以满足时序,如果DC都满足不了,估计后端也很难做到,趁早想别的方案
以前比较确切地定义是4个transistor为一个gate, 计算整个设计的gate count时,应该先算出(所有standardcell的总面积),再除以(4个transistor的面积)。注意,各种RAM,PLL,ADC,DAC等macro不能算在总面积里 现在人们为了简单,就把一倍驱动能力的,2输入的nandcell的面积认为一个gate的面积,一个nandcell与4个transistor的面积是有一点差别的,但是你一般不容易搞到准确的4个transistor的面积 所以现在的standard cell的gatecount就变成(所有standard cell的总面积),再除以(一倍驱动能力的,2输入的nand cell的面积)
ESD是指静电放电。带有足够高电荷的电气绝缘的导体在靠近时,会形成有相反电势的集成电路,电荷“跨接”,从而引起静电放电(ESD)。 ESD是指静电泄放。一般在IO 的InPut 加ESD电路,在IC的测试。封装。运输。使用等过程中可以把静电有效泄放避免对CMOS 栅极的损伤,从而有效地保护IC。 如果不考虑模拟电路的干扰问题,基本上在各个VDD,VSS之间都要加入back-to-backdiode的ESD电路
后端主要是double via, spead wirewidth/space, 还有add dummy metal,使metal desity更均匀, OPC: optical proximity correction CMP: chemical mechanicalplanarization RET: resolution enhancementtechniques |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/8 4:40:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |