基于FPGA的SDRAM控制器的设计和实现.doc_第1页
基于FPGA的SDRAM控制器的设计和实现.doc_第2页
基于FPGA的SDRAM控制器的设计和实现.doc_第3页
基于FPGA的SDRAM控制器的设计和实现.doc_第4页
基于FPGA的SDRAM控制器的设计和实现.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA的SDRAM控制器的设计和实现0引言随着电子技术在工业、医疗、商业等领域的发展,人们对数据传输率的要求越来越高,传统的单片机早已不能满足这种高速数据传输的要求。与此同时,可编程的逻辑器件FPGA/CPLD以其强大的功能,开发过程投资小、周期短,可反复编程修改,开发工具智能化等特点,成为当今硬件设计的潮流;相比而言,FPGA即现场可编程门阵列,它的集成度高,可完成极其复杂的时序与组合逻辑电路功能,更适用于高速、高密度的高端数字逻辑电路设计领域1。SDRAM即:同步动态随即存储器,与传统的DRAM有很大区别。它可以与系统总线以同频率工作,用同一个CPU时钟周期即可完成数据的访问和刷新,进而大大的提高了数据传输率,其速度远大于DRAM。因而,SDRAM常作为数据缓存应用于高速数据传输系统中。目前,许多嵌入式设备的大容量、高速度存储器都采用SDRAM来实现,而且大多都是用专用芯片完成其控制电路,这不但提高了设计成本,而且使系统的硬件电路变得复杂。随着FPGA在嵌入式系统中的广泛应用,如果我们能够结合具体的需要,利用FPGA来设计自己的SDRAM控制器,这些问题就迎刃而解了。然而,SDRAM的控制逻辑复杂、时序要求严格,常常困扰设计人员。有很多文章2,3,4,5详细的介绍了SDRAM的工作原理、控制时序和指令特点,以及基于FPGA的SDRAM控制器的实现方法,但是并没有详细的给出控制器内部结构和指令时序的控制问题。因此。本文将介绍一种基于FPGA的通用SDRAM控制器,并着重介绍设计方案中各模块的功能和实现方法。该控制器用VHDL语言程序实现,完成了SDRAM指令状态转换、信号仲裁判断,并巧妙的用三个移位寄存器解决了指令的逻辑和时序的问题。1.SDRAM简介SDRAM具有空间存储量大、读写速度快、价格相对便宜的特点。但其控制逻辑复杂,需要周期性刷新操作、行列管理、不同延时和命令序列等。1.1SDRAM地址结构SDRAM的存储地址分为页(bank)地址,行(row)地址和列(column)地址。例如一个8MByte的SDRAM,被分为4个bank,即1个bank为2MByte,每个bank包括12行8列。1.2SDRAM的指令SDRAM的一系列指令如表1所示,每个指令最终都是通过控制RAS、CAS、WE信号来实现。通常对SDRAM的操作过程如下:表1SDRAM命令(1)SDRAM初始化操作:上电后至少等待100ns,然后至少执行1条空操作;对所有页执行预充电操作;向各页发出两条刷新操作指令;最后执行SDRAM工作模式的设定LMR命令用来配置SDRAM工作模式寄存器,SDRAM工作寄存器如表2所示。其中A11A10是用户保留位;A9用来配置写突发模式;A8A7是操作模式,通常为“00”,代表标准操作模式;A6A4设置CAS延迟时间;A3决定突发操作模式是顺序还是间隔型;最后的三位A2A0用来配置突发长度。表2SDRAM工作寄存器A11A10A9A8A7A6A5A4A3A2A1A0ReserveWriteburstmodeOperatingmodeLatencymodeBursttypeBurstlength(2)SDRAM读、写操作:根据实际应用的需要,发出读、写指令。SDRAM可实现突发式读写,支持的突发长度可配置为1个、2个、4个、8个数据周期或者页模式。并且突发的模式可以配置为顺序或者间隔型。对SDRAM进行访问的最主要操作就是读RD和写WR操作。SDRAM在进行读写操作时,必须要先进行页激活ACT操作,以保证存储单元是打开的,以便从中读取地址或者写入地址,关闭存储单元通过预充电PHC命令实现。在进行写操作时,内部的列地址和数据就会被寄存;进行读操作时,内部地址被寄存,等待CAS延迟时间(通常为13个时钟周期)后,读出的数据出现在数据总线上,具体时序详见SDRAM数据手册,此处不再赘述。(3)操作终止:当SDRAM接收到读、写指令后,开始进行顺次的读写操作,直到达到突发长度或者突发终止指令BT出现。2SDRAM控制器方案SDRAM控制器【6】针对SDRAM的指令操作特点,为SDRAM提供同步命令接口和时序逻辑控制,下面将以ALTERA公司的Cyclone系列FPGA为例,主机系统时钟为100MHz,使用三星公司的K4S641632E,8MByteSDRAM【7】,介绍SDRAM控制器的具体设计方法。图1为SDRAM控制器的接口原理图。图1SDRAM控制器接口原理图接口信号介绍:(1)与主机接口信号:CLK:系统时钟信号;RESET::系统复位信号;CMD2:0:译码指令,如表3所示;CMDACK:指令应答信号,通知主机命令已被SDRAM执行;ADDR:地址线,根据具体情况确定位数,本例中为22位,A21、A20代表页地址BA1,BA0;A19A8代表行地址;A7A0代表列地址;DATAIN/DATAOU:输入、输出数据总线;DM:数据掩码;(2)与SDRAM接口信号:SADDR:12位地址线,在读、写操作时,地址线分时复用为行地址和列地址;BA:页地址,BA0,BA1;CS:片选信号;CKE:时钟使能信号;RAS、CAS、WE:命令控制信号;DQM:SDRAM数据掩码;DQ:双向数据线;SDRAM控制器作为顶层模块,由3个主要模块组成:接口控制模块、命令生成模块、数据路径模块。下面将详细的介绍各个模块的功能和关键设计的VHDL实现方法。表3CMD命令字2.1接口控制模块接口控制模块主要实现的功能包括:将CMD2:0翻译成接口指令和对刷新计数器的控制,如图2所示。首先通过状态机来完成对CMD2:0的翻译,在VHDL程序中声明一个用户自定义类型states,根据CMD2:0输入来决定状态的转移,完成对CMD2:0的解码,如下所示:typestatesis(nop,reada,writea,refresh,precharge,load_mode);signalstate:states;casecmdiswhen011=statestate=nop;SDRAM需要周期性刷新操作以保持数据,数据手册中通常会给出在一定的时间T内,SDRAM至少刷新X次,如果用户使用频率为FrMHz的时钟,则刷新周期Tf可以通过下面的公式计算出:Tf(T*Fr)/X。例如,本例中数据手册要求64ms内至少刷新4096次,系统时钟周期为100MHz,则刷新周期为(64ms*100MHz)/4096,得出结果等于1562.5,所以至多1562个时钟周期的时间就必须对SDRAM刷新一次。刷新控制在程序中通过一个计数器来完成,当到达规定的计数周期,就向SDRAM发出REF_REQ刷新请求,直到SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值开始下一次的计数。图2接口控制模块2.2命令生成模块图3是命令生成模块,主要实现了对输入的指令请求进行仲裁判断,并将仲裁后要执行的指令解码成SDRAM需要的RAS、CAS等信号,从而实现对SDRAM的控制。图3命令生成模块之所以需要仲裁机制,是因为在指令执行之前可能会发生以下情况:其它指令和刷新请求同时到来;刷新请求到来时,其它指令正在执行。仲裁机制实现方法如下:(1)SDRAM在每一刻只有一个指令在执行;(2)先到的指令先执行,即:如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;(3)其它指令和刷新请求同时到来时刷新操作先执行。经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成可控制SDRAM的信号,同时还要用三个移位寄存器对命令执行的延迟时间进行控制。第一个为指令延时寄存器,用来保证SDRAM有充足时间完成最终指令。例如,如果命令的执行需要8各时钟周期的时间,则指令延时寄存器com_delay的初值设为“11111111”,同时声明一个内部信号com_done,作为指令执行完成的标志的。在指令执行期间,每一个时钟上升沿到来时,移位寄存器向右移位一次,com_delay0的移入com_done,同时“0”移入最高位com_delay7。当com_done为“0”时,就说明指令的延迟时间已到,即通过com_done的值,就可以判断当前指令是否执行完成。要注意的是:移位寄存器的位数和初值,应该根据SDRAM的数据手册中命令完成需要的时间和系统的时钟周期来确定。下面得例程仅供参考。if(do_state=refreshordo_state=readaordo_state=writeaordo_state=prechargeordo_state=load_mode)thencommand_delay(7downto0)=11111111;-移位寄存器初值command_done=1;elsecommand_done=command_delay(0);-移位操作command_delay(6downto0)=command_delay(7downto1);command_delay(7)=0;endif;当输入的指令为writea和reada指令,将引发一系列指令的执行,和其它指令相比需要附加时间。所以,声明第二个移位寄存器rw_shift,来计算这两个指令的附加时间,其工作原理和第一个移位寄存器是一样的。最后一个移位寄存器oe_shift用来为数据通道生成oe,即数据输入、输出使能信号。对于非页模式的读写来说,oe保持有效的时间取决于突发长度。并且oe有效的起始时间对读操作和写操作时不同的:读操作时,oe有效的起始时间取决于CAS延时时间,而对于写操作时则在写指令开始时oe就是有效的。23数据路径模块数据路径模块主要是在writea和reada命令期间处理数据的路径操作。模块的结构图如图4所示。DQ是双向数据线,用来传输从SDRAM读出数据和向SDRAM写入的数据。无论是数据在读出还是写入时,都是在oe有效,即oe为高电平时才能进行传输。DM是由主机输出的数据掩码,通过DQM输出到SDRAM的LDQM和UDQM管脚,进而控制SDRAMI/O缓冲的低字节和高字节。图4数据路径模块3总结本文结合SDRAM控制指令的特点,详细的介绍了一种基于FPGA的通用SDRAM控制器的设计方案。本文所介绍的指令状态的转移、仲裁机制的实现和移位寄存器控制指令延迟时间的方法,提供了一种SDRAM控制器的设计思想,由于SDRAM的控制机制比较复杂,具有多种突发读写的工作模式,我们可以根据实际应用中的需求情况来编写程序,实现最基本的读写和刷新操作,不必要顾全到每一种情况。SDRAM作为高速数据缓存,在基于现场可编程门阵列FPGA的控制下,将在高速、高密度、高端的数字电路领域中得到更加广泛的应用。参考文献1王诚,吴华,范丽珍,等.AlteraFPGA/CPLD设计(基础篇).人民邮电出版社,2005,7.2田丰,邓建国,李巍,贾治华.SDRAM的设计与VHDL实现.电子技术应用,2003,(31)2:74-77.3刘云清,佟首峰,姜会林.利用FPGA实现SDRAM控制器的设计.长春理工大学学报.2005,28(4):47-50.4宋一鸣,谢煜,李春茂.基于FPGA的SDRAM控制器设计.电子工程师,2003,29(9):10-13.5周正昆.基于FPGA的SDRAM控制器设计.现代电子技术,2003,

温馨提示

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

评论

0/150

提交评论