[FPGA] NVMe高速传输之摆脱XDMA设计31: 初始化功能验证与分析

[复制链接]
1735|0
xianuser 发表于 2025-11-10 08:50 | 显示全部楼层 |阅读模式
[color=rgba(0, 0, 0, 0.75)]

本博文主要交流设计思路,在本博客已给出相关博文30多篇,希望对初学者有用。注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP设计。若有NVME或RDMA 产品及项目需求,请看B站视频后联系。

初始化功能主要实现 PCIe 链路设备的初始化配置和 NVMe 初始化配置。 复杂的PCIe 事务交互与设备行为都通过 NVMe 子系统模型来实现, 因此对初始化功能的测试用例的实现比较简单, 只需要配置初始化控制寄存器来控制初始化进程, 要实现不同应用场景的模拟则需要通过构建不同拓扑结构的 NVMe 子系统模型。 在这里以最小存储子系统模型为例说明对初始化功能的验证与分析。 在本节测试用例中, 设置桥设备模型不启用 BAR 空间, 设置 NVMe 设备模型 BAR0 空间大小为 64KB, 不启用其余 BAR 空间。

(1) 系统初始化功能测试结果
系统初始化正常功能仿真波形如图1所示, 系统初始化状态机(init_state) 值对应状态为: 0 对应空闲状态, 1 对应链路训练状态, 2 对应 PCIe 初始化状态, 3 对应 NVMe 初始化状态, 4 对应初始化错误状态, 5 对应初始化完成状态。


图1 系统初始化控制和状态转移仿真波形
复位释放后, 在延时 20ms 后初始化状态机值跳转到链路训练状态, 在这里为了减少仿真时间在仿真过程中缩减了延时条件。 由于链路训练由 PCIE 集成块执行, 在功能仿真过程中忽略链路训练的仿真, 在进入链路训练状态一段时间后将 link_is_up信号置高, 表示链路训练完成。 配置初始化控制寄存器(init_ctrl) 值为 1, 表示启动PCIe 初始化, 状态机进入 PCIe 初始化状态。 当初始化状态寄存器(init_status) 值为3, 表示 PCIe 初始化正常完成, 此时配置 init_ctrl 寄存器值为 2 启动 NVMe 初始化,初始化状态机跳转到 NVMe 初始化状态, 初始化状态寄存器值为 7, 表示 NVMe 初
始化完成, 状态机跳转到初始化完成状态, 正常初始化功能仿真结束, 仿真行为符合设计预期.


[color=rgba(0, 0, 0, 0.75)]

B站已给出相关性能的视频,如想进一步了解,请搜索B站用户:专注与守望
链接:https://space.bilibili.com/585132944/dynamic?spm_id_from=333.1365.list.card_title.click



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

57

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0