FPGA多版本程序加载方法与流程

文档序号:26003598发布日期:2021-07-23 21:21阅读:1218来源:国知局
FPGA多版本程序加载方法与流程

本发明涉及一种航空机载平台领域,通过利用icap3控制实现fpga多版本程序加载方法。



背景技术:

现场可编程门阵列fpga是通过逻辑组合电路来实现各种功能的器件。由于fpga内部集成了大量的逻辑资源和可配置的i/o引脚,加上独特的并行处理架构,可以轻松实现同时对多个外部设备的配置和管理,以及内外各种接口数据的传输。由于fpga程序编写的灵活性和功能的多样性,使得它在一个复杂工程中对各个程序的使用调度、统筹管理上有很大的局限性,这样就必须引入操作系统进行统一的管理。fpga是基于静态随机存取存储器(sram)编程的,在系统断电时sram上存储的fpga的程序数据会丢失。fpga在系统上电时,需要从外部载入所要运行的程序,此过程被称为程序加载。fpga芯片有jtag模式,串行从模式,串行主模式,并行从模式和并行主模式五种加载方式。jtag模式常用于调试时,将主机综合好的程序加载到fpga,优先级高于其他几种模式。其他加载模式取决于fpga上加载模式管脚(m0,m1,m2)的设置。用外部处理器给fpga加载程序时,可以采用串行从模式、并行从模式,甚至于jtag模式。由于其易失性,每次上电后都需要重新对fpga进行加载。多数情况下,fpga从外部专用的eprom读入程序。这种方式速度慢,而且只能加载固定的程序。fpga有多种配置/加载方式。粗略可以分为主动和被动两种。主动加载是指由fpga控制配置流程,被动加载是指fpga仅仅被动接收配置数据。最常见的被动配置模式就是jtag下载bit文件。此模式下,主动发起操作的设备是计算机,数据通路是jtag,fpga会被动接收数据,根据需要的操作来进行更新fpga配置。不管是哪种配置模式,配置数据都是存储在fpga中的cmos锁存器中,每次掉电后数据都会丢失,上电之后重新配置。随着fpga产品的更新换代,xilnxultrascale系列fpga芯片的资源相比近年来主流的kintex、virtex7系列fpga芯片有了数倍的提升。使得以前多个fpga硬件模块实现的几种功能放在一片fpga上变为了可能。随着fpga技术的快速发展,fpga集成的逻辑资源越来越多,随之而来的是fpga的配置文件越来越大。可以预见,随着技术发展,以后高端fpga配置文件会更大。配置文件的增大,直接导致fpga加载时间的大量增加。

使用功能强大的ultrascale系列fpga芯片作为fpga硬件板卡的主流配置芯片,将多个fpga芯片完成的功能放在一片ultrascale系列的fpga芯片上,从硬件设计角度来说,并不会带来硬件板卡设计的复杂性。但是采用ultrascale系列fpga芯片实现多个fpga硬件板卡才可以实现的功能,所需要存储的fpga程序版本相比单个kintex、virtex7系列fpga芯片要多很多。

随着半导体工艺的进步,fpga芯片的容量越来越大,对外部配置flash的容量要求也越来越高;flash作为fpga上电的配置芯片,其加载数据的大小影响着fpga的上电配置时间,大容量的fpga芯片意味着需要花更多的时间完成加载,传统的串行加载的方式已经满足不了系统对加载时间的苛刻要求,bpi(byte-wideperipheralinterface)flash采用并行(8bit、16bit)方式为fpga提供上电加载数据,大大地缩短了fpga的加载时间,因此,也越来越多地在工程中被采用。在很多的实际工程中,由于所处的应用环境不同,需要fpga在不同的环境下实现不同的功能,此时需要fpga芯片自身能够动态地更新加载flash中的内容,并完成自身配置数据的重加载,该过程就是fpga的可重构能力。目前主流的bpiflash存储量普遍在64mbyte~256mbyte之间。单个bpiflash芯片很难满足存储ultrascale系列fpga芯片多程序版本的需要。例如,原设计中3个fpga硬件板卡,每个fpga硬件板卡包含一片fpga芯片,每个fpga芯片需要一个bpiflash芯片,每个fpga芯片由3个程序版本组成。现在使用一片ultrascale系列的fpga芯片实现上述3个fpga芯片的功能,对应的程序版本最多可达27个。目前基于bpiflash的fpga存储空间划分方法,都是通过控制bpiflash的高位地址,将flash划分为2,4,8等大小相等的2n份。版本的划分必须以满足存储最大的fpga版本文件为前提条件,单个ultrascalefpga程序bin文件大小一般在6mbyte~46mbyte,假设选用256mbyte大小的flash,单个flash只能划分成4个存储空间。要存储27个程序版本,就需要7片256mbyte大小的flash。用于存储xilinxfpga程序的bpiflash,通过impact烧写时,文件格式是mcs或者bin文件。而mcs或者bin文件很大,烧写很慢,时间会多达几十分钟。

