news 2026/10/25 1:53:32

sdram介绍以及如何通过调用sdram ip核简化系统设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sdram介绍以及如何通过调用sdram ip核简化系统设计

一 SDRAM简述

1.1什么是sdram

SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失(比如使用电容存储数据时);随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。

1.2sdram功能框图

这里以我使用的这款板子的型号作为介绍,SK Hynix的H57V2562GTR芯片,这款芯片的存储容量为256M bit,下面这张图是这款芯片的功能框图

观察上图,右上角部分:存储阵列,在这款芯片中,存储区域被分为了4个bank,一个bank区域容量为4M bit,一个bank里,又以行和列为基准,分成了很多个单元格,在后面会详细介绍。

左上角部分:方框内的部分:分别为时钟(clk),时钟使能(CKE),片选(CS),行地址选通(RAS),列地址选通(CAS),写使能(WE),数据掩码(DQM),在后面会详细介绍各自的作用。通过控制这些信号,改变逻辑控制单元中的配置寄存器,从而激活不同的命令。

左下角部分:地址线,行地址以及列地址共同使用,节约引脚。

右中部分:数据线,双向。输入输出接口

中间部分:包括一些寄存器,以及计数器,通过接口配置完成后,由内部自己调用。

1.3sdram存储阵列结构

前面提到,这款sdram芯片的存储区域分为4个bank,而一个bank里,可以把他理解为一个A4纸,通过行列将其分割成大小相同的区域,也就是存储单元,这一个存储单元里最多可以存储16bit的数据(具体多少根据数据位的位宽进行判断),

所以,这款芯片存储最大容量为:bank数量 * 行 *列 * 存储单元的大小。

​​​​

1.4sdram引脚介绍

1.5sdram操作命令

主要介绍使用sdram时的一些常用命令,通过改变 片选,行选通过,列选通,写使能的值,从而激活不同的命令,

1.6sdram 驱动流程

1.6.1上电初始化

sdram上电后,有一段初始化过程,上电后,需要200us的稳定时间,在这个期间,不允许任何操作,稳定器结束后,需要给所有bank 预充电,随后是8个刷新周期。最后是模式寄存器的设置。

由1.2sdram 功能框图可知,模式寄存器的设置主要是由地址总线和bank地址进行配置,具体如何配置,请看下图:

  • A0~A2:突发长度(1/2/4/8/全页)
  • A3:突发传输方式(0=顺序,1=交错)
  • A4~A6:CAS 潜伏期(如 010→CL=2,011→CL=3)
  • A7 及高位:操作模式(通常置 0 = 标准操作)

需要注意的是,在模式寄存器设置指令发出之后,需要等待一段时间才能够向SDRAM发送新的指令,这个时间我们称之为模式寄存器设置周期tRSC(Register Set Cycle)。

1.6.2行激活

初始化完成以后,进行读写操作之前,首先得确定读写的区域,那么,第一步操作就是行激活,也就是让某一个bank区域中的某一行处于活动状态(行有效),同时拉低片选(CS_n)与行选通(RAS_n),拉高写使能(WE),也就是 ACTIVE 命令。

时序图如下

1.6.3 列读写

行激活以后,就需要确定列地址,由于行列地址总线共用同一个地址线,就需要通过拉高RAS_n,拉低CAS_n(列选通)来完成确认列地址的操作。

列寻址的操作是与读写操作同时进行的,WE拉高表示读,拉低表示写。

在发送列读写之前,必须等待一段时间,tRCD,表示行激活与列读写之间的时间间隔(RAS to CAS DELAY),因为在发送行激活命令后,内部电子元件需要一定的响应时间,一般以时钟周期为单位。

列读写时序图:

列读写时序图

tRCD==3时序图

1.6.4 数据输出操作(发送读命令后)

确定列地址后,就已经确定了具体的存储单元,随后存储的数据就会输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。CL时间越短,读数据时SDRAM响应就越快。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定。

读操作时序:

读操作时序

1.6.5 写操作

写操作时,数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE拉低。不过,数据并不是即时地写入存储单元,数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多)。

1.6.6突发长度 (BL)

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL)。

读/写操作,都是一次对一个存储单元进行寻址。然而在现实中很少只对SDRAM 中的单个存储空间进行读写,一般都需要完成连续存储空间中的数据传输。在连续读/写操作时,为了对当前存储单元的下一个单元进行寻址,需要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。

1.6.7数据掩码(DQM)

在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4笔数据。但是,如果其中的第二笔数据是不需要的,怎么办?还要传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。为了精确屏蔽一个数据总线位宽中的每个字节,每个DQM信号线对应一个字节(8bit)。因此,对于数据总线为16bit的SDRAM芯片,就需要两个DQM引脚。
SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,如图所示。而在写入时,
DQM与写入命令一样是立即成效
,

