DDR3 控制器 MIG IP 详解完整版 (AXI4&Vivado&Verilog)

本文详细介绍了Xilinx DDR3控制器MIG IP的创建配置流程,包括DDR3 IP的搜索、配置选项,如时钟周期、存储器类型、接口电压等。此外,还探讨了AXI接口协议,包括写地址、写数据、读地址和读数据通道的信号详细说明,并展示了Example Design的生成、仿真和上板测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDR系列文章分类地址:
(1)DDR3 基础知识分享
(2)DDR3 控制器 MIG IP 详解完整版 (AXI4&Vivado&Verilog)
(3)DDR3 控制器 MIG IP 详解完整版 (native&Vivado&Verilog)
(4)基于 DDR3 的串口传图帧缓存系统设计实现
(5)基于 DDR3 的native接口串口局部传图缓存系统设计实现
(6)基于 DDR3 的串口传图缓存系统设计实现
(7)基于 FPGA 的彩色图像灰度化的设计实现


前言

本节主要是介绍 Xilinx DDR 控制器 IP 的创建流程、IP 用户使用接口 AXI 协议介绍和
IP 对应的 Example Design 的仿真和上板验证。

提示:以下是本篇文章正文内容,下面案例可供参考

一、DDR 控制器 IP 创建流程

在建立好工程后,按如下步骤进行 DDR 控制器 IP 的创建和配置。

1、搜索查找 DDR 控制器 IP。

Xilinx 的 DDR 控制器的名称简写为 MIG(Memory Interface Generator),在 Vivado 左侧窗口点击 IP Catalog,然后在 IP Catalog 窗口直接搜索关键字“mig”,就可以很容易的找到Memory Interface Generator(MIG 7 Series)。如下图所示。

1

直接双击鼠标左键或通过鼠标右键选项中选择 Customize IP 并点击。如下图所示,可进
入到 IP 配置界面。

2、MIG IP 的配置。

进入IP配置界面后,第一个界面是 Memory Interface Generator 介绍页面,如下图所示。默认的器件家族(FPGA Family)、器件 型号(FPGA Part)、速度等级(Speed Grade)、综合工具(Synthesis Tool)和设计输入语言(Design Entry)都和创建工程是保持一致。
2
点击 Next 到 MIG Output Options 配置页面中,如下图所示。勾选“Create Design”,默认名称(Component Name)为“mig_7series_0”,用户可对其进行修改,这里保持默认。选择控制器数量(Number of Controllers)为 1,勾选 AXI4 Interface(本实验 MIG IP 的用户接口使用 AXI 协议接口)。

3

点击 Next 到 Pin Compatible FPGAs 配置页面,如下图所示该界面可用于配置选择和当前所设定的唯一器件型号做引脚兼容的其它 FPGA 型号。对于某些可能升级器件型号的应用而言,这个功能是很实用的。这里保持默认不做配置。

4
点击 Next 进入到如下图所示的 Memory Selection 配置页面,这里根据实际板子硬件进行选择,开发板板载的是 DDR3,这里选择“DDR3 SDRAM”即可。
5
点击 Next 进入到如下图所示的 Controller Options 配置页面该配置。

6
在该配置界面需要设定如下重要的 DDR3 存储器信息。对应的设置位置如下图所示。
(1)DDR3 存储器驱动的时钟周期(Clock Period)设置为 2500ps(即 400MHz),这个时钟是用于 FPGA 输出给到 DDR 存储器时钟管脚的时钟。注意这里根据实际情况是有设置区间范围的,并非可以设置任意值,这里的区间范围为 25003300ps(即300400MHz)。
(2)DDR3 存储器类型(Memory Type)为 Components。
(3)DDR3 存储器型号(Memory Part)为 MT41J128M16XX-125,这是开发板板载 DDR3存储器的实际型号(XX 表示任何字符均可)。此处倒三角点击后有很多备选型号,若实际使用型号不在此列表中,可以点击“Create Custom Part”后设置相关 DDR3 存储器的时序参数。
(4)DDR3 存储器接口电压(Memory Voltage)为 1.5V。
(5)DDR3 存储器位宽(Data Width)为 16,这里根据实际开发板板载 DDR3 存储器数据总线位宽进行设置。
(6)DDR 控制器的 bank machines 个数设置,这里参数与 DDR3 物理 bank 个数并非是同一概念,设置上并非一定需要与 DDR3 物理 bank 个数保持一致(当然设置相同数量可以增加 DDR 控制器的效率和性能,但是会占用相对多的资源,时序上要求也相对要高,性能和资源上如何达到一个比较好的平衡,需要根据实际应用场景进行设置,有关详细的设置指导可参考文档 7 Series FPGAs Memory Interface Solutions)。
(7)DDR 控制器调度命令的顺序的配置,当选择 strict 时,严格按照命令先后顺序执行;选择 normal 时,为了得到更高的效率,可能对命令重排序。为了操作简单,我们选择strict。
全部参数设置完成后如下图所示。

