Sdram控制器的Verilog的实现.doc_第1页
Sdram控制器的Verilog的实现.doc_第2页
Sdram控制器的Verilog的实现.doc_第3页
Sdram控制器的Verilog的实现.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目前,在很多通信芯片及系统的开发中,常常需要用到存储容量大、读写速度高的存储器。在各种随机存储器件中,SDRAM 的价格低、体积小、速度快、容量大,是比较理想的器件。但是,与SRAM相比较,SDRAM的控制逻辑复杂,使用很不方便。为了解决这个矛盾,需要设计专用的SDRAM控制器,使系统用户象使用SRAM一样方便的使用SDRAM是十分必要的。本文介绍了SDRAM控制器的Verilog设计,并给出了实现结果。一、Sdram简介 1、Sdram的接口信号2、Sdram启动和初始化系统商上电后,Sdram 必须经过初始化才能使用,初始化过程必须经过以下几个步骤:(1)发出NOP指令,等待1ms(2)执行PreChargeAll命令(3)执行8次AutoRefresh命令(4)设置模式寄存器(Mode Register)(5)等待Tmrd时钟,Sdram就可以正常读写了。3、Sdram的模式寄存器 Mode Register 用于定义Sdram的运行模式。在PC133规范中,Mode Register中包括了突发长度(Burst Length)、突发类型(Burst Type)和CASs延迟(CAS Latency)。用过Mode Register Set 命令进行编程, 这组信息将会保存知道Sdram掉电为止(具体的Mode Register定义和SDRAM的命令看对应Sdram的数据手册)。二、Sdram的命令解析1、Bank Active 命令 在进行任何的Read和Write 命令之前,Sdram首先要选择进行操作的Bank,并且还要打开这个Bank中相应的行,这个通过Bank Active 命令来实现,Bank Active打开BA指定的Bank,同时锁存行地址信号。每个Bank 最长激活时间位 Tras,当Bank Active命令执行完毕以后,需要进行操作的的Bank中的行就会被打开,经过Trcd的延时之后,才可以进行Read或Write命令。2、PreCharge命令 PreCharge命令用于预充电BA和AP指定的Bank,当AP为高时,所有的Bank同时被充电,当AP为低时,由BA指定的Bank被充电,当此命令结束后,指定的Bank由激活状态转变为空闲状态,PreCharge命令相当于关闭对应的Bank,当Sdram需要在同一个Bank中打开另外一行时,需要先用PreCharge命令关闭已经打开的行,然后用Bank Active命令来打开新的行。同一个Bank中,在两个相邻的Bank Active命令之间的时间间隔为Trc,在不同的Bank之间,执行两个Bank Active命令之间的时间间隔为Trrd。3、Read命令 Rea的命令用于执行由BA指定的Bank的读操作,同时锁存列地址以及由AP指定的预充电模式。此命令结束后,数据经过CASs等待时间从Sdram内部输出到外部引脚上。当AP为高是,此命令结束前自动执行一个PreCharge命令,当AP为低时,此命令结束后Bank依然处于激活状态(在执行Read命令前,相应的Bank必须处于激活状态)。4、Write命令 Write命令用于执行由Ba指定的Bank的写操作,同事锁存列地址信号以及有AP指定的预充电模式。需要写入的数据从此命令开始时提供给Sdram,当AP为高时,此命令结束前自动执行一个PreCharge命令,当AP为低时,此命令结束后Bank依然处于激活状态(执行Write命令前,相应的Bank必须处于激活状态)。5、Auto Refresh命令 Auto Refresh 命令用于Sdram芯片在正常工作状态时使用的自动刷新操作。刷新所需要的行地址由Sdram内部的刷新计数器提供。刷新操作必须在64ms内别执行4096次(行地址的数目)。刷新操作可以周期性的执行,也可以突发性的执行。其他的命令可以在Auto Refresh命令结束Trrc时间后被执行。当执行此命令是,所有的Bank必须位空闲的。三、Sdram控制器的Verilog实现1、Sdram的状态图 如图,Sdram控制器一共分为 21 个状态,根据不同的信号,Sdram在各个状态之间切换实现对Sdram的控制。1.SDRAM的burst mode:SDRAM是一种命令型动作的设备,就算读写资料只有一个也要先下命令才可以用,为了增加工作效率,就产生了一种传送一个命令,写多个数据的模式,这就是burst mode。burst mode是一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。2.为什么要做precharge动作? 关闭正在作用的SDRAM bank,算是一种结束命令,后面可以下新的命令。我想这是和SDRAM内部管理有关。(这是从网上查到的,感觉不够详细,也不太理解)3.自动刷新功能?动态存储器(Dynamic RAM)都存在刷新问题。这里主要采用自动刷新方式,每隔一段时间向SDRAM发一条刷新命令。4.SDRAM的地址线:在我们一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址线,然后可以算出寻址空间,比如有11根地址线,那寻址空间就是2的11次方减1。但是SDRAM是分列地址和行地址的,行、列地址线是复用的,所以有时候我们看到说寻址空间有多大多大,但是看看地址线怎么就那么几根啊,呵呵。SDRAM一般还有2根BANK的线,分成4个BANK,在有的处理器的SDRAM控制模块中,这两根线可能映射到地址线的某两根去。一般芯片常按照以下方式写芯片的配置,比如4Meg x 4 x 16,那这个芯片就是256Mbits。其中16指数据线是16根,中间一个4是只分4个BANK, 每个BANK是4Meg。5.SDRAM的初始化:SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下 A: precharge B: auto-refresh C: Load Mode Register D: Normal Read/Write 在上电后输入初始化命令值钱,最少要100us延迟(这个其实很容易满足,呵呵)。 在输入precharge命令后,因为必须是对所有BANK进行Precharge,所以A10这个管脚要设置成高,因此在Precharge后面要做一个读的操作,这个操作最主要的是在SDRAM的寻址空间里设置的地址必须是A10是高的。 在输入Auto-refresh命令后,一般要跟几句空操作或者读什么之类的,反正要达到延迟的目的,以使得SDRAM有时间来完成refresh。 之后就是要设置SDRAM的模式寄存器,这个寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。而这个寄存器的设置也是通过地址线来设置的,所以在发出Load Mode Register命令后要做一个操作可是使得在SDRAM的地址线上出线的值就是你要设置的值。这里很有必要提醒的一下的是,这个操作是8位的操作,切记切记。 设置完模式寄存器后就进入正常操作模式。 实际上具体的操作要跟选用的处理器的SDRAM控制模块相结合来设置。对于这些初始化命令比较直观的理解就是拿逻辑分析仪来分析。 在这里需要提醒一下CAS这个参数很重要。还有SDRAM必须要刷新的,因此刷新频率可以按照手册算出来的,但是设置的高一点也是可以的。常常SDRAM都有工作频率,但是也可以工作在低一点的频率上,比如PC133的,你工作到100也是可以的,设置基本不需要修改。6.基本读写操作:SDRAM的基本读操作需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0A12给出)。BANK激活命令后必须等待大于tRCD(SDRAM的RAS到CAS的延迟指标)时间后,发出读命令字。CL(CAS延迟值)个工作时钟后,读出数据依次出现在数据总线上。在读操作的最后,要向SDRAM发出预充电(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHAREG命令后,相隔tRP时间,才可再次访问该行)后,可以开始下一次的读、写操作。SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选。 SDRAM的基本写操作也需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0A12给出)。BANK激活命令后必须等待大于tRCD的时间后,发出写命令字。写命令可以立即写入,需写入数据依次送到DQ(数据线)上。在最后一个数据写入后延迟tWR时间。发出预充电命令,关闭已经激活的页。等待tRP时间后,可以展开下一次操作。写操作可以有突发写和非突发写两种。突发长度同读操作。 7.其他:我们有时候看到有的原理图上数据线有倒过来接的,其实这个无所谓的,反过接,写进去的就是反的,但是读出又反了一下,反反两次正好没反。 延伸一下到DDR,其实DDR就是SDRAM外面加了一个乌龟壳。因此初始化是一样的。当然DDR一是多了一个把时钟频率反相的时钟,因此有2个相位差180度的时钟。这两个一般都是用同一个时钟源产生,一致性会比较好。还有多了2个DQS,这个也是一个时序要求,一般CPU的控制模块都有设置好了。如果你使用的CPU不含有控制模块,那用FPGA去做一个控制模块的话,那就要好好研究时序了。 在有些处理器的控制模块中,由于EMI的设置,地址线映射关系复杂,因此推算会比较麻烦,一般如果没有什么映射的话,还是很容易操作的。总结:对SDRAM有了一定的了解,但是对precharge、时序图都没怎么仔细看。回复:学习笔记-S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论