一、軟件與硬件平臺
軟件平臺:
操作系統(tǒng):Windows 7 64-bit
開發(fā)套件:ISE14.7
硬件平臺:
FPGA型號:XC6SLX45-CSG324
QSPI Flash型號:W25Q128BV
二、背景介紹
在FPGA開發(fā)過程中,如果我們把bit文件下載到FPGA中,那么當FPGA掉電以后,bit文件就丟失,再次上電的時候,代碼就不會運行了。如果想掉電以后,代碼還可以運行,那么必須把編譯好的文件下載到外部的QSPI Flash中。當文件下載到外部的QSPI Flash中以后,由于QSPI Flash是一種非易失性存儲器,掉電以后里面的數(shù)據(jù)并不會丟失,待重新上電以后,F(xiàn)PGA會自動讀取QSPI Flash中的數(shù)據(jù)把代碼加載到FPGA內(nèi)部的RAM中運行。
由于bit不能直接下載到QSPI Flash中,所以必須先把bit文件轉化為.mcs文件或者.bin文件,然后才能下載到QSPI Flash中。
本文主要教大家如何把bit文件轉化為.bin文件和.mcs文件,然后下載到外部的QSPI Flash中。同時為了加快上電以后FPGA加載QSPI Flash中mcs文件的速度,我們可以把bit文件配置為4線模式(前提是你的硬件必須支持四線模式),并修改加載的時鐘頻率,從而大大加快FPGA的啟動速度。
三、目標任務
1、把編譯好的bit文件轉化為.bin文件
2、把編譯好的bit文件轉化為.mcs文件
3、把.bin文件或者.mcs文件燒錄到外部的QSPI Flash中
4、修改.bit文件的模式以及支持的時鐘頻率
四、待測代碼
module led_top ( input I_clk , input I_rst_n , output [3:0] O_led_out ); reg [31:0] R_cnt_ls ; wire W_clk_ls ; reg R_clk_ls_reg ; reg [3:0] R_led_out_reg ; ////////////////////////////////////////////////////////////////// // 功能:產(chǎn)生1s的時鐘 ////////////////////////////////////////////////////////////////// always @(posedge I_clk or negedge I_rst_n) begin if(!I_rst_n) begin R_cnt_ls <= 32'd0 ; R_clk_ls_reg <= 1'b1 ; end else if(R_cnt_ls == 32'd24_999_999) begin R_cnt_ls <= 32'd0 ; R_clk_ls_reg <= ~R_clk_ls_reg ; end else R_cnt_ls <= R_cnt_ls + 1'b1 ; end assign W_clk_ls = R_clk_ls_reg ; ////////////////////////////////////////////////////////////////// // 功能:對輸出寄存器進行移位產(chǎn)生流水效果 ////////////////////////////////////////////////////////////////// always @(posedge W_clk_ls or negedge I_rst_n) begin if(!I_rst_n) R_led_out_reg <= 4'b0001 ; else if(R_led_out_reg == 4'b1000) R_led_out_reg <= 4'b0001 ; else R_led_out_reg <= R_led_out_reg << 1 ; end assign O_led_out = ~R_led_out_reg ; endmodule
寫好待測代碼,并添加物理約束文件綁定好管腳,我的開發(fā)板上的約束文件如下
NET I_clk LOC = V10 | TNM_NET = sys_clk_pin | IOSTANDARD = "LVCMOS33"; TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz; NET I_rst_n LOC = N4 | IOSTANDARD = "LVCMOS15"; ## SW2 pushbutton NET O_led_out<0> LOC = V5 | IOSTANDARD = "LVCMOS33"; ## LED1 NET O_led_out<1> LOC = R3 | IOSTANDARD = "LVCMOS33"; ## LED2 NET O_led_out<2> LOC = T3 | IOSTANDARD = "LVCMOS33"; ## LED3 NET O_led_out<3> LOC = T4 | IOSTANDARD = "LVCMOS33"; ## LED4
五、任務
一、把.bit文件轉化為.bin文件。
1、編寫好代碼和約束文件,雙擊Generate Programming File成bit
2、如果上一步你沒做任何設置的話你的工程目錄下只會產(chǎn)生一個bit文件,如果需要產(chǎn)生bin文件的話,選中Generate Programming File,右鍵選擇Process Properties...
3、在彈出的窗口中單擊General Options,并勾選-g Binary選項,并點擊最下面的OK
4、Generate Programming File前面變成了“問號”圖標
5、重新雙擊Generate Programming File,完畢以后工程目錄就生成了.bin文件
在ISE不支持bin文件下載到QSPI Flash,但是Vivado支持,后續(xù)會有Vivado調(diào)試教程以及燒錄教程。
二、把.bit文件轉化為.mcs文件。
1、編寫好代碼和約束文件,雙擊Generate Programming File成.bit文件
2、雙擊Configure Target Device
3、在彈出的窗口中點擊OK
4、在彈出的ISE iMPACT中雙擊Create PROM File(PROM File Formatter)
5、在彈出的PROM File Formatter窗口中選擇Configure Signal FPGA,并點擊右邊綠色的箭頭進入Step 2
6、然后選擇Storage Device(bits)為外部QSPI Flash的容量,我的QSPI Flash型號是W25Q128BV,容量為128Mbits,所以我選擇128M。接著點擊的Add Storage Device,然后點擊綠色的箭頭進入Step 3
7、點擊上圖中的Add Storage Device,然后點擊下圖的箭頭進入Step3
8、設置Output File Name為.mcs文件的名字,我設置為和.bit文件的名字相同(這一項可以隨便設置)。設置Output File Location為.bit文件所在的目錄(這一項也可以隨便設置),F(xiàn)ile Format設置為MCS。
9、點擊上圖中最下面的OK,彈出以下窗口
10、在上圖中直接點擊OK,在彈出的新窗口中選擇要轉化的.bit文件并點擊右下角的“打開”
11、在彈出的新窗口中選擇NO
12、在彈出的新窗口中選擇OK
13、雙擊左側的Generate File...,生成.mcs文件
14、生成完畢以后會出現(xiàn)Generate Succeeded字樣
15、工程目錄下出現(xiàn)了.mcs文件
16、雙擊Boundary Scan
17、點擊Initialize Chain圖標(這一步一定要保證開發(fā)板處于上電狀態(tài)并且Jtag線連接正常)
18、在彈出的窗口中選擇NO(因為我們馬上要把.mcs燒錄到Flash中,而不是下載.bit文件,所以選擇NO)
19、在新彈出的窗口中選擇OK
20、雙擊FPGA上面的那個虛線框包裹起來的圖標
21、在彈出的文件選擇窗口中選擇之前生成好的.mcs文件,并點擊打開
22、接著在彈出的新窗口中選擇芯片型號為W25Q128BV,Data Width為1,點擊OK
23、選中FPGA上面的FLASH圖標,右鍵在彈出的菜單中單擊Program
24、在彈出的新窗口中選擇OK
25、接著就進入了燒錄QSPI Flash的過程,這個過程與下載.bit相比要慢的多,需要耐心等待
26、下載成功以后出現(xiàn)Successful字樣
27、接著關掉開發(fā)板的電源然后再打開,等一小段時間以后,程序就開始自動運行了。
三、修改bit文件的配置,加快FPGA加載速度
可以發(fā)現(xiàn),產(chǎn)生的.mcs文件只有3.89M,但是重新上電到程序開始執(zhí)行卻花費了好幾秒的時間,如果工程十分龐大,則FPGA選型的時候勢必會選擇邏輯資源更多的FPGA,那么編譯后產(chǎn)生的.mcs文件會大的多,上電后加載的時間也會更長,所以在實際項目中,往往會修改bit文件的配置參數(shù)來加快上電以后代碼的加載速度。具體步驟如下
1、編寫好代碼和約束文件,雙擊Generate Programming File成bit
2、選中Generate Programming File,右鍵選擇Process Properties...
3、在彈出的窗口中單擊Configuration Options,并設置Configuration Rate為26MHz,設置Set SPI Configuration Bus Width參數(shù)為4。并點擊最下面的OK
注意:Configuration Rate這個參數(shù)的值不能超過你使用的QSPI Flash芯片手冊中指定的最高的讀頻率,大多數(shù)QSPI Flash的芯片手冊會在第一頁說它們支持的頻率高達100M甚至更高,但是其實這個頻率并不是指芯片支持的讀數(shù)據(jù)頻率,F(xiàn)lash芯片支持的讀數(shù)據(jù)頻率一定要在芯片手冊電氣特性(Electrical Characteristics)那一節(jié)找。如果你選擇的時鐘頻率超過QSPI Flash支持的最高讀取頻率太多,出現(xiàn)的現(xiàn)象就是FPGA根本無法加載QSPI Flash中的鏡像文件導致FPGA啟動失敗;如果你選擇的時鐘頻率超過QSPI Flash支持的最高讀取頻率一點點的話,出現(xiàn)的現(xiàn)象就是FPGA加載QSPI Flash中的鏡像文件大概率失敗。所以一般選擇的Configuration Rate參數(shù)值要稍微低于QSPI Flash支持的最高讀頻率。
舉三個例子:
Micron公司的N25Q064A支持的最高頻率為108MHz,但支持的讀命令頻率為54MHz,對于這個器件來說Configuration Rate不能選的高于54MHz
Macronix公司的MX25L25645G支持的最高頻率為133MHz,但支持的讀命令頻率為50MHz,對于這個器件來說Configuration Rate不能選的高于50MHz
本文使用的Winbond公司的W25Q128BV支持的最高頻率為104MHz,但支持的讀命令頻率為33MHz,對于這個器件來說Configuration Rate不能選的高于33MHz,我們選擇為26MHz
另外要說明的是Configuration Rate這個值對于不同的FPGA來說,值的范圍不同。我當前使用的XC6SLX45支持的最高頻率僅為26MHz,而XC7K325T支持的最高頻率高達66MHz。
還有一點要注意的是,Set SPI Configuration Bus Width可以設置為4的前提是你的開發(fā)板上QSPI Flash和FPGA之間四根數(shù)據(jù)線都是連通的,并且PCB上建議做好四根數(shù)據(jù)線的蛇形等長。
4、接著重新生成.bit文件,然后把.bit文件按照上文的方法生成.mcs文件下載到QSPI Flash中,這個過程不在重復。
5、燒錄完畢以后,重新給開發(fā)板斷電然后再上電,你會發(fā)現(xiàn)上電的瞬間,程序就開始運行了,幾乎感覺不到等待的時間。由于XC6SLX45這個器件的資源相較于7系列FPGA來說邏輯資源并不算多,生成的mcs文件并不算大,所以才這么快,而對于高端一點的FPGA來說,F(xiàn)PGA編譯后的鏡像文件能達到十幾兆甚至更大,比如XC7K325t生成的鏡像文件約為10M左右,所以即使你這么設置了還是有一點延時的,不過比單線肯定是要快的多。注意,生成的FPGA鏡像文件大小與FPGA型號有關,與邏輯代碼的多少無關,在同一塊FPGA中,你寫一個流水燈的代碼和調(diào)用了幾個FFT,F(xiàn)IR數(shù)字濾波器IP核的信號處理代碼生成的FPGA鏡像文件的大小是相同的。
至此,整個實驗過程全部完畢。
六、總結
1、在生成bit文件的設置中勾選-g Binary選項可以生成bin文件
2、在生成mcs文件之間提前對bit進行速率與位寬的設置可以提高FPGA從Flash加載程序的速度
3、設置Configuration Rate參數(shù)之前一定要閱讀QPSI Flash芯片手冊的電氣特性(Electrical Characteristics)一節(jié),找到支持的最高頻率。
審核編輯 :李倩
-
FPGA
+關注
關注
1643文章
21950瀏覽量
613753 -
代碼
+關注
關注
30文章
4886瀏覽量
70217 -
編譯
+關注
關注
0文章
676瀏覽量
33724
原文標題:一、軟件與硬件平臺
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
單片機無法控制單總線器件,懷疑器件問題?
第一個arm9的應用程序helloworld需要掌握哪些內(nèi)容?
嵌入式開發(fā)中的宿主機和目標機有哪些不同之處
如何安裝arm-linux-gcc
建立一個開放的軟件和硬件平臺
Openwsn開源無線協(xié)議在PLUS-F5270開發(fā)板上的移植步驟簡析
迷你尺寸開源硬件開發(fā)板Banana Pi BPI-M7 采用瑞芯微RK3588芯片設計
Banana Pi BPI-M7 迷你尺寸開源硬件開發(fā)板采用瑞芯微RK3588芯片設計
打翻身仗,AMD在VR方面推眾多項目建立VR供應鏈
基于RFID技術的物聯(lián)網(wǎng)車載終端如何設計

基于Moxa UC系列應用的嵌入式系統(tǒng)解決方案
USB3.0開發(fā)之bulkLoop上位機程序

全志T113-S3板載Linux系統(tǒng)信息查詢

評論