0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习-DDR3

FPGA设计论坛 ? 来源:未知 ? 2022-12-21 18:30 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、DDR3简介

DDR3全称double-data-rate 3 synchronous dynamic RAM,即第三代双倍速率同步动态随机存储器。所谓同步,是指DDR3数据的读取写入是按时钟同步的;所谓动态,是指DDR3中的数据掉电无法保存,且需要周期性的刷新,才能保持数据;所谓随机存取,即可以随机操作任一地址的数据;所谓double-data-rate,即时钟的上升沿和下降沿都发生数据传输。

0a95f508-811a-11ed-8abf-dac502259ad0.png

图1. DDR3结构

二、地址的概念及容量计算

2.1地址的概念

DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)就是逻辑 Bank(Logical Bank,下面简称Bank)。

DDR3内部Bank示意图,这是一个MXN的阵列,B代表Bank地址编号,C代表列地址编号,R代表行地址编号。如果寻址命令是B1、R3、C4,就能确定地址是图中红格的位置目前DDR3内存芯片基本上都是8个Bank设计,也就是说一共有8个这样的“表格”。寻址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最终的确寻址单元。

0ac0f6d6-811a-11ed-8abf-dac502259ad0.png

图2. DDR3地址

目前DDR3系统而言,还存在物理Bank的概念,这是对内存子系统的一个相关术语,并不针对内存芯片。内存为了保证CPU正常工作,必须一次传输完CPU 在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,这个位宽就称为物理Bank(Physical Bank,有的资料称之为Rank)的位宽。目前这个位宽基本为64bit。

2.2 DDR3容量计算

假设:

bank地址线位宽为3,及bank数目为 2^3=8;

行地址线位宽位13,及A0…A12;

列地址线位宽为10,及A0…A9;

有 2^3 * 2^13 * 2^10 = 2^26 =67108864b= 64Mb

再加上数据线,则容量为 64Mb x 16 = 128M Byte = =1G bit

三、重要给概念理解

3.1 行选通周期

在实际工作中,Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行激活”(Row Active)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),我们可以理解为行选通周期。tRCD是DDR的一个重要时序参数,广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=3,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,时钟频率100M,tRCD=3,代表30ns的延迟。

0adae29e-811a-11ed-8abf-dac502259ad0.png

图3. 行选通周期tRCD

3.2 列地址脉冲选通潜伏期

