关于Xilinx公司出品的Spartan6系列FPGA的MultiBoot设计方案详解

xilinx公司出品的spartan6系列fpga所具有的multiboot特性,允许用户在不掉电重启的情况下,根据不同时刻的需求,有选择地从存储于flash中的多个配置文件中加载其中的一个,对fpca在系统重配置,实现不同的功能。multiboot特性使得用户可以在某些场合选择较少逻辑资源的xilinx fpga,实现需要较大逻辑资源且较昂贵的fpga或asic才能实现的功能,从而提高器件利用率及系统安全性、降低系统成本。
1 基本概念 spartan-6 fpga在上电时从片外flash加载mcs文件进行配置。根据所包含的bit流文件的个数,mcs文件分为两类:一类是南单bit流文件生成的mcs文件,即该mcs文件中只包含一个bit流文件,用此类mcs文件配置fpga时,只能实现一种功能;另一类是由多个bit流文件生成的mcs文件,即该mcs文件包含多个bit流文件。用此类mcs文件配置fpga时,可根据需求有选择地加载其中的某个bit流文件对fpga进行系统重配置,即multiboot特性。
spartan-6 fpga拥有专用的multiboot逻辑配置模块,来实现multiboot和fallback操作。multiboot操作是在各配置bit流文件能正常加载的前提下,通过icap设置配置模块中的相关寄存器并触发iprog命令,实现在不同配置bit流文件中的切换,达到fpga实现不同功能的目的。fallback操作是在从配置a切换到配置b的过程中出错时,用另一个比较“安全”的bit流文件代替配置文件b配置fpga的操作。这个比较“安全”的bit流文件称为golden。
fpga的重配置操作,是通过专用的icap_spartan6原语向配置模块发送iprog命令来实现的。重配置操作可由fpga外部的处理器、微控制器、计算机和按键等“智能”终端触发。在应用设计中,只需在每个应用程序中例化一个icap_spartan6原语来实现相关命令序列即可实现multiboot特性。
spartan6的多bit流配置可通过spix1,x2,x4及bpi模式实现,文中只介绍基于spi模式的multiboot特性的实现,用配置文件代替应用程序。
2 multiboot操作相关寄存器简介 (1)所有spartan-6 fpga的bit流控制命令都是通过读写相关配置寄存器实现的。配置数据都是16位宽的字,也有一些数据是多字的,配置数据包含的3个主要命令如表1所示。
(2)所有的操作数据可分为两种:
type1包含两部分:header,data。
type2包含3部分:header,word count,data。
用tpye1就能实现multiboot和fallback操作,故只介绍type1。type1的header是个16位字,用其中6位表示相关寄存器的地址,如表2所示。
其中operation位[12:11]是表1中所列的操作码,寄存器地址[10:5]如表4所示,字节数[4:0]表示操作所需的字节数。
type1的数据部分形式如表3所示。
(3)spartan-6 fpga的multiboot常用配置寄存器及功能列表如表4所示。
寄存器功能介绍:
1)命令寄存器cmd。命令寄存器cmd存储配置控制命令,以产生全局信号执行其配置功能。在multiboot操作中,常用的cmd命令如表5所示。
2)general寄存器。触发iprog命令后,general1、general2中存放用于对fpga进行重配置的下一个bit流文件的地址,其中general1存放地址的低16位,general2的高8位存放spi操作码,低8位存放地址的高8位。general3、general4存放fmlback时的配置文件地址,其中gener al3存放低16位地址,general4的高8位存放spi操作码,低8位存放地址的高8位。general5中存放multiboot或fallback时的用户自定义数据。
3)模式寄存器mode_reg。mode_reg模式寄存器主要用于重配置时的一些模式设置,如spi总线的位宽。模式寄存器中各位的功能如表6所示。multiboot和fallback操作需对[13:8]进行相应设置。
4)控制寄存器ctl、配置选项寄存器cor2。因crc校验错误也可能触发fallback操作,因此为安全起见,如果可能发生crc校验错误,需将ctl寄存器的crc_extstat位清零,使能crc校验,并将cor2寄存器的reset_on_error置1,使能crc错误时的fallback操作。但如果能确定不发生crc错误,可不设置这两位。
3 multiboot原理 如上所述,spartan-6 fpga内置有专用的multiboot逻辑控制模块,来实现multiboot(iprog)和fallback操作。当触发fallback或iprog时,片内会产生一个复位脉冲,使片内配置逻辑复位,但不会使专用的multiboot逻辑和bootsts、mode、g1-g5复位。
实现multiboot特性时,存储器中的配置文件组织模式如图1所示。
如图1所示,第一部分是header,这个小的bit文件中包含同步字、下一个配置文件的地址以及iprog命令。此段必须位于flash存储器中的0地址处。该部分可由命令文件生成。第二部分是multibootbitstream,由用户的多个bit流配置文件组成,其地址可在生成mcs文件时指定到符合flash操作要求的任何地方。进行multiboot操作时只需通过icap向muhiboot逻辑控制模块发送iprog命令,之后控制模块就会根据gene ral1、general2指定的地址,加载下一个需要的配置文件。第三部分是fallback或golden配置文件,地址可由general3、general4指定。
header、multiboot配置文件、fallback配置文件在加载过程中,如果出错,fpga会根据相应寄存器的值,从配置文件的起始地址重新加载3次,加载次数的计数保存在bootsts寄存器的[15:12]位,名称为strike。
header在加载过程中分配有3个strike计数值:6、7、8。当检测到crc错误,且reset_on_error为1、strike《9,则strike计数器加1,并重新开始配置过程。若看门狗计时器超时也会触发相同操作,但此时会忽略rese_on_error的状态。若strike等于9,则停止配置,且将init和done引脚拉低。
multiboot配置文件在加载过程也分配有3个strike计数值:0、1、2。当在加载过程检测到错误时,如果strike《3且reset_on_error为1,则strike计数器加1,且从general1、general2指定的地址处重新加载配置文件。若strike计数器等于3,则触发fallback操作。
fallback或golden配置文件在加载过程也分配有3个计数值:3、4、5。当在加载工程中检测到错误时,若strike计数器值《6,则strike计数器加1,并从general3和general4指定的配置文件地址处重新加载配置文件。若strike计数器为6,则从0地址处加载header配置文件。此时,fpga会执行循环加载过程:header→multiboot→fallback(或golden)→header,每次循环都会使strike计数器加1,最多3次。若其间某
个配置文件加载成功,则停止循环,否则直到strike计数为9,停止加载过程。strike计数器只能通过复位或重启系统清零。
fallback是一种出于安全性考虑的操作。一旦该操作被触发且加载golden成功,若再想退出golden加载其他用户配置文件,只能复位fp ga或重启系统。
4 multiboot实现简例 实现multiboot操纵有两种方法:(1)基于icap的寄存器编程实现。(2)通过在生成bit流文件时,设置相关选项实现。
4.1 基于icap的寄存器编程实现
如上所述,通过icap_spartan6原语发送iprog命令,其发送命令序列如下:(1)发送同步字。(2)配置general1-general4,指定相关操作所需配置文件地址及操作码。(3)发送iprog命令。icap_spartan6原语接口定义如表7所示。
在主spi模式下,icap_spartan6的输入数据在从总线i[15:0]输入前,要进行字节范围内的位交换,即16位宽的字分为高8位1 byte,低8位1 byte,各字节的最高位[7]和最低位[0]交换,位[6]与位[1]交换,其他以此类推。
通过icap触发iprog的命令序列举例如表8所示。
iprog命令后需经过一段时间后,fpga内部才会产生相应的重配置信号,因此在iprog命令后需跟几个空操作命令,一般为4个。genera l2、general4中的操作码:0x0b、0x3b、0x6b分别为spix1、spix2、spix4。
icap逻辑模块是fpga中的专有逻辑模块,因此在生成bit文件的各源文件中必须都实例化一个icap模块。一般情况下对icap模块的控制操作通过状态机实现。
4.2 选项设置实现
实现multiboot功能所需配置的所有寄存器,均可在生成bit文件时通过添加相关的生成设置选项实现。在进程菜单中单击generate pro gramming file,选择process properties,弹出配置窗口如图2所示。
5 结束语 介绍了实现multiboot操作的两种方式,一种是基于icap的寄存器编码配置方式。可通过源代码中的注释,使后续开发维护人员阅读代码、扩展功能时思路清晰,缺点是需编写大量代码,并需对icap的操作与命令序列有一定了解。第二种通过在生成bit文时添加相关设置选项实现,方便简单,但需大量的文本注释,以便后续的开发与维护。当然,实际的应用开发过程中可同时使用这两种方法,实现更高效便捷的编码开发。