上述虽然可以通过选用大容量的ultrascale系列fpga芯片使得硬件板卡由3块减少为1块。但是要在1个硬件板卡上放置7片bpiflash芯片,一方面会使得硬件板卡成本大幅提高;另一方面会带来硬件板卡pcb布线复杂度大幅提升、难以实现。随着通信系统复杂度的提高,fpga配置文件越来越大,加载时间越来越长,严重影响系统的启动时间。



技术实现要素:

本发明的目的是针对现有技术存在的不足之处,提供一种硬件成本低,软件实现简单,容错能力强,可靠性加载效率高,fpga程序版本存储灵活性高的fpga多版本程序加载方法,以减少实际应用中对flash存储空间的浪费,从而降低fpga硬件板卡成本。

本发明的上述目的可以通过以下措施来达到,一种在线加载fpga多版本程序的方法,其特征在于:采用msu模块连接现场可编程逻辑门阵列fpga和复杂可编程逻辑器件cpld组成一个fpga程序加载控制单元,外部存储器选用两片相同大小的bpiflash芯片作为ultrascale系列fpga的配置芯片,每片flash划分一个8mbyte大小的空间,存储具备在线更新flash与内部访问配置接口icap3软件引导能力的fpga基础版本程序;cpld选择多片flash及flash内部区块,通过最高位地址划分成2个相同大小的存储空间,对需要存储的所有fpga版本程序bin文件按照大小进行排序,按照flash块空间利用率尽可能高的方式对bin文件进行组合;两片flash芯片通过片选ce进行选择,实现大于4个以上程序版本的连续存储,后一个版本的起始地址以一个新的flash扇区首地址开始;单个flash区块内不同程序版本加载采用ultrascale系列fpga内部访问配置接口icap3(internalconfigurationaccessport)实现;msu模块向cpld下发程序版本加载指令,cpld加载fpga基础版本程序;msu向fpga注入待加载程序版本配置信息,通过icap3控制单元设置热启动地址wbstar(warmbootstartaddress),然后启动软件复位iprog(internalprogram_b)命令,使flash从设定的wbstar地址起始处进行功能程序版本加载,在每片flash首个区块的首地址处,存储通过jtag方式在线烧写fpga基础版本程序,其它功能版本程序的固化采用在fpga基础版本程序在线更新方式实现。

本发明相比现有技术方法的有益效果是:

硬件成本降低。本发明采用msu模块连接现场可编程逻辑门阵列fpga和复杂可编程逻辑器件cpld组成一个fpga程序加载控制单元,外部存储器选用两片相同大小的bpiflash芯片作为ultrascale系列fpga的配置芯片,每片flash划分一个8mbyte大小的空间,存储具备在线更新flash与内部访问配置接口icap3软件引导能力的fpga基础版本程序。这种选用大容量的ultrascale系列的fpga芯片作为fpga模块主要配置芯片,把原有设计中多个fpga硬件板卡完成的功能放在一个大容量的fpga硬件板卡中,通过icap3软件加载引导方式动态加载fpga功能版本程序,最大化利用flash存储空间,有效提高了flash存储空间的利用率,减少了fpga多版本程序所需的flash数量,使得硬件系统的成本显著降低。

