原文地址:http://www.elecfans.com/emb/fpga/20140124334884_2.html

IPROG指令的作用是对FPGA芯片进行复位操作,该复位操作对FPGA内部的应用程序进行复位,复位过程中除专用配置管脚和JTAG管脚,其他输入/输出管脚均为高阻态。完成复位操作后,将默认的加载地址用热启动地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址替换。

  在发送IPROG指令之前,需要对ICAP核进行预配置。重载控制模块在收到触发信号后,第一个时钟周期将ICAP核的WRITE信号和CE信号置高,第二个周期将WRITE信号置底,CE信号置高,第三个周期将WRITE信号置底,CE信号也置底。接着在下面的8个时钟周期里,将指令队列中的控制命令逐个发出。状态机指令流程如图3所示。

  

  在状态机发送IPROG指令的过程中,为了保证ICAP核接收到正确的指令,每一个发送出去的命令和数据必须遵循SelectMAP数据顺序。SelectMAP数据顺序是将每个指令都按字节划分,划分后每个字节的数据都按比特位翻转。如果为“X32”模式,则划分为4个字节,每个字节进行位翻转。图4以“X16”为例说明Se-lectMAP数据顺序。

  

  当状态机从用户程序接收到一个触发条件后,会发送一系列如图3所示的IPROG命令。Verilog编码实现状态机的过程中,必须按照图3给出的指令顺序发送这些IPROG命令,否则无法正确的与ICAP核通信。同时这些指令都具有自己特殊的定义而且必须服从Select-MAP数据顺序,否则无法通信。IPROG指令的具体定义及说明如表1所示。

  

  在上述配置指令过程中,第五步Warm Boot StartAddress Register(WBSTAR)指定了满足触发条件的比特流在SPI FLASH中的起始地址,WBSTAR被赋值的地址必须和即将配置的bit流在SPI FLASH中的物理位置相同,否则FPGA就无法从外部读取bit流。WBSTAR被赋值的数值都是提前根据程序的要求计算好的。计算WBSTAR值的时候需要了解WBSTAR寄存器每一位的具体含义,如图5所示。

  

  WBSTAR寄存器共31位,高三位是保留位,RS[1:0]两位指定了可以多重配置的bit流的个数。RS_TS_B是RS[1:0]的使能信号:0表示Disabled,1表示Enabled.

  START_ADDR表示要回读的比特流在外部配置存储器的起始地址。状态机在对WBSTAR进行赋值时,要根据自己选择的bit流个数以及对应各个bit流在外部配置存储器贮存的地址自行计算WBSTAR地址。这里以4个bit流为例说明WBSTAR地址的计算方法,如表2所示。状态机使用的地址是服从SelectMAP数据顺序的地址。FPGA专用配置逻辑在收到IPROG指令后,开始执行内部复位操作(JATG管角和重载控制部分不进行复位操作),擦除板卡上原有的程序,从FLASH芯片中WBSTAR所指向的起始地址开始读取新配置文件完成FPGA的重配置。

  

  2多重配置的实现

  Xilinx系列的FPGA需要将后缀名为mcs的内存镜像文件固化到外部配置存储器中,FPGA上电后才能自动加载配置文件。一般的mcs文件只包含一个bit流文件,多重启动的固化文件(。mcs)包含多bit流文件。在将多个bit流整合到mcs文件的过程中,需要指定每个bit流的起始地址,这样FPGA专用配置逻辑才能根据地址找到对应的bit流。首先将用户开发的应用程序和重载控制模块添加到一个工程当中,利用ISE编译软件生成位流文件(。bit)。由于Virtex5系列器件本身的特性,一般情况下生产的bit流文件大约为3 300 KB,而SPIFLASH的容量为32 Mb即4 MB,这个容量无法满足在一个SPI FLASH上贮存多个bit流文件,需要对生成的bit流进行压缩。在用ISE软件生成bit流文件时,当完成了Synthesize-XST以及Implement Design后,执行到最后一步Generate Programming File时,在Process Proper-TIes中General Options选项中勾选Enable BitstreamCompression.通过这个压缩设置可以对bit流进行压缩,压缩后的bit流大约在500~600 KB之间,可以满足在一个容量为32 Mb的SPI FLASH上贮存多个bit流文件。其次将需要进行重配置的多个位流文件拷贝至一个工程目录下,有两种方法可以将多个bit流整合为一个mcs文件。第一种方法是通过ISE编译软件的命令行窗口,使用命令行命令将多个位流文件合并为一个FLASH存贮芯片M25P32中烧写的内存镜像文件(。mcs)。第二种方法是用Impact软件创建MultibootSPI FLASH,选择相应的FPGA型号和FLASH的容量以及要包含的bit流的个数(版本的个数)。本文使用第一种方法来将多个bit流文件形成一个内存镜像文件(。mcs)。使用promgen命令的具体格式为:

  promgen -spi -pmcs -oMulitBoot.mcs-s4096 -u0rev0.bit -u100000rev1.bit -u200000rev0.bit -u300000rev0.bit命令中各参数的说明如下所述。-spi:表示生成的mcs文件要固化到SPI FLASH中;-p mcs:生成文件的格式是mcs格式;-o ML507.mcs:要生成的文件名,可以根据需要修改;-s 4096:定义了外部存储器的容量,4096表示32 Mb;- u 0rev0.bit:表示名字为rev0的比特流文件在外部存储器的起始地址为0;-u 100000 rev1.bit:表示名字为rev1的比特流文件在外部贮存的起始地址为100000.在生成mcs文件后,通过IM-PACT软件将mcs文件固化到SPI FLASH中。

  FPGA上电自动从外部SPI FLASH加载一个初始化的bit流,当需要执行新的程序时,会根据触发条件以及启动地址重新配置。在实验中,通过PC机串口终端发送指令当做触发条件实现多重配置。在实际应用中,还可以根据具体硬件实现,采用其他通信方式传送控制指令来进行触发。

  3结语

  本文通过硬件电路和软件设计两个方面对FPGA的多重配置方法进行了详细介绍,本文所介绍的多重配置方法灵活方便、易于操作、电路简单,在工程中有很高的应用价值,同时关于bit流压缩的方法也值得参考。

