1. 偏移約束的作用
偏移約束(Offset Constraint)用來定義一個外部時鍾引腳(Pad)和數據輸入輸出引腳之間的時序關系,這種時序關系也被稱為器件上的Pad-to-Setup或Clock-to-Out路徑。這些約束對與外部元器件相連的接口十分重要,在這里,需要解釋兩個術語:
Pad-to-Setup:也被稱為OFFSET IN BEFORE約束,是用來保證外部輸入時鍾和外部輸入數據的時序滿足FPGA內部觸發器的建立時間要求的。如下圖TIN_BEFORE約束使得FPGA在進行DATA_IN和CLK_SYS布線時努力保證DATA_IN相對於CLK_SYS的延時小於TIN_BEFORE。
Clock-to-Out:也被稱為OFFSET OUT AFTER約束,是用來滿足下游器件建立保持(setup/hold)要求或輸出時鍾和數據之間時序要求的。
OFFSET IN BEFORE 或OFFSET OUT AFTER約束允許用戶指定外部輸入或輸出引腳相對於時鍾邊沿到內部數據的延時。
1‑1輸入偏移約束時序參考圖
1‑2輸出偏移約束時序參考圖
Xilinx FPGA有三個層次的約束:
- Global OFFSET:為所有輸入或輸出指定相對某個特定時鍾的約束;
- Group OFFSET:為一組輸入或者輸出指定相對驅動他們的時鍾的約束
- Net-Specific OFFSET:為某個特定的輸入或者輸出指定相對其驅動時鍾的約束;
在進行約束的詳細講解之前,必須明確兩個概念:
- 建立時間setup time
指在觸發器始終上升沿到來之前,數據必須保持穩定的時間,如果建立時間不夠,數據將不能被打入觸發器;
- 保持時間hold time
指觸發器的時鍾上升沿到來之后數據必須穩定不變的時間,如果保持時間不夠,數據不能被打入觸發器;
1‑3建立保持時間時序圖
2. OFFSET IN約束
OFFSET IN約束用來設定Pad-to-Setup時序要求。OFFSET IN是對數據時鍾關系的一種說明。它當分析建立時間要求(data_delay+setup-clock_delay-clock_arrival要求滿足約束條件)的時候,需要考慮時鍾延時(clock delay)、時鍾邊沿(clock edge)、DLL/DCM引入的時鍾相位。
2.1. OFFSET IN BEFORE 約束
OFFSET IN BEFORE約束限定了數據從引腳傳播到同步元件並在同步元件建立起來的所需的時間。比如 “OFFSET = IN 2 ns BEFORE clock_pad”這個約束,限定數據必須在下一個時鍾邊沿到來之前2ns內讀取,因此FPGA會規划使得數據相對時鍾邊沿的超前2ns之內。
2‑1OFFSET IN BEFORE約束帶校准功能的電路
上圖FPGA在布線時會盡力去滿足如下不等式:
TData + TSetup - TClock <= Toffset_IN_BEFORE;
2.1.1. VALID約束
OFFSET IN約束往往和VALID約束一起使用。OFFSET IN約束在建立時間分析中作為建立時間要求使用,而VALID約束在保持時間約束中作為保持時間要求使用。VALID約束指定了輸入數據的持續時間。在默認情況下,FPGA指定VALID和OFFSET的值相等,也即FPGA在默認情況下認為保持時間為0。
2‑2帶有VALID約束的輸入偏移約束
2.1.2. OFFSET IN約束的一個簡單例子
FPGA的分析工具在綜合時經常會用到一個詞:Slack,即松弛時間,當Slack>0時,該路徑設計滿足時序要求;當Slack<0時,該路徑不滿足時序要求。
Slack = (Requirement - (Data Path - Clock Path - Clock Arrival))
2‑3OFFSET IN的簡單例子時序
該約束為:
TIMESPEC TS_clock = PERIOD clock_grp 10 ns HIGH 50%;
OFFSET = IN 3 ns BEFORE clock;
2‑4OFFSET IN約束時序報告
從時序約束報告的Slack的值可以看出,Data不能被Clock成功打入觸發器FF0.
2.2. OFFSET IN AFTER約束
OFFSET IN AFTER和OFFSET IN BEFORE在本質上是一樣的,只是形式上不一樣,其約束效果是完全一樣的。OFFSET IN AFTER的約束公司如下:
TData + TSetup - TClock <= TPeriod – Toffset_IN_AFTER;
3. OFFSET OUT約束
OFFSET OUT約束用來定義clock-to-pad時序要求。OFFSET OUT約束是對外部clock-to-data的說明並且必須考慮clock_delay、clock edge和DLL/DCM時鍾相位等。
3.1. OFFSET OUT AFTER約束
OFFSET OUT AFTER約束定義了數據從同步元件傳播到管腳最長允許時間。可以形象地理解為時鍾邊沿到達器件邊界時數據離開器件邊界的時間。“OFFSET = OUT 2 ns AFTER clock_pad”約束意思是從FPGA數據端口傳輸到下游器件的數據在參考時鍾2ns之后一定可讀。
3‑1OFFSET OUT AFTER約束帶校准功能的電路
下面公式規定了數據時鍾的這種關系:
TQ + TClock2Out + TClock <= Toffset_OUT_AFTER;
OFFSET OUT AFTER約束沿着參考時鍾路徑和數據路徑的最大延時不超過偏移值。
3.1.1. OFFSET OUT AFTER約束的一個簡單例子
同樣的,OFFSET OUT的Slack也定義了輸出約束的松弛時間:
Slack = (Requirement - (Clock Arrival + Clock Path + Data Path))
3‑2OFFSET OUT 約束的簡單例子
其約束應寫為:
TIMESPEC TS_clock = PERIOD clock_grp 10 ns HIGH 50%;
OFFSET = OUT 3 ns AFTER clock;
3‑3OFFSET OUT 時序約束報告
時序報告中Slack=-0.865ns,不滿足時序約束要求。
3.2. OFFSET OUT BEFORE約束
同樣地,OFFSET OUT BEFORE和OFFSET OUT AFTER約束本質上沒有什么不同,只是形式上的不一樣的,其約束效果完全一樣。