摘要:给出了一种基于FPGA 最小系统的PROM 扩展方法,利用对FPGA 的配置用SPI 串行接口Flash 芯片的控制,实现了Flash 芯片的重复使用。该方法在FPGA 最小系统的基础上无需增加任何其他器件,简化了设计、减少了FPGA 的管脚开销。文中还给出了利用FPGA 控制Flash 的软件设计过程,并给出了仿真波形图。通过ChipScope 软件的观测结果,证明了方法的正确性。
FPGA 在电子各个领域得到广泛应用,因为通过对FPGA 的设计,不仅可以在FPGA 内部对所需软件
进行开发,还可以对所需硬件进行设计,从而使得FPGA成为一个SOIP( 集成片上系统) 的载体。正是这种特性,在设计FPGA 硬件系统时,可尽量减少FPGA外围器件,而将逻辑类外围器件都做到FPGA 内部,从而增加硬件设计的可靠性和可验证性。然而FPGA 中一般不集成PROM( 可编程只读存储器) ,如果想存储掉电不失的数据,往往需要增加一片PROM 芯片。FPGA配置芯片一般为Flash 芯片,其是PROM 的一种,具备掉电不失和可修改特性[1],因此提出了一种利用FPGA 配置用SPI 接口的Flash 芯片实现PROM 扩展的方法,在FPGA 正常工作后通过FPGA 对其配置芯片的控制来实现读写操作,从而能在不增加任何其他存储芯片情况下扩展出PROM 功能。
1 SPI 接口Flash 的FPGA 配置方式
SPI 串行接口是一种高速、全双工、同步的通信总线,在芯片的引脚上只用4 根线,不仅节约了芯片的引脚,同时在PCB 布局上还节省空间,正是这种简单、易用的特性,被越来越多的FPGA 设计者使用,SPI 接口的Flash 作为FPGA 的配置芯片[2]。而现在FPGA 也越来越多地提供这种配置方式,例如Xilinx 公司的Spartan-3E、Spartan- 6、Virtex- 5、Virtex-6 系列和7 系列FPGA等,都提供了SPI 接口的Flash 配置方式。本文将以Xilinx 公司的Spartan - 3E 系列FPGA 芯片XC3S100E 和ST 公司M25Pxx 系列Flash 芯片为例,介绍PROM 在FPGA 中的扩展方法,FPGA 与配置用SPI接口Flash 的硬件连接如图1 所示,其中,D 为Flash 的数据输入脚,Q 为Flash 的数据输出脚,S 为Flash 的片选脚,C 为Flash 的时钟脚,将FPGA 的M2、M1、M0配置为‘0’、‘0’、‘1’,FPGA 在上电后将以Master SPI 配置方式进行配置。由于FPGA 的MOSI、DIN、CSO_B和CCLK 的4 个管脚均是复用管脚,因此在上电配置完成之后,这4 个引脚将作为IO 脚,可以通过程序来控制SPI 接口Flash 的各项操作[3]

2 M25Pxx 系列Flash 及相关操作时序
M25xx 系列Flash 是ST 公司的高速SPI 接口Flash,读写时钟最快可达到40 MHz,分为1 MB、2 MB、4 MB、8 MB、16 MB 等多种容量,不同容量的芯片管脚和封装完全相同。在利用配置用Flash 芯片作PROM扩展时,可根据设计需要自由选择Flash 芯片容量,例如在使用Xilinx 公司的Spartan - 3E 系列FPGA 芯片XC3S100E 时,配置程序的容量一般< 2 MB,那么若使用8 MB 的Flash 芯片M25P80 作其配置芯片,就可以有6 MB 的空间可用于PROM 扩展。配置程序一般从Flash 芯片0x000000 的地址放置,那么可用于PROM扩展的6 MB 空间的地址范围为0x040000 ~0x0FFFFF[3]。
M25Pxx 系列Flash 有许多基本操作,文中提出的PROM 扩展方法所需要用到的操作主要有写使能操作、读状态寄存器操作、扇区擦除操作、写数据操作和读数据操作这5 个。
写使能操作必须在每次对Flash 芯片进行的写状态寄存器操作、芯片擦除操作、扇区擦除操作和写数据操作之前,确保这些操作的有效性[4 - 5]。写使能操作只要向Flash 芯片写入指令0x06 即可,时序如图2 所示。

读状态寄存器操作能够从Flash 芯片中读出状态寄存器值,寄存器的最低位为写操作忙碌标记位,若为‘1’则标志写操作正在进行,为‘0’则标志写操作已经完成,可以再次进行写操作,所以读状态寄存器操作必须在每次对Flash 芯片进行的写寄存器操作、芯片擦除操作、扇区擦除操作和写数据操作之后,以确保这些操作完成。读寄存器操作需要先向Flash 芯片写入指令0x05,然后从芯片中读入8 bit 寄存器值,时序如图3所示。

扇区擦除操作能够擦除Flash 芯片中的任意扇区。M25Pxx 系列Flash 中每512 kB 分为一个扇区,向每个扇区中写数据前必须先对该扇区进行擦除操作,否则数据将无法写入。扇区擦除操作需要先向Flash 芯片写入指令0xD8,然后写入24 bit 地址,之后这个地址所在的扇区将被擦除,时序如图4 所示。

写数据操作就是从Flash 芯片中某个地址开始依次写入若干个Byte 的数据,每次写数据操作最多可写入256 Byte。写数据操作需要先向Flash 芯片写入指令0x02,然后写入24 bit 地址,最后写入需要的若干个Byte 的数据,时序如图5 所示。

读数据操作就是从Flash 芯片中某个地址开始依次读出若干个Byte 的数据,每次读据操作最多可读出256 Byte。读数据操作需要先向Flash 芯片写入指令0x03,然后写入24 bit 地址,最后读出需要的若干个Byte 的数据,时序如图6 所示。

FPGA 具有较强的时序操作能力,因此在FPGA 中可以轻松地对以上5 个时序进行设计,以得到Flash 芯片的控制程序模块。
3 FPGA 对Flash 芯片的控制实例
FPGA 对Flash 芯片的控制程序可采用状态机的方式实现,依据以上的5 个操作,给出实例操作程序流程如图8 所示,用虚拟逻辑分析仪软件ChipScope 观测到的逻辑运行结果如图7 所示,其中FPGA 的M25P80_CE_OBUF、M25P80_SCK_OBUF、M25P80_SI_OBUF 和M25P80_SO_OBUF 的4 个管脚分别连接M25P80 芯片的4 个管脚S、C、D 和Q,Addr 和data_o 均为FPGA的内部寄存器,分别显示当前读取数据操作对应的地址和前一个读取操作读取到的数据。从图7 中可以看
出,从Flash 地址0x0F0000 ~ 0x0F0003 读出的4 个Byte 数据为0xA0、0xB1、0xC2 和0xD3,与设计流程图8中给定的写入数据完全一致,说明提出的方法正确可行。


图8 FPGA 控制Flash 的实例操作程序流程 4 结束语
提出了使用FPGA 的配置Flash 实现PROM 扩展的方法,并通过具体实例操作验证了该方法的可行性,由于扩展该方法的硬件是基于FPGA 最小系统,而不需增加额外的存储芯片开销,因此可以减小硬件设计复杂度,并减少FPGA 的管脚开销,具备一定的工程实用性。
作者:胥嘉佳,黄克平 来源:电子科技2013 年第26 卷第4 期 |