找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4081|回复: 1
打印 上一主题 下一主题
收起左侧

ddr2 ip core的定制(altera)

[复制链接]
跳转到指定楼层
楼主
ID:104287 发表于 2016-1-31 03:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分为两种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 




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:581247 发表于 2020-4-5 09:55 | 只看该作者
想请教一下楼主 我想从ddr中读取数据交给DAC,DAC工作频率200MHz;那Memory clock frequency是应该设置100MHz吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表