有些時候,根據設計需求可能會想要修改IP核生成的源文件(只能修改未加密文件),包括HDL文件和XDC約束文件。這種修改不能直接修改源文件,因為在后續設計流程中,IP可能會復位或重新生成,導致修改操作被復原。本文將介紹編輯與改寫IP核源文件的方法,不過仍然需要注意兩點:
某些IP核包含其它的層次化子IP核,這類IP核源文件不可修改;
IP核的Core Cotainer特性必須被禁用。
改寫IP約束文件
IP核生成時會生成相應的約束文件,包括物理約束(physical constraint)和時序約束(timing constraint)??赡苄枰薷牡奈锢砑s束有LOC、PACKAGE_PIN等;部分時序約束可以修改,但是在*_ooc.xdc中定義的系統工作時鐘頻率強烈建議不要修改。
修改IP約束有兩種方法:(1).使用下文描述的特殊方法編輯IP的XDC文件;(2).XDC文件有一個編譯順序屬性,IP核的XDC文件該屬性為EARLY,較早執行;用戶自定義的頂層約束文件該屬性為NORMAL,較晚執行。因此可以通過用戶約束文件(或Tcl文件)來重新約束某一對象,達到改寫的效果。
在綜合IP核時,物理約束會被忽略,因此改寫物理約束的效果只會在實現階段才能看見;而時序約束的改寫在綜合和實現階段都會使用。但是有如下兩種特例:
XDC命令通常按順序執行,但是對于時序約束而言并不總是如此。比如假設一個時序路徑設置已經失敗,之后又對該路徑的max_delay做了約束,這樣并不會改變路徑的失敗狀態,因為路徑失敗有更高的優先級,這種情況下必須通過編輯IP源文件來實現修改;
某些操作和命令不能再XDC文件中執行,必須通過Tcl文件來實現。比如想要改變BUFG_GT單元的LOC屬性,設計者必須刪除當前的設置后才能設置新的LOC。執行該操作用到的reset_property命令只能在Tcl文件中執行。
設置IP約束適用范圍
生成的IP核要在設計中實例化,將IP約束應用到IP的實例化單元中有兩個屬性可以控制:
SCOPED_TO_REF:規定XDC文件應用到哪些模塊;
SCOPED_TO_CELLS:規定XDC文件應用到模塊中的哪些單元。
在Tcl Console中輸入“report_compile_order -constraints”命令可以查看這兩個屬性及XDC文件的編譯順序,如下圖:
SCOPED_TO_REF屬性通常是IP核的用戶設置名稱;SCOPED_TO_CELLS屬性通常在Verilog中為inst,在VHDL中為U0。最好的設計方法是創建一個新的XDC或Tcl文件,將所有的XDC/Tcl命令放在該文件中,用來改寫IP的XDC文件,并且設置相應的SCOPED_TO_REF和SCOPED_TO_CELLS屬性。具體步驟如下:
1.創建一個新的XDC或Tcl文件并添加到狀態為Active的約束集中;
2.將所有需要改寫IP XDC的XDC或Tcl命令放在新文件中;
3.使用set_property命令設置新文件的兩個屬性,相關語句如下:
set_property SCOPED_TO_REF [get_files
set_property SCOPED_TO_CELLS
4.將XDC/Tcl文件標記為僅用于實現:
set_property USED_IN IMPLEMENTATION [get_files
編輯IP源文件
編輯IP之前需要先生成所有的IP核相關文件,包括DCP設計檢查點文件。使用下面命令將XCI文件的ISMANAGED屬性設置為False:
set_property IS_MANAGED false [get_files
如果IP核是一個復雜的子系統,會提示如下錯誤:
ERROR: [IP_Flow 19-3666] The is_managed property cannot be directly modified for hierarchical IP.
如果IP核啟用了Core Cotainer,會提示如下錯誤:
ERROR: [IP_Flow 19-4671] The is_managed property cannot be directly modified for IP in a core container.
這也是本文開頭提到的兩點限制。經過上述設置,IP核的IS_LOCKED屬性會變為TRUE,且IP圖標改變,如下圖:
點擊Tools->Report->Report IP Status報告IP狀態,可以查看到IP核狀態為“User-managed IP”,該狀態下即可對IP核的未加密HDL文件和XDC文件進行修改:
完成需要的編輯之后,必須在Tcl控制臺中復位IP,使用“reset_run _synth_1”命令,之后使用“launch_run _synth_1”使用修改后的HDL或約束文件重新運行IP。這樣便完成了對IP源文件的編輯。
雖然IP子系統的IS_MANAGED屬性不允許修改,但可以通過如下途徑完成對IP子系統的源文件修改:其余步驟都相同,只是設置屬性步驟替換為將Vivado的編輯器設置為其它編輯器(不用默認文本編輯器),在磁盤中直接編輯IP核的RTL源文件。需要注意,相關狀態不會顯示在Vivado中,因此設計者需要自己明白文件的狀態。
修改后一定要注意鎖住修改的IP
修改完相應的IP之后,一定要使用下面這個命令,將修改的IP鎖住
set_property IS_LOCKED true [get_files <你修改的文件名>]
雖然不鎖住,依然可以正常工作,但是一旦重新更改IP(可能是其它IP),重新generate output products后,很有可能之前的修改就作廢了。。需要重新修改一遍,并且這個時候還很容易忽略掉這個事情,導致一個簡單的bug讓自己煩很久。。。
總而言之,修改IP核的源文件是一件很危險的事,因為可能會導致IP核不能正常工作。修改之前要確保自己的設計目標;修改后要驗證IP核的功能準確性。
-
IP
+關注
關注
5文章
1701瀏覽量
149503 -
編譯
+關注
關注
0文章
657瀏覽量
32852 -
編輯器
+關注
關注
1文章
805瀏覽量
31163
原文標題:Vivado修改IP源文件的注意事項
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論