基于FPGA的SDRAM控制器设计
扫描二维码
随时随地手机看文章
SDRAM的特点是大容量和高速度。其单片容量可达256Mb或更高,工作速度可达100~200MHz以上,但是其控制方式比EDO/FP DRAM复杂得多。目前,许多嵌入式设备的大容量存储器都采用SDRAM来实现。在设计中采用SDRAM存储器时,大多都是用专用芯片完成其控制电路。但是,当我们对SDRAM存储器进行特殊应用时,就需要自己设计控制电路了。
我们知道,显示器在显示文字或图形时,显示器在帧频、行频、彩色视频信号的控制下,控制电子束顺序地从上到下,从左到右逐行扫描。而这些显示控制信号是由显示控制器产生。在雷达光栅显示系统中,显示帧缓冲存储器(VRAM)存储雷达的实时信号。而在显示器的每个行周期的逆程时,需要把下一行的显示数据从显示帧缓冲存储器(VRAM)中取出,写到一个行缓冲存储器中去。在行周期的正程时,这个行缓冲存储器中的显示数据在显示时钟的同步下,顺序读出,送到视频形成电路(RAMDAC)形成显示视频信号,同时配合帧频、行频,这样显示器就能显示出雷达信号了。
在雷达光栅显示系统的通常设计中,采用专用的双口VRAM实现显示帧缓冲存储器。这种专用的双口VRAM内部具备串行存取存储器,因此实现系统比较简单。但是缺点是工作速度和容量都比较低,影响系统的性能指标。在本文的雷达光栅显示系统设计中,尝试采用SDRAM存储器作为显示帧缓冲存储器,采用FPGA器件完成SDRAM的控制电路。下面介绍具体的实现过程。
2 SDRAM简介
SDRAM具有多种工作模式,内部操作是一个复杂的状态机。SDRAM器件的管脚分为以下几类:
(1)控制信号 包括片选,时钟,时钟使能,行列地址选择,读写选择,数据有效。
(2)地址 时分复用管脚,根据行列地址选择管脚,控制输入的地址为行地址或列地址。
(3)数据 双向管脚。
SDRAM的所有操作都同步于时钟。根据时钟上升沿时控制管脚和地址输入的状态,可以产生多种输入命令: (1)模式寄存器设置命令;(2)激活命令;
(3)预充命令;(4)读命令;
(5)写命令;(6)带预充的读命令;
(7)带预充的写命令;(8)自动刷新命令;
(9)自我刷新命令;(10)突发停命令。
另外还有空操作命令。
根据输入命令,SDRAM状态在内部状态间转移。图1是SDRAM器件的状态转移图。
另外,SDRAM器件还有掉电状态,时钟中止等工作状态,使用较少,在此不做介绍。
3 设计实现
根据雷达光栅显示系统的要求,显示帧缓冲存储器采用双片1 M×l6b(HY57V161610)的SDRAM芯片构成32b的数据宽度。在该设计中,设定SDRAM的工作时钟为66MHz,这已经足以满足显示系统的要求了。
3.1 SDRAM的初始化
在电源正常之后,首先必须提供给SDRAM芯片稳定的工作时钟至少200μs。图2是SDRAM的初始化时序图。图中,首先t1时刻发出所有块预充命令,在tRP时间后才能发出下一条命令。在t2时刻发出自动刷新命令,在tRC时间后才能发出下一条命令。自动刷新命令必须至少8个。最后,在t4时刻发出模式寄存器设置命令设置工作模式,此时地址线上输入的就是控制代码。同样,在tMRD时间后才能发出下一条命令。本设计中,时钟周期为15ns,器件的tRP为20ns,tRC为20ns。因此tRP=2CLK,tRC=5CLK,tMRD固定为2CLK。因此,t1时刻到t2时刻是2周期延迟,t2时刻到t3时刻是5周期延迟,而在t4时刻2周期之后,才能发出下一条命令。
在电路设计上,采用监控芯片MAX705产生复位信号,所有的控制电路都在复位信号正常后工作。该复位信号可以保证至少60ms,满足200μs的要求。了解了初始化时序之后,由FPGA设计产生这种时序就比较简单了。
3.2 SDRAM的读写时序设计
在SDRAM芯片初始化完成之后,就进入正常工作状态。SDRAM芯片在正常的读写操作时,如果SDRAM芯片行地址不发生变化,那么可以满足每时钟周期进行一次读写的高速操作;但是当SDRAM芯片行地址发生变化时,就必须返回到预充状态。图3是一个完整的读改写时序。图中所示的是Burst Length=l,CAS Latency=2的情况。
在本设计中,雷达信号的一次显示分辨率为1 024×l 024,而光栅显示器的显示分辨率为1 280×1 024。把每个扫描行的前1 024个点称作一次显示正程,而把每个扫描行的后256个点以及行消隐期称作一次显示逆程。
在一次显示正程时,需要把雷达信号的数字视频更新到帧缓冲存储器(VRAM)中去,每一个视频点的更新都必须进行一次读、修改、写操作。此时,必须判断本次读写操作的行地址与上一次操作时是否相同。如果行地址改变,则首先在t1时刻发出预充命令,在延迟tRP=2CLK的时间后,即t2时刻发出行激活命令,此时地址线上同时应该给出相应的行地址。在延迟tRCD=20ns,即2CLK时间后的t3时刻,发出存储器读命令,此时地址线上同时应该给出相应的列地址。随后,在CL=2CLK时间后,即t4时刻数据线上就读出了相应的存储器数据。经过处理后,在t5时刻重新写入到存储器中去,同样地址线上应该给出相应的列地址。
如果行地址相同,则只需要发出列地址进行读写,也就是说,从t3时刻开始就行了。进一步地,如果列地址也相同,则只需要发出写操作命令,而数据采用上一次操作的数据进行处理后写入,也就是只用发出t5时刻的写操作命令就行了。
在用FPGA实现时,由于需要多次判断,因此设计比较复杂。但是这样做可以节省许多时间,提高效率。
3.3 显示刷新
在本设计中,一次显示逆程时,进行一次显示刷新操作。此时,也就是把帧缓冲存储器中的雷达视频信息通过高速的SDRAM全页突发读操作,读出并存储到FPGA中的SRAM行缓存中。在一次显示正程时,在显示时钟的同步下,依次输出SRAM行缓存中的视频数据到显示控制器的视频形成电路(RAMDAC)形成复合视频。
此时,需要用到SDRAM的全页突发操作模式。该操作模式是SDRAM的一种特殊操作模式。用FPGA设计时序时,首先在t1时刻发出预充命令,在延迟tRP=2CLK的时间后,即t2时刻发出模式寄存器设置命令,此时地址线上同时应该给出全页突发模式的控制代码。在延迟tMRD=2CLK时间后的t3时刻,发出行激活命令,同时地址线上给出行地址。在延迟tRCD=2CLK时间后的t4时刻,发出存储器读命令,同时地址线上给出全页突发操作的起始列地址。随后,在CL=2CLK时间后,即从t5时刻开始,数据线上海时钟周期就连续输出相应的存储器数据。最大可以输出SDRAM芯片存储阵列中该行的全部数据。本设计中只需读出128个数据就可以了,即从t5时刻到t10时刻。由于CL=2CLK,因此必须提前2周期,即轧时刻就发出突发停止命令。
数据读取操作完成之后,必须把SDRAM的全页操作模式重新设置到以前的状态,因此重复t1时刻到t2时刻,在t11时刻发出预充命令,在t12时刻发出模式寄存器设置命令,在2CLK之后,即t13时刻才可以发出新的操作命令。
在用FPGA设计时序时,这部分的控制逻辑是比较复杂的。不仅要产生正确的时序,还必须高速接收数据,这种高速SRAM的最方便的选择就是用FPGA的内置存储器实现。
3.4 显示余辉设计
雷达光栅扫描显示的特点就是可以形成人工余辉。在本设计中,余辉时序也是采用全页突发操作模式来完成,和显示刷新时序类似,所不同的是发出的是全页写命令,写入的余辉数据是把SRAM行缓存中的数据经过一定的余辉衰减算法处理后得到的。实际设计时序时,在图4中t10时刻和t11时刻之间插入一个全页突发写操作就可以了。
4 结 语
本文使用ALTERA公司的FPGA器件进行设计。设计输入采用AHDL(Altera硬件描述语言)来完成。在数字电路设计领域,利用FPGA器件非常强大的功能和非常灵活的设计方法,几乎没有他不能实现的设计。
本文来源于一个实际的雷达光栅显示系统的设计,SDRAM控制电路是其中的重要组成部分。全部的雷达信号光栅扫描显示逻辑电路由1片EPFl0K50E实现。
根据雷达光栅显示系统的需要,阅读了大量SDRAM芯片的资料之后,充分利用了SDRAM存储器的工作特点,在需要时进行转换,完成了雷达信号实时显示中大批量数据的高速传输问题。
随着大容量存储器的广泛应用,SDRAM的控制器在许多领域的控制芯片中已经内部集成了。但是,当用FPGA设计一个应用且需要大容量、高速度的SDRAM存储器时,自己设计一个SDRAM的控制器是一个最佳的选择。
参考文献:
[1].MAX705datasheethttp://www.dzsc.com/datasheet/MAX705_1019153.html.
[2].t12datasheethttp://www.dzsc.com/datasheet/t12_1178952.html.
来源:零八我的爱0次