微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 多端口SDRAM控制器的设计与实现

多端口SDRAM控制器的设计与实现

时间:09-18 来源:EDN 点击:
0 引 言

目前,在很多视频数据采集以及实时显示的应用开发中,常需要用到存储容量大、读写速度快的存储器。在各种存储器件中,同步动态随机存储器SDRAM 以其速度快、容量大、价格低的特点而备受关注。SDRAM 的工作频率可以达到100MHz 甚至更高,但是在其工作周期内,因为要有刷新、预充电以及寻址等必要的操作,不可能总处于数据传输状态,使得它的带宽不能达到百分之百的利用,实时显示效果因此受到影响。为此,本文在研究有关文献的基础上,根据具体情况提出了一种独特的方法,利用FPGA 的片上资源开辟了多个FIFO 作为读写缓存,实现了多端口SDRAM 控制器的设计,并用Verilog 硬件描述语言[1] 给予实现,仿真结果表明该控制器能够轮流地从多个缓存向SDRAM 进行存取,实现了高速多数据缓存,充分利用了SDRAM 的有效带宽,提高了存取速度,从而达到实时显示的要求,并且只要将该设计稍加修改,便可应用到其他需要多数据缓存的场合。

1 SDRAM 基本操作原理[2] [3]

SDRAM 的主要控制信号有:CS_N:片选使能;CAS_N:列地址选通信号;RAS_N: 行地址选通信号;WE_N:写使能信号;DQM:字节掩码信号;ADDR:地址线。以上这些信号的逻辑组合就组成了SDRAM 的主要操作命令,如表1 所示:



1.1 初始化操作

SDRAM 上电一段时间后, 经过初始化操作才可以进入正常工作过程。初始化主要完成预充电、自动刷新和模式寄存器的配置。
1.2 SDRAM 的基本读写操作

读写操作主要完成与SDRAM 的数据交换。可以分为非突发连续操作模式和突发连续操作模式, 非突发指的是传送数据和地址必须是相对应一个一个的传输, 突发模式则是地址控制信号只需要给出首地址信息, 而数据实现连续传输过程, 突发数据的长度可以为1, 2,4, 8 和全页。

1.3 刷新操作

动态存储器都存在刷新问题。SDRAM 的刷新方式有自动刷新和自主刷新, 这里主要采用自动刷新方式, 每隔一段时间向SDRAM 发一条刷新命令。

2 基于FPGA 的多端口SDRAM 控制器设计

设计中选用的FPGA 是Altera 公司生产的CycloneII 系列中的EP2C35,选用的SDRAM 是ISSI 推出的64-MBIT 的IS42S16400B ,它是以1MWords X 16Bits X 4Banks 为组织结构的同步动态随机存储器,最高时钟频率可达143MHz[4]。

视频数据实时显示系统的基本构成如图1 所示[5]:



SDRAM 作为帧缓冲器,它的上一级数据输入是25MHz 的视频数据采集模块,所得到的数据经处理以后是每个像素点30 位数据,下一级是VGA 显示器以25MHz 的时钟进行数据输出,也要求是每个像素点30 位,而SDRAM 的数据宽度是16 位,因而每当存入和读取一个像素点的数据时,各需要进行两次传输。本款芯片SDRAM 的工作频率虽然可设置为100MHz ,但是如果不加缓存的话,就不能使用页突发模式来有效利用带宽,而且SDRAM 内部其他操作也需要占用一定的时间,不能达到实时显示的效果。本文在研究有关文献的基础上,利用FPGA 的片上资源开辟4 个FIFO 缓存,将SDRAM 的数据端口仿真成四个虚拟端口(两个写端口+两个读端口),每个端口的数据宽度都是16位,深度是两页SDRAM 的大小。且按照一致的规则将30 位采集和显示的数据分成两组与缓存进行存取,相应的,在SDRAM 上使用两个Bank 来分别存取每组数据。控制器根据缓存FIFO 的状态对SDRAM 发出读写请求,采用页模式突发传输和Bank 切换的方式来匹配时序要求。

SDRAM 控制器的内部结构如图2 所示:



各功能模块描述如下:

2.1 多端口读写控制模块

该模块是与外设交换数据的接口,并且根据缓存FIFO 的状态,自动生成对SDRAM 的读写请求以及数据缓冲处理。它是本设计的核心。下面着重描述一下读写请求产生的设计过程和简要代码。
各功能模块描述如下:

2.1 多端口读写控制模块

该模块是与外设交换数据的接口,并且根据缓存FIFO 的状态,自动生成对SDRAM 的读写请求以及数据缓冲处理。它是本设计的核心。下面着重描述一下读写请求产生的设计过程和简要代码。

2.2 地址生成模块:

该模块用来自动生成对SDRAM进行存取操作的Bank地址,起始地址和突发长度。由于30位的像素数据等分各存入两个Bank里,所以在Bank里它们的对应地址是相同变化的,这样存取数据时,对两个Bank的读写地址的控制就是统一增减的,降低了使用一个Bank时读写控制的繁杂性。

2.3 自动刷新模块:

SDRAM需要不断的刷新操作,同一行的存储单元每隔64m s 需要刷新一次,对于本芯片的一个Bank 中的4096 行存储单元,则每15. 625us 就需要发出一个刷新命令,由于本设计采取缓存的办法,所以应该按读写SDRAM到缓存FIFO的时间为准来设计刷新计数器的初始值。以页模式进行读写,读数据的整个时间过程是tRCD+ tCL+mLENGTH ,写数据的整个时间过程是tRCD+mLENGTH ,其中tRCD是激活命令到读或写命令期间的延迟,tCL是读命令发出后到第一个有效数据之间的间隔,mLENGTH 是SDRAM 的页长,本设计中tRCD =3, tCL=3,mLength=256 。因此刷新计数器的初始值设置为2X(256+3+3)+ 2X(256+3)=1042 ,经计算远远小于所要求的刷新周期,初值设置合理。开始工作后,每当刷新计数器值减为0, 便会发出刷新命令,保证SDRAM内的数据不丢失,自动刷新之后直接进行预充电来关闭工作行。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top