FPGA配置 - 基于SPI FLASH的FPGA多重配置(Xilinx)相关推荐

  1. Xilinx FPGA支持的SPI Flash配置芯片型号

    文章目录 支持的SPI Flash芯片型号 7 系列的FPGA支持的SPI Flash芯片型号 Virtex和Spartan系列支持的SPI芯片型号 支持的BPI Flash芯片 7系列支持的BPI ...

  2. FPGA烧写SPI FLASH

    作者:ShownSun 工作室:时沿科技 文章目录 FPGA烧写SPI FLASH 方法一 方法二 SPI flash的约束 BPI FLASH的约束 FPGA烧写SPI FLASH 方法一 1.点击 ...

  3. 基于SPI flash的 Multiboot远程更新

    基于SPI flash的 Multiboot远程更新 前言 Xilixn FPGA提供了一种在线升级的方式(本文使用的是A7和K7系列fpga,以下所讲述和涉及的都是与此2系列fpga相关)可以通过I ...

  4. 基于spi FLASH的嵌入式文件系统 littlefs(转)

    基于spi FLASH的嵌入式文件系统 littlefs 转载于:https://www.cnblogs.com/LittleTiger/p/10737640.html

  5. 上海航芯技术分享 | 基于SPI Flash的U盘程序,从STM32F103到ACM32F403

    前言 本项目是以SPI Flash(如W25Q128等)存储元件作为存储单元,MCU主控完成USB接口通信并根据SCSI协议实现U盘功能.其结构如下图所示: SPI Flash部分移植 SPI功能部分 ...

  6. FPGA verilog 基于SPI总线协议控制flash的项目升级

    项目一:SPI总线控制Flash的擦除功能 SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,是一种高速的,全双工,同 ...

  7. 基于FPGA的SPI FLASH控制器设计

    1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法 ...

  8. FPGA基础入门【8】开发板外部存储器SPI flash访问

    前两篇教程利用数码管project介绍了chipscope和各种烧写开发板的方式,这篇开始继续探索开发板,这次关注外置存储器的控制,外置指的是芯片外部,不是开发板外部.板子上的外置存储器有DDR2和S ...

  9. FPGA 黑金XC6SLX9 08.spi_flash源码分析 spi flash数据的读取擦除写入实验(1)

    Spi flash 数码管显示flash两位数 按键可实现数据写入 流程图 // //                                                         ...

最新文章

  1. python 办公自动化-Python办公自动化|从Excel到Word
  2. NoPause/NoEmgAbort的任务 与后台任务的区别
  3. 第 1 章 多线程基础介绍
  4. 京东金融 App 收集隐私?开源库程序员不背锅!
  5. top结合jstack处理线上cpu飙升问题
  6. C#编程:SqlCommand.Parameters.Add()方法的参数问题。
  7. 字母组合---排列组合问题
  8. Shel脚本-初步入门之《06》
  9. 海外服务器租用主要要看三个方面
  10. 尤雨溪:重头来过的 Vue3 带来了什么?
  11. mysql扫盲篇_MySQL小白扫盲(一)
  12. 网络安全基本属性和STRIDE
  13. python解魔方程序_写一个解二阶魔方的程序
  14. CSDN自动回复灌水乐园帖子-httpClient篇
  15. STP详解-STP、RSTP、MSTP
  16. 华为OD机试 - 开心消消乐
  17. 南都娱乐周刊否认爆料文章出轨因与其有私人恩怨
  18. 5年没发paper,读博想放弃?科大博导万字自述:曾连收13封拒稿信
  19. 初中使用计算机,初中生使用计算器的利和弊!!!急!!!!!!!!!!!!!!!!!!!!
  20. 分享148个ASP源码,总有一款适合您

热门文章

  1. mysql字符串相加函数concat()
  2. python实现cc攻击_运维纪录:遭遇CC攻击,防御与查水表
  3. 华为存储iscsi配置_iscsi 华为存储配置 上课内容
  4. iphone怎么变android,如何将安卓变ios7 将安卓变iphone的两种简单方法分享
  5. Java DecimalFormat 用法 小数位的处理 公司内部处理小数位
  6. matlab 向量模量,有限元分析简单实例之平面矩形薄板(matlab)
  7. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
  8. mysql安装连接测试c_C连接MySQL数据库开发之Windows环境搭建及测试_MySQL
  9. 第十六届全国大学生智能汽车竞赛--百度智慧交通(东部赛区)
  10. 基于黄色LED反向电流的光电检测板