当前位置: 首页 > article >正文

NVMe高速传输之摆脱XDMA设计2

NVMe IP放弃XDMA原因

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

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

http://www.lryc.cn/news/2385578.html

相关文章:

  • github开源版pymol安装(ubuntu22.04实战版)
  • pycharm无需科学上网工具下载插件的解决方案
  • Halcon计算点到平面的距离没有那么简单
  • 基于DenseNet的医学影像辅助诊断系统开发教程
  • 数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
  • Python爬虫设置IP代理
  • Adminer 连接mssql sqlserver
  • C++系统IO
  • 利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南
  • DELL EMC PowerStore BBU更换手册
  • css五边形
  • 三种常见脉冲神经网络编码方式解读
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板
  • HTML回顾
  • 机器视觉6-halcon高级教程
  • YOLOv8 的双 Backbone 架构:解锁目标检测新性能
  • 1.4 TypeScript 编译是如何工作的?
  • 【HTML-4】HTML段落标签:构建内容结构的基础
  • 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用
  • 未授权访问漏洞利用链实战总结
  • Centos上搭建 OpenResty
  • Web 服务、 Nfs 服务器以及 Dns 服务器综合实验
  • 保证数据库 + redis在读写分离场景中事务的一致性
  • 汇编语言的子程序魔法:解锁四则运算的奥秘
  • 快速解决Linux 中yum镜像拉取失败问题
  • C#核心概念解析:析构函数、readonly与this关键字
  • HarmonyOS基础组件:Button三种类型的使用
  • 深入理解设计模式之适配器模式
  • 预训练模型:深度学习的通用特征引擎