当前位置:   article > 正文

使用ICAP原语实现SPI-Multiboot加载

icap原语

1 重配置Multiboot的应用需求
当多个应用程序同时在一个硬件平台上实现时,各个程序的资源使用和数据通路可能会冲突,这增加了控制电路设计的复杂程度,给开发人员增加了工作量和开发难度。通过多重配置,可以将多个应用程序根据需要分时加载到FPGA中,不仅精简了电路设计,而且使系统更加灵活。FPGA多重配置的特点可以让特定条件下的用户选择片上资源不多的FPGA去实现需要很多资源FPGA才能实现的功能,这大大降低了开发费用,同时提高了FPGA的利用率。
2 ICAP实现Multiboot的原理介绍
FPGA具有多重配置的特性,允许用户在不掉电重启的情况下,根据不同时刻的需求,可以从FLASH中贮存的多个比特文件选择加载其中的一个,实现系统功能的变换。
当FPGA完成上电自动加载初始化的比特流后,可以通过触发FPGA内部的多重启动事件使得FPGA从外部配置存储器(SPI FLASH)指定的地址自动下载一个新的比特流来重新配置。FPGA的多重配置可以通过多种方式来实现。本文采用的是基于ICAP原语的状态机编码方式。通过调用Xilinx自带的ICAP原语,编写状态机按照一定的指令流程对ICAP原语进行不断的配置,可以控制FPGA重新配置。
2.1 IPROG指令序列
在调用了ICAP原语接口之后,通过Verilog/VHDL编码的方式实现状态机。通过状态机发送IPROG指令给ICAP原语,ICAP原语在接收到这些指令后会根据指定的地址自动加载配置文件。
IPROG指令的作用跟外部Program_B管脚的作用类似,都是对FPGA芯片进行复位操作,该复位操作对FPGA内部的应用程序进行复位,复位过程中除专用配置管脚和JTAG管脚,其他输入/输出管脚均为高阻态,同时IPROG指令不能复位专用重配置逻辑,如WBSTAR寄存器、TIMER寄存器、BSPI寄存器和BOOTSTS寄存器。IPROG指令能够触发FPGA开启初始化流程,同时拉低INIT和Done信号。完成复位操作后,将默认的加载地址用热启动地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址替换。
2.1.1 IPROG指令包在这里插入图片描述
2.1.2 WBSTAR寄存器
WBSTAR寄存器的组成如下图所示。
在这里插入图片描述
在这里插入图片描述
(1)对于BPI模式来说,可以通过RS[1:0]来控制具体位流的读取,也可以通过STAT_ADDR[28:0]地址来控制具体位流的读取。
(2)对于SPI模式来说,只有STAT_ADDR[23:0]地址来表征FLASH器件的地址,当使用32位地址的SPI(容量大于等于256Mb)时,需要将时间存储的高24地址赋值给STAT_ADDR[23:0]。因此在位流存储的起始地址早于255时,这就要求位流中的dummy数目要大于256个,否则就会出现易失部分有效位流读取,导致加载失败。为了安全起见,在使用大于等于256Mb的FLASH时,可以适当在位流头前加入Dummy。
2.2 ICAP原语接口时序
ICAP原语接口时序跟Select Map接口时序非常相似。SelectMap模式下,FPGA的配置和回读是通过CSI_B,RDWR_B和CCLK来控制的。当CSI_B=0时,SelectMap接口使能;当CSI_B=1时,SelectMap接口不使能。当RDWR_B=0时,数据端口为输入,功能为配置FPGA;当DWR_B=1时,数据端口为输出,功能为回读FPGA。SelectMap模式下,当CSI_B=0时,RDWR_B由0变为1或者由1变为0都会触发ABORT。当CSI_B=0时,RDWR_B由0变为1的ABORT现象是配置IO由输入变为输出,同时ABORT的状态信息体现在数据管脚上,此时数据管脚为输出。当CSI_B=0时,RDWR_B由1变为0的ABORT现象是配置IO由输出变为输入,这时ABORT的状态信息无法体现在数据管脚上,因为此时数据管脚为输入。
为了避免ABORT发生,建议在CSI_B=0前,设置好RDWR_B=0或RDWR_B=1,即通过控制CSI_B信号来控制配置或回读,或者通过控制CCLK供给来控制配置或回读。比如配置FPGA的三种接口时序。
2.2.1 连续的配置接口时序
在这里插入图片描述
2.2.2 CSI_B控制的断续配置接口时序
在这里插入图片描述
2.2.3 CCLK控制的断续配置接口时序
在这里插入图片描述
2.3 SelectMap数据顺序
SelectMap有X8、X16和X32模式。Select Map的位顺序的关系如下表所示。
在这里插入图片描述
SelectMap-X16数据变换关系如下图所示,X8和X32类推。
在这里插入图片描述

