加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数字后端 FAQ

(2013-01-18 13:03:52)
标签:

数字后端

faq

杂谈

分类: 工作札记

在eetop论坛上看到这个东西,感觉很有用,就转过来了,非常感谢原文作者,下面面链接是论坛网址。

转载自:http://bbs.eetop.cn/thread-316442-1-1.html

为了方便大家尽快找到需要的话题,经icfb版主建议,编辑这个数字后端的FAQ。
如果您是初学者,建议先搜索相关的资料,读读其他人的帖子,一些基本概念在那里都已经讨论过了。
如果您已经有2年以上的实战经验,下面这些雕虫小技就不太值得您去浪费时间了。

以下是分类
2楼:时序约束,STA
3楼:综合DC/RC
4楼:APR (floorplan, place, CTS,route)
5楼:验证(LEC,DRC,LVS等)
6楼:DFT
7楼:低功耗
8楼:面试
9楼:名词解释

时序约束,STA

(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端口的约束
    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
      DRV有时也加DRC,与物理检测的DRC不是一个概念
      DRV包括,
      set_max_transition  与工艺相关,65nm的话,在0.6ns左右
      set_max_fanout  与工艺相关,一般在12~20之间
      set_max_capacitance
      set_max_power
      set_max_area
      
(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
      wire load model是一种简单地根据fanout来估算wire delay的方法,在综合时,一般根据设计的大小选择对应的WLM
      有时也会用zero wire load model,这时的clock period要相应减小15~25%,或者clock uncertainty增加15~25%

      set_wire_load_model 两种模式top和enclosed到底有什么区别?

      更加准确的计算wire delay的方法是DC topo和RC physical,
      他们在综合时会粗略地做个place,然后根据距离来计算延迟

(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
    set_case_analysis可以强制某个node为0/1
    这个0/1会沿着纯逻辑组合单元向前传送,如果没有特别设定的话,会停在时序单元上
    注意,只是是向前传,不会向左右2边和向后传
    举例:
    如果设在输出端上,那么所有fanin端都会被强制为0/1
    如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响

(8) ideal net/network
    ideal_net只作用于这条net
    ideal_network会把这个属性传送下去
    clock net自动带有ideal net属性
    其他net,何时需要设定ideal net?见Q2.4

 

 

综合DC/RC

综合脚本的样本现在到处都是,最好找一个,照猫画虎改改用

建议把时序约束脚本与综合脚本分开存放,这样时序约束可以单独使用。


(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调小一点(10~25%),那样DC会给你个timing比较好的网表,但是代价的面积的增大和功耗的增加。当然,你调clock uncertainty也有同样的效果


SDF的读入问题 STA

输出verilog netlist如何设置大小写不敏感?

dc综合后的一些警告

ungroup使用

DC的UPF和operating_condition问

 

 

APR (floorplan, place, CTS,route)


这节太大了,不知道从何说起,也不知道要说多少,
真正详细完整的介绍应该是Synopsys和Cadence的教程和userguide

就捡一些教程里面没有的东西吧

(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
      如果问我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) 时序收敛

(4) 低功耗

(5) ECO



astro 准备的文件?

ICC timing setting

ICC resize floorplan

在CTS后,如果ICG放在离clock root很近(clock insertion delay很短)的地方,为什么enable信号的setup不容易收敛?

多个时钟CTS问题(encounter)

带MUX的CTS问题求证

CTS求帮助

2个clock tree从选择器开始复用

encounter IPO

Partition的问题

paritition和flat implement的两个概念

soc encounter 如何对设计分区

ICC  read_verilog报错,读不成功

用ICC分析SI,需要导入噪声模型吗?

在不修改代码和不插入DFF的情况下,还能修setup time 吗?

route之后还有100个左右的violation

绕线后hold的优化

fix hold用DLY cell好还是用buffer cell好,为什么?

怎样操作,才能使已经做好的floorplan移植到新的网表呢

 

 

验证(LEC,DRC,LVS等)

0.35chart库中的tf文档中DesignRule中Enclosure是什么意思?

ICC后期DRC, LVS, ANTENNA等问题的处理

Astro能自己通过跳线法修改天线效应吗?

请问Multi-Voltage design的LVS怎么设置?

SDF 中没有typical值

请问ets提取出来的sdf文件中延时值会有负的么?

反标SDF文件时报错# ** Error: (vsim-SDF-3251)

hold_time violation?

Modelsim反标sdf文件成功后,后仿真时报错$setup

stream out gds through icfb

请教形式验证遇到的几个问题。。。。。

calibre在做LVS的时候,power net找不到,然后就abort operation

 

 

 
 

面试

厚着脸皮,自己推荐自己的帖子

只列个目录,详细内容搜索下

后端面试--每日一题(078)netlist
后端面试--每日一题(077)ECO
后端面试--每日一题(076) DFT
后端面试--每日一题(075)chip
后端面试--每日一题(074)IR-drop
后端面试--每日一题(073)transition
后端面试--每日一题(072)congestion
后端面试--每日一题(071)timing
后端面试--每日一题(070)CTS
后端面试--每日一题(069)LEF
后端面试--每日一题(068)cell
后端面试--每日一题(067)library
后端面试--每日一题(066)verificition
后端面试--每日一题(065)Clock Tree
后端面试--每日一题(064)synthesize
后端面试--每日一题(063)gate count
后端面试--每日一题(062)STA
后端面试--每日一题(061)STA
后端面试--每日一题(060)SDC
后端面试--每日一题(059)STA
后端面试--每日一题(058)ESD
后端面试--每日一题(057)DFM
后端面试--每日一题(056)EM
后端面试--每日一题(055)hierarchy
后端面试--每日一题(054) power
后端面试--每日一题(053)DRC
后端面试--每日一题(052)floorplan
后端面试--每日一题(051)clock
后端面试--每日一题(050) 合集
后端面试--每日一题(049) IR-drop congestion
后端面试--每日一题(048)power
后端面试--每日一题(047)power
后端面试--每日一题(046)DFT
后端面试--每日一题(045)DFT
后端面试--每日一题(044)X-talk
后端面试--每日一题(043)hierarchy
后端面试--每日一题(042)PAD
后端面试--每日一题(041)power
后端面试--每日一题(040)low power
后端面试--每日一题(039)DFT
后端面试--每日一题(038)DFT
后端面试--每日一题(037)SDC
后端面试--每日一题(036)IO
后端面试--每日一题(035)clock
后端面试--每日一题(034)power
后端面试--每日一题(033)SDC
后端面试--每日一题(032) low power
后端面试--每日一题(031)low power
后端面试--每日一题(030)STA
后端面试--每日一题(029)SDC
后端面试--每日一题(028)CTS
后端面试--每日一题(027)flow
后端面试--每日一题(026)flow
后端面试--每日一题(025)SDC
后端面试--每日一题(024)SDC
后端面试--每日一题(023)violation
后端面试--每日一题(022)congestion
后端面试--每日一题(021)CTS
后端面试--每日一题(020)ECO
后端面试--每日一题(019)STA
后端面试--每日一题(018)STA
后端面试--每日一题(017)STA
后端面试--每日一题(016)die size
后端面试--每日一题(015)die size
后端面试--每日一题(014)CTS
后端面试--每日一题(013)die size
后端面试--每日一题(012)CTS
后端面试--每日一题(011)congestion
后端面试--每日一题(010)SDC
后端面试--每日一题(009)CTS
后端面试--每日一题(008)SDC
后端面试--每日一题(007)STA
后端面试--每日一题(006)STA
后端面试--每日一题(005)SDC
后端面试--每日一题(004)STA
后端面试--每日一题(003)x-talk
后端面试--每日一题(002)route
后端面试--每日一题(001)route

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有