所有的Commandline都可以在ISE的help->User Manuals里查到,在User Manuals中
XST User Guide -------關于XST的命令單獨在這個文檔里;
Command line tools user guide ---------ngdbuild、PAR、map、trce、bitgen等其他的都在這里
下面都是轉帖:
因為目前進行的一個項目使用了多塊容量較大的Xilinx FPGA, 對各塊FPGA進行synthesis,map,P&R和generating programming file就成了一個大問題。(慚愧啊,group里沒有人有modular design的經(jīng)驗)雖然現(xiàn)在的工作站性能比較強勁,但產(chǎn)生每一個programming file還是要花上好幾個小時。所以考慮到在Command Line下面進行所有的編譯工作,下面是一點點心得,希望對大家有所幫助。
1.Command的介紹
要完成一次完整的Xilinx FPGA編譯過程,涉及到的Command包括了:
XST:
全稱為Xilinx Synthesis Technology,這是Xilinx ISE里面附帶的一個免費的綜合工具。(呵呵,Synplify Pro的購買正在商洽之中)Synthesis完畢后,你可以用任何的文本工具打開后綴名為“.syr”的文件,察看synthesis的具體運行過程及報告。
NGDBuild:
這個命令,其實就是translate啦。這是implementation的第一步。它會把所有的netlist和design constraint合并到一起,生成一個ngd文件供map工具使用。同樣的,NGDBuild的報告文件是后綴名為“.bld”的文件。
MAP:
MAP命令是將NGDBuild命令所生成的ngd文件,映射到具體的FPGA器件里面去。MAP將產(chǎn)生一個NCD文件供PAR使用。你可以用任何文本工具打開后綴名為“.mrp”的map報告文件。
PAR:
Place & Route。這個偶就不多說了。免得被磚頭砸到。PAR的報告文件后綴名是“.par”。
TRCE:
這個是用來產(chǎn)生偶們最最關心的timing report的。TRCE會分析你的FPGA的設計并且產(chǎn)生一個后綴名為“.twr”的時序報告。你可以用任何文本工具打開它,也可以用xilinx的Timing Analyzer。Timing Analyzer比較直觀,推薦新手使用。
Bitgen:
顧名思義,這個Bitgen就是用來generate programming file啦。
2. 使用舉例
介紹完Xilinx提供的這些命令后,讓我們來看看如何使用它們吧。Xilinx給我們提供了一個很有用的工具:View Command Line Log File。這個工具位于Process for Source窗口的Design Entry Utitlities下面。
雙擊這個View Command Line Log File,你看到了什么?哈哈,在右邊的文本編輯窗口里面出現(xiàn)了類似于下面的語句:
xst -intstyle ise -ifn __projnav/fpga_a.xst -ofn fpga_a.syr
ngdbuild -intstyle ise -dd d:\projects\hardware\hy_multifpga_nwpci_vhd_new_improvetiming/_ngo -uc ./source/hy/fpga_a.ucf -aul -p xc2v6000-ff1152-4 fpga_a.ngc fpga_a.ngd
map -intstyle ise -p xc2v6000-ff1152-4 -cm area -pr b -k 4 -c 100 -tx off -o fpga_a_map.ncd fpga_a.ngd fpga_a.pcf
par -w -intstyle ise -ol high -t 1 fpga_a_map.ncd fpga_a.ncd fpga_a.pcf
trce -intstyle ise -e 1000 -l 1000 -xml fpga_a fpga_a.ncd -o fpga_a.twr fpga_a.pcf
bitgen -intstyle ise -f fpga_a.ut fpga_a.ncd
對了,上面的這些就是你以前曾經(jīng)使用過的命令啦。其實,我們用ISE作Synthesis,Map,PAR的時候,ISE就會自動調用上面所說的那些command,ISE其實就是一個GUI罷了。:-)
如果雙擊View Command Line Log File時,出現(xiàn)了下面的錯誤提示:
Warning: This process is used to display the running command log file that records some application command lines.
這就說明了你還沒有implement過你的design,或者你已經(jīng)清空過了這個design。(在project目錄下面,有一個cleanup project files按鈕,可以清空)
接下來,就是最后一步啦。你只需要用任何文本編輯器,把上面這段Command的歷史紀錄Copy&Paste,再存為一個”.Bat”批處理文件,在windows的command line下面執(zhí)行就可以了。注意需要把這個.bat文件放在你的項目所在目錄下。
3. 幾點注意
a. 如果要連續(xù)跑好幾個project,建議先使用Cleanup Project Files.根據(jù)偶的經(jīng)驗,如果不進行清空的話,Synthesis和PAR有時會出錯。但是這里會出現(xiàn)一個小問題,清空過后,原有的一些文件可能會被刪除,比如__projnav目錄下面的*.xst(這個時XST的配置文件,做Synthesis的時候,XST會讀這個文件以獲得相關配置),再比如*.prj(project文件,里面羅列了一些被你的設計所使用的module)以及*.ut文件(ut是Bitgen的配置文件)。這3種文件,在使用Command Line之前最好確認一下是否存在。偶一般會將這3種文件作備份,到時候好拿出來,改一改就用。
b. 在Xilinx的安裝目錄Xilinx\doc\usenglish\books\docs下,有關于這些command的pdf文件,如果有需要,可以讀一讀。不過,經(jīng)過偶苦讀一陣之后,偶發(fā)現(xiàn),其實沒有太大必要,有問題再說吧。
4. 總結
其實這個話題也比較簡單,三言兩語也可說清楚,但根據(jù)偶過去慘痛的新手經(jīng)驗,偶相信還是比較詳細地講解一些為好。至少可以讓新手們多了解一些ISE本身。
[討論1]
建議綜合和布局布線一定要用命令行的方式來跑,包括synplify和ISE對此的支持都很好。
幾大好處偶想到的:
1,如果你用的PC工作站,雙CPU,那么可以同時跑兩個任務。
2,便于歸檔,進行版本控制,大項目必須要做的工作。 3,便于重現(xiàn)問題,因為命令行可以保證在原始輸入(源碼、約束)不變的前提下得到只有時間標簽不同的bit文件。
4,便于自定義一些非常規(guī)的操作,比如自動生成一個插入某些測試引腳的bit文件等等。
除了樓主提到的還建議幾點:
1,修改所有目錄路徑為相對路徑,這樣同樣一個目錄復制到別處也不用改命令行。
2,可以直接用ultraedit打開工程目錄下的*.cmd_log文件。
3,那些刪除臨時目錄或者復制網(wǎng)表文件之類的動作可以一起加到命令行中執(zhí)行。總之,修改代碼后,直接運行一個命令行全部搞定!
[討論2]
建議太棒了!小弟獲益匪淺。
偶想再請教幾個問題:
1?!氨阌跉w檔,進行版本控制,大項目必須要做的工作。”
目前我是用ISE的Archive進行版本備份,Archive自動生成一個zip文件,然后備份島服務器。不知道丁丁所說得用command line進行歸檔是怎么回事,可否講解幾句?
2?!氨阌谥噩F(xiàn)問題,因為命令行可以保證在原始輸入(源碼、約束)不變的前提下得到只有時間標簽不同的bit文件”
“時間標簽”是指什么?我不明白這個術語。如果源代碼和約束保持不變的話,唯一可調節(jié)的就是map和PAR的effort了。重現(xiàn)問題是指保存以前的bit文件以備將來使用?
3。“自動生成一個插入某些測試引腳的bit文件等等”
丁丁可否介紹一下這個”插入測試引腳“?
4?!澳敲纯梢酝瑫r跑兩個任務”
我覺得CPU倒不是瓶頸,關鍵是內(nèi)存到時恐怕不夠用。而且win2000 pro好像最多也就支持2G的內(nèi)存吧。
我們還有另外一臺工作站,使用了4個AMD Appro 64-bit processor。但好像兼容性不太好,PAR的時候老是出錯。不知道升級到6.2能不能解決這個問題。
但看另外幾個貼子說6.2有幾個比較嚴重的bug,請問丁丁使用過6。2沒有?值得升級嗎?
多謝!
[討論1]
1,Achieve可以進行版本管理,但是文件太大。一般來說,作版本控制最好是保存所有原始輸入,如果做FPGA,原始輸入包括HDL代碼,綜合工程.prj或者腳本.tcl,綜合約束.sdc,實現(xiàn)約束.ucf,所有core的網(wǎng)表.edn,實現(xiàn)的腳本.bat,再有就是注意綜合工具的版本和實現(xiàn)工具的版本。
如果所有這些都沒有變化,那么可以保證再運行一遍得到完全一樣的結果。這也是版本控制的一個關鍵吧,只要保證可重復性,那么那些結果除了bit你要用到其他也可都不保存。
2,時間標簽就是time stamp,在網(wǎng)表文件和bit文件頭都有,表示這個文件的生成時間記錄,這個不會影響到內(nèi)部的功能。
3,在插入測試引腳這里,可以利用FPGA Editor來操作,直接編輯.ncd文件,再進行bitgen就可以了,那么如果你需要插入很多測試引腳,利用腳本(好像是.scr)可以幫你自動完成,然后只進行bitgen就可以了,避免重新布局布線浪費時間,避免重新布局布線影響timing。當然FPGA Editor還可以做很多修改了,就不多說了。
4,給一個以前的腳本例子:
綜合和實現(xiàn)的命令行:
synplify_pro -batch ../script/chip_syn.tcl
ngdbuild -dd ./_ngo -uc ../script/chip_par.ucf -p xc2s200-fg456-5 .\rev_1\chip.edf chip.ngd
map -p xc2s200-fg456-5 -timing -cm speed -detail -ir -pr b -o chip_map.ncd chip.ngd chip.pcf
par -w -ol med chip_map.ncd chip.ncd chip.pcf
bitgen -w -f ../script/chip_par.ut chip.ncd
copy chip.bit ..\bit\
里面這個chip_par.ut保存了bitgen命令的選項,也可以不用這個文件,都加在命令行里。
后面是chip_syn.tcl:
project -new
#add_file options
add_file -constraint "../script/chip_syn.sdc"
add_file -verilog "../src/src1.v"
add_file -verilog "../src/src2.v"
add_file -verilog "../src/src3.v"
add_file -verilog "../src/src4.v"
add_file -verilog "../src/src5.v"
add_file -verilog "../src/src6.v"
add_file -verilog "../src/src7.v"
add_file -verilog "../src/src8.v"
#device options
set_option -technology SPARTAN2
set_option -part XC2S200
set_option -package FG456
set_option -speed_grade -5
#compilation/mapping options
set_option -default_enum_encoding default
set_option -symbolic_fsm_compiler 0
set_option -resource_sharing 0
set_option -use_fsm_explorer 0
#map options
set_option -frequency 50.000
set_option -fanout_limit 100
set_option -disable_io_insertion 0
set_option -pipe 0
set_option -fixgatedclocks 0
set_option -retiming 0
set_option -modular 0
set_option -update_models_cp 0
set_option -verification_mode 0
#simulation options
set_option -write_verilog 0
set_option -write_vhdl 0
#automatic place and route (vendor) options
set_option -write_apr_constraint 0
#set result format/file last
project -result_file "rev_1/chip.edf"
#implementation attributes
set_option -vlog_std v2001
project -run
只是個人的一點建議,版本控制只要做了就可以,保存archive也要知道這個東東怎么來的,下次可以保證還作出來同樣的東東。保存命令行也要知道所有的軟件版本等。
評論
查看更多