VLSI CAD Layout-5 Timing

VLSI CAD Layout-5 Timing VLSI CAD Layout-5 Timing影响时序的因素Static Timing AnalysisDelay GraphATsRATs和SlacksATRATSlack寻找所有违规时序路径本文没涵盖的STA问题考虑电磁模型的时序Elmore Model延时计算这eda课程的最后一篇就是timing。在芯片设计中时序也是最为重要的一部分。影响时序的因素不同的gate这很明显不同结构会有不同延时负载如果fan out很大loading大自然慢waveform shape信号的shape也会影响例如信号上升延的斜率如果越大时间会越快建立时间短transitiondirection信号下降和上升也是不同速度不同input pin门电路并不是完全对称的自然不同pin会有不同延时Static Timing AnalysisSTA也就是静态时序分析和真实的电路时序不同的是它并不考虑具体逻辑的可能举例来说下图的最长路径其实是不可能发生的。然而在STA中我们简化了逻辑和门电路把其都视为一个节点进行时序的估计这也是为何被称为是静态。Delay Graph对于整个时序电路我们会将其化为Delay Graph来分析。首先我们会根据Flip Flop进行分段我们主要时序分析就是看这个段落的logic会不会超过一个时钟时间。接着会将gate节点化例如接着会添加SRC和SNK接着是标注上delay包括gate自己的延时还有连接gate之间导线的延时ATsRATs和Slacks对于时序分析我们不可能遍历所有的路径我们关注的是Slack也就是电路的延时余裕。为此我们会计算Arrival timeAT和Require Arrival time RAT而SlackRAT-AT。AT信号到达节点的最晚时间RAT能接受最晚到达节点的时间ATAT的公式如下具体计算可以使用Dijkstra计算每个节点的AT。A T ( n ) maximum delay to n { 0 if n SRC MAX p ∈ pred ( n ) { A T ( p ) Δ ( p , n ) } else AT(n) \text{maximum delay to } n \begin{cases} 0 \text{if } n \text{SRC} \\ \text{MAX}_{p \in \text{pred}(n)} \{ AT(p) \Delta(p, n) \} \text{else} \end{cases}AT(n)maximum delay ton{0MAXp∈pred(n)​{AT(p)Δ(p,n)}​ifnSRCelse​RATRAT的公式如下他的计算是倒过来的最长路径一样能使用Dijkstra计算每个节点的RAT。RAT ⁡ ( n ) { Cycle Time if n SNK min ⁡ s ∈ succ ( n ) { RAT ⁡ ( s ) − Δ ( n , s ) } else \operatorname{RAT}(n) \begin{cases} \text{Cycle Time} \text{if } n \text{SNK} \\[6pt] \displaystyle \min_{s \in \text{succ}(n)} \bigl\{ \operatorname{RAT}(s) - \Delta(n,s) \bigr\} \text{else} \end{cases}RAT(n)⎩⎨⎧​Cycle Times∈succ(n)min​{RAT(s)−Δ(n,s)}​ifnSNKelse​Slack在计算完AT和RAT后我们就能简单得到每个节点的Slack了。而我们计算完后会发现一件事最长路径上的Slack是相同的值而且都是最小的值。寻找所有违规时序路径在实际应用中我们需要寻找到所有Slack小于0的路径并且按照大小排序给设计人员展示。课程给出一个方法Topological Sorting。在计算完所有Slacks后从原点开始搜索建立heap保存《PathDelaySlack》从《SRC0,0》开始将相邻的节点加入path并且按照slack进行排序小的在堆顶如果遇到SNK则结束弹出path就是目前最差的path得到自己要的数量path即可跳出程序本文没涵盖的STA问题flip flops和latch的建模涉及到时序分段问题除了最长路径最短路径也会需要分析例如透明锁存器当只有部分gate改变STA计算如何优化考虑电磁模型的时序在实际电路中除了导线还有器件的延时导线的电容效应同样会产生延时。具体公式如下。主要影响参数是导线的长度与宽度因为高度基本都是个const。Elmore Model为此我们可以通过Elmore来简单建模这个杂散电容效应。对于一个导线构成的电阻他的两侧头尾都会有电容。延时计算对于每个节点电阻的延时可以通过公式需要计算这个电阻后面所有会流过的电容和原理是他必须要等后面所有电容充满类似水填满所有桶子的概念τ τ R ⋅ ∑ ( all capacitors downstream ) \tau \tau R \cdot \sum (\text{all capacitors downstream})ττR⋅∑(all capacitors downstream)而root的延时就是后面所有电阻的延时总和