芯路恒电子技术论坛

 找回密码
 立即注册

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

热搜: 合集

SU200P DDR4 读写验证实验说明

配套工程:ddr4_1_ex 工程环境:Vivado 2026.1 目标器件:xcsu200p-sbva1024-2-e

1. 实验目的

本实验使用 SU200P 开发板上的 FPGA 和板载 DDR4 存储器完成以下内容:

  1. 了解 Vivado DDR4 IP 的主要配置参数;
  2. 认识 DDR4 IP 官方例程的组成和工作流程;
  3. 通过行为级仿真观察 DDR4 初始化及 AXI 自动读写过程;
  4. 将例程生成的 PDI 文件下载到开发板;
  5. 通过板载 LED 和 ILA 判断 DDR4 是否完成校准、读写数据是否正确。

2. 工程来源与实验定位

2.1 工程来源

ddr4_1_ex 不是从空白 RTL 工程开始编写的 DDR4 控制器,而是在 Vivado 中完成 ddr4_1 IP 配置后,通过 Open IP Example Design 导出的官方示例工程。

Vivado 会根据 IP 配置自动生成控制器、例程顶层、AXI 流量发生器、仿真测试平台及 DDR4 存储器模型。工程随后结合 SU200P 开发板完成管脚约束和板级实现。

该工程的基本生成流程如下: ip_example_flow

2.2 设计目标

本实验的重点不是重新实现 DDR4 协议,而是:

  1. 理解DDR4 IP 中与开发板硬件相关的关键配置;
  2. 理解官方例程如何启动 DDR4 控制器并产生 AXI 测试事务;
  3. 掌握使用仿真、LED 和 ILA 判断 DDR4 工作状态的方法;
  4. 为后续使用自定义 AXI 主设备访问 DDR4 做准备。

工程目标器件为 xcsu200p-sbva1024-2-e,下载前应确认实际 FPGA 器件与工程设置一致。

3. IP 配置

DDR4 MIG IP 位于用户逻辑与板载存储器之间,因此配置时需要同时回答三个问题:板上连接了什么型号、何种组织方式的 DDR4 器件;控制器以什么时钟和速率驱动该器件;用户逻辑通过怎样的 AXI 接口访问存储空间。下面按照这三层关系说明当前工程的配置。

3.1 Basic:确定工作速率和参考时钟

DDR4 IP基础时钟配置

<kbd>DDR4 IP基础时钟配置</kbd>

本工程选择 Controller and physical layer,由 IP 同时生成 DDR4 控制器和负责引脚时序的物理层。用户逻辑不直接控制 DDR4 的命令、地址和 DQ/DQS 信号,而是通过 IP 提供的 AXI4 接口完成读写。

存储器接口周期设置为 833 ps,对应约 1200 MHz 的 DDR4 时钟。DDR4 在时钟上、下沿传输数据,因此等效数据速率约为 2400 MT/s。PHY 与控制器采用 4:1 时钟比,用户侧时钟约为 300 MHz,使控制器可以用较低的内部时钟并行处理高速存储器数据。

参考输入时钟周期设置为 3749 ps,即约 266.74 MHz。这一数值来自开发板实际提供的差分参考时钟,而不是任意选择的参数。工程约束将 c0_sys_clk_p/n 连接到 FPGA 管脚 H28 和 G28,仿真测试平台也以相同周期产生参考时钟。只有参考时钟频率、管脚连接和 IP 设置相互一致,物理层才具备完成初始化和校准的条件。

3.2 Basic:匹配板载存储器

DDR4 IP存储器配置

<kbd>DDR4 IP存储器配置</kbd>

时钟和接口速率确定后,还需要告诉控制器实际连接的存储器类型。Configuration 选择 Components,表示 FPGA 直接连接开发板上的离散 DDR4 芯片,而不是插接式内存条。Memory Part 选择 MT40A512M16TB-062E,与板载器件一致。该器件为 8 Gb、×16、单 Rank 组织,对应 1 GB 存储容量。Vivado 会根据器件型号取得行列地址、Bank 组织和主要时序要求,因此这里应以原理图和板载芯片型号为准。

