后端基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为了方便大家尽快找到需要的话题,经icfb版主建议,编辑这个数字后端的FAQ。
如果您是初学者,建议先搜索相关的资料,读读其他人的帖子,一些基本概念在那里都已经讨论过了。
如果您已经有2年以上的实战经验,下面这些雕虫小技就不太值得您去浪费时间了。
先说说作为一个有经验的后端(暫不包括DFT工程师和layout工程师)工程师,需要掌握哪些知识
4个级别:
1)知道一些基本概念,
2)简单地掌握这门技术,
3)熟练
4)精通
半导体工艺--2
RTL coding -- 2
综合-- 2
时序约束-- 3
APR -- 3
DFT -- 2
DRC/LVS -- 3
仿真-- 2
形式验证-- 2
以下是FAQ分类:
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的,但是不多见)