1.
靜態時序分析
1.1 什么是靜態時序分析
靜態時序分析(簡稱STA)是用來驗證數字設計時序的技術之一,另外一種驗證時序的方法是時序仿真,時序仿真可以同時驗證功能和時序?!皶r序分析”這個術語就是用來指代“靜態時序分析“或”時序仿真“這兩種方法之一,簡單來說,時序分析的目的就是為了解決設計中的各種時序問題。
靜態時序分析是基于同步電路設計模型的。主要目的就是為了提高系統工作主頻以及增加系統的穩定性。通過靜態時序分析,一方面可以增加系統穩定性,減少亞穩態的發生,另一方面通過附加約束可以控制邏輯的綜合、映射、布局和布線,以減小邏輯和布線延時,從而提高工作頻率。
1.2 靜態時序分析和時序仿真
靜態時序分析分析的是時序,檢查在一定頻率下,電路有無時序違例
時序仿真檢查的是功能,需要在設計的端口添加激勵
靜態時序分析的特點:更快更簡單,能不添加激勵的情況下檢查完所有的時序路徑
時序仿真的特點:檢查電路的功能仿真,比較慢
時序分析:先用STA對電路進行時序檢查,再進行時序仿真
1.3 在設計的哪個階段使用STA以及如何使用靜態時序分析
RTL設計階段:此階段需要完成電路的功能設計,而且此階段是行為級網表,無需STA;當邏輯功能設計完成后,綜合成門級網表,此時需要使用STA分析時序最差或關鍵路徑,進行設計的邏輯優化(此時更改的都是邏輯單元)并生成時序約束文件(SDC)
1.4 在邏輯級(未進行物理設計的門級),STA可采用哪些模型
理想的互連線或者基于線負載模型的互連線
帶有延遲和抖動估計值的理想時鐘
在物理設計階段,除了上述模型,STA還可采用以下模型:
具有近似估計值的全局布線的互連線、具有近似寄生參數提取值的實際布線的互連線、具有可以簽收(signoff)精度寄生參數提取值的實際布線的互連線
實際的時鐘樹
包括串擾的影響或者不包括串擾的影響
1.5 靜態時序分析同樣具有局限性,在如下的常見情況下無法使用
對未知態X的處理
PLL未正確設置
分析IO接口時序
分析模擬模塊和數字模塊之間的接口時序
邏輯設計偽路徑(false path)
1.6 STA局限性
STA針對的是數字電路,和模擬電路相關的路徑無法通過STA驗證
數字電路中產生的不定態在STA不會驗證,這個需要通過仿真進行仔細檢查確認
電路中不同狀態機之間的同步需求不能通過STA來驗證
對時鐘生成電路的驗證無法通過STA完成
時序約束中會有例外情況,需要人工處理
2.
相關基礎概念
建立時間 setup time
是指在觸發器的時鐘信號上升沿到來以前,數據穩定不變的最小時間Tsu
保持時間 hold up time
是指在觸發器的時鐘信號上升沿到來以后,數據穩定不變的最小時間Th
發射沿 Launch Edge
時序分析起點,第一級寄存器數據變化的時鐘邊沿,也是靜態時序分析的起點
鎖存沿 Latch Edge
時序分析終點,數據鎖存的時鐘邊沿,是靜態時序分析的終點
數據輸出延時 Tco
數據輸出延時指的是當時鐘觸發(一般可認為是第一個寄存器的時鐘沿觸發時刻)開始到有效數據輸出**(第一個寄存器的Q端數據開始輸出(有可能變化,也有可能不變化))**的器件內部所有延時的總和。
數據到達時間(數據路徑,Data Arrival Time)
輸入數據在有效時鐘沿后到達目的寄存器所需要的時間,可大致劃分為:時鐘沿到達第一級寄存器所需時間(Tclk1),寄存器內部延遲時間(Tco),數據輸出后傳輸到第二級寄存器所需時間(Tdata).
其中Tdata可細分為:
組合邏輯延時Tcomb_logic:數據經過組合邏輯部分所需的時間;
線網延時Tnet:數據在線上傳輸所需的時間,一般較小可以忽略;
時鐘到達時間(時間路徑,Clock Arrival Time)
時鐘到達時間就是指時鐘從latch edge到達目的寄存器(destination register)輸入端所用的時間。
時鐘偏斜(Tskew)
指同一個時鐘沿(clk)和分別到達兩個寄存器所需的時間之間的差值(Tclk1和Tclk2的差值).
公式為:Tskew=Tclk2-Tclk1.
數據需求時間(Data Require Time)
細分為 (Setup-Data Require Time)( Hold-Data Require Time )
?、貱lock Arrival Time = Latch +Tclk2
因此 Data Required Time = Latch+Tclk2-Tsu (忽略建立不定態)
?、贑lock Arrival Time = Latch +Tclk2.
因此 Data Required Time = Latch+Tclk2+Tsu (忽略保持不定態)
建立裕量(Setup Slack)
Setup Slack = (Latch Edge + Tclk2 - Tsu)-( Launch Edge + Tclk1 +Tco +Tdata)
(建立數據所需時間)Setup-Data Required Time = Latch Edge + Tclk2 - Tsu
(數據到達時間) Data Arrival Time = Lauch Edge + Tclk1 + Tco + Tdata
因此 Setup Slack = Setup-Data Required Time - Data Arrival Time
=(Latch Edge - Launch Edge)+(Tclk2-Tclk1)-(Tsu+Tco+Tdata)
= Tperiod +(Tclk2-Tclk1)-(Tsu + Tco+Tdata)
這個最終結果說明了源寄存器與目的寄存器之間延遲 Tdata不能太長的原因,延遲越長,slack越小。當建立裕量為正時,滿足時序要求,否則不滿足。
保持裕量(Hold Slack)
Hold Slack = Data Arrival Time - (Hold-Data Required Time)
同樣的可推導:
(數據到達時間)Data Arrival Time = Launch Edge + Tclk1 + Tco + Tdata
(數據需求時間)Hold-Data Required Time = Latch Edge + Tclk2
Hold Slack = Launch Edge + Tclk1 + Tco + Tdata -(Latch Edge + Tclk2)
=-Tperiod +(Tclk1-Tclk2)+Tco+Tdata
從結果可以看出,當源寄存器與目的寄存器之間延遲Tdata太短的話,則保持裕量會很短,因此Hold Slack 越小。
建立時間和保持時間的檢查
解釋圖中的符號:
Tlaunch:時鐘源點到第一個觸發器的時鐘網絡延遲,也就是時鐘偏斜(skew);
Tcapture:為時鐘源點到第二個觸發器的時鐘網絡延遲,也就是時鐘偏斜(skew);
Tck2q:是觸發器的延遲,即D端到Q端的延遲,這是由觸發器本身的電氣特性所決定的;
Tcycle:是時鐘周期,即時鐘頻率 1\fclk;
Tdp:是第一個觸發器的輸出端到第二個觸發器的輸入端之間的組合邏輯電路部分的電路延遲;
解釋上圖,第二個觸發器要想滿足setup time,就必須要滿足:
上圖中綠色豎線為時鐘源點經過延遲,到第二個觸發器的時間(對應綠色路徑)
對應紅色的路徑部分,經過組合邏輯,到達第二觸發器的Q端,最晚只能到達上圖的紅色豎線部分,否則就沒辦法,滿足建立時間。
由此,我們可以推遲公式:
Tlaunch + Tck2q + Tdp ≤ Tcapture + Tcycle - Tsetup
因為Tlaunch和Tcapture都表示為時鐘偏斜(clock skew),所以我們合并之后就可得:
建立時間約束:Tsetup ≤ Tcycle +Tskew - Tdp - Tck2q
保持時間約束:Thold ≤ Tdp + Tck2q
其中參數意義:
Tclock:也就是時鐘偏斜(clock skew);
Tck2q:是觸發器D端到Q端的延遲;
Tcycle:是時鐘周期,即時鐘頻率 1\fclk;
Tdp:是組合邏輯電路部分的電路延遲;
PS:這里可能你會覺得建立時間有點難記,我多啰嗦一句:
Tcycle + Tskew 是表示第二個觸發器的時鐘到達的時間;
Tdp + Tck2q是表示經過第一個觸發器+組合邏輯到達的時間;
二者的差值就是建立時間最大的時間要求
解決建立時間與保持時間不滿足的問題
1.建立時間不滿足
當建立時間不滿足時,即Tsetup值要大于實際的Tcycle +Tskew - Tdp - Tck2q,為了滿足建立時間:
可以通過改進工藝,采取具有更小的Tsetup值的芯片;
采用延遲更低的觸發器,降低Tck2q;
增大時鐘周期Tcycle和時鐘偏斜Tskew,但這會降低電路的性能;
盡量減小兩個觸發器之間的組合邏輯電路的使用,從而降低Tck2q。
2.保持時間不滿足
當保持時間不滿足時,也就是Thold要小于Tdp + Tck2q,可以通過:
理論上,可以增加Tdp和Tck2q來解決,也就是增加觸發器的D端到Q端的延時,以及兩級觸發器之間的組合邏輯電路部分。
目前大部分芯片的Thold時間都可以做到0ns。所以當保持時間不滿足時,通常采用的做法是在傳輸路徑上插入buffer,在不影響邏輯功能前提下,只具有增加延遲的作用。
PS:尤其注意,保持時間Thold和時鐘頻率之間是沒有關系,故降低時鐘速度不能解決保持時間不滿足的問題,很多面試題喜歡在這里挖坑。
恢復時間 Recovery time
是指異步控制信號(如寄存器的異步清除和置位控制信號)在“下個時鐘沿”來臨之前變無效的最小時間長度。
去除時間 Removal time
是指異步控制信號(如寄存器的異步清除和置位控制信號)在“有效時鐘沿”之后變無效的最小時間長度。
時序路徑
每個時序路徑都有一個起點和終點。一般起點是時序單元的時鐘引腳 或者設計的輸入端口;終點是時序單元的數據輸入引腳或者 設計的輸出端口。所以一共有四種時序路徑。
恢復時間 Recovery time
是指異步控制信號(如寄存器的異步清除和置位控制信號)在“下個時鐘沿”來臨之前變無效的最小時間長度。
去除時間 Removal time
是指異步控制信號(如寄存器的異步清除和置位控制信號)在“有效時鐘沿”之后變無效的最小時間長度。
時序路徑
每個時序路徑都有一個起點和終點。一般起點是時序單元的時鐘引腳 或者設計的輸入端口;終點是時序單元的數據輸入引腳或者 設計的輸出端口。所以一共有四種時序路徑。
名詞解釋:
發射沿(launch edge):有效時鐘的第一個上升沿;
采樣沿(latch edge):有效時鐘的第二個上升沿;
采樣沿和發射沿差值可以粗略認為是1個時鐘周期(不考慮時鐘抖動jitter)。
Tclk1:時鐘源扇出信號到寄存器1(REG1)的時鐘端所需時間;
Tclk2:時鐘源扇出信號到寄存器2(REG2)的時鐘端所需時間;
所以時鐘源的布局布線很重要,這就是為什么FPGA中推薦用PLL輸出時鐘,而不是自己進行時鐘分頻。
Tco:寄存器時鐘輸出延遲,即有效時鐘輸入到輸出之間的延遲。
Tdata:2個寄存器之間組合路徑延遲和布局布線延遲。
Tc:時鐘周期大小(Tclk)。
Ts:建立時間大小;
Th:保持時間大??;
Thold_slack:保持時間余量(也就是要大于0);
Tsetup_slack:建立時間余量(也就是大于0)。
建立時間:
采樣沿到達時間:Tlatch = Tc + Tclk2;
第一次數據到達時間:Tarrive = Tclk1 + Tco + Tdata;
建立時間大小:Ts = Tlatch - Tarrive = Tc + Tclk2 - Tclk1 - Tco - Tdata = Tc + Tdelta - T1.
其中,Tdelta代表Tskew,也就是2個寄存器之間時鐘到達差值,T1代表從REG1到REG2數據接收端的整個時間延遲,當然,不化簡也是可以的。
保持時間:
第一次采樣沿到達時間:Tlatch = Tc + Tclk2;
第二次數據到來時間:Tdata2 = Tclk1 + Tco + Tdata + Tc(Tdata_valid) ;
保持時間大?。篢h = Tdata2 - Tlatch = Tclk1 + Tco + Tdata - Tclk2 = T1 - Tdelta。
更多信息可以來這里獲取==>>電子技術應用-AET<<
電子技術應用專欄作家 FPGA之旅
原文鏈接:https://mp.weixin.qq.com/s/PX9FAo4skTAOR7NQqiqvmA