使用VIVADO中的MIG控制DDR3(AXI接口)三——DDR3简介

2 篇文章 7 订阅
2 篇文章 1 订阅

        在读写DDR3之前,需要了解DDR3的相关知识,而如果一开始就直接看DDR3的话,我们极有可能会感觉到一头雾水,不知道从哪下手,接下来,我们便从SDRAM一步步到DDR3,分步去学习相关的知识。

 

1 SDRAM简介

        从某种意义上来讲,SDRAM是现在内存的最初代产品,现在的DDR4包括DDR5都起源于它。SDRAM(Synchronous Dynamic Access Memory),是同步动态随机存储器。同步是指其时钟频率与CPU前端总线的系统时钟频率相同,并且内部的命令的发送与数据的传输都是以它为基准;动态是指存储阵列需要不断地刷新来保证数据不丢失:随机是指数据不是线性依次存储,而是自由地指定地址进行数据的读写。

1.1 物理Bank

        传统内存系统为了保证CPU的正常工作,必须一次传输完CPU在一个传输周期内所需要的数据。CPU在一个传输周期能接收的数据容量就是CPU数据总线的位宽。单位是bit。当时控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,而这个位宽就称之为物理Bank(Physical Bank)的位宽。简单理解就是物理Bank与CPU位宽一致。

1.2 芯片位宽

        芯片位宽是指每一片SDRAM缓存芯片本身的位宽。

        这里举一个例子来进行理解:假设CPU的位宽为64bits,那么SDRAM的物理Bank位宽就为64bits,假设现在芯片位宽为16bits,那么SDRAM与CPU之间该如何交互呢?我们需要4片SDRAM连接起来与CPU交互。

1.3 SDRAM基本架构

1.3.1 逻辑Bank

        逻辑Bank(Logic Bank,简称L-Bank)是SDRAM内存存储空间划分的片区。

123456789
2
3
4
5
6
7

        我们可以把L-Bank理解成一个方格矩阵,每一个小格都是一个存储单元。假设芯片位宽为16bits,那么每一个小的单元都可以存储16bits的数据。在对SDRAM进行读写时,我们通过RAS(行选中信号)和CAS(列选中信号)来选择不同的ROW(行)和Column(列)地址。

1.3.2 存储原理示意图

        这个图是一个简单的示意图,并不能当做是内部实际电路。我们在对内存单元进行读写时,要先将对应的Bank和行选中并激活,然后在给出读写命令的同时给出列地址,激活列地址,然后对存储单元进行访问。我们知道,内存单元的数据是通过电容的的充放电来存储的,写数据给电容充电,读数据使电容放电。刷新放大器作用十分关键,在我们写数据时,刷新放大器起到了对内存单元预充电的作用,这样我们就可以得到较为标准的高低电平,而在数据存储的时间内,因为电容会有漏电流,所以时间长了它可能会处于亚稳态,那么刷新放大器就可以对单元进行刷新,当存储数据为1时,给电容充电,使它维持标准的1;当存储数据为0时,它使内存单元的电荷放的更干净,维持稳定的0。另外,在从I/O口读取数据时,因为存储电容存储的电荷量十分有限,所以我们需要通过刷新放大器,将这个电容放大到足够我们观察的数值再读取出来。

1.3.3 SDRAM基本结构  

         如图所示,CLK和CKE是一对差分时钟,CS#,WE#,CAS#,RAS#是控制信号,用来配置模式寄存器,左下角的地址线用来传输相应的地址,分别有Bank地址,行地址和列地址,中间的那一大块的作用就是选中对应的行和列,Bank存储阵列的规格是32M*4bit,代表了四片芯片位宽为4bit的Bank,所以它的物理Bank位宽就是4*4=16bits。右边的数据输入/输出寄存器与I/O连接,进行数据传输。DQM为掩码信号,他与频闪信号类似,就是选择将某些数据位屏蔽。需要注意的是,在写数据时,利用DQM信号将对应数据屏蔽后,数据就不会写进内存里;但是在读数据阶段,使用DQM将数据屏蔽,数据依然会从内存中读出来,不过在数据输出寄存器处理阶段,不会将被屏蔽的数据输送到I/O口。

1.4 SDRAM的操作时序

1.4.1 引脚示意图

        A0~A11是12位地址总线,行、列地址共用;BA0,BA1为BANK地址;DQ0~31是32位数据引脚;DQ0~3为数据屏蔽线;clk是时钟信号,cke是是使能信号;NC代表不连接。WE#,CAS#,RAS#,CS#是命令总线,WE#是读写控制位,0代表写,1代表读;RAS#为行选中信号,CAS#为列选中信号,CS#为片选信号。

1.4.2 指令真值表

        NOP代表不操作,第一种在初始化时会用到,第二种是在空闲时用的。ACTIVE表示选中某一个BANK的某以行,将它激活。READ是给出对应BANK的列地址,并且开始突发读传输。WRITE命令给出对应的BANK的列地址,并开始突发写传输。BURST TERMINATE是指令禁止命令,比如在一次突发传输没有结束的时候,我们想进行其他操作,可以通过此命令。让它强制停止。PRECHARGE是预充电的意思,在进行数据读写操作前,必须给BANK中的行进行预充电。AUTO REFRESH和 SELF REFRESH分别是自动刷新和手动刷新的意思,自动刷新是指刷新放大器会按照一个周期刷新内存单元,而手动刷新则不同,如果没有设置为自动刷新,那么我们在每次读写内存单元前,都必须给对应的BANK中的对应ROW(行)先进行一次手动刷新,然后才能执行读写命令。

 1.4.3 SDRAM操作时序图

        激活命令,激活某一BANK的某一行。

         写命令,在对此内存单元进行刷新之后,给出BANK地址和列地址,便可以根据命令进行读写操作。读操作时许与之相似,要注意的是,行和列地址公用一组信号线。写命令在执行时没有延时,而读命令因为需要刷新放大处理的原因,数据可能会延迟一段时间才能读出。

         预充电时序,可以根据A10来选择是否自动预充电。BA0,1用来选择对哪一个BANK进行预充电。

         SDRAM初始化时序,在图中对应时刻给相应的命令,就可以完成初始化操作,主要是进行预充电和模式寄存器的配置,图中的时间都是一些延时,具体数值可以在内存手册上查看。

         具体的读写时序图逻辑都差不多,有突发读和写,还有随机读和写模式这里以突发读传输为例,在对相应的行进行预充电之后,同时给出读命令和相应的列地址,在经过CL的延时之后,便可以在DQ信号上得到数据,图中分别展示了CL=2和CL=3的情形。

 2 从SDRAM到DDR SDRAM

        DDR  SDRAM全称为Double Data Rate SDRAM,也就是双倍速率SDRAM实在SDRAM的基础上改进得到的。

2.1 DDR SDRAM基本结构

         我们不难看出,图中的左半部分和SDRAM的结构是一样的,不同的地方在右半部分,也就是将DQ0~3的四位数据与i/o的8位数据交互,逻辑主要是通过MUX复用器和输入寄存器来实现将8位数据变为2个4位数据和将2个4位数据合并为8位数据,那么关键问题就是怎样在DDR进行一次8位数据操作的同时,用户接口操作两次4位数据?我们之前都是在时钟的上升沿进行操作,在DDR中,我们同时在时钟的上升沿和下降沿采样,这样就达到了双倍速率,而一般都是通过一对差分时钟来实现的。

2.2 DDR操作时序

         从图中可以看到,DDR SDRAM的操作时序和SDRAM的操作时序没有太大变化,只不过时钟变成了一对差分时钟,在CK的时钟沿和CK#的时钟沿的交叉处进行时序操作,这样就可以达到双倍的工作速率,DQS信号可以理解为一个数据选通信号,它的一次变化的同时会发生一次数据的更新。因为差分时钟速率加倍的缘故,这里的CL也可以不为整数只要四0.5的倍速就可以。

3 DDR2 SDRAM

3.1 DDR2的基本结构

        

         与DDR的双倍传输不同的是,DDR2实现了4倍传输,它的实现逻辑和DDR差不多,也是利用复用器和输入寄存器,将数据进行合并、拆分,但是DDR2的位宽变成了DQ0~DQ15的四倍,这里DDR2可以说是属于偷换概念,和DDR一样,它也是双沿传输,但是剩下的2倍它是通过时钟频率加倍来实现的,也就是说,端口的时钟是DDR2内部时钟的2倍

3.2 片外驱动调校(OCD,Off-chip Driver)

        DDR2内存在开机时也会有初始化过程,同时在EMRS中加入了新的设置选项,没有太大变化。在EMRS阶段,DDR2加入了可选的OCD功能OCD的主要作用就是调整I/O接口端的电压,来补偿上拉与下拉电阻值,目的是让DQS与DQ数据信号之间的偏差降低到最小。调校期间,分别测试DQS高电平/DQ高电平,与DQS低电平/DQ低电平时的同步情况,如果不满足要求,则通过设定突发长度的地址线来传送上拉/下拉电阻等级(加一档或减一档),直到测试合格才退出OCD操作。

        下图是别人画的一个OCD示意图,可以对照理解。OCD的作用在于调整DS与DQ之间的同步,以确保信号的完整与可靠性。

 3.3 片内终结(ODT,On-Die Termination)

        所谓的终结,就是让信号被电路的终端吸收掉,而不会在电路上形成反射造成对后边信号的影响。在DDR时代,控制与数据信号的终结在主板上完成,每块DDR主板在DIMM槽的旁边都会有一个终结电压岛的设计,它主要由一排终结电阻构成。长期以来,这个电压岛一直是DDR主板设计上的一个难点。而ODT的出现,则将这个难点给消灭了。也就是说,ODT就是将终结电阻移植到了芯片内部,而不在主板上单独设计单独电路了。

3.4 前置CAS、附加潜伏期与写入潜伏期

        前置CAS(Posted CAS)是为解决DDR中指令冲突而设计的功能。它允许CAS信号紧随RAS信号发送,相对于以往的DDR等于将CAS前置了。这样,地址线可以立刻空出来,便于后边的行有效命令发出,避免造成命令冲突而被迫延后的情况发生,但读/写操作并没有因此而提前,仍要保证有足够的延时/潜伏期,为此,DDR2引入了附加潜伏期的概念(AL,Additive Latency),与CL一样,单位为时钟周期数AL+CL被定义为读取潜伏期(RL,Read Latency),相应的,DDR2还对写入潜伏期(WL,Write Latency)制定了标准,WL是指聪写入命令发出到第一笔数据输入的潜伏期。按照规定,WL=RL-1,即AL+CL-1。

3.5 DDR2时序图

3.5.1 读时序

 3.5.2 写时序

         注意,WL是指写入潜伏期,是指从写入命令发出到第一笔数据输入的潜伏期,不要将它与tDQSS混淆。

4 DDR3 SDRAM

4.1 DDR3新增内容

4.1.1 突发长度(Burst Length,BL)

        由于DDR3的预取为8bit,所以突发传输周期BL也固定为8,而对于DDR2和早期的DDR架构系统,BL=4也是常用的,DDR3为此增加了一个4bitBurst Chop(突发突变)模式,即由一个BL=4的读取操作加上一个BL=4的写入操作合成一个BL=8的数据突发传输,届时可通过地址线来控制这一突发模式。(也就是说,DDR3不支持单独BL=4的突发传输,突发长度BL只能等于8)。而且需要需要指出的是,任何突发中断操作都将在DDR3中予以禁止。且不予支持,取而代之的是更灵活的突发传输控制(如4bit顺序突发)。

4.1.2 寻址时序(Timing)

        就像DDR2从DDR转变而来后延迟周期数增加一样,DDR3的CL周期也将比DDR2有所提高。DDR2的CL范围一般在2~5之间,而DDR3则在5~11之间,且附加延时AL的设计也有所变化。DDR2的AL范围是0~4,而DDR3的AL有三种选项,分别是0、CL-1和CL-2。另外,DDR3还新增加了一个时序参数——写入延时(CWD),这一参数将根据具体的工作频率而定。

4.1.3 新增的重置(Reset)功能

        重置是DDR3新增的一项重要功能,并为此专门准备了一个引脚。DRAM业界很早就要求增加这一功能,如今终于在DDR3上实现了。这一引脚将使DDR3的初始化处理变得简单。当Reset命令有效时,DDR3内存将停止所有操作,并切换至最少量活动状态,以节约电力。

        在Reset期间,DDR3内存将关闭内在的大部分功能,所有数据接收与发送器都将关闭,所有内部的装置将复位,DLL(延迟锁相环路)与时钟电路将停止工作,而且不理睬数据总线上的任何动静。这样一来,将使DDR3到达最节省电力的目地。

4.1.4 DDR3新增ZQ校准功能

        ZQ也是一个新增的引脚,在这个引脚上接有一个240欧姆的低公差参考电阻。这个引脚通过一个命令集,通过片上校准引擎(On-Die Calibration Engine,ODCE)来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。当系统发出这一指令后,将用相应的时钟周期(在加电与初始化之后用512个时钟周期,在退出自动刷新操作后用256个时钟周期、在其他情况下用64个时钟周期)对导通电阻和ODT电阻进行重新校准

4.1.5 参考电压分成两个

        在DDR3系统中,对于内存系统工作非常重要的参考电压信号VREF将分为两个信号,即为命令与地址信号服务的VREFCA和为数据总线服务的VREFDQ,这将有效的提高系统数据总线的信噪等级。

