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所示。由于篇幅关系,只给出了部分电路图。
SDRAM具有空间存储量大、读/写速度快、价格相对便宜的特点,因此许多嵌入式设备的大容量、高速度存储器都采用SDRAM来实现,但其控制逻辑复杂,需要周期性刷新操作、行列管理、不同延时和命令序列等。目前,大多都采用专用芯片完成它的控制电路,这不但提高了设计成本,而且使系统的硬件电路变得复杂。随着FPGA在嵌入式系统中的广泛应用,FPGA管脚设计灵活,结合具体的需要,利用FPGA来设计一个满足雷达信号处理专用的SDRAM控制器,就可以极大地增加设计的灵活性,且硬件规模小,又可以满足实时信号处理需求。本文就是基于这种处理方法来设计一个SDRAM控制器。[page]
2.2 FLASH读/写控制设计
读/写控制的主要功能是将数据写入FLASH;在模块正常工作时,为系统提供数据。而FPGA这种大规模的可编程器件十分适合逻辑电路的设计,能方便地控制和产生FLASH编程操作中的各种控制命令,实现编程器的功能。该模块中,选择的FLASH芯片的读取时钟周期为70ns。
在对FLASH进行编程操作前,必须保证存储单元为空。如果不为空,就必须先对FLASH芯片进行擦除操作。由于FLASH采用了模块分区的阵列结构,支持扇区、块和整个芯片一齐被擦除,扇区和块擦除的时间周期为18 ms,整个芯片擦除时间为40 ms。而实现擦除操作只需在地址和数据端写入不同的操作命令即可实现不同的擦除操作。
FLASH的编程操作分三步骤:第一步是连续载入3 B命令的软件数据保护操作;第二步是写入字地址和字数据,在编程操作过程中,地址是在
的下降沿时有效,而数据则是在
的上升沿时有效;第三步是芯片内部的编程操作,该操作在
的第四个上升沿有效,随后该内部编程操作在10 μs内即可完成。FLASH编程是基于字为基础的,编程时要特别注意编程时间参数和使用的命令集,编程和擦除时的时钟参数见FLASH手册。
下面叙述FLASH的擦除操作,擦除分为扇区擦除、块擦除和整个芯片擦除,擦除的时序基本一致,过程如下:第一个时钟周期在地址5555H写入XXAAH数据,接着第二个时钟周期在地址2AAAH写入XX55H数据,第三个时钟周期在地址5555H写入XX8OH数据,第四个时钟周期在地址5555H写入XXAAH数据,接着第五个时钟周期在地址2AAAH写入XX55H数据,第六个时钟周期在地址5555H写入XX10H数据,然后芯片内部完成擦除工作。FLASH擦除完成后,内部所有的数据位全部置1。扇区擦除、块擦除和芯片擦除的区别只是在第六个时钟周期传送的数据不同。擦除的时序图如图5所示。
在写数据时仅能使对应单元的数据位由“1”变为“0”,而从“0”变为“1”只有擦除命令才能完成。擦除操作可以按扇区擦除也可以对整个芯片擦除。因此在设计时可将程序代码和常量表等固定数据和系统动态更新数据分开存放。每次向更新数据区写数据前对该区数据进行擦除操作即可。
在擦除和写操作之后,就可以读数据了,读数据的操作非常简单,由0E#,CE#控制,当这两个信号为低电平时,在地址线上输入地址,数据线上就可以读出数据了。
当按照规定的命令序列向FLASH存储器发出命令时,其内嵌的算法状态机会自动地完成相应的操作。但用户还应了解其内部的操作检测机制,以便知道操作是否完成,以及操作是否正确。该芯片的状态检测位有:数据查询位DQ7,TOGOLE位DQ6和DQ2。通过查询它们对应的状态,即可知道芯片的工作状态。
在编程实现时,用状态机实现FLASH的接口控制,要确保数据线和地址线的建立和保持时间满足需求,严格确保实际提供的时序和硬件要求一致。图6为在ModelSIM仿真下的FLASH的擦除时序图。
整个程序的编程实现是用有限状态机来实现的。以擦除为例,介绍有限状态机的设计方法。状态控制借助系统时钟进行,通过多个状态来完成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型号的不同,适当地更改外部存储器,以满足不同的应用场合。
上一篇:基于CoolRunner CPLD的MP3应用开发板的设计
下一篇:TMS320C6000扩展总线与MPC860的HPI接口设计