当前位置:首页 > 工业控制 > 电子设计自动化

1.2 SPI Flash存储器的复用
复用SPI Flash是指既用它来保存硬件配置文件、Bootloader引导程序还用来保存用户应用程序。在加载阶段,FPGA自动从SPI Flash中读取硬件配置bit文件及Bootloader程序进行配置到片内BRAM中运行。当完成加载后,FPGA内部逻辑启动,通过运行的Bootloader程序读取SPI Flash中的用户应用程序,并写到外部SDRAM的相应位置,最后Bootloader程序切换指令指针到SDRAM指定位置,在外部的SDRAM中开始执行应用程序。
图3给出了本系统中复用SPI Flash嵌入式系统结构图,用EDK中的opb_sdram连接外部SDRAM,用opb_spi连接SPI Flash(AT45DB161D),通过Bootloader软件程序实现从SPI Flash中复制用户应用程序到SDRAM中,然后在SDRAM中运行。但是,Boot-loader在系统上电时会通过FP-GA芯片的配置引脚首先加载到BRAM中运行,这样就可以实现上电自动加载启动程序。

2 Bootloader引导程序的设计
在工程代码编写之前要求对硬件器件有所了解,主要需要了解FPGA所需要的配置文件空间,还有Flash存储结构。例如:XC3S500E配置文件空间为2 270 208位,所以要根据它计算存储应用程序的基地址。AT45DB161D是串行接口的闪存芯片,它包含有17 301 504位,被组织为4 096页,每页512/528字节。除了主存储器,AT45DB161D还包括2个SRAM数据缓冲区,每个缓冲区512/528字节。在主存储器正在编程时,缓冲区是允许接收数据的,并且支持数据流式写入。(此处为528字节/页)
AT45DB161D的存储器阵列分为3个级别的粒度,分别为扇区、块与页。图4对各个级别进行了分析,详细说明了每个扇区与块的页数。所有的编程操作都是针对页的。擦除操作可以作用于芯片、扇区、块或页。
最后利用定义的空函数int(*boot_app_jump) (void);”将地址指针指向内存的应用程序基地址,使其从此处开始运行程序。
//将目的地址赋给跳转函数
boot_app_jump=(int(*)(void))DESTINATION_AD-DR;
//运行跳转函数,使其在该函数地址开始运行程序boot_app_jump();

3 SPI Flash软件引导过程及SPI Flash编程
本实验使用简单的应用程序(打印hello_world),即工程“hello_world”。工程serial_Flash_bootloader就是上面设计的引导程序。
3.1 编译用户应用程序的二进制文件
由于应用程序要在外部SDRAM中运行,所以不需要初始化BRAM存储器,如图5所示。

为了指明程序的开始地址和应用程序的可执行文件的产生路径,需要在编译选项中设置。右键“应用程序工程”,Set Compiler Options在Output ELF file中选择可执行文件的产生路径,如XC3S500E\hello_world\hello_world.elf,在Program Start Address中键入程序执行的起始地址(这里是SDRAM的基地址:0x90000000)。接下来编译应用程序工程,编译完成后就会在XC3S500E\hello_world文件夹中产生hello_world.elf。为了后面对SPI Flash编程的需要,应将elf转变成二进制形式的文件。这就需要利用cygwin shell窗口命令来完成,这个脚本提供了一个简单的命令实现这个目的。利用mb-objcopy-O binary命令就可以将elf转变成二进制形式的文件(.b文件)。
例如:mb-objcopy-O binary ./hello world/helloworld.elf./hello_world/hello_world.b用来在工程目录下hello_world文件夹创建工程的一个hello_world.b的二进制文件。生成的文件hello_world.b大约2 KB左右。
3.2 Bootloader引导程序与硬件配置文件的生成
serial_Flash_bootloader要初始化到BRAM中(即在“工程”上右键→BRAM Initialization and unmark a11)。
这样做的意义是在编译Bootloader程序时就将它编译后的执行文件(.elf文件)加入到硬件system.bit中生成一个download.bit。这个文件既包含了系统硬件配置信息,又包括了Bootloader程序执行文件。由于设置了初始化到BRAM中,所以在系统上电时才能使Bootloader程序自动加载到片内BRAM中运行,实现程序的引导功能。只要利用EDK用软件中download bitstram功能就可以实现上述功能。
3.3 编写SPI PROM文件
本部分提供为SPI Flash存储器创建PROM文件的指导原则。在将生成bitstram.bit比特流转换成SPI格式PROM文件之前,设计人员必须确认该比特流是用bitg-en-g StartupClk:Cclk选项生成的。此选项使启动顺序与Spartan-3E内部时钟同步,从而确保FPGA功能正常。
①将硬件配置和serial_Flash_bootloader引导程序的bitstrem.bit转换为MCS格式文件。
②将前面得到的应用程序的二进制文件(hello_world.b)转换为MCS格式文件。
③将以上得到了2个MCS文件合成1个MCS文件。
④编程SPI Flash芯片。
以上过程,除了③以外,Xilinx公司的iMPACT编程软件都可以实现。③要由DOS命令完成。所以下面都是以DOS命令来完成编程的全过程。
再使用DOS命令完成格式化和编程之前,要对down-load.bit、应用程序、spiPartNam和spi_offset参数进行设置,以便XSPI软件程序能对用户要求加以识别。如下:

