FPGA DDR3实战(一):详解Xilinx MIG IP核配置

《FPGA DDR3权威指南》系列导航
   
      《FPGA DDR3权威指南》系列旨在从零到一带你彻底掌握DDR3设计精髓,关注我,你可以:

  • 系统学习,避免知识碎片化。
  • 获得更新提醒,不错过任何一篇干货

本篇是该系列的第一篇内容

       下一篇:FPGA DDR3实战(二):手把手教你仿真DDR3(MIG IP核)_fpga怎么模拟ddr3-优快云博客


一:引言  我们为什么需要使用DDR3

在我们追逐更高、更快、更强的FPGA系统时,总会遇到一个无法回避的“内存墙”。

如果你试图使用FPGA内部的Block RAM来解决,你会发现它的容量如同一个小水杯,试图去接住打开的水龙头——瞬间就会满溢而出。而片外传统的SRAM,虽然速度快,但容量小、价格昂贵,性价比极低。

于是,我们迎来了今天的主角:DDR3 SDRAM。

它并非最新的技术,但无疑是当前在成本、容量、带宽和可靠性上最平衡的选择。你可以把它理解为一个在FPGA片外的、“海量”且“廉价”的“数据中转仓库”

  • 【海量】:以GB为单位的容量,轻松容纳海量数据,让FPGA得以处理复杂的任务。

  • 【高速】 通过双倍数据速率 等技术,提供远超普通SDRAM的传输带宽,满足高速数据吞吐的需求。

  • 【廉价】:技术成熟,产业链完善,单位容量的成本极具竞争力。

然而,驾驭这片“海洋”并非易事。 DDR3的复杂性远非简单的UART或SPI可比:

  • 它需要复杂的初始化序列

  • 它通过命令、地址总线进行复用访问,时序关系极其严格。

  • 它依赖MIG这样的专用IP核来管理底层物理层接口。

因此,本系列文章的目的,就是作为你的“领航员”,带你穿越DDR3开发的迷雾。我们将从Xilinx MIG IP核的深度解读开始,一步步教你如何搭建测试环境、编写读写控制器,并最终压榨出DDR3的极致性能

准备好了吗?让我们开始这趟深入DDR3核心的旅程。

二:MIG IP核配置向导逐页精讲

本次我们以xillinx的A7200t作为硬件平台,进行MIG ip核配置

1 打开IP Catalog,搜索MIG

2 MIG ip核,点击下一步,选择Create Design

3  选择FPGA型号

4  选择DDR3

5    选择DDR3的工作频率,Memory的型号,此处需要注意的是,我们内部是没有MT41K512M16这个型号的,需要使用Create Custom Part进行创建,我这里使用的方法是,在MT41K256M16XX-107的基础上,将Row address修改为16即可,选择数据位宽为64bit。

6  配置AXI接口的数据宽度

7  配置输入时钟频率,这个是输入MIG核的频率,IP核内部会自己调用PLL来产生自己的工作时钟,此处设置200MHz

8  设置系统时钟、参考时钟、复位信号的属性

9   引脚选择固定引脚,点击Read XDC/UDF,导入提前准备好的引脚约束文件,引脚约束按照原理图进行约束,导入之后点击Validate

10  直点击next知道最后完成Generate即可生成本次使用的ddr3 ip。

三 :MIG IP核 核心信号解读(AXI4接口版本)

当你在MIG IP核的配置中选择“AXI4”作为用户接口时,IP核会化身为一个AXI从设备,而你的用户逻辑则成为AXI主设备。这意味着,你将使用行业标准的AXI4协议来与DDR3内存通信,这大大简化了与其它支持AXI4的IP核(如PCIE、DMA控制器等)的集成。

AXI4协议的核心是通道架构握手机制。我们将信号组按照通道进行划分。

1. 全局信号与初始化状态

  • ui_clk (输出)

    • 功能:所有AXI4信号都必须与此时钟同步。

  • ui_clk_sync_rst (输出)

    • 功能:与ui_clk同步的复位信号,高有效。用于复位你的AXI主控逻辑。

  • init_calib_complete (输出)

    • 功能生命线信号。在DDR3初始化校准完成之前,AXI总线上的任何事务都会被忽略。你的设计必须等待此信号拉高。

2. 写地址通道 - 发起一次写操作的“目的地”