软件实现简单。本发明采用cpld选择多片flash及flash内部区块,通过最高位地址划分成2个大小的存储空间,对需要存储的所有fpga版本程序bin文件按照大小进行排序,按照flash块空间利用率尽可能高的方式对bin文件进行组合,fpga程序版本存储灵活性有效提高;通过msu在线下发程序版本加载指令,只需要在flash中划分一个8mbyte大小的空间用于存储具备icap3软件引导能力的fpga基础版本程序,就可以接收外部msu输入的软件程序版本加载指令,引导加载所需要的fpga软件程序版本。这种借助系统内原有的可编程逻辑器件cpld+msu单元实现fpga多版本程序加载的方式,不需要额外增加控制单元,易于软件实现,操作简单。

容错能力强。本发明采用两片flash芯片,通过片选ce进行选择,实现大于4个以上程序版本的连续存储,后一个版本的起始地址以一个新的flash扇区首地址开始;单个flash区块内不同程序版本加载采用ultrascale系列fpga内部配置访问接口icap3实现,实现了通用fpga多版本配置程序文件的管理,并可根据执行不同的系统任务功能加载对应的功能程序版本。经工程实际验证,相比于传统加载fpga配置文件方法,该技术能显著提高fpga配置文件加载速度,增强fpga板卡在系统使用中的通用性和灵活性。msu模块向cpld下发程序版本加载指令,加载fpga基础版本程序;向fpga注入待加载程序版本配置信息,通过icap3控制单元设置热启动地址wbstar,然后启动软件复位iprog命令,使flash从设定的wbstar地址起始处进行程序版本加载。通过使用xilinx官方提供icap3接口,把具备icap3软件加载引导能力的程序单独作为一个基础版本程序使用,占用的fpga内部逻辑资源少,时序收敛更容易。同时,由于要实现flash多版本程序存储,该基础版本程序还要具备实现flash在线更新的能力。在接收外部msu下发在线更新指令时,通过在基础版本程序中加入指令检测措施,过滤非法更新指令,有效避免了误操作或者程序在线更新失败导致具备在线更新能力的基础版本程序被破坏的可能,克服了无法再次完成flash在线更新操作的缺陷。

可靠性加载效率高。本发明通过msu外部下发待加载版本配置信息方式向icap3控制单元写入配置信息,设置热启动地址wbstar,然后启动软件复位iprog命令,使flash从设定的wbstar地址起始处进行程序版本加载。在flash首个区块的首地址处,通过jtag边界扫描方式在线烧写具有icap3加载引导程序的fpga基础版本程序,其它版本程序的固化采用在fpga基础版本程序在线更新方式实现。通过验证,该方法既能能提高fpga加载效率,又能节省cpu和fpga的gpio管脚,降低了系统启动时间,可靠性也随之提高,非常适用于现代复杂通信系统。

附图说明

下面结合附图和具体实施方式对本方法进一步说明。

图1是本发明fpga多版本程序加载方法原理示意图;

图2是图1cpld加载处理流程图;

图3是图1fpga加载处理流程图;

图4是图1cpld上报加载结果流程图。

具体实施方式

参阅图1。根据本发明,采用msu模块连接现场可编程逻辑门阵列fpga和复杂可编程逻辑器件cpld组成一个fpga程序加载控制单元,外部存储器选用两片相同大小的bpiflash芯片作为ultrascale系列fpga的配置芯片,每片flash划分一个8mbyte大小的空间,存储具备在线更新flash与内部访问配置接口icap3软件引导能力的fpga基础版本程序;cpld选择多片flash及flash内部区块,通过最高位地址划分成2个相同大小的存储空间,对需要存储的所有fpga版本程序bin文件按照大小进行排序,按照flash块空间利用率尽可能高的方式对bin文件进行组合;两片flash芯片通过片选ce进行选择,实现大于4个以上程序版本的连续存储,后一个版本的起始地址以一个新的flash扇区首地址开始;单个flash区块内不同程序版本加载采用ultrascale系列fpga内部访问配置接口icap3(internalconfigurationaccessport)实现;msu模块向cpld下发程序版本加载指令,cpld加载fpga基础版本程序;msu向fpga注入待加载程序版本配置信息,通过icap3控制单元设置热启动地址wbstar(warmbootstartaddress),然后启动软件复位iprog(internalprogram_b)命令,使flash从设定的wbstar地址起始处进行功能程序版本加载,在每片flash首个区块的首地址处,存储通过jtag方式在线烧写fpga基础版本程序,其它功能版本程序的固化采用在fpga基础版本程序在线更新方式实现。在采用fpga+msu+cpld组成一个fpga程序加载控制单元中,flash1中存储fpga基础版本、功能版本1_1、功能版本1_2…功能版本1_n;flash2中存储fpga基础版本、功能版本2_1、功能版本2_2…功能版本2_m。

