靜態時序分析之TimeQuest篇

靜態時序分析之TimeQuest篇

博主微信:flm13724054952,不懂的有疑惑的也可以加微信諮詢,歡迎大家前來投稿,謝謝!

引言介紹

無論是芯片設計還是FPGA設計到應用的物理實現,其過程都必須經歷DC過程(從代碼映射到網表)。而DC綜合過程可以說就是時序分析過程,因爲在設計的物理實現上,爲了保證電路的功能是正常穩定的,那麼我們就必須考慮網表上路經上的 cell 延遲和 net 延遲,作出相應對時鐘,輸入輸出引腳等約束。然後 DC會根據你加的約束進行物理映射,來映射庫中符合這種延遲以及驅動的器件。從而達到綜合的目的。而爲了保證電路功能正常,就是保證DC時序約束的 setup time 和 hold time裕量都是爲正的。

時序路徑

時序路徑(timing path)是指信號在傳播的過程中所經歷的邏輯路徑,而且每一條時序路徑都有對應的起始點跟終止點。
起始點:可以是組合邏輯的數據輸入端口(input port)或者是時序單元的時鐘輸入端口(寄存器的clk pin);
終止點:可以是組合邏輯的數據輸出端口(output port)或者是時序單元的數據輸入端口(寄存器的D pin)。
如下圖所示:時序路徑1的起始點是數據輸入端口,終止點是時序單元的數據輸入端口。
時序路徑2的起始點是時序單元的時鐘輸入端口,終止點是時序單元的數據輸入端口。
時序路徑3的起始點是時序單元的時鐘輸入端口,終止點是組合邏輯的數據輸出端口。
在這裏插入圖片描述
根據上面的介紹可以得知時序路徑根據起始點的不同可以分爲四種時序路徑:
第1種:輸入端到觸發器(input to register);
第2種:觸發器到觸發器(register to register);
第3種:觸發器到輸出端(register to output);
第4種:輸入端到輸出端(input to output)。
如下圖所示,對整個電路的時序進行約束可以概括爲以下四種,第一種從輸入端到電路內部的時序路徑(片間路徑)輸入端到觸發器(通常用set_input_delay來約束輸入延時以此保證電路的時序穩定跟功能正常)。第二種內部電路信號從觸發器到觸發器的片內路徑(一般保證設計中間的組合邏輯不易過長即可)。第三種內部電路的觸發器到電路頂層的輸出端(片間路徑,通常用set_output_delay來約束輸入延時以此保證電路的時序穩定跟功能正常)。第四種從電路設計輸入端到電路設計的輸出端(input to output,因爲沒有經歷過時序單元,所以這種路徑的分析與其他的分析方法不一樣,一般來說只要路徑不長可以不做考慮,或者可以使用內部虛擬時鐘來約束,這裏本文不做詳細介紹,因爲遇到的不多)。從上面的描述或者可以從下面的約束所示,其實無論是第一種,第二種還是第三種路徑,其實都是虛擬一個時序單元寄存器,使其組合成經典的時序路徑觸發器到觸發器來約束分析時序的。所以本文主要介紹的是時序路徑觸發器到觸發器之間的約束分析。在這裏插入圖片描述

時序分析

對時序路徑的建立時間(setup time)跟保持時間(hold time)進行時序約束分析是靜態時序分析的主要兩大工作。靜態時序分析還經常涉及到兩個沿的概念,發起沿launch edge跟捕獲沿capture edge。如下圖所示:因爲其實捕獲沿其實就是下一個發起沿,所以捕獲沿跟發起沿其實一般相差一個時鐘週期。
在這裏插入圖片描述

建立時間

建立時間setup time是指在時鐘捕獲信號的有效到來之前,數據信號必須提前保持穩定。這樣子纔可以保證採集到的信號是對的或者不是空的。
在這裏插入圖片描述

