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

FPGA DDR4 读写控制:MIG IP 核控制信号详解

前言 总结 FPGA DDR4 读写控制中 MIG IP 核的基础控制信号。 主要参考内容:【正点原子】MPSoC-P4 之 FPGA 开发指南_V2.0,[XILINX] pg150-ultrascale-memory-ip-en-us-1.4 MIG IP 核控制信号 IP 核创建界面 MIG IP 核(memory interface generator)是用户与 DDR4 进行沟通的桥…

无尘发布于 2026/4/6更新于 2026/5/2248K 浏览
FPGA DDR4 读写控制:MIG IP 核控制信号详解

前言

本文总结 FPGA DDR4 读写控制中 MIG IP 核的基础控制信号。

主要参考内容:【正点原子】MPSoC-P4 之 FPGA 开发指南_V2.0,[XILINX] pg150-ultrascale-memory-ip-en-us-1.4

MIG IP 核控制信号

IP 核创建界面

MIG IP 核(memory interface generator)是用户与 DDR4 进行沟通的桥梁。如果直接编写 DDR4 代码,内容将非常复杂且性能难以保证。以 XILINX 提供的 MIG IP 核为例,在综合布线后查看 utilization,能发现 MIG IP 核足足使用了约 7500 个 LUT 和 9000 个 register 资源,足以看出其编写的复杂程度。对于普通用户,能够操作 MIG 提供的用户接口即可。

文章配图

文章配图

这里需要解释一个重要的概念,即 memory option 中的 Burst Length 参数。在上图所示的 DDR4 芯片中,其固定了 Burst Length=8。DDR4 速度快且容量高,与 FPGA 中常用的 RAM 不同。当给定地址 ADDR 并启动传输后,DDR4 内存会同时将 Burst LengthData Width 大小的数据一起传送到数据总线上,其真正传输了数据的地址范围也就是 ADDR~ADDR+Burst Length-1。以图中的参数为例,假设给出了地址 ADDR=0 并给出读数据指令,在一段时间后,就会在 816=128 位的数据总线上得到 0~7 这些地址单元上的数据。因此,无论进行写操作还是读操作,假设都是顺序读写,每次给控制器的地址都是以 8 为步进的,这点在后续程序编写中很重要。

IP 核控制信号

接下来开始正式看 MIG 的控制信号以及相关时序。PG150 中给出了用户接口的所有控制信号,如下图:

文章配图

文章配图

图中标黄的信号是主要关注的,大致分为四类:全局接口,命令接口,写接口,读接口。

全局接口

文章配图

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

命令接口

第二类接口是命令接口:

文章配图

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

文章配图

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

文章配图

注意不要被 app_en 拉高了三个周期而迷惑,实际上只有三个周期的最后一个周期命令才被写入到 IP 核,因为此时 app_rdy 才被拉高。另外,图中的 app_autoprecharge 信号被一同拉高可能会让人感到迷惑,实际上使用 IP 时可能根本不会操作这一信号,因为在 IP 核中要额外设置才能使用 app_autoprecharge 这一信号。该信号用于在同一 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 以字节为单位屏蔽,则 mask 大小为 16bit。app_wdf_end 表示的是当前时钟周期是写入数据的最后一周期。对于之前举例的 DDR,其用户时钟与 DDR 时钟分频比为 1:4,代表着每个用户时钟周期都会进行一次完整的 Burst 传输,则 app_wdf_end 实际上和 app_wdf_wren 是一起拉高的。实际应用时将其与 app_wdf_wren 连到一起即可。

写数据的时序如下:

文章配图

第一种时序被称为非背靠背或者单次写入的时序,描述的是给出写命令的前一个到后两个周期在给出写控制信号以及数据,这些数据也能够被写入 DDR。app_wdf_wren 和 app_wdf_en 一同拉高时,该周期数据总线上的数据才是会被写入的数据,而 app_en 被拉高的那个周期地址和控制命令才会被写入。

文章配图

第二种时序被称为背靠背写入时序,与非背靠背写入除了连续性上只有一个不同点,app_en 信号和 app_wdf_wren 以及 app_wdf_end 信号是对齐的。只要将这些信号在 app_rdy 以及 app_wdf_rdy 为高时一起拉高即可实现写入。

读接口

第四类接口是读接口:

文章配图

读接口没有额外的控制接口,只需要操作前面提到的命令接口就能够实现读数据。DDR 读数据会有很大的延迟,在给出读指令后,需要很多个时钟周期数据和数据有效标识才会出现。data_valid 会和有效的读出数据一起出现,和平时操作 RAM 或者 FIFO 一样。两种读操作时序如下图所示:

文章配图

除了这四组接口,还有一些额外的用户接口没有被使用,例如像 PG150 的 130 也就描述了另外一部分_ref 或者_req 信号的其他操作。可能还要多注意的就是 app_hi_pri 这个信号,PG150 中没有详细描述,只是说要保留且置为 0。

总结

MIG 的操作时序并不复杂,但在代码编写时注意点较多。整个 MIG IP 核其用户逻辑工作在一个很高的时钟下,以 DDR IP 核配置为例,DDR 工作时钟 1200Mhz,用户时钟 300Mhz。假设要对一个 100Msps,采样位数 16bit 的 ADC 进行数据采集并存入 DDR,FIFO 在这其中是必不可少的。为了实现这种跨时钟域的数据传输,对于 FIFO 的复杂操作是遇到的最大困难。

目录

  1. 前言
  2. MIG IP 核控制信号
  3. IP 核创建界面
  4. IP 核控制信号
  5. 全局接口
  6. 命令接口
  7. 写接口
  8. 读接口
  9. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 3大核心功能打造智能语音转文字神器:Whisper-WebUI实战手册
  • 基于 Python 和微信小程序的家教管理系统
  • 大模型 API 注册与调用实战:OpenAI、文心一言、通义千问
  • OpenClaw 爆火倒逼低代码 AI 变革:从工具赋能到生态重构
  • 无人机“黑飞”正式入法:2026年1月1日起违规飞行将面临拘留
  • 卷积神经网络 CNN 原理与实战指南
  • 大模型 API 注册与调用实战指南
  • AIGC 电商实战:厘清品牌叙事与商品素材的 AI 应用边界
  • 基于腾讯云 CVM 部署 Clawdbot 并对接 Telegram 机器人
  • Spring Boot 参数配置详解:properties、yml 及外部化配置
  • RAG 技术详解:破解大模型知识、幻觉与安全困境
  • 基于腾讯云 HAI 与 DeepSeek 快速设计个人网页
  • 计算机专业毕业去向:金融科技岗位选择银行还是券商
  • 基于 SpringBoot 的宠物医院预约系统设计与实现
  • Spring Cloud Gateway 内置 Filter 实战:AddRequestHeader 与 RewritePath
  • Java 强转遇到 null 为何报错而不是自动处理?
  • OpenRouter 快速入门:统一接口调用 500+AI 模型
  • Python 生成器详解:定义、使用场景与注意事项
  • Java 从零开始到项目实战的系统学习路线
  • Java在AI时代的崛起:从传统机器学习到AIGC全栈方案

相关免费在线工具

  • 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