【設計經驗】3、ISE中燒錄QSPI Flash以及配置mcs文件的加載速度與傳輸位寬


一、軟件與硬件平台

       軟件平台:

              操作系統:Windows 7 64-bit

              開發套件:ISE14.7

       硬件平台:

              FPGA型號:XC6SLX45-CSG324

              QSPI Flash型號:W25Q128BV

二、背景介紹

  在FPGA開發過程中,如果我們把bit文件下載到FPGA中,那么當FPGA掉電以后,bit文件就丟失,再次上電的時候,代碼就不會運行了。如果想掉電以后,代碼還可以運行,那么必須把編譯好的文件下載到外部的QSPI Flash中。當文件下載到外部的QSPI Flash中以后,由於QSPI Flash是一種非易失性存儲器,掉電以后里面的數據並不會丟失,待重新上電以后,FPGA會自動讀取QSPI Flash中的數據把代碼加載到FPGA內部的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 ;

//////////////////////////////////////////////////////////////////
// 功能:產生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 ;

//////////////////////////////////////////////////////////////////
// 功能:對輸出寄存器進行移位產生流水效果
//////////////////////////////////////////////////////////////////
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

 

  寫好待測代碼,並添加物理約束文件綁定好管腳,我的開發板上的約束文件如下

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、如果上一步你沒做任何設置的話你的工程目錄下只會產生一個bit文件,如果需要產生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支持,后續會有Vivado調試教程以及燒錄教程。

 

二、把.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文件所在的目錄(這一項也可以隨便設置),File Format設置為MCS。

  9、點擊上圖中最下面的OK,彈出以下窗口

  10、在上圖中直接點擊OK,在彈出的新窗口中選擇要轉化的.bit文件並點擊右下角的“打開”

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

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

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

  14、生成完畢以后會出現Generate Succeeded字樣

  15、工程目錄下出現了.mcs文件

  16、雙擊Boundary Scan

  17、點擊Initialize Chain圖標(這一步一定要保證開發板處於上電狀態並且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、下載成功以后出現Successful字樣

 

  27、接着關掉開發板的電源然后再打開,等一小段時間以后,程序就開始自動運行了。

 

三、修改bit文件的配置,加快FPGA加載速度

  可以發現,產生的.mcs文件只有3.89M,但是重新上電到程序開始執行卻花費了好幾秒的時間,如果工程十分龐大,則FPGA選型的時候勢必會選擇邏輯資源更多的FPGA,那么編譯后產生的.mcs文件會大的多,上電后加載的時間也會更長,所以在實際項目中,往往會修改bit文件的配置參數來加快上電以后代碼的加載速度。具體步驟如下

 

  1、編寫好代碼和約束文件,雙擊Generate Programming File成bit

  2、選中Generate Programming File,右鍵選擇Process Properties...

  3、在彈出的窗口中單擊Configuration Options,並設置Configuration Rate為26MHz,設置Set SPI Configuration Bus Width參數為4。並點擊最下面的OK

 

  注意:Configuration Rate這個參數的值不能超過你使用的QSPI Flash芯片手冊中指定的最高的讀頻率,大多數QSPI Flash的芯片手冊會在第一頁說它們支持的頻率高達100M甚至更高,但是其實這個頻率並不是指芯片支持的讀數據頻率,Flash芯片支持的讀數據頻率一定要在芯片手冊電氣特性(Electrical Characteristics)那一節找。如果你選擇的時鍾頻率超過QSPI Flash支持的最高讀取頻率太多,出現的現象就是FPGA根本無法加載QSPI Flash中的鏡像文件導致FPGA啟動失敗;如果你選擇的時鍾頻率超過QSPI Flash支持的最高讀取頻率一點點的話,出現的現象就是FPGA加載QSPI Flash中的鏡像文件大概率失敗。所以一般選擇的Configuration Rate參數值要稍微低於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的前提是你的開發板上QSPI Flash和FPGA之間四根數據線都是連通的,並且PCB上建議做好四根數據線的蛇形等長。

  4、接着重新生成.bit文件,然后把.bit文件按照上文的方法生成.mcs文件下載到QSPI Flash中,這個過程不在重復。

  5、燒錄完畢以后,重新給開發板斷電然后再上電,你會發現上電的瞬間,程序就開始運行了,幾乎感覺不到等待的時間。由於XC6SLX45這個器件的資源相較於7系列FPGA來說邏輯資源並不算多,生成的mcs文件並不算大,所以才這么快,而對於高端一點的FPGA來說,FPGA編譯后的鏡像文件能達到十幾兆甚至更大,比如XC7K325t生成的鏡像文件約為10M左右,所以即使你這么設置了還是有一點延時的,不過比單線肯定是要快的多注意,生成的FPGA鏡像文件大小與FPGA型號有關,與邏輯代碼的多少無關,在同一塊FPGA中,你寫一個流水燈的代碼和調用了幾個FFT,FIR數字濾波器IP核的信號處理代碼生成的FPGA鏡像文件的大小是相同的。

 

  至此,整個實驗過程全部完畢。

六、總結

  1、在生成bit文件的設置中勾選-g Binary選項可以生成bin文件

  2、在生成mcs文件之間提前對bit進行速率與位寬的設置可以提高FPGA從Flash加載程序的速度

  3、設置Configuration Rate參數之前一定要閱讀QPSI Flash芯片手冊的電氣特性(Electrical Characteristics)一節,找到支持的最高頻率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM