Vivado使用技巧(10):編輯與改寫IP核原始檔
有些時候,根據設計需求可能會想要修改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核的功能準確性。
相關文章
- Vivado使用技巧(8):Core Container打包IP核AI
- Vivado使用技巧(27):RAM編寫技巧
- Vivado使用技巧(26):HDL編寫技巧
- Vivado使用技巧(7):使用IP核自帶Testbench進行模擬
- Vivado使用技巧(5):屬性編輯器的使用
- FFT Vivado IP核實現FFT
- Vivado使用技巧(19):使用Vivado Simulator
- Vivado開發環境,將COE檔案加入IP核ROM中開發環境
- Vivado使用技巧(9):COE檔案使用方法
- HDL/FPGA學習筆記二十五:Vivado PLL IP核的使用FPGA筆記
- Vivado DDS IP核使用和模擬(一、單通道訊號發生器)
- Vivado使用技巧(13):CSV檔案定義IO Ports
- Vivado使用技巧(23):綜合執行與OOC
- vivado新增設計原始檔
- vivado新增模擬原始檔
- modelsim 獨立模擬vivado的IP核及模擬指令碼指令碼
- Vivado使用技巧(17):建立IBIS模型模型
- Vivado使用技巧(6):Messages視窗管理
- Vivado使用技巧(29):約束功能概述
- Vivado使用技巧(20):Waveform功能詳解ORM
- Vivado使用技巧(18):模擬功能概述
- Vivado使用技巧(33):時序異常
- Vivado使用技巧(25):Block Synthesis技術BloC
- Vivado使用技巧(22):綜合策略與設定的選擇
- Vivado使用技巧(12):設定DCI與內部參考電壓
- Vivado使用技巧(4):查詢功能詳解
- Vivado使用技巧(3):Force Up-to-Date功能
- Vivado使用技巧(11):設定FPGA配置模式FPGA模式
- Vivado使用技巧(34):路徑分割現象
- Vivado使用技巧(28):支援的Verilog語法
- Linux 終端中使用 nano 編輯器技巧LinuxNaN
- 使用 SourceInsight 閱讀、編輯原始碼原始碼
- Vivado使用技巧(30):使用時序約束嚮導
- 【譯】使用可編輯表示式改進除錯除錯
- 使用 Promise 來改寫 JavaScript 的載入邏輯PromiseJavaScript
- Linux編寫Bash指令碼的10個技巧Linux指令碼
- Vivado使用技巧(16):SSN轉換噪聲分析
- Vivado使用技巧(14):IO規劃方法詳解