数据掩码拉高表示屏蔽数据,为低时表示数据有效。

读取时DQM==2时时序:

读取时DQM==2时

写入时DQM==2时时序:

写入时DQM==2时

1.6.8 刷新,预充电

暂时不作叙述。

二 如何调用sdram ip核简化系统设计

2.1 SDRAM ip核是什么

根据前面的描述可以发现,如果单独去写一个sdram芯片的驱动会很麻烦,为了方便和简化设计,sdram ip核把 SDRAM 芯片所有繁琐的时序全部封装掉,对外只暴露两个口 —— 一组简单的 Avalon-MM 接口口,一组直接连芯片的引脚(mem_*)(只需要连接给芯片)。不需要自己写初始化状态机、不需要算刷新周期、不需要关心 RAS/CAS/WE 怎么组合,这些全在 IP 内部。但是在调用IP时,需要设置一些参数,根据芯片的不同,参数不同。

我使用的这款板子的sdram 芯片参数如下:

2.2 sdram ip核使用

这里只展示了用户侧接口,通过去驱动这些接口来完成IP核的使用。

下面将一一介绍上述接口具体的作用(代表的含义)

avs_address:读写地址24位,包括 bank,行地址,列地址,构成为:bank[1],行地址(13位),bank[0],列地址(9位)。

asv_byteenable:_n:字节使能,两位位宽,低有效,控制 16bit 数据中哪些字节参与本次传输,例如00,表示两个字节都参与。01:表示高字节参与,低字节不参与。

avs_chipselect:片选信号。

avs_writedata:输入数据(写的数据),16位位宽。

avs_read_n:读请求,低有效。

avs_write_n:写请求,低有效。

avs_readdata:数据输出(读数据)。16位位宽

avs_readdatavalid:数据输出有效,

avs_waitrequest:从机忙标志(1),必须等待不忙时(0),才能进行其他操作。

2.3sdram ip核读写操作:

写事务:主端拉低 write_n,同时给出 address、writedata(及 byteenable_n);若 waitrequest为高则保持信号不变,直到 waitrequest 拉低,本次写完成。

读事务:主端拉低 read_n`并给出 address;waitrequest 拉低表示读请求被接受;此后若干周期(从机内部延迟),从机输出 readdata并拉高 readdatavalid,主端在该拍采样读数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 1:53:26

推车式、便携式与掌上超声,三种产品的生意账

产品评审会上,三个方案各有拥护者。有人认为推车式才能把功能做完整,有人希望便携式兼顾移动与能力,还有人主张直接把设备放进掌上探头。争论很快变成体积与参数排名,真正的购买和使用任务却被放到了一边。 这篇作为系列收尾&…

作者头像 李华
网站建设 2026/10/25 1:52:55

《派出你的AI同事:WorkBuddy案例实战》075:企业微信连接器实战

《派出你的AI同事:WorkBuddy案例实战》075:企业微信连接器实战 本文是《唤醒你的 AI 同事:WorkBuddy 全栈指南》系列 卷三(案例实战) 的第 75 篇。卷二讲过"连接器怎么用、怎么架构";这一篇落到最接地气的一个:企业微信——国内大多数公司真正的日常协作入口。…

作者头像 李华
网站建设 2026/10/25 1:52:35

Vina-CUDA 实战测评:CUDA 重写的编译陷阱与四体系同机对照

本文收录于专栏 gnina系列 —— 专栏系统覆盖分子对接引擎选型、GPU 加速虚拟筛选与打分函数评估,点击订阅可跟踪后续更新。 你想找一个比 OpenCL 移植更快的 Vina 系 GPU 引擎,Vina-CUDA 论文宣称对 Vina-GPU 2.1 还有平均 3 倍的再加速——但 clone 下…

作者头像 李华
网站建设 2026/10/25 1:48:39

深度学习11:反向传播2:激活层的反向传播和实现ReLU和Sigmoid

激活层的反向传播和实现一、ReLU的反向传播二、Sigmoid的反向传播看不懂blog: 深度学习10:反向传播1:计算图,反向求导,链式法则,加法,乘法节点反向传播(经典,比学会链式法则) 不要看这章及一下,推导都离不开上一章知识 blog 深度学习10:反向传…

作者头像 李华
网站建设 2026/10/25 1:46:42

Windows 上直接安装 APK:APK 安装器如何做到不用模拟器

Windows 上直接安装 APK:APK 安装器如何做到不用模拟器 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK 安装器(APK Installer)是…

作者头像 李华