欢迎来到天天文库
浏览记录
ID:10395444
大小:53.50 KB
页数:4页
时间:2018-07-06
《基于fpga的ddr控制器设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于FPGA的DDR控制器设计摘要 在分析DDRSDRAM基本操作特性的基础上,本文根据DDR的时序要求,提出了一种基于VerilogHDL语言的控制器实现方案。并且根据具体的应用环境给出了不同的读写方案,以提高时钟效率。控制器逻辑的RTL在FPGA板卡上实现,仿真在modelsim中进行,硬件的验证利用quartusII的逻辑分析仪(signaltapII)完成,以保证存储器的读写高效性与可靠性。 关键词 DDRSDRAM VerilogHDL FPGA DDRSDRAM是DoubleDataRateSynchronousDynamicRando
2、mAccessMemory(双倍速率随机存储器)的简称,它采用2.5V的工作电压,在核心时钟的上升沿和下降沿传输数据,具有比SDR(singledatarate)SDRAM多一倍的传输速率的优点。FPGA(Field-ProgrammableGateArray)是一种可编程器件,在FPGA上可以实现任意数字电路功能。在电子通讯领域,数据量越来越大,对存储器的需求也越来越大;FPGA具有并行性、可编程等优点,它的应用场合也越来越广,在FPGA板卡上嵌入SDRAM已经应用在很多系统中,因此研究在FPGA平台上来实现DDR读写控制的方法具有重要的实际意义。本
3、文第1、2节介绍基于FPGA的DDRSDRAM控制器的设计过程,第3节主要讲述控制器的调试。FPGA为Altera公司的cycloneIII,DDR为Hynix公司的16Mx16的DDR。 1 DDRSDRAM的基本操作 1.1 DDRSDRAM的指令 1.2 DDR常见读写延时参数 DDR的读写数据是在DQS信号下捕捉的,数据的位数决定了DQS的位数,一位DQS信号负责捕捉八位数据信号。写操作时,DQS在数据信号DQ的中心捕获数据;读操作时,DQS在数据信号的边沿捕获数据[1]。在数据读写之前,需要先进行行有效操作,即ACT命令,然后经过tR
4、CD的时间,执行读或写操作命令。在读操作中,读命令后还要经过CL(CASlatency)时间才开始读取数据。 2 控制器的设计方案 实现DDR的控制,重点需要解决:时钟体系问题,状态转换与指令操作三个方面。本文设计的DDR控制器主要有三个模块,分别是状态转换控制模块,指令译码模块和时钟模块,如图1所示。控制器的用户控制信号有CMD(用户发送的指令)与ADDR(用户地址)、DATAIN(DDR的输入数据)和DATAOUT(DDR的输出数据)。时钟模块提供DDR主时钟和控制器系统内部的数据时钟(CLK_X2)。在使用时,用户首先发送一个CMD到状态转换
5、模块进行状态转换,然后控制器返回一个CMDACK响应用户,在第二个时钟周期将这个命令状态标志输入到指令译码模块进行指令译码,控制指令信号,完成相应的操作。伴随着状态的转换,相应的地址信号也锁存进DDR。 2.1 时钟设计 根据DDR的时序要求,本文一共采用了三个时钟,分别是DDR的一对反相时钟(DDR_CLK_P,DDR_CLK_N)和数据控制时钟(CLK_X2,由时钟模块产生)。根据DDR的要求,指令信号要在DDR_CLK_P的上升沿采样,所以采用其反相时钟信号DDR_CLK_N来同步命令逻辑,使DDR_CLK_P的上升沿恰好在命令的中心。根据D
6、DR读写数据的要求,采用了一个DDR系统时钟频率两倍的数据时钟,用来处理读写数据。 2.2 DDR的状态控制 DDR的控制器主要有读、写、预充电、刷新、配置模式寄存器等操作。图4是各种操作的状态转化图,是指指令之间转换的可能操作。DDR在工作时主要分为两个阶段:上电初始化和读写过程。初始化很重要,主要完成时钟稳定与寄存器配置的过程,它是一些指令的顺序执行过程。本文采用的DDR是Hynix公司的产品,其初始化配置过程如下[1]: 1、上电,开启时钟,并且稳定最小200μs的时间; 2、时钟稳定后,执行空指令,并且CKE=1; 3、配置扩展
7、模式寄存器(EMRS)来使能DLL(DelayLockedLoop,延时锁定环),等待200个周期后进行下一步操作; 4、配置模式寄存器(MRS)来重启DLL,将芯片设置到等待状态(设置A8=1来重启DLL); 5、对所有BANK进行预充电; 6、执行两次或更多自刷新命令; 7、执行一次模式寄存器配置命令,来初始化模式寄存器,设置读写操作的参数; 8、等待200个周期后,初始化完成。 不同厂家的DDR初始化过程不尽相同,其寄存器配置的参数可能也不同,为了提高控制器的通用性,可以在控制器外来配置初始化操作。 2.3 DDR的读写效率 DD
8、R需要定时刷新指令与预充电指令,所以合理地处理这两个指令可以有效地提高读写的效率。刷新是周期性
此文档下载收益归作者所有