DDR2-DDR3-IP-CARE ---use

分为两种IP core : UNIPHY 和ALTMEMPHY

比较 UNIPHY 性能更好一点不支持cyclone系列芯片,,ALTEMPHY 支持所有altera支持DDR2的芯片

其实两种IP 使用方法相同

http://www.altera.com.cn/literature/hb/external-memory/emi_rldram_ii_ug.pdf

uniphy:IP核设置步骤:

 Memory clock frequency:给DDR的时钟频率

1、对FPGA PHY设置

 PLL reference clock frequency:FPGA时钟引脚输入的时钟,供DDR的PLL使用时钟频率(关键设置)

Full or half rate on Avalon-MM interface: FULL---verilog逻辑部分数据位宽X2,速度/2,,达到了降频的目的(关键设置)

Additional address/command clock phase:是否允许地址、控制信号有相位的移动(一般要设置,否则时钟采样有问题)

PLL sharing mode:指是否与IP核外部的PLL共用,如果共用的话会有相应的引脚从IP核引出----一般选择NO SHARE 不共用,使用单独的

PLL sharing mode:同上

OCT sharing mode:同上

2、对DDR 设置

memory vendor:厂家

memory format:discrete 分立器件(设计为单片DDDR) DIMM 内存条()

memory device speed grade :DDR2:速度等级,根据DDR 手册

total interface with:数据位宽度(根据设计填写)

DQ/DQS groups:一般8

number of chip selects  CS: 片选的个数 一般为1个

ROW address width:行地址个数 13 (根据DDR 手册)

column address width:列地址个数(根据DDR 手册)

bank-address width:bank个数(根据DDR 手册)

 

 ddr寄存器设置

 mode register 0

burst length:突发长度

read bust type:突发类型--sequence顺序的--interle断续的 一般为sequence

CAS latency :CAS延时参数设置

 

mode register 1

output drive strength :输出电流强度(对信号的阻抗匹配有帮助)

memory ODT:设置DDR2的片上电阻值

 

到此-----------------------------------------------------------------

自己定制的DDR2/DDR3控制器就完成了-----------可以进行编译了-------------其中红色为关键设置

注意:随着IP核会产生很多tcl文件--------------必须运行引脚分配约束的TCL 否则无法编译通过

 ------------------

 

最后经过调试:心得

  DDR2的IP使用调试非常简单,也非常稳定---------注意参考IP核的LOCAL信号的时序要求

DDR2

(

// inputs:
 .pll_ref_clk(CLOCK_50),//input 输入给DDR2pll的时钟
 .global_reset_n(rst_n),//input复位
 // inputs:
 .local_ready(local_ready),//output                为高时可以进行写--为低时DDR2忙
 .local_burstbegin(local_burstbegin),//input    突发写开始--一个时钟周期
 .local_address(local_address),//input [22:0]  读写的地址---包括行列bank地址的排列位数和
 // read
 .local_read_req(local_read_req),//input          读请求
 .local_rdata(local_read_data),//output  [63:0] 数据输出
 .local_rdata_valid(local_rdata_valid),//output   输出数据的有效信号
 // write
 .local_write_req(data_en),//input  data_en1,local_write_req 写请求
 .local_wdata(local_wdata),//input [63:0]                             写数据
 //
 .local_be(8'hff),///input [7:0]                       是否屏蔽字节,8位 一位为一个字节
 .local_size(4),//input [2:0]                           突发长度1---7
 .soft_reset_n(rst_n),//input        
 //output  
 .local_refresh_ack(),//output  
 .local_init_done(),//output  
 .reset_phy_clk_n(),//output 
 
 .aux_full_rate_clk(),//output  
 .aux_half_rate_clk(),//output 
 .phy_clk(phy_clk),//output                               外部逻辑使用时钟
 .reset_request_n(),//output 
 //outputs:
 .mem_addr(mem_addr),
 .mem_ba(mem_ba),
 .mem_cas_n(mem_cas_n),
 .mem_cke(mem_cke),
 .mem_clk(mem_clk),
 .mem_clk_n(mem_clk_n),
 .mem_cs_n(mem_cs_n),
 .mem_dm(mem_dm),
 .mem_dq(mem_dq),
 .mem_dqs(mem_dqs),
 .mem_odt(mem_odt),
 .mem_ras_n(mem_ras_n),
 .mem_we_n(mem_we_n)
   );

 

 

时序-----------------

 

写:突发为4--8个时钟周期延时较好

    时钟:    1            2                  3                       4                        5                   6                 7

 

        给地址    写请求=1    写请求=1     写请求=1          写请求=1      写请求=0         地址加4

          突发请求=1  突发请求=0   突发请求=0      突发请求=0      突发请求=0

          数据1     数据2      数据3      数据4      

写:突发为4--8个时钟周期延时较好

    时钟:    1            2                 3                     4                       

 

        给地址    读请求=1    读请求=0        地址加4                 

          突发请求=1  突发请求=0  

                  

 

                 同有效信号一起出来4个64位数据                 

 数据1     数据2      数据3      数据4 

你可能感兴趣的:(IP)