DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1050|回复: 0
打印 上一主题 下一主题

[待整理] 多端口SDRAM控制器的设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 12:02:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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内的数据不丢失,自动刷新之后直接进行预充电来关闭工作行。



2.4 命令产生模块:该模块主要负责命令仲裁、命令生成以及时序控制等。SDRAM 优先级仲裁算法通常有两种:一种是固定优先级算法,另一种是循环优先级算法。本文设计的SDRAM 控制器是应

用在实时图像处理系统中的,对数据处理效率要求很高,因此设计中选用固定优先级算法。本文规定优先级如下:初始化请求>刷新请求>读请求>写请求>其他。

2.5 时钟产生模块:

通过使用PLL(锁相环) 资源为FPGA 内部的时序元件提供稳定的时钟以及为SDRAM 提供可靠的时钟,本设计中为100MHz 。

1 SDRAM 控制接口模块:该模块主要完成对SDRAM 的命令解码、初始化配置等。

2 数据通路模块:

根据模式寄存器的模式字及对用户指令的分析结果,使SDRAM 的地址及数据和相应的操作指令在时序上同步。

3 仿真验证

使用Modesim 软件[6]对多端口SDRAM 控制器进行仿真验证,得到的SDRAM 读写信号仿真波形图时序合理、逻辑正确,可以从多个缓存FIFO 轮流地向SDRAM 以页突发模式进行读写操作,有效利用了SDRAM 的带宽,而数据采集和数据显示模块可以在不受SDRAM 操作时序影响的情况下,连续地向缓存FIFO 中存取数据。仿真波形如图3 所示:



将该控制器集成到视频数据采集显示系统的设计中,经QuartusII 分析综合,生成的网表文件下载到FPGA 芯片上,并将数字摄像头和VGA 显示器连接好,进行实际硬件验证,几经调试,该系统已能够成功运行并且达到了良好的实时显示效果。

4 结 论

本文使用状态机的设计思想,采用Verilog 硬件描述语言设计实现了一种基于FPGA 的,可用于多数据缓存的、高效利用SDRAM 带宽的多端口SDRAM 控制器。

本文作者创新点:设计实现的SDRAM 控制器能够完成多端口数据缓存,充分利用了SDRAM 的有效带宽,提高了存取速度,只要稍加修改就可以应用到图像处理,视频监控等需要高速多数据缓存的场合,可重用性好。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-29 11:35 , 耗时 0.103717 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表