物理数据宽度设置为 16 bit,对应芯片的 ×16 数据接口。DDR4 采用 BL8 突发时,一次完整突发包含 16 bit × 8 = 128 bit 数据,这正好可以整理成用户侧的一拍 128 bit AXI 数据。由此,存储器的物理组织与后续 AXI 位宽形成了自然对应关系。

工程采用单 Rank、1.2 V I/O 电压和 DM_NO_DBI 数据掩码方式,并按 ROW_COLUMN_BANK 组织物理地址。ECC 保持关闭,因为当前板级接口没有额外的 ECC 数据位;本实验通过官方例程的写入、读回和数据比较判断传输是否正确。

截图中的 CAS Latency 17 和 CAS Write Latency 12 是 Vivado 根据所选器件及 833 ps 接口周期得到的配套参数。器件型号或工作速率发生变化时,应由 IP 配置工具重新计算整组时序参数,不宜孤立修改某一个延迟值。

3.3 AXI Options:定义用户访问接口

DDR4 IP的AXI接口配置

<kbd>DDR4 IP的AXI接口配置</kbd>

前两部分决定了控制器如何连接并驱动 DDR4,本页则决定用户逻辑如何使用这片存储器。AXI 数据宽度设置为 128 bit,与 ×16 DDR4 的一次 BL8 突发数据量一致;地址宽度设置为 30 bit,按字节寻址可覆盖 2^30 byte,也就是完整的 1 GB 存储空间。ID 宽度为 4 bit,可同时区分不同的 AXI 事务,官方例程中的流量发生器便通过这些通道发起写入、读回和数据比较。

仲裁方式选择 RD_PRI_REG,使读请求在控制器内部采用带寄存的优先处理方式。AXI Narrow Burst 未启用,因此例程按照完整的 128 bit 数据宽度发起访问。后续若用自定义逻辑替换官方流量发生器,应保持地址范围、数据宽度和突发格式兼容;接口宽度不一致时,需要在中间加入 AXI 数据宽度转换模块。

3.4 关键参数汇总

配置项当前配置作用
Controller TypeDDR4 SDRAM生成完整的 DDR4 控制器和物理接口
Memory TypeComponents对接开发板上的离散 DDR4 芯片
Memory PartMT40A512M16TB-062E与板载 DDR4 器件参数对应
DDR4 Data Width16 bitDDR4 物理数据总线宽度
DDR4 Time Period833 ps对应约 1200 MHz 存储器时钟、约 2400 MT/s 数据速率
Input Clock Period3749 ps差分参考时钟约为 266.74 MHz
AXI Data Width128 bit用户侧每拍 AXI 数据宽度
AXI Address Width30 bit用户侧 AXI 地址宽度
AXI ID Width4 bit区分不同 AXI 事务 ID
Arbitration SchemeRD_PRI_REG读请求优先并经过寄存处理
Burst Length8DDR4 突发长度
ECCDisabled本实验不进行 ECC 校验

这些参数并不是彼此独立的选项。器件型号和 16 bit 物理位宽来自板载 DDR4,3749 ps 输入周期来自开发板参考时钟,833 ps 接口周期决定目标数据速率,而 128 bit AXI 位宽承接一次 BL8 突发的数据量。重新配置 IP 时,建议按照“器件型号与位宽—参考时钟—目标速率—AXI 接口”的顺序核对,避免某一项修改后破坏整条数据通路的匹配关系。

完成上述配置后,DDR4 IP 已经具备与板载存储器通信的基本条件,但它本身还不能回答“初始化是否成功、AXI 读写是否正确”这些实验问题。控制器还需要外部时钟和复位,需要 AXI 主设备发起访问,也需要比较逻辑判断读回数据。因此,下一步需要将配置好的控制器放入一个完整的验证环境中。

4. 官方例程结构与工作原理

Vivado 的 Open IP Example Design 正是这一验证环境。它以第 3 节配置的 DDR4 IP 为核心,在外围加入时钟与复位处理、AXI 流量发生器、数据比较逻辑、状态输出以及仿真所需的存储器模型。前面确定的器件、时钟、速率和 AXI 参数由此转化为实际的初始化、写入和读回过程。下面先认识例程中的主要文件,再沿数据通路说明各模块如何配合工作。

