git有多好用我就不用多說了,可謂是程序員必備技能之一。對於通常的軟件代碼來講,只需把源文件進行git管理便可。但對於FPGA工程師來講,使用git多多少少有些蛋疼,主要有下面幾個問題:git
有bd文件的工程中,只把bd文件加入git是不行的;程序員
不少公司都會有一些積累下來的hdl文件,放到某個文件夾中,全部的工程目錄下都會有這個文件夾,所以這個文件中會有不少不是當前工程的文件,所以git的文件中,必須包含當前工程的files list,不然就得從新添加文件;web
若是把整個Vivado工程都放入git,非必要文件太多,既浪費git服務器的空間,Push和Pull的速度也會很慢;服務器
不少FPGA工程師有本身的一套git管理Vivado的流程,但每次push前和Clone後都須要作不少操做。微信
最近我也一直在研究Vivado工程git的管理方式,查了網上不少方法,但有些操做略複雜,有些方法徹底不起效,但好在最終綜合整理出了一種相對簡單的方式進行,也許這種方式不是最合適的,若是你有更好的方法,但願能分享出來。app
咱們這篇文章只講Vivado的工程,不包括HLS或者Sdk工程,由於這這兩個工具都是純C/C++/TCL的,git管理起來比較簡單工具
1. 工程目錄
咱們採用以下的目錄結構,這種方式也是Xilinx官網某個教程上推薦的,測試
Work目錄:Vivado的工程全都放在Work目錄下,包括bd以及它的相關文件;spa
Src目錄:放hdl的源文件以及IP Core的源文件;.net
Doc目錄:放跟工程相關的文檔,若是沒有的話能夠不加;
Mcs目錄:放工程生成的bit和mcs文件,這個文件也看我的用途,若是以爲bit文件太大不想放在git上也無所謂,但我的以爲在調試的時候常常會用到以前測試好了某個bit;
Scripts目錄:也是進行git管理的關鍵,裏面放各類Tcl腳本;
若是工程中有SDK/HLS/SsyGen,能夠在該目錄下再增長文件夾專門放置對應的工程文件。
2. 操做步驟
在打開的Vivado工程中,經過Tcl Console將目錄切換到Work目錄:
cd [get_property directory [current_project ]]
生成新建工程的Tcl腳本,執行:
write_project_tcl {./Scripts/s1_recreate_project.tcl}
依次生成bd文件的tcl腳本,好比工程中有兩個bd文件
aa.bd
和bb.bd
,打開aa.bd
,並執行:
write_bd_tcl {./Scripts/s2_aa_bd.tcl}
打開bb.bd
,並執行:
write_bd_tcl {./Scripts/s3_bb_bd.tcl}
這樣,在Scripts文件夾中,就會多出三個文件:
在
.gitignore
文件中,把整個Work目錄所有ignore掉,Src文件夾中根據實際狀況進行ignore便可,HDL文件都保留,IP Core只留.xci
文件;Scripts目錄所有保留。到這一步,就能夠進行Commit和Push了。
把程序Clone下來後,首先要修改
s1_recreate_project.tcl
,須要修改的地方有兩個:一個是新建工程時的路徑,原始文件爲:
替換爲:
第二處須要更改的是刪除files list中的bd文件信息,以下圖中框起來的部分,這部份內容是將文件添加到工程中,但此時咱們的bd文件尚未生成,所以這兩個要刪掉。bd文件是咱們經過後面的tcl腳本添加進來的。
切換到Scripts目錄
依次執行:
source ./s1_recreate_project.tcl
source ./s2_aa_bd.tcl
source ./s3_bb_bd.tcl
OK,到這裏工程就Clone完成了!!!
下面說一下我操做的過程當中碰到的幾個問題:
若是是DDR3的MIG IP Core,會有Configuration Files,若是咱們修改了MIG,並從新生成後,就會常常出現這個Configuration Files找不到的狀況,像下面這樣:
這樣就要咱們在導出s1_recreate_project.tcl
前要先把這個文件替換成正確的文件。若是MIG是放在到bd中,那麼在上述的第6步修改s1_recreate_project.tcl
中,也要把mig_*.prj
文件刪掉,由於這個文件是在新建MIG時自動生成的。
有些朋友用bd的時候喜歡用wrapper.v的文件來封一層,這個wrapper.v是Vivado自動生成的,並且默認目錄就是在Work的工程目錄下,咱們能夠不用管這個wrapper.v的文件,等bd文件添加進去後,再手動生成一下便可;也能夠不使用wrapper.v,直接例化bd文件。
上面這種方法是在Vivado2017.2上進行的測試,若是是2017.4及以上的版本,
write_project.tcl
指令中須要增長-use_bd_files
選項,也就是:
write_project_tcl -use_bd_files {./Scripts/s1_recreate_project.tcl}
若是不加這個選項,默認會把bd文件信息也導出,這樣在運行時會提示麼有發現bd文件的錯誤。
若是是低版本的工程進行git後,要用高版本的Vivado打開,咱們能夠在導出bd時去掉IP的版本信息,也就是:
write_bd_tcl -no_ip_version {./Scripts/s2_aa_bd.tcl}
總結
我嘗試了網上不少方法基本都不能直接使用,但他們既然把方法放到網上,說明是通過測試的,但可能測試的並非特別全面,就是MIG的IP同樣,若是個人工程中沒有這個IP,那我也不知道在git時會出現這種問題。我也不能保證在使用別的IP時不會出現問題,但思路都是同樣的,就是把工程的tcl腳本和bd的tcl腳本分開,先新建工程把非bd文件的內容加進來,再把bd的文件內容添加進來。
要進FPGA技術交流羣的朋友能夠加微信:xhclsys2
本文分享自微信公衆號 - 科學計算Tech(Quant_Times)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。