DDR3:使用流程
一. 配置过程
1>首先找到IP核
2>选择兼容的片子,这个ddr兼容K7系列的三个片子
3>选择ddr3
4>配置工作时钟部分
配置时钟前我们先了解一下ddr3的ip核的时钟关系,如下图,共三个时钟。Ip核心的工作时钟和参考时钟,必须直接连在电路板上,不可由IP核分频得到。
IP核的工作时钟常用频率:50M/200M(不必再选参考时钟)
①:通过周期调整DDR3工作时钟
②: 4:1和2:1部分,是选择用户的工作时钟
4:1 表示在DDR3工作时钟400M情况下用户时钟为100M
2:1 表示在DDR3工作时钟400M的情况下用户时钟为200M
③:选择DDR3器件型号
④:选择数据的位宽,需要根据器件而定,比如64M*16bit=128M的ddr3芯片,挂两片的位宽就是32bit
⑤:表示数据掩膜,与keep线类似。
⑥:DDR3的bank数量
5>配置IP核时钟
①表示:IP核的工作时钟,常用时钟50M、200M(可以不选择参考时钟) 必须直连板子
②表示:数据顺序
③表示:地址类型
6>继续配置时钟
①选择系统时钟的输入方式:单端or差分
②选择参考时钟,如果选择200M系统时钟,可以不选参考时钟直接使用系统时钟作为参考时钟
③选择复位高低有效
7>该配置引脚了
8>配置引脚
分别为:信号名称(由原理图决定)/bank号/Byte号/引脚号/然后校对一下
分配参考时钟引脚
二. ip核引脚说明
引脚名称 | 引脚方向 | 备注 |
ddr3_addr | output |
|
ddr3_ba | output |
|
ddr3_cas_n | output |
|
ddr3_ck_n | output |
|
ddr3_ck_p | output |
|
ddr3_cke | output |
|
ddr3_ras_n | output |
|
ddr3_reset_n | output | 复位状态信号 |
ddr3_we_n | output |
|
ddr3_dq | inout |
|
ddr3_dqs_n | inout |
|
ddr3_dqs_p | inout |
|
init_calib_complete | output | 初始化完成信号 |
ddr3_cs_n | output |
|
ddr3_dm | output |
|
ddr3_odt | output |
|
|
|
|
app_addr | input | 要操作地址每次step为8 |
app_cmd | Input | 写000读001 |
app_en | Input | 使能信号 |
app_wdf_data | input | 写入的数据【255:0】 |
app_wdf_end | input | last |
app_wdf_wren | input | 写使能 |
app_rd_data | output | 读出的数据【255:0】 |
app_rd_data_end | output | 最后一行一个上升沿last |
app_rd_data_valid | output | 读有效 |
app_rdy | output |
|
app_wdf_rdy | output |
|
app_sr_req | input | 赋0 |
app_ref_req | input | 赋0 |
app_zq_req | input | 赋0 |
app_sr_active | Output |
|
app_ref_ack | Output |
|
app_zq_ack | Output |
|
ui_clk | output | Usr的always时钟 |
ui_clk_sync_rst | output | Usr的复位信号 |
app_wdf_mask | input | Keep信号 |
|
|
|
sys_clk_i | input | 直连板子时钟 |
clk_ref_i | input | 直连板子时钟 |
sys_rst | input | 直连板子系统复位 |
|
|
|
|
|
|
三.时序分析
1>写时序:在app_rdy与app_wdf_ready都拉高后,便可以进行操作。下达写数据cmd拉一个app_en同时输入写入的数据和地址,值得注意的是:DDR允许写使能信号落后cmd两个时钟后期之内。但是还是建议写的数据和地址都在一个周期之内
2>读时序
先下达读命令,同时拉高一个app_en和addr。然后就等着有效信号等着读数据。下几个周期的指令,回几个周期的数据。
四.效果
做了一个往AADR0写入全F的数据,再读出的程序。效果如下: