FPGA 对DDR 的控制研究.docx

上传人:b****6 文档编号:7724806 上传时间:2023-01-26 格式:DOCX 页数:10 大小:544.39KB
下载 相关 举报
FPGA 对DDR 的控制研究.docx_第1页
第1页 / 共10页
FPGA 对DDR 的控制研究.docx_第2页
第2页 / 共10页
FPGA 对DDR 的控制研究.docx_第3页
第3页 / 共10页
FPGA 对DDR 的控制研究.docx_第4页
第4页 / 共10页
FPGA 对DDR 的控制研究.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

FPGA 对DDR 的控制研究.docx

《FPGA 对DDR 的控制研究.docx》由会员分享,可在线阅读,更多相关《FPGA 对DDR 的控制研究.docx(10页珍藏版)》请在冰豆网上搜索。

FPGA 对DDR 的控制研究.docx

FPGA对DDR的控制研究

基于FPGA的DDR内存条的控制研究与设计

发布:

2010-7-0907:

00|作者:

 —— |来源:

电子工程世界|查看:

41次

TAG:

 DDR内存条

1内存条的工作原理

  DDR内存条是由多颗粒的DDRSDKAM芯片互连组成,DDRSDRAM是双数据率同步动态随机存储器的缩写。

DDRSDRAM采用双数据速率接口,也就是在时钟的正沿或负沿都需要对数据进行采样。

在本设计中采用的内存是hynix公司的lGB的HYMD564M646CP6-J。

内存条的工作原理与单颗粒内存芯片的工作原理一样,主要的控制信号以及控制信号完成的主要功能如表1所示。

  以上的控制信号及地址信号都是由差分时钟信号中CK的正沿触发。

DDRSDRAM必须按照一定的工作模式来完成初始化,完成初始化后才能进入到读写过程。

DDRSDRAM的控制流程如图1所示。

  初始化的过程为:

(1)上电后,延时200us等待时钟稳定,然后将CKE拉高,执行一次NOP或者DESELECT操作。

(2)执行一次prechargeall操作。

(3)设置扩展模式寄存器(BAl为低电平BA0为高电平)使能DLL。

(4)设置模式寄存器(BAl,BA0均为低电平)复位DLL。

(5)执行一次pre-chargeall指令。

(6)再经过2个自刷新(Autorefresh)指令后再次设置模式寄存器设置操作模式。

(7)延时200个周期才能进行读操作。

DDRSDRAM的扩展模式寄存器和模式寄存器的定义如图2和图3所示。

  完成初始化后进入图1中的IDEL状态,此时可以进行读写操作。

在进行写操作时,首先要进入Rowactive状态,此时选中要操作的bank与row。

然后执行NOP操作等待tRCD的时间后可以进入写状态。

2内存条电路设计

  由于DDRSDRAM采用的时钟频率较高,加上DDRSDRAM的数据率为时钟速率的两倍,DDRSDRAM对时钟质量的要求很高,必须保证时钟上升沿的时间小于5%的时钟周期。

DDRSDRAM的数据线与相对应的数据采样信号(DQS)的长度要尽量相等,来保证数据的采样窗口尽量要大一些。

由于信号质量要求高,我们将所有的信号线都采用微电线和带状线来传输。

使用FPGA和内存条的IBIS模型进行仿真来保证设计中信号的完整性,我们将信号分为3类,第一类,由FPGA到DDRSDRAM的时钟差分信号;第二类,由FPGA到DDRSDRAM的控制线;第三类,FPGA与DDRSDRAM之间的双向传输线。

对三类IBIS模型的herperlinx仿真如图4:

  通过仿真我们可以确定3类信号线中带状线和微带线板厚,铜厚,以及信号线的线宽,线长等参数。

3FPGA对DDRSDRAM的控制

  本设计中使用的FPGA是ALTERA公司的cycloneII系列的EP2C20F484C6。

对内存条的工作模式设置为BL=4,CL=3,如图7为FPGA对DDRSD-RAM的控制模块框图。

  其中,Clkin为外部输入的时钟信号,为了使FPGA到DDRSDRAM的两对时钟信号的质量尽量好,使用FPGA内部的两个锁相环输出差分时钟信号。

为了保证锁相环输出的两路差分信号相位一致,在设计PCB时我们使晶振输出到FPGA两个PLL输入的布线距离相等,为了保证两个锁相环输出信号到达DDRSDRAM接口时相位一致,由FPGA锁相环输出到DDRSDRAM的接口布线长度相等。

  控制模块采用的工作模式是按照图2所示的状态来跳转,上电以后首先是对DDRSDRAM进行初始化,初始化完成以后就可以进出等待工作的状态。

