首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» Xilinx DDR2 IP 核控制器设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Xilinx DDR2 IP 核控制器设计
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-7-5 20:48
|
只看该作者
Xilinx DDR2 IP 核控制器设计
数码相机
,
汽车导航
,
计算机
,
控制器
,
数字电视
摘要:提出一种便于用户操作并能快速运用到产品的DDR2控制器IP核的FPGA实现,使用户不需要了解DDR2的原理和操作方式的情况下,依然可以通过IP核控制DDR2。简单介绍了DDR2的特点和操作原理,并对DDR2控制器的IP核进行了模块化的划分,分析了每个模块的功能。强调了用户接口功能的完善,并介绍了IP核的操作流程,使每个用户都能轻松的使用该IP核。
1 引言
DDR2作为主流的内存具有存取速度快、存储量大、成本较低等特点,因此被广泛地运用到计算机、汽车导航系统、高清数字电视、数码相机等电子行业的各大领域当中。随着科技的发展,FPGA的技术也在不断进步,FPGA的性能、稳定性、容量等指标已经有了很大的提高。鉴于FPGA的发展和DDR2高性能的表现,越来越多的研发人员会通过FPGA直接对DDR2进行控制,这时他们必须对DDR2的工作原理有深入的了解,但这样就很可能加大了研发周期,直接影响了公司的经济效益。因此设计一款开发人员完全不需要了解DDR2工作原理的DDR2控制器IP核是非常具有实际意义的。
本文提出了一款方便用户使用的DDR2控制器方案。用户不需要了解DDR2的工作原理,只用控制有限的几个用户接口就可以对DDR2进行操作,在产品开发时可以大大缩短开发周期。
2 DDR2的特点
DDR2是基于JEDEC(Joint Electronic Device Engineering Council)标准的外部存储设备,并且DDR2还有着低功耗,高密度和高频率等特点。与DDR相比DDR2具有如下特点:
1)相同的核心的频率的情况下,DDR2的工作频率是DDR的两倍。
2)ODT(on.Die Termination)片内终结器:为了防止信号反射问题,DDR2中集成了ODT。ODT能够吸收线路终端的信号的影响,而且能使得信号质量更高和数据传输更快。
3)OCD(Off-Chip Driver)离线驱动调整:通过调整输出驱动的上拉/下拉电阻值,使得充、放电动作的电压误差减到最小,调整DQS和DQS#的波形交叉点,平衡参考时钟的上升沿和下降沿波形,从而保证内部输出驱动的稳定。
4)前置CAS(Posted Column Address Strobe)前置列地址选通:通过将CAS信号插到RAS(Row Address Strobe)信号的后一个时钟周期,避免命令和CAS信号的冲突,提高命令总线和数据总线的速度。
3 DDR2的操作原理
对DDR2的操作是一个复杂又繁琐的过程,它的主要操作如下:
1)初始化:DDR2的工作方式是由内部和外部寄存器所控制的,因此在上电时先需要对DDR2的寄存器进行配置,即初始化。通过初始化可以对DLL,Burst Length(突发长度),Burst type(突发类型),CAS Latency(CAS延时),CL latency(CL延时),ODT,OCD,等的配置。
2)行激活和列选址:在DDR2内部存储就好是被分成几个表格一样,L-BANK表示有几张表格,而在每一张表格中首先确定它的行,再确定列来选取所存放的地方。根据DDR2的特征,对DDR2的地址选择分为两步:第一步行激活:片选CS#拉低,通过BAO、BA1(BA2)来选择L-BANK,把行选通RAS#拉低,通过地址线输入行地址。第二步列选通:在行激活的下个周期,列选通CAS#拉低,通过地址线输入列地址。如果是在同一行进行操作时,就可以省略行激活。
3)读/写指令的发布:当列选址完成后,经过AL的延时就可以发出读/写命令对DDR2进行操作了,再经过CL个周期(从读操作的命令发出到第一个数据的延时)的延时第一
个读数据输出或者是经过CL-1个周期(写操作命令的延时比读操作命令的延时少一个周期)的延时输入第一个数据。
4)预充电(Precharge):DDR2为动态储存体,它的储存体上的电容电压会因为时间或干扰的情况下使电压值变化,从而使数据产生变化。在对另一行进行操作时必须关闭原来的行,重新发送行/列地址,这时会对DDR2产生干扰,因此在重新换行时要对其电容进行有选择的充电操作即进行预充电。
5)刷新(refresh):DDR2的储存体是体积极小的电容,由于漏电的存在,电容中的电量会不断的减小,而储存体是根据电容电量的多少来判断数据是1或者是0的,为了保证数据的可靠性,就需要定时对存储体上的电容进行有选择的充电,即刷新。
4 DDR2控制器IP核的架构思想
一方面DDR2具有动态存储的特点,它需要在一定的时间和特殊的情况下进行充电,因此在数据传输的时候不能进行不间断传输,而要对传输的数据量进行有效的实时控制。另一方面DDR2又具有高速的特点,在DDR2数据传输方面频率很高,而在FPGA内部的控制方面又不需要达到这么高的频率,因此在FPGA的内部就形成一个跨频域的操作形式。基于上述两方面的原因,在DDR2控制器的IP核上采用控制模块和数据模块分离的方式,再用时钟模块为两个模块输入时钟,最后加了用户接口使用户可以快速和方便的使用IP核。
5 DDR2控制器IP核中各模块的功能
DDR2控制器是有四个模块组成:时钟模块,控制模块,数据链路模块,用户接口模块。
5.1 时钟模块
时钟模块是由Xilinx的DCM 核构成,主要用来接收FPGA外部时钟,然后通过分频和倍频产生用户接口时钟、数据链路模块使用的时钟、控制模块使用的时钟和DDR2的时钟。它还有一个作用就是用复位信号对整个IP核进行全局复位。
5.2 控制模块
控制模块作为控制器的中枢,它主要负责对DDR2的初始化和命令的操作,因此控制模块基本上是由初始化和命令控制两部分组成。
初始化:在DDR2上电后经过20μs的稳定期,我们把时钟使能信号CKE置高,等待400ns的时间后进行第一次的预充电,然后对外部寄存器和模式寄存器进行配置,紧接着执行第二次预充电和两次刷新,再判断DLL是否正确锁定,配置OCD,最后等待初始化完成。如果初始化结束,我们就把信号initial_done置高表示初始化完成用户可以对DDR2进行操作了。
命令控制:命令控制部分主要用作DDR2初始化后,产生控制信号和每个操作中的延时,并分析用户命令对DDR2进行自动刷新、读操作、写操作、预充电等操作。当用户写入读写命令的时候,状态机(图3)可以自动的进行判断初始化是否完成、行激活、列寻址、预充电、自动刷新、读写命令发布等操作。
5.3 读/写数据链路模块
DDR2是一个高速的,并且是时钟上、下沿都采样数据的芯片,因此对于数据链路模块的时序要求非常严格。为了能够严格控制时序问题,采用了Xilinx的SPARTAN6的特殊原语模块IIDDR和ODDR对数据进行处理。在数据链路模块中采用读数据链路和写数据的链路独立的方式,这样使读/写数据完全独立,使用户更容易对数据进行控制。
5.4 用户接口模块
用户接口模块作为和用户直接连接的模块,它功能的强大与否直接影响用户对IP核控制的难易度。为了使用户很容易把控制器的IP核运用到工程项目中,整个模块中包含了READ
FIFO、WRITE FIFO、COMMAND FIFO、命令子模块、用户数据链路子模块,用户控制模块子模块。READ FIFO、WRITE FIFO、 COMMAND FIFO 使用户可以的控制命令和数据连续的输入和输出。命令子模块可以翻译用户输入的命令,用户只需要发送读或写命令、命令要操作的首地址和总共读/写多少个数据,命令子模块就可以根据情况发送命令控制给用户控制子模块。用户控制子模块再以状态机的形式控制COMMAND FIFO、WRITE FIFO、READ FIFO对与用户接口模块相连的主控制模块和数据链路模块进行控制,对DDR2进行读/写等操作。
6 如何控制IP核对DDR2进行操作
这个设计的DDR2控制器IP核不需要用户了解DDR2的工作特性就能很好的操作IP核对DDR2进行读写等操作,如图4所示。
1)首先通过INITIAL_DONE初始化完成信号判断DDR2是否初始化完成,初始化完成INITIAL_DONE置1,否则为0。
2)开始操作时把开始信号START置1,通过WRITE_BUSY和READ_BUSY信号来判断是否可进行命令的发送。WRITE_BUSY信号为2位宽,WRITE_BUSY[1]表示命令信号,为1时表示忙,0时表示不忙可以发送命令。WRITE_BUSY[0]表示数据信号,为1时表示忙不能发送数据,0时可以发送数据。READ_BUSY信号与WRITE_BUSY信号有着相同的功能,并且只有在READ_BUSY[1]和WRITE_BUSY[1]信号都为0时才能发送命令,也就是命令不能同时进行。当WRITE_BUSY=01和READ_BUSY=01时,CMD=000为写操作。
3)当WRITE_BUSY[1:0]信号为10时可以在时钟的上升沿时对WRITE_DATA输入数据,并且可以通过对WRITE_MASK相应的位赋1来屏蔽不想要的数据或者是避免当数据不够而写入0的情况。
4)当写入结束时WRITE_BUSY=01时可以把START信号置0,结束写入。
7 结语
为了验证此DDR2控制器IP核的实用性,我们通过Xilinx公司的xc6slx45t器件以及美光的MT47H12816XX-3DDR2模型做了仿真,并在Xilinx的sp601开发板进行了实验。通过测试代码往DDR2中写入132个128位的数据(如图5),并从DDR2中读取写入的数据(如图6)。通过实验证明了即使用户不很清楚DDR2的工作原理,也可以很方便的通过本文设计的DDR2控制器IP核对DDR2进行读写操作。
作者:邹连英 余 峰 来源:舰船电子工程2012年第6期
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
嵌入式技术
测试测量
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议