【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽

摘要:
文件下载到外部QSPIFlash后,由于QSPIFlash是非易失性存储器,因此断电后不会丢失其中的数据。断电后,FPGA将自动读取QSPIFlash中的数据,并将代码加载到FPGA内部的RAM中进行操作。由于位不能直接下载到QSPIFlash,因此在下载到QSPI Flash之前,必须先将位文件转换为.mcs文件或.bin文件。同时,为了加快FPGA在通电后在QSPIFlash中加载mcs文件的速度,我们可以将位文件配置为4线模式并修改加载的时钟频率,从而大大加快FPGA的启动速度。
一、软件与硬件平台

       软件平台:

              操作系统: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

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第1张

  2、如果上一步你没做任何设置的话你的工程目录下只会产生一个bit文件,如果需要产生bin文件的话,选中Generate Programming File,右键选择Process Properties...

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第2张

  3、在弹出的窗口中单击General Options,并勾选-g Binary选项,并点击最下面的OK

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第3张

  4、Generate Programming File前面变成了“问号”图标

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第4张

  5、重新双击Generate Programming File,完毕以后工程目录就生成了.bin文件

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第5张

  在ISE不支持bin文件下载到QSPI Flash,但是Vivado支持,后续会有Vivado调试教程以及烧录教程。

二、把.bit文件转化为.mcs文件。

  1、编写好代码和约束文件,双击Generate Programming File成.bit文件

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第6张

  2、双击Configure Target Device

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第7张

  3、在弹出的窗口中点击OK

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第8张

  4、在弹出的ISE iMPACT中双击Create PROM File(PROM File Formatter)

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第9张

  5、在弹出的PROM File Formatter窗口中选择Configure Signal FPGA,并点击右边绿色的箭头进入Step 2

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第10张

  6、然后选择Storage Device(bits)为外部QSPI Flash的容量,我的QSPI Flash型号是W25Q128BV,容量为128Mbits,所以我选择128M。接着点击的Add Storage Device,然后点击绿色的箭头进入Step 3

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第11张

  7、点击上图中的Add Storage Device,然后点击下图的箭头进入Step3

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第12张

  8、设置Output File Name为.mcs文件的名字,我设置为和.bit文件的名字相同(这一项可以随便设置)。设置Output File Location为.bit文件所在的目录(这一项也可以随便设置),File Format设置为MCS。

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第13张

  9、点击上图中最下面的OK,弹出以下窗口

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第14张

  10、在上图中直接点击OK,在弹出的新窗口中选择要转化的.bit文件并点击右下角的“打开”

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第15张

  11、在弹出的新窗口中选择NO

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第16张

  12、在弹出的新窗口中选择OK

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第17张

  13、双击左侧的Generate File...,生成.mcs文件

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第18张

  14、生成完毕以后会出现Generate Succeeded字样

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第19张

  15、工程目录下出现了.mcs文件

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第20张

  16、双击Boundary Scan

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第21张

  17、点击Initialize Chain图标(这一步一定要保证开发板处于上电状态并且Jtag线连接正常)

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第22张

  18、在弹出的窗口中选择NO(因为我们马上要把.mcs烧录到Flash中,而不是下载.bit文件,所以选择NO)

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第23张

  19、在新弹出的窗口中选择OK

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第24张

  20、双击FPGA上面的那个虚线框包裹起来的图标

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第25张

  21、在弹出的文件选择窗口中选择之前生成好的.mcs文件,并点击打开

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第26张

  22、接着在弹出的新窗口中选择芯片型号为W25Q128BV,Data Width为1,点击OK

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第27张

  23、选中FPGA上面的FLASH图标,右键在弹出的菜单中单击Program

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第28张

  24、在弹出的新窗口中选择OK

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第29张

  25、接着就进入了烧录QSPI Flash的过程,这个过程与下载.bit相比要慢的多,需要耐心等待

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第30张

  26、下载成功以后出现Successful字样

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第31张

  27、接着关掉开发板的电源然后再打开,等一小段时间以后,程序就开始自动运行了。

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

  可以发现,产生的.mcs文件只有3.89M,但是重新上电到程序开始执行却花费了好几秒的时间,如果工程十分庞大,则FPGA选型的时候势必会选择逻辑资源更多的FPGA,那么编译后产生的.mcs文件会大的多,上电后加载的时间也会更长,所以在实际项目中,往往会修改bit文件的配置参数来加快上电以后代码的加载速度。具体步骤如下

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第32张

  1、编写好代码和约束文件,双击Generate Programming File成bit

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第33张

  2、选中Generate Programming File,右键选择Process Properties...

【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第34张

  3、在弹出的窗口中单击Configuration Options,并设置Configuration Rate为26MHz,设置Set SPI Configuration Bus Width参数为4。并点击最下面的OK

 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽第35张

  注意: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)一节,找到支持的最高频率。

免责声明:文章转载自《【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇网络干货,无论是运维还是开发都要知道的网络知识系列之(七)在 Windows Phone上使用QQConnect OAuth2下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

串口发送模块——1字节数据发送

  设计思想与代码规范均借鉴明德扬至简设计法,有不足之处希望大家多提建议,真正做到至简设计。本篇着重提出FPGA通用设计思想,以计数器为核心的代码规范以及VIVADO debug操作流程。   此次试验旨在通过串口试验,讲述FPGA的硬件设计思想和通用设计流程。串口是电子设计中非常常见,可以说掌握了串口数据收发,就明白了最基本的时序操作。串口的数据收发过程...

wParam与lParam的区别

wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数。 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);wParam 通常用来存储小段信息,如,标志lParam...

A1010. Radix

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is "yes", if 6 is a decimal number and 110 is a binary number. Now for any...

PCI规范学习笔记

以前看过一段时间Cyclone FPGA控制PEX8111的程序,没看懂,最近又结合PCI规范重新看了一下。 PCI Speci rev2.3    FRAME# is driven by the master to indicate the beginning and end of a transaction.   IRDY# is driven by...

FPGA之资源优化思想的运用

很多不安于现状的年轻人心中都有一个明确的目标,并最终为之留下了心酸和泪水而走上了成功的道路。如今我就觉得自己挺年轻的,不过我并没有像他们那么的努力。为了实现梦想,对得起自己,从现在开始我要向他们学习拼搏、执着的精神。哪怕前方的路途再怎么曲折、不平坦,我也要硬着头皮走下去。好了,该回归正题了~~~ 我常常对自己说:“因为我不会,所以要学别人的东西。但是不要只...

GPU 、APU、CUDA、TPU、FPGA介绍

购买显卡主要关注:显存、带宽和浮点运算数量 GPU :图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。 用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显...