行情
HOME
行情
正文内容
fpga固化nand flash 基于Flash控制器的FPGA在线加载功能设计
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

基于Flash控制器的FPGA在线加载功能设计

近些年来,由于其灵活可配置性及成本的降低,现场可编程门阵列(Field Programmable Gate Array,FPGA)在嵌入式系统中应用越来越广泛,不论产品的初期研发或是后期维护都不可避免地需要频繁更新FPGA程序。传统的JTAG方式更新FPGA程序的方式是通过开发软件将需固化的文件写入Nor Flash器件。当系统很复杂且需要更新的FPGA数量较多时,JTAG方式更新FPGA程序则费时费力且还需拆结构。若在FPGA内部通过逻辑代码搭建一Flash控制器实现对Flash器件的读写操作,即可并行实现系统内每片FPGA对配置文件的在线更新,大大缩短程序固化时间。本文依托于Xilinx公司的FPGA和Spasion公司的Nor Flash,详细介绍了Flash控制器设计和在线加载功能的实现方法。

1 FPGA配置方式

以Xilinx Virtex6 系列FPGA为例,对配置文件的加载方式有串行Flash、并行Flash、JTAG方式等,其中最常用的是并行Flash方式(Byte Peripheral Interface Parallel Flash Mode,BPI),其配置模式如图1所示。

一种实际的FPGA与Nor Flash硬线连接方式如图2所示。

无论是通过JTAG方式还是通过软件操作实现程序更新,都是通过控制这些读写使能信号及地址线实现配置文件的写入,FPGA掉电重启之后再从Flash取出配置数据从而实现加载。本文提出的FPGA在线更新程序的方式则是通过FPGA控制逻辑驱动Flash的数据和地址,从而为多块FPGA并行更新程序的实现提供了前提。

2 Flash控制器设计

Flash器件的基本操作包括读、写、擦除等,这些操作都是通过向相应的命令寄存器写入特定的指令来实现的,这些指令的写入通过操作与FPGA相连的片选信号(ce_n)、写使能信号(we_n)、读使能信号(oe_n)、地址总线(addr[23:0])和数据总线(dq[15:0])实现。

以目前市场上常用的Spasion公司的S29GL-P系列Nor Flash为例,通过FPGA实现的控制器外部接口如图3所示。

其中,start信号用于启动控制器模块对Flash器件实现读写操作,在启动之前,须先告知Flash配置文件大小和配置文件在Flash存储空间的首地址;data_req、data_in和rd_data_count信号用于与一前端FIFO实现数据交互,配置文件先缓存到FIFO中,然后由控制器负责取出并写入Flash器件;config_status信号用于指示程序更新是否完成。

该Flash控制器按时间上的先后顺序分别实现了对Flash器件的读ID、擦除和写缓冲操作,下面将分别进行简要叙述。

每次对Flash进行基本的读写操作之前,会对Flash芯片进行读ID操作以检验器件的好坏,读ID涉及的主要操作为向特定寄存器写入相应的解锁指令,然后再进行多操作读出相应的寄存器值,其时序图及读结果如图4所示。

确认了芯片ID无误,即可进行正确访问,首先对Flash芯片进行擦除操作。Flash芯片擦除可分为两种:整片擦除和扇区擦除。由于实际使用时并未用到整块Flash存储空间,而是根据配置文件的大小选择合适的扇区大小存储配置文件,所以设计中采用的是扇区擦除方式,时序如图5所示。

当成功写入擦除操作指令之后,芯片会进入一个较长的周期等待擦除操作的完成,该期间无法对芯片进行复位之外的其他操作。

完成了擦除操作之后,即可向Flash写入配置数据,其对应的写缓冲时序如图6所示。

擦除和读写的过程中,地址将进行自动累加且起始地址可变。Flash的写操作可为单字写和缓冲写两种,由于缓冲写最大一次可向Flash写入32个字,为了最大化写入速度,选择缓冲写方式;Flash的读操作分为单字读和按页读两种,由于Flash读数据速率较高且系统对读速率没有太高要求,本文选择单字读方式。

3 工程应用及性能测试

以一实际项目工程为例,系统中具有10块FPGA进行程序更新,其在线加载功能系统架构如图7所示。

系统主控CPU运行在Linux系统下,CPU通过以太网与远程计算机进行通信调试,同时通过PCIE或SRIO高速总线向每块FPGA下发配置数据,最后再由Flash控制器完成数据的写入。如前文所述,一次写缓冲操作的数据量为32个字,而配置文件的大小有可能不是32个字的整数倍,所以还需要应用软件对配置文件进行补齐操作。单个FPGA在线加载流程简要叙述如图8所示。

