首页 > 其他分享 >学习pcie—20240724

学习pcie—20240724

时间:2024-07-24 16:56:57浏览次数:10  
标签:TLP 断言 tx tdata rx 学习 pcie 20240724 axis

因为前一段时间看了xdma的IP核手册,发现只看xdma看不太懂,不清楚pcie的传输的流程,不了解报文格式,所以看看pcie手册,主要关注发送接收时序

首先是pcieIP核与xdmaIP核的区别:

Integrated Block for PCI Express:7 Series Integrated Block for PCI Express 是最基础的PCIe IP, 实现的是PCIe 的物理层、链路层和事务层,提供给用户的是以 AXI4-stream 接口定义的TLP包。这是三种 IP 中“最小的”(即最少的资源)和最灵活的,也是开发难度最大的。该 IP 将大部分开发工作留给了用户。 用户如果要往主机发数据, 需要在逻辑端组好MEM_WR事务包送到AXI4-stream 接口,同样要从主机获取数据,就要发送MEM_RD事务包,然后获取到COMPLETE事务包,再从COMPLETE事务包中提取出数据。 使用该IP核,需要对PCIe 协议有清楚的理解, 特别是对事务包 TLP 报文格式。


AXI Memory Mapped To PCI Express IP:该 IP 不仅封装了 7 Series Integrated Block for PCI Express IP,而且还提供了 AXI MM/S 桥。该桥不仅实现了 AXI4 tostream 的功能,还提供了事务层包 TLP 的组装和拆卸、地址转换、错误处理等功能。使用该 IP 时,用户只需通过 AXI4 接口接收和发送 PCIe 数据,不需要组装和拆卸事务包。 从逻辑资源消耗的角度来看, 居三种IP 之中,开发难度也是居三种 IP 之中。


DMA/Bridge Subsystem for PCI Express (PCIe)(XDMA):该 IP 不仅完成了事务层的组包解包,还添加了完整的 DMA 引擎。
XDMA 虽然简单易用,但 XDMA 也有它的局限,主要表现在两个方面:
1)XDMA 正如其名字中的 DMA 一样,适用与大批量的数据传输场景,不适合小数据场景。
2)XDMA 只能用于 PCIe 的终端( endpoint) 设备,不能用于 Root Port,另外二个 IP 既可以用于终端( endpoint)设备,也可以用与 Root Port。
PCIe 的终端设备如 PCIe 视频采集卡、显卡等。简单理解就是 PCIe 的终端设备只有 PCIe 金手指,没有PCIe 插槽,而 Root Port 带有 PCIe 插槽,可以插 PCIe 终端设备。由于一般开发 PCIe 应用大多是 PCIe 终端,所以第二点的局限性实际上较小。引用:FPGA(基于xilinx)中PCIe介绍以及IP核XDMA的使用_xilinx pcie-CSDN博客

//简单来说就是pcie ip只完成了pcie协议中的物理层 数据链路层 事务层 ,提供了一个TLP包,如果想要与主机和板卡交互,还需要自己完成,而xdma的完成了数据的拆包组包,添加了DMA引擎,可以协助搬运数据。//

顶层功能块和接口:

type0 配置头格式,就是非桥设备,桥设备为type 1 .

64位交易层接口设计:

ax4 - stream接口上的TLP格式

当使用AXI4-Stream接口时,数据包被安排在整个64位数据路径上。

图显示了相同的示例数据包在AXI4-Stream接口上。报文的字节0出现在第一个QWORD的s_axis_tx_tdata[31:24](发送)或m_axis_rx_tdata[31:24](接收)上,字节1出现在s_axis_tx_tdata[23:16]或m_axis_rx_tdata[23:16]上。字节8出现在第二个QWORD的s_axis_tx_tdata[31:24]或m_axis_rx_tdata[31:24]上。包的报头部分由三个或四个dword组成,由TLP格式和类型决定,如PCI Express Base Specification第2.2节所述。

可以看到不同颜色的字段相对应,TLP报文格式对应在axi数据流上如图所示,报文字节0对应[31:24]bite,以此类推。

定义发送用户应用程序信号。为了发送TLP,用户应用程序必须在发送事务接口上执行以下事件序列:

1. 用户应用程序逻辑断言s_axis_tx_tdata有效,并在s_axis_tx_tdata上呈现第一个TLP QWORD[63:0]。如果内核正在断言s_axis_tx_treready,则立即接受QWORD;否则,用户应用程序必须保持QWORD呈现,直到内核断言s_axis_tx_treready。

2. 用户应用程序断言s_axis_tx_tvalid,并在s_axis_tx_tdata[63:0]上显示TLP QWORDs的剩余部分,以供随后的时钟周期使用(内核断言s_axis_tx_tready)。

