跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

FPGA 读写 DDR4 (一):MIG IP 核控制信号

介绍 FPGA 中 DDR4 读写控制的 MIG IP 核基础。涵盖 IP 核创建界面参数(如 Burst Length)、全局接口、命令接口、写接口及读接口的信号定义与时序逻辑。重点解析 app_cmd、app_rdy、app_wdf_data 等关键信号的使用方法及背靠背与非背靠背写入时序,为后续跨时钟域数据传输设计奠定基础。

游戏玩家发布于 2026/4/6更新于 2026/10/19100 浏览
FPGA 读写 DDR4 (一):MIG IP 核控制信号

前言

本文总结 FPGA DDR4 读写控制的基础内容,重点讲解 MIG IP 核的控制信号。

参考资料:Xilinx PG150 文档及 UltraScale Memory IP 指南。

MIG IP 核控制信号

IP 核创建界面

MIG IP 核(Memory Interface Generator)是用户与 DDR4 进行沟通的桥梁。直接编写 DDR4 代码复杂且性能难以保证,使用 Xilinx 提供的 MIG IP 核可大幅降低开发难度。综合布线后查看资源利用率,MIG IP 核使用了约 7500 个 LUT 和 9000 个 Register 资源,足以体现其复杂性。对于普通用户,操作 MIG 提供的用户接口即可满足需求。

文章配图

文章配图

这里需要解释一个重要的概念:Burst Length。在所示的 DDR4 芯片中,Burst Length 固定为 8。DDR4 与 FPGA 常用 RAM 的不同之处在于,给定地址 ADDR 并启动传输后,DDR4 会将 Burst Length * Data Width 大小的数据一起传送到数据总线上。实际传输的数据地址范围为 ADDR ~ ADDR + Burst Length - 1。例如,若给出地址 ADDR=0 并执行读指令,在 8 * 16 = 128 位的数据总线上将得到 0~7 这些地址单元上的数据。因此,无论是读还是写,顺序操作时每次给控制器的地址都以 8 为步进,这在后续程序编写中非常重要。

IP 核控制信号

接下来看 MIG 的控制信号及相关时序。PG150 文档给出了用户接口的所有控制信号。

文章配图

文章配图

图中标黄的信号为主要关注对象,可分为四类:全局接口、命令接口、写接口、读接口。

全局接口

文章配图

三个全局接口分别代表用户时钟、校准完成指示以及与用户时钟同步的复位信号。注意,所有用户接口的逻辑操作都必须等到校准完成信号拉高后才能进行。

命令接口

命令接口用来指示 DDR 能够接受读取或写入命令以及对应的命令类型。假设要读取或写入一组数据,首先需给命令接口发送命令。以读命令为例,将 app_cmd 设为 3'b001,然后等待 app_rdy 信号拉高,表示 DDR 能够接受读写命令。随后拉高 app_en 并同时给出要读的地址 app_addr,则在若干周期后,数据连同数据有效信号一起出现。

app_cmd 不同值代表的命令如下:

文章配图

一次成功的命令传输时序如下图所示:

文章配图

注意图中 app_en 拉高了三个周期,实际上只有第三个周期的最后一个周期命令才被写入到 IP 核,因为此时 app_rdy 才被拉高。图中的 app_autoprecharge 信号通常不需要操作,除非在 IP 核配置中额外设置启用该功能。该信号用于在同一 Bank 中进行读写时提高效率,与 DDR 颗粒结构有关。

文章配图

写接口

第三类接口是写接口:

文章配图

app_wdf_data 为写数据总线。app_wdf_rdy 信号相当于写操作的 app_rdy,只有当 app_rdy 和 app_wdf_rdy 同时为高时,写命令才有效。app_wdf_wren 拉高表示当前数据总线上的数据是要写入的数据。app_wdf_mask 是写数据的屏蔽位,被写入为 1 的字节将不会被写入到 DDR 中。例如,位宽 16、Burst Length 8 的 DDR,一次传输 16*8=128 位即 16 字节,mask 大小为 16bit。app_wdf_end 表示当前时钟周期是写入数据的最后一周期。若分频比为 1:4,每个用户时钟周期进行一次完整 Burst 传输,则 app_wdf_end 与 app_wdf_wren 一起拉高。实际应用时可将两者连接。

写数据的两种时序如下:

文章配图

第一种为非背靠背(单次写入)时序。描述的是给出写命令的前一到两个周期给出写控制信号及数据。app_wdf_wren 和 app_wdf_en 一同拉高时,该周期数据总线上的数据才会被写入;app_en 被拉高的那个周期地址和控制命令才会被写入。

文章配图

第二种为背靠背写入时序。与非背靠背写入的区别在于连续性,app_en 信号和 app_wdf_wren 以及 app_wdf_end 信号是对齐的。只要将这些信号在 app_rdy 以及 app_wdf_rdy 为高时一起拉高即可实现写入。

读接口

第四类接口是读接口:

文章配图

读接口无需额外的控制接口,只需操作命令接口即可实现。DDR 读数据会有较大延迟,给出读指令后,需多个时钟周期数据和数据有效标识才会出现。data_valid 会和有效的读出数据一起出现。

两种读操作时序如下:

文章配图

除这四组接口外,还有一些额外用户接口未使用,如 PG150 描述的 _ref 或_req 信号。需注意 app_hi_pri 信号,PG150 中要求保留且置为 0。

总结

MIG 的操作时序并不复杂,但在代码编写时注意点较多。整个 MIG IP 核的用户逻辑工作在高时钟下,例如 DDR 工作时钟 1200MHz,用户时钟 300MHz。若对 ADC 进行数据采集并存入 DDR,FIFO 是必不可少的。为了实现跨时钟域的数据传输,FIFO 的复杂操作将是遇到的最大困难。

目录

  1. 前言
  2. MIG IP 核控制信号
  3. IP 核创建界面
  4. IP 核控制信号
  5. 全局接口
  6. 命令接口
  7. 写接口
  8. 读接口
  9. 总结

更多推荐文章

查看全部
  • macOS 15 Sequoia 解除 Gatekeeper 限制
  • SkyWalking 全链路监控实战:集成 Spring Cloud、Dubbo、RocketMQ 与 ShardingSphere
  • Windows 本地运行 DeepSeek:Docker + Ollama + Open WebUI 三步部署
  • 基于 Termux 与 AstrBot 在安卓手机部署 QQ 机器人方案
  • GPT-4o 多模态交互与端侧应用玩法解析
  • Python 标准 GUI 库 Tkinter 开发指南
  • Spring Web MVC 核心概念与实战应用
  • 无人机航拍图像处理:目标跟踪与场景重建
  • Z-Image 模型采样器选择建议:不同算法对结果的影响
  • 注意力机制与 Transformer 模型实战
  • OpenClaw 搭配本地千问模型实现电脑 AI 助理
  • 学习 Python 对软件测试有哪些优势?
  • AI 助力六花直装 V8.3.9 自动化开发与测试
  • LangChain 实战:URL 加载与网页内容爬虫封装
  • 多语言 Prompt 实践:中文、英文、日文混写技巧
  • Android项目框架搭建与模块化设计
  • Stable Diffusion 文生图基础详解与参数配置
  • Python OCC 三维建模实战与 CAD 应用开发
  • Python vs C:真正影响你选择的几个点
  • 基于Python的豆瓣电影数据可视化分析设计与实现

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online