一、SDRAM概念
  SDRAM 的全称即同步动态随机存储器(Synchronous Dynamic Random Access Memory),同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令的发送与数据传输都是以该时钟为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机指数据的读取和写入可以随机指定地址,而不是必须按照严格的线性次序变化。
二、SDRAM存取原理
存储单元主要由行列选通三极管,存储电容,刷新放大器组成。对于这一位的数据,首先需要打开行地址,然后打开列地址,则电容的电平状态就能呈现在数据线(data_bit)上,即实现了读取。数据线上的电平值被送到电容上,从而实现写入数据。注意此处行列打开后,数据不会立刻被处理,有延时,称作行列选通潜伏期,不同速度延时tRP不同。

三、SDRAM引脚

四、SDRAM操作命令

{CS_N,RAS_N,CAS_N,WE} 命令 说明
0011 激活命令 BA0 和 BA1 用来选择需要操作的 BANK,地址线A0–A12 选择指定的行。该行会一直保持激活状态并可以进行读写,只有执行一个预充电命令后,才能关闭,并对其他行进行操作
0101 已经激活行的突发读取操作 位 A0–A9, A11(x4),A0–A9(x8),A0–A8(x16))指定需要读取的数据起始列地址,A10读取完成之后立即执行预充电,即关闭当前行操作
0100 写命令 位 A0–A9, A11(x4),A0–A9(x8),A0–A8(x16))指定需要写的数据起始列地址,A10写完成之后立即执行预充电,即关闭当前行操作
0010 预充电 关闭指定或全部BANK(由A10状态选择)中已经打开的行,等待 tRP 的时间后对应的 BANK 将可以重新被操作
xxxx 自动预充电 不额外增加执行指令的使用预充电指令,A10指明是否在突发读写完成后立即自动执行预充电操作
0110 突发中断 离该命令最近的一次被 SDRAM 寄存的读或者写命令被截断,截断后仍处于激活状态
0001 自动刷新 用来保持SDRAM中的数据,该命令是非持续性的,自动刷新命令之前,所有的BANK必须被预充电(关闭)
五、SDRAM操作时序
上电初始化步骤:
加载电源—— CKE设置为低电平——时钟信号——等待100毫秒,禁止命令操作,其中一时刻cke拉高——全部 BANK 的预充电命令——预充电后等待tRP后才能进行命令——自动刷新命令,然后等待tRFc——重复自动刷新命令,然后等待tRFc——发出装载模式寄存器命令设置模式寄存器——等待时间 tMRD——初始化完成
//定义操作操作命令{CS_N,RAS_N,CAS_N,WE}
parameter   C_NOP = 4'b0111,  //空操作命令C_PRE = 4'b0010,  //预充电命令C_AREF = 4'b0001, //自动刷新命令C_MSET = 4'b0000, //加载模式寄存器命令C_ACT = 4'b0011,  //激活命令C_RD = 4'b0101,   //读命令C_WR = 4'b0100;   //写命令
//线性序列机
parameter   INIT_PRE = 20000;//初始化等待时间>100us,取200usREF_PRE = 3;     //tRP  >=20ns,取30nsREF_REF = 10;    //tRRC  >=66ns,取100ns
localparam init_PRE_TIME = INIT_PRE,           //预充电时刻init_AREF1_TIME = INIT_PRE + REF_PRE, //自动刷新时刻init_AREF2_TIME = INIT_PRE + REF_PRE + REF_REF,    //自动刷新时刻init_LMR_TIME = INIT_PRE + REF_PRE + REF_REF * 2,  //加载模式寄存器init_END_TIME = INIT_PRE + REF_PRE + REF_REF * 2 + LMR_ACT;   //结束时刻
//相应时刻发出对应的命令和操作always@(posedge clk or negedge rst_n)beginif(!rst_n)begin      //复位地址清零,空操作命令command <= C_NOP;saddr <= 0;endelse begincase(init_cnt)init_PRE_TIME:begin    //预充电时刻,预充电命令,A10拉高,对所有BANK行进行预充电(若A10为低电平,则只对BA0和BA1定的BANK中的行进行预充电)command <=  C_PRE;   saddr[10] <= 1'b1;endinit_AREF1_TIME:begin       //自动刷新时刻,自动刷新命令command <=  C_AREF;endinit_AREF2_TIME:begin       //第二次自动刷新时刻,自动刷新命令command <=  C_AREF;endinit_LMR_TIME:begin          //加载模式寄存器,加载模式寄存器命令,A0-A10为{写突发模式设置,00,列选通潜伏期设置,突发类型设置,突发长度设置}此处各位对应功能查表command <=  C_MSET;saddr <= {OP_CODE,2'b00,SDR_CL,SDR_BT,SDR_BL};enddefault:begincommand <= C_NOP;saddr <= 0;endendcaseend   end

对初始化后代码进行仿真验证,此处调用镁光SDRAM 仿真模型

