完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个星期在进行SDRAM的学习,当然关于SDRAM的理论知识,在上周讲了一部分,而这周主要的还是写代码及调试。如果有朋友在这之前没有接触过内存的话,可以看下业内写的比较好的扫盲文章《高手进阶 终极内存技术指南》(点击进入下载),虽然Kevin在这之前也曾经看过这篇文章,但是看完之后对于写代码还是毫无头绪,所以Kevin在这里建议大家,如果是完全不知道内存是神马的朋友可以看下这篇文章,对于一些有基础但是不了解SDRAM操作时序的朋友可以直接看SDRAM厂商的官方文档,虽然Kevin也会在这篇博文中会根据自己对官方手册的理解来讲解SDRAM操作时序,但还是建议大家多看英文文档,这样才能体会原汁原味的知识,这也是为了避免所谓的“权威”中文版给大家带来某些误导,毕竟也是会有一些朋友在看着“权威”的中文翻译版本却在不停的骂娘,哈哈。所以大家也不要轻信所谓的中文翻译版手册,因为每个人对于手册中的英文意思的理解都有可能有区别,所以大家要相信厂商的手册才是最权威的。 接下来,咱们正式开始讲解SDRAM的有关知识。 关于SDRAM的内部结构 我们借用《高手进阶 终极内存技术指南》中的部分文字来进行讲解:
看到这里,大家应该不难想象,我们对SDRAM进行寻址的方式为:先确定Bank的地址,再确定行和列的地址。 SDRAM内存容量计算方式图中的128Mb表示SDRAM的总容量,2M:表示1个Bank共有2M个地址,也就是说一个bank有2M个存储单元;4Bank表示有4个Bank;16 I/O表示位宽为16位,数据总线用的是16位的,1个存储单元能存储的最大的数为2^16-1=65535。然后再根据各个参数算下容量:2M x 4 x 16b = 128Mb . SDRAM芯片引脚介绍第一个图是SDRAM的引脚图,第二图是各个引脚信号的描述信息 [url=https://file.elecfans.com/web2/M00/65/11/poYBAGMJq4yAYvxoAAELp3TTh9Q139.png] 上面的两个图在SDRAM芯片的手册上都是可以找到的,下面Kevin来简单的介绍下我们做FPGA开发需要重点关注的信号 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上进行传输的 大家看到上面的A0~A11这根地址总线既可以来控制row也可以控制col,而且控制col地址与控制row地址用到的线的数量又不一样,可能会有些疑问,下面Kevin向大家解释一下:
另外一个的话,可能大家不太明白掩码(UDQM、LDQM)的作用,下面请您耐着性子听Kevin的解释: SDRAM的相关操作时序 前面铺垫了这么多SDRAM的相关知识,相信大家已经迫不及待想知道怎么来操作SDRAM了,各位看官且听Kevin详细道来。 上图是SDRAM内部的状态跳转图(可能在网页上看到的图片不太清晰,大家可以在导航菜单“福利”下的“文档手册”中下载这些文档),粗黑线表示在该状态下会自动跳转到另一个状态,细黑线表示需要给命令才会跳转。 SDRAM初始化我们先找到SDRAM最开始的状态“POWER ON”,这是刚上电的状态。在“POWER ON”状态给‘Precharge’命令之后就会跳转到“Precharge”状态,然后自动跳转至“IDLE”状态。在“IDLE”状态下,我们需要给SDRAM两次Auto-refresh命令,然后接着需要进行模式寄存器设置,对模式寄存器设计完毕之后,我们的初始化过程也就结束了。说了这么多,我们还是不知道怎么给SDRAM进行初始化,当时Kevin看过《高手进阶 终极内存技术指南》之后也是依然不知道怎么写代码对SDRAM进行初始化。在这篇博文里边,Kevin暂时不会讲如何写代码,我只会把初始化这个过程相关的时序及原理给大家讲清楚,原理理解透彻了,相信大家对于代码如何进行书写也是会有一定的想法的,关于代码如何书写,也可以参考Kevin的另一篇博文。 我们继续上一张官方文档中的图片,这次来的可以波形图哦,各位看官要看仔细咯,对于你写代码是很有帮助的: 可能大家第一次接触到这种时序图的时候会有点头疼,不过没关系,请听Kevin给大家慢慢解释,在看文档解释的同时,与上边的状态图结合起来会更容易理解一点,对于图中出现的每一个指令,我们都是可以在我们所使用的器件手册中找到: SDRAM写操作 在状态转移图中,我们可以发现在初始化完成之后,对SDRAM进行读或者写操作之前,我们还需要有一个命令”ACT”(这个命令在我们的初始化时序图中也出现了,只是我们是拿到了这里来讲),这个命令的意思说成大白话就是”行有效”命令,就是让SDRAM中的某一行活动起来,以便我们进行读或写。 在正式讲写操作之前,还有一点希望大家能注意一下,可能细心的朋友已经发现了,在我们的状态转移图中有”WRITE”和”WRITEA”这两个状态,处于这两个状态时,我们都可以对SDRAM进行写操作,只是说在”WRITEA”状态,我们每写完一个突发长度的数据之后,SDRAM会自动跳出这个状态进行刷新,而在”WRITE”状态,是需要给相应的指令之后才会跳出”WRITE”状态的,所以为了提高SDRAM的运行速度,我们一般采用不让SDRAM进入”WRITEA”状态来提高速度。当然”READ”和”READA”这两个状态的区别也是这样的。 下面我们继续上一张写操作的时序图,这个时序图是不进入”WRITEA”状态的:[url=http://dengkanwen.com/wp-content/uploads/2016/01/write-without_autoprecharge.png] 按照老套路,Kevin继续和大家一起来分析写操作的时序: SDRAM读操作 下面来说说我们的读操作,其实读操作和写操作是类似的,相信大家有了写操作的基础,对于SDRAM的读操作理解起来还是会比较轻松的,咱们继续上图: SDRAM的自动刷新操作 Kevin已经在前面多次提到了SDRAM的自动刷新,SDRAM为什么要自动刷新,相信大家通过前面的介绍已经知道原因了,可以说如果SDRAM到了该刷新的时间没有进行刷新,那不管我们给SDRAM写进去了多少数据都是白搭,所以大家一定要高度重视SDRAM的刷新操作,到了该刷新的时候就一定要给刷新的命令。SDRAM内部电容保存数据的最长时间是64ms,而我们一个BANK有4096行,64ms/4096~=15us,也就是说为了保证SDRAM内部的数据不被丢失,两次刷新之间的最大时间间隔为15us,所以为了能让SDRAM有更多的时间进行读或者写,我们就设定SDRAM刷新的周期为15us. 在这里Kevin还想补充一个小知识,SDRAM每进行一次刷新,是对每一行进行操作的,并不是单独针对每一个电容进行充电,所以每进行一次刷新,该行中的电容进行充电我们可以理解为是同步发生的。 这就是SDRAM进行自动刷新的时序图了,相信大家有了前面的基础,对于这个图应该不会害怕了吧。
好了,对于SDRAM的初始化、读、写以及自动刷新,Kevin在这里根据自己的理解已经全部讲完了,如果在这篇文章中出现了某些错误,还希望您及时批评指出。另外,Kevin也会在接下来的一篇博文中分享怎么来写SDRAM的控制器,也就是怎么来把这篇文章中的这些操作用代码写出来。 参考书籍: 1.《高手进阶 终极内存技术指南》 2. 厂商官方手册 转载来自:邓堪文博客 » SDRAM理论篇之基础知识及操作时序讲解 |
|
相关推荐
|
|
如写得有错误,希望各位大神不吝赐教
|
|
|
|
|
|
纠正一个错误,在自动刷新期间,只需要给一次auto-refresh命令(在帖子中Kevin写的是需要改auto-refresh命令,纠正一下)
|
|
|
|
|
|
1421 浏览 1 评论
1215 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1426 浏览 0 评论
913 浏览 0 评论
2229 浏览 0 评论
1432 浏览 35 评论
5616 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:39 , Processed in 0.595297 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号