《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的外部存储器设计
基于FPGA的外部存储器设计
Icbuy
摘要: 本文介绍了FPGA外部存储器的设计方法,可以有效地解决雷达实时信号处理过程中海量数据的存储问题,同时也可以充分利用FPGA去控制SDRAM和FLASH,不仅保证了资源的充分利用,也可以有效地满足信号处理过程中的高速实时的要求。另外,可以根据FPGA型号的不同,适当地更改外部存储器,以满足不同的应用场合。
Abstract:
Key words :
 

  随着雷达技术的进一步发展,对雷达信号处理的要求越来越高,在实时信号处理过程中有大量数据需要存储,由于FPGA本身的存储器容量非常小,根本满足不了雷达信号处理过程中的需求,为解决这一问题,通过查询资料,引入SDRAM和FLASH作为FPGA的外部存储器。SDRAM存储器以其快速、方便和价格相对便宜,因而,常被用在雷达信号实时处理上。选择SDRAM而没有SRAM是因为SRAM价格太贵,SDRAM相对便宜。没有选择DDR SDRAM的原因是因为在实际的雷达信号处理中并不需要那么高burst率,SDRAM足以满足实际需求。SDRAM主要作用:在MTI处理时作为周期延迟器件、动态杂波图的存储和数据暂存等功能。虽然SDRAM有存储容量大、价格相对便宜等优点,但是其断电所有数据丢失的缺点,使其仅在FPGA外部连接SDRAM作为外部存储器件显然是不能满足设计需求的,因此,在设计过程中考虑到FLASH存储。在设计中用FLASH存储一些断电不能丢失的数据,如:脉冲压缩处理时的匹配滤波器系数、MTI处理时杂波加权系数、CFAR处理时的对数表以及一些函数求值等。

  1 存储电路设计

  1.1 SDRAM存储电路设计

  在硬件电路设计过程中,先通过SDRAM的I/O接口电平标准选择FPGA的外围I/O电平标准,从而解决电气互联问题。根据实时信号处理过程中所需的存储容量以及FPGA的型号,选择了4片SDRAM存储器,用于输入/输出缓存。芯片的型号为K4S641632N-LC/L75。SDRAM工作模式有多种,内部操作是一个复杂的状态机。SDRAM的管脚可以分为以下几类:控制信号,包括片选、时钟、时钟使能、行列地址选择、读/写选择、数据有效等。地址线行列复用,数据引线是双向传输。SDRAM的所有操作都同步于时钟,都是在时钟上升沿时控制管脚和地址输入的状态,进而产生多种需要的命令。

  SDRAM与FPGA的连接,要把FPGA的普通I/O与SDRAM的除电源、NC和接地管脚之外管脚连接起来即可,所有的控制与工作时序都是由FPGA提供,由于管脚太多,采取了网络标号连接,其电路原理图如图1所示。由于篇幅关系,只给出了部分电路图。

a.jpg

  1.2 FLASH存储电路设计

  为了满足模块内部在系统断电时的数据保护,在模块内部选择了FLASH存储器,FLASH存储器是一种非易失型存储器,在该设计中主要用于存放一些在系统掉电后需要保存的用户数据等。芯片的型号为:SST39VF3201-70-4C-EK。该芯片的主要特点有:3.3 V单电源供电,内部进行编程和擦除操作;高可靠性,超过100年的数据保存能力,32 Mb的存储容量;快速擦除和编程功能,支持扇区擦除、块擦除和整个芯片擦除,扇区和块擦除时间为18 ms,整个芯片擦除时间为40 ms;片内产生Vpp编程电压,实现自动读写时序。

  FPGA的引脚除电源、时钟和复位以及几个配置时钟引脚外,其余引脚均可作为通用I/O使用,因此,与FLASH连接时,只需要FPGA的普通I/O引脚和FLASH的引脚相连即可,在实际编程过程中,要严格按照FLASH的工作时序给定正确的时序。注意,电源和接地引脚以及NC管脚不可连接在FPGA上。FLASH电路图如图2所示。