4.1 主要文件

文件来源作用
ddr4_1_ex.xprVivado 例程工程工程入口
imports/example_top.sv官方例程综合顶层,连接 DDR4 控制器和流量发生器
imports/sim_tb_top.sv官方例程行为级仿真测试平台
DDR4 仿真模型IP 自动生成在仿真中模拟外部 DDR4 器件
imports/example_design.xdc工程约束约束参考时钟、复位、LED 和 DDR4 接口
ddr4_1_ex.runs/impl_1/example_top.pdiVivado 实现结果当前工程的下载文件
example_top.ltxVivado 调试文件ILA 探针信息

自动生成的文件通常不建议直接修改。若需要改变存储器型号、位宽或工作速率,应回到 DDR4 IP 配置界面修改参数,再重新生成 Output Products 和 Example Design。

4.2 总体结构

工程以 example_top.sv 为顶层。DDR4 控制器负责初始化、校准和物理接口控制;AXI 流量发生器在初始化完成后执行自动写入、读回和数据比较。 example_architecture

4.3 初始化与自动读写

上电或复位释放后,DDR4 控制器先完成内部 PLL 锁定、延迟校准和读写训练。初始化成功后,c0_init_calib_complete 由 0 变为 1。

AXI 流量发生器检测到该信号后开始工作,会向 DDR4 写入测试数据,再从相同地址读回并比较,并根据读写比较过程生成数据不匹配、AXI 写错误和 AXI 读错误信号。顶层再将这些信号合并为 c0_data_compare_error

信号板上指示丝印正常状态含义
c0_init_calib_completeLED2,管脚 C18Q27有效DDR4 初始化与校准完成
c0_data_compare_errorLED1,管脚 B17Q26无效未发现读写或数据比较错误

系统复位 sys_rst 连接到管脚 E24。复位有效时控制器和测试逻辑重新初始化,释放复位后需要等待校准完成。

4.4 ILA 在线调试

例程包含 ILA 调试逻辑,可在 Hardware Manager 中观察初始化状态、比较错误及相关数据。使用 ILA 时,应同时加载配套的example_top.ltx

5. 仿真验证

5.1 运行仿真

  1. 启动 Vivado 2026.1;
  2. 打开 ddr4_1_ex.xpr
  3. 选择 Simulation → Run Simulation → Run Behavioral Simulation
  4. 仿真窗口打开后选择 Run All,或将运行时间设置为不少于 25 us
  5. 观察复位、初始化完成、AXI 测试状态和数据比较错误信号。

默认仿真脚本只运行 1000 ns,通常不足以完成 DDR4 初始化,因此不应仅根据默认时间内的波形判断例程失败。

5.2 波形分析

5.2.1 初始化与校准

DDR4初始化与校准波形

<kbd>DDR4初始化与校准波形</kbd>

仿真开始后,测试平台提供约 266.74 MHz 的差分参考时钟,DDR4 IP 随后生成用户侧时钟并完成内部复位。图中 c0_ddr4_ui_clk_sync_rst 解除后,控制器开始执行存储器初始化和物理层校准;在约 3.21 µs,c0_init_calib_complete 由 0 变为 1,表示时钟、延迟和读写采样相关的校准流程已经完成。此后 DDR4 控制器可以接受用户侧 AXI 请求。

时间跨度较大时,c0_sys_clk_p/nc0_ddr4_ui_clk 会显示为连续色带,这是高频时钟在当前缩放比例下的正常显示。初始化前后地址和命令信号出现变化,也属于 DDR4 校准过程中产生的正常活动。

5.2.2 连续 AXI 读写

DDR4 AXI流量发生器连续读写波形

<kbd>DDR4 AXI流量发生器连续读写波形</kbd>

c0_init_calib_complete 拉高后,官方流量发生器先执行 Boot Mode,再进入 PRBS Mode。它会按照预设及伪随机指令连续改变访问地址、突发长度和突发类型,因此波形中的写入和读取不会在完成一笔事务后停止,而是持续到全部测试指令执行结束。

