Xilinx32bit位宽DDR3读写控制模块编写(3)——MIGip核app接口的使用

一、接口简介

        打开官方文件,官方已经给出接口和例化方式。

       这里下载官方文件    ug586-7Series-MIS.pdf

       下图是官方文档的接口示意图。ddr3开头的都是要接到ddr3上的只需要按照电路设置IO口即可,我们只需要控制左侧接口。

 每个接口的详细介绍可以去看官方文档

下面是我对每个接口的简单理解

module mig_7series_0 (

  // Inouts
  inout [31:0]       ddr3_dq,
  inout [3:0]        ddr3_dqs_n,
  inout [3:0]        ddr3_dqs_p,
  // Outputs
  output [14:0]     ddr3_addr,
  output [2:0]        ddr3_ba,
  output            ddr3_ras_n,
  output            ddr3_cas_n,
  output            ddr3_we_n,
  output            ddr3_reset_n,
  output [0:0]       ddr3_ck_p,
  output [0:0]       ddr3_ck_n,
  output [0:0]       ddr3_cke,
  output [0:0]        ddr3_cs_n,
  output [3:0]     ddr3_dm,
  output [0:0]       ddr3_odt,

  // Inputs
  // Single-ended system clock

  input             sys_clk_i, //ip核设置时定下的时钟,200MHz

  // user interface signals

  input [28:0]      app_addr,  //显然是ddr3地址
  input [2:0]       app_cmd, //读写控制:1读,0写。从哪看的不用我说了吧 
  input             app_en,//使能信号,无论读写或者操作什么都需要拉高

  input [255:0]     app_wdf_data,//写数据
  input             app_wdf_end,//写数据结束信号,1数据有效,0数据无效
  input [31:0]      app_wdf_mask,//写数据掩码,第一篇已经介绍,32位对应32个字节,0有效,1无效
  input             app_wdf_wren,//写数据有效信号,1数据有效,0数据无效

  output [255:0]    app_rd_data,//读数据
  output            app_rd_data_end,//写数据结束信号,可以说是用不着,毕竟有下面的valid信号
  output            app_rd_data_valid,//1数据有效,0数据无效

  output            app_rdy,//1:MIGip核准备好了;0:没准备好
  output            app_wdf_rdy,//1:可以写了;0:不能写

//无用六兄弟
  input             app_sr_req,
  input             app_ref_req,
  input             app_zq_req,
  output            app_sr_active,
  output            app_ref_ack,
  output            app_zq_ack,

//给我们用的
  output            ui_clk,//之前设置ip核时设定好的,需要400MHz,设置4:1,输出100MHz,写入数据的                     //时候就用100MHz的时钟来写
  output            ui_clk_sync_rst,//控制接口程序的复位信号
  output            init_calib_complete,//ddr3初始化完成信号,1:完成
//这些也没用
  output [11:0]                                device_temp,//设备温度
`ifdef SKIP_CALIB
   output                                      calib_tap_req,
   input                                       calib_tap_load,
   input [6:0]                                 calib_tap_addr,
   input [7:0]                                 calib_tap_val,
   input                                       calib_tap_load_done,
`endif
//migip核复位,可选择设置为高有效或者低有效,第一篇有介绍
  input			sys_rst
  );

        用户端接口可以分为五部分:①输出给控制函数用的时钟、复位、初始化完成信号;②读写复用的地址、读写控制、使能信号;③5个写数据专用信号;④3个读数据专用信号;⑤ip核使用的时钟、复位信号。

二、写数据

        图1-74 告诉我们只有app_rdy和app_en都拉高时,控制信号和地址信号才能有效传输给ddr3。

       图1-75 告诉我们写入数据一共有三种方式,选择第一种全部信息在同一时钟周期内写入,这样代码写起来简单一点。

       app_wdf_end和app_wdf_wren的用法:时钟工作在4:1模式下时 app_wdf_end和app_wdf_wren同步拉高

三、读数据

        读数据就很简单了,app_en、app_addr、app_cmd一给,等着数据和有效信号就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值