【設(shè)計(jì)經(jīng)驗(yàn)】3、ISE中燒錄QSPI Flash以及配置mcs文件的加載速度與傳輸位寬
一、軟件與硬件平臺(tái)
軟件平臺(tái):
操作系統(tǒng):Windows 7 64-bit
開(kāi)發(fā)套件:ISE14.7
硬件平臺(tái):
FPGA型號(hào):XC6SLX45-CSG324
QSPI Flash型號(hào):W25Q128BV
二、背景介紹
在FPGA開(kāi)發(fā)過(guò)程中,如果我們把bit文件下載到FPGA中,那么當(dāng)FPGA掉電以后,bit文件就丟失,再次上電的時(shí)候,代碼就不會(huì)運(yùn)行了。如果想掉電以后,代碼還可以運(yùn)行,那么必須把編譯好的文件下載到外部的QSPI Flash中。當(dāng)文件下載到外部的QSPI Flash中以后,由于QSPI Flash是一種非易失性存儲(chǔ)器,掉電以后里面的數(shù)據(jù)并不會(huì)丟失,待重新上電以后,F(xiàn)PGA會(huì)自動(dòng)讀取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線(xiàn)模式(前提是你的硬件必須支持四線(xiàn)模式),并修改加載的時(shí)鐘頻率,從而大大加快FPGA的啟動(dòng)速度。
三、目標(biāo)任務(wù)
1、把編譯好的bit文件轉(zhuǎn)化為.bin文件
2、把編譯好的bit文件轉(zhuǎn)化為.mcs文件
3、把.bin文件或者.mcs文件燒錄到外部的QSPI Flash中
4、修改.bit文件的模式以及支持的時(shí)鐘頻率
四、待測(cè)代碼
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 ; ////////////////////////////////////////////////////////////////// // 功能:對(duì)輸出寄存器進(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
寫(xiě)好待測(cè)代碼,并添加物理約束文件綁定好管腳,我的開(kāi)發(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、編寫(xiě)好代碼和約束文件,雙擊Generate Programming File成bit

2、如果上一步你沒(méi)做任何設(shè)置的話(huà)你的工程目錄下只會(huì)產(chǎn)生一個(gè)bit文件,如果需要產(chǎn)生bin文件的話(huà),選中Generate Programming File,右鍵選擇Process Properties...

3、在彈出的窗口中單擊General Options,并勾選-g Binary選項(xiàng),并點(diǎn)擊最下面的OK

4、Generate Programming File前面變成了“問(wèn)號(hào)”圖標(biāo)

5、重新雙擊Generate Programming File,完畢以后工程目錄就生成了.bin文件

在ISE不支持bin文件下載到QSPI Flash,但是Vivado支持,后續(xù)會(huì)有Vivado調(diào)試教程以及燒錄教程。
二、把.bit文件轉(zhuǎn)化為.mcs文件。
1、編寫(xiě)好代碼和約束文件,雙擊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型號(hào)是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)擊右下角的“打開(kāi)”

11、在彈出的新窗口中選擇NO

12、在彈出的新窗口中選擇OK

13、雙擊左側(cè)的Generate File...,生成.mcs文件

14、生成完畢以后會(huì)出現(xiàn)Generate Succeeded字樣

15、工程目錄下出現(xiàn)了.mcs文件

16、雙擊Boundary Scan

17、點(diǎn)擊Initialize Chain圖標(biāo)(這一步一定要保證開(kāi)發(fā)板處于上電狀態(tài)并且Jtag線(xiàn)連接正常)

18、在彈出的窗口中選擇NO(因?yàn)槲覀凂R上要把.mcs燒錄到Flash中,而不是下載.bit文件,所以選擇NO)

19、在新彈出的窗口中選擇OK

20、雙擊FPGA上面的那個(gè)虛線(xiàn)框包裹起來(lái)的圖標(biāo)

21、在彈出的文件選擇窗口中選擇之前生成好的.mcs文件,并點(diǎn)擊打開(kāi)

22、接著在彈出的新窗口中選擇芯片型號(hào)為W25Q128BV,Data Width為1,點(diǎn)擊OK

23、選中FPGA上面的FLASH圖標(biāo),右鍵在彈出的菜單中單擊Program

24、在彈出的新窗口中選擇OK

25、接著就進(jìn)入了燒錄QSPI Flash的過(guò)程,這個(gè)過(guò)程與下載.bit相比要慢的多,需要耐心等待

26、下載成功以后出現(xiàn)Successful字樣

27、接著關(guān)掉開(kāi)發(fā)板的電源然后再打開(kāi),等一小段時(shí)間以后,程序就開(kāi)始自動(dòng)運(yùn)行了。
三、修改bit文件的配置,加快FPGA加載速度
可以發(fā)現(xiàn),產(chǎn)生的.mcs文件只有3.89M,但是重新上電到程序開(kāi)始執(zhí)行卻花費(fèi)了好幾秒的時(shí)間,如果工程十分龐大,則FPGA選型的時(shí)候勢(shì)必會(huì)選擇邏輯資源更多的FPGA,那么編譯后產(chǎn)生的.mcs文件會(huì)大的多,上電后加載的時(shí)間也會(huì)更長(zhǎng),所以在實(shí)際項(xiàng)目中,往往會(huì)修改bit文件的配置參數(shù)來(lái)加快上電以后代碼的加載速度。具體步驟如下

1、編寫(xiě)好代碼和約束文件,雙擊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這個(gè)參數(shù)的值不能超過(guò)你使用的QSPI Flash芯片手冊(cè)中指定的最高的讀頻率,大多數(shù)QSPI Flash的芯片手冊(cè)會(huì)在第一頁(yè)說(shuō)它們支持的頻率高達(dá)100M甚至更高,但是其實(shí)這個(gè)頻率并不是指芯片支持的讀數(shù)據(jù)頻率,F(xiàn)lash芯片支持的讀數(shù)據(jù)頻率一定要在芯片手冊(cè)電氣特性(Electrical Characteristics)那一節(jié)找。如果你選擇的時(shí)鐘頻率超過(guò)QSPI Flash支持的最高讀取頻率太多,出現(xiàn)的現(xiàn)象就是FPGA根本無(wú)法加載QSPI Flash中的鏡像文件導(dǎo)致FPGA啟動(dòng)失敗;如果你選擇的時(shí)鐘頻率超過(guò)QSPI Flash支持的最高讀取頻率一點(diǎn)點(diǎn)的話(huà),出現(xiàn)的現(xiàn)象就是FPGA加載QSPI Flash中的鏡像文件大概率失敗。所以一般選擇的Configuration Rate參數(shù)值要稍微低于QSPI Flash支持的最高讀頻率。
舉三個(gè)例子:
Micron公司的N25Q064A支持的最高頻率為108MHz,但支持的讀命令頻率為54MHz,對(duì)于這個(gè)器件來(lái)說(shuō)Configuration Rate不能選的高于54MHz
Macronix公司的MX25L25645G支持的最高頻率為133MHz,但支持的讀命令頻率為50MHz,對(duì)于這個(gè)器件來(lái)說(shuō)Configuration Rate不能選的高于50MHz
本文使用的Winbond公司的W25Q128BV支持的最高頻率為104MHz,但支持的讀命令頻率為33MHz,對(duì)于這個(gè)器件來(lái)說(shuō)Configuration Rate不能選的高于33MHz,我們選擇為26MHz
另外要說(shuō)明的是Configuration Rate這個(gè)值對(duì)于不同的FPGA來(lái)說(shuō),值的范圍不同。我當(dāng)前使用的XC6SLX45支持的最高頻率僅為26MHz,而XC7K325T支持的最高頻率高達(dá)66MHz。
還有一點(diǎn)要注意的是,Set SPI Configuration Bus Width可以設(shè)置為4的前提是你的開(kāi)發(fā)板上QSPI Flash和FPGA之間四根數(shù)據(jù)線(xiàn)都是連通的,并且PCB上建議做好四根數(shù)據(jù)線(xiàn)的蛇形等長(zhǎng)。
4、接著重新生成.bit文件,然后把.bit文件按照上文的方法生成.mcs文件下載到QSPI Flash中,這個(gè)過(guò)程不在重復(fù)。
5、燒錄完畢以后,重新給開(kāi)發(fā)板斷電然后再上電,你會(huì)發(fā)現(xiàn)上電的瞬間,程序就開(kāi)始運(yùn)行了,幾乎感覺(jué)不到等待的時(shí)間。由于XC6SLX45這個(gè)器件的資源相較于7系列FPGA來(lái)說(shuō)邏輯資源并不算多,生成的mcs文件并不算大,所以才這么快,而對(duì)于高端一點(diǎn)的FPGA來(lái)說(shuō),F(xiàn)PGA編譯后的鏡像文件能達(dá)到十幾兆甚至更大,比如XC7K325t生成的鏡像文件約為10M左右,所以即使你這么設(shè)置了還是有一點(diǎn)延時(shí)的,不過(guò)比單線(xiàn)肯定是要快的多。注意,生成的FPGA鏡像文件大小與FPGA型號(hào)有關(guān),與邏輯代碼的多少無(wú)關(guān),在同一塊FPGA中,你寫(xiě)一個(gè)流水燈的代碼和調(diào)用了幾個(gè)FFT,F(xiàn)IR數(shù)字濾波器IP核的信號(hào)處理代碼生成的FPGA鏡像文件的大小是相同的。
至此,整個(gè)實(shí)驗(yàn)過(guò)程全部完畢。
六、總結(jié)
1、在生成bit文件的設(shè)置中勾選-g Binary選項(xiàng)可以生成bin文件
2、在生成mcs文件之間提前對(duì)bit進(jìn)行速率與位寬的設(shè)置可以提高FPGA從Flash加載程序的速度
3、設(shè)置Configuration Rate參數(shù)之前一定要閱讀QPSI Flash芯片手冊(cè)的電氣特性(Electrical Characteristics)一節(jié),找到支持的最高頻率。

浙公網(wǎng)安備 33010602011771號(hào)