FPGA基礎學習(4) -- 時序約束(理論篇)


在FPGA 設計中,很少進行細致全面的時序約束和分析,Fmax是最常見也往往是一個設計唯一的約束。這一方面是由FPGA的特殊結構決定的,另一方面也是由於缺乏好用的工具造成的。好的時序約束可以指導布局布線工具進行權衡,獲得最優的器件性能,使設計代碼最大可能的反映設計者的設計意圖。

花些功夫在靜態時序分析上既可以保證設計質量,也可以促使設計者再認識自己的代碼。這后一點,對於我們這些邏輯設計初學者來說,尤為重要。從門級(在Altera的FPGA器件中是LE 級)再認識自己的代碼,可以更深入地體會語言的特點,也可以更深入地理解綜合工具對語言的處理,對於設計能力的提高幫助很大。

1. 基本術語和概念

1.1 網表基本單元

  • 節點(nodes)
    包含了大部分基本的時序網表單元,常常代表端口、引腳和寄存器。
  • 單元(cells)
    Altera 器件中的基本結構單元(例如,查找表、寄存器、IO 單元、PLL、存儲器塊等),LE 可以看作是Cell。
  • 引腳(pins)
    基本結構單元cell的輸入輸出,這里不包括器件的物理引腳。
  • 連線(nets)
    兩個pin之間的連線。(參考文獻《timequest就一定要搞定
    》中的定義與官方手冊中好像略有不同,文獻中定義是:同一個Cell中,從輸入Pin到輸出Pin經過的邏輯。特別注意:網表中連接兩個相鄰Cell的連線不被看作Net,被看作同一個點,等價於Cell的Pin。還要注意:雖然連接兩個相鄰Cell的連線不被看作Net,但是這個連線還是有其物理意義的,等價於Altera器件中一段布線邏輯,會引入一定的延遲(IC,Inter-Cell)。)
  • 端口(ports)
    頂層邏輯的輸入輸出端口。對應已經分配的器件引腳。
  • 時鍾(clock)
    約束文件中指定的時鍾,不僅指時鍾輸入引腳,還包括內部時鍾。

1.2 時序路徑(Timing Paths)

時序路徑是兩個節點的連接,如一個寄存器的輸出到另一個寄存器的輸入。理解時序路徑的類型對定時分析和優化是非常重要的。TimeQuest通常使用如下幾種類型的時序路徑:

  • Edge paths(邊緣路徑)
    從端口(port)到引腳(pin),引腳到引腳,以及引腳到端口之間的連接。
  • Clock paths(時鍾路徑)
    從器件端口或內部產生的時鍾引腳到一個寄存器的時鍾引腳之間的連接。
  • Data paths(數據路徑)
    從一個端口或一個時序電路的數據輸出引腳,到另一端口或者另一個時序電路的數據輸入引腳之間的連接。
  • Asynchronous paths(異步路徑)
    從端口到另一個時序電路的異步引腳之間的連接,如異步置位或異步清除。

除了標識出設計中的不同路徑,TimeQuest還分析時鍾特征,以單個register-to-register路徑來計算在任何兩個寄存器之間最壞情況的要求。在分析時鍾特征之前,必須對設計中的所有時鍾進行約束。

1.3 時間術語

以下在時序分析中常常遇到的術語或概念,一開始不能理解不要緊,結合后面的時序分析例子,慢慢就會理解其含義。

  • f_MAX(最大時鍾頻率)
    在不違背內部建立時間tSU和保持時間tH要求下可以達到的最大時鍾頻率;
  • T_CO(時鍾到輸出延時)
    時鍾信號在寄存器引腳上發生轉變以后,在由寄存器饋送信號的輸出引腳上獲得有效輸出所需的最大時間;
  • T_PD(引腳到引腳延時)
    輸入引腳上的信號在經由組合邏輯進行處理傳輸,出現在外部輸出引腳上時所需的時間;
  • T_SU(建立時間)
    是指在時鍾沿到來之前數據從不穩定到穩定所需的時間,如果建立的時間不滿足要求那么數據將不能在這個時鍾上升沿被穩定的打入觸發器。

  • T_H(保持時間)
    是指數據穩定后保持的時間,如果保持時間不滿足要求那么數據同樣也不能被穩定的打入觸發器。

  • Launch Edge Time(啟動沿時刻)
    時序分析起點(launch edge):指的是一個時鍾沿,這個時鍾沿將一個寄存器或一個時序電路的數據送出,即第一級寄存器數據變化的時鍾邊沿,因此這個時鍾沿充當數據傳輸的源,即靜態時序分析的起點,只是一個開始時刻的概念。
  • Latch Edge Time(鎖存沿時刻)
    時序分析終點(latch edge):指的也是一個時鍾沿,這個時鍾沿將一個寄存器或一個時序電路的輸入端口的數據鎖存起來,即數據鎖存的時鍾邊沿,因此這個時鍾沿充當數據傳輸的目的,也是靜態時序分析的終點,同樣只是一個結束時刻的概念。

