前言
本文总结 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 不同值代表的命令如下:










