SU200P LPDDR5X 双通道读写实验说明
Vivado 工程:
lpddrmc_0_ex工程环境:Vivado 2026.1 目标器件:xcsu200p-sbva1024-2-e
1. 实验目的
本实验使用 SU200P 开发板上的 FPGA 和板载 LPDDR5X 存储器搭建一套自动读写验证系统。完成实验后,读者应能够:
- 理解工程的整体结构以及各主要模块的作用;
- 了解 LPDDRMC IP 中与板载存储器、参考时钟和 AXI 接口有关的核心配置;
- 理解两路 AXI 测试模块写入、读回和比较数据的过程;
- 将工程生成的 PDI 下载到开发板;
- 通过状态信号、VIO 和 System ILA 判断 LPDDR5X 是否正常工作。
2. 工程概述
lpddrmc_0_ex 是一个面向板级验证的 LPDDR5X 读写工程。工程使用 LPDDRMC IP 完成高速存储器的初始化、校准和物理接口控制,在用户侧连接两路自定义 AXI 主机。两路主机分别向不同地址区域写入递增数据,再从相同地址读回并逐拍比较,从而检查存储器和 AXI 数据通路是否正常。
工程的设计主体位于 design_1.bd。Vivado 根据该 Block Design 生成 design_1_wrapper,并将其作为综合顶层。工程主要文件如下:
<samp>工程主要文件</samp>
| 文件 | 作用 |
|---|---|
lpddrmc_0_ex.xpr | Vivado 工程入口 |
lpddrmc_0_ex.srcs/sources_1/bd/design_1/design_1.bd | 系统 Block Design,连接控制器、测试和调试模块 |
lpddrmc_0_ex.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v | Vivado 根据 Block Design 生成的综合顶层 |
imports/dma_test_warpper.v | 产生测试启动脉冲并封装 AXI 主机 |
imports/axi_master.v | 完成 AXI 写入、读回和数据比较 |
pl_run_indicate.v | 产生低速翻转的 PL 运行指示信号 |
imports/example_top.xdc | LPDDR5X、参考时钟、复位和状态输出的管脚约束 |
bit/design_1_wrapper.pdi | 当前工程生成的器件下载文件 |
bit/design_1_wrapper.ltx | 与当前 PDI 配套的 VIO/ILA 探针文件 |
design_1_wrapper.v 和 IP 生成文件由 Vivado 管理。修改系统连接时应编辑 design_1.bd;修改测试过程时应编辑 dma_test_warpper.v 或 axi_master.v;改变存储器参数时应重新配置 LPDDRMC IP。
3. 设计结构与工作原理
3.1 总体结构
SU200P 已经在 FPGA 的 Bank 85 上连接了一颗 32 bit LPDDR5X 存储器,并提供配套的差分参考时钟。本工程的设计目标,就是利用 FPGA 内部的 LPDDRMC 建立这条存储器通路,再通过自定义测试模块验证板载 LPDDR5X 能否完成稳定的写入、读回和数据比较。