藍色的啟動沿(即Launch Edge Time時刻)之后由REG1輸出有效數據,並在紅色的邊沿被鎖存(即鎖存沿時刻)進REG2並輸出到下級。一般時序分析,就是分析的從啟動沿到鎖存沿之間的時間,看是否滿足需求。

理解上圖,launch edge在0ns將數據data_a從寄存器REG1輸出,但是注意,這並不意味着data_a在0ns就從REG1中輸出,這兒存在一個延遲,這個延遲指的是當時鍾有效沿變化后,將數據推倒同步時序路徑的輸出端的最小時間間隔,即utCO。數據data_a順着路徑傳遞到REG2,REG2在10ns處的latch edge捕捉data_a。顯然在10ns處的data_a必須到達REG2,因此這就是一個數據建立的時間關系,也就是圖中紅線所謂的Setup Relationship。

如何理解圖中的Hold relationship呢?顯然,圖中所指示的Hold relationship並不是與當前這個數據(data_a,就是0ns要launch的數據,或10ns要latch的數據)有保持關系,而是上一個數據(比如data_b)的Hold關系。

2. 時序參數計算

2.1 Data Arrival Time(數據到達時間)

TimeQuest計算數據到達時間,包括以下4部分時間之和:啟動沿時間(Launch Edge Time)、從時鍾源到源寄存器的時鍾pin的延遲(Source Clock Delay)、時鍾源寄存器的micro clock-to-output延遲(utCO,這個時間指的是當時鍾有效沿變化后,將數據推倒同步時序路徑的輸出端的最小時間間隔。)以及從源寄存器的數據輸出Q到目的寄存器的數據輸入D的延遲(Register-to-Register Delay)。

Data Arrival Time = Launch Edge + Source Clock Delay + μtCO + Register-to-Register Delay

舉例說明,兩個寄存器采用同步時鍾:

如圖所示,比照官方手冊給出的定義,計算數據到達時間還需知道3個延遲:

  • T_clk1(即從時鍾源到源寄存器的時鍾pin的延遲,Source Clock Delay)
    時鍾信號從起點(一般是PLL輸出或者外部時鍾輸入引腳)到達啟動寄存器(或說啟動觸發器)的相應clk端口所耗的時間;
    假如CLK是由PLL發出的時鍾信號(稱之為源時鍾),這個信號經過FPGA內部的“連線”最終來到了REG1(啟動觸發器)的clk端,所以此時在REG1的clk端口處也會有周期性的時鍾信號REG1.CLK,如圖所示;可以看到,此時的CLK(源時鍾)和REG1.CLK實際上有個時間差(相位差),這個時間差就是Tclk1;
  • T_CO
    啟動寄存器內部延時,是寄存器REG1在接收到有效的上升沿后,到數據真正從從REG1的Q輸出之間延時,這是內部寄存器的固有屬性,一般取最小值,即文檔中的μtCO;請注意:上述所謂的有效的上升沿,就是REG1.CLK,而不是CLK;所以實際的有效數據輸出的時序如上圖的REG1.Q;
  • T_data(即Register-to-Register Delay)
    數據從上級寄存器輸出Q(經過所有其他組合邏輯以及FPGA內部走線)到下級寄存器的數據輸入D之間的延時;如圖所示,數據從從REG1的Q流向了REG2的D,所以REG2.D實際接收到的數據時序是REG2.D,注意這里沒有涉及到REG2的鎖存;
    假如將上圖中的launch Edge作為0點時刻,將一系列的延時累加,所得結果稱之為數據到達時間,DAT:

DAT= T_clk1+T_co+T_data;

2.2 Data Required Time(數據要求時間)

TimeQuest計算數據要求時間,包括以下3部分時間:鎖存沿時間(Latch Edge)、時鍾端口到目的寄存器的時鍾引腳之間的所有延遲(這包括時鍾端口所有緩沖的延遲,Destination Clock Delay)、減掉目標寄存器的最小建立時間(μt_SU,這是FPGA內部寄存器的固有屬性)。

Data Required Time = Latch Edge + Destination Clock Delay – μt_SU

數據要求時間包括數據建立要求時間(DRT_su)和數據保持要求時間(DRT_H)。

2.1.1 數據建立要求時間

  • T_clk2(即Destination Clock Delay)
    不同於上述的T_clk1,這個延時是時鍾從起點(一般是PLL或者時鍾輸入引腳)到鎖存觸發器之間的延時;如上圖所示,REG2實際感受到的時鍾來自於其本身的clk端口,而不是源時鍾CLK,他們之間存在一個延時,即T_clk2;所以REG2實際感受到的時鍾,實際上是上圖的REG2.CLK;
  • T_su:
    上面分析過了,每一個數據被鎖存都要滿足建立時間和保持時間,T_su就是建立時間,也就是在REG2實際感受到Latch Edge時,數據如果需要被正確鎖存,就必須提前Tsu這么長的時間到達REG2的D端口;
    綜合時鍾走線延時Tclk2以及T_su,我們得到了數據建立時間DRT_su:

DRT_su=鎖存沿+T_clk2-T_su。

在DRTsu時刻之前,數據必須已經有效且穩定。

2.1.2 數據保持要求時間

DRTh=鎖存沿+T_clk2+T_h;

也就是說,數據在DRT_h時間之前必須保持住不變;

2.3 Clock Setup Check(時鍾建立檢查)

要實現時鍾建立檢查,TimeQuest analyzer首先分析出每個寄存器之間的啟動沿和鎖存沿路徑,從而獲知他們之間的建立關系。

對於每個目標寄存器的鎖存沿,TimeQuest analyzer利用源寄存器先前最近的一個時鍾沿作為啟動沿(launch edge)。舉例說明,如上圖所示為兩個建立關系,建立關系A和建立關系B。10ns處的鎖存沿,先前離它最近的源時鍾位於3ns處,因此就將該時鍾沿作為啟動沿,從而確定了建立關系A(圖中已表明)。同樣,20ns處的鎖存沿,它的啟動沿是位於19ns處的源時鍾沿,從而確定了建立關系B。TimQuest會分析出最嚴苛的建立關系,在本例中即為關系B。如果關系B都能滿足設計需求,那么關系A自然也就滿足需求了。

TimeQuest analyzer將時鍾建立檢查的結果表示為裕量(slack)。裕量是表示是否滿足設計需求的時序余量。建立時間裕量指的是數據到達時間和數據建立時間之間的關系,裕量為正,表示余量滿足設計需求。為負,則表示余量不滿足設計需求。

如上圖所示,在0時刻(launch edge),源時鍾clk產生一個上升沿表示准備讓REG1發送數據,但是該啟動沿並沒有馬上傳到REG1,而是經過了延時Tclk1,所以在T_clk1時刻,REG1才准備發送數據,再經過寄存器內部固有延時Tco,終於在REG1的Q端輸出了數據Data_Valid(時序REG1.Q)。Data_Valid再經過內部延時T_data到達REG2的D端(時序REG2.D),所以數據經歷了T_clk1+T_co+T_data才到達REG2,這就是我們之前分析的數據到達時間。源時鍾CLK在第一個時鍾上升沿完成了數據的發送,在第二時鍾的上升沿要實現數據的鎖存,這個上升沿即為鎖存沿(latch edge)。但是源時鍾產生的鎖存沿要經過T_clk2才能到達REG2,此時REG2要“識別”D端口有沒有數據,同時還要判斷該數據是否滿足建立時間要求和保持時間要求,如果都滿足,則REG2能正確鎖存該數據。如果REG1的數據傳遞太慢(沒有提前T_su到達),或者消失太快(T_h太短),則都不能穩定接收數據。

由前面的知識可以知道,分析時序以啟動沿時刻為起點,以鎖存沿時刻為終點。根據以上分析,建立時間裕量可表示為:

Clock Setup Slack =(鎖存沿+T_clk2-T_su)-( T_clk1+T_co+T_data)

Clock Setup Slack = Data Required Time – Data Arrival Time

總結起來,時鍾建立裕量對各種情況的描述如下所示:

  • 內部寄存器-寄存器時間的時鍾建立裕量

Clock Setup Slack = Data Required Time – Data Arrival Time
Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μt_CO + Register-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register – μt_SU – Setup Uncertainty

TimeQuest analyzer在執行建立檢查時,計算數據到達時間時用最大延遲,而計算數據需求時間是采用最小延遲。

  • 輸入端口到內部寄存器的時鍾建立裕量

Clock Setup Slack = Data Required Time – Data Arrival Time
Data Arrival Time = Launch Edge + Clock Network Delay + Input Maximum Delay + Port-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register – μt_SU – Setup Uncertainty

  • 內部寄存器到輸出端口的時鍾建立裕量

Clock Setup Slack = Data Required Time – Data Arrival Time
Data Required Time = Latch Edge + Clock Network Delay to Output Port – Output Maximum Delay
Data Arrival Time = Launch Edge + Clock Network Delay to Source Register +μt_CO + Register-to-Port Delay

2.4 Clock Hold Check(時鍾保持檢查)

要實現時鍾保持檢查,TimeQuest analyzer從已確定的源和目標寄存器對(source and destination register pairs)之間的建立關系中來確定保持關系。TimeQuest analyzer從所有的建立關系中去分析相鄰的時鍾沿,從而確定保持關系。

TimeQuest analyzer對每一個建立關系執行兩次保持檢查。第一次檢查確定被當前啟動沿推送的數據,但該數據並沒有被先前的鎖存沿給捕獲。第二次檢查確定被第二個啟動沿推送的數據,但該數據並未被當前的鎖存沿給捕獲。從所有可能的保持關系中,TimeQuest analyzer選擇最苛刻的一個保持關系,它的鎖存沿和啟動沿之間的差異最小,並且決定了寄存器之間路徑的最小延遲。下面的例子中,TimeQuest analyzer選擇保持檢查A2作為最苛刻的保持關系。

在分析時鍾保持裕量的時候要注意到,之前在分析時鍾建立裕量時的鎖存沿(latch edge)恰好又是下一個數據的啟動沿(launch edge),所以要求新的數據到達REG2之前,REG2要有足夠時間將上一個數據Data_Valid正確鎖存,這個時間即為時鍾保持時間裕量。
即:

Clock Hold Slack = (T_clk1+T_co+T_data)-(鎖存沿+T_clk2+T_h)
Clock Hold Slack = Data Arrival Time – Data Required Time

同理,總結起來關於時鍾保持裕量的計算方式如下所示:

  • 內部寄存器之間路徑的時鍾保持裕量

Clock Hold Slack = Data Arrival Time – Data Required Time
Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μt_CO + Register-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register + μt_H + Hold Uncertainty

TimeQuest analyzer在執行保持檢查時,計算數據到達時間時用最小延遲,而計算數據需求時間是采用最大延遲。

  • 輸入端口到內部寄存器的時鍾保持裕量

Clock Hold Slack = Data Arrival Time – Data Required Time
Data Arrival Time = Launch Edge + Clock Network Delay + Input Minimum Delay + Pin-to-Register Delay
Data Required Time = Latch Edge + Clock Network Delay to Destination Register + μt_H

  • 內部寄存器到輸出端口的時鍾保持裕量

Clock Hold Slack = Data Arrival Time – Data Required Time
Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μt_CO + Register-to-Pin Delay
Data Required Time = Latch Edge + Clock Network Delay – Output Minimum Delay

參考文獻

  1. 《TimeQuest就一定要搞定》
  2. 《Quartus® Prime Standard Edition Handbook Volume 3: Verification》
  3. FPGA設計-時序約束(上篇,理論篇)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM