后端基本概念

上传人:s****a 文档编号:224851332 上传时间:2023-08-01 格式:DOCX 页数:10 大小:29.43KB
返回 下载 相关 举报
后端基本概念_第1页
第1页 / 共10页
后端基本概念_第2页
第2页 / 共10页
后端基本概念_第3页
第3页 / 共10页
点击查看更多>>
资源描述
为了方便大家尽快找到需要的话题,经icfb版主建议,编辑这个数字后端的FAQ。 如果您是初学者,建议先搜索相关的资料,读读其他人的帖子,一些基本概念在那里都已经 讨论过了。如果您已经有2 年以上的实战经验,下面这些雕虫小技就不太值得您去浪费时间了。先说说作为一个有经验的后端(暫不包括DFT工程师和layout工程师)工程师,需要掌握 哪些知识4 个级别:1)知道一些基本概念,2)简单地掌握这门技术,3)熟练4)精通半导体工艺-2RTL coding - 2综合 - 2时序约束 - 3APR - 3DFT - 2DRC/LVS - 3仿真 - 2形式验证 - 2以下是FAQ分类:2 楼:时序约束, STA3 楼:综合 DC/RC4 楼: APR (floorplan, place, CTS, route)5 楼:验证(LEC, DRC, LVS 等)6 楼: DFT7 楼:低功耗8 楼:面试9 楼:名词解释时序约束,STA(1) clockQ1.1 什么是同步时钟? 时钟频率是整倍数,并且相互之间的相位是固定而且相差可预知的,才可以称得上是 同步时钟。其他的都算异步时钟。比如,5M,10M 是同步 2M,3M 一般算异步 一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步 一个时钟进到2个PLL,就算那2个PLL的输出频率相同,一般也算是异步时钟,除 非你 de-skewQ1.2 如何处理同步时钟? 设计要求严格的公司,就算是同步时钟,数据在同步时钟间传送时,依然要用 meta-stability FF, 可以 set_false_path如果放松要求,不用meta-stability FF,则同步时钟之间是real path,做CTS时,同步 时钟要 clock tree balance。注意不同频率的同步时钟的最小时间间隔被用来检查setup 如果上升下降沿混用的话,setup的时间间隔就只有半个时钟周期了Q1.3 如何处理异步时钟?很简单, set_false_path 注意要from A to B,同时要from B to AQ1.4 如何定义时钟?create_clock如果指定某个pin/port,就是实时钟,如果没有指定pin和port,就是 虚拟时钟巧妙利用 waveform 选项可以做出不同波形的时钟被定义成时钟的net,在综合时,自动带有ideal network和dont_touch的属性。但是 当它被用作data计算延迟时,ideal net的属性会自动消失时钟会自动穿过逻辑单元,停在时序单元的时钟端,所以用FF产生的分频时钟要再 用 create_generated_clock 定义一次Q1.5 如何处理多选一时钟? 在实际应用当中,如果这几个时钟不会同时出现的话,则在定义时钟时,只选择最快 频率的就可以了如果是多个时钟同时出现,可以用set_case_analysis选一个,也可以放它们全都过去,但是在MUX后面把它们之间set_false_pathQ1.6 巧妙定义时钟直接在分频 FF 的 Q 端定义 generated clock 时,有时会把分频 FF 的时序打掉,解决办 法是在分频FF的Q端加一个时钟buf,从那个buf的输出端定义generated clock,从而保证 分频 FF 自身的时序完整如果从source clock到generated clock之间有多条路径,你希望PT用指定的一条路径 来计算时序的话,可以用set_case_ana lysis ,set_disbale_timing 或者一级一级地定义generated clock来引导PT达到你的要求分频器时序约束问题 时序分析中同一时钟的不同路径问题请教如下要求的 clock 在 pt 中应该怎么 create怎样设set_case或者别的,才能让pt选择同一条clock pathQ1.7 什么时候需要设置 latency?latency分为 source latency 和 network latency 两种。source latency是源时钟自带的, network latency 就是 CTS 后的 clock tree insertion delay。在综合时,一般不需要 latency,除非,已知不同clock带有不同的source latency,并且它们之间有时序要求预知不同clock会有不同的clock tree insertion delay,不想平衡它们,但是要满足他们 之间的时序要求做完CTS后,要把network latency去掉请问 set_clock_latency 设太大会有什么不好Q1.8 如何设置 uncertaintyclock uncertainty 分为 setup 和 hold, preCTS 和 postCTS 几种不同的情况 一般的处理原则是:preCTS, setup: uncertainty = PLL jitter + 预估的 clock skewpreCTS, hold: uncertainty = 预估的 clock skewpostCTS, set_propagate_clock all_clockspostCTS, setup: uncertainty = PLL jitter postCTS, hold: uncertainty = 0有时fundry要求hold uncertainty保留一定的量,这时就把那个保留量加到上面的公 式中sdc 文件中对 clk 的 uncertainty、transition、latency 的设置(2) IO 端口的约束Q2.1 如何加 IO 端口的约束?最普通的方法是对输入端, set_input_delay, set_driving_cell (也有用 set_input_transition 的,但是不 多见)对输出端,set_output_delay, set_load对时钟端, set_clock_transitiondc综合时的clock transition应该参考什么设定?set_drive ,set_loadQ2.2 哪些端口不需要约束?静态信号可以 set_false_path,比女口 reset, test_mode, function_mode_select 不能真的什么约束都不加Q2.3什么样的reset信号可以set_false_path?如果在工作时,reset信号有效时,时钟信号不翻转,就可以set_false_path 如果reset信号动作时,时钟也有动作的话,就不能set_false_pathQ2.4像reset那样的high fanout信号需要设定为ideal net吗?如果是false path的话,可以设为ideal net一般不需要设为ideal net,让DC加入buffer tree后,有利于估算功耗和面积Q2.5 如果有一组输出信号,需要他们之间对齐,但是不太在乎有多大的延迟,这时应 该如何约束?如果有输出时钟的话,在那个输出时钟端口定义一个generated_clock,其它信号的 output_delay都相对于这个generated_clock而定。只要有max和min,就可以把所有信号卡 在一个范围之内如果没有输出时钟的话,用set_output_delay -reference_pinQ2.6 如何计算 input 和 output delay?如果是block的input和output delay,可以预先分配,比如输出端,输入端各1/3, 中间的连接 1/3block 的端口最好都 flop-in, flop-out 如果是chip IO,要度其他芯片的10时序和电路板上面的延迟,比较麻烦set_input_delay的时间设置(3)DRVDRV有时也加DRC,与物理检测的DRC不是一个概念DRV包括,set_max_transition 与工艺相关,65nm的话,在0.6ns左右 set_max_fanout与工艺相关,一般在1220之间 set_max_capacitanceset_max_powerset_max_area(4)false path, multicycle pathQ4.1 什么情况下需要 set_false_path?异步时钟之间,到 meta-stability 的第一个 FF 路径, 静态信号Q4.2 何时会用到 multicycle_path?太长的 path,不会每个周期都变的信号注意:在RTL中,前端一定要多周期工作一次的功能一般 set_multicycle_path -setup 要同时写 set_multicycle_path -hold (5)wire load modelwire load model是一种简单地根据fanout来估算wire delay的方法,在综合时,一般 根据设计的大小选择对应的WLM有时也会用zero wire load model,这时的clock period要相应减小1525%,或者clock uncertainty 增加 1525%set_wire_load_model两种模式top和enclosed到底有什么区别?更加准确的计算wire delay的方法是DC topo和RC physical, 他们在综合时会粗略地做个place,然后根据距离来计算延迟(6)clock gatingQ6.1 如何加 clock gating?局部的clock gating在综合时,会自动加进去。加clock gating后,不但会减小功耗, 还会改善时序,因为本来到D端的逻辑,一部分被移到CK端了,简化了 D端的逻辑整个block的clock gating,一般直接在RTL里面加,因为DC没有那么聪明Q6.2需要对clock gating加什么特别的约束吗?如果使用标准库里面的 ICG 单元,不需要附加任何特别的约束,前后端的工具都认得 它如 果 用 latch+and 自 己 搭 的 clock gating , 你 要 对 那 个 and 单 元 set_disable_clock_gating_check,还要告诉后端,一定把 latch 和 and 摆在一起一般只在没有动态切换时钟时,才可以用一个 and/or做clock gating,这时也要 set_disable_clock_gating_checkclock gating cell 约束某个domain的clk通过gating关断重启后,对这个domain做复位有没有必要?(7)case_analysisset_case_analysis 可以强制某个 node 为 0/1这个 0/1 会沿着纯逻辑组合单元向前传送,如果没有特别设定的话,会停在时序单元上 注意,只是是向前传,不会向左右2 边和向后传举例:如果设在输出端上,那么所有fanin端都会被强制为0/1如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响8) ideal net/networkideal_net只作用于这条netideal_network 会把这个属性传送下去clock net自动带有ideal net属性其他net,何时需要设定ideal net?见Q2.41)综合的注意事项Q1.1 需要 fix hold 吗? 不需要, hold 交由后端去做就好了。所以综合时,不需要读入min.lib,不用设wc_bc等复杂的选项Q1.2 综合出来的网表如何验证?如 RTL 做形式验证 gate-sim (网表仿真)。不要用延迟。不需要从DC输出SDF,因为那个根本不准,而且它也无法保证没有hold违反Q1.3如何让DC自动插入clock gating 在脚本中加入set power_cg_always_enable_registers true set_max_leakage_power 0.0 set_max_dynamic_power 0.0 set_clock_gating_style (指定 ICG)insert_clock_gatingreplace_clock_gatesQ1.4 综合时要检查哪些项目?最最起码要做,综合前,check_design, check_timing,保证所有的 path 都有约束(含 timing exception) 综合后, report_timing, report_constraint, report_area, report_power, report_qorQ1.5如何解决综合后setup的违法?多综合几遍检查约束是否合理最后只好改RTL 了Q1.6 如何判断约束是否合理?什么是合理的约束还真不好说,但是下面是一些不合理的情况,遇到了一定得解决 2#楼里面所列约束项目不完整的startpoint 或 endpoint 的 clock cycle 特别大的,说明那是异步时钟 某个cell或net延迟很大的,可能是clock net当作signal用了,设了 dont_touchQ1.7 如何得到更好的网表?对于DC, 一般人们都喜欢把clock period调小一点(1025%),那样DC会给你个timing 比较好的网表,但是代价的面积的增大和功耗的增加。当然,你调clock uncertainty也有同 样的效果1)文件的准备和网表的检验Q1.1后端都需要什么样的库文件?因为现在的APR工具尽量把所有的功能都整合进去,所以需要的库文件也是五花八门, 杂乱繁复,(Sy nopsys会把这些文件整合到一起,存在milkyway里面)physical: LEF 和 GDStiming: LIB,(分为NLDM, CCS和ECSM三种,有一个基本上就可以了)RC delay: capTable, QRC tech, QRC lib 或者 TLU + route rule: tech lef 或者 tech filextalk: cdb 或者power: VoltageStorm tech, VoltageStorm lib 或者Q1.2与设计有关的文件要哪些?网表,时序约束,10 file, sca n DEFQ1.3时序约束需要修改吗?有时需要,如果综合时使用了过小的clock period,要还原回来可以去掉 SDC 里面的 wi re load, ope rati on con diti on, ideal net, max ar ea 有些为综合而设置的don t_touch, don t_use有些为综合而设置的clock late ncyQ1.4 APR之前要做什么样的检验?检查所有库是否一致,版本是否一样,使用单位是否一样,是否有重名用zero wire load model来report timing,结果应该和同样条件下DC/RC的结 果非常一致check timing保证所有的单元都有约束check desig n,不能看到任何in put悬空,不能有3态门以外的ouput短路(2) 个好的 floorplan如果问我APR里面那步最重要的话,我会选floo rpla n。因为它的好坏,可以直接影 响到timing, congestion,IR-drop,以及芯片的大小和价格。Q2.1什么是一个好的floor pla n?简单讲就是让上面几条都过得去的。一个好的floorplan应该是macro摆放井然有序,走线密度刚好达到congestion可 以承受的上限,标准单元的摆放不可过于松散,标准单元的区域最好是大片相连的,10的 排放按照功能分类,顺序与其他芯片的顺序一致,没有供电困难的死角。Q2.2做floorplan时要考虑哪些因素?IO的排放顺序power 和 IR-drop模拟信号与数字信号的隔离内部数据的流程macro的面积和连接critical timing模块的距离congestion模块的走线资源Q2.3如何得到一个好的floorplan?与系统工程师讨论IO的排放和前端工程师商量内部数据的流向,critical timing模块向mix signal工程师请教模拟模块的位置,间隔然后让APR工具摆几个方案,以供参考最后还是要自己手动调整。对绝大多数设计来讲,把macro放在四周,中间留给标准 单元大 macro放外圈,小 macro放内圈大的macro之间一般要留一些空间给标准单元,因为clock buffer,signal repeater 等跨过大macro的信号需要那些空间插入buffer小的macro之间可以没有空间,几个小的可以挤在一堆,堆与堆之间留出一点空间就 可以了(3)时序收敛这是后端的核心任务之一,也是判断一个工具好坏的重要标准。各家EDA公司为之努 力了几十年,至今也没有得到圆满的解决。初学者经常会问,如何让ICC时序收敛啊?为 什么做了 optDesign,encounter还有setup violation啊?建议以后就别这么问了,如 果有一个好方法,可以从头跑到尾,自动把时序收敛了,那家公司就可以一统天下。到时, 我们也就都可以下岗了!每个EDA工具都有一定的局限性,我们要做的不是去挑战它的极限,而是为它准备一 个好的条件,让它达到我们的要求。这节不用问答的形式3.1 了解每个工具的特性,预测最后的结果,在开始时预留一定的余量。APR大致分为3步,place,CTS和route,每步都有相应的时序优化,每一步, 不同的工具会给出不同的的结果。以ICC为例,place (如果没有特别说明,以后所说每 步均包含相应的优化)后,会比综合的时序差一点,CTS后会更差,route后会比CTS好 一些,但是达不到place后的水平。en cou nte r是一路向下Azu ro (现在已经被cade nee 购买)的CTS会把时序拉回来。所以ICC的place + Azuto CTS + ICC route可以得到 比较好的结果。知道了这个特点,在place时,如果有可能的话,多留些余量,也就是把时序设 得更紧一些3.2 MMMC每个设计可能会有多个function mode,还有多个DFT mode,还有foundry 建议的不同PVT,加不同RC的setup和hold的检查,这种组合出来的timing mode有 几十上百种,要收敛这么多的时序,绝不是一件容易的事,所以出现了MMMC。EDA公司 号称为我们迎接挑战,已经准备好了需要的工具,但是可信吗?我们搭得起这么多的运行时 间吗?所以还是不要把这么多的mode全丢给工具,仔细的选几个最困难的setup和hold mode给工具,其他mode的时序基本上会被这几个选上的mode涵盖的。有一个帖子 讨论过选哪几个mode。有一种比较高超的技巧,经过仔细分析各个mode下,时钟的关系,可以把其中 几个合并成一个,比如function和mbist。但是这种方法并不是放之四海而皆准的,而且 要求精通SDC命令的使用。3.3每步都干什么?place之后,只优化setup。使用粗糙的RC抽取,global routeCTS之后,可以只优化setup,也可以优化setup和hold。使用粗糙的RC抽取, global route,如果 clock net 已经 route 过了,clock 就用 detail route 的结果。时钟 走线要 double width 和 double space,高速(500MHz)时钟要 shieldingroute之后,要优化setup和hold可以试着多做几次优化,从中挑一个最好的结果,但是,一般情况下,不要重复 (同样的命令和选项)超过3次。3.4出现congestion怎么办?congestion说明走线太多,要把那一块的cell推开一些;避免使用端口太多(6 个)太密的组合逻辑单元;不要把单元放在M2的power mesh下;macro边上不要放 单元; 使用congestion driven的place和 opt; 遇到十分严重的congestion时,减 小global route可以使用的资源,比如在encounter里面可以让trail route在若干条走 线后,空出一根走线。3.4仔细分析timing violation,再找解决方法出现timing violation后的第一步是分析那条path,找出违反的原因,然后才是 解决办法。造成timing violation的原因很多,随便列几个常见的,clock tree不平衡:CTS的定义有错误;不合理的FF位置,比如,放在了一个很细很长的通道中。利用useful skew消除setup违反起始FF与终点FF的距离太长:用group把它们拉近xtalk的干扰:加大线间距离,不要用infin it timi ng wi ndow算xtalkdetour走线造成的大的延迟:解决congestion问题fan out太大:忘记set_max_fa nout,或者设定不合理,或者对某些netset_dont_touch 了单元的驱动能力太小:去掉大驱动能力cell的dont_use属性,检查是否局部 placement太密,没有空间sizeup 了hold timing violation 与 setup violation同时存在,工具无法做了。这种情况多半是SDC的问题,很少是真的,除非那是一个非常特殊的10 timing(4)低功耗低功耗与高速度是相互矛盾的,要事先确定你更想要哪个,可以牺牲哪个.后端对低功耗可以做的事情并不是很多,power island,multiple supplyvoltage,DVFS等都不是由后端决定的。后端能主导的有,Multi-Vth单元的替换:建议先不要用LVT单元ICG单元在CTS里的位置:当然是在时序容许的条件下,越靠近clock root越 好。最后在时序收敛后,再做一次powe r优化(5)ECOECO 分为 post mask ECO 和 pre mask ECO,也就是只修改 metal layer 的 ECO和任何layer都可以动到的ECOpost mask ECO是利用预先留好的备用单元,做的逻辑修改。现在的标准单元库 中,有些FILL cell是带transister,只要用metal1/2把它们连起来,就可以搭成需要的 逻辑单元。这种ECO受限与spare cell的位置,如果附近找不到的话,就比较麻烦了,所 以它的修改规模十分有限。pre mask ECO比post mask的要灵活得多。在tapeout之前,如果发现有修 改的地方,就是用这种方法。它可以改几百个,甚至上千个单元。ECO修改组合逻辑比较容易,如果动到FF的话,有格外小心,因为它有可能影 响clock tree,进而造成大量的时序违反。做ECO要前端后端联手完成,如何单反的一意孤行,不会得到正确的结果。前端 找到要修改的逻辑单元= 后端找到相应的物理位置,检查周围是否有足够的spa re cell或者空间做ECO =检查时序,预估ECO后的时序=后端建议使用的ECO cell =前端修改netlist =后端做ECO place/route =
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!