一、軟件與硬件平臺
軟件平臺:
操作系統(tǒng):Windows 7 64-bit
開發(fā)套件:ISE14.7
硬件平臺:
FPGA型號:XC6SLX45-CSG324
QSPI Flash型號:W25Q128BV
二、背景介紹
在FPGA開發(fā)過程中,如果我們把bit文件下載到FPGA中,那么當(dāng)FPGA掉電以后,bit文件就丟失,再次上電的時(shí)候,代碼就不會運(yùn)行了。如果想掉電以后,代碼還可以運(yùn)行,那么必須把編譯好的文件下載到外部的QSPI Flash中。當(dāng)文件下載到外部的QSPI Flash中以后,由于QSPI Flash是一種非易失性存儲器,掉電以后里面的數(shù)據(jù)并不會丟失,待重新上電以后,F(xiàn)PGA會自動讀取QSPI Flash中的數(shù)據(jù)把代碼加載到FPGA內(nèi)部的RAM中運(yùn)行。
由于bit不能直接下載到QSPI Flash中,所以必須先把bit文件轉(zhuǎn)化為.mcs文件或者.bin文件,然后才能下載到QSPI Flash中。
本文主要教大家如何把bit文件轉(zhuǎn)化為.bin文件和.mcs文件,然后下載到外部的QSPI Flash中。同時(shí)為了加快上電以后FPGA加載QSPI Flash中mcs文件的速度,我們可以把bit文件配置為4線模式(前提是你的硬件必須支持四線模式),并修改加載的時(shí)鐘頻率,從而大大加快FPGA的啟動速度。
三、目標(biāo)任務(wù)
1、把編譯好的bit文件轉(zhuǎn)化為.bin文件
2、把編譯好的bit文件轉(zhuǎn)化為.mcs文件
3、把.bin文件或者.mcs文件燒錄到外部的QSPI Flash中
4、修改.bit文件的模式以及支持的時(shí)鐘頻率
四、待測代碼
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的時(shí)鐘 ////////////////////////////////////////////////////////////////// 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 ; ////////////////////////////////////////////////////////////////// // 功能:對輸出寄存器進(jìn)行移位產(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
五、任務(wù)
一、把.bit文件轉(zhuǎn)化為.bin文件。
1、編寫好代碼和約束文件,雙擊Generate Programming File成bit
2、如果上一步你沒做任何設(shè)置的話你的工程目錄下只會產(chǎn)生一個bit文件,如果需要產(chǎn)生bin文件的話,選中Generate Programming File,右鍵選擇Process Properties...
3、在彈出的窗口中單擊General Options,并勾選-g Binary選項(xiàng),并點(diǎn)擊最下面的OK
4、Generate Programming File前面變成了“問號”圖標(biāo)
5、重新雙擊Generate Programming File,完畢以后工程目錄就生成了.bin文件
在ISE不支持bin文件下載到QSPI Flash,但是Vivado支持,后續(xù)會有Vivado調(diào)試教程以及燒錄教程。
二、把.bit文件轉(zhuǎn)化為.mcs文件。
1、編寫好代碼和約束文件,雙擊Generate Programming File成.bit文件
2、雙擊Configure Target Device
3、在彈出的窗口中點(diǎn)擊OK
4、在彈出的ISE iMPACT中雙擊Create PROM File(PROM File Formatter)
5、在彈出的PROM File Formatter窗口中選擇Configure Signal FPGA,并點(diǎn)擊右邊綠色的箭頭進(jìn)入Step 2
6、然后選擇Storage Device(bits)為外部QSPI Flash的容量,我的QSPI Flash型號是W25Q128BV,容量為128Mbits,所以我選擇128M。接著點(diǎn)擊的Add Storage Device,然后點(diǎn)擊綠色的箭頭進(jìn)入Step 3
7、點(diǎn)擊上圖中的Add Storage Device,然后點(diǎn)擊下圖的箭頭進(jìn)入Step3
8、設(shè)置Output File Name為.mcs文件的名字,我設(shè)置為和.bit文件的名字相同(這一項(xiàng)可以隨便設(shè)置)。設(shè)置Output File Location為.bit文件所在的目錄(這一項(xiàng)也可以隨便設(shè)置),F(xiàn)ile Format設(shè)置為MCS。
9、點(diǎn)擊上圖中最下面的OK,彈出以下窗口
10、在上圖中直接點(diǎn)擊OK,在彈出的新窗口中選擇要轉(zhuǎn)化的.bit文件并點(diǎn)擊右下角的“打開”
11、在彈出的新窗口中選擇NO
12、在彈出的新窗口中選擇OK
13、雙擊左側(cè)的Generate File...,生成.mcs文件
14、生成完畢以后會出現(xiàn)Generate Succeeded字樣
15、工程目錄下出現(xiàn)了.mcs文件
16、雙擊Boundary Scan
17、點(diǎn)擊Initialize Chain圖標(biāo)(這一步一定要保證開發(fā)板處于上電狀態(tài)并且Jtag線連接正常)
18、在彈出的窗口中選擇NO(因?yàn)槲覀凂R上要把.mcs燒錄到Flash中,而不是下載.bit文件,所以選擇NO)
19、在新彈出的窗口中選擇OK
20、雙擊FPGA上面的那個虛線框包裹起來的圖標(biāo)
21、在彈出的文件選擇窗口中選擇之前生成好的.mcs文件,并點(diǎn)擊打開
22、接著在彈出的新窗口中選擇芯片型號為W25Q128BV,Data Width為1,點(diǎn)擊OK
23、選中FPGA上面的FLASH圖標(biāo),右鍵在彈出的菜單中單擊Program
24、在彈出的新窗口中選擇OK
25、接著就進(jìn)入了燒錄QSPI Flash的過程,這個過程與下載.bit相比要慢的多,需要耐心等待
26、下載成功以后出現(xiàn)Successful字樣
27、接著關(guān)掉開發(fā)板的電源然后再打開,等一小段時(shí)間以后,程序就開始自動運(yùn)行了。
三、修改bit文件的配置,加快FPGA加載速度
可以發(fā)現(xiàn),產(chǎn)生的.mcs文件只有3.89M,但是重新上電到程序開始執(zhí)行卻花費(fèi)了好幾秒的時(shí)間,如果工程十分龐大,則FPGA選型的時(shí)候勢必會選擇邏輯資源更多的FPGA,那么編譯后產(chǎn)生的.mcs文件會大的多,上電后加載的時(shí)間也會更長,所以在實(shí)際項(xiàng)目中,往往會修改bit文件的配置參數(shù)來加快上電以后代碼的加載速度。具體步驟如下
1、編寫好代碼和約束文件,雙擊Generate Programming File成bit
2、選中Generate Programming File,右鍵選擇Process Properties...
3、在彈出的窗口中單擊Configuration Options,并設(shè)置Configuration Rate為26MHz,設(shè)置Set SPI Configuration Bus Width參數(shù)為4。并點(diǎn)擊最下面的OK
注意:Configuration Rate這個參數(shù)的值不能超過你使用的QSPI Flash芯片手冊中指定的最高的讀頻率,大多數(shù)QSPI Flash的芯片手冊會在第一頁說它們支持的頻率高達(dá)100M甚至更高,但是其實(shí)這個頻率并不是指芯片支持的讀數(shù)據(jù)頻率,F(xiàn)lash芯片支持的讀數(shù)據(jù)頻率一定要在芯片手冊電氣特性(Electrical Characteristics)那一節(jié)找。如果你選擇的時(shí)鐘頻率超過QSPI Flash支持的最高讀取頻率太多,出現(xiàn)的現(xiàn)象就是FPGA根本無法加載QSPI Flash中的鏡像文件導(dǎo)致FPGA啟動失敗;如果你選擇的時(shí)鐘頻率超過QSPI Flash支持的最高讀取頻率一點(diǎn)點(diǎn)的話,出現(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來說,值的范圍不同。我當(dāng)前使用的XC6SLX45支持的最高頻率僅為26MHz,而XC7K325T支持的最高頻率高達(dá)66MHz。
還有一點(diǎn)要注意的是,Set SPI Configuration Bus Width可以設(shè)置為4的前提是你的開發(fā)板上QSPI Flash和FPGA之間四根數(shù)據(jù)線都是連通的,并且PCB上建議做好四根數(shù)據(jù)線的蛇形等長。
4、接著重新生成.bit文件,然后把.bit文件按照上文的方法生成.mcs文件下載到QSPI Flash中,這個過程不在重復(fù)。
5、燒錄完畢以后,重新給開發(fā)板斷電然后再上電,你會發(fā)現(xiàn)上電的瞬間,程序就開始運(yùn)行了,幾乎感覺不到等待的時(shí)間。由于XC6SLX45這個器件的資源相較于7系列FPGA來說邏輯資源并不算多,生成的mcs文件并不算大,所以才這么快,而對于高端一點(diǎn)的FPGA來說,F(xiàn)PGA編譯后的鏡像文件能達(dá)到十幾兆甚至更大,比如XC7K325t生成的鏡像文件約為10M左右,所以即使你這么設(shè)置了還是有一點(diǎn)延時(shí)的,不過比單線肯定是要快的多。注意,生成的FPGA鏡像文件大小與FPGA型號有關(guān),與邏輯代碼的多少無關(guān),在同一塊FPGA中,你寫一個流水燈的代碼和調(diào)用了幾個FFT,F(xiàn)IR數(shù)字濾波器IP核的信號處理代碼生成的FPGA鏡像文件的大小是相同的。
至此,整個實(shí)驗(yàn)過程全部完畢。
六、總結(jié)
1、在生成bit文件的設(shè)置中勾選-g Binary選項(xiàng)可以生成bin文件
2、在生成mcs文件之間提前對bit進(jìn)行速率與位寬的設(shè)置可以提高FPGA從Flash加載程序的速度
3、設(shè)置Configuration Rate參數(shù)之前一定要閱讀QPSI Flash芯片手冊的電氣特性(Electrical Characteristics)一節(jié),找到支持的最高頻率。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1629文章
21754瀏覽量
604203 -
代碼
+關(guān)注
關(guān)注
30文章
4799瀏覽量
68728 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32900
原文標(biāo)題:一、軟件與硬件平臺
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論