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