<kbd>LPDDR5X双通道读写系统Block Design</kbd>
图中部的 lpddrmc_0 是整个设计的中心。其右侧 LPDDR5 接口最终连接开发板上的存储器,左侧 S0_AXI 和 S1_AXI 则分别连接上方两个 dma_test_warpper。这样,板载 LPDDR5X 被转换成了用户逻辑可以通过 AXI 访问的存储空间。
两个测试通道的结构相同,但访问不同的地址区域。它们先写入连续递增的数据,再从相同地址读回并比较;因此,测试结果同时覆盖 LPDDRMC、FPGA 与存储器之间的物理连接,以及 AXI 读写数据通路。右上方的 System ILA 连接两路 AXI 接口和测试状态信号,用于定位握手停滞、响应错误或数据比较错误;左上方的 VIO 可以分别手动启动两路测试。
图下方是时钟、复位和运行指示部分。LPDDRMC 接收板上的差分参考时钟,并通过 clk_gen_sim_0 为 AXI 测试模块、VIO 和 ILA 提供用户时钟;rst_design_1_0M 综合外部低有效复位与 pll_lock 状态,确保控制器时钟稳定后再释放用户逻辑。pl_run_indicate_0 利用同一用户时钟产生低速运行指示。
ddrmc5_responder_0 是 Vivado 配套的存储器接口响应模块,主要用于存储器接口仿真并将 LPDDR5 接口导出到设计顶层。进行板级验证时,LPDDRMC 实际访问的是开发板上的 LPDDR5X 器件。
3.2 LPDDRMC:连接 AXI 与 LPDDR5X
LPDDRMC 是本工程的核心模块。它面向板载 LPDDR5X 提供 CK、WCK、CA、DQ、DMI、RDQS 和复位等物理信号,并在用户侧提供 S0_AXI 和 S1_AXI 两个 AXI4 从接口。用户逻辑只需按照 AXI 协议读写地址和数据,不需要直接产生 LPDDR5X 的命令时序。
控制器上电后先建立内部时钟并训练存储器接口。pll_lock 表示内部 PLL 已锁定,cal_done 表示初始化和校准完成,cal_error 表示校准过程出现错误。只有时钟稳定、复位释放并且校准完成后,后续 AXI 读写才具备正常工作的条件。
3.3 dma_test_warpper:管理测试启动
工程中放置了两个 dma_test_warpper 实例,分别连接 LPDDRMC 的两路 AXI 接口。该模块负责:
- 复位释放后自动产生第一次测试启动脉冲;
- 在一轮测试完成或发生错误后启动下一轮测试;
- 检测 VIO 输入的 0→1 上升沿,支持手动启动;
- 输出
TXN_START_FLAG、TXN_DONE、ERROR和WR_FRE,供 ILA 观察。
WR_FRE 记录相邻两次启动之间的用户时钟周期数,可用于比较两路测试完成一轮读写所需的时间。
3.4 axi_master:写入、读回并比较
axi_master 是实际产生 AXI 事务的模块。一轮测试按以下顺序进行:
- 从指定基地址开始写入连续递增的 256 bit 数据;
- 等待写阶段完成后,从相同地址发起读取;
- 同步生成期望数据,并与每一拍读回数据比较;
- 检查 AXI 写响应
BRESP和读响应RRESP; - 无异常时产生
TXN_DONE,数据不一致或响应错误时置位ERROR。
两个测试通道使用相同的事务参数,但访问不同的地址区域。
<samp>测试通道</samp>
| 测试通道 | LPDDRMC 接口 | 起始地址 | AXI 数据宽度 | 突发长度 |
|---|---|---|---|---|
dma_test_warpper_0 | S0_AXI | 0x2000_0000 | 256 bit | 128 拍 |
dma_test_warpper_1 | S1_AXI | 0x1000_0000 | 256 bit | 128 拍 |
每拍数据为 32 byte,单个突发传输 128 × 32 = 4096 byte。代码每轮执行 4 个突发,因此每个通道每轮写入并读回 16 KiB 数据。两个通道使用不同起始地址,测试数据不会互相覆盖。
3.5 时钟、复位和状态指示
板上约 266.5 MHz 差分参考时钟从 M5/L5 输入 LPDDRMC。控制器输出的用户时钟驱动两路 AXI 测试模块、VIO、System ILA 和运行指示逻辑,使控制器用户接口与测试逻辑处于同一时钟域。
外部低有效复位连接 FPGA 管脚 F23,对应板上普通按键 SW13。复位模块同时参考外部复位和 pll_lock:SW13 释放且 PLL 锁定后,AXI 测试逻辑才会退出复位。
工程还将以下状态引出到板载 LED。原理图中 LED 信号通过 Q26~Q33 低侧驱动,FPGA 输出高电平时对应 LED 点亮。因此,除了 FPGA 管脚外,还需要根据板上器件编号观察实际现象。
<samp> 状态信号与LED对应关系</samp>
| 信号 | FPGA 管脚 | 板上器件 | 作用 | 正常板级现象 |
|---|---|---|---|---|
cal_done | B17 | Q26(LED1) | LPDDR5X 初始化和校准完成 | Q26 点亮 |
cal_error | C18 | Q27(LED2) | 初始化或校准错误 | Q27 熄灭 |
pll_lock | D17 | Q30(LED5) | LPDDRMC PLL 锁定 | Q30 点亮 |
led_out_0 | D16 | Q31(LED6) | PL 运行指示,周期翻转 | Q31 周期闪烁 |
clk_out_0 | C17 | Q32(LED7) | 导出的 AXI 用户时钟 | Q32 通常呈稳定点亮 |
clk_out_0 是高频时钟,Q32 的闪烁速度远超肉眼分辨能力,因此通常呈现稳定亮度,不能用它判断 AXI 读写是否正确。Q26 点亮、Q27 熄灭和 Q30 点亮只能说明控制器完成了时钟锁定与存储器校准;读写结果还应结合两路测试模块的 TXN_DONE 和 ERROR 判断。
4. LPDDRMC IP 配置
前一节中的模块连接建立了测试流程,而 LPDDRMC 的参数决定这套逻辑能否真正驱动 SU200P 上的 LPDDR5X。配置时首先要匹配板载器件和参考时钟,再根据测试逻辑设置 AXI 接口;这些参数来自硬件连接和设计需求,并不是彼此独立的选项。
4.1 基础配置:控制器类型与参考时钟

<kbd>LPDDRMC基础时钟配置</kbd>
SU200P 的板载时钟电路为 LPDDR5X 提供 CLK95211_OUT2_LPDDR5_SYSCLK_P/N 差分参考时钟,并将其连接到 FPGA 管脚 M5/L5。因此,Controller Type 选择 LPDDR5 SDRAM,输入系统时钟选择差分形式,周期设置为 3752 ps,对应约 266.525 MHz。
在此参考时钟基础上,Memory Clock Period 设置为 1876 ps,即约 533 MHz。配置界面同时给出 WCK 约 2132 MHz 和 4264 Mb/s 的数据传输信息。这组参数共同决定控制器内部 PLL、PHY 和存储器时序;若更换参考时钟或存储器型号,应重新核对整组参数,不能只修改其中一项。
4.2 存储器配置:容量与物理位宽

<kbd>LPDDRMC存储器参数配置</kbd>
原理图中的板载存储器为 U35,型号 MT62F512M32D1DS-023,采用 1×32、共用 CA/CK 的连接方式。与此对应,IP 的 Speed Bin 选择 LPDDR5X-8533,数据宽度设置为 32 bit,界面计算得到总容量为 2 GB。32 bit 物理宽度对应板上的 32 根 DQ,并配套使用 4 组 DMI、RDQS 和 WCK 信号。
组件密度、行地址、Bank、Bank Group 和读写延迟进一步描述 U35 的内部组织和时序。Vivado 会利用这些信息生成初始化寄存器设置和访问时序,因此这里既关系到控制器能否完成校准,也关系到后续读写能否落到正确的存储单元。
LPDDR Address Mapping 页面保持 Vivado 默认的 ROW_BANK_COLUMN 映射即可,本实验不需要在该页面进行额外配置。
4.3 AXI 配置:为两路测试模块提供访问入口