b.jpg

  2 存储电路软件设计

  2.1 SDRAM控制器设计

  SDRAM具有空间存储量大、读/写速度快、价格相对便宜的特点,因此许多嵌入式设备的大容量、高速度存储器都采用SDRAM来实现,但其控制逻辑复杂,需要周期性刷新操作、行列管理、不同延时和命令序列等。目前,大多都采用专用芯片完成它的控制电路,这不但提高了设计成本,而且使系统的硬件电路变得复杂。随着FPGA在嵌入式系统中的广泛应用,FPGA管脚设计灵活,结合具体的需要,利用FPGA来设计一个满足雷达信号处理专用的SDRAM控制器,就可以极大地增加设计的灵活性,且硬件规模小,又可以满足实时信号处理需求。本文就是基于这种处理方法来设计一个SDRAM控制器。

  在SDRAM控制器的FPGA实现方案中,采用FPGA的自底向上模块化设计思想。首先分析顶层模块所要完成的功能,之后再将其功能分类细化,分配到不同的子模块去实现,然后从底层向顶层的先逐步完成各个子模块的设计,最后将子模块相互连接生成所需的顶层模块。设计SDRAM控制器是为了更好地满足SDRAM与FPGA的通信而设计的。下面将具体介绍SDRAM控制器的设计方法。图3为参考Altera公司SDRAM控制器的而设计的接口框图。

c.jpg

  下面对接口信号进行介绍:与主机接口信号有CLK:系统时钟信号;RESET:系统复位信号;CMD『2:0』:译码指令;CMDACK:指令应答信号,通知主机命令已被SDRAM执行;ADDR:地址线,该设计中为22位,A21,A20代表页地址BA1,BA0;A19~A8代表行地址;A7~A0代表列地址;DATAIN/DATAOUT:输入、输出数据总线;DM:数据掩码。与SDRAM接口信号有RADDR:12位地址线,在读/写操作时,地址线时复用为行地址和列地址;BA0,BA1页地址选择;CS:片选信号;CKE:时钟使能信号;RAS,CAS,WE:命令控制信号;DQM:SDRAM数据掩码;DQ:双向数据线。SDRAM控制器作为顶层模块,内部由3个主要模块构成:系统控制接口模块、命令生成模块和数据路径模块。系统控制接口模块用于接收系统的控制信号,进而产生不同的CMD命令组合;命令用于接收CMD命令并解码成操作指令并产生SDRAM的操作动作;数据通路模块则用于控制数据的有效输入/输出。

  使用SDRAM的目的是进行数据传输,即要求能正确地读写数据。因此,在SDRAM操作过程中,最重要是就是初始化、读和写的操作,因此,本文完成了SDRAM初始化在QuailtusⅡ仿真下的时序波形图,如图4所示。

d.jpg

  2.2 FLASH读/写控制设计

  读/写控制的主要功能是将数据写入FLASH;在模块正常工作时,为系统提供数据。而FPGA这种大规模的可编程器件十分适合逻辑电路的设计,能方便地控制和产生FLASH编程操作中的各种控制命令,实现编程器的功能。该模块中,选择的FLASH芯片的读取时钟周期为70ns。

  在对FLASH进行编程操作前,必须保证存储单元为空。如果不为空,就必须先对FLASH芯片进行擦除操作。由于FLASH采用了模块分区的阵列结构,支持扇区、块和整个芯片一齐被擦除,扇区和块擦除的时间周期为18 ms,整个芯片擦除时间为40 ms。而实现擦除操作只需在地址和数据端写入不同的操作命令即可实现不同的擦除操作。

  FLASH的编程操作分三步骤:第一步是连续载入3 B命令的软件数据保护操作;第二步是写入字地址和字数据,在编程操作过程中,地址是在g.jpg的下降沿时有效,而数据则是在g.jpg的上升沿时有效;第三步是芯片内部的编程操作,该操作在g.jpg的第四个上升沿有效,随后该内部编程操作在10 μs内即可完成。FLASH编程是基于字为基础的,编程时要特别注意编程时间参数和使用的命令集,编程和擦除时的时钟参数见FLASH手册。

  下面叙述FLASH的擦除操作,擦除分为扇区擦除、块擦除和整个芯片擦除,擦除的时序基本一致,过程如下:第一个时钟周期在地址5555H写入XXAAH数据,接着第二个时钟周期在地址2AAAH写入XX55H数据,第三个时钟周期在地址5555H写入XX8OH数据,第四个时钟周期在地址5555H写入XXAAH数据,接着第五个时钟周期在地址2AAAH写入XX55H数据,第六个时钟周期在地址5555H写入XX10H数据,然后芯片内部完成擦除工作。FLASH擦除完成后,内部所有的数据位全部置1。扇区擦除、块擦除和芯片擦除的区别只是在第六个时钟周期传送的数据不同。擦除的时序图如图5所示。