此时刷新计数器开始计数,等待7.8us后给出刷新请求,在空闲状态时(IDEL)刷新请求的优先级最高,响应刷新请求后执行REFR-ESH指令同时复位刷新计数器。

初始化后如果FIF00的读空标志为O说明FIF00中有数据,此时可以进入到写状态。

由于采用的是BL=4的工作状态,写操作每次都写入4个64位的数。

所以,我们将输入的数据进行并位成256位的数,每次写操作只需要从FIF00中读出一个256位的数。

假设我们采用1OOMHz的时钟,每写4个64位的数大概需要10个时钟周期。

如果输入的数据位宽为16位,那么由外部传给FPGA的数据率要小于160MHz。

写操作完成的时候进入空闲状态,等待刷新标志或者读空标志。

读的时候需要等待系统发出读命令(read),然后进入读状态,读出的数据由Ddrout[127:

O]送到FIF01和FIF02中。

通过控制FIF01和FIF02的写请求信号来实现将数据分别写入。

读的时候BL=4每次读出4个64位数,执行一次读操作大约需要10个时钟周期。

如果输出的数据位宽为16位,那么数据由FPGA向外传输的速率要小于160MHzo控制模块在读写内存条的时候控制数据模块来实现数据率为时钟速度的两倍,数据模块使用两个时钟一个是系统时钟一个是2倍的系统时钟。

  因为DDRSDRAM的控制相对复杂,我们可以使用内存条的vefilog模型,通过对内存条的vefilog仿真,我们可以知道自己程序的正确性,图8为modelsim中的仿真波形。

如果仿真过程正确,我就可以对程序进行编译,布局布线,然后下载到FPGA中,由于布局布线的延时,输出的信号波形与仿真波形不一致,此时,可以通过调整FPGA内部的锁相环来调整时序,实现对内存条的控制。

  4结束语

  通过介绍内存条的工作原理,以及内存条电路设计时的注意事项的介绍,我们可以更合理的实现FPGA与内存条的互连。

最后,给出FPGA内部对内存条控制的方法,以及给出仿真波形,实现对内存条的控制。

实现FPGA对DDRSDRAM内存条的控制,可以实现大容量高速的数据存储,在工程中的得到广泛的应用。

关于FPGA连接DDR2的问题讨论

PCBTech.Net  时间:

2009-04-0116:

07  来源:

中国PCB论坛网  点击:

1505次

我采用XC4VSX35或XC4VLX25FPGA来连接DDR2SODIMM和元件。

SODIMM内存条选用MT16HTS51264HY-667(4GB),分立器件选用8片MT47H512M8。

设计目标:

当客户使用内存条时,8片分立器件不焊接;当使用直接贴片分立内存颗粒时,SODIMM内存条不安装。

请问专家:

1、在设计中,先用

  

我采用XC4VSX35或XC4VLX25FPGA来连接DDR2SODIMM和元件。

SODIMM内存条选用MT16HTS51264HY-667(4GB),分立器件选用8片MT47H512M8。

设计目标:

当客户使用内存条时,8片分立器件不焊接;当使用直接贴片分立内存颗粒时,SODIMM内存条不安装。

请问专家:

1、在设计中,先用XilinxMIG工具生成DDR2的Core后,管脚约束文件是否还可更改?

若能更改,则必须要满足什么条件下更改?

生成的约束文件中,ADDR,data之间是否能调换?

2、对DDR2数据、地址和控制线路的匹配要注意些什么?

通过两只100欧的电阻分别连接到1.8V和GND进行匹配和通过一只49.9欧的电阻连接到0.9V进行匹配,哪种匹配方式更好?

3、V4中,PCBLayOut时,DDR2线路阻抗单端为50欧,差分为100欧?

Hyperlynx仿真时,那些参数必须要达到那些指标DDR2-667才能正常工作?

4、若使用DDR2-667的SODIMM内存条,能否降速使用?

比如降速到DDR2-400或更低频率使用?

5、板卡上有SODIMM的插座,又有8片内存颗粒,则物理上两部分是连在一起的,若实际使用时,只安装内存条或只安装8片内存颗粒,是否会造成信号完成性的影响?

若有影响,如何控制?

6、SODIMM内存条(max:

4GB)能否和8片分立器件(max:

4GB)组合同时使用,构成一个(max:

8GB)的DDR2单元?

若能,则布线阻抗和FPGA的DCI如何控制?

地址和控制线的TOP图应该怎样?

7、DDR2和FPGA(VREFpin)的参考电压0.9V的实际工作电流有多大?

工作时候,DDR2芯片是否很烫,一般如何考虑散热?

8、由于多层板叠层的问题,可能顶层和中间层的铜箔不一样后,中间的夹层后度不一样时,也可能造成阻抗的不同。

请教DDR2-667的SODIMM在8层板上的推进叠层?

 

