天天看點

FPGA的設計藝術(3)靜态時序分析

什麼是靜态時序分析(STA)?

靜态時序分析介紹

靜态時序分析(STA)是一種通過檢查所有可能的路徑是否存在時序違規來驗證設計時序性能的方法。 STA将設計分解為時序路徑,計算沿每個路徑的信号傳播延遲,并檢查設計内部和輸入/輸出接口處時序限制的違反情況。

靜态時序分析與動态仿真的優缺點

執行時序分析的另一種方法是使用動态仿真,它可以針對給定的一組輸入激勵矢量确定電路的完整行為。 與動态仿真相比,靜态時序分析要快得多,因為不需要仿真電路的邏輯操作。 STA也更徹底,因為它檢查所有時序路徑,而不僅僅是檢查一組測試向量所敏感的邏輯條件。 但是,STA隻能檢查電路設計的時序,而不能檢查其功能。

STA如何工作?

時序路徑

在執行時序分析時,STA首先将設計分解為時序路徑。 每個時序路徑均包含以下元素:

  • 起點: 時序路徑的開始,在該時序中,資料由時鐘有效沿(上升沿或者下降沿都有可能)。 每個起點必須是輸入端口或寄存器時鐘引腳。
  • 組合邏輯網絡: 沒有記憶體或内部狀态的元素。 組合邏輯可以包含AND,OR,XOR和反相器元素,但不能包含觸發器,鎖存器,寄存器或RAM。
  • 終點: 時序路徑的末尾,其中資料由時鐘沿捕獲或在特定時間必須可用。 每個端點必須是寄存器資料輸入引腳或輸出端口。

    下圖顯示了一個簡單設計示例中的時序路徑:

FPGA的設計藝術(3)靜态時序分析

組合邏輯路徑可能包含多個路徑,如下圖所示。 STA使用最長的路徑來計算最大延遲,而使用最短的路徑來計算最小延遲。

FPGA的設計藝術(3)靜态時序分析

STA還考慮以下類型的時序分析路徑:

  • 時鐘路徑: 從時鐘輸入端口或單元引腳通過一個或多個緩沖器或反相器到時序元件的時鐘引腳的路徑; 用于資料設定和保持檢查。
  • 時鐘門控路徑: 從輸入端口到時鐘門控元件的路徑; 用于時鐘門控設定和保持檢查。
  • 異步路徑: 從輸入端口到時序元素的異步置位(asynchronous set)或清除(clear)引腳的路徑; 用于recovery和removal檢查。
FPGA的設計藝術(3)靜态時序分析

延遲類型

将設計分解為一組時序路徑後,STA工具将計算沿每個路徑的延遲。 一條路徑的總延遲是該路徑中所有單元延遲和布線延遲的總和。

  • 單元延遲是路徑中從邏輯門的輸入到輸出的延遲量。 如果沒有來自SDF檔案的帶批注的延遲資訊,該工具将從邏輯庫中為單元提供的延遲表計算單元延遲。

    通常,延遲表會根據一個或多個變量(例如輸入轉換時間和輸出負載電容)來列出延遲量。 該工具從這些表條目中計算每個單元延遲。

  • 布線延遲延遲是指時序路徑中從一個單元的輸出到下一個單元的輸入的延遲量。 這種延遲是由于兩個單元之間互連的寄生電容,淨電阻和驅動網絡的單元有限的驅動強度所引起的。

建立與保持時間

然後,STA檢查違反時序限制的情況,如建立和保持限制。

  • 建立限制規定了在捕獲裝置(時序裝置)中的資料的時鐘邊沿之前,資料在時序裝置的輸入端需要多少時間。該限制強制執行資料路徑上相對于時鐘邊沿的最大延遲。
  • 保持限制指定了在捕獲裝置中的資料的時鐘邊沿之後,資料在時序裝置的輸入端保持穩定所需的時間。該限制強制要求資料路徑上相對于時鐘邊沿的最小延遲。

    下面的例子顯示了STA如何檢查觸發器的設定和保持限制。

    FPGA的設計藝術(3)靜态時序分析