e.jpg

  在写数据时仅能使对应单元的数据位由“1”变为“0”,而从“0”变为“1”只有擦除命令才能完成。擦除操作可以按扇区擦除也可以对整个芯片擦除。因此在设计时可将程序代码和常量表等固定数据和系统动态更新数据分开存放。每次向更新数据区写数据前对该区数据进行擦除操作即可。

  在擦除和写操作之后,就可以读数据了,读数据的操作非常简单,由0E#,CE#控制,当这两个信号为低电平时,在地址线上输入地址,数据线上就可以读出数据了。

  当按照规定的命令序列向FLASH存储器发出命令时,其内嵌的算法状态机会自动地完成相应的操作。但用户还应了解其内部的操作检测机制,以便知道操作是否完成,以及操作是否正确。该芯片的状态检测位有:数据查询位DQ7,TOGOLE位DQ6和DQ2。通过查询它们对应的状态,即可知道芯片的工作状态。

  在编程实现时,用状态机实现FLASH的接口控制,要确保数据线和地址线的建立和保持时间满足需求,严格确保实际提供的时序和硬件要求一致。图6为在ModelSIM仿真下的FLASH的擦除时序图。

f.jpg

  整个程序的编程实现是用有限状态机来实现的。以擦除为例,介绍有限状态机的设计方法。状态控制借助系统时钟进行,通过多个状态来完成ERASE操作。状态0初始化各输出信号,状态1~5完成第一个命令输入,状态7~10完成第二个命令的输入,状态12~15完成第三个命令的输入,状态17~20完成第四个命令的输入,状态22~25完成第五个控制命令输入,状态27~30完成第六个控制命令,接下来状态是保持控制信号用来完成ERASE。在编程过程中,要完成进程控制:进程控制就是根据现态决定次态的控制并完成其他的信号赋值。在本设计中,状态机根据不同的状态对CE、OE#、WE#、地址、数据等FLASH控制信号进行赋值,从而完成对Flash的控制。

  但是每执行1次写操作,只能写入1个地址单元里的字数据,如果按照这个方法,完成整个FLASH芯片2 MWord的数据写入就需要重复执行写操作2兆次,这样既麻烦又浪费时间。在实际操作中,通常通过计算机上的图形界面来完成FLASH的烧写工作,通过图形界面使单片机把计算机存储的数据暂存在SDRAM,然后通过一个判断语句检测SDRAM是否存满,没有存满则继续存储,如果存满则通过FPGA控制把SDRAM上的数据存储在FLASH上,这样通过一次操作即可存满。

  3 结语

  本文介绍了FPGA外部存储器的设计方法,可以有效地解决雷达实时信号处理过程中海量数据的存储问题,同时也可以充分利用FPGA去控制SDRAM和FLASH,不仅保证了资源的充分利用,也可以有效地满足信号处理过程中的高速实时的要求。另外,可以根据FPGA型号的不同,适当地更改外部存储器,以满足不同的应用场合。



 

此内容为AET网站原创,未经授权禁止转载。