時序弧
在這篇文章中,我們將討論影響標準單元延遲的因素。在開始討論之前,我們需要先了解一下什么是時序弧 (Timing Arcs):
時序弧 (Timing Arcs): 時序弧代表了信號從一個輸入流向一個輸出的方向
。它存在于組合邏輯和時序邏輯中,比如AND們的A pin→Z pin為一個時序庫,B pin → Z pin為一個時序弧。他們通常具有不同的延遲
關于這些時序弧的信息來源于foundary提供的時序庫 (.lib) 文件中,后面我們會講到如何查看。
cell delay
單元延遲(cell dalay)被定義為:輸入信號到達50%邏輯閾值與輸出波形到達50%邏輯閾值之間的時間差。
有時也被稱為Gate delay/Propagation delay
這個時間差主要取決于兩個因素:
-
1、輸入信號的轉換時間 (Input slew / transition):即 A 引腳上的信號跳變速率(上升/下降時間)。
-
2、輸出負載 (Output load / capacitance):即 Z 引腳上的電容負載。
也就是cell delay =F{input transition time,Output load}
這里的輸出負載 (Output Load) = Z 節點上所有單元的輸入電容之和 (Input Cap) + 連接到節點 Z 的所有連線 (nets) 的總寄生電容 (Intterconnect capcitance)
因此,cell delay與輸入轉換時間和輸出負載成正比 :
-
輸出電容越大,單元需要充/放電該電容的時間就越長。因此,延遲就越大。
-
輸入轉換時間越長(信號變化越慢),單元在處理完輸入值后改變輸出所需的時間就越長。
你會發現,對延遲的解釋歸根結底就是電容的充/放電 (charging/discharging of the capacitors)!!!!
后端中如何查看?
所有cell的delay值都被提供在了標準單元的 lib(時序庫)文件中,正如上面結論可得,他需要預先知曉input transition time和Output load,進而可以從從.lib 文件中提供的表中獲取單元延遲值。
假設對于某個cell,它的input transition(slew)為0.0344 ns,ouput load的電容大小為0.0068 pf。那么它對應的延時為0.0618937 ns;
此外,在后端實現中,需要格外注意的是:transition和load不要超表,否則對于不在查找表中的transition和load的組合,工具會利用插值算法來計算cell delay,進而導致不精確,因此,我們在設計中,一定要把過大的max_transition和max_cap的violation修復掉。