写通路中,axi_awvalid 周期性拉高并与 axi_awready 完成写地址握手;随后 axi_wvalid 发送数据,axi_wlast 标记每个突发的最后一拍,axi_bvalid 返回写响应。读通路中的 axi_arvalidaxi_araddraxi_arlen 持续变化,说明流量发生器也在不断发起不同地址和长度的读取请求。图中 axi_bresp 保持为 0,表示可见的写事务未返回 AXI 错误响应。

这张全程波形的用途是展示“初始化完成后持续存在读写流量”,信号跳变密集是正常现象。若需要核对某一笔事务,用户可在 Vivado 中进一步缩放,分别检查 VALIDREADY 的握手以及 WLASTRLAST

5.2.3 仿真结果

流量发生器在读回数据时同步执行比较。正常情况下,数据失配、写响应错误和读响应错误均不会置位,汇总信号 c0_data_compare_error 应始终保持为 0。本次完整仿真在约 23.17 µs 结束,控制台输出:

ALL AXI TRANSACTIONS COMPLETE
TEST PASSED
Test Completed Successfully

上述结果表明,DDR4 初始化与校准成功,AXI 写入、读回和数据比较流程均已完成,仿真模型未检测到数据不一致或总线响应错误。

6. 板级验证

6.1 硬件连接

  1. 准备 SU200P 开发板、配套电源和 USB-JTAG 下载线;
  2. DDR4 为板载器件,不需要连接外部存储器或杜邦线;
  3. 在开发板断电状态下连接 USB-JTAG;
  4. 接入开发板电源并上电;

Board_connect

<kbd>硬件连接图</kbd>

6.2 下载已有 PDI

操作步骤如下:

  1. 在 Vivado 中进入 Open Hardware Manager
  2. 选择 Open Target → Auto Connect
  3. 在识别出的 FPGA 器件上选择 Program Device
  4. 选择工程路径下bit文件夹中的 example_top.pdi
  5. 如需使用 ILA,可选择配套的example_top.ltx
  6. 单击 Program 完成下载。

6.3 下载后的正常现象

完成 PDI 下载后,等待 DDR4 控制器完成初始化和校准。开发板上的正常现象为 Q27 点亮、Q26 熄灭

DDR4板级验证LED状态

<kbd>DDR4板级验证结果:Q27点亮、Q26熄灭</kbd>

Q27 连接 FPGA 管脚 C18,对应 c0_init_calib_complete。Q27 点亮表明该信号已经有效,DDR4 控制器完成了初始化和物理层校准。Q26 连接 FPGA 管脚 B17,对应 c0_data_compare_error;该信号由数据不匹配、AXI 写响应错误和 AXI 读响应错误三类状态合并产生。Q26 保持熄灭,说明自动读写过程中未检测到上述错误。

因此,图中的 LED 组合与仿真结果相互对应:Q27 点亮确认控制器已经进入可用状态,Q26 熄灭确认流量发生器的写入、读回和数据比较未报告错误。若执行系统复位,Q27 会在重新校准期间暂时熄灭,校准成功后再次点亮;Q26 在正常运行期间应持续熄灭。需要进一步查看读写事务时,可加载与当前 PDI 同次实现生成的 example_top.ltx,通过 ILA 观察内部状态。

7. 总结与扩展

本实验以 Vivado DDR4 IP 官方例程为基础,完成了 IP 配置识别、例程结构分析、行为仿真和板级下载验证。仿真中,控制器完成校准,AXI 流量发生器持续执行写入、读回和比较并最终输出测试通过;板级验证中,Q27 点亮且 Q26 熄灭,进一步表明 DDR4 初始化成功,自动读写未检测到数据比较或 AXI 响应错误。

完成本实验后,可将官方流量发生器替换为自定义 AXI 主设备,进一步设计图像帧缓冲、高速数据采集存储或缓存模块,并使用 ILA 分析不同突发长度和访问模式下的存储器带宽。

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2026-9-22 00:39 , Processed in 0.038713 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部