0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

软件与硬件平台

FPGA之家 来源:FPGA之家 2023-05-09 10:08 次阅读

一、软件与硬件平台

软件平台:

操作系统: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文件的模式以及支持的时钟频率

四、待测代码

3a2fb144-ee09-11ed-90ce-dac502259ad0.jpg

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

3a2fb144-ee09-11ed-90ce-dac502259ad0.jpg

写好待测代码,并添加物理约束文件绑定好管脚,我的开发板上的约束文件如下

3a2fb144-ee09-11ed-90ce-dac502259ad0.jpg

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

3a2fb144-ee09-11ed-90ce-dac502259ad0.jpg

五、任务

一、把.bit文件转化为.bin文件。

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

3a7c835c-ee09-11ed-90ce-dac502259ad0.png

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

3a99284a-ee09-11ed-90ce-dac502259ad0.png

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

3ab984f0-ee09-11ed-90ce-dac502259ad0.png

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

3ae1f0d4-ee09-11ed-90ce-dac502259ad0.png

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

3afa809a-ee09-11ed-90ce-dac502259ad0.jpg

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

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

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

3a7c835c-ee09-11ed-90ce-dac502259ad0.png

2、双击Configure Target Device

3b2dce32-ee09-11ed-90ce-dac502259ad0.png

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

3b4dea8c-ee09-11ed-90ce-dac502259ad0.png

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

3b69b442-ee09-11ed-90ce-dac502259ad0.png

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

3b828f3a-ee09-11ed-90ce-dac502259ad0.png

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

3bafa5c4-ee09-11ed-90ce-dac502259ad0.jpg

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

3be28bec-ee09-11ed-90ce-dac502259ad0.jpg

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

3c05a30c-ee09-11ed-90ce-dac502259ad0.jpg

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

3c225e2a-ee09-11ed-90ce-dac502259ad0.jpg

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

3c5104b4-ee09-11ed-90ce-dac502259ad0.jpg

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

3c6e2aa8-ee09-11ed-90ce-dac502259ad0.jpg

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

3c8ae6d4-ee09-11ed-90ce-dac502259ad0.jpg

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

3ca3945e-ee09-11ed-90ce-dac502259ad0.jpg

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

3cc21550-ee09-11ed-90ce-dac502259ad0.jpg

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

3cedf6c0-ee09-11ed-90ce-dac502259ad0.jpg

16、双击Boundary Scan

3d18ff50-ee09-11ed-90ce-dac502259ad0.png

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

3d33e860-ee09-11ed-90ce-dac502259ad0.jpg

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

3d5b49e6-ee09-11ed-90ce-dac502259ad0.jpg

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

3d85368e-ee09-11ed-90ce-dac502259ad0.jpg

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

3db26a0a-ee09-11ed-90ce-dac502259ad0.png

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

3dcfbe52-ee09-11ed-90ce-dac502259ad0.jpg

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

3df1bb06-ee09-11ed-90ce-dac502259ad0.png

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

3e1cf848-ee09-11ed-90ce-dac502259ad0.jpg

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

3e46d514-ee09-11ed-90ce-dac502259ad0.jpg

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

3e70edae-ee09-11ed-90ce-dac502259ad0.jpg

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

3ea21d3e-ee09-11ed-90ce-dac502259ad0.jpg

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

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

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

3ecc7598-ee09-11ed-90ce-dac502259ad0.jpg

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

3a7c835c-ee09-11ed-90ce-dac502259ad0.png

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

3a99284a-ee09-11ed-90ce-dac502259ad0.png

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

3f242a9a-ee09-11ed-90ce-dac502259ad0.png

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

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1626

    文章

    21674

    浏览量

    601939
  • 代码
    +关注

    关注

    30

    文章

    4752

    浏览量

    68360
  • 编译
    +关注

    关注

    0

    文章

    654

    浏览量

    32810