在這個例子中,假設觸發器在邏輯庫中定義為最小建立時間為1.0時間機關,最小保持時間為0.0時間機關。時鐘周期在工具中定義為10個時間機關。時間機關大小,如ns或ps,在邏輯庫中指定。

預設情況下,該工具假設信号在一個時鐘周期内通過每個資料路徑傳播。 是以,當工具執行建立檢查時,它會驗證從FF1發起的資料在一個時鐘周期内到達FF2,并且在資料被FF2的下一個時鐘邊沿捕獲之前至少到達1.0個時間機關。如果資料路徑延遲過長,則報告為時序違規。 對于該建立檢查,工具考慮沿資料路徑的最長可能延遲和沿FF1和FF2之間的時鐘路徑的最短可能延遲。

當工具執行保持檢查時,它驗證從FF1發起的資料到達FF2的時間不早于上一個時鐘周期的捕獲時鐘邊沿。 該檢查確定已經存在于FF2的輸入端的資料在捕獲上一個周期資料的時鐘邊沿之後保持足夠長的穩定時間。對于該保持檢查,該工具考慮沿資料路徑的最短延遲和沿FF1和FF2之間的時鐘路徑的最長延遲。如果時鐘路徑有較長的延遲,就會發生保持違規。

如果某些路徑不打算按照STA工具預設的建立和保持行為運作,則需要将這些路徑指定為時序例外。否則,該工具可能會錯誤地将這些路徑報告為唏噓異常。

STA工具可以讓您指定以下類型的異常。

  • 僞路徑(False Path):由于邏輯配置、預期的資料序列或工作模式而從未被感應的路徑。
  • 多周期路徑。從發射到捕獲需要一個以上的時鐘周期的路徑。
  • 最小或最大延遲路徑。必須滿足您明确指定為時間值的延遲限制的路徑。

總結

本文參考靜态時序分析的專業工具公司Synopsys提供的資料,但不妨礙對于FPGA中的靜态時序分析的了解,都是大同小異,甚至可以說是一緻的。

在FPGA中,靜态時序分析更為簡單,隻需要在綜合工具的GUI界面中進行時序限制,綜合實作可以檢視靜态時序分析結果。根據結果了解設計的時序,進而修改設計或者修改限制等,這是一個疊代的過程。

注意,可以再GUI界面中進行限制時序,也可以直接使用Tcl語言進行限制,本質上都會轉換為Tcl限制,存儲于*dc檔案中。這裡有一個卻别,Xilinx早期的綜合工具ISE的限制檔案是UCF檔案,使用的不是TCL語言,後面的Vivado使用的XDC檔案,對SDC進行了自己的擴充。Synopsys或者Intel的工具的限制檔案都是sdc檔案,這裡所謂的檔案指的是檔案的字尾。

例如,Xilinx的XDC檔案:

################################################################################
## XDC generated for xc7k325t-ffg900-1 device
# 125.0MHz GT Reference clock constraint
create_clock -name GT_REFCLK1 -period 8.0	 [get_ports GTXQ0_P]
####################### GT reference clock LOC #######################
set_property LOC R7 [get_ports GTXQ0_N]
set_property LOC R8 [get_ports GTXQ0_P]

# USER_CLK Constraint : Value is selected based on the line rate (3.125 Gbps) and lane width (4-Byte)
# create_clock -name user_clk_i -period 12.800	 [get_pins aurora_module_i/clock_module_i/user_clk_buf_i/I]

# 20.0 ns period Board Clock Constraint 
create_clock -name init_clk_i -period 20.0 [get_ports INIT_CLK_P]

# 20.000	 ns period DRP Clock Constraint 
create_clock -name drp_clk_i -period 20.000	 [get_ports DRP_CLK_IN]

###### CDC in RESET_LOGIC from INIT_CLK to USER_CLK ##############
set_false_path -to [get_pins -filter {REF_PIN_NAME=~*D} -of_objects [get_cells -hierarchical -filter {NAME =~ *aurora_8b10b_0_cdc_to*}]]
           

靜态時序分析是晶片設計以及FPGA開發的重點難點,十分重要,這個專題的文章在學生時期也零零散散寫了一些,例如:

時序分析之靜态時序分析基礎