XILINX MIG驱动

简介

        框架图

        本章节主要针对MIG读写做详细介绍,首先创建BLOCK DESIGN,工程连接如下图所示:

      MIG IP介绍  

        DATAMOVER的配置这里不再做介绍,结合上篇文章讲到DATAMOVER对BRAM进行读写操作,这里通过AXI桥再加一个MIG模块,MIG模块的配置和说明如下:

1、Clock Period:设置DDR3的IO时钟频率,根据开发板上实际DDR3支持的最大时钟频率进行设置,MT41K256M16TW-107IT最大支持933MHz的接口时钟,本次设计设置为400MHz的数据时钟。

2、PHY to Controller Clock Ratlo:FPGA给DDR3芯片提供的时钟频率为Clock Period,但是FPGA内部其余模块的时钟一般是运行不到Clock Period这么高的时钟频率的,所以需要给FPGA内部提供一个较低的时钟,这个参数就是用来设置DDR3接口时钟与MIG IP提供给FPGA内部其他模块的时钟(ui_clk)频率比值。本次设计的比值固定为4:1。由于ui_clk与DDR3接口时钟频率比值为1:4,ui_clk时钟为100MHz,可以作为系统时钟工作。

3、Vccaux_io:设置bank的供电电压,一般都是锁死的,会根据DDR3时钟频率变化而变化。

4、Memory Type:一般选择Components即可,其余几种可能与内存条有关。

5、Memory Part:选择DDR3的型号,芯片类型不同会涉及具体的DDR3时序参数不同以及地址线和数据线的位数不同。

6、Memory Voltage:选择芯片引脚的电平标准,DDR3一般只有1.5V和1.35V两种,根据原理图选择支持的电平的类型即可。本次设计选用1.35V。

7、Data Width:DDR3读写数据位宽,根据原理图选择DDR3位宽。本次设计将位宽设置为64。

8、ECC:数据线多余72为才能使用的功能。

9、Data Mask:启用之后,可以通过一个掩膜信号去控制DDR3写入数据,本质就是去控制DDR3的DM引脚,一般也不会使用此功能。

10、Number of Bank Machies:选择bank数量,DDR3虽然有8个bank,但是如果不需要全部使用时,可以只选择部分bank,降低功耗,节约资源,默认使用4个bank。

11、ORDERING:DDR控制器调度命令的顺序的配置,当选择strict时,严格按照命令先后顺序执行;选择normal时,为了得到更高的效率,可能对命令重排序。

Data Width:表示axi_full接口读写数据的位宽。

Arbitration Scheme:仲裁机制,由于DDR3芯片只有一组数据,而axi_full的读、写接口支持同时传输数据。当选用“TDM”时,读、写操作同时到达时,将交替进行。由于MIG IP自带仲裁机制,用户侧就不需要再考虑读写仲裁问题。

Narrow Burst设置位0即可。

1.Input Clock Period:MIG IP 核的系统输入时钟周期,该时钟一般由晶振直接提供,本设计输入200MHz差分时钟信号;

2.Read Burst Type and Length:突发类型选择,突发类型有顺序突发和交叉突发两种,选择顺序突发(Sequential),其突发长度固定为 8。

3.Output Driver Impdance Control:输出阻抗控制。选择 RZQ/7。

4.RTT:终结电阻,可进行动态控制。选择 RZQ/4。

5.Controller Chip Select Pin:片选管脚引出使能。选择 enable,表示把片选信号 cs#引出来,由外部控制

6.BANK_ROW_COLUMN:寻址方式选择。BRC这种映射方式,用的最多。其优点是,功耗低;
RBC的优点是适合数据流方式去访问数据,性能好。

