根据FPGA的DDRSDRAM控制器的设计.doc
,普通本科毕业设计题目:基于FPGA的DDR SDRAM控制器的设计,摘 要 随着半导体技术的发展,A/D采样的速率越来越高,相应需要越来越大容量的存储器。存储器是目前数字系统中的关键部件之一,DDR SDRAM(Double Data Rate SDRAM,双倍数据率同步动态随机存储器)以其大容量、高速率和良好的兼容性以及低成本在计算机、消费类电子、通信等领域得到了相当广泛的应用。DDR控制器实际上就是用户端与DDR存储器之间进行数据传输的一个桥梁,通过DDR控制器,用户端命令被转化成DDR存储器所支持的命令格式,从而实现用户端对DDR的访问。本文对DDR SDRAM及其控制器的结构、接口和时序进行了深入研究与分析,得出一些DDR SDRAM控制器的关键技术特性,然后基于Altera公司Cyclone II系列的FPGA芯片EP2C8Q208C8平台,利用Verilog硬件描述语言设计实现了DDR SDRAM存储控制器。编写自动生成自加数据的模块,将自加数据写入到SDRAM中,再从SDRAM中读回,从UART 发送出去并在串口调试工具上显示。【关键词】可编程逻辑门阵列 DDR SDRAM 存储控制器 通用异步收发器 AbstractAlong with the development of semiconductor technology, A/D sampling rate is higher and higher, requiring more capacity of corresponding. Storage of memory is one of the crucial devices in the digital system at present, the DDR (Double Data Rate) SDRAM has many advantages for its large capacity, high speed and the low cost, it has been used in quite a number of fields, such as the Server, the WorkStation, the Personal computer and the consumer electronics, the communication and other areas. DDR controller actually is a bridge between client and DDR memory for data transmission, through the DDR controller, client command was converted into the DDR memory which support command format, so as to realize the visit of DDR clients.The pivotal technologies of DDR SDRAM and memory controller, such as Structure, Interface and Timing are explored in this article, after a research on the main feature inside the DDR controller, several functional modules of the controller are designed out, and then based on FPGA chip Cyclone II Altera company EP2C8Q208C8 platform series used Verilog hardware description language. Write automatic generation and add data modules, with data from the data written to add SDRAM, and again read back from SDRAM, send it out from UART and display on serial port debugging tools.【Key words】FPGA; DDR SDRAM; Memory Controller; UART ,目 录1 绪论21.1 DDR SDRAM的现状及发展趋势21.1.1 DDR内存的现状21.1.2 DDR内存的发展趋势31.2 课题研究的意义31.3 课题研究的要求21.4 本文的安排22 DDR SDRAM技术介绍42.1 DDR SDRAM的分类42.2 DDR SDRAM的基本概念42.2.1 DRAM存储原理52.2.2 DDR SDRAM的逻辑BANK与芯片位宽52.2.3 DDR SDRAM芯片容量52.2.4 DDR SDRAM内存刷新62.3 DDR SDRAM的命令62.3.1 初始化62.3.2 DDR SDRAM指令72.4 DDR SDRAM读写操作时序82.4.1 读操作时序82.4.2 写操作时序83 FPGA和Quartus II简介103.1 FPGA技术简介103.1.1 FPGA基本结构103.1.2 FPGA的基本特点103.1.3 FPGA芯片的选择113.2 Quartus 简介113.3 Quartus II的设计流程114 系统硬件设计134.1 系统整体框架134.2 自动累加数据产生模块134.3 DDR SDRAM控制器模块144.3.1 DDR SDRAM控制器整体状态分析144.3.2 DDR SDRAM控制器总体架构154.3.3 输入/输出FIFO模块164.3.4 控制接口模块设计174.3.5 控制接口模块设计194.3.6 数据通路模块设计214.4 串口读数据模块235 系统控制器的功能验证265.1 系统控制器的功能仿真265.1.1 系统控制器Testbench设计265.1.2 系统控制器Testbench总体架构265.1.3 DDR SDRAM Controller Testbench顶层模块设计265.1.4 DDR SDRAM Controller Testbench仿真波形275.2 串口读取数据验证286 总结29参考文献30致 谢311 绪论1.1 DDR SDRAM的现状及发展趋势1.1.1 DDR内存的现状目前DDR内存市场占有量非常大,尤其是近些年随着市场需求的高速增长使得加入该行业和研究该技术的人员也越来越多,DDR控制技术处于高速发展阶段。和显卡、主板等差异化较大的市场相比,内存市场由于有着强大的JDEDC把持,并且产品本身形态较为单一,因此各家产品性能和设计差距都不太大,同质化现象较严重。不过,同质化并不意味着发展速度慢,相反,也正是由于有了统一的JEDEC规范,内存一直按部就班地发展着。对于DDR系统来说,DDR控制器的研究是其关键核心,该部分要完成读写控制、地址控制等功能。1.1.2 DDR内存的发展趋势第一代DDR200规范并没有得到普及,第二代PC266 DDR SDRAM(133MHz时钟2倍数据传输266MHz带宽)是由PC133 SDRAM内存所衍生出的,它将DDR内存带向第一个高潮,其后来的DDR333内存也属于一种过度,而DDR400内存成为目前的主流平台选配,双通道DDR400内存已经成为800FSB处理器搭配的基本标准,随后的DDR533规范则成为超频用户的选择对象。现在DDR2/3都在扩大产量,DDR3量产后,供应将大增,而成本将会降低,所以DDR3将会降价,这样也能促进普及,而普及又会促使厂商增加产量,产量增加又会进一步摊薄成本降低价格。随着人们要求的变高,速率更快容量更大的内存不断会涌现出来。1.2 课题研究的意义DDR内存遍布于各种电子产品,正渐渐成为现代社会中不可或缺的信息存储载体。存储器对现在的数字化系统性能至关重要,是决定系统性能的关键设备之一。面对越来越多样化的应用需求,存储技术发展得相当迅速,其中DDR SDRAM作为一种在性能与成本之间折中的解决方案,以其高速、大容量、运行稳定与高性价比等优点已经成为目前存储器的主流。,随着电子技术在工业、医疗、商业等领域的发展,人们对数据传输率的要求越来越高,传统的单片机早已不能满足这种高速数据传输的要求。与此同时,可编程逻辑器件FPGA以其强大的功能,开发过程投资小、周期短,可反复编程修改,开发工具智能化等特点,成为当今硬件设计的潮流;它的集成度高,可完成极其复杂的时序与组合逻辑电路功能,更适用于高速、高密度的高端数字逻辑电路设计领域。本设计采用FPGA来进行系统设计。采用传统的单片机编程实现算法的方法虽灵活性较高,但是执行复杂工作时处理速度远远不能满足要求,而且单片机的时序性较差。要改善这个问题,FPGA是很好的选择之一,它有足够大的逻辑阵列密度(百万门级以上),比较高的速度(400MHZ以上)。由此可见,采用FPGA完成DDR SDRAM控制器的设计可以使内存上升到一个新级别。因此对DDR存储控制器的设计研究具有重要意义。1.3 课题研究的要求本课题要求完成基于FPGA的DDR SDRAM(此SDRAM为SAMSUNG公司的K4S641632H芯片)控制器的设计,实现以下功能要求:(1)初始化DDR SDRAM;(2)简化DDR SDRAM的读写时序;(3)将DDR SDRAM接口的双时钟沿数据转换为单时钟沿数据,使得对DDR SDRAM的操作类似于普通RAM; (4)控制器还要产生周期性的刷新命令来维持DDR SDRAM内的数据而不丢失。1.4 本文的安排本文对DDR SDRAM控制器从整体设计到各部分细化设计展开讨论,对系统涉及的各模块的设计进行详细描述,最后对系统功能仿真以及读写数据验证。全文的内容安排如下:第一部分为绪论。简单介绍了内存的现状与发展趋势,并对本课题的研究意义及其要求做了简单论述。第二部分,介绍了DDR SDRAM相关技术,首先对DDR的存储原理、逻辑BANK、位宽等基本概念进行了大致介绍,然后对其命令进行简单介绍,最后对其读写时序做了详细分析。第三部分,介绍了FPGA相关知识并对此系统开发平台Quartus II也进行了简单介绍,接着描绘了此系统在开发平台上的设计流程。第四部分,详细介绍了系统的整体架构包括自动累加数据生成模块、控制器模块、串口读数据模块,并分别重点研究构成控制器的主要模块:输入/输出FIFO模块、数据接口模块、命令模块、数据通路模块。第五部分,主要是对控制系统的功能进行验证。将编写好的测试文件在Modelsim平台上完成功能仿真,并对系统的读写功能进行了串口输出验证。最后,对系统实现了读写功能进行总结。2 DDR SDRAM技术介绍2.1 DDR SDRAM的分类DDR的频率可以用工作频率和等效频率两种方式表示,工作频率是内存颗粒实际的工作频率,但是由于DDR内存可以在脉冲的上升和下降沿都传输数据,因此传输数据的等效频率是工作频率的两倍。按DDR的频率可分为以下几类,如表2.1所示。表2.1 DDR内存分类7DDR规格传输标准实际频率等效传输频率数据传输率DDR200PC1600100MHz200MHz1600MB/sDDR266PC2100133MHz266MHz2100MB/sDDR333PC2700166MHz333MHz2700MB/sDDR400PC3200200MHz400MHz3200MB/sDDR433PC3500216MHz433MHz3500MB/sDDR533PC4300266MHz533MHz4300MB/s2.2 DDR SDRAM的基本概念DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR存储器的核心建立在SDRAM的基础上,但在速度和容量上有了提高。首先,它使用了更多、更先进的同步电路,使用了差分时钟输入;其次,DDR使用了PLL锁相环和数据选通滤波信号(Data Strobe signal),当数据有效时,存储控制器可使用这个数据选通滤波信号来精确定位数据,每8位数据对应输出一次数据选通滤波信号,并且同步来自不同的双存储器模块的数据。DDR存储器本质上不需要提高时钟频率就能加倍提高SDRAM的速度,它允许在时钟脉冲的上升治和下降沿读出数据,因而其速度是标准SDRAM的两倍。至于地址与控制信号则与传统SDRAM相同,仍在时钟上升沿进行传输。DDR存储器的设计可让存储控制器每一组DQ/DQS/DM与DIMM(Dual In-line Memory Module,双列直插式存储器模块)上的颗粒相接时,维持相同的负载,减少对主板的影响。在存储器架构上,传统SDRAM属于8组式,即存储器核心中的I/O寄存器有8位数据I/O,但对于8组式的DDR SDRAM而言,存储器核心中的I/O寄存器却是16位的,即在时钟信号上升沿时输出8位数据,在时钟信号下降沿时再输出8位数据,一个时钟周期总共可传输16位数据。DDR芯片内部除了四个存储矩阵(四个逻辑BANK)之外,就是一些控制逻辑、行列缓冲与解码、I/O寄存器或缓冲,使用双向的DQS信号进行源同步计时定位读/写的数据信号2。DDR存储器可以在不用大量增加管脚的情况下,大幅度提高数据传输的带宽(提高了一倍),并且目前价格也非常便宜,性价比很高,足以满足一般的存储设计需求。2.2.1 DRAM存储原理 DRAM利用MOS管的栅电容上的电荷来存储信息,一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,由于栅极漏电,代表1的电容会放电,代表0的电容会吸收电荷,这样会造成数据丢失,因此需要一个外设电路进行内存刷新操作。刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。2.2.2 DDR SDRAM的逻辑BANK与芯片位宽DDR SDRAM是一种高速CMOS动态随机访问存储器,它在内部被配制成4个BANK的DRAM,外部数据具有4位、8位、16位三种宽度。DDR SDRAM中每一个BANK中的存储单元被组织成正方阵列,由若干行和若干列组成,这些存储单元通过行和列的地址译码器来寻址。对于任何一个单元的读操作,整个行均被读出,然后重新写回(刷新)。对于任何一个单元的写操作,整个行均被读出,然后改变其中一个单元的值,最后将整个行写回。阵列就如同表格一样,将数据“填”进去,可以把它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元。2.2.3 DDR SDRAM芯片容量内存芯片的容量就是所有L-BANK中的存储单元的容量总和,计算有多少个存储单元和计算表格中的单元数量方法一样:芯片容量=存储单元数量位宽=(行数列数L-BANK数量)位宽DDRSDRAM具有如下的容量:(1)64Mb(即67,108,864位):16M 4(4M44banks)、8M8(2M84banks)、4M16(1M164banks);(2)128Mb(即134,217,728位):32M4(4M44banks)、16M8(2M84banks)、8M16(1M164banks);(3)256Mb(即268,435,456位):64M4(4M44banks)、32M8(2M84banks)、16M16(1M164banks);(4)512Mb(即536,870,912位):128M4(4M44banks)、64M8(2M84banks)、32M16(1M164banks);(5)1Gb(即1,073,741,824位):256M4(4M44banks)、128M8(2M84banks)、64M16(1M164banks)可以发现由于位宽的变化引起了存储单元的数量变化,也就是说在相同的总容量下,可以采用多种不同的位宽设计。2.2.4 DDR SDRAM内存刷新内存条应该叫做动态DRAM,其中的数据是靠电容特性存储的。由于电容会放电,要维持数据,就要不断的给它充电。给动态DRAM定期充电的机制就叫做数据刷新时钟电路,即内存刷新电路。一般情况下,内存刷新电路必须在数毫秒之内对DRAM刷新一次,否则数据就会丢失。很像是一个流沙漏斗,一旦不加沙就会完全漏光。刷新频率由芯片的工作频率以及每个BANK包含的行数决定。2.3 DDR SDRAM的命令2.3.1 初始化DDR SDRAM是一种易失性存储器器件,也就是说,当器件掉电后,存储在DDR SDRAM中的所有内容及其配置信息将会丢失。DDR SDRAM每次上电后,必须按一定的顺序来初始化其内部状态机并配置用户定义的操作参数,否则会引起不可预料的操作结果。在DDR SDRAM能够被存取数据之前,需要先对其初始化1。该初始化流程是预先定义好的,初始化的过程中将设置DDR SDRAM的普通模式寄存器和扩展模式寄存器,用来制定DDR SDRAM的工作方式。这些设置包括突发长度、突发类型、CAS潜伏期和工作模式以及扩展模式寄存器中的对DDR SDRAM内部PLL的使能与输出驱动能力的设置。模式寄存器可以被再编程,这时需要DDR SDRAM的各个区(BANK)处于空闲状态,从而改变存储器的工作模式。如果操作正确,对模式寄存器的再编程不会改变存储器内存储的数据。初始化完成之后,DDR SDRAM便进入正常的工作状态,此时便可对存储器进行读写和刷新。2.3.2 DDR SDRAM指令DDR SDRAM支持的指令与SDR SDRAM基本一致,本课题将其基本指令分为表2.2和表2.3,表2.2中的操作主要由CSn,RASn,CASn,WEn这四个信号来控制(CKE在这些操作下为高电平),需要由CKE来控制的信号放在了表2.3中,即对DDR SDRAM工作状态的配置必须配合CKE信号来完成。表2.2 DDR基本指令真值表6命令符号CSnRASnCASnWEn无操作NOPLXX X读READLHLH写WRITLHLL行激活ACTLL HH自动刷新REFLLLH预充电PRELLHL写模式寄存器MRSLLLL 注:L代表低电平,H代表高电平,X代表高电平或低电平操作符号CKEn-1CKE命令进入自动刷新SELFHLREF退出自动刷新SREHHDSEL/NOP进入低功耗PWDNHLDSEL/NOP退出低功耗PDEHHDSEL/NOP表2.3 DDR基本指令真值表注:CKEn是CKE信号在第n个clock上升沿的逻辑状态,CKEn-1是CKE信号在第n-1个clock上升沿的状态。2.4 DDR SDRAM读写操作时序2.4.1 读操作时序读操作的时序图如2-1所示:图2-1 DDR SDRAM读操作时序图上图的信号:CK和/CK是一组差分时钟,CK的上升沿对准COMMAND(命令)和ADDRESS(地址)的中央,一般叫做center-align(中间对齐)。ADDRESS只是一个column address(列地址),行地址已经在前面用ACTIVE命令打开了。DQ即数据总线,具有双向性,在空闲时为高阻。DQS 可以理解为数据使能信号,和数据同步,在空闲时也为高阻。DQ和DQS都是和时钟边沿对齐,叫做edge-align(边沿对齐)。另外上面有一个CL2.5的标识,CL即CAS Latency。CL是指内存在收到列地址信号(Column Address Strobe)后,要等待多少个系统时钟周期后才进行读取的动作。注意到上图中在列地址被采样2.5个时钟周期后,数据总线上出现了有效的读数据。2.4.2 写操作时序在对DDR SDRAM的写操作中,同样以状态机完成其时序控制。每发起一次写操作,DDR SDRAM存储8个16位的数据,其中控制信号FULL由前端数据缓存(FIFO)产生,当前端缓存中存储的数据达到设定的深度时,FULL被置为高。控制核以100MHz的时钟从缓存中读走宽度为16位的数据,当缓存内部的读计数器计数到达设定值时,FULL信号置低,控制器的读操作停止。在DDR控制接口模块产生的时序配合下以双倍速率完成一次突发写。和读操作不同是发出写命令(write)后,需要等待tDQS时间才能送出写数据(DQ)和DQS。tDQS参数是指DQS的第一个跳变沿相对于写命令的延时时间,tDQS有最大值和最小值,就是说在最大最小值之间将DQ/DQS送出来,DDR SDRAM都能够正常接收。写操作时序图如2-2。图2-2 DDR SDRAM写操作时序图3 FPGA和Quartus II简介本次设计就是以EDA技术为基础,使用基于FPGA技术,利用Altera公司开发的功能强大的Quartus II9.1开发软件来完成相关的设计。3.1 FPGA技术简介3.1.1 FPGA基本结构FPGA的结构一般分为三部分:可编程输入/输出模块、可编程逻辑单元(LE)、可编程内部互连资源(IR)。LE是FPGA芯片实现逻辑的基本结构,LE之间可以灵活地互相连接。LE的功能很强,不仅能够实现逻辑函数,还可以配置成RAM等复杂的形式。FPGA采用SRAM进行功能配置,可重复编程,但系统掉电后,SRAM中的数据丢失。因此需在FPGA外加EPROM或FLASH,将配置数据写入其中,系统每次上电自动将数据加载到SRAM中。装载的过程是在FPGA内部的一个时序电路的控制下自动进行的,所以在为FPGA设计电路时,一定要给它配备一个专用的配置芯片。除了上述构成FPGA基本结构的三种资源以外,随着工艺的进步和应用系统需求的发展,一般在FPGA中还可能包含以下可选资源:存储器资源(块RAM、分布式RAM);数字时钟管理单元(分频/倍频、数字延迟、时钟锁定);算数运算单元(高速硬件乘法器、乘加器);多电平标准兼容的I/O接口;高速串行I/O接口;特殊功能模块(以太网MAC等硬IP核);微处理器(PowerPC405等硬处理器口核)。3.1.2 FPGA的基本特点FPGA有以下特点:采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片;FPGA可做其它全定制或半定制ASIC电路的中试样片;FPGA内部有丰富的触发器和I/O引脚;FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一;FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。随着微电子技术、EDA技术、以及应用系统需求的发展,可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA正在逐渐成为数字系统开发的平台,并将在以下方面继续完善和提高:(1)高集成度,大容量、低成本、低电压,低功耗;(2)资源多样化;(3)适用于片上系统:处理器、高速串行I/O、DSP等等;(4)深亚微米工艺的使用。目前基于90nm工艺的FPGA已经商用,正在向65nm挺进;(5)各种软硬IP库的发展和完善;(6)动态可重构技术实用化。3.1.3 FPGA芯片的选择根据系统的功能要求,本设计使用的FPGA是Altera公司的Cyclone II系列的EP2C8Q208C8,Cyclone II FPGA是Altera公司推出的低成本FPGA。Cyclone II系列的FPGA有专门的DDR SDRAM接口电路,可以方便地实现FPGA与DDR SDRAM的连接。在整个逻辑设计中,利用Altera公司的PLL锁相环Megafuntion产生所需要的时钟,采用Altera LPM宏功能模块中的异步FIFO,DDR SDRAM控制器接口采用Altera LPM宏功能模块中的DDR MEMORY接口。采用现成的IP核,方便了我们的设计,不仅在设计效率上得到了提高,而且在可靠性方面也得到了一定程度的保证。DDR SDRAM系统中数据通路设计以及控制时序是本系统设计的核心,在构建系统之前,基于以下因素选择了Cyclone II系列的EP2C8芯片:(1)高达400MHz的工作频率可以满足高速数据处理以及传输的要求;(2)Altera公司研发的Quartus II软件拥有更直观的开发界面,为整个系统的扩展和开发提供了很大的便捷。3.2 Quartus 简介Quartus II是Altera开发的CPLD/FPGA应用软件工具,Quartus II提供了完善的集成而且与电路构造不关联的设计环境,拥有数字逻辑设计的全部特性。此外,Quartus II软件为设计流程的每个阶段提供Quartus II图形用户界面、EDA工具界面和命令行界面。设计流程包括以下几个步骤:设计输入;综合;仿真;器件编程与配置。其中器件编程与配置包括以下四种编程模式:被动串行模式、JTAG模式、插座内编程模式和主动串行模式。3.3 Quartus II的设计流程建立工程是每个开发过程的开始,当工程建立好后,要适当选择设计的输入方式,设计输入就是完成电路设计。Quartus II提供原理图输入方式、文本输入方式和内存编辑输入方式。大多数工程设计时,都会用到LPM功能模块和宏功能模块来加速设计输入。当编译成功后,进行功能仿真验证电路功能是否正确。通过功能仿真能及时发现设计中的错误,加快设计速度,提高设计的可靠性。综合优化是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接。综合优化完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合优化生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响.综合后仿真虽然比功能仿真准确一些,但是只能估计门延时,不能估计线延时。这些都通过后,进行程序下载和功能确认。满足设计要求,设计完成,否则继续上述工作。设计流程如图3-1所示。图3-1 Quartus II设计流程图4 系统硬件设计4.1 系统整体框架系统主要由三大块组成,分别是自动累加数据产生模块、DDR SDRAM控制器模块、串口读数据模块。其中DDR SDRAM控制器模块是本设计的重点,它又由命令模块、控制器接口模块、数据通路模块和输入/输出FIFO模块相互协作来完成对数据的读写操作。系统的整体框架如图4-1所示。图4-1 系统整体框图4.2 自动累加数据产生模块为了验证DDR SDRAM控制器的功能,在FPGA内部设计了一个自动累加数据产生器供给SDRAM的写入数据部分。此模块自动产生0x00到0xFF的数据并与控制器地址线、数据线相连,经输入FIFO缓存,写入到SDRAM中;然后经过一系列有序的控制器操作指令后经输出FIFO缓存;最后,由串口读出数据在串口调试工具上显示出来,从而可以通过读出来的数据验证控制器是否能够有效的实现功能。此模块包含有读写生成信号、读写数据产生信号、读写请求信号及响应信号。上电500us延时等待SDRAM就绪后,每640ns写入8个16bit数据到SDRAM。自动累加数据产生模块的原理图如图4-2所示。图4-2 自动累加数据产生模块 自动累加数据产生模块部分代码如下:always (posedge clk or negedge rst_n)if(!rst_n) wrf_dinr <= 16d0;else if(!wr_done && (cntwr > 6h05) && (cntwr <= 6h0d) begin/上电0.5ms延时完成wrf_dinr <= wrf_dinr+1b1;/写入数据递增assign wrf_wrreq = wrf_wrreqr;assign wrf_din = wrf_dinr;endmodule4.3 DDR SDRAM控制器模块4.3.1 DDR SDRAM控制器整体状态分析DDR SDRAM支持的常用命令有7种:空操作(NOP)、激活操作(Active)、突发读(Burst Read)、突发写(Burst Write)、自动刷新(Auto refresh)、预充电(Precharge)、模式寄存器配置(Mode Register Set)。所有的操作命令都是通过信号线RAS_N、CAS_N、WE_N共同控制来实现的。在对DDR SDRAM 进行存取数据操作之前,首先要对其初始化;初始化完成之后,DDR SDRAM 便进入正常的工作状态,此时便可对存储器进行读写和刷新;数据的存取以一个激活命令(Active)开始,接着便是读(Burst Read)或写(Burst Write)命令。自动刷新(Autorefresh)命令用来周期性地刷新DDR SDRAM,以保持其内部的数据不丢失。状态转换图如图4-3所示。图4-3 DDR SDRAM控制器状态机4.3.2 DDR SDRAM控制器总体架构本系统控制器是本次设计的主体部分,自动累加数据产生模块和串口读数据模块协同其工作来实现功能验证。其包括输入/输出FIFO模块、控制接口模块、CMD命令模块、数据通路模块。其中控制接口模块包括命令接口模块和刷新控制模块,用于接收系统的控制信号,进而产生不同的CMD命令模块用于接收CMD命令并解码成操作指令并产生SDRAM的操作动作,包括仲裁和命令产生模块;数据通路模块则用于控制数据的有效输入和输出。系统控制器大致框架如图4-4所示图4-4 DDR SDRAM控制器框图4.3.3 输入/输出FIFO模块输入/输出FIFO模块的顶层原理图文件如图4-5所示。图4-5 输入输出FIFO模块FIFO模块部分代码如下:/例化SDRAM写入数据缓存FIFO模块Wrfifo uut_wrfifo( data(wrf_din), rdclk(clk_100m), rdreq(sdram_wr_ack), wrclk(clk_25m), wrreq(wrf_wrreq), q(sys_data_in), wrusedw(wrf_use) );/例化SDRAM读出数据缓存FIFO模块Rdfifo uut_rdfifo( data(sys_data_out), rdclk(clk_25m), rdreq(rdf_rdreq), wrclk(clk_100m), wrreq(/*rdf_wrreq*/sdram_rd_ack), q(rdf_dout), wrusedw(rdf_use) );endmodule4.3.4 控制接口模块设计系统控制接口模块包括命令接口和刷新控制两个模块,该模块内含了初始化机制和系统指令分析机制。将CMD2:0翻译成接口指令和对刷新计数器的控制。首先通过状态机完成对CMD2:0的翻译,根据CMD2:0输入来决定状态的转移,完成CMD2:0的解码,系统控制接口模块如图4-6所示。SDRAM需要周期性刷新来保持数据的不丢失,芯片数据手册中通常会给出在一定时间T内至少刷新n次,如果用户使用的频率为FrMHz的时钟,则刷新周期Tf可以通过算式Tf=(T*Fr)/n计算得到。刷新控制在程序中通过一个计数器来完成,当到达规定的计数周期,就向SDRAM发出REF_REQ刷新请求,知道SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值开始下一次的计数。初始化机制不仅要完成对SDRAM的初始化配置,还要完成对控制器的初始化配置,使控制器与外部SDRAM的工作模式一致。其过程如下:由计数器控制在系统上电200us左右后,先进行SDRAM的初始化配置工作,由一个Precharge all bank指令完成对所有BANK的预充;接着是执行多个Refresh指令,然后通过模式配置指令LOAD_MODE来完成SDRAM的工作模式设置;之后进行控制器的初始化配置工作,先发出指令LOAD_REG1给控制器载入模式字,再发出LOAD_REG2指令载入控制器的刷新计数器值,完成控制器初始化配置。上述初始化过程结束后,系统指令分析机制才可接收并分析系统的读写信号和地址信息,以及从下个模块反馈回来的CMDACK信号,并产生对应的CMD命令和SADDR地址信息给CMD命令解析模块。通过程序设置,实现了根据初始化配置的参数来确定在读写到特定时刻发出Precharge或者Refresh的CMD指令,从而简化了系统的控制。而每当收到CMDACK为1时,表示CMD指令已经发出并有效,此时就要发出NOP命令。要说明的是,SADDR是分时复用的,在初始化载入模式时,SADDR用以传输用户自己定义的模式字内容;而在正常的读写期间,SADDR作为地址线传输SDRAM所需的行、列和块地址。此外,系统指令分析机制会根据控制器对SDRAM的操作处于什么样的状态,而反馈SDRAM_FREE和FDATA_ENABLE信号给系统用户。图4-6 系统控制接口模块ddr_control_interface模块部分代码:always (posedge CLK or negedge RESET_N)begin