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