3. 用户应用程序将断言s_axis_tx_tvalid和s_axis_tx_tlast以及最后的QWORD数据。如果最后一次传输的所有8个数据字节都是有效的,它们将显示在s_axis_tx_tdata[63:0]上,并且s_axis_tx_tkeep被驱动到0xFF;否则,剩余的4个数据字节将显示在s_axis_tx_tdata[31:0]上,并将s_axis_tx_tkeep驱动到0x0F。

4. 在下一个时钟周期,用户应用程序取消s_axis_tx_tvalid,以发出s_axis_tx_tdata[63:0]上有效传输结束的信号。

演示了一个带有数据负载的3-DW TLP报头;例如32位可寻址内存写请求。当用户应用程序断言s_axis_tx_tlast时,它还在s_axis_tx_tkeep上放置一个0xFF值,通知内核s_axis_tx_tdata[63:0]包含有效数据。

说明了一个带有数据负载的4 dw TLP报头;一个例子是64位可寻址内存写请求。当用户应用程序断言s_axis_tx_tlast时,它还将值0x0F放在s_axis_tx_tkeep上,通知内核只有s_axis_tx_tdata[31:0]包含有效数据。

在传输接口上呈现背靠背事务,

用户应用程序可以在传输AXI4-Stream接口上呈现背靠背的tlp,以最大限度地利用带宽。图3-7所示为发送接口上背靠背的tlp。用户应用程序保持s_axis_tx_tvalid断言和在为前一个TLP断言s_axis_tx_tlast之后,在下一个时钟周期中呈现一个新的TLP

如果用户应用程序在s_axis_tx_tdata[63:0]上没有数据,则事务接口允许它进行节流。当这种情况发生时,用户应用程序取消s_axis_tx_tvalid,这将指示核心AXI4-Stream接口忽略s_axis_tx_tdata上呈现的数据[63:0]。图3-8说明了源节流机制,其中用户应用程序没有数据来表示每个时钟周期,因此必须在这些周期中取消assert s_axis_tx_tvalid

基本TLP接收操作

定义接收axis4 - stream接口信号。这一系列事件必须发生在接收axis4 - stream接口上,以便端点核心向用户应用程序逻辑呈现TLP:当用户应用程序准备好接收数据时,它断言m_axis_rx_tready。

2. 当内核准备好传输数据时,内核断言m_axis_rx_tdata有效,并在m_axis_rx_tdata上呈现第一个完整的TLP QWORD[63:0]。

3. 核心保持m_axis_rx_tvalid断言,并在随后的时钟周期中对m_axis_rx_tdata[63:0]呈现TLP QWORDs(前提是用户应用程序逻辑断言m_axis_rx_tready)。

4. 然后,内核用m_axis_rx_tlast断言m_axis_rx_tvalid,并在s_axis_tx_tdata上显示最后一个QWORD[63:0],在m_axis_rx_tkeep上显示值0xFF,或者在s_axis_tx_tdata上显示最后一个DWORD[31:0],在m_axis_rx_tkeep上显示值0x0F。

5. 如果在下一个时钟周期中没有可用的tlp,内核取消m_axis_rx_tvalid,以发出m_axis_rx_tdata[63:0]上有效传输结束的信号。

显示一个带有数据负载的3-DW TLP报头;例如32位可寻址内存写请求。当内核断言m_axis_rx_tlast时,它还会在m_axis_rx_tkeep上放置一个0xFF值,通知您m_axis_rx_tdata[63:0]包含有效数据

显示一个带有数据负载的4 dw TLP报头;一个例子是64位可寻址内存写请求。当内核断言m_axis_rx_tlast时,它还将值0x0F放在m_axis_rx_tkeep上,通知您只有m_axis_rx_tdata[31:0]包含有效数据

用户应用程序可以通过取消断言m_axis_rx_trready,随时停止从核心传输数据。如果在没有传输进行的情况下取消断言m_axis_rx_tready,并且如果TLP可用,则内核断言m_axis_rx_tvalid并在m_axis_rx_tdata上呈现第一个TLP QWORD[63:0]。在断言m_axis_rx_tdata以表示接受m_axis_rx_tdata[63:0]上呈现的数据之前,内核一直保持这种状态。此时,只要m_axis_rx_trready保持断言状态,核心就会呈现后续TLP QWORDs。如果在传输过程中取消断言m_axis_rx_tredy,那么内核将暂停数据传输,直到再次断言m_axis_rx_tredy。m_axis_rx_tready deasserted.是无限制次数的。核暂停,直到用户应用程序再次准备好接收tlp。

说明核心断言m_axis_rx_tvalid以及在m_axis_rx_tdata上呈现数据[63:0]。用户应用程序逻辑通过取消断言m_axis_rx_treready来插入等待状态。内核在检测到m_axis_rx_trready断言之前不会显示下一个TLP QWORD。用户应用程序逻辑可以根据需要断言或取消断言m_axis_rx_trready,以平衡新TLP传输的接收与应用程序逻辑内部TLP数据处理的速率

