一种基于EPCS Flash的远程在线更新FPGA程序方法
我们知道FPGA即现场可编程门列阵(Field Programmable Gate Array,FPGA)器件,是一种可以编程的功能强大的逻辑器件。具有高效性、可靠性以及低功耗等特点。那么本文将介绍一种基于EPCS flash的远程在线更新FPGA程序的方法。
FGPA概述
现在FPGA在航空、通信以及工业上得到了大量的应用,它的处理器分为两种:软核和硬核。而软核处理器相对于具有较高的灵活性以及可配置性。由于FPGA使用的是SRAM工艺,所以在断电的时候FPGA内的配置数据将会丢失,所以需要使用不容易丢失的存储器来结合FPGA完成嵌入式系统设计。
如果FPGA的软硬件程序的更新以及升级程序都很方便,这能使系统得到更加灵活的运用并充分的发挥FPGA的灵活性等特点。但是在形成产品之后,对EPCS(属于串行接口flash,具有接口简单、体积小、配置方便的特点) Flash更新要通过JTAG以及NiOSII IDE工具的联合完成会很不方便。但是通过一种有Altera公司提供的工具,我们可以找到一种远程在线更新FPGA配置文件和NiosII程序文件的方法。
简单说一下:EPCS Flash通常会用来存储FPGA的配置文件以及NiosII的软件执行代码。 在经过合理的配置后,系统在通电之后就可以从EPSC中读取这些文件直接启动整个系统。
在了解远程更新FPGA的方法之前我们先来看看系统的硬件结构
系统中主要有上位机系统、FPGA系统、EPCS Flash三个主要部分。
上位机系统:主要提供了人机交互的部分,上位机系统通过FPGA集成的网络以及串行接口完成通信的工作。
FPGA系统:它包括了NIosII处理器、EPCS控制器以及串行接口和其他外部接口。上面有说到它采用了
Altera公司的工具CycloneIII系统的EP3C40F48417N芯片。这个芯片具有低功耗、高集成、使用简单的特点。
EPCS Flash:主要是存储FPGA的配置文件以及Nios程序映像文件,采用Altera公司的EPCS16SI16N芯片。可以支持多种可配置资源的时钟源,最高支持100MHz的外部时钟源,并具有16Mb的存储空间。16Mb的存储空间已经足够满足一般的FPGA配置文件和Nios程序文件的存储需要。
程序更新的处理流程
在更新FPGA的配置文件以及NiosII的应用程序的时候,流程图如下:
在把NiosII程序和由NiosII IDE生成的FPGA配置文件合并之后,将之编程为一个可以直接被执行的并且包含FPGA配置文件和NiosII程序文件的二进制BIN文件。通过X-modem协议由上位机将这个BIN文件传输给NiosII的应用程序。然后NiosII应用程序会把BIN文件写入到EPCS Flash中。在NiosII应用程序停止看门狗之后,程序会自动启动,这样子就完成了FPGA的远程在线更新程序的过程。如果在程序传输过程中出现错误,更新程序模块能够通过设置超时来退出更新程序的状态。
简单说一下:
X-modem协议是一种网口和串口通信中广泛用到的异步传输协议。
由于EPCS Flash中的串行配置器定义了一种特殊的读写协议,所以NIosII想要对Flash进行读写只能通过Altera提供的HAL API来完成。
打开关闭Flash使用API:alt flash open_dev()和alt_flash_close_dev()。
操作Flash读写使用的API:alt_read_flash()和alt_write_flash_block()。
清除Flash的API:alt_erase_falsh_block()。
下面详细讲一下程序文件的合并
首先,NiosII的启动要经历两个过程:第一、FPGA器件本身的配置过程。在内部逻辑中如果使用了NiosII,那么配置完成的FPGA中也会包含有NIosII软核CPU。第二、NIosII本身的应用过程。在FPGA配置完成以后NIosII就会被逻辑中的复位电路复位,并从reset地址开始执行代码。
会在NIosII IDE中转换成Flash文件,转换后的Flash文件是一种S-Record格式数据,并包含以下的区域:
tpye:表示记录的类型。
length:表示数据的长度。
adress:表示数据写入的起始地址,该字段的长度取决于的取值。
data:表示存储的数据。
checknum:表示校验位。
配置文件和应用程序都可能拥有多个段,而这些段的前面都会插有一个“程序记录”。“程序记录”由一个32位的整数和一个32的地址所构成。前者表示程序段本身的长度而后者表示的是程序段运行时的地址。存储布局如下:
#p#分页标题#e#
上文说道要实现FPGA远程更新的方法第一个先要把FPGA配置文件和Nios II应用程序合并成一个文件,并且把合并后的Flash格式的文件转换成不需要地址解码就能直接执行的二进制BIN文件。具体合并的流程如下图:
Flash文件中的长度、目的地址等用于解析程序的信息会在合并成的时候会被去掉,并且程序映像转换为二进制格式。合并后的BIN文件包含FPGA配置文件和NiosII应用程序,并且NiosII应用程序紧挨在FPGA配置文件的后面,其存储布局如图:
NIosII更新程序流程
在NIosII应用程序接收并合并BIN文件之后,处理的流程如图:
文中提出了一种提高FPGA远程更新程序的方便方法,而这种方法是基于EPCS Flash的远程在线更新FPGA程序的。所以能更加方便的对EPCS的应用产品进行维护和升级。总的来说FPGA使用非常灵活,但是前提是你能掌握FPGA的使用。所以学习FPGA的朋友就要多多加油了。