XDC的基本語法可以分爲時鐘約束、IO約束以及時序例外約束,對一個設計進行約束的先後順序也可以按照這三類約束依次進行。
時鐘約束
時鐘約束必須最早創建,端口進來的主時鐘以及GT的輸出RXCLK/TXCLK都必須由用戶使用create_clock自主創建。如果是差分輸入的時鐘,可以僅在差分對的P側用get_ports獲取端口,並使用create_clock創建。
create_clock-name clk_200 - period 5 [get_ports clk200_p]
針對vivado自動推導的衍生時鐘,比如MMCM/PLL/BUFR的輸出時鐘,可以由vivado自動推導,用戶無需創建。
但是,工具不能自動推導出使用寄存器和組合邏輯搭建的分頻器等衍生的時鐘,必須有用戶使用create_generated_clock來創建。舉例如下
Clk1 是原本就有的主時鐘,clk2 是衍生出來的時鐘。注意創建時鐘,語法不一樣。
爲什麼時鐘要進行時鐘約束,不約束有什麼後果?這裏還是不知道。
I/O約束
在設計的初級階段,可以不加IO約束,讓工具專注於滿足FPGA內部的時序要求。當時序要求基本滿足後,再加上IO約束跑實現。
1 不加任何IO約束的端口,時序要求被視爲無窮大。
2 XDC中的set_input_delay/set_output_delay 是從系統 角度來約束。
3 典型的IO時序,包括系統同步,源同步,SDR和DDR等。在vivado圖形界面的XDC templates中有示例。2014.1版後,還有一個timing constraints wizard可供使用。timing constraints wizard 用過,操作簡單,需要知道信號最大最小延遲和板間最大最小延遲即可。
(芯片引腳上有信號的最大最小延遲,板子上的默認都是0,不知道這樣操作可以不)
http://group.chinaaet.com/273/4100028543 timing constraints wizard 使用方法
時序例外約束
時序例外約束包括set_max_delay/set_min_delay,set_multicycle_path,set_false_path等,這類約束除了要滿足XCD的先後順序優先級外,還要遵循自身的優先級限制。總的準則是,針對同一條路徑,對約束目標描述越具體的優先級越高。
還有其他的技巧和說明,參考鏈接
http://xilinx.eepw.com.cn/news/article/a/1375