相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的 CL(CAS Latency,列地址脉冲选通潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。如 DDR3-800,时钟频率为 100MHz,时钟周期为 10ns,如果 CL=2 就意味着 20ns 的潜伏期。

注:CL只是针对读取操作。

0af5a304-811a-11ed-8abf-dac502259ad0.png

图4. CL的概念(CL=2,tAC=1)

注意:delay与Latency虽然都有“延迟”的意思,但本质上是不同的

Delay :事情要在这个时间之后开始

Latency:事情已经发生,但是还不够稳定需要一个稳定时间

3.3 突发传输的概念

目前内存的读写基本都是连续的,因为与CPU交换的数据量以一个Cache Line(即CPU内Cache的存储单位)的容量为准,一般为64字节。而现有的Rank位宽为8字节(64bit),那么就要一次连续传输8次,这就涉及到我们也经常能遇到的突发传输的概念。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。

在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。

连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输。

在 DDR SDRAM 中,突发长度只有 2、4、8 三种选择,没有了随机存取的操作(突发长度为 1)和全页式突发。这是为什么呢?因为 L-Bank一次就存取两倍于芯片 位宽的数据,所以芯片至少也要进行两次传输才可以,否则内部多出来的数据怎么处理?但是,突发长度的定义也与 SDRAM 的不一样了,它不再指所连续寻址的存储单元数量,而是指连续的传输周期数,每次是一个芯片位宽的数据。

上面是别人的解释,笔者结合自己的理解和代码实现中再解释一下:

突发传输是为了提高传输效率,这涉及到预取的概念;DDR3突发长度BL=8,在t1时刻我们发起读命令,给出地址addr1,那么因为是突发传输,所以实际我们将读出addr1以及它之后地址,总共8个地址,也就读出了8个数据;那么t2时刻,我们继续读数,给出的地址addr=addr1+8;结合下图更容易理解:

0b1649ec-811a-11ed-8abf-dac502259ad0.png

图5. 突发传输

注:

t1 ,t2 / t3,t4时刻不一定连续;要看ddr是否准备好,具体到代码就是app_rdy 并不是一直为高;

3.4 掩码

掩码简单解释下,就是屏蔽掉我们传输不需要的数据;掩码每一位bit对应ddr数据的1个字节;当掩码为0,数据有效;当掩码为1,数据屏蔽;

一般不使用,传输数据全部有效,掩码直接置0:(掩码位宽根据数据位宽而定)

assign app_wdf_mask = 64'b0;

3.5 数据选取脉冲(DQS)

DQS 是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由北桥发来的DQS信号,读取时,则由芯片生成DQS向北桥发送。完全可以说,它就是数据的同步信号。

在读取时,DQS与数据信号同时生成(也是在CK与CK#的交叉点)。而DDR内存中的CL也就是从CAS发出到DQS生成的间隔,DQS生成时,芯片内部的预取已经完毕了,由于预取的原因,实际的数据传出可能会提前于DQS发生(数据提前于DQS传出)。由于是并行传输,DDR内存对tAC也有一定的要求,对于DDR266,tAC的允许范围是±0.75ns,对于DDR333,则是±0.7ns,有关它们的时序图示见前文,其中CL里包含了一段DQS 的导入期。

DQS 在读取时与数据同步传输,那么接收时也是以DQS的上下沿为准吗?不,如果以DQS的上下沿区分数据周期的危险很大。由于芯片有预取的操作,所以输出时的同步很难控制,只能限制在一定的时间范围内,数据在各I/O端口的出现时间可能有快有慢,会与DQS有一定的间隔,这也就是为什么要有一个tAC规定的原因。而在接收方,一切必须保证同步接收,不能有tAC之类的偏差。这样在写入时,芯片不再自己生成DQS,而以发送方传来的DQS为基准,并相应延后一定的时间,在DQS的中部为数据周期的选取分割点(在读取时分割点就是上下沿),从这里分隔开两个传输周期。这样做的好处是,由于各数据信号都会有一个逻辑电平保持周期,即使发送时不同步,在DQS上下沿时都处于保持周期中,此时数据接收触发的准确性无疑是最高的。

在写入时,以DQS的高/低电平期中部为数据周期分割点,而不是上/下沿,但数据的接收触发仍为DQS的上/下沿。

0b31d824-811a-11ed-8abf-dac502259ad0.png

如何确定DDR3芯片的带宽、位宽和最大IO时钟频率

这里以芯片Part Number :MT41J256M16RH-125:E为例,打开芯片的数据手册,会找到如下所示的介绍:

0b71874e-811a-11ed-8abf-dac502259ad0.png

IO时钟频率:

根据Part Number 中的“-125”我们就可以找到图中的“1”,根据这里tCK = 1.25ns,就可以算出芯片支持的最大IO时钟频率:1/1.25ns = 800Mhz;此处的IO时钟频率也就是DDR3的频率;

位宽:

根据Part Number 中的“256M16”我们可以找到图中2所指出的地方,这里的16是代表芯片的数据位宽是16位(也就是16根数据线)。

注意:

当一个FPGA上挂多个DDR,如4片ddr3,位宽则会相应增大;16*4 = 64bit,再乘以DDR3的突发长度BL=8;那么程序设计里DDR3的读写位宽就变成了16*4*8=512bit;(这里留个印象,再后文IP例化及程序设计部分还会讲到,到时候对应起来看更容易理解)

明明是512M的DDR,为什么又写成256M呢?因为256M16是16根数据线16bit,对应过来就是2个byte;256M *16bit = 512MByte;一般大B 指的是Byte,小b指的是bit;

带宽:

由于是DDR方式传输数据(上升和下降沿都传输),所以芯片的一根数据线上的传输速率 = 2*800Mhz = 1600MT/s。其实就是1600Mbit/s;

带宽就是16根数据线同时传输的数据速率 = 1600Mbit/s x 16 = 25600Mbit/s = 3200Mbyte/s = 3.125GByte/s

FPGA所支持的最大频率

翻看k7数据手册ds182可以看到:

0b991f7a-811a-11ed-8abf-dac502259ad0.png

从上图中红线标出的地方可以看出,此FPAG芯片的MIG支持最大PHY速率是800Mb/s(注意,这是数据传输速率)。因为是使用DDR模式传输数据,所以最大时钟频率= 800/2 = 400Mhz。(还记得刚刚DDR3 芯片支持的最大IO时钟频率吗?800Mhz,在下面的MIG参数设置中,就会用到这两个参数)。

时钟结构

在说具体的时钟参数设置之前,我们先来看一张图 MIG 的 Clocking Architecture

0bc11296-811a-11ed-8abf-dac502259ad0.png

根据本图很明显的告诉了我们,需要给MIG提供两个时钟,一个叫system clock(主时钟),一个叫reference clock(参考时钟)。

但是在MIG中,如何对这些时钟参数进行设置(描述)呢?看好了,接下来开始画重点了!!!!!

在MIG中,涉及到对时钟参数进行设置(描述)的地方有四处,接下来我们一个一个的看:

第一处,如下图所示

0bebcf22-811a-11ed-8abf-dac502259ad0.png

这里设置的参数就是 MIG 的PHY 接口对DDR3的时钟,也就是DDR3芯片实际跑的IO时钟频率,它由system clock(主时钟)倍频而来,最大频率不能超过DDR3 和MIG支持的最大频率中的最小值,如:虽然我们的DDR3芯片最高支持800Mhz的IO时钟,但是由于我们使用的FPGA芯片的MIG最高只支持400Mhz的时钟,所以这里我们选择400Mhz(当然也可以选择比这个小)。下面有个4:1,说明MIG 输出到app接口上的时钟ui_clk 是 400M/4=100M ,即到时我们在写RTL逻辑代码时操作MIG核时,用的就是这个100M时钟。

第二处、还是如图所示

0c78e5c4-811a-11ed-8abf-dac502259ad0.png

这里就是设置system clock(主时钟)的输入频率,实际是多少就写多少。

第三、四处,继续如下图所示

0cdd92c6-811a-11ed-8abf-dac502259ad0.png

图中的“3”是设置(描述)system clock (主时钟)是差分输入还是单端等其他形式的输入,这里我们选择差分输入

同理,图中的“4”是对reference clock(参考时钟)进行描述。主意:如果system clock 频率设置为200Mhz(看第二处),这里就可以直接选“Use System Clock”,否则就没有“Use System Clock”这个选项,要是选其他选项,后面还需要对reference clock进行设置,如下图所示

0d0f0b12-811a-11ed-8abf-dac502259ad0.png

行业术语

核心频率:核心频率就是DDR物理层(PHY)IO时钟频率,对应到MIG就是第一个配置的“CLOCK PERIOD”,上文我们选择的是800Mhz

工作频率:核心频率* 2 (上下沿)= 1600M核心频率* 2 = 1600M

传输速率:核心频率* 2 = 1600MT/s

带宽:传输速率*位宽 = 1600M * 16 = 25600Mbit/s = 3200Mbyte/s = 3.125GByte/s

0d55b1ca-811a-11ed-8abf-dac502259ad0.jpg

精彩推荐 至芯科技12年不忘初心、再度起航12月17日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询! FPGA 结构分析 -IO 资源 FPGA静态时序分析模型——寄存器到寄存器扫码加微信邀请您加入FPGA学习交流群

0d67a95c-811a-11ed-8abf-dac502259ad0.jpg0d7ba362-811a-11ed-8abf-dac502259ad0.png

欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!

点个在看你最好看


原文标题:FPGA学习-DDR3

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22096

    浏览量

    620648

原文标题:FPGA学习-DDR3

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AD设计DDR3时等长设计技巧

    本文紧接着前一个文档《AD设计DDR3时等长设计技巧-数据线等长 》。本文着重讲解DDR地址线、控制信号线等长设计,因为地址线、控制信号线有分支,SOC有可能带有2片DDR或者更多,我们叫做T型分支
    发表于 07-29 16:14 ?0次下载

    AD设计DDR3时等长设计技巧

    的讲解数据线等长设计。? ? ? 在另一个文件《AD设计DDR3时等长设计技巧-地址线T型等长》中着重讲解使用AD设计DDR地址线走线T型走线等长处理的方法和技巧。
    发表于 07-28 16:33 ?0次下载

    【RK3568+PG2L50H开发板实验例程】FPGA部分 | DDR3 读写实验例程

    ? 本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 1.实验简介 实验目的: 完成 DDR3 的读写测试。 实验环境
    发表于 07-10 10:46

    在Vivado调用MIG产生DDR3的问题解析

    下面是调用的DDR3模块的,模块的倒数第二行是,模块的时钟输入,时钟源来自PLL产生的系统时钟的倍频。
    的头像 发表于 05-03 10:21 ?760次阅读
    在Vivado调用MIG产生<b class='flag-5'>DDR3</b>的问题解析

    TPS51116 完整的DDRDDR2、DDR3DDR3L、LPDDR3DDR4 电源解决方案同步降压控制器数据手册

    TPS51116为 DDR/SSTL-2、DDR2/SSTL-18、DDR3/SSTL-15、DDR3L、LPDDR3
    的头像 发表于 04-29 16:38 ?494次阅读
    TPS51116 完整的<b class='flag-5'>DDR</b>、<b class='flag-5'>DDR</b>2、<b class='flag-5'>DDR3</b>、<b class='flag-5'>DDR3</b>L、LPDDR<b class='flag-5'>3</b> 和 <b class='flag-5'>DDR</b>4 电源解决方案同步降压控制器数据手册

    DDR模块的PCB设计要点

    在高速PCB设计中,DDR模块是绝对绕不过去的一关。无论你用的是DDRDDR2还是DDR3,只要设计不规范,后果就是——信号反射、时序混乱、系统频繁死机。
    的头像 发表于 04-29 13:51 ?1449次阅读
    <b class='flag-5'>DDR</b>模块的PCB设计要点

    TPS51216-EP 增强型产品 完整的 DDR2、DDR3DDR3L 内存电源解决方案 同步降压控制器数据手册

    TPS51216-EP 以最低的总成本和最小的空间为 DDR2、DDR3DDR3L 内存系统提供完整的电源。它将同步降压稳压控制器 (VDDQ) 与 2A 灌/拉跟踪 LDO (VTT) 和缓
    的头像 发表于 04-26 11:12 ?380次阅读
    TPS51216-EP 增强型产品 完整的 <b class='flag-5'>DDR</b>2、<b class='flag-5'>DDR3</b> 和 <b class='flag-5'>DDR3</b>L 内存电源解决方案 同步降压控制器数据手册

    DDR3 SDRAM配置教程

    DDR3 SDRAM(Double-Data-Rate ThreeSynchronous Dynamic Random Access Memory)是DDR SDRAM的第三代产品,相较于DDR2,
    的头像 发表于 04-10 09:42 ?3180次阅读
    <b class='flag-5'>DDR3</b> SDRAM配置教程

    灿芯半导体推出DDR3/4和LPDDR3/4 Combo IP

    灿芯半导体(上海)股份有限公司(灿芯股份,688691)宣布推出基于28HKD 0.9V/2.5V 平台的DDR3/4, LPDDR3/4 Combo IP。该IP具备广泛的协议兼容性,支持DDR3
    的头像 发表于 03-21 16:20 ?578次阅读

    初次使用XC7A35T-FGG484做设计,用的是25MHZ有源晶振,有源晶振3.3V供电,DDR3的供电1.35V,现在接上晶振后,DDR3的供电变成1.8V

    初次使用XC7A35T-FGG484做设计,用的是25MHZ有源晶振,有源晶振3.3V供电,DDR3的供电1.35V,现在接上晶振后,DDR3的供电变成1.8V 求助怎么解决。
    发表于 03-21 14:25

    DDR内存控制器的架构解析

    DDR内存控制器是一个高度集成的组件,支持多种DDR内存类型(DDR2、DDR3DDR3L、LPDDR2),并通过精心设计的架构来优化内存
    的头像 发表于 03-05 13:47 ?2157次阅读
    <b class='flag-5'>DDR</b>内存控制器的架构解析

    三大内存原厂或将于2025年停产DDR3/DDR4

    据报道,业内人士透露,全球三大DRAM内存制造商——三星电子、SK海力士和美光,有望在2025年内正式停产已有多年历史的DDR3DDR4两代内存。 随着技术的不断进步和消费级平台的更新换代
    的头像 发表于 02-19 11:11 ?1934次阅读

    DDR3DDR4、DDR5的性能对比

    DDR3DDR4、DDR5是计算机内存类型的不同阶段,分别代表第三代、第四代和第五代双倍数据速率同步动态随机存取存储器(SDRAM)。以下是它们之间的性能对比: 一、速度与带宽 DDR3
    的头像 发表于 11-29 15:08 ?1.2w次阅读

    如何选择DDR内存条 DDR3DDR4内存区别

    随着技术的不断进步,计算机内存技术也在不断发展。DDR(Double Data Rate)内存条作为计算机的重要组成部分,其性能直接影响到电脑的运行速度和稳定性。DDR3DDR4是目前市场上最常
    的头像 发表于 11-20 14:24 ?7108次阅读

    DDR3寄存器和PLL数据表

    电子发烧友网站提供《DDR3寄存器和PLL数据表.pdf》资料免费下载
    发表于 08-23 11:06 ?2次下载
    <b class='flag-5'>DDR3</b>寄存器和PLL数据表