DDR4学习笔记 —— 控制器
IP 配置
Basic


| 选项 | 说明 |
|---|---|
| // Mode and Interface | |
| Controller/PHY Mode | 选择例化类型 |
| AXI4 Interface | 使用 AXI4 接口作为控制器的读写接口,默认:Native接口 |
| // Clocking | |
| Memory Device Interface Speed | I/O 采样时钟频率,对应 DDR 数据传输速率的一半 |
| PHY to Controller clock frequency ratio | PHY 时钟与控制器时钟频率比 |
| Reference Input Clock Speed | 提供给 DDR4 控制器的参考时钟 |
| // Controller Options | |
| Enable Custom Parts Data File | 如果 IP 提供的 Memory Part 没有当前使用的型号,则勾选后可自定义 DDR 参数 |
| Custom Parts Data File | 添加自定义的 CSV 配置文件 |
| Configuration | 内存类型,如市场上常见的 DDR 类型是 DIMM |
| Memory Part | DDR 型号 |
| Slot | |
| IO Memory Voltage | 供电电压 |
| Data Width | DDR 的数据位宽 |
| Data Mask and DBI | |
| Memory Address Map | 逻辑地址与物理地址的映射关系,具体描述见 PG150 — 119页 |
| Ordering | |
| // Memory Options | |
| Burst Length | 与所选的DDR器件相关 |
| Cas Latency | 同上 |
| Cas Write Latency | 同上 |
| Clamshell Topology | 同上 |
AXI Options

| 选项 | 说明 |
|---|---|
| Data Width | AXI 接口的数据位宽 |
| Arbitration Scheme | 读写仲裁调度 |
| ID Width | |
| Address Width | AXI 地址位宽 |
| AXI Narrow Burst |
Advanced Clocking

- Reference Input Clock Configuration:选择输入参考时钟的类型,如差分时钟输入
- Additional Clock Outputs:可额外生成4个时钟输出,具体用途还不清楚
Advanced Options

| 选项 | 说明 |
|---|---|
| Debug Signals for control | 生成 Debug 信号 |
| Microblaze MCS ECC | |
| Simulation Mode | |
Native接口
实例化
1 | DDR4_MIG U_DDR4_MIG ( |
| 信号 | 方向 | 说明 |
|---|---|---|
| // 命令通道 | ||
| c0_ddr_app_rdy | 输出 | 命令就绪 |
| c0_ddr_app_en | 输入 | 命令有效,高电平有效 |
| c0_ddr_app_cmd | 输入 | 命令 write:000、read:001、wr_bytes:011 |
| c0_ddr_app_addr | 输入 | 命令地址 |
| // 写数据通道 | ||
| c0_ddr_app_wdf_rdy | 输出 | 写数据就绪 |
| c0_ddr_app_wdf_wren | 输入 | 写数据使能 |
| c0_ddr_app_wdf_end | 输入 | 写数据结束 |
| c0_ddr_app_wdf_mask | 输入 | 写数据掩码。对字节进行操作,高电平数据无效 |
| c0_ddr_app_wdf_data | 输入 | 写数据 |
| // 读数据通道 | ||
| c0_ddr_app_rd_data_vld | 输出 | 读数据有效 |
| c0_ddr_app_rd_data_end | 输出 | 读数据结束 |
| c0_ddr_app_rd_data | 输出 | 读数据 |
写时序

读时序

地址位宽计算
16GB的DDR,64bit的数据位宽
那么因为8n的预取技术,他能做到512bit的数据位宽
那么只需要 16GB / 64bit = 231
只需要31bit的地址
那么实际上,addr[31:3]才是512bit的写入地址,addr[2:0]是组成512bit的8个64bit的地址
使用地址时,每次 + 8
AXI-full 接口
实例化
1 | DDR4_MIG U_DDR4_MIG ( |
| 信号 | 方向 | 说明 |
|---|---|---|
| // 写地址通道 | ||
| axi_awid | 输入 | 写地址 ID |
| axi_awaddr | 输入 | 写地址 |
| axi_awlen | 输入 | 写地址突发长度 传输多少个周期 |
| axi_awsize | 输入 | 写地址突发传输大小 每次传输的字节数 |
| axi_awburst | 输入 | 写地址突发类型 00:Fix、01:Incr、02:Wrap(到达地址上限后回到最低地址) |
| axi_awlock | 输入 | |
| axi_awcache | 输入 | |
| axi_awport | 输入 | |
| axi_awqos | 输入 | |
| axi_awregion | 输入 | |
| axi_awuser | 输入 | 用户自定义信号 |
| axi_awvalid | 输入 | 写地址有效 |
| axi_awready | 输出 | 写地址就绪 |
| // 写数据通道 | ||
| axi_wdata | 输入 | 写数据 |
| axi_wstrb | 输入 | 写数据选通 对字节进行操作,低电平数据无效 |
| axi_wlast | 输入 | 写数据结束 |
| axi_wuser | 输入 | 写数据用户信号 自定义 |
| axi_wvalid | 输入 | 写数据有效 |
| axi_wready | 输出 | 写数据就绪 |
| // 写响应通道 | ||
| axi_bid | 输出 | 写响应 ID |
| axi_bresp | 输出 | 写响应 |
| axi_buser | 输出 | 用户自定义信号 |
| axi_bvalid | 输出 | 写响应有效 |
| axi_bready | 输入 | 写响应就绪 |
| // 读地址通道 | ||
| axi_arid | 输入 | 读地址 ID |
| axi_araddr | 输入 | 读地址 |
| axi_arlen | 输入 | 读地址突发长度 传输多少个周期 |
| axi_arsize | 输入 | 读地址突发传输大小 每次传输多少 Byte |
| axi_arburst | 输入 | 读地址突发类型 Fix、Incr、Wrap(到达地址上限后回到最低地址) |
| axi_arlock | 输入 | |
| axi_arcache | 输入 | |
| axi_arprot | 输入 | |
| axi_arqos | 输入 | |
| axi_arregion | 输入 | |
| axi_aruser | 输入 | 用户自定义信号 |
| axi_arvalid | 输入 | 读地址有效 |
| axi_arready | 输出 | 读地址就绪 |
| // 读数据通道 | ||
| axi_rid | 输出 | 读数据 ID |
| axi_rdata | 输出 | 读数据 |
| axi_rresp | 输出 | |
| axi_rlast | 输出 | 读数据结束 |
| axi_ruser | 输出 | 用户自定义信号 |
| axi_rvalid | 输出 | 读数据有效 |
| axi_rready | 输入 | 读数据就绪 |

读事务

写事务

参考文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 winki's Blog!