set bitstream=../implementation/download.bit
set application=hello_world
set spiPartName=AT45DB161D//SPI Flash器件的名称
set spi_offset=0x63000//hello_world的应用程序就会从
//Flash中0x63000地址向上存放,引导程序也是从这里开始加载
//到SDRAM中的
接下来就是执行转换的命令。
第1步:REM Step 1.Convert download.bit to mcsimpact convert_bits_to_mcs.cmd
此命令将硬件配置和serial_Flash_bootloader引导程序的bitstrem.bit转换为MCS格式文件。
第2步:REM Step 2.Convert binary application tomcs
xmcsutil-accept_notice-i%application%.b-o%appli-cation%.mcs-29
完成了应用程序(hello_world)的二进制文件(hello_world.b)转换为MCS格式文件。
第3步:REM Step 3.combine application mcs withbitstream mcs
xmcsutil-accept_notice-i bitstream.mcs%applica-tion%.mcs-o combined.mcs-16-segaddr 0x00%spi_off-set%-usedataaddr-padff
这个命令将以上得到了的MCS文件合成一个MCS文件。
第4步:REM Step 4.Program the AT45DB161D
xip-accept_notice-skip_syncword_check-mcs-spi_epv-icombined.mcs-o verify.txt-select_cable 1
完成对SPI Flash芯片编程。此命令使用轮询擦除SPI内容,然后对SPI器件的内容进行编程和验证。任何验证不匹配项都记录在result.out文件中。默认情况下,XSPI认定数据是HEX格式。如果输入文件是HEX格式,则去除-mcs选项。
Xilinx软件工具iMPACT从Spartan-3E比特流生成SPI格式PROM文件。SPI存储器件首先串行输出数据的MSB字节,而Xilinx PROM则首先输出数据的LSB。与标准Xilinx PROM文件相比,SPI格式PROM文件在每字节内有位反转,因此,需要在PROMgen中使用-spi选项才能正确格式化。XSPI支持.hex和.mcs两种SPIPROM文件格式。以下所示为生成SPI格式.mcs文件的PROMGen命令行操作的示例。要生成SPI格式PROM文件.hex,请用-P hex替换-p mcs选项开关。

结 语
本文介绍的是SPI Flash存储器的复用编程方法的实现。在应用程序不是很大时,可以使用此方法复用SPI Flash存储器,减少外围电路,但是配置时间较长。在不要求配置时间的基础上,可以考虑使用SPI配置模式。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC

为无处不在的端侧设备插上AI的翅膀,AMD发布第二代Versal™ 自适应 SoC

关键字: AMD FPGA 自适应SoC AI 边缘计算

Pmod接口可以说是数字电路板的连接革命。随着科技的飞速发展,数字电路板间的通信与连接技术也在不断创新和进步。Pmod接口,作为一种新兴的数字接口标准,正逐渐成为数字电路板间通信的桥梁,为电子设备的连接和通信带来了革命性...

关键字: pmod接口 FPGA 数字电路板

近日举办的GTC大会把人工智能/机器学习(AI/ML)领域中的算力比拼又带到了一个新的高度,这不只是说明了通用图形处理器(GPGPU)时代的来临,而是包括GPU、FPGA和NPU等一众数据处理加速器时代的来临,就像GPU...

关键字: FPGA AI 图形处理器

当我们提到成本优化型FPGA,往往与简化逻辑资源、有限I/O和较低制造工艺联系在一起。诚然,在成本受限的系统设计中,对于价格、功耗和尺寸的要求更为敏感;但随着一系列创新应用的发展、随着边缘AI的深化,成本优化型FPGA也...

关键字: AMD FPGA Spartan 边缘计算

全球领先的高性能现场可编程门阵列(FPGA)和嵌入式FPGA(eFPGA)半导体知识产权(IP)提供商Achronix Semiconductor公司宣布,该公司参加了由私募股权和风险投资公司Baird Capital举...

关键字: FPGA 智能汽车 eFPGA

全新 FPGA 能为嵌入式视觉、医疗、工业互联、机器人与视频应用提供高数量 I/O、功率效率以及卓越的安全功能

关键字: FPGA 嵌入式视觉 机器人

Altera致力于为客户提供端到端的FPGA、易于使用的AI、软件和弹性供应链。

关键字: FPGA AI

在半导体领域,大部分对于AI的关注都集中在GPU或专用AI加速器芯片(如NPU和TPU)上。但事实证明,有相当多的组件可以直接影响甚至运行AI工作负载。FPGA就是其中之一。

关键字: FPGA AI 半导体

半导体产品老化是一个自然现象,在电子应用中,基于环境、自然等因素,半导体在经过一段时间连续工作之后,其功能会逐渐丧失,这被称为功能失效。半导体功能失效主要包括:腐蚀、载流子注入、电迁移等。其中,电迁移引发的失效机理最为突...

关键字: 半导体 电迁移 FPGA
关闭
关闭