天天看點

靜态時序分析4——時序特例Timing exception學習目标:時序特例 

學習目标:

  • 定義時序特例
  • 時序特例的合法起點和終點 
  • 報告忽略的時序特例的指令
  •  給定多周期路徑和規範,應用多周期路徑限制

時序特例 

 什麼是時序特例?

 跟default預設情況下檢查不同的檢查設定都可以歸為timing exception。 

timing constraint幾大塊:

  • 時鐘定義和時鐘之間的關系。(design部分提供)
  • timing exception(不是所有的path都在一個cycle裡面進行檢查。但是時序例外必須是真實情況的反應,自己不要随便加)
  • IO constraint端口信号限制。
  • 靜态信号、長值信号(長時間是某個值的信号)(有的也歸在timing exception)

時序特例是改變預設單時鐘檢查的constraint。

//定義時鐘,設定輸入輸出端口延時,工具預設是單周期檢查
Create_clock
Set_input_delay
Set_output_delay
           

timing exception相關指令:

set_false_path
/*
false_path,對某個點定義後,不對它進行時序檢查
不去進行時序檢查 情況:
(1)design加入某個設計,但是晶片不需要這個功能。
(2)功能也用,但是優先級不高,晶片真正功能上用不到,可能是用來測試、監督信号。
(3)信号在整個晶片生命周期中,近乎是靜态值。比如,在上電時動一下,或者,實作某一個功能應用時動一下(可以設定但是不推薦使用false,安全起見,設定為multicycle)
*/

set_multicycle_path   

/*
multicycle path多周期path,資料路徑延時比較大,一個周期跑不到,或者功能實作不需要一個周期跑到
信号太長,一個周期傳不過去。
情況:
從設計上來說:
(1)一些運算器data path特别長,功能不一定要一定在一個周期上做完,可以幾個周期。
(2)信号切換不頻繁,類似靜态信号,長時間處于某個電平。
從後端便利性來說:
(3)從寫constraint便利性考慮,減少constraint的複雜
*/

set_max_delay
/*
定義兩個點之間的絕對延時。
(1)跨時鐘域。異步邏輯,不會進行時序檢查。一些設計中兩個domin雖然異步,但是信号之間的傳輸延遲不能超過幾個cycle,有時序要求。
(2)存在一個balance,好幾個信号,在一定範圍内同時到達。
*/

set_min_delay
/*
定義兩點之間的絕對的最小延時
*/

//set_max_delay和set_min_delay一般成對出現。

report_exceptions //看看exception constraint

reset_path //重置timing path
           
//這些指令的文法:
//從那個點開始到那個點結束的限制
option有:
-from     //起始點
-to    //到哪裡
-through    //經過哪個點

-rise_from
-fall_from
           

時序例外的合法起點和終點 

時序例外要從有效的startpoint開始到有效的endpoint結束。否則constraint會被ignore 。

起點startpoint:

  • Input Ports
  • Clock Pins of Registers

終點endpoint:

  • Output Ports
  • register除了clock pin的其他端口(reset pin、set pin、En pin<使能端口>、data pin)

減少時序例外的數量

 以下各項分别代表多少個例外?

靜态時序分析4——時序特例Timing exception學習目标:時序特例 
set false path -from Q2 reg[*]/CP


set false path -from g2_reg[*]/CP -to 93_reg[*]/D    //*代替任意字元


set false path -from g2 reg[1]/CP-to reg[1]/D

//    .
//    .
//    .
set false path-from Q2 reg[32]/CP -to reg[32]/D


set false path -from clk2 -to clk3    //clock2 domin到clock3 domin這條路徑設定為false

/*
這四個指令是等效的。
判斷那個指令更好:
越精細化定位到startpoint和endpoint越好,太寬泛不好,有可能把其他不該false的路徑false了。
*/
           

使用 -through 選項

–through 選項需要更多 CPU 用于大型設計

除非必要,否則不要使用 –through 

(工具計算起點終點花費時間多,而且沒有人能保證through某個點的時候,把endpoint和startpoint寫全部考慮清楚,容易誤傷真實要檢查的點)

當有一個引腳時使用 set_disable_timing 而不是 –through

Set_false_path –through U1/A

Set_disable_timing U1/A    
//disable timing arc,時序檢查資訊傳不過這個邏輯,經過這個點的邏輯都被打斷了
           

時序例外檢查

report_exceptions –ignored //工具ignore的constraint報出來,看看哪裡出問題做檢查
check_timing
/*
option很多,有些時序沒有clock也會報出來,有clock,但是沒有timing path叫做unconstraint_endpoint,是因為加了timing exception路徑被打斷了,沒法構成有效的時序路徑
*/
           

時序例外的優先級

  • 同一指令優先級,越具體設定,優先級越高。
  • 不同指令優先級,false大于multicycle。

僅應用所需的時序例外

靜态時序分析4——時序特例Timing exception學習目标:時序特例 
Set_false_path –to FF2/D –setup    //兩條path都受影響
Set_false_path –from FF0/CP –to FF2/D -hold    //1-2保留了,0-2影響
           

 多周期路徑

 加法器

靜态時序分析4——時序特例Timing exception學習目标:時序特例 

時鐘周期10ns,需要60ns計算時間。單cycle跑不了,需要六個cycle。

時序限制,用multicycle。

加了multicycle,指令:

create_clock –period 10 [get_ports CLK]
set_multicycle_path –setup 6 –to [get_pins “C_reg[*]/D”]
           

設定六倍的cycle,推六個cycle在周期60處做時序檢查setup檢查 

hold怎麼去進行檢查?

hold也會跟着走,少一個cycle 

create_clock –period 10 [get_ports CLK]
set_multicycle_path –setup 6 –to [get_pins “C_reg[*]/D”]
Set_multicycle_path –hold 5 –to [get_pins “C_reg[*]/D”

//multicycle設定成對出現
           

對應不同的hold check情況:

(1)資料很短,信号變化很快,但是傳輸路徑長。

(2)資料很慢,經過長時間傳到被采集的地方 。

靜态時序分析4——時序特例Timing exception學習目标:時序特例 
靜态時序分析4——時序特例Timing exception學習目标:時序特例 

繼續閱讀