公司招聘微电子后端面试题.pdf_第1页
公司招聘微电子后端面试题.pdf_第2页
公司招聘微电子后端面试题.pdf_第3页
公司招聘微电子后端面试题.pdf_第4页
公司招聘微电子后端面试题.pdf_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(079)(079) P&Rbuffer 在 P&R 里面的用途 (至少三种)? 难度:1 答案: 1). 修 hold 违例; 2).修 max_cap 违例; 3).修 SI 引起的 delay 以及 noise 违例; 4).修 antenna 违例; 5).修 max_fanout 违例; 6).修 max_length 违例; 7).修 max_transition 违例; 8).做 clock tree (080)logic Implement an AND, OR gate and inverter using 2 inputs mux? 分别各用一个 2 输入的 MUX,做一个与门,或门和反向器 难度:1 答案:(太简单,省略了) (081)APR 如何找到时序上和物理位置上最长的路径? 注意:问题不是找最 critical path 补充:不考虑异步路径,同步里面要考虑 multicycle 路径 难度:4 方法有很多,捡一个较为简单的说 longest timing path: 按照要求修改 SDC, 如果要求包含 multicycle path,则去掉 SDC 里面的 multicycle path 如果要求包含 async path,则去掉 SDC 里面的 false path 改 input,output delay 为 0 改所有 clock period 为同一个数值 然后 report_timing longest physical path 比较麻烦,因为要考虑 detour route,所以不能简单地算 2 个 flop 之间的直线距离 应该首先在现有的工具里面找现成的命令,如果没有的话,就要先把每条 timing path 里面 的所有 net 找出来,逐个找到每条 net 的长度,之和就是这条 path 的 physical length, 然后,逐一循环 (082)STA 问个简单一点的 How to calculate maximum operating frequency? 如何计算出设计的最高频率? 难度:1 去掉 SDC 中多余的(过紧的)设定,report_timing 后得到 slack,最大的延迟 = 时钟周期 - slack,最高频率就是最大的延迟的倒数 其中 set_max_delay 报出的 slack 不能计算在内 (083)clock(083)clock Design a divide-by-3 sequential circuit with 50% duty cycle? (用标准单元)画一个 50% duty cycle 的三分频电路 难度:1 (084)SDC(084)SDC Design 4-bit asynchronous counter? how to set timing constraint for it? 画一个 4 位异步计数器,如何加时序约束? 难度:2 答案:每个异步 FF 的时钟端都要定义 clock 或者 generated_clock (085)STA(085)STA 为什么 clock gating cell 里面用的是 latch,如果换成 flop 的话,有什么不同 难度:2 用 latch 可以 borrow timing,即便 enable 信号不满足 setup,也可以成功采到实现 gating 功能。 如果用 Flop,一旦因为干扰或者时序本身的问题,很可能导致第一拍采不到数,会使得 gating 的时序落后一拍,如果时序要求严格,会产生问题。 用 flop 有可能产生毛刺 (086)logic(086)logic Why are most interrupts/reset active low? 为什么大多数的中断和 reset 是低电平有效? 难度:2 (087)RTL(087)RTL What is the principal advantage of Gray Code over straight (conventional) binary? Gray code 编码比二进制编码有什么优势 难度:1 不会同时翻转,带来的好处: 1-时序上消除毛刺,在异步交互中使用 2-功耗上,同时翻转的小,减少动态功耗 3-对 PAD 设计来说,减少计算 SSO 时同时翻转数,降低对 PG pad 要求 4-对总线布线来说,不同时翻转,抑制串扰更容易,时序易达到 (088)RTL(088)RTL how many boolean expression can be made from 3 inputs? 给三个输入变量,可以写出多少种不同的逻辑表达式? (这个真的与后端没什么关系) 难度:1 最近出的都是些校招面试的题目,没什么难度。以后会出些工作中遇到的问题 2(23)=256 (089)STA(089)STA In AOCV table, within the logic level increasing, does the derate value increase or decrease? 在 AOCV 里面,随着逻辑单元级数的增加,derate 的值是增加还是减少? 难度:3 OCV 中,随着级数的增加,derate 不变。但是这样 time 会很难满足,因为 OCV 本身的影响 已经很严重了。 所以出现了 AOCV,随着级数的增加,derate 减小,这样可以让 time 更容易满足。 (090)power(090)power 有 3 个模块,A,B,C,分别有各自不同的电源,其中 A 与 C 之间的连接要穿过 B,并且在 B 里面有个 buf,当 A 和 C 的电源都关断时,是否需要把 B 里面那个 buf 也断电?为什么? 难度:4 我们假设这条路径是从 A 经过 B 到 C,一般情况下,当 A 断电时,所有 A 的输出应该都被 isolate,这样就不用担心 B 里面的 buf 输入浮空的问题。因为单独一个 buf 没有 isolate cell,所以不能断电。 如果 isolate 不是在 A 的输出,而是 C 的输入,那么,从省电的角度考虑,应该把 B 里面的 buf 断电 (091)CTS(091)CTS What is Multisource CTS? 听说过 Multisource CTS 吗? 难度:3 (1) clock(1) clock Q1.1 什么是同步时钟? 时钟频率是整倍数, 并且相互之间的相位是固定而且相差可预知的, 才可以称得 上是同步时钟。其他的都算异步时钟。 比如, 5M,10M 是同步 2M,3M 一般算异步 一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片, 因为无法确定时钟在另一个芯片里面的 latency,所以输出的时钟与输入的时钟算异步 一个时钟进到 2 个 PLL, 就算那 2 个 PLL 的输出频率相同, 一般也算是异步时钟, 除非你 de-skew Q1.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 A Q1.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_path Q1.6 巧妙定义时钟 直接在分频 FF 的 Q 端定义 generated clock 时,有时会把分频 FF 的时序打掉, 解决办法是在分频 FF 的 Q 端加一个时钟 buf,从那个 buf 的输出端定义 generated clock, 从而保证分频 FF 自身的时序完整 如果从 source clock 到 generated clock 之间有多条路径,你希望 PT 用指定的 一条路径来计算时序的话,可以用 set_case_analysis, set_disbale_timing 或者一级一 级地定义 generated clock 来引导 PT 达到你的要求 分频器时序约束问题 时序分析中同一时钟的不同路径问题 请教如下要求的 clock 在 pt 中应该怎么 create 怎样设 set_case 或者别的,才能让 pt 选择同一条 clock path Q1.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 如何设置 uncertainty clock uncertainty 分为 setup 和 hold,preCTS 和 postCTS 几种不同的情况 一般的处理原则是: preCTS,setup: uncertainty = PLL jitter + 预估的 clock skew preCTS,hold: uncertainty = 预估的 clock skew postCTS,set_propagate_clock all_clocks postCTS,setup: uncertainty = PLL jitter postCTS,hold: uncertainty = 0 有时 fundry 要求 hold uncertainty 保留一定的量,这时就把那个保留量加到上 面的公式中 sdc 文件中对 clk 的 uncertainty、transition、latency 的设置 (2) IO 端口的约束(2) IO 端口的约束 Q2.1 如何加 IO 端口的约束? 最普通的方法是 对输入端,set_input_delay, set_driving_cell (也有用 set_input_transition 的,但是不多见) 对输出端,set_output_delay,set_load 对时钟端,set_clock_transition dc 综合时的 clock transition 应该参考什么设定? set_drive ,set_load Q2.2 哪些端口不需要约束? 静态信号可以 set_false_path, 比如 reset, test_mode, function_mode_select 不能真的什么约束都不加 Q2.3 什么样的 reset 信号可以 set_false_path? 如果在工作时,reset 信号有效时,时钟信号不翻转,就可以 set_false_path 如果 reset 信号动作时,时钟也有动作的话,就不能 set_false_path Q2.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_pin Q2.6 如何计算 input 和 output delay? 如果是 block 的 input 和 output delay,可以预先分配,比如输出端,输入端 各 1/3,中间的连接 1/3 block 的端口最好都 flop-in,flop-out 如果是 chip IO,要度其他芯片的 IO 时序和电路板上面的延迟,比较麻烦 set_input_delay 的时间设置 (3) DRV(3) DRV DRV 有时也加 DRC,与物理检测的 DRC 不是一个概念 DRV 包括, set_max_transition与工艺相关,65nm 的话,在 0.6ns 左右 set_max_fanout与工艺相关,一般在 1220 之间 set_max_capacitance set_max_power set_max_area (4) false path,multicycle path(4) false path,multicycle path Q4.1 什么情况下需要 set_false_path? 异步时钟之间, 到 meta-stability 的第一个 FF 路径, 静态信号 Q4.2 何时会用到 multicycle_path? 太长的 path, 不会每个周期都变的信号 注意:在 RTL 中,前端一定要多周期工作一次的功能 一般 set_multicycle_path -setup 要同时写 set_multicycle_path -hold (5) wire load model(5) wire load model wire 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 gating(6) clock gating Q6.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_check clock gating cell 约束 某个domain 的clk 通过gating 关断重启后, 对这个 domain 做复位有没有必要? (7) case_analysis(7) case_analysis set_case_analysis 可以强制某个 node 为 0/1 这个 0/1 会沿着纯逻辑组合单元向前传送, 如果没有特别设定的话, 会停在时序单元 上 注意,只是是向前传,不会向左右 2 边和向后传 举例: 如果设在输出端上,那么所有 fanin 端都会被强制为 0/1 如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响 (8) ideal net/network(8) ideal net/network ideal_net 只作用于这条 net ideal_network 会把这个属性传送下去 clock net 自动带有 ideal net 属性 其他 net,何时需要设定 ideal net?见 Q2.4 综合 DC/RC综合 DC/RC 综合脚本的样本现在到处都是,最好找一个,照猫画虎改改用 建议把时序约束脚本与综合脚本分开存放,这样时序约束可以单独使用。 (1)综合的注意事项(1)综合的注意事项 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_gating replace_clock_gates Q1.4 综合时要检查哪些项目? 最最起码要做, 综合前,check_design,check_timing,保证所有的 path 都有约束(含 timing exception) 综合后,report_timing, report_constraint,report_area,report_power, report_qor Q1.5如何解决综合后 setup 的违法? 多综合几遍 检查约束是否合理 最后只好改 RTL 了 Q1.6 如何判断约束是否合理? 什么是合理的约束还真不好说, 但是下面是一些不合理的情况, 遇到了一定得解 决 2#楼里面所列约束项目不完整的 startpoint 或 endpoint 的 clock cycle 特别大的,说明那是异步时钟 某个 cell 或 net 延迟很大的,可能是 clock net 当作 signal 用了,设了 dont_touch Q1.7如何得到更好的网表? 对于 DC,一般人们都喜欢把 clock period 调小一点(1025%),那样 DC 会给 你个 timing 比较好的网表,但是代价的面积的增大和功耗的增加。当然,你调 clock uncertainty 也有同样的效果 SDF 的读入问题 STA 输出 verilog netlist 如何设置大小写不敏感? dc 综合后的一些警告 ungroup 使用 DC 的 UPF 和 operating_condition 问题 APR (floorplan, place, CTS,route)APR (floorplan, place, CTS,route) 这节太大了,不知道从何说起,也不知道要说多少, 真正详细完整的介绍应该是 Synopsys 和 Cadence 的教程和 userguide 就捡一些教程里面没有的东西吧 (1) 文件的准备和网表的检验(1) 文件的准备和网表的检验 Q1.1 后端都需要什么样的库文件? 因为现在的 APR 工具尽量把所有的功能都整合进去, 所以需要的库文件也是五花 八门,杂乱繁复, (Synopsys 会把这些文件整合到一起,存在 milkyway 里面) physical: LEF 和 GDS timing: LIB, (分为 NLDM, CCS 和 ECSM 三种,有一个基本上就可以了) RC delay: capTable, QRC tech, QRC lib 或者 TLU+ route rule: tech lef 或者 tech file xtalk: cdb 或者 power: VoltageStorm tech, VoltageStorm lib 或者 Q1.2 与设计有关的文件要哪些? 网表,时序约束,IO file, scan DEF Q1.3 时序约束需要修改吗? 有时需要, 如果综合时使用了过小的 clock period,要还原回来 可以去掉 SDC 里面的 wire load, operation condition, ideal net, max area 有些为综合而设置的 dont_touch, dont_use 有些为综合而设置的 clock latency Q1.4 APR 之前要做什么样的检验? 检查所有库是否一致,版本是否一样,使用单位是否一样,是否有重名 用 zero wire load model 来 report timing,结果应该和同样条件下 DC/RC 的 结果非常一致 check timing 保证所有的单元都有约束 check design,不能看到任何 input 悬空,不能有 3 态门以外的 ouput 短路 (2) 一个好的 floorplan(2) 一个好的 floorplan 如果问我 APR 里面那步最重要的话,我会选 floorplan。因为它的好坏,可以直 接影响到 timing,congestion,IR-drop,以及芯片的大小和价格。 Q2.1什么是一个好的 floorplan? 简单讲就是让上面几条都过得去的。 一个好的 floorplan 应该是 macro 摆放井然有序, 走线密度刚好达到 congestion 可以承受的上限,标准单元的摆放不可过于松散,标准单元的区域最好是大片相连的,IO 的排放按照功能分类,顺序与其他芯片的顺序一致,没有供电困难的死角。 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) 时序收敛(3) 时序收敛 这是后端的核心任务之一, 也是判断一个工具好坏的重要标准。 各家 EDA 公司为 之努力了几十年,至今也没有得到圆满的解决。初学者经常会问,如何让 ICC 时序收敛啊? 为什么做了 optDesign,encounter 还有 setup violation 啊?建议以后就别这么问了,如 果有一个好方法,可以从头跑到尾,自动把时序收敛了,那家公司就可以一统天下。到时, 我们也就都可以下岗了! 每个 EDA 工具都有一定的局限性, 我们要做的不是去挑战它的极限, 而是为它准 备一个好的条件,让它达到我们的要求。 这节不用问答的形式 3.1 了解每个工具的特性,预测最后的结果,在开始时预留一定的余量。 APR 大致分为 3 步,place,CTS 和 route,每步都有相应的时序优化,每 一步,不同的工具会给出不同的的结果。以 ICC 为例,place (如果没有特别说明,以后所 说每步均包含相应的优化)后,会比综合的时序差一点,CTS 后会更差,route 后会比 CTS 好一些, 但是达不到 place 后的水平。 encounter 是一路向下。 Azuro (现在已经被 cadence 购买)的 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 route CTS 之后,可以只优化 setup,也可以优化 setup 和 hold。使用粗糙的 RC 抽取,global route,如果 clock net 已经 route 过了,clock 就用 detail route 的结果。 时钟走线要 double width 和 double space,高速(500MHz)时钟要 shielding route 之后,要优化 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 的干扰:加大线间距离,不要用 infinit timing window 算 xtalk detour 走线造成的大的延迟:解决 congestion 问题 fanout 太大:忘记 set_max_fanout,或者设定不合理,或者对某些 net set_dont_touch 了 单元的驱动能力太小: 去掉大驱动能力 cell 的 dont_use 属性, 检查是否 局部 placement 太密,没有空间 sizeup 了 hold timing violation 与 setup violation 同时存在,工具无法做了。 这种情况多半是 SDC 的问题,很少是真的,除非那是一个非常特殊的 IO timing (4) 低功耗

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论