0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVMe高速传输却不用XDMA设计之1

高速传输与存储 来源:高速传输与存储 作者:高速传输与存储 2025-06-09 17:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

NVMe IP放弃XDMA原因

选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。因此决定直接采用PCIe设计,虽然要费一番周折,但是目前看,还是值得的,uvm验证也更清晰。

PCIe 加速模块设计

PCIe 加速模块负责处理PCIe事务层,并将其与NVMe功能和AXI接口直接绑定。如图1所示,PCIe加速模块按照请求发起方分为请求模块和应答模块。请求模块负责将内部请求事务转换为配置管理接口信号或axis请求方请求接口信号(axis_rq),以及解析 axis 请求方完成接口信号(axis_rc);应答模块负责接收axis完成方请求接口信号(axis_cq),将请求内容转换为AXI4接口信号或其它内部信号做进一步处理,同时将应答事务通过axis完成方完成接口axis_cc)发送给PCIE集成块.

wKgZPGgxkAWAGe2ZAACUFjGWWo0349.png

图1 PCIe加速模块结构和连接关系图

PCIe 加速模块不仅承担了TLP与其它接口信号的转换功能,也是降低传输延迟增加吞吐量的核心部件。接下来分别对请求模块和应答模块的结构设计进行具体分析。

PCIe 请求模块设计

请求模块的具体任务是将系统的请求转换成为axis接口形式的TLP或配置管理接口信号。这些请求主要包含初始化配置请求和门铃写请求。初始化配置请求由初始化模块发起,当配置请求的总线号为0时,请求通过Cfg_mgmt接口发送给PCIE集成块;当配置请求的总线号不为0时,请求以PCIe配置请求TLP的格式从axis_rq接口发送到PCIE集成块,然后由硬核驱动数据链路层和物理层通过PCIe接口发送给下游设备,下游设备的反馈通过axis_rc接口以Cpl或CplD的形式传回。门铃写请求由NVMe控制模块发起,请求以PCIe存储器写请求TLP的格式从axis_rq接口交由PCIE集成块发送。

由于发起请求的模块存在多个,并且在时间顺序上初始化模块先占用请求,NVMe控制模块后占用请求,不会出现请求的竞争,因此设置一条内部请求总线用于发起请求和接收响应,该请求总线也作为请求模块的上游接口。请求模块的请求总线接口说明如表1所示。无论是配置请求还是门铃写请求,请求的数据长度都只有一个双字,因此设置读写数据位宽均为32比特。

表1 请求总线接口

wKgZPGgxkCOABVxfAADP1j_0uk4920.png

在接收到请求总线接口的请求事务后,当请求类型的值为0时,表示通过PCIE集成块的配置管理接口发送请求,由于请求接口的接口和时序与配置管理接口基本一致,因此此时直接将请求接口信号驱动到配置管理接口完成请求的发送,请求读数据和响应也通过选通器连接到配置管理接口。当请求类型值不为0时,则需要将请求转换为TLP以axis接口形式发送,这一过程通过请求状态机实现,请求状态机的状态转移图如图2所示。

wKgZPGgxkFaAbkXyAACO845bvXI893.png

图2 PCIe请求状态转移图

各状态说明如下:

IDLE:空闲状态,复位后的初始状态。当请求写有效或请求读有效,且请求类型值不为0时,如果请求写有效跳转到WR_HEAD状态,如果请求读有效或读写同时有效跳转到RD_HEAD状态,否则保持IDLE状态。实际的上层设计中读写请求不会同时发生,这里的状态跳转条件增加了读优先设计,从而避免异常情况的出现。

WR_HEAD:请求写TLP头发送状态。该状态下根据请求类型、请求地址组装写请求的TLP报文头部,并将报文头部通过axis_rq接口发送。当axis_rq接口握手时跳转到WR_DATA状态。

WR_DATA:请求写TLP数据发送状态。该状态下将请求写的数据通过axis_rq接口发送,当axis_rq接口握手时跳转到DONE状态。

RD_HEAD:请求读TLP头发送状态。该状态下组装读请求TLP报头通过axis_rq接口发送,当接口握手时跳转到RD_DATA状态。

RD_DATA:请求读CplD接收状态。该状态下监测axis_rc接口信号,当出现数据传输有效时,启动握手并接受数据,然后跳转到DONE状态。