System Clock
选择时钟类型(Single-Ended, Differential, 或 No Buffer)sys_clk信号对。这里选择外部时钟输入。
Reference Clock
此选项选择时钟类型(Single-Ended, Differential, No Buffer 或 Use System Clock)的clk_ref信号对。
Use System Clock选项只在当系统时钟为199MHz~201MHz时可选。参考时钟频率基于数据速率,IP核添加了一个MMCM来创建高于1,333 Mb/s的ref_clk频率。当选择No Buffer选项时,IBUF原语不会在RTL代码中实例化,也不会为参考时钟分配引脚。
System Reset Polarity
选择复位信号的有效极性。
Debug Signals Contorl
选择此选项将使校准状态和用户端口信号被端口映射到example_top模块中的ILA和VIO。这有助于使用Vivado Design Suite调试特性监控用户界面端口上的数据流。
可选可不选。
Sample Data Depth
该选项为Vivado调试逻辑中使用的ILA模块选择Sample Data深度。当存储器控制器的调试信号选项为ON时,可以选择此选项。
Internal Vref
内部VREF可以用于数据组字节,以允许使用VREF引脚进行正常的I/O使用。内部VREF应该只用于800Mb/s或以下的数据速率。所以我们勾选不了。
IO Power Reduction
该选项通过在控制器处于空闲状态时自动禁用DQ和DQS ibuf来降低平均I/O功耗。
XADC Instantiation
当启用时,该选项指示MIG核心实例化XADC和温度轮询电路的温度监视器功能。如果已经在设计的其他地方使用了XADC,则可以禁用此选项。在这种情况下,必须定期采样设备温度,并将其驱动到存储器接口顶级用户设计模块中的device_temp_i总线上。如果device_temp_i信号未连接,则实例化XADC。否则将不实例化XADC。

设置DDR3的引脚信息,这里不做详细描述。

        选择输入时钟的引脚,一般DDR3输入引脚是有要求的。

        到这里DDR3 MIG设置基本完毕。

地址映射

        以上BD连接完后需要做地址映射,当前映射设置如下:

代码驱动

        MIG产生系统时钟输出,基于上一章节DATAMOVER驱动做再做简单更改,更改完毕后驱动可以完成对BRAM/MIG的读写功能,激励代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/10/09 11:44:57
// Design Name: 
// Module Name: ddr_rw_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module ddr_rw_test(

	input sys_clk,
	input sys_rst_n,

	output reg[22:0] w_data_length,
	output reg[31:0] w_bram_addr,
	output reg [127:0]s_axis_tdata,
	output reg s_axis_tvalid,
	input s_axis_tready,
	output reg s_axis_tlast,
	
	(* MARK_DEBUG="true" *)input init_calib_complete,
	
	
	
	output reg[31:0] rd_bram_addr,
	output reg[22:0] rd_data_length,  
	(* MARK_DEBUG="true" *)output reg rd_bram_en


    );
	
	
reg[31:0] delay_cnt;	
	 


	
	
	
	
	
endmodule

        w_bram_addr/rd_bram_addr地址设置可实现BRAM/MIG的读写操作。

        例如对BRAM做读写仿真,更改ddr_rw_test代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/10/09 11:44:57
// Design Name: 
// Module Name: ddr_rw_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module ddr_rw_test(

	input sys_clk,
	input sys_rst_n,

	output reg[22:0] w_data_length,
	output reg[31:0] w_bram_addr,
	output reg [127:0]s_axis_tdata,
	output reg s_axis_tvalid,
	input s_axis_tready,
	output reg s_axis_tlast,
	
	(* MARK_DEBUG="true" *)input init_calib_complete,
	
	
	
	output reg[31:0] rd_bram_addr,
	output reg[22:0] rd_data_length,  
	(* MARK_DEBUG="true" *)output reg rd_bram_en


    );
	
	
reg[31:0] delay_cnt;	
	 


	
	
	
	
	
endmodule

 仿真       

        仿真结果如下:

DATAMOVER输出;

以上是AXI4写操作;

DATAMOVER返回值如下:

        MIG的访问和BRAM一样,只需对映射地址做修改即可,这里不做详细介绍。

        如需代码和问题可以联系我 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值