本实施例中,采用256mbyte大小的flash进行说明(flash容量不限于256mbyte大小)。每片flash通过最高位地址划分成2个128mbyte大小的存储空间(把256mbyte大小的flash划分成2个128mbyte是因为下面选用icap3控制端口最大可实现128mbyte大小的flash空间访问)。两片flash芯片通过片选ce进行选择,可实现4个128mbyte大小的存储空间。要实现4个以上程序版本的存储,不能按照传统设计中单个128mbyte大小的存储空间存储一个程序版本,而应以连续存储的方式进行。由于通过jtag连接pc机在线烧写flash的方式,无法对单个flash区块空间中的局部地址进行访问,只适合烧写以flash区块首地址开始的软件程序版本。要对flash区块首地址以外的软件程序版本烧写,必须采用在线更新方式进行。多程序版本连续存储,后一个版本的起始地址必须以一个新的flash扇区首地址开始,这样做是为了避免前后两个程序版本在同一个flash扇区内部粘连。一旦出现粘连情况,就会使得程序版本在线更新情况下,执行扇区擦除指令后,前一个程序版本部分内容被擦除,从而导致前一个程序版本完整性被破坏。以flash在线更新+连续存储的方式解决单个flash区块中多个程序版本存储的问题。通过msu模块向icap3写入待加载程序版本配置信息,设置热启动地址wbstar,然后执行软件复位iprog启动命令,使flash从设定的wbstar地址起始处进行程序版本加载,单个flash区块内不同程序版本加载采用ultrascalefpga内部配置访问接口icap3实现。

在每片flash首个128mbyte区块的首地址处,通过jtag方式在线烧写同时具有icap3软件加载引导能力与在线更新flash程序能力的fpga基础版本程序,其它版本程序的固化采用在fpga基础版本程序在线更新的方式实现。

在硬件板卡上电后,默认启动fpga基础版本程序。通过外部msu模块向fpga基础版本程序注入待加载程序版本配置信息,通过icap3控制单元设置热启动地址wbstar,以软件复位iprog启动方式,将flash中对应wbstar地址开始的程序版本加载到fpga内部运行。单个fpga基础版本程序大小在8mbyte之内,通过jtag在线烧写的方式存储在flash每片flash首个128mbyte内的0~8mbyte空间,占用8mbyte,剩余120mbyte。对需要存储的所有fpga版本程序bin文件按照大小进行排序,按照flash块空间利用率尽可能高的方式对bin文件进行组合。这样除fpga基础版本程序之外,剩下的2个120mbyteflash区块空间和2个128mbyteflash区块空间,按照bin文件8mbyte~46mbyte进行估算,还可以存储22~62个fpga功能程序版本bin文件。

fpga包含分别通过加载数据帧load_packet、加载数据帧响应load_response连接的数据解析单元和加载回传单元。数据解析单元通过加载数据load_data顺次连接swap转换单元和icap3控制单元。数据解析单元对收到的加载数据帧load_packet帧类型进行有效性确认,若数据帧类型无效,则输出加载数据帧错误load_data_error信号至加载回传单元,上报msu加载数据帧load_packet帧类型无效;若数据帧类型有效,则将解析出来的加载数据load_data输出至swap转换单元,将转换后的icap3控制数据icap_data输出至icap3控制单元。icap3控制单元按照icap_data中的热启动地址load_addr控制flash区块中对应功能版本程序动态加载。