坚持iOS10.1.1越狱?你可能要付出这个代价!
射频电路PCB设计技巧
富士通将推出VR一体机 搭载RK3288芯片
电线电缆的生产过程时需要经过哪些工艺?
小米8评测 山寨的外表尿崩的续航
关于Xilinx公司出品的Spartan6系列FPGA的MultiBoot设计方案详解
iPhone8什么时候上市最新消息:iPhone8功能、价格,将采用后置指纹,面部识别!iPhone8是巅峰还是衰落?
倍加福推出带IO-Link接口的新型按钮盒
利用陶瓷滤波器3L465构成的中频信号发生器的工作原理分析
助力西部电子信息产业高质量发展,第十一届中国(西部)电子信息博览会即将启幕
“2019第九届中国上市公司口碑榜”第二阶段——大数据筛选宣告收官
无线电基本知识及对讲机型号选择详读
你的手机电池越来越不耐电?可能用了劣质电源IC充电器
同方推出新品国产整机“超越E500-ZX”:x86架构的八核心兆芯
MMC:欧洲四成AI创业公司并没有应用AI技术
广凌课室管控平台 | 这才是课室管控该有的样子!
数之能·变电所监控运维平台的功能特点
苹果ios15系统特点
西部这城市新增一家传感器企业 年产值可达10亿元!
迈瑞医疗如此大手笔进军骨科, 究竟剑指何方?