SDRAM随机读写控制器

1,SDRAM控制模块介绍

SDRAM,同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)。SDRAM利用内部的电容来储存数据,具有较高容量,成本低的优点。在FPGA设计中,与FPGA的片上储存空间(十到百KB量级,较高级的FPGA拥有上MB的片上储存空间)相比,SDRAM拥有较大的储存空间(10MB量级到100MB量级均有)。故SDRAM可用来储存大容量的数据,在图像处理时有着大量的应用。

常见的SDRAM控制器代码都是基于连续突发读写模式的,在需要传输连续地址的大批量数据时十分方便。但是需要进行随机的地址读写时,突发读写的控制器便不方便使用。例如将SDRAM作为CPU的内存模块使用时,常常需要访问和修改随机地址的数据,故需要设计SDRAM随机读写控制器。 

 本文介绍SDRAM的基本知识后,详细介绍SDRAM随机读写控制器的设计和使用。本SDRAM随机读写控制器是基于altera的nios ii 处理器的sdram控制器设计而成。用户端基于Avalon-MM接口进行控制。

 

2,控制器的端口描述

常见的SDRAM的引脚如下图所示:

各个引脚的功能如下:

CLK:

SDRAM工作的时钟,并且所有的输入信号都是在CLK的上升沿进行检测的,也就是说我们给SDRAM给的任何命令,一定要在CLK的上升沿保持稳定,以免SDRAM获取我们给出的命令时出现错误。

CKE:

时钟使能信号,是用来控制SDRAM内部时钟是否工作的一个信号(在SDRAM内部也是有时钟的哦)

CS:

片选信号,这里需要注意的是,如果要对SDRAM进行操作,必须要将片选信号拉低

BA0,BA1:

Bank地址线,用来给bank的地址,可以控制SDRAM的4个bank

A0~A11:

地址线,当我们选择SDRAM某个Bank的Row地址的时候,需要到12根地址线(A0~A11);当选择Col地址的时候,只用A0~A8这9根线;A10这个信号可以用来控制Auto-precharge。

RAS、CAS、WE:

这三根线就是用来给SDRAM发命令的,包括初始化、读、写、自动充电等命令。

UDQM、LDQM:

数据输入/输出掩码。

DQ0~DQ15:

SDRAM的数据线,为双向的,向SDRAM写数据或者从SDRAM中读出来的数据都是在DQ上进行传输的

3,SDRAM操作流程

SDRAM的操作步骤可分为如下几项:

  • 上电延时等待。

  • 芯片初始化,配置操作模式。

  • 行地址有效。

  • 列读写。

  • 数据输出(读)。

  • 数据输入(写)。

  • SDRAM的自动刷新操作。

首先,芯片上电后延时等待大约200us的时间,然后进行芯片的初始化,进行操作模式配置。初始化成功后便可以进行数据的读写操作。在进行数据读写时,先进行行选中,然后进行列选中,同时根据控制端口的信号,进行数据的读或写操作。读和写操作可以配置成突发模式,一次可以连续传输多个数据。每个操作都需要延迟一定的时钟周期。

另外,还需要对芯片进行定期的刷新操作,以保证SDRAM内部的数据不被丢失,两次刷新之间的最大时间间隔为15us。同时提醒大家,SDRAM每进行一次刷新,是对每一行进行操作的,并不是单独针对每一个电容进行充电,所以每进行一次刷新,该行中的电容进行充电我们可以理解为是同步发生的。

在进行不同的操作步骤时,都有对应的控制指令,用以区分这些操作步骤,下面介绍控制指令。正常操作下,保持CKE=1,CSn=0。

初始化操作过程如下

具体步骤为:一次预充电--->两次自刷新--->模式配置。每一次操作之间都要有一定的延迟时间。


4,模块接口描述

该控制器的功能方块图如下所示:

SDRAM端口外接到SDRAM芯片。Avalon-MM为用户控制信号。SDRAM的端口不在介绍。下面介绍下Avalon-MM接口。

Avalon 接口是 Altera FPGA的Qsys软核系统使用的总线协议。Avalon-MM是Avalon Memory Mapped Interface的简称,是基于地址读写典型的主从连接关系的接口。Avalon-MM 接口信号类型,如下表所示。

在该控制模块中,使用的端口如下。

5,数据读写操作流程

上电启动后,控制模块会自动完成sdram的初始化,模式配置,并自动进行周期性自刷新。用户只需要利用Avalon-MM接口便可以进行数据的读写。

写数据操作:进行写数据操作时,将写地址和写数据放置在az_addr和az_data端口,同时将写使能信号az_wr_n置低,直到za_waitrequest信号为低时,数据写入成功,然后将写使能信号az_wr_n置高即可。

读数据操作:进行读数据操作时,将读地址放置在az_addr端口,同时将读使能信号az_rd_n置低,等到返回数据有效信号za_valid为高时,有效的读数据在za_data端口输出,然后将读使能信号az_rd_n置高即可。此时数据读操作完成。

空闲时,保持写使能信号az_wr_n和读使能信号az_rd_n为高。

6,在线调试波形图

利用该模块,建立一个sdram设计读取的dome,并利用signaltap工具进行在线调试,抓取模块运行时的波形。

(1)初始化时序图

该模块在运行初始化时,进行了1次预充电,7次自刷新,和一次模式寄存器配置。

(2)初始化寄存器配置

在进行模式配置时,由于是对数据进行随机地址读写,不需要进行数据的连续传输,即将突发长度配置为1即可,使得每次只读写一个数据。

(3)自动刷新

初始化配置完成后,该模块便自动进行周期的自刷新操作。

(4)读数据操作

(5)写数据操作

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值