更新单块FPGA程序时,以一实际测试的3.47 MB大小的配置文件为例,经FPGA在线更新程序固化的时间和使用ISE14.7软件JTAG方式固化的时间如表1所示。

Flash芯片手册中给出的典型擦除和写缓冲时间分别0.5 s和480 μs,则可计算出理论上3.47 MB大小的文件固化所需的典型时间约为41 s。由于器件等因素影响,实测时用时往往大于该时间,但总体来说,使用在线更新方式的耗时要比用JTAG方式耗时更少。

而当更新系统中的10块FPGA时,由于每块FPGA均可同时进行在线更新操作,程序固化所消耗的时间与单块FPGA程序更新时间开销大致相当,可见并行在线更新方式相较于传统JTAG方式无疑可以大大缩短时间。

4 配置文件不断电加载和备份方法

每次更新完配置之后,通常做法是对FPGA进行断电重启实现重新加载,但工程应用时断电可能会影响系统其他模块的正常工作。为使FPGA在不断电的情况下自动加载更新完的配置程序,可通过配置FPGA芯片的PROGRAM_B信号来实现,BPI模式下的时序如图9所示。

考虑到若在配置过程中FPGA发生断电等异常,则Flash中的配置文件损坏,FPGA将无法实现加载,需要重新使用JTAG方式烧写配置文件。为防止该种情况发生,可分配Flash的一块区域用于备份配置文件,发生FPGA无法正常加载的异常时,可读取该备份配置文件实现FPGA再次正常加载,但前提是该部分Flash存储空间预先固化了带有FPGA在线更新功能的程序。

5 结论

本文利用FPGA逻辑设计了一款Flash控制器,实现了FPGA在线更新功能,由于FPGA直接操作Flash,因此相比传统FPGA程序更新方法具有更新速度快、硬件电路精简、易于系统集成等优点,同时能够实现复杂系统多块FPGA并行更新程序,大大节省了程序固化时间,便于项目前期开发及后期排故调试。

参考文献

[1] Xilinx UG360,Virtex-6 FPGA configuration user guide[EB/OL].[2015-11-18].http://www.xilinx.com.

[2] Spansion.S29GL-P MirrorBit Flash family datasheet[EB/OL].[2009-11-20].http://www.spansion.com.

[3] 于乐,王嘉良.易于移植的FPGA在线更新控制器设计[J].航空电子技术,2015(4):47-50.

[4] 杨鹏.基于Linux系统的FPGA芯片在线加载的设计和实现[J].电子设计工程,2015(6):161-164.

作者信息:

林天静,阮 翔,刘 春

(中国电子科技集团第52研究所,浙江 杭州310000)

「精品博文」勇敢的芯伴你玩转Altera FPGA连载14:FPGA下载配置电路

上世纪八十年代,联合测试行为组织(Joint Test ActI/On Group,简称JTAG)制定了主要用于PCB和IC的边界扫描测试标准。该标准于1990 年被IEEE 批准为IEEE1149.1-1990 测试访问端口和边界扫描结构标准。随着芯片设计和制造技术的快速发展,JTAG越来越多的被用于电路的边界扫描测试和可编程芯片的在线系统编程。

FPGA器件都支持JTAG进行在线配置,JTAG边界扫描的基本原理如图2.11所示。在FPGA器件内部,边界扫描寄存器由TDI信号作为数据输入,TDO信号作为数据输出,形成一个很大的移位寄存器链。而JTAG通过整个寄存器链,可以配置或者访问FPGA器件的内部逻辑状态或者各个I/O引脚的当前状态。

图2.11 JTAG边界扫描原理

在这里我们不过多的研究JTAG的原理。对于电路设计来说,JTAG的四个信号TCK/TMS/TDI/TDO(TRST信号一般可以不用)以及电源、地连接到下载线即可。

说到FPGA的配置,这里不得不提一下他们和CPLD内部存储介质的不同。CPLD由于大都是基于PROM或Flash来实现可编程特性,因此对他们进行在线编程时就已将配置数据流固化好了,重新上电后还能够运行固有的配置数据。FPGA大都是基于SRAM来实现可编程特性,换句话说,通过JTAG实现在线编程时,在保持不断电的情况下,FPGA能够正常运行,而一旦掉电,SRAM数据丢失,FPGA则一片空白,无法继续运行任何既定功能。因此,FPGA通常需要外挂一个用于保存当前配置数据流的PROM或Flash芯片,我们通常称之为“配置芯片”,CPLD则不需要。

因此,对于FPGA器件,我们若希望它产品化,可以脱机(PC机)运行,那么就必须在板级设计时考虑它的配置电路。也不用太担心,其实FPGA厂商的器件手册里也会给出推荐的配置芯片和参考电路,大多情况下依葫芦画瓢便可。当然了,板级设计还是马虎不得的,有几个方面是需要注意的:

●配置芯片尽量靠近FPGA。

●考虑配置信号的完整性问题,必要时增加阻抗匹配电阻。

●部分配置引脚可以被复用,但是要谨慎使用,以免影响器件的上电配置过程。

FPGA配置电路的设计是非常重要的,相关信号引脚通常都是固定并且专用的,需要参考官方推荐电路进行连接。

如图2.12所示,这是FPGA下载和配置的示意图。在图2.12的左侧,DC10插座将FPGA器件的JTAG专用引脚TCK、TMS、TDI、TDO引出,通过USB-Blaster下载器可以连接这个DC10插座和PC机,实现从PC机的Quartus II软件到FPGA器件的在线烧录或配置芯片(SPI FLASH)的固化。而在图2.12的右侧,一颗SPI FLASH作为FPGA器件的配置芯片,FPGA器件的固化代码可以存储在这颗SPI FLASH中,当FPGA器件每次上电时,都会直接从SPI FLASH中读取固化代码并运行。

图2.12 FPGA下载和配置示意图

为了实现上述图2.12的配置电路正常工作,我们还需要如图2.13所示,将MSEL0/MSEL1/MSEL2引脚分别连接到GND/2.5V/GND,这是设定FPGA器件在上电后直接进入AS配置模式,即从SPI FLASH的固化代码启动运行。需要额外说明的是,无论MSEL0/MSEL1/MSEL2引脚如何设置,当JTAG在线配置FPGA时,FPGA器件都会优先运行JTAG最新烧录的代码。CONF_DONE\nCONFIG\nSTATUS三个信号则分别上拉到3.3V,同时nCONFIG连接按键S17,可以通过这个按键使FPGA器件重新加载配置代码。

图2.13 FPGA配置引脚连接电路

相关问答

fpga 怎么从 flash 启动?

在FPGA中,从Flash启动通常需要以下步骤:将FPGA的配置文件生成并存储在Flash芯片中。在FPGA启动时,读取Flash中的配置文件,并将其加载到FPGA的配置寄存器中...

fpga 的bin文件如何加载到 flash 中?

把电脑打开,把文件设置的数目,设置的,下载的。下载进去就报,这上密码就妥了。把电脑打开,把文件设置的数目,设置的,下载的。下载进去就报,这上密码就妥了。

fpga 和cpld什么区别,哪个更强大一些,谢谢了?

1、FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)....

FPGA 芯片上的程序如何擦除?

FPGA芯片上的程序擦除可以通过多种方法实现,其中最常见的是通过使用专门的擦除工具或者编程器来进行操作。这些工具可以将芯片内的存储单元重新编程,将原有的...

fpga 基于什么可编程结构?

尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时...

从altera转xilinx容易吗?

从altera转xilinx容易。Xilinx把基于查找表、SRAM工艺、要求外挂配置用EEPROM的PLD叫FPGA,把基于乘积相、FLASH(类EEPROM)工艺的PLD叫CPLD。Alter...

fpga 中分布式ram描述正确的是?

FPGA内部的RAM分为两部分,一部分就是你的分布式的RAM,用于LUT,还有一种是块ram(BLOCKRAM)是一块用于存储数据的专用RAM,也就是你的系统设计中需要用到容量...

XC5VLX50TFPGA的配置 flash 能用XCF32P的吗?

5VLX50T是容量很小的FPGA,不需要XCF32P那么大容量。你在数据手册里查下50T的配置数据多大,比如10M,那就选XCF16,16M的flash。XCF32是32M的flash。可以用的,...

中国的紫光和中芯国际,两家公司的区别是什么?都是研制芯片的么?

总结最后,值得一提的是,紫光集团也入股了中芯国际,是中芯国际的大股东,双方共同组成集设计、封装测试、制造生产于一体的完整集成电路产业链,为中国“芯”...虽...

fpga 内部 flash ,只有1k,1k大概能写几千行代码?-ZOL问答

lenghun01这个与你代码长度基本无关,综合编译工具会将代码映射为硬件链接,而不是像单片机那样的需要单条指令取指执行,在fpga内部是没有代码量这一说法的,存储...

 派朗  梦幻魔兽之印 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部