原文标题:一、软件与硬件平台

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机无法控制单总线器件,怀疑器件问题?

    的参考, Maxim 公司提供了通用的1-Wire读写软件,可从Maxim官方网站下载,但这个软件是需要硬件支持的。当然,Maxim有这样的硬件,采购周期长并且价格较贵。我们开发了兼容
    发表于 08-26 17:52

    第一个arm9的应用程序helloworld需要掌握哪些内容?

    arm9的第一个应用程序 helloworld 的软件 硬件平台都有哪些?比如软件开发环境需要搭建一个什么平台 等等 ,路过的朋友不妨看看,
    发表于 11-12 14:41

    嵌入式开发中的宿主机和目标机有哪些不同之处

    在嵌入式开发过程中,有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件硬件平台。通常我们用的PC机就是宿主机,而我们用的开发板则是目标机。.
    发表于 12-16 07:44

    如何安装arm-linux-gcc

    安装配置主机目标板开发模式宿主机执行编译、链接嵌入式软件的计算机目标机运行嵌入式软件硬件平台“本地”编译器用来生成在与编译器本身所在的计算机和操作系统(
    发表于 12-24 06:45

    建立一个开放的软件硬件平台

    描述该项目旨在建立一个开放的软件硬件平台(分别为 Hivemind 和 Hiveboard),允许实施机器人群,从异构机器人和 Android 智能手机进行同步定位和映射 (SLAM)[1
    发表于 07-25 06:26

    Openwsn开源无线协议在PLUS-F5270开发板上的移植步骤简析

    的通信方式进行标准化。OpenWSN项目的目标是在各种软件硬件平台上提供基于物联网标准的完整协议栈的开源实现,这种实现可以帮助学术界和工业界验证这些标准对物联网的适用性,使这些网络真正无处不在
    发表于 08-22 16:03

    迷你尺寸开源硬件开发板Banana Pi BPI-M7 采用瑞芯微RK3588芯片设计

    )是由广东比派科技有限公司主导的一个开源硬件项目,专注在ARM,MCU系列开源硬件开发板,提供全开放的软件硬件平台,打造基础技术开发
    发表于 11-18 13:49

    Banana Pi BPI-M7 迷你尺寸开源硬件开发板采用瑞芯微RK3588芯片设计

    ) 是由广东比派科技有限公司主导的一个开源硬件项目,专注在ARM,MCU系列开源硬件开发板,提供全开放的软件硬件平台,打造基础技术开发
    发表于 11-18 13:51

    哪些公司能提供虚拟仪器的硬件平台软件平台

    哪些公司能提供虚拟仪器的硬件平台软件平台? 能提供软件开发平台的商家有NI公司和Agilen
    发表于 09-06 22:40 960次阅读

    打翻身仗,AMD在VR方面推众多项目建立VR供应链

    虽然老对手Nvidia在个人VR领域如火如荼,AMD却也在VR业务,包括GPU认证方面推出了一些新的VR项目。AMD通过加强其软件/硬件平台并且建立VR供应链,希望能够扩大其VR市场的存在,用新的北极星架构显卡重夺VR市场份额。
    发表于 10-26 15:10 528次阅读

    基于RFID技术的物联网车载终端如何设计

    文中提出了一种基于RFID技术的物联网车载终端系统,选择嵌入式Linux操作系统和S3C6410处理器作为软件硬件平台,成功的开发出样机。
    发表于 11-15 15:07 797次阅读
    基于RFID技术的物联网车载终端如何设计

    基于Moxa UC系列应用的嵌入式系统解决方案

    随着近年来嵌入式技术的发展,嵌入式产品的应用越来越广泛,但是嵌入式产品开发需要很大投入,要搭建各种软件硬件平台,才能开发出合适的嵌入式产品。嵌入式软硬件
    的头像 发表于 09-29 09:47 2378次阅读

    USB3.0开发之bulkLoop上位机程序

    USB3.0开发之bulkLoop上位机程序 一、开发测试软件 硬件平台:Cypress公司的CYUSB3014 软件平台:Visual S
    发表于 05-29 15:16 14次下载
    USB3.0开发之bulkLoop上位机程序

    什么是机器视觉计算机?

    引导机器人、车辆中的应用。随着视觉技术的进步,机器的功能越来越强大,以满足工业的战略目标。所有机器视觉计算机都由两个关键组件组成:硬件平台和视觉软件硬件
    的头像 发表于 12-26 17:51 963次阅读
    什么是机器视觉计算机?

    全志T113-S3板载Linux系统信息查询

    包含多个内置命令,可帮助我们熟悉正在使用的软件硬件平台。为了全面了解如何查看Linux系统的各种信息,下面的内容将详细介绍各个方面的查询命令和方法。产品简介眺望电子E
    的头像 发表于 11-22 01:07 107次阅读
    全志T113-S3板载Linux系统信息查询