DONE:请求完成状态。该状态下使能req_ack请求响应信号,如果是读请求同时将RD_DATA状态下接收的数据发送到req_rdata请求读数据接口。一个时钟周期后回到IDLE状态。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8991

    浏览量

    153642
  • 高速传输
    +关注

    关注

    0

    文章

    27

    浏览量

    9164
  • nvme
    +关注

    关注

    0

    文章

    251

    浏览量

    23214
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVMe IP高速传输却不依赖便利的XDMA设计之一

    NVMe IP放弃XDMA原因 选用XDMANVMe IP的关键传输模块,可以加速IP的设计,但是XD
    发表于 05-24 17:09

    NVMe IP高速传输却不依赖便利的XDMA设计之二

    NVMe IP放弃XDMA原因 选用XDMANVMe IP的关键传输模块,可以加速IP的设计,但是XD
    发表于 05-25 10:20

    NVMe IP高速传输却不依赖便利的XDMA设计之三:系统架构

    请求数据传输, 数据传输通过 AXI4总线接口对接用户逻辑, 使用突发传输提高数据传输性能。 图1 Nv
    发表于 06-29 17:42

    NVMe IP高速传输摆脱XDMA设计四:系统控制模块设计

    系统控制模块负责实现 NVMe over PCI 逻辑加速引擎的控制功能, 其结构如图 1 所示。 用户通过系统控制模块实现对初始化功能、 队列管理功能、 DMA 功能等主要功能的控制, 同时逻辑
    发表于 06-29 18:07

    NVMe IP高速传输却不依赖XDMA设计五:DMA 控制单元设计

    DMA 控制单元负责控制 DMA 传输事务, 该单元承担了 DMA 事务到 NVMe 事务的转换任务, 使用户对数据传输事务的控制更加简单快捷。 DMA 控制功能由 DMA寄存器组实现。DMA
    发表于 07-02 19:45

    NVMe高速传输摆脱XDMA设计六:性能监测单元设计

    性能监测单元负责监测 NVMe over PCIe 逻辑加速引擎的运行状态和统计信息, 包括复位后 运行时间信息、 NVMe 指令数量统计信息、 数据操作数量统计信息、 IOPS 性能统计 信息
    发表于 07-02 19:51

    NVMe高速传输摆脱XDMA设计七:系统初始化

    路训练由 PCIE 集成块实现, 初始化模块根据链路训练完成信号和初始化启动信号来执行 PCIe 初始化和NVMe 初始化。 图1 系统初始化流程`` 系统初始化的主要流程如图 1 所示, 在系统供电
    发表于 07-04 09:14

    NVMe高速传输摆脱XDMA设计十:NVMe初始化状态机设计

    1NVMe配置初始化状态机状态转移图。各状态的说明如下: 图1NVMe初始化状态转移图 IDLE:空闲状态,复位后的初始状态。当检测到初始化控制寄存器的NVMe初始化启动信号时,进入
    发表于 07-05 22:03

    PCIE高速传输解决方案FPGA技术XILINX官方XDMA驱动

    PCIE高速传输方案传输的带宽利用率可达到90%以上,延迟可达到理论的最低延迟值。该方案已经应用到航天航空、雷达等领域。一、 高效率传输方案 该采集方案 Demo 基于 VC709
    发表于 05-19 08:58

    NVMe IP over PCIe 4.0:摆脱XDMA,实现超高速

    基于NVMe加速引擎,它直接放弃XDMA,改为深度结合PCIe,通过高速传输机制开发。同时利用UVM验证平台验证,有效提升工作效率。
    的头像 发表于 04-16 14:57 378次阅读
    <b class='flag-5'>NVMe</b> IP over PCIe 4.0:摆脱<b class='flag-5'>XDMA</b>,实现超<b class='flag-5'>高速</b>!

    NVMe IP高速传输却不依赖XDMA设计之二:PCIe读写逻辑

    应答模块的具体任务是接收来自PCIe链路上的设备的TLP请求,并响应请求。由于基于PCIe协议的NVMe数据传输只使用PCIe协议的存储器读请求TLP和存储器写请求TLP,应答模块分别针对两种TLP设置处理引擎来提高并行性和处理速度。
    的头像 发表于 06-09 17:25 280次阅读
    <b class='flag-5'>NVMe</b> IP<b class='flag-5'>高速</b><b class='flag-5'>传输</b><b class='flag-5'>却不</b>依赖<b class='flag-5'>XDMA</b>设计之二:PCIe读写逻辑

    NVMe IP高速传输却不依赖XDMA设计之三:系统架构

    所设计的新系统架构中,Nvme over PCIe IP通过 PCIe 3.0x4 接口连接 NVMe固态硬盘, 并提供 AXI4-Lite 接口用于系统控制, 以及 AXI4 接口用于数据传输
    的头像 发表于 06-29 17:46 456次阅读
    <b class='flag-5'>NVMe</b> IP<b class='flag-5'>高速</b><b class='flag-5'>传输</b><b class='flag-5'>却不</b>依赖<b class='flag-5'>XDMA</b>设计之三:系统架构

    NVMe IP高速传输却不依赖XDMA设计四:系统控制模块

    系统控制模块负责实现 NVMe over PCI 逻辑加速引擎的控制功能, 其结构如图 1 所示。 用户通过系统控制模块实现对初始化功能、 队列管理功能、 DMA 功能等主要功能的控制, 同时逻辑加速引擎的工作状态也通过此模块反馈给用户。
    的头像 发表于 06-29 17:52 95次阅读
    <b class='flag-5'>NVMe</b> IP<b class='flag-5'>高速</b><b class='flag-5'>传输</b><b class='flag-5'>却不</b>依赖<b class='flag-5'>XDMA</b>设计<b class='flag-5'>之</b>四:系统控制模块

    NVMe IP高速传输却不依赖XDMA设计五:DMA 控制单元设计

    DMA 控制单元负责控制 DMA 传输事务, 该单元承担了 DMA 事务到 NVMe 事务的转换任务, 使用户对数据传输事务的控制更加简单快捷。 DMA 控制功能由 DMA寄存器组实现。
    的头像 发表于 07-02 19:47 652次阅读
    <b class='flag-5'>NVMe</b> IP<b class='flag-5'>高速</b><b class='flag-5'>传输</b><b class='flag-5'>却不</b>依赖<b class='flag-5'>XDMA</b>设计<b class='flag-5'>之</b>五:DMA 控制单元设计

    NVMe IP高速传输却不依赖XDMA设计六:性能监测单元设计

    性能监测单元负责监测 NVMe over PCIe 逻辑加速引擎的运行状态和统计信息, 包括复位后 运行时间信息、 NVMe 指令数量统计信息、 数据操作数量统计信息、 IOPS 性能统计 信息、 指令延迟统计信息等。
    的头像 发表于 07-02 19:49 130次阅读
    <b class='flag-5'>NVMe</b> IP<b class='flag-5'>高速</b><b class='flag-5'>传输</b><b class='flag-5'>却不</b>依赖<b class='flag-5'>XDMA</b>设计<b class='flag-5'>之</b>六:性能监测单元设计