4.1.6 点对点连接(Point-to-Point,P2P)

        这是为了提高系统性能而进行的重要改动,也是DDR3与DDR2的一个关键区别。在DDR3系统中,一个内存控制器只与一个内存通道打交道,而且这个内存通道只能有一个插槽,因此,内存控制器与DDR3内存模组之间是点对点(P2P)的关系(单物理Bank的模组),或者是点对双点(P22P)的关系(双物理Bank的模组),从而大大地减轻了地址/命令/控制与数据总线的负载。而在内存模组方面,与DDR2的类别相类似,也有表准DIMM(台式PC)、SO-DIMM/Micro-DIMM(笔记本电脑)、FB-DIMM2(服务器)之分,其中第二代FB-DIMM将采用规格更高的AMB2(高级内存缓冲器)。

        面向64位架构的DDR3显然在频率和速度上拥有更多的优势,此外,由于DDR3所采用的根据温度自动自刷新、局部自刷新等其他一些功能,在功耗方面DDR3也要出色许多,因此,他可能首先受到移动设备的欢迎,就像最新迎接DDR2内存的不是台式机而是服务器一样。在CPU外频提升最迅速的PC台式机领域,DDR3未来也是一片光明。Intel所推出的新芯片-熊湖(Bear Lake),其将支持DDR3规格,而AMD也将预计同时在K9平台上支持DDR2及DDR3两种规格。

4.2 DDR3硬件设计

4.3 DDR3时序

 5 MIG引入

        MIG是Xilinx平台给出的一款内存控制器IP核。虽然DDR3的时序关系非常复杂,但是我们可以通过MIG IP核来控制DDR3,而我们只需要完成MIG的时序控制就行,这样就极大的简化了设计的复杂度,缩小了开发周期。

         图中所示为MIG的基本结构,它分为三个部分,分别是用户接口、内存控制器和物理接口。其中内存控制器和物理接口用来控制DDR3的时序,而我们只需要控制用户接口就可以了。

        图中的MIG IP核的用户接口是Native接口,时序关系也比较简单。就是说,当app_en和app_rdy信号同时为高电平时,app_cmd(命令)和app_addr(地址)才有效,所以当需要app_cmd和app_addr有效时,app_en必须保持到app_rdy为高电平才有效。

         关于Native接口的MIG IP核将讲解与使用方法很多,但我们这次试验主要用AXI接口的MIG IP 核。AXI接口的用户接口的时序其实就是AXI总线协议的时序,前边我们讲过,后边我们就直接来将怎样配置它已经利用它对DDR3进行读写测试。

  • 14
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是Vivado Mig IP核DDR3的各个引脚功能: 1. clk:DDR3时钟输入,用于时序控制。 2. rst:复位输入,用于复位DDR3控制器。 3. ddr3_addrDDR3地址输入,用于指定存储器位置。 4. ddr3_ba:DDR3 bank地址输入,用于指定存储器的bank位置。 5. ddr3_ras_n:行地址选择信号,低电平表示行地址有效。 6. ddr3_cas_n:列地址选择信号,低电平表示列地址有效。 7. ddr3_we_n:写使能信号,低电平表示写操作有效。 8. ddr3_dq:数据输入/输出信号,用于传输数据。 9. ddr3_dqs_p/n:数据时钟输入/输出信号,用于同步数据传输。 10. ddr3_dm_p/n:数据掩码输入/输出信号,用于指示数据的有效位。 11. ddr3_odt:输出驱动器电阻控制信号,用于控制输出驱动器的电阻值。 12. ddr3_ck_p/n:DDR3时钟输入/输出信号,用于同步时序。 13. ddr3_ck_n_p/n:DDR3时钟输入/输出信号,用于同步时序。 14. ddr3_reset_n:复位信号,用于控制DDR3控制器的复位。 15. ddr3_vref:内部参考电压输入,用于控制输出驱动器的电压参考值。 16. ddr3_zq:内部ZQ校准信号输入,用于校准输出驱动器的阻抗。 17. ddr3_alert_n:DDR3警报信号,用于指示DDR3控制器的状态。 18. ddr3_cke:时钟使能信号,用于控制时钟输入的使能。 19. ddr3_cs_n:芯片选择信号,用于选择DDR3存储器芯片。 20. ddr3_odt_p/n:输出驱动器电阻选择信号,用于选择输出驱动器的电阻值。 21. ddr3_zio_p/n:输出阻抗选择信号,用于选择输出阻抗的值。 22. ddr3_zio_p/n:输出阻抗选择信号,用于选择输出阻抗的值。 23. ddr3_parity:奇偶校验信号,用于校验数据的正确性。 24. ddr3_init_calib_complete:初始化和校准完成信号,用于指示DDR3控制器的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小靴子是社牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值