mig全称是Memory Interface Generator。
参考自视频:MIG IP配置_哔哩哔哩_bilibili
DDR基础知识
时钟类型
使用流程
选择DDR3
16是地址线的位宽
能在DDR3的型号MT41K256M16XX-125中看出来。
怎么选择clock period 靠的是 芯片型号中的 -125,然后算出 800MHZ,但是我只能选出400MHZ,不太明白为什么,是fpga芯片的问题
- 这是内存控制器的时钟周期,通常指的是控制器访问DDR3存储器时所使用的主时钟周期。例如,图中你设置的 "Clock Period" 为 2.5 ns,对应的是 400 MHz 的时钟频率。
- 这个时钟周期与内存模块通信的速度直接相关,较短的周期意味着更快的时钟频率和更高的数据传输速率。
- 详细解释如手册
参考时钟默认200MHZ,是一个比较固定死的值,如上图的input clock period,就是200MHZ,这个时候就能给参考时钟用的 system clock
XADC的作用主要是
保持默认
点一下restore ,然后next就可以
解决方案是将DQ[8-15]接到另一个byte group上。如下,因为
保持默认
保持默认
用户 MIG DDR的带宽计算
DDR的数据位宽在这里可选
因为存在 用户侧带宽 = DDR带宽 这个等式,所以例化IP核的时候,veo文件会自己计算用户界面的数据位宽。如下所示为128bit
MIG的IP核输入输出和时序
打开示例工程
输入输出
wdf 的全称应该是Write Data FIFO
信号分类:
mig_7series_0 u_mig_7series_0 (
// Memory interface ports
.ddr3_addr (ddr3_addr), // output [14:0] ddr3_addr
.ddr3_ba (ddr3_ba), // output [2:0] ddr3_ba
.ddr3_cas_n (ddr3_cas_n), // output ddr3_cas_n
.ddr3_ck_n (ddr3_ck_n), // output [0:0] ddr3_ck_n
.ddr3_ck_p (ddr3_ck_p), // output [0:0] ddr3_ck_p
.ddr3_cke (ddr3_cke), // output [0:0] ddr3_cke
.ddr3_ras_n (ddr3_ras_n), // output ddr3_ras_n
.ddr3_reset_n (ddr3_reset_n), // output ddr3_reset_n
.ddr3_we_n (ddr3_we_n), // output ddr3_we_n
.ddr3_dq (ddr3_dq), // inout [15:0] ddr3_dq
.ddr3_dqs_n (ddr3_dqs_n), // inout [1:0] ddr3_dqs_n
.ddr3_dqs_p (ddr3_dqs_p), // inout [1:0] ddr3_dqs_p
.init_calib_complete (init_calib_complete), // output init_calib_complete
.ddr3_cs_n (ddr3_cs_n), // output [0:0] ddr3_cs_n
.ddr3_dm (ddr3_dm), // output [1:0] ddr3_dm
.ddr3_odt (ddr3_odt), // output [0:0] ddr3_odt
// Application interface ports
.app_addr (app_addr), // input [28:0] app_addr
.app_cmd (app_cmd), // input [2:0] app_cmd
.app_en (app_en), // input app_en
.app_rdy (app_rdy), // output app_rdy
.app_wdf_data (app_wdf_data), // input [127:0] app_wdf_data
.app_wdf_end (app_wdf_end), // input app_wdf_end
.app_wdf_wren (app_wdf_wren), // input app_wdf_wren
.app_wdf_rdy (app_wdf_rdy), // output app_wdf_rdy
.app_wdf_mask (app_wdf_mask), // input [15:0] app_wdf_mask
.app_rd_data (app_rd_data), // output [127:0] app_rd_data
.app_rd_data_end (app_rd_data_end), // output app_rd_data_end
.app_rd_data_valid (app_rd_data_valid), // output app_rd_data_valid
// app_sr_active ,app_ref_req,app_zq_req 不用可以置零
.app_sr_active (app_sr_active), // output app_sr_active
.app_sr_req (app_sr_req), // input app_sr_req
.app_ref_req (app_ref_req), // input app_ref_req
.app_ref_ack (app_ref_ack), // output app_ref_ack
.app_zq_req (app_zq_req), // input app_zq_req
.app_zq_ack (app_zq_ack), // output app_zq_ack
// 是控制器给到用户界面的时钟和复位
.ui_clk (ui_clk), // output ui_clk
.ui_clk_sync_rst (ui_clk_sync_rst), // output ui_clk_sync_rst
// System Clock Ports
.sys_clk_i (sys_clk_i),
.sys_rst (sys_rst) // input sys_rst
);