《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > FPGA教學——STA靜態(tài)時序分析

FPGA教學——STA靜態(tài)時序分析

2022-08-23
作者:FPGA之旅
來源:電子技術(shù)應用專欄作家 FPGA之旅
關(guān)鍵詞: 靜態(tài)時序分析

  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

  微信圖片_20220823162801.png

  發(fā)射沿 Launch Edge

  時序分析起點,第一級寄存器數(shù)據(jù)變化的時鐘邊沿,也是靜態(tài)時序分析的起點

  鎖存沿 Latch Edge

  時序分析終點,數(shù)據(jù)鎖存的時鐘邊沿,是靜態(tài)時序分析的終點

  微信圖片_20220823162830.png

  數(shù)據(jù)輸出延時 Tco

  數(shù)據(jù)輸出延時指的是當時鐘觸發(fā)(一般可認為是第一個寄存器的時鐘沿觸發(fā)時刻)開始到有效數(shù)據(jù)輸出**(第一個寄存器的Q端數(shù)據(jù)開始輸出(有可能變化,也有可能不變化))**的器件內(nèi)部所有延時的總和。

  微信圖片_20220823162849.png

  數(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ù)在線上傳輸所需的時間,一般較小可以忽略;

  微信圖片_20220823162911.jpg

  時鐘到達時間(時間路徑,Clock Arrival Time)

  時鐘到達時間就是指時鐘從latch edge到達目的寄存器(destination register)輸入端所用的時間。

  微信圖片_20220823162929.png

  時鐘偏斜(Tskew)

  指同一個時鐘沿(clk)和分別到達兩個寄存器所需的時間之間的差值(Tclk1和Tclk2的差值).

  公式為:Tskew=Tclk2-Tclk1.

  微信圖片_20220823162953.png

  數(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))

  微信圖片_20220823163047.png

 ?、贑lock Arrival Time = Latch +Tclk2.

  因此 Data Required Time = Latch+Tclk2+Tsu (忽略保持不定態(tài))

  微信圖片_20220823163104.png

  建立裕量(Setup Slack)

  微信圖片_20220823163131.png

  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)

  微信圖片_20220823163155.png

  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 越小。

  建立時間和保持時間的檢查

  微信圖片_20220823163226.png

  解釋圖中的符號:

  Tlaunch:時鐘源點到第一個觸發(fā)器的時鐘網(wǎng)絡(luò)延遲,也就是時鐘偏斜(skew);

  Tcapture:為時鐘源點到第二個觸發(fā)器的時鐘網(wǎng)絡(luò)延遲,也就是時鐘偏斜(skew);

  Tck2q:是觸發(fā)器的延遲,即D端到Q端的延遲,這是由觸發(fā)器本身的電氣特性所決定的;

  Tcycle:是時鐘周期,即時鐘頻率 1\fclk;

  Tdp:是第一個觸發(fā)器的輸出端到第二個觸發(fā)器的輸入端之間的組合邏輯電路部分的電路延遲;

  微信圖片_20220823163245.png

  解釋上圖,第二個觸發(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<<

微信圖片_20210517164139.jpg

微信截圖_20220708161426.png

電子技術(shù)應用專欄作家 FPGA之旅

原文鏈接:https://mp.weixin.qq.com/s/PX9FAo4skTAOR7NQqiqvmA


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。