因此IPROG的指令序列对应的实际SelectMap-X32数据如下表所示。
在这里插入图片描述
3 ICAP实现Multiboot的工程开发
3.1 功能需求
在SPI的flash里烧写有A和B两个程序,FPGA上电后,自动加载A程序,根据外部给FPGA指示信号,FPGA自动切换加载B的程序,同时在B程序运行期间,根据外部给FPGA指示信号,FPGA自动切换加载A的程序。
3.2 验证平台
KC705的评估板,使用的FLASH为N25Q128。
3.3 接口协议
3.3.1 数据包
ICAP传输的数据包即满足SelectMap数据顺序要求的IPROG指令包。
在这里插入图片描述
指令序列包中的WBSTAR期望地址的计算方法:由于需要在128Mb的SPI-FLASH中存储2份位流,因为SPI-FLASH是按照字节存储的,因此128Mb的SPI-FLASH大小也为16MB,现计划每份位流存储大小平均分配,均为8MB,远小于实际7K325T的位流大小,因此需要对位流进行压缩。
第1份位流存储的地址为0X000000~0X7FFFFF,对应程序A的地址;
第2份位流存储的地址为0X800000~0XFFFFFF,对应程序B的地址;在这里插入图片描述
3.3.2 接口时序
采用连续的配置接口时序。
在这里插入图片描述

3.4 工程实现
3.4.1 系统组成
整个系统工程包括两个工程,分别为Golden工程和Update工程,为了减少开发时间,此Demo程序中的Golden工程和Update工程很相似,Golden工程和Update工程在此次案例中差异见下图中的红色部分。
在这里插入图片描述
各功能块的功能描述如下。
(1) 系统时钟/复位:对输入的时钟和复位信号进行处理,得到满足要求的系统时钟和系统复位信号。
(2) 开关处理:对输入的Sel_multiboot进行简单处理,Golden工程是直接输出给ICAP控制器,Update工程是取反后输出给ICAP控制器。
(3) 流水灯:此功能是为了验证Golden工程和Update工程切换是否成功,两个工程的流水灯的功能差异通过输入的参数led_constant来体现。
(4) ICAP_multiboot:此功能模块通过ICAP原语给FPGA的配置电路发送IPROG指令序列,触发FPGA执行多重加载功能,其中SelectMap数据生成是用来将输入的指令进行bit_SWAP转换,从而满足SelectMap传输要求,ICAP控制器是将输入的SelectMap数据以SelectMap连续配置接口时序发送给ICAP原语,从而达到触发Multiboot的功能,其中输入的参数addr_multiboot表示即将切换程序的存储首地址。
3.4.2 ICAP控制器设计
整个工程中的关键在于ICAP控制器的设计,本案例中ICAP控制器使用状态机来实现。
在这里插入图片描述
3.4.3 位流生成
位流Bit生成:由于7K523T器件本身的特性,生产的bit流文件大小为91548896,约为87Mb,约为11MB。而SPIFLASH的容量为128
Mb即16 MB,这个容量无法满足在一个SPI FLASH上贮存两个bit流文件,需要对生成的bit流进行压缩。在约束XDC文件中添加压缩命令即可。
在这里插入图片描述
固化Mcs生成:Xilinx系列的FPGA需要将后缀名为mcs的内存镜像文件固化到外部配置存储器中,FPGA上电后才能自动加载配置文件。一般的mcs文件只包含一个bit流文件,多重启动的mcs固化文件包含多个bit流文件。在将多个bit流整合到mcs文件的过程中,需要指定每个bit流的起始地址,这样FPGA专用配置逻辑才能根据地址找到对应的bit流。在程序设计WBSTAR地址时,确定了Golden位流存储的起始地址为0X00000000,Update位流存储的起始地址为0X00800000,因此在将Bit整合到Mcs过程中需要指定对应的存储起始地址,否则就无法加载成功了。
在这里插入图片描述
3.5 板级验证
整个Multiboot的功能是FPGA上电自动从外部SPI FLASH加载一个Golden的bit流,当需要执行Update的程序时,需要外部给一个触发条件,Golden程序会根据触发条件以及启动地址发起重新配置指令,从而FPGA开始重新配置。
在板级验证中,通过拨动SW11的最右边的开关,可以满足触发条件实现多重配置。在FPGA上电后,自动加载Golden程序,LED灯呈现一盏流水灯,当拨动SW11的最右边的开关后,FPGA加载Update程序,LED灯呈现两盏流水灯,这时再动SW11的最右边的开关,FPGA又加载Golden程序,LED灯呈现一盏流水灯。板级验证的结果符合预期结果,功能正确,Multiboot跳转正确。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号