Vivado使用技巧(10):編輯與改寫IP核原始檔

FPGADesigner發表於2018-08-18

有些時候,根據設計需求可能會想要修改IP核生成的原始檔(只能修改未加密檔案),包括HDL檔案和XDC約束檔案。 這種修改不能直接修改原始檔,因為在後續設計流程中,IP可能會復位或重新生成,導致修改操作被複原。本文將介紹編輯與改寫IP核原始檔的方法,不過仍然需要注意兩點:

  • 某些IP核包含其它的層次化子IP核,這類IP核原始檔不可修改;
  • IP核的Core Cotainer特性必須被禁用。

改寫IP約束檔案

IP核生成時會生成相應的約束檔案,包括物理約束(physical constraint)和時序約束(timing constraint)。可能需要修改的物理約束有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 <REF> [get_files <new XDC/Tcl file>]
set_property SCOPED_TO_CELLS <CELL> [get_files <new XDC/Tcl file>]

4.將XDC/Tcl檔案標記為僅用於實現:

set_property USED_IN IMPLEMENTATION [get_files <netw XDC/Tcl file>]

編輯IP原始檔

編輯IP之前需要先生成所有的IP核相關檔案,包括DCP設計檢查點檔案。使用下面命令將XCI檔案的ISMANAGED屬性設定為False:

set_property IS_MANAGED false [get_files <IP_NAME>.xci]

如果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核的功能準確性。

相關文章