<kbd>LPDDRMC AXI接口配置</kbd>
前面的配置解决了 LPDDRMC 如何匹配板载存储器,本页则决定测试逻辑如何使用控制器。工程同时启用 AXI-0 和 AXI-1,分别形成 S0_AXI 和 S1_AXI 接口,两路数据宽度均为 256 bit。这个宽度与两个 dma_test_warpper/axi_master 实例的 C_M_AXI_DATA_WIDTH 一致,所以测试数据可以直接通过接口传输,无需额外的数据宽度转换模块。
两路 AXI 接口共享同一个 LPDDR5X 控制器和存储空间。它们并不代表两片独立存储器,而是为两个用户主机提供独立的访问入口,具体访问顺序由 LPDDRMC 在内部调度。
核心配置汇总如下。
<samp>LPDDRMC核心配置</samp>
| 配置项 | 当前值 | 在本工程中的作用 |
|---|---|---|
| Controller Type | LPDDR5 SDRAM | 生成 LPDDR5/LPDDR5X 控制器和 PHY |
| Speed Bin | LPDDR5X-8533 | 描述目标器件的速率等级 |
| Physical Data Width | 32 bit | 匹配板载存储器的 DQ 宽度 |
| Memory Size | 2 GB | 定义控制器管理的存储空间 |
| Memory Clock Period | 1876 ps | 设置控制器存储器时钟参数 |
| Input System Clock Period | 3752 ps | 匹配约 266.525 MHz 差分参考时钟 |
| Address Mapping | 默认 ROW_BANK_COLUMN | 保持默认值,无需手动配置 |
| AXI Ports | S0_AXI、S1_AXI | 连接两路自定义测试主机 |
| AXI Data Width | 256 bit | 匹配 axi_master 的数据宽度 |
至此,LPDDRMC 的硬件侧和用户侧均与工程匹配。接下来只需将生成结果下载到开发板,并观察校准状态和两路自动读写结果。
5. 板级验证
5.1 实验准备与硬件连接
烧录验证之前,需要准备 SU200P 开发板、配套电源、JTAG 下载器。操作步骤如下:
- 保持开发板断电,连接 JTAG 下载器;
- 确认下载线方向正确;
- 连接板卡电源并上电;
- 确认普通按键 SW13 未被按下,使低有效复位保持释放。

<kbd>SU200P DDR5 实验硬件连接</kbd>
图中开发板已经连接电源和 JTAG 下载线,板载 LPDDR5X 不需要额外接线。完成连接后,应先确认电源和下载器工作正常,再打开 Hardware Manager 进行器件下载。
5.2 打开工程并下载 PDI
以下路径均以 SU200P 工作目录为基准。打开工程:
lpddrmc_0_ex/lpddrmc_0_ex.xpr
实验发布用的下载文件统一放在工程的 bit 文件夹中:
lpddrmc_0_ex/bit/design_1_wrapper.pdi
lpddrmc_0_ex/bit/design_1_wrapper.ltx
在 Vivado 中按以下步骤操作:
- 选择 Open Hardware Manager;
- 选择 Open Target → Auto Connect;
- 识别到 FPGA 后选择 Program Device;
- 从工程的
bit文件夹加载design_1_wrapper.pdi; - 需要使用 VIO 和 System ILA 时,同时加载
bit文件夹中的design_1_wrapper.ltx; - 单击 Program,等待下载完成。
bit 文件夹中的 PDI 和 LTX 为本实验对外提供的配套文件,板级验证时应直接使用这组文件。工程根目录中的 backup_8533_* 是备份结果,lpddrmc_0_ex.runs/impl_1 则是 Vivado 的实现输出目录,均不作为实验文档中的烧录入口。使用在线调试功能时,PDI 与 LTX 必须来自同一次实现。
5.3 先检查控制器初始化

<kbd>Q31 点亮时的 DDR5 状态 LED</kbd>

<kbd>Q31 熄灭时的 DDR5 状态 LED</kbd>
下载完成后,先不要急于判断 AXI 数据是否正确,应先确认 LPDDRMC 已具备工作条件:
pll_lock = 1:内部 PLL 已锁定;cal_done = 1:LPDDR5X 初始化和校准完成;cal_error = 0:校准过程中没有检测到错误;led_out_0周期变化:用户时钟和 PL 运行指示逻辑正在工作。
对应的板上现象应为:Q30 点亮、Q26 点亮、Q27 熄灭,Q31 周期闪烁;Q32 因连接高频用户时钟,通常呈稳定点亮状态。
两张实测照片记录了运行过程中的不同瞬间。Q26、Q30 和 Q32 在两张照片中均保持点亮,分别表明 LPDDR5X 初始化与校准完成、LPDDRMC PLL 已锁定以及 AXI 用户时钟正在输出;Q27 保持熄灭,说明控制器没有报告校准错误。Q31 在第一张照片中点亮、在第二张照片中熄灭,证明 pl_run_indicate 正在周期翻转,用户逻辑并未停滞。
因此,板载 LED 已经确认 LPDDRMC 具备正常工作的时钟和校准条件。不过,LED 无法证明写入数据与读回数据完全一致,仍需结合 VIO 和 System ILA 检查两路自动读写状态。
若 cal_done 始终不置位,应先检查参考时钟、复位、IP 存储器参数和 LPDDR5X 管脚约束。控制器尚未完成校准时,继续分析 AXI 事务没有实际意义。
5.4 使用 VIO 和 System ILA 检查自动读写