主设备通过此通道告诉从设备“我要往哪里写”。

  • S_AXI_AWID (输入)

    • 功能:写地址ID,用于区分多个同时进行的事务。在简单应用中可设固定值。

  • S_AXI_AWADDR (输入)

    • 功能起始字节地址。这是与原生接口的关键区别之一,AXI使用字节寻址

  • S_AXI_AWLEN (输入)

    • 功能:突发传输的长度。AWLEN = N 表示本次突发传输 N+1 个数据周期。

  • S_AXI_AWSIZE (输入)

    • 功能:每次传输的字节数。例如,3‘b101 表示32字节(256bit),必须与你的数据位宽匹配。

  • S_AXI_AWBURST (输入)

    • 功能:突发类型。通常使用 2‘b01(INCR,递增模式)。

  • S_AXI_AWVALID (输入)

    • 功能:主设备信号,表示地址和控制信息有效。

  • S_AXI_AWREADY (输出)

    • 功能:从设备信号,表示已准备好接收地址信息。

握手: 一次成功的地址传输发生在 S_AXI_AWVALID 和 S_AXI_AWREADY 同时为高的时钟上升沿。

3. 写数据通道 - 输送要写入的“货物”

  • S_AXI_WDATA (输入)

    • 功能:写数据。

  • S_AXI_WSTRB (输入)

    • 功能:字节选通信号,用于指定WDATA的哪些字节是有效的。WSTRB[n] 对应 WDATA[(8*n)+7 : (8*n)]

  • S_AXI_WLAST (输入)

    • 功能必须拉高,以指示这是本次突发传输的最后一个数据。

  • S_AXI_WVALID (输入)

    • 功能:主设备信号,表示写数据和WLAST有效。

  • S_AXI_WREADY (输出)

    • 功能:从设备信号,表示已准备好接收数据。

握手: 一次成功的数据传输发生在 S_AXI_WVALID 和 S_AXI_WREADY 同时为高的时钟上升沿。

4. 写响应通道 - 确认“货物”已送达

  • S_AXI_BID (输出)

    • 功能:响应ID,与写地址的AWID对应。

  • S_AXI_BRESP (输出)

    • 功能:写事务状态。2‘b00(OKAY)表示成功。

  • S_AXI_BVALID (输出)

    • 功能:从设备信号,表示写响应信息有效。

  • S_AXI_BREADY (输入)

    • 功能:主设备信号,表示已准备好接收响应。

握手: 一次成功的响应接收发生在 S_AXI_BVALID 和 S_AXI_BREADY 同时为高的时钟上升沿。

5. 读地址通道 - 发起一次读操作

  • S_AXI_ARIDS_AXI_ARADDRS_AXI_ARLENS_AXI_ARSIZES_AXI_ARBURST

    • 功能:与写地址通道类似,用于发起读请求。

  • S_AXI_ARVALID (输入)

  • S_AXI_ARREADY (输出)

    • 功能:握手信号,逻辑与写地址通道完全相同。

6. 读数据通道 - 返回请求的“数据”

  • S_AXI_RID (输出)

    • 功能:读数据ID,与读地址的ARID对应。

  • S_AXI_RDATA (输出)

    • 功能:读出的数据。

  • S_AXI_RRESP (输出)

    • 功能:读事务状态。2’b00(OKAY)表示成功。

  • S_AXI_RLAST (输出)

    • 功能:从设备信号,指示这是本次突发传输的最后一个数据。

  • S_AXI_RVALID (输出)

    • 功能:从设备信号,表示读数据有效。

  • S_AXI_RREADY (输入)

    • 功能:主设备信号,表示已准备好接收数据。

握手: 一次成功的读数据接收发生在 S_AXI_RVALID 和 S_AXI_RREADY 同时为高的时钟上升沿。


【精髓】:AXI4接口的优势与设计要点

  1. 去耦合与高效率

    与原生接口不同,AXI4的五个通道是独立的。这意味着你可以先发送读地址,然后在数据返回之前,立刻发送下一个写地址。这种乱序处理能力极大地提高了总线利用率和系统并行性。
  2. 简化设计

    你不再需要像处理原生接口那样,亲自管理 app_rdy 和 app_wdf_rdy 之间复杂的时序关系。AXI4的 VALID/READY 握手机制在每个通道内都是统一的,逻辑更清晰。
  3. 突发传输是核心

    AXI4是为突发传输而设计的。ARLEN/AWLEN 信号允许你通过一次地址握手,完成大量数据的连续传输。这对于发挥DDR3的带宽性能至关重要。

总结:

本节我们完成了IP核的创建,“现在内存已经准备好,但我们还不知道如何与它正确通信,更不知道它的实际性能如何。

在下一节FPGA DDR3实战(二):手把手教你仿真DDR3(MIG IP核),我们将利用这些知识,向DDR3写入一个测试Pattern并读出验证,大家点赞关注多多互动!谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGA_小田老师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值