网友zyonghui回复如下:

1.请教FPGA工程师,一般来说可以。

2.数据线已经有ODT不需要外部匹配了,没见过两个电阻的匹配方式。

单个电阻连到0.9VVTT上,注意这个VTT需要有SHUNT能力,即能输出正负电流的。

3.DDR2中阻抗是一方面,不过更关键是的TIMING以及CROSSTALK,另外注意不要跨分割,这是最基本的。

4.当然可以

5.肯定会有影响,你所能做的只有尽量缩短STUB的影响

6.这取决于你的硬件设计,如CS。

ODT的连接。

当然应该没有设计蠢到不能同时用的程度,除非主控CPU不能寻址超过4G的范围。

7.如果说参考电压,则几乎不需要电流,因为只是做参考。

如果你说的是0.9V终端匹配电压,那需要一些电流,一般正负3A就足够了,这个可以计算的。

速度越快DDR2越烫,一般一条4G的内存按到6到8W的功耗算,已经很高了。

8.只要维持地平面,任何阻抗PCB厂家都是可以控制的。

但要告诉你阻抗只是很小一方面,很多供应商的参考设计对DDR的阻抗要求都是变来变去的,根本没统一的标准。

如何实现FPGA到DDR3SDRAM存储器的连接

如何实现FPGA到DDR3SDRAM存储器的连接  

   

  采用90nm工艺制造的DDR3SDRAM存储器架构支持总线速率为600Mbps-1.6Gbps(300-800MHz)的高带宽,工作电压低至1.5V,因此功耗小,存储密度更可高达2Gbits。

该架构无疑速度更快,容量更大,单位比特的功耗更低,但问题是如何实现DDR3SDRAMDIMM与FPGA的接口呢?

      关键词——均衡!

    如果没有将均衡功能直接设计到FPGAI/O架构中,那么任何设备连接到DDR3SDRAMDIMM都将是复杂的,而且成本还高,需要大量的外部元器件,包括延时线和相关的控制。

    什么是均衡?

为什么如此重要?

    为了在支持更高频率时提高信号完整性,JEDEC委员会定义了一个fly-by(飞越式)端接方案,该方案采用了时钟和命令/地址总线信号来改善信号完整性以支持更高的性能。

当时钟和地址/命令通过DIMM时,fly-by拓扑结构通过故意引起每个DRAM上的时钟和数据/选通之间的飞行时间偏移(flight-timeskew)来减小并发开关噪声(SNN),如图1所示。

    飞行时间偏移可能高达0.8tCK,当该偏移被扩展得足够宽时,将不知道数据在两个时钟周期中的哪个内返回。

因此,均衡功能可以使控制器通过调节每个字节通道内的时序来补偿这一偏移。

最新的FPGA能够为各种应用提供与双倍数据率SDRAM存储器接口的许多功能。

但是,要与最新的DDR3SDRAM一道使用,还需要更鲁棒的均衡方案。

    FPGAI/O结构    像AlteraStratixIII系列高性能FPGA提供的I/O速度高达400MHz(800Mbps),还具有很高的灵活性,能够支持现有的和新兴的外部存储器标准,如DDR3。

  

  

    图1:

DDR3SDRAMDIMM:

飞行时间偏移降低了SSN,数据必须被控制器调高到两个时钟周期。

    读均衡    在读取操作中,存储器控制器必须补偿由飞越存储器拓扑引起的、影响读取周期的延时。

均衡可以被视作为出现在数据通道上的比I/O本身延时还要大的延时。

每个DQS都要求一个同步时钟位置的独立相移(经过了工艺、电压和温度(PVT)补偿)。

图2显示出同一读取命令下从DIMM返回的两个DQS组。

  

  

    图2:

I/O单元中的1T、下降沿和均衡寄存器。

    一开始,每个分开的DQS被移相90度,从而捕获与该组相关的DQ数据。

然后用一个自由运行的再同步时钟(频率和相位与DQS相同)将数据从捕获域转移到图2所示用粉红色和橙色连线表示的均衡电路中。

在这个阶段,每个DQS组都有一个独立的再同步时钟。

    接着DQ数据被送到1T寄存器。

图2中给出了一个1T寄存器实例,在上层通道中需要用这个1T寄存器对特定DQS组中的DQ数据位进行延时。

注意在该例中,下层通道不需要1T寄存器。

通过该过程开始对齐上层和下层通道。

任何一个指定的通道是否需要1T寄存器是自动确定的,这是免费物理层IP内核中校准方案的一部分功能。

    随后两个DQS组被传送到下降沿寄存器。

如果需要的话,还可以在启动时通过自动校准过程把可选寄存器切换进来或切换出去。