在接收接口上接收背靠背事务用户应用程序逻辑必须被设计成由核心处理接收AXI4-Stream接口上的背靠背tlp的表示。内核可以在为前一个TLP断言m_axis_rx_tlast之后的时钟周期为新TLP断言m_axis_rx_tvalid。

接收接口上的背靠背tlp示意图如图3-20所示

如果用户应用程序不能接受背对背的数据包,它可以通过取消断言m_axis_rx_trready来暂停TLP的传输,如在接收axis4流接口上节流数据路径一节中所讨论的那样。使用m_axis_rx_trready暂停接收第二个TLP的示例如图3-21所示。

排序或其他时序图参考 PG054 46到63页。

本文仅对基本传输时序做简单记录。

note: axis只是一种传输传输模式,简单来说就是规定了valid ready有效时传输数据等。。。而传输的数据就是以TLP报文格式传输的。pcie IP核就是对传输的数据进行封包和拆包。=或许可以理解为axis相当于大门,在十二点的时候开,TLP报文相当于一堆人,只能在十二点进,进去之后解封装,就是在一堆人中找到一个人(所需要的数据)。

标签:TLP,断言,tx,tdata,rx,学习,pcie,20240724,axis
From: https://blog.csdn.net/weixin_49574391/article/details/140661537

相关文章

  • 泰凌微8258学习日记-6:LCD屏幕的点亮以及使用
            点亮LCD对我而言算是比较难的操作了,在了解到LCD点亮的步骤以后(开SPI,导入LCD驱动,主函数调用),我开始学习LCD的引脚功能,SPI如何使用,后面拿到中景园给的LCD例程(STM32的),修改LCD驱动(这一步是最难的)。好在有位大哥帮我,也是顺利完成了驱动的修改。......
  • Markdown学习
    Markdown学习标题一级标题:#加空格(ctrl+1)注:不打空格可以在设置里将严格模式取消二级标题:##加空格(ctrl+2)三级标题:###加空格(ctrl+3)以此类推字体粗体:句子两边加两个星号,“**”(ctrl+b)Hello,World!斜体:句子两边加一个星号,“*”(ctrl+i)Hello,World!下划线:句子左边输入“”​......
  • 线段树扩展学习
    前言来补一下暑期集训的坑。正文标记可持久化这个很好理解,在进行区间修改的时候,不下传懒标记,查询的时候直接对每一层再进行处理即可。这个主要用于线段树分治,所以理解就行,代码不给了。动态开点之前一直不太会,现在来补一下。这种线段树主要用于优化空间复杂度。就是对于下......
  • MySQL 学习笔记 基础(多表查询下,事务)
    多表查询 多表查询-子查询概念:SQL语句中嵌套SELECT语句,称为嵌套语句,又称子查询。SELECT*FROMt1WHEREcolumn=(SELECTcolumn1FROMt2);子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。根据子查询结果不同,分为:·标量子查询......
  • Java学习笔记(三)算术运算符、逻辑运算符、四种进制介绍
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java算术运算符、逻辑运算符、四种进制介绍详细使用以及部分理论知识......
  • Java学习笔记(七)面向对象编程(中级部分)
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java面向对象编程(中级部分)包、访问修饰符、封装、继承、super关键字、多态、向上(下)转型、equals、hashCode、断点调试等知识的详细使用以及部分理论知识......
  • 学习Java的日子 Day56 数据库连接池,Druid连接池
    Day561.数据库连接池理解:池就是容器,容器中存放了多个连接对象使用原因:1.优化创建和销毁连接的时间(在项目启动时创建连接池,项目销毁时关闭连接池)2.提高连接对象的复用率3.有效控制项目中连接的个数(连接对象占内存资源)数据库连接池负责分配、管理和释放数据库连接......
  • 机器学习基础
    目录机器学习开发流程一、特征工程1.数据获取以鸢尾花为例2.特征抽取字典特征提取文本特征提取普通文本特征提取jieba分词TF-IDF重要程度3.特征编码4.特征预处理归一化标准化5.特征降维二、分类算法KNN算法knn算法实现模型选择与调优案例:facebook签到位置朴素贝叶斯决策树三、回......
  • OI-Wiki 学习笔记
    算法基础\(\text{Update:2024-07-22}\)复杂度定义衡量一个算法的快慢,一定要考虑数据规模的大小。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋势,即时间复......
  • Android MVP模型的学习与使用
    一、MVP(Model-View-Presenter)概叙MVP(Model-View-Presenter)是一种用于Android应用程序开发的架构模式,旨在将应用程序的不同部分分离,以提高代码的可维护性和可测试性。MVP模型包含三个主要组成部分:Model、View和Presenter。Model(模型):​ Model负责处理应用程序的数据和业务逻......