<kbd>单路 AXI 自动读写的 System ILA 实测波形</kbd>
两路测试模块在复位释放后会自动运行,因此通常不需要手动启动。建议按以下步骤检查:
- 在 Hardware Manager 中确认 VIO 和 System ILA 均已识别;
- 在 ILA 中加入两路
TXN_START_FLAG、TXN_DONE、ERROR和必要的 AXI 信号; - 以某一路
TXN_START_FLAG上升沿作为触发条件; - 运行触发并捕获一轮写入、读回和比较过程;
- 确认 AXI 的
VALID与READY能够完成握手; - 确认
TXN_DONE周期性出现,两路ERROR始终为 0。
实测波形中,slot_0 和 slot_1 均出现多个 Active 区间,写数据通道和读数据通道可以观察到连续的 Data Beat,说明两路 AXI 主机都在访问 LPDDR5X。TXN_START_FLAG、TXN_DONE 和两个 WR_FRE 计数也在变化,表明测试模块能够重复发起并完成读写流程;截图光标位置可见的 ERROR_1 为 0。
AXI 接口行中的红色 OVERFLOW 位于 System ILA 的事务显示行,并不是工程自定义的 ERROR 信号,也不是 LPDDRMC 的 cal_error。工程是否通过仍应以 cal_done=1、cal_error=0、两路 TXN_DONE 能够出现且两路 ERROR 始终为 0 为准。必要时可以缩短捕获窗口内的事务密度,或分别触发两路 AXI 接口,以获得更清晰的单次读写波形。
需要人工触发时,在 VIO 中将对应通道的 start_manually 执行一次 0→1→0。模块只检测上升沿,因此将信号一直保持为 1 不会连续产生启动脉冲。
5.5 板级验证结果
结合状态 LED 和 System ILA,本次板级验证得到以下结果:
- Q30 和 Q26 点亮,说明 LPDDRMC PLL 已锁定且 LPDDR5X 初始化、校准完成;
- Q27 熄灭,说明控制器没有报告校准错误;
- Q31 在两张照片中分别处于亮、灭状态,说明 PL 运行指示持续翻转;
- Q32 稳定点亮,说明高频 AXI 用户时钟正在输出;
- System ILA 中两路 AXI 接口均存在有效事务和读写数据传输,测试启动、完成和写入次数信号持续变化;
- 截图中可见
ERROR_1=0;完整判定还应确认另一通道的ERROR也始终为 0。
其中,cal_done 只能证明存储器初始化和校准完成;TXN_DONE 且 ERROR = 0 才能进一步证明本工程执行的写入、读回和数据比较没有检测到异常。
6. 总结与扩展
本工程围绕 LPDDRMC 构建了一套双通道 LPDDR5X 读写验证系统。LPDDRMC 负责存储器初始化、校准和 AXI 到 LPDDR5X 的协议转换;两个 dma_test_warpper 管理测试启动;内部 axi_master 分别在 0x1000_0000 和 0x2000_0000 地址区域执行 256 bit AXI 写入、读回和比较;VIO、System ILA 与状态输出用于确认控制器和测试逻辑的运行情况。
板级实测中,Q26 和 Q30 点亮、Q27 熄灭,Q31 能够周期翻转,表明 LPDDR5X 已完成校准且用户逻辑正在运行;System ILA 同时捕获到两路 AXI 的有效读写事务。实验烧录统一使用 bit/design_1_wrapper.pdi,在线调试时配套加载同一文件夹中的 design_1_wrapper.ltx。
在此基础上,可以将自定义测试主机替换为图像处理、高速采集或其他 AXI 主设备,也可以进一步统计 WR_FRE、增加更丰富的数据模式,并测试两个 AXI 端口并发访问时的带宽和延迟。

