前言
本文总结 FPGA DDR4 内存读写控制经验,重点讲解基础内容:DDR4 控制 IP 核 MIG 的控制信号。
主要参考内容:
- 【正点原子】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 核为例,综合布线后约使用 7500 个 LUT 和 9000 个 Register 资源。普通用户只需操作 MIG 提供的用户接口即可。


Burst Length 概念: 在 Memory Option 中,Burst Length 参数固定为 8。DDR4 与常用 RAM 不同,给定地址 ADDR 并启动传输后,会同时传送 Burst Length * Data Width 大小的数据。实际传输地址范围为 ADDR ~ ADDR + Burst Length - 1。 例如:ADDR=0,读指令发出后,在 8*16=128 位的数据总线上得到 0~7 这些地址单元的数据。因此顺序读写时,每次给控制器的地址以 8 为步进。
IP 核控制信号
PG150 文档给出了用户接口的所有控制信号,主要分为四类:全局接口、命令接口、写接口、读接口。
全局接口

三个全局接口分别代表:
- 用户时钟
- 校准完成指示
- 与用户时钟同步的复位信号
注意:所有操作用户接口的逻辑都必须等到校准完成信号拉高后才能进行。
命令接口
命令接口用来指示 DDR 能够接受读取或者写入命令以及对应的命令类型。

操作流程:
- 设置
app_cmd(如读命令设为 3'b001)。 - 等待
app_rdy信号拉高,表示 DDR 能接受读写命令。 - 拉高
app_en并同时给出要读的地址app_addr。 - 若干周期后,数据连同数据有效信号一起出现。
不同 app_cmd 值代表的命令如下:





描述给出写命令的前一个到后两个周期给出写控制信号及数据。


