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