|
FPGA設(shè)計中關(guān)于時序約束 關(guān)于FPGA設(shè)計中,時序約束的定義的總結(jié)說明
1.全局時序約束
1.1 PERIOD約束 用于約束同一時間域中同步邏輯單元之間的時序關(guān)系,PERIOD約束會自動處理寄存器時鐘端的反相問題,即,如果相鄰?fù)皆r鐘相位取反,那么它們之間的延時將被默認PERIOD約束值的一半。 NET “net_name” PERIOD = period {HIGH|LOW} [high_or_low_time]; 最小時鐘周期的計算: Tclk = Tcko + Tnet +Tlogic + Tsetup - Tclk_skew; 其中,Tcko為從時鐘輸入到DFF輸出端的時鐘輸出時間,Tnet為網(wǎng)線延時,Tlogic為同步元件之間的組合邏輯延時,Tsetup為同步元件的建立時間。 1.2 OFFSET約束 用于約束數(shù)據(jù)的建立時間和保持時間,主要是輸入PAD到同步單元和同步單元到輸出PAD的時序關(guān)系 OFFSET_IN_BEFORE用于定義輸入數(shù)據(jù)比有效時鐘沿提前多長時間準(zhǔn)備好,其芯片內(nèi)部與輸入引腳相連的組合邏輯的延時不能大于該時間,否則,輸入的數(shù)據(jù)就達不到要求的建立時間。 OFFSET_IN_AFTER用于定義輸入數(shù)據(jù)在有效時鐘沿后多長時間到達芯片的輸入引腳,其作用和BEFORE是一樣的,不過BEFORE的時鐘沿是AFTER的下一個沿,如果一起定義的話。 上述約束用于設(shè)定在數(shù)據(jù)輸入時,保證有效時鐘沿到來時,數(shù)據(jù)已經(jīng)達到穩(wěn)定。 OFFSET_OUT_AFTER用于定義了輸出數(shù)據(jù)在有效時鐘沿之后多長時間之內(nèi)保持穩(wěn)定,其實是定義了輸出的最大的數(shù)據(jù)保持時間,芯片內(nèi)部的輸出延時必須小于這個值。 OFFSET_OUT_BEFORE用于定義在下一個時鐘信號到來之前的某個時間,必須輸出數(shù)據(jù),以供下一級器件使用。 這些約束用于對設(shè)計輸出端的數(shù)據(jù)輸出進行約束,以滿足下一級器件的建立時間的要求,保證下一級的采樣數(shù)據(jù)是穩(wěn)定可靠的。
2.特定約束
2.1 FROM_TO約束 用于定義兩個邏輯組之間的時序約束,以及對兩者之間的邏輯和布線延時進行控制,這兩個邏輯組的定義可以是預(yù)定義也可以是用戶自己定義。 通常用于約束多周期路徑(Multi-Cycle),時鐘無關(guān)的數(shù)據(jù)路徑,F(xiàn)alse路徑等。對于組合邏輯和慢速信號邏輯的約束經(jīng)常使用。 所謂多周期路徑:主要的形式為,寄存器采用同一個時鐘驅(qū)動,但是有些寄存器需要用使能信號來進行控制,由于使能信號的頻率較低,所以,在這個路徑的傳輸過程中,存在著多個時鐘周期進行傳輸?shù)那闆r。 對于這種情況,約束要比全局約束松,可以先進行時鐘周期約束,再對這個路徑進行松綁約束,用FROM-TO。 所謂多時鐘域:主要的形式是寄存器的兩個時鐘完全獨立的,可以先對每個時鐘所驅(qū)動的寄存器或分組進行周期約束,然后在對兩個寄存器(分組)進行FROM-TO約束。
2.2 最大延時約束MAXDELAY 用于定義特定網(wǎng)絡(luò)上的最大延時,只能定義到網(wǎng)絡(luò)上。 2.3 最大偏移約束MAXSKEW SKEW用于定義同一點驅(qū)動的時鐘信號經(jīng)過路徑傳播之后,到達兩個或多個終點的時間差,這個約束用于定義特定的網(wǎng)線上的偏移不大于某個時間。 2.4 TIG/False路徑約束 用于對不需要約束的路徑(即與約束無關(guān)的路徑)進行說明。推薦用這個約束來減少設(shè)計中受約束路徑的數(shù)量。 對于靜態(tài)時序分析中無法達到要求的情況,即slack為負值的情況,找到關(guān)鍵路徑,主要的原因可能是,關(guān)鍵路徑本身是一條TIG路徑或是多周期路徑,應(yīng)該通過修改約束來改進這個問題。如果不是這樣,當(dāng)延遲值在目標(biāo)延遲的20%的范圍內(nèi),使用synplify 的-improve命令來重新綜合優(yōu)化設(shè)計,當(dāng)超出20%,則需要重新修改設(shè)計,比如流水線,F(xiàn)SM或資源共享等方法。 2.5 SYSTEM_JITTER系統(tǒng)時鐘抖動約束 用于定義設(shè)計中的系統(tǒng)時鐘抖動的最大值。
3. 分組約束
3.1 TNM和TNM_NET約束 TNM和TNMNET約束都是用于用戶定義新的時序約束分組。兩者的不同是TNM進行分組不可以穿越IBUF和BUFG,而TNM_NET則可以,也就是說,如果用TNM定義一個PADS分組,只能對這個PAD進行約束,而如果使用TNM_NET約束,則會把IBUFG后面的連接網(wǎng)絡(luò)都加入到這個約束中來。 TNM_NET約束只能用于網(wǎng)線上,否則被忽略。 {NET|INST|PIN} "object_name(signals_name)" TNM/TNM_NET = predefined_group or "identifier(net_name)";
3.2 TIMEGRP約束 用于使已有的分組合并,構(gòu)成新的分組,或用排除的方法構(gòu)成新的分組。已有的分組包括預(yù)定義的分組和用戶自己定義產(chǎn)生的分組。 TIMEGRP "newgrp_name" = "grp_name1" "grp_name2"; TIMEGRP "newgrp_name" = "grp_name1" EXCEPT "grp_name2"; 定義受時鐘沿控制的觸發(fā)器分組,如RISING或FALLING沿觸發(fā)的分組。 TIMEGRP "newgrp_name" = RISING/FALLING "grp_name1"; 定義受門控信號控制的鎖存器分組,如TRANSLO或TRANSHI的電平控制的分組 TIMEGRP "newgrp_name" = TRANSLO/TRANSHI "grp_name1";
3.3 TPTHRU約束 用于定義一個或一組中間點,以便在其它時序約束定義中來進行標(biāo)識,我認為有點象電路圖中的網(wǎng)絡(luò)命名。如下 INST FF1 TNM = "start"; INST FF2 TNM = "endpt"; NET “mynet” TPTHRU= “ABC”; TIMESPEC “TS_path" = FROM "start" THRU "ABC" TO "endpt" 30; 4.TIMESPEC TIMESPEC是關(guān)于時序約束定義的一個基本時序相關(guān)約束,它在時序規(guī)范中作為標(biāo)識符,表示本約束為時序規(guī)范。 TIMESPEC ”TSidentifier“ = XXXXX XXXXX XXXXXXX TSidentifier作為時序規(guī)范,成為TS屬性定義。 PERIOD約束,F(xiàn)ROM-TO約束等都需要使用這個格式。
|