Tclka clk時鐘到發起觸發器時鐘端口的線延遲
Tclkb clk時鐘到捕獲寄存器時鐘端口的線延遲
Tco 從發時鐘起沿有效到數據到達發起寄存器Q端口所用時間
Tdata 數據延時,一般指組合邏輯延遲和net線延遲
Tsu 捕獲寄存器建立時間需求
Th 捕獲寄存器保持時間需求
Tun clock uncertainty時鐘的相位延遲

從上圖可以計數出數據從時鐘clk到達捕獲寄存器D端的到達時間爲:
data arrived time=launch edge+ Tclka + Tco + Tdata;
時鐘clk到達捕獲寄存器時鐘端的到達時間爲
時鐘到達時間=capture edge + Tclkb;
對於建立時間而言,數據的需求時間爲:
data required time(setup)=時鐘到達時間 -Tsu=capture edge + Tclkb - Tsu - Tun;
那麼建立時間的計數公式爲:
Tsetup =data required time(setup) - data arrived time = capture edge + Tclkb -Tsu - Tun - launch edge -Tclka -Tco - Tdata;
在前面說過捕獲沿與發起沿相差爲一個時鐘週期,所以簡化後就是:
Tsetup = T +Tclkb -Tsu - Tun -Tclka -Tco - Tdata;
在前面說過建立時間setup time是指在時鐘捕獲信號的有效到來之前,數據信號必須提前保持穩定。也就是說數據請求時間一定要大於數據到達時間,即Tsetup>0電路的時序纔算沒有問題,功能纔有得到保障。

保持時間

保持時間hold time是指對於捕獲寄存器來說,在時鐘的捕獲沿到來之後,上一個數據依然還要保持穩定不變這樣子直到寄存器讀取完數據之後,下一個數據纔到來。簡而言之爲保證數據的讀取完整,下一個數據的到達時間要比上一個數據的請求(保持)時間長。
依然從上面的時序圖進行分析:
時鐘clk到達捕獲寄存器時鐘端的到達時間爲:
時鐘到達時間=capture edge + Tclkb;
則對保持時間而言,數據的需求時間爲
data required time (hold) = 時鐘到達時間 + Th = capture edge + Tclkb + Th - Tun ;
"下一個數據"從時鐘clk到達捕獲寄存器D端的到達時間爲:
data arrived time = capture edge + Tclka + Tco + Tdata;(下一個數據的起始沿就是上一個數據的捕獲沿)
那麼保持時間的計數公式爲:
Thold = data arrived time(下一個數據) - data required time (hold);
化簡爲:
Thold = Tclka + Tco + Tdata - Tclkb -Th +Tun ;
只要保證Thold爲正,就可以保證數據可以被時序單元完整讀取到,不過在DC綜合的時候往往先不考慮保持時間的分析。

時序例子

例如在下面的時序分析圖裏:
假設時鐘週期T爲4,寄存器的Tsu建立時間爲0.2,寄存器的Th保持時間爲0.1,clock uncertanty爲0;
根據上面的公式,現在計數建立時間(這裏數據路徑先假設爲3.5,不看1.9):
數據的到達時間爲:0.7+0.6+3.5=4.8;
時鐘到達捕獲寄存器的時間爲:0.7+0.5=1.2;
對於建立時間來說,數據的需求時間爲:0.7+0.5-0.2=1;
那麼建立時間爲:Tsetup=4+1-4.8=0.2>0,數據可以正常傳輸,建立時間不違反。
根據上面的公式,現在計數保持時間(這裏數據路徑先假設爲3.5,不看1.9):
數據的到達時間爲:0.7+0.6+3.5=4.8;
時鐘到達捕獲寄存器的時間爲:0.7+0.5=1.2;
對於保持時間來說,數據的需求時間爲:0.7+0.5+0.1=1.3;
那麼保持時間爲:Thold=4.8-1.3=3.5,數據可以被完整讀取,保持時間不違反。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章