7

点击 Next 进入到如下图所示 AXI Parameter 配置页面。该界面是对 AXI 接口相关参数
进行配置,具体配置如下。
(1)AXI 接口的数据位宽,设置为 128。
(2)DDR 控制器的仲裁机制,由于 AXI 接口读写通道是独立的,读写各有自己的地址通道,而储存器控制器只有一个地址总线,同一时刻只能进行读或写,这样就存在读/写优先级的问题,这里设置 TMD(Time Division Multiplexing),该设置读写优先级相同,读写交替进行。
(3)Narrow Burst 支持,设置 0,将其关闭。
(4)AXI 接口的地址位宽,自动根据 DDR3 内存生成的位宽,这里 AXI 地址对应的数据是以 1 字节进行计算的,不要与 DDR3 的地址和存储数据混淆。板载 DDR3 存储器存储空间 2Gbit(2Gbit = 256MByte = 2^28 Byte,所以 AXI 的地址位宽为 28)。
(5)AXI 读/写通道的 ID 宽度。ID 是用来标识读/写响应和读/写数据的一致性,具体后面在讲解 AXI 协议会讲。
AXI 接口相关参数配置完成后的界面如下图所示。
8
点击 Next 进入到如下图所示的 Memory Options 配置页面下。

9
各种参数配置如下。
(1)输入系统时钟频率设置,这个时钟是提供给 MIG IP 的时钟,这里配置没有啥特别要求。如下图所示为 MIG IP 内部关于时钟的结构图,可以看到 MIG IP 里面有一个时钟锁相环,系统时钟是这个时钟锁相环的输入时钟,锁相环会根据这里的输入时钟自动产生 MIG IP 内部各种所需的时钟。所以这里的时钟频率的设置没有固定的要求,下拉框中的各种频率值都可以选择。这里考虑到 MIG IP 输入还需要一个 200M 的 IDELAYReference Clock 时钟,为了将两个时钟共用一个输入时钟,将这里的系统时钟周期(Input Clock Period)配置选择为 5000ps(200MHz)。

10

(2)突发读类型和长度(Read Burst Type and Length)设置为顺序读写 Sequential。
(3)输出驱动阻抗控制(Output Drive Impedance Control)选择 R ZQ/7。
(4)片上终端(On Die Termination)设置为 R ZQ/4
(5)片选信号(Controller Chip Select Pin)设置为 Enable,即使用该引脚,实际开发板的DDR3 的 CS 信号有连接到 FPGA 管脚,所

### 使用AXI接口控制MIG IP核配置DDR4的最佳实践 #### AXI接口与DDR4交互概述 为了实现高效可靠的DDR4内存操作,通常会采用Xilinx提供的Memory Interface Generator (MIG) IP核。该IP核简化了复杂的DDR4时序管理,并提供了标准化的AXI接口用于数据传输。 #### 配置AXI IP核 在Vivado环境中创建新的工程并导入所需组件之后,通过如下方式完成AXI IP核针对DDR4的支持: - 打开Block Design视图,在工具栏中点击`Add IP`按钮; - 搜索并添加`MIG 7 Series`或适用于目标器件系列版本的相应选项; - 启动向导程序按照提示逐步设置参数直至生成完整的硬件描述文件集合[^1]。 #### 初始化过程注意事项 确保PLL锁定状态良好以及校准序列无误对于稳定运行至关重要。初始化阶段涉及多个内部寄存器编程动作,建议遵循官方文档指导执行具体步骤。 #### 数据路径规划 考虑到DDR4具有更高的带宽需求,合理安排读写缓冲区大小能够有效提升性能表现。例如可以构建一对FIFO结构分别服务于输入输出方向的数据流处理任务。其中写入侧接收来自处理器或其他外设单元提交的信息包并通过适当调整粒度后转发给实际物理层;相反地,当接收到外部存储设备返回的结果集时,则先暂存在本地再分发至请求方[^2]。 ```verilog // Verilog代码片段展示简单的AXIDDR4桥接逻辑框架 module axi_ddr_bridge ( input wire aclk, input wire aresetn, // AXI Lite Slave interface signals... output reg [31:0] ddr_addr, // Address bus to DDR controller output reg ddr_wren, // Write enable signal output reg [63:0] ddr_din, // Data input buffer connected with write FIFO input wire [63:0] ddr_dout, // Data output from read operation // ...other necessary control/status lines omitted here. ); always @(posedge aclk or negedge aresetn) begin : proc_main if (!aresetn) begin // Reset handling code goes here end else begin case(state) IDLE: /* State machine transitions */; WRITE: /* Handle write transactions */; READ: /* Process read requests */ ; default: state <= IDLE; endcase end end // Implement the rest of your design including FIFOs and other peripherals as needed. endmodule ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C.V-Pupil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值