IC基礎(六):時序分析過程需要的相關計算以及處理方法


時序分析的基本步驟:

一個合理的時序約束可以分為以下步驟:

   時序約束整體的思路如下:

  1. 先是約束時鍾,讓軟件先解決內部時序問題;(在這一步驟中可以適當加入時序例外,以便時序通過)
  2. 然后再加入IO的延遲約束;
  3. 最后針對沒有過的時序,添加時序例外。

 

 1、 IO口的建立時間與保持時間

1.1 輸入延遲

外部器件發送數據到FPGA系統模型如下圖所示。對FPGA的IO口進行輸入最大最小延時約束是為了讓FPGA設計工具能夠盡可能的優化從輸入端口到第一級寄存器之間的路徑延遲,使其能夠保證系統時鍾可靠的采到從外部芯片到FPGA的信號。

輸入延時即為從外部器件發出數據到FPGA輸入端口的延時時間。其中包括時鍾源到FPGA延時和到外部器件延時之差、經過外部器件的數據發送Tco,再加上PCB板上的走線延時。如下圖所示,為外部器件和FPGA接口時序。

最大輸入延時(input delay max)為當從數據發送時鍾沿(lanuch edge)經過最大外部器件時鍾偏斜(Tclk1),最大的器件數據輸出延時(Tco),再加上最大的PCB走線延時(Tpcb),減去最小的FPGA時鍾偏移(FTsu)的情況下還能保證時序滿足的延時。這樣才能保證FPGA的建立時間,准確采集到本次數據值,即為setup slack必須為正,計算公式如下式所示:

    Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +Tco(max) +Tpcb(max) +FTsu)≥0    (1)

最小輸入延時(input delay min)為當從數據發送時鍾沿(lanuch edge)經過最小外部器件時鍾偏斜(Tclk1),最小器件數據輸出延時(Tco),再加上最小PCB走線延時(Tpcb),此時的時間總延時值一定要大於FPGA的最大時鍾延時和建立時間之和,這樣才能不破壞FPGA上一次數據的保持時間,即為hold slack必須為正,計算公式如下式所示:

    Hold slack = (Tclk1(min) + Tco(min) + Tpcb(min))–(FTh + Tclk2(max))≥ 0     (2)

我們很容易就可以從公式(1)和(2),推到出(3)

    Tclk – Ftsu ≥Tclk1  - Tclk2 + Tco + Tpcb ≥ FTh     (3)

在公式(3)中,我們發現Tclk 、Ftsu以及FTh,對於工具來說是已知的,而Tclk1  - Tclk2 + Tco + Tpcb正是我們需要告知綜合工具的延遲量。

從我們推到出的公式,我們可以得到

    Input_delay_max = Tclk – Ftsu;     Input_delay_min = FTh ;        

 

1.2 輸出延遲

FPGA輸出數據給外部器件模型如下圖所示。對FPGA的IO口進行輸出最大最小延時約束是為了讓FPGA設計工具能夠盡可能的優化從第一級寄存器到輸出端口之間的路徑延遲,使其能夠保證讓外部器件能准確的采集到FPGA的輸出數據。

輸出延時即為從FPGA輸出數據后到達外部器件的延時時間。其中包括時鍾源到FPGA延時和到外部器件延時之差、PCB板上的走線延時以及外部器件的數據建立和保持時間。如所示,為FPGA和外部器件接口時序圖。

最大輸出延時(output delay max)為當從FPGA數據發出后經過最大的PCB延時、最小的FPGA和器件時鍾偏斜,再加上外部器件的建立時間。約束最大輸出延時,是為了約束IO口輸出,從而使外部器件的數據建立時間,即為setup slack必須為正,計算公式如下式所示:

    Setup slack =(Tclk + Tclk2(min))–(Tclk1(max) +FTco(max) +Tpcb(max) +Tsu)≥0 (4)

最小輸出延時(output delay min)為當從FPGA數據發出后經過最小的PCB延時、最大的FPGA和器件時鍾偏斜,再減去外部器件的建立時間。約束最小輸出延時,是為了約束IO口輸出,從而使IO口輸出有個最小延時值,防止輸出過快,破壞了外部器件上一個時鍾的數據保持時間,導致hlod slack為負值,不能正確的鎖存到數據,最小輸出延時的推導計算公式如下式所示:

    Hold slack = (Tclk1(min) + FTco(min) + Tpcb(min))–(Th + Tclk2(max))≥ 0  (5)

我們很容易就可以從公式(4)和(5),發現這兩條公式與前面推導輸入延遲如出一轍。只不過現在FPGA變成了輸出器件,而Tsu、Th是下游器件的參數,綜合工具並不知情,需要我們告訴他。除了FTco以外,其他參數都需要我們告訴工具。

由公式(4)我們可以推導出:

    FTco(max) + Tpcb(max) –(Tclk2(min) – Tclk1(max)+Tsu ≤Tclk

那么output delay max = Tpcb(max) –(Tclk2(min) – Tclk1(max)+Tsu

同理我們由公式(5)可以推導出:

    FTco(min) + Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th ≥ 0

那么output delay min = Tpcb(min) – (Tclk2(max) – Tclk1(min))– Th

2 、 電路內部的建立時間與保持時間

建立時間公式:Tcycle + Tskew > Tco + Tgate + Tsu;

保持時間公式:Thold + Tskew < Tc0 + Tgate

 

通過以下幾個例子來學習時序分析的方法。

例題一:

這個題目堪稱經典中的經典,因為從這個題目是標准的建立時間和保持時間考題,並從中可以總結出系統最大時鍾頻率以及建立時間和保持時間需要滿足的公式。

我們知道系統周期需要滿足的條件是:

  Tcycle + Tskew > Tco + Tgate + Tsu

代入上面的條件,得:Tcycle + T5 > T1 + T2 + T3 + T4 + Tsetup

上面的時鍾路徑是存在偏斜的,而且是正時鍾偏斜,則對於保持時間的滿足更加的困難,需要滿足:

  Thold + Tskew < Tc0 + Tgate

代入上面的條件,得: Thold + T5 < T1 + T2 + T3 + T4

 

例題二:

在上題的基礎上,你也許會分析觸發器的建立時間和保持時間應該滿足的關系了,可是考題也許會變了法的考你,如下:

求系統的最高頻率?

仔細看來,這是一個觸發器到自身的反饋,可以看做兩個觸發器之間進行數據傳輸,其實也就是如此。

需要明白的是,由於時鍾到達這個觸發器的時間一致,所以不存在時鍾偏斜。

給出系統周期滿足的關系:

  Tcycle > Tco + Tgate + Tsu - Tskew = 6 + 2 + 2 - 0 = 10ns

所以時鍾最大頻率可以為100MHz。

例題三:

如果都是分析觸發器的建立時間和保持時間就好了,可惜不是這樣的,套路來了:

如下圖,將框內的電路作為一個寄存器,那么其有效的建立時間和保持時間是多少?

 求框內電路的有效建立時間和保持時間,給出了框內觸發器的建立時間和保持時間以及其他一些邏輯的延遲,我們就以觸發器的建立時間和保持時間為准來倒逼整個電路的建立時間和保持時間,一切還都是為了讓觸發器滿足時序要求。

有效建立時間分析:

假設電路的有效Setup為Tsetup_valid:

  對於D觸發器而言,其本身的建立時間是2ns,也就是說數據必須在時鍾有效沿到達之前2ns保持穩定,這樣到達D端后就一定是穩定的數據了。

  這個電路的數據來自於IN,時鍾來自於CLK;

考慮時鍾路徑延遲影響:

  時鍾CLK要早於觸發器的時鍾1ns到達,因此對於D觸發器建立時間的滿足是有害的,電路有效建立時間

  Tsetup_valid = Tsetup - 1ns = 1ns(因為數據需要提前1ns穩定下來)

考慮數據路徑延遲影響:

  Tsetup_valid = Tsetup - 1ns + 2ns = 3ns;(經過組合邏輯后的數據需要在時鍾有效沿之前Tsetup時間穩定下來)

有效保持時間分析:

  和建立時間分析套路一致,對於D觸發器而言,數據需要在時鍾有效沿到來之后保持Thold時間。

考慮時鍾延遲的影響:

  考慮到電路時鍾對於觸發器時鍾早到1ns,所以電路有效保持時間Thold_valid = Thold + 1ns = 3ns;

考慮路徑延遲影響:

  數據需要經過一段組合邏輯之后才能保持穩定,因此電路的有效保持時間為:

  Thold_valid = Thold + 1ns - 2ns = 1ns。

 

例題四:

下面這個題目和上面題目相差無幾:

 1. 求該電路的固有建立時間與保持時間?

  求電路的固有建立時間和保持時間和上一題的有效建立時間和保持時間是一個意思的。因此:

    固有建立時間為:Tsu_valid = Tsu - T_offset + Tpd + Tpd1 = 2 - 1.2 + 1.2 + 0.9 = 2.9ns

    固有保持時間為:Th_valid = Th + T_offset - Tpd - Tpd1 = 1.5 + 1.2 - 1.2 - 0.9 = 0.6ns.

2. 該電路的最高工作頻率?

  先求系統的最小周期,考慮兩個觸發器之間的路徑:

    Tmin = Tco + Tpd + Tsu = 1.8 + 1.2 + 2 = 5ns,那么系統最高頻率為200MHz。

例題五:

求下圖電路中,flop2 的 setup time margin = ?ns

這個題目讓求setup time margin,意思大概就是建立時間裕量,就是系統周期減去Tco,Tgate以及Tsu之后還可以有多少裕量,那,Tco,Tgate以及Tsu當然要用最大的來代入,因為要保證系統在最惡劣的情況下,能有多少裕量。

因此:Tmargin = Tclk + Tskew - (Tco + Tgate +Tsu) 

  Tmargin = 10ns + 0.6ns - 0.2ns - 0.65ns - 0.35ns - 0.45ns = 8.95ns

其中0.6ns - 0.2ns表示的是時鍾偏斜量,可見是時鍾正偏斜,有利於時鍾裕量。 


 

時鍾違例的一些處理方法

下面介紹主要面對的兩個時序問題的處理技巧。

1)setup time 建立時間問題

建立時間是工程設計中最常遇到的問題了。一般說來,導致建立時間違例主要有兩個原因:邏輯級數太大或者扇出太大

打開Report Timing Summary界面查看路徑延遲信息。

【 邏輯級數太大 

Levels指的是邏輯級數logic level,一個logic level的延遲對應的是一個LUT和一個Net的延遲,對於不同的器件,不同頻率的設計能容納的logic level是不同的。假設7系列的-2速度等級250MHz的設計,電路設計的大部分levels最好不要超過8,否則會造成時序收斂困難。

Logic level太大的處理方法就是重定時(Retiming)了,典型的重定時方法就是流水線,將過於冗長的組合邏輯增加寄存器進行打拍。

 【 扇出太大 

High Fanout指的是扇出,同樣和器件、設計頻率等有關,如下圖所示:

降低扇出最好不要在綜合設置中指定,過低的扇出限制會造成設計堵塞反而不利於時序收斂,最好的方法是根據設計中時序最差路徑的扇出進行針對性的優化

  1. 如果是寄存器的輸出扇出很大,可以使用max_fanout屬性標記寄存器聲明,也可以手動復制寄存器,具體可參考:https://blog.csdn.net/shshine/article/details/52451997

  2. 如果不是關鍵時序路徑,而且高扇出網絡直接連接到觸發器,對扇出超過25K的net插入BUFG: 

    set_property CLOCK_BUFFER_TYPE BUFG [get_nets netName]

  當然,也可以在后期Implementation的物理優化設置中優化扇出。

2)hold time 保持時間問題

  在實踐中,我們發現保持時間的問題往往是異步處理的問題。

  對於一個信號的跨時鍾域問題,一般使用雙寄存器法(對於慢采快的結繩法這里不討論)。為了降低MTBF(Mean Time Between Failures,平均無障礙時間),這兩個寄存器最好位於同一個slice中。可以使用tcl語言指定,如:

    set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]

  也可以直接在代碼中指定:

    (* ASYNC_REG = "TRUE" *) (* keep = "true" *)reg sync0_reg, sysnc1_reg;

也可以參考代碼模板使用XPM模板進行處理。


 

**注意

在發現同一個時鍾域中,時序還不滿足要求,那應該怎么處理呢?
(這時候只能在修改代碼方向努力了,回到Chipplanner中,分析關鍵路徑,看布線后的路徑是否過長,導致影響時序。還是由於高扇出導致時序違例。針對不同的原因,修改代碼。比如說,路徑過長,

  1. 通常檢測是否代碼中嵌套的if語句級數太多?(可以嘗試case語句替代)。

  2. 又或者if的判斷中有表達式(if(a>b)之類的,看能否用電平替代,if(en)等。

  3. 在使用 if 或 case 的時候,避免產生不必要的鎖存器

  4. 對於有些邏輯融合起來一個大的模塊,看能否將大的邏輯塊划分為若干個小邏輯塊實現。

  5. 針對高扇出問題,上述已提到相應的處理方式。

  6. 布局優化

       寫到最后想說的是,調時序是一個比較難啃的活,有時候你增加了約束可能時序還會變的更差了,所以說一個良好的代碼風格很重要。假如上述的方法都已經試過了,時序還是很難滿足,可能器件已經快到達極限了,尤其是資源占用率比較高的時候。這時候只能降低時鍾或者替換更高性能的器件啦。


免責聲明!

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



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