在進(jìn)行第一個工程實例前,順便提一下設(shè)計工具相關(guān)資源的獲取。從特權(quán)同學(xué)接觸的幾家FPGA開發(fā)工具來看,Xilinx在這方面做得應(yīng)該算是最人性化的了,其設(shè)計資源可謂唾手可得。如圖1所示,當(dāng)我們開啟ISE軟件后,主窗口便會顯示這樣一個帶有介紹和引導(dǎo)鏈接的頁面。這里我們主要提一下它的Documentation。

圖1 ISE設(shè)計資源引導(dǎo)界面????????
點開Documentation,如圖2所示,其實是直接打開了Xilinx的一個客戶端小工具Documentation Navigat
or(簡稱DocNav)的
下載頁面。這是一款不錯的Xilinx設(shè)計文檔在線瀏覽工具,非常
推薦各位下載并安裝。

圖2 Documentation頁面????????
如圖3所示,打開DocNav軟件的首頁,可以看到各類開發(fā)相關(guān)的歸類文檔,這個小工具讓Xilinx的各類文檔一目了然,極大的方便了設(shè)計者對文檔資源的索取和閱讀。這么大的一個文檔資源庫,恐怕花個一年半載的都未必能夠通讀一遍,實際上壓根個也沒有這個必要。一般來說,建議設(shè)計者對這些文檔的基本用處有所了解即可,而在遇到一些設(shè)計小問題的時候腦子里能夠靈光一現(xiàn),想起來大概哪個文檔里會有解決問題的辦法,而后再過來翻看也就足夠了。?圖3 D

ocNav首頁????????
再說每個軟件都有Help,ISE中點開菜單欄的HelpàHelp To
pics…,便如圖4所示。記得特權(quán)同學(xué)大三那年一個被認(rèn)為牛的不行的留過洋的
微波課老師第一次和我們提Project,還讓我們用
Matlab畫smith圓圖,那時對專業(yè)英文一知半解的我們才發(fā)現(xiàn)原來Help里面要啥有啥,真可謂大百科全書。所以捏,同學(xué)們都要好好利用Help這玩意,不懂就問,最簡單快捷的問法就是Search。

圖4 ISE Help頁面好了,那么下面我們要簡單的做個ISE工程的范例,寫個流水燈的小代碼下載到FPGA中看看效果。雙擊打開桌面的快捷方式“Xilinx ISE Design Sui
te 13.3”,點擊菜單欄的FileàNew Project…。出現(xiàn)如圖5所示的新工程設(shè)置界面,輸入工程名并定位好工程存儲文件夾位置,完成后點擊Next進(jìn)入下一步。

圖5 工程名與存儲設(shè)置????????
器件與工程屬性設(shè)置如圖6所示。設(shè)置完畢再Next便Finish。

圖6 器件與工程屬性設(shè)置????????
此時我們看工具左側(cè)窗口,選中Design便如圖7所示。Hierarchy下只有工程名和相應(yīng)器件顯示,可謂設(shè)計文件一片空白,咱要來此拓荒了。首先,我們需要添加源代碼文件到工程中。

圖7 Design窗口????????
在Hierarchy窗口的空白處右鍵點擊New Source…,如圖8所示。這里可以選擇新建各類源文件,包括IP核、基于
處理器的系統(tǒng)、
verilog或VHDL源文件以及測試腳本等等。我們需要新建一個verilog源代碼文件,所以選擇Verilog Module,給模塊命名,通常頂層代碼源文件名建議和工程名一致,免得后面一串麻煩事。

圖8 新建源文件???
新建的源代碼.v文件會自動添加到Hierarchy下,并且直接在主窗口中打開源文件如圖9所示。

圖9 源代碼文件???????
? 此時需要編寫一段流水燈測試代碼,如下所示:module test1
led(??????????? clk,
rst_n,??????????? led??????? );?input clk;????? //100MHzinput rst_n;??? //低電平復(fù)位
信號?output[7:0] led;??? //分頻信號,連接到蜂鳴器?//---------------------------------------------------reg[2:0] cnt;?? //分頻計數(shù)器?always @ (posedge clk or negedge rst_n)//異步復(fù)位??? if(!rst_n) cnt <= 23'd0;??? else cnt <= cnt+1'b1;?? //寄存器cnt循環(huán)計數(shù)?//----------------------------------------------------reg[7:0] ledr;? //LED流水燈?always @ (posedge clk or negedge rst_n)??? if(!rst_n) ledr <= 8'd1;??? else if(cnt == 23'h7fffff) ledr <= {ledr[6:0],ledr[7]};//大約每80ms讓led左移一次?assign led = ledr;?endmodule???????? 接下來需要對管腳進(jìn)行分配,如圖10所示,Hierarchy中需要先選中頂層代碼文件testled.v,然后雙擊Processes下的User ConstraintsàI/O Pin Planning(PlanAhead) – Post-synthesis(或者I/O Pin Planning(PlanAhead) – Pre-synthesis,兩者的區(qū)別在于在分配管腳時是否synthesis了,一般是無關(guān)緊要的)。

Xilinx的工具做得真是獨具匠心啊,打開PlanAhead后的歡迎界面不得不讓我們發(fā)出“設(shè)計文檔無處不在”的感慨。如果想深入了解PlanAhead工具,不妨好好拜讀下這里羅列的PlanAhead User Guide。

圖11 PlanAhead的歡迎界面????????
如圖12所示,參照原理圖NEXYS3_sch.pdf,在PlanAhead的I/O Ports中對該實例的管腳進(jìn)行分配。其中rst_n使用了撥碼開關(guān)SW1,板級驗證的時候注意將SW1朝板子內(nèi)側(cè)撥動即處于正常運行狀態(tài)。分配完成后保存設(shè)置即可退出PlanAhead。

圖12 管腳分配????????
回到ISE中,雙擊圖10的Processes下Generate Prog
ramming File進(jìn)行編譯生成.bit下載文件。然后使用上節(jié)提到的Adept工具,在Config功能項中加載并燒錄工程文件夾下生成的test1led.bit文件。接著,我們就可以看到在線燒錄到FPGA器件中的代碼運行起來了,SW1撥碼開關(guān)處于內(nèi)側(cè)時,8個流水燈跑的很歡。轉(zhuǎn)載自:特權(quán)同學(xué)的博客
評論