`timescale 1ns/1ns
`define clock_period 10           //100Mmodule sdram_int_tb;`include "../rtl/Sdram_Params.h"reg clk;reg rst_n;wire [3:0]command;wire [`ASIZE - 1:0]saddr;wire init_done;wire sd_clk;wire cs_n;wire ras_n;wire cas_n;wire we_n;//SDRAM初始化模块例化sdram_init sdram_init(.clk(clk),.rst_n(rst_n),.command(command),.saddr(saddr),.init_done(init_done));assign {cs_n,ras_n,cas_n,we_n} = command;assign sd_clk = ~clk;//SDRAM模型例化sdr sdram_model(.Dq(), .Addr(saddr),.Ba(), .Clk(sd_clk), .Cke(rst_n), .Cs_n(cs_n), .Ras_n(ras_n), .Cas_n(cas_n), .We_n(we_n), .Dqm());//系统时钟产生initial clk = 1'b1;always #(`clock_period/2) clk = ~clk;initial begin rst_n = 1'b0;#(`clock_period*200 + 1);rst_n = 1'b1;@(posedge init_done)#2000;$stop;end
endmodule

仿真图像

镁光自动打印信息

至此SDRAM初始化完成。

SDRAM学习(一)——初始化相关推荐

  1. SDRAM学习笔记(eg. W9825G6KH)

    声明1. 本文是博主学习<高手进阶,终极内存技术指南>一文时所记录的学习笔记,文中内容和图片大部分来源于此文. 声明2. 本文所用到的SDRAM学习资料下载链接,感谢硬汉哥! 文章目录 一 ...

  2. DDR SDRAM 学习笔记 —— SPPR

    DDR SDRAM 学习笔记 -- SPPR 以下是翻译 JESD79-4B,同时加一些自己的理解,欢迎讨论. 介绍:Soft Post Package Repair 简称为 SPPR,主要是针对内存 ...

  3. caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)

    深度学习 Caffe 初始化流程理解(数据流建立) 之前在简书的文章,搬迁过来 ^-^ 本文是作者原创,如有理解错误,恳请大家指出,如需引用,请注明出处. #Caffe FeatureMap数据流的建 ...

  4. 深度学习——MSRA初始化

    转载自:MSRA初始化 本次简单介绍一下MSRA初始化方法,方法同样来自于何凯明paper <Delving Deep into Rectifiers:Surpassing Human-Leve ...

  5. 深度学习参数初始化(二)Kaiming初始化 含代码

    目录 一.介绍 二.基础知识 三.Kaiming初始化的假设条件 四.Kaiming初始化的简单的公式推导 1.前向传播 2.反向传播 五.Pytorch实现 深度学习参数初始化系列: (一)Xavi ...

  6. DDR SDRAM 学习笔记 —— DDR4 内存初始化过程 之 Multi Purpose Register (MPR Read)

    DDR4 Multi Purpose Register (MPR) 我是谁?-- MPR 简介 MRP 其实是物理上真是存在的寄存器,简单理解就是存储 0/1 的器件.所以啊,它设计时,是独立于 ce ...

  7. [深度学习] 权重初始化--Weight Initialization

    深度学习中的weight initialization对模型收敛速度和模型质量有重要影响! 在ReLU activation function中推荐使用Xavier Initialization的变种 ...

  8. SDRAM学习(五)——串口传图

    一.串口传图设计图 这一部分在之前写的SDRAM控制顶层模块的基础上加了pll时钟,之前写的tft4.3寸显示屏控制模块,串口接收数据模块和比特计数器. pll时钟:之前在初始化部分提到过,此处有四路 ...

  9. 学习笔记——SDRAM学习

    1.SDRAM介绍   SDRAM: (Synchronous Dynamic Random Access Memory)同步动态随机存储器.同步是指其时钟频率与CPU前端总线的系统时钟频率相同,并且 ...

最新文章

  1. 一图胜千言!数据可视化多维讲解
  2. IT技术人员必须思考的几个问题
  3. java中的垃圾回收机
  4. 谷歌极速人脸、手、人体姿态分析Blaze算法家族
  5. Linux 命令(10)—— split 命令
  6. bootstrap-table 树形结构
  7. Q120:PBRT-V3,“直接光照”积分器(14.3章节)
  8. 2018年7-8月学习有效反馈
  9. 基于台达PLC的步进电机控制
  10. linux 音频转换工具,Linux 音频格式转换初探
  11. FL Studio使用外部音源播放导入的MIDI文件
  12. 机器学习十大算法原理总结
  13. c+html+sdk,用C ++开发小码(Codelet)
  14. 从What到How,大数据实战攻略秘笈
  15. 10种食物 让你快乐每一天
  16. 改进Zhang Suen细化算法的C#实现
  17. 简单几步让WinUSB设备变为多端点设备
  18. 以太坊区块链浏览器的搭建
  19. 第四章 网络层(TCP/IP称网际层)
  20. 商业模式的秘密—leo看赢在中国(3)

热门文章

  1. Matlab-simulink汽车二自由度模型
  2. DataFrame增加数据的多种方法
  3. 为开启VM虚拟化,关闭Win10的Hyper-V
  4. sql语句中的子查询
  5. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.6 异构建模的方法...
  6. 个人计算机使用的标准键盘,电脑键盘的基本操作规范 -电脑资料
  7. ant jeecg vue 前端通过dom节点 导出xlsx表格
  8. 崔老哥python scrapy爬虫框架入门
  9. 微信开发者工具模拟器、IOS真机调试、Android真机调试中Editor效果不一致问题
  10. ActiveMQ基本详解