cpld包括cmd解析单元连接的flash块选择单元和cmd响应回传单元、功能版本加载回传单元。若cmd解析单元解析出加载指令load_cmd无效,则通过cmd响应回传单元向msu上报加载指令响应load_cmd_response指令有误。若load_cmd有效,则进行当前fpga内部运行程序是否fpga基础版本程序的判定,若是fpga基础版本程序,cmd解析单元输出要加载的功能版本对应flash片选ce_sel以及高位地址high_addr到flash块选择单元;flash块选择单元设置flash片选flash1_ce或flash2_ce以及flash高位地址flash_high_addr,并通过cmd响应回传单元向msu上报加载fpga基础版本指令响应load_cmd_response成功,置fpga基础版本加载成功信号load_base_done有效。cmd响应回传单元启动功能版本加载结果回传单元工作,监控功能版本是否加载成功,将加载结果通过功能版本加载结果回传单元生成的响应load_func_version_response上报msu。若当前fpga内部运行程序不是fpga基础版本程序,则先切换至fpga基础版本程序,再设置对应的flash高位地址flash_high_addr。

参阅图2。cpld在上电后,cpld加载处理流程在复位完成后进入初始状态,监测来自msu的数据输入,送至cmd解析单元。确认加载指令load_cmd是否有效,若load_cmd指令无效,则通过cmd响应回传单元上报msu加载指令load_cmd无效,返回初始状态;若load_cmd指令有效,则进行当前运行的fpga程序是否存储在待加载功能版本所在flash区域判定,若当前运行的fpga程序是存储在待加载功能版本所在flash区域,再进行当前运行的fpga程序是否为基础版本程序判定;若当前运行的fpga程序是基础版本程序,则通过flash块选择单元设置flash高位地址high_addr指向功能版本所在flash区块空间,并通过cmd响应回传单元上报msufpga基础版本程序加载成功,若当前运行的fpga程序不是存储在待加载功能版本所在flash区域,则在设置要待加载功能版本对应的flash片选ce后,设置flash高位地址high_addr指向基础版本程序对应的所在flash区块空间;设置fpga复位信号prog_b有效,在fpga初始化信号init有效后,置prog_b无效。若在设定的超时时间内fpga启动信号done有效,则设置flash高位地址high_addr指向待加载的fpga功能版本程序对应的flash区块空间,通过cmd响应回传单元上报msufpga基础版本程序加载成功;在设定的超时时间内,fpga启动信号done一直无效,通过cmd响应回传单元上报msufpga基础版本程序加载失败;当前运行的fpga程序是存储在待加载功能版本所在flash区域,但是当前运行的fpga程序不是基础版本程序,设置flash高位地址high_addr指向基础版本程序对应的所在flash区块空间,设置fpga复位信号prog_b有效,在fpga初始化信号init有效后,置prog_b无效;若在设定的超时时间内fpga启动信号done有效,则设置flash高位地址high_addr指向待加载的fpga功能版本程序对应的flash区块空间,通过cmd响应回传单元上报msufpga基础版本程序加载成功;若在设定的超时时间内,fpga启动信号done一直无效,通过cmd响应回传单元上报msufpga基础版本程序加载失败;msu在收到cmd响应回传单元回传的加载指令load_cmd_response成功,向fpga发送加载数据帧load_packet。

参阅图3。fpga在上电后,fpga加载处理流程在复位完成后进入初始状态,监测来自msu的数据输入,送至数据解析单元,对接收到加载数据帧load_packet进行帧类型判定。若load_packet帧类型无效,则通过加载回传单元上报msu加载数据帧load_packet帧类型错误;若load_packet帧类型有效,则数据解析单元将解析出来的加载数据load_data输出至swap转换单元。swap转换单元对加载数据load_data字段按照icap3接口要求的数据格式进行字节位序转换,直到所有加载数据load_data字段数据转换完毕,将转换后的数据icap_data输出至icap3控制单元执行icap指令。在执行iprog_b软复位指令后,fpga内部的程序被清除,将flash中对应的功能程序版本加载至fpga内部运行。

参与图4。cpld在上电后,cpld上报加载结果流程在复位完成后进入初始状态,监测来自cmd响应回传单元输出的基础版本加载成功load_base_done信号是否有效,是则转到检测fpga启动信号done的上升沿是否产生,若在设定的超时时间内fpga启动信号done上升沿产生,则通过功能版本加载结果回传单元上报msu功能版本加载成功;若load_base_done信号无效,则返回初始状态;若在设定的超时时间内,fpga启动信号done上升沿一直未产生,则通过功能版本加载结果回传单元上报msufpga功能版本程序加载失败。

以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和原则下,所作的任何修改、等同替换、改进等,均包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1