ddr的控制方法和原理


  在了解了sdram的构成原理之后,我们来针对某一款ddr芯片来看看其的内部结构和操作方法,首先来针对一款ddr的芯片看看其硬件的组成的结构。现在以K4T1G084QQ这颗DDR2的芯片为例,此芯片采用的是设计为16MBit×8BANK×8I/Os,共128MByte

管脚功能 管脚名称 类型 描述
时钟信号 CK/nCK input 系统时钟差分输入引脚,所有的地址和控制信号在CK的上升沿或者nCK的下降沿采样,输出数据在CK或者nCK的电平发生变化时被采样
时钟使能信号 CKE input 内部时钟使能信号,高电平有效,当系统处于掉电、挂机等状态时关闭SDRAM
片选信号 nCS input 使能或者禁止所有的引脚,当该引脚为高电平时,所有命令失效
内部核心终结电阻信号 ODT input 设置为高电平时使能终端电阻匹配
读写信号 nWE input 低电平表示写,高电平表示读操作
行地址信号 nRAS input 行地址信号
列地址信号 nCAS input 列地址信号
输入数据控制信号 DM input 当向SDRAM写入数据时来控制数据的输入,在高电平时被采样,如果有不想存入的数据,可以运用此引脚信号来屏蔽
bank选择控制信号 BA0-BA2 input 这三个引脚决定SDRAM中哪一个Bank被选中激活
数据信号 DQ[0:7] input/output 双向数据输入输出引脚
数据输入/输出 控制位 DQS/nDQS input/output 在数据读模式下控制数据输出
在数据写模式下禁止写数据
电源信号 VDD/VDDQ/VDDL/VREF input 控制电源
地信号 Vss/Vssq/Vssl input 地信号

  对于计算机系统,我们不可能是一个bit一个bit的访问,一般而言,32 bit的CPU可能是按照Byte(8个bit)、short int(16个bit)或者int(32个bit)进行数据访问。基于这样的概念,对于K4T1G084QQ这颗chip,输出数据总线的宽度是8bit,如果要使用一个32bit的系统,那么可以采用4片连接的组成一个32位的数据,第1片的8位数据引脚连接至CPU的Xm1DATA0-Xm1DATA7;第2片的8位数据引脚连接至CPU的Xm1DATA8-Xm1DATA15;第3片的8位数据引脚连接至CPU的Xm1DATA16-Xm1DATA23;第4片的8位数据引脚连接至CPU的Xm1DATA24-Xm1DATA31,其命令和控制线采用公用的方式即可。

  对于一款ddr,我们需要知道通过什么样的方式来控制完成我们需要,我们来看看ddr的状态,ddr的工作就是在这几个状态之间切换

  在芯片上电后,芯片处于idle阶段,上图是需要进入各个阶段的时候,应该需要进行那些基本的操作,对于ddr使用比较频繁的几个基本命令访问方式如下

1. 自我刷新模式:当系统进入低功耗模式,只需要发送一条 SRF指令,主要用于休眠模式低功耗状态下的数据保存,比较常见的应用是STR(Suspend to RAM,休眠挂起于内存)。就进入了该模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态

2. 刷新模式:储体中电容的数据有效是有时间限制的,所以为了保证数据的不丢失,所以要对ddr进行定时的刷新,SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行。

3. MRS模式(mode register set):模式寄存器中的数据控制着 DDR2 SDRAM的操作模式.它控制着 CAS 延迟, 突发长度, 突发顺序, 测试模式, DLL复位, WR等各种选项,支持着 DDR2 SDRAM 的各种应用. 模式寄存器的默认值没有被定义, 所以上电之后必须按规定的时序规范来设定模式寄存器的值。

4. EMRS 扩展模式寄存器(1) 存储着激活或禁止DLL的控制信息, 输出驱动强度, ODT 值的选择 和附加延迟等信息

5. 读/写操作:对 DDR2 SDRAM的访问是基于突发模式的; 读写时,选定一个起始地址,并按照事先编程设定的突发长度(4或8)和突发顺序来依次读写.访问操作开始
一个激活命令, 后面紧跟的就是读或者写命令。和激活命令同步送达的地址位包含了所要存取的簇和行 (BA0, BA1 选定簇; A0-A13 选定行). 和读或写命令
同步送达的地址位包含了突发存取的起始列地址 ,并决定是否发布自动预充电命令。

其操作指令如下图

 

那么我们怎么去实现一个ddr的驱动呢?下载一份ddr的spec来看看,一头雾水,基本没有可以配置地方,除了一些硬件管脚,电压参数之外,全部是一些关于timing的参数设定,那么对于这块全部落在ddr controller的身上,即ddr controller一方面要完成指令的操作,同时肩负着ddr timing的各个参数设定,同时这些参数时刻关系着我们程序的稳定性,那么对于ddr控制器,对于软件重点的就是配置这些参数


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM