DDR3逻辑相关

1.DDR3为了保证CPU正常工作,必须一次传输完CPU 在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。一般是64bit,所以我们的板子加了4片DDR3=4X16bit=64bit.

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

3.当一个FPGA上挂多个DDR,如4片ddr3,位宽则会相应增大;16*4 = 64bit,再乘以DDR3的突发长度BL=8;那么程序设计里DDR3的读写(app读写信号位宽)位宽就变成了16*4*8=512bit; (这里留个印象,再后文IP例化及程序设计部分还会讲到,到时候对应起来看更容易理解)——Read Burst Type and Length: 突发类型选择,突发类型有顺序突发和交叉突发两种,本次选择顺序突发(Sequential),其突发长度固定为 8。

4.由于是DDR方式传输数据(上升和下降沿都传输),所以芯片的一根数据线上的传输速率 = 2*800Mhz = 1600MT/s(1Kb=1000bit)。其实就是1600Mbit/s;带宽就是16根数据线同时传输的数据速率 = 1600Mbit/s x 16 = 25600Mbit/s = 3200Mbyte/s = 3.125GByte/s(25Gbit/s)

k7系列的FPGA所支持的DDR3传输速率高达1866MT/s,这里需要跟硬件工程师具体了解了解,实际使用最高还是1600MT/s,对应频率= 1600M/2= 800Mhz;

5.Clock Period:(上图已讲解如何查看器件所支持的最大频率) 

6.术语部分

核心频率:核心频率就是DDR物理层(PHY)IO时钟频率,对应到MIG就是第一个配置的“CLOCK PERIOD”,上文我们选择的是800Mhz
工作频率:核心频率* 2 (上下沿)= 1600M核心频率* 2 = 1600M
传输速率:核心频率* 2 = 1600MT/s
带宽:传输速率*位宽 = 1600M * 16 = 25600Mbit/s = 3200Mbyte/s = 3.125GByte/s
7.选择DDR3的类型,Components指的是DDR3的型号是元件类颗粒,笔记本那种的插条类是SODIMMs。

8.是否使用XADC,会输出器件的温度,如果其他模块要用XADC,那么这里就不使能。

9.

利用MIG核(上图红色部分)可以核DDR3芯片进行通信,我们只管USER FPGA logic部分就可以了。

mig_7series_0 u_mig_7series_0 (

// Memory interface ports

    .ddr3_addr            (ddr3_addr),  // output [15:0]  行列地址,其中行地址线和列地址线是分时复用的,即地址要分两次送出,先送出行地址,再送出列地址。

    .ddr3_ba              (ddr3_ba),  // output [2:0]    bank地址

    .ddr3_cas_n           (ddr3_cas_n),  // output     列地址选通    

    .ddr3_ck_n            (ddr3_ck_n),  // output [0:0]  差分时钟p端     

    .ddr3_ck_p            (ddr3_ck_p),  // output [0:0]  差分时钟n端

    .ddr3_cke             (ddr3_cke),  // output [0:0]      时钟有效信号,高电平有效

    .ddr3_ras_n           (ddr3_ras_n),  // output   行地址选通信号,低电平有效         

    .ddr3_reset_n         (ddr3_reset_n),  // output         复位信号,低电平有效            

    .ddr3_we_n            (ddr3_we_n),  // output 0-写允许  1-读允许 

    .ddr3_dq              (ddr3_dq),  // inout [63:0] 数据    ——这里就和你设置的MIG的数据位宽有直接关系了        

    .ddr3_dqs_n           (ddr3_dqs_n),  // inout [7:0]  数据选取脉冲   ——这里就和你设置的MIG的数据位宽/8有直接关系了            

    .ddr3_dqs_p           (ddr3_dqs_p),  // inout [7:0]  数据选取脉冲     ——这里就和你设置的MIG的数据位宽/8有直接关系了          

    .init_calib_complete  (init_calib_complete),  // output 初始化完成信号  ,高电平有效

 .ddr3_cs_n         (ddr3_cs_n),  // output [0:0]   片选信号,低表示命令有效,否则命令屏蔽       

    .ddr3_dm              (ddr3_dm),  // output [7:0]    数据掩码 一位控制一个字节——这里就和你设置的MIG的数据位宽/8有直接关系了

    .ddr3_odt             (ddr3_odt),  // output [0:0] 片上终端使能,高电平有效       

// Application interface ports

    .app_addr             (app_addr),  // input [29:0] 访问的DDR3地址 

    .app_cmd              (app_cmd),  // input [2:0]       000 写命令  001 读命令  

    .app_en               (app_en),  // input   命令路径:的使能信号,该信号有效时,app_cmd、app_addr信号才有效,其余的时刻信号无效                       

    .app_wdf_data         (app_wdf_data),  // input [511:0]  写数据路径数据信号 

    .app_wdf_end          (app_wdf_end),  // input 4:1模式下与app_wdf_wren相同,2:1模式下每两个app_wdf_wren,使能一次 app_wdf_en。这个可以理解可参考UG586数据手册P169        Figure 1-78/ Figure 1-79       

    .app_wdf_wren         (app_wdf_wren),  // input      写数据的有效信号               

    .app_rd_data          (app_rd_data),  // output [511:0]           读数据信号

    .app_rd_data_end      (app_rd_data_end),  // output       DDR3给用户读命令结束信号

    .app_rd_data_valid    (app_rd_data_valid),  // output                  读数据有效信号 

    .app_rdy              (app_rdy),  // output                 命令路径准备好接受用户的命令信号,与app_en有效时命令有效   

    .app_wdf_rdy          (app_wdf_rdy),  // output       MIG信号给用户的信号,在该信号与app_wdf_wren信号同时有效时,数据被写入DDR芯片            

    .app_sr_req           (1'b0),  // input           一般为0

    .app_ref_req          (1'b0),  // input            一般为0         

    .app_zq_req           (1'b0),  // input          一般为0         

    .app_sr_active         (),  // output                上面请求的响应信号 

    .app_ref_ack          (),  // output                 上面请求的响应信号 

    .app_zq_ack           (),  // output               上面请求的响应信号 

    .ui_clk               (clk),  // output   MIG给用户使用的时钟,用户对MIG IP核的操作必须使用该时钟         

    .ui_clk_sync_rst      (rst),  // output     MIG给用户使用的复位信号,用户对MIG IP核的操作必须使用该复位信号             

    .app_wdf_mask         (64'd0),  // input [63:0]   写数据的掩码       ,一般为0

    // System Clock Ports                        

    .sys_rst               (sys_rst) // input sys_rst MIG IP核的复位信号,与系统时钟相关联

);
 

我们可以看一下这个DDR3的内部结构图,从这个图中我们可以看出10bit的Column Address的寻址能力只有128,只有7bits用于列地址译码!列地址0,1,2并没有用,而这列地址的低三位被用于确定Burst Length 与Burst Order了.见下图:(所以列地址的低三位并没有用于寻址,所以如果我们想要访问下一存储单元的话,地址需要加8而不是加1)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
本文是作者在华为工作期间写的一篇对DDR3全面的总结,当时有好几年经常接触DDR3的设计与测试,期间总结了大量的知识点,于是业余时间汇总起来写成本文,因为DDR3属于业界通用的器件,其中知识也不涉及到公司秘密,所以分享出来供大家参考。 文章摘要: DDR,在PC、手机、通信设备等产品中广泛应用。而随着技术发展以及用户需求提高,内存不断升级,从SDRAM, DDR, DDR2、再到DDR3,现在DDR4也开始大规模应用。其特点就是速率、容量不断提高,而且性能、功耗方面也不断优化。内存技术是很多软件、硬件、逻辑、测试工程师们关注的重点。但由于其复杂程度较高,同时,英文资料复杂,理解困难,而中文资料能较全面详细描述DDR3的文献匾乏、零散。记得刚接触DDR3时真是一头雾水,一直在其表面徘徊很久。身边小伙伴也是同感。 作者所从事的硬件领域常常接触DDR,在这方面有一些难忘的经历,期间也积累了一些知识。出于经验传承的目的,特写下本文。内存已经历多代,但很多知识是相通的,本文拿当前主流的DDR3作为重点去讲解。出于能力水平及篇幅原因,本文未能周全深入描述DDR3所有特性或者某些地方存在错误,还望读者谅解和指正。同时,本书在一些地方引用了其他文献中的图文,会在相应地方加以说明。在此,衷心希望本文能给能给想了解DDR3技术的同学提供帮助。 本文分为以下八章内容: 第一章 DDR3基础 第二章 DDR硬件设计 第三章 DDR3几个关键技术 第四章DDR3工作流程、参数详解 第五章 DDR3训练 第六章 DDR3信号完整性测试 第七章 DDR3问题案例 第八章 SDRAM、DDRDDR2、DDR3、DDR4对比

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值