Vivado開發工具熟悉之XDC約束檔案
Vivado開發工具的使用之前已經有了比較多的瞭解,在建立工程圖形化介面操作這裡已經不存在什麼問題,不論是IP核,embedded system(block design),還是新增約束,編譯流程,流程已經打通了。
但是在實際工程移植過程中,發現Vivado開發中最不一樣的地方還是約束這裡,這裡把約束相關的一些與ISE不同的地方,和Vivado新增加的關於約束的工具總結一下。
2,vivado約束採用xdc約束檔案,這裡的語法其實是和TCL語法一致,這個語法詳見UG903手冊;
3,vivado約束和ISE不同,ISE主要是針對net和inst進行約束,而xdc中,分成get_pins,get_cells,get_ports,get_clocks,這裡get_cells和ISE裡面的inst類似,而在進行時序例外約束的時候多用的是get_pins(其實就是一個例項中的管腳定義,也包括底層原件的管腳,比如暫存器)。在使用萬用字元匹配路徑的時候,最好使用edit timing constraints圖形介面配合。
4,vivado時序約束是最有變化的,和ISE最大不同的是ISE中對於跨時鐘路徑都是預設不分析的,但是對於vivado,所有的路徑其實都是進行分析的,同步時鐘會進行分析(比如PLL或者MMCM輸出時鐘,相位關係確定),而且非同步時鐘如果不加非同步時鐘約束也會按照同步時鐘那樣進行時序分析,在時序報告中other path groups裡面的async_default中就都是非同步時鐘跨時鐘路徑。這時候就需要很全面的對時鐘域有很全面很清楚的認識,這個vivado有可以利用的工具,後面會介紹;
5,vivado關於時序約束的工具介紹:
1)edit timing constraints,這個就跟ISE中的一致,其實就是一個圖形化新增約束的介面,可以用圖形介面將約束的tcl命令轉化出來,主要作用是在用萬用字元匹配路徑的時候可以配合使用;
2)report timing constraints,這個就是最後時序分析的報告,這裡面主要由三項,首先intra-clock paths是單時鐘約束,其次inter-clock paths,這個是同步時鐘的跨時鐘路徑,最後就是other path group,這裡面的async_default就是非同步時鐘的跨時鐘路徑。
這裡點選時序不達標的路徑,然後右鍵可以直接新增約束,set_false_path,set_max_delay等,這時候約束會加到edit timing constraints裡面,然後新增到xdc約束檔案中,這個對應的約束檔案就是constraints裡面標註target的檔案(可修改target)。
此外,在report timing constraints裡面的路徑雙擊可以在device頁面看到類似plan ahead裡面的實際在晶片中的路徑,此外還有Path xxx - timing_1頁面會列出詳細的souce clock data path destination clock,以及對應的延時。
3)report clock interaction,這個工具就是解決前面說的vivado分析跨時鐘域路徑的問題,這個工具會以一個表格的形式列出所有時鐘域對應關係以及是否有約束,如下圖,方便對所有時鐘域有一個完整的認識,而且可以看到那個跨時鐘路徑沒有被約束可能存在問題。
這裡對於vivado約束方面關於跨時鐘(CDC)約束的技巧,看到一篇比較好的文章【Vivado使用誤區與進階】XDC約束技巧——CDC篇 ,可供參考。