最后是将上层和下层通道对齐到同一再同步时钟上,这样就形成了一个将完全对齐的或经过均衡的单倍数据率(SDR)数据传递到FPGA结构的源同步接口。

    写均衡    与读均衡类似,不过方向相反,DQS组在不同的时刻发出信号,以便与到达DIMM上的器件的时钟一致,并且必须满足tDQSS参数要求的+/-0.25tCK。

控制器必须通过创建反馈环路来调整DQS与CK的关系,在此过程中,控制器会将数据写入DRAM,再通过顺序相位进行扫描读回,直到发现写入窗的终点。

为了更好的建立和保持余量,数据应该在好窗口的中间点发出。

    其他的FPGAI/O功能创新    高性能的StratixIIIFPGA还具有许多创新性的其他I/O功能,可以实现到各种存储器接口的简单且鲁棒性连接,这种功能包括了动态片上端接(OCT)、可变的I/O延时以及半数据率(HDR)等。

    动态OCT    并行和串行OCT为读写总线提供合适的线路端接和阻抗匹配,因此FPGA周边不需要外接电阻,从而减少了外接元件成本,节约了电路板面积,而且降低了布线复杂度。

另外,它还大大降低了功耗,因为并联端接在写操作时可以有效地被旁路掉。

    用于DQ去偏移(deskew)的可变延时    采用可变的输入和输出延时来跟踪长度失配和电气去偏移。

精细的输入和输出延时分辨率(即50皮秒步进)被用于更精细的DQS间去偏移(独立于均衡功能),这种偏移是由电路板长度失配或FPGA和存储器件上I/O缓存的变化所引起的,如表1所示。

最终,这增加了每个DQS组的捕获余量。

  

  

    表1:

分辨率和绝对值待定特性。

    为了将DDR3自动去偏移算法成为启动校准过程的一部分,需要从运行时的FPGA结构实现延时单元。

也可以利用输出延时在输出通道中插入少量偏移来有意地减少同时开关的I/O数量。

    可靠的捕获    DQS信号用作输入选通信号,它必须移位到一个最佳位置才能捕获读取事务。

移相电路可以将输入的DQS信号移相0°,22.5°,30°,36°,45°,60°,67.5°,72°,90°,108°,120°,135°,144°或180°,具体取决于DLL的频率模式。

移相后的DQS信号随后被用作I/O单元各个输入寄存器的时钟。

    延时锁定环路(DLL)在整个PVT范围内将相位保持在一个固定位置。

DLL模块的相位比较器用于将两个输入之间的相位差保持在零。

实现的方法是均匀地修正DLL模块中的特定延时(10-16)。

用于更新DLL中某个延时模块的控制信号还被发送到DQS输入路径中的时延模块。

例如,可以利用DLL中的全部16个延时单元和DQS相移输入路径中的第4个延时抽头来实现90°的相移:

  

  

  或者选择DLL中的10个延时单元和DQS相移输入路径中的抽头4来实现36°的相移:

  

  

    或120°:

  

  

    该DLL采用频率基准为每个DQS引脚中的延时链动态产生控制信号,并允许它补偿PVT的变化。

在StratixIIIFPGA中有4个DLL,它们都位于器件的边角,目的是使每个DLL能够覆盖器件的两侧,从而可以在器件的各个边上支持多种DDR3SDRAM存储器接口。

    跨越高速数据率域和设计简化    DDR捕获寄存器和HDR寄存器支持数据从双倍数据率域(数据在时钟的两个边沿)安全传送到SDR域(数据位于频率相同的时钟的上升沿,但数据宽度加倍),再到HDR域(数据位于时钟的上升沿,数据宽度仍是加倍,但时钟频率仅是SDR域的一半),这样使得内部设计时序更容易实现。

    裸片、封装和数字信号完整性改进    FPGA裸片和封装的设计必须为高性能的存储器接口提供更好的信号完整性(即用户I/O与地和电源的比例为8:

1:

1,并具有最佳的信号返回路径,如图3所示)。

此外,FPGA应该提供动态OCT和可变的偏移率,以便能够控制信号的上升和下降时间以及可编程驱动能力,从而满足所用标准(即SSTL1.5ClassII)的要求。

  

  

    图3:

连接到每个电源和地的8个用户I/O。

    本文小结    高性能StratixIIIFPGA可以通过提供高存储器带宽、改进的时序余量以及系统设计中的灵活性来弥补高性能DDR3SDRAMDIMM的不足。

由于DDR3在实际使用中将很快超过DDR2,故提供更低成本、更高性能、更高密度和优异的信号完整性的高端FPGA必须提供与JEDEC兼容的读写均衡功能,以便与高性能的DDR3SDRAMDIMM相接。

FPGA与DDR3SDRAM的有机整合将能够满足目前和下一代通信、网络以及数字信号处理系统的要求。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1