tag 标签: axi4

相关博文
  • 热度 5
    2025-6-24 23:26
    630 次阅读|
    0 个评论
    RoCE v2协议的队列在创建时就已确定连接类型,共有两种工作模式:主要分为两种工作模式:有连接模式和无连接模式。在有连接模式下,支持可靠连接(RC)和不可靠连接(UC)两种传输类型;而无连接模式则仅支持不可靠数据包(UD)传输类型。两种工作模式的传输方式对比如图1所示。 图1 有连接模式与无连接模式传输方式对比 在有连接传输中,本地主机中的每个队列对分别与一个远程主机中的一个队列对相绑定,只有绑定的 队列对之间可以进行通信 ,队列对无法与任何一个非绑定的队列对进行通信。而在无连接传输中,队列对之间没有绑定关系,每个队列对可以与任意数量的队列对之间进行通信。 有连接传输中的可靠传输(RC)是通过建立连接 来实现的,在该过程中,本地主机与远程主机之间交换双方缓冲区信息、最大传输单元、重传计数、超时时间等信息。RoCE v2协议有两种建立连接的方式,分别为基于CM API的QP间建链和基于Socket API的QP间建链。其中CM API是一种通信管理协议,其建立于InfiniBand/RoCE协议基础之上,在基于CM API的QP间建链过程中,本地主机与远程主机之间通过不可靠报文(UD)进行QP信息交换;Socket是基于TCP/IP协议的一个中间层,其建链过程需要两个网络节点先建立TCP/IP连接,然后通过这条连接来进行QP信息交换。 相关视频感兴趣者,请搜B站用户名: 专注与守望 或链接: https://space.bilibili.com/585132944/upload/video
  • 热度 8
    2025-6-18 15:40
    872 次阅读|
    0 个评论
    它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA SSD具有更高的吞吐量、更快的访问速度和更低的功耗,已经被广泛应用于各种计算领域和存储系统。 # NVMe队列 NVMe协议采用成对的提交队列(Submission Queue,SQ)和完成队列(Completion Queue,CQ)机制。SQ用于存放提交命令,而CQ则用于存放完成信息。队列状态信息通过门铃寄存器(Door Bell,DB)来检测。这两个队列采用了环形队列结构,队列可以映射到任何PCIe可访问的内存中,通常放在主机侧内存。对于提交队列,主机端是生产者,NVMe SSD是消费者。完成队列的情况刚好相反。因此SQ Tail指针和CQ Head指针由主机更新,而其他两个指针由NVMe控制器更新。NVMe的队列结构如图1所示。 图1 队列示意图 NVMe队列的深度是固定的,通过Tail和Head来分别指向队列的首尾位置,队列实际可用的大小是队列大小减1,当Head条目指针等于Tail条目指针时,队列为空。当Head条目指针比Tail条目指针多一个时,队列为满。 NVMe协议中根据命令类型将队列分为了Admin队列和I/O队列,Admin队列用来缓存管理Admin命令,如获取SSD属性、创建I/O队列等。而I/O队列用来缓存管理I/O命令,如读、写、识别等。在一个系统中只能有一对Admin SQ/CQ,但可以存在多对IO SQ/CQ。Admin SQ/CQ仅用来进行Admin命令的交互,I/O SQ/CQ仅用来进行I/O命令的交互。对于多核系统来说,每个核内虽然只有1个I/O CQ,但是可以存在多个I/O SQ,如图2所示。 图2 NVME 多队列示意图 由于Host端可能存在多个流水线,多队列的设计可以让系统的性能最大化。同时,可以通过对不同的队列设置不同的优先级,来保证高优先级队列的命令更快完成。NVMe协议中规定Admin SQ/CQ的队列深度最大可以支持4096(4K),I/O SQ/CQ的队列深度最大可以支持65536(64K)。在一个实际设计中,SQ的个数和深度的设置可以根据项目需求和硬件资源进行配置。队列深度的设置主要和系统中队列消费者和生产者之间的速率有关。 # NVMe分层结构 NVMe协议栈结构分为应用层和传输层两个层次。在应用层中实现NVMe命令生成、队列管理和流程控制,而传输层则借助PCIe协议进行实现。PCIe协议分为三层,即事务层、数据链路层和物理层。事务层负责将数据传输请求和响应打包成事务进行传输,数据链路层则负责数据传输的可靠性和流控制,通过链路层控制器(Link Layer Controller, LLC)实现。物理层则负责物理传输,包括电信号的发射和接收、时序控制和线路管理等。其分层结构图如图3所示。首先,在应用层生成NVMe命令传输至事务层。其次,在事务层会对上层传输的数据添加首部和校验,封装成TLP(Transaction Level Packet)传输至数据链路层。然后,在数据链路层会对TLP添加序列号和校验,封装成DLLP。最后,在物理层对数据包进行编码和并转串处理后,通过SerDes(Serializer/Deserializer)将数据发送至PCIe链路中。 图3 NVMe 分层结构示意图 由于NVMe协议是基于PCIe协议实现的,下面通过在PCIe拓扑结构中介绍NVMe协议中的SQ、CQ和DB的位置,以及数据在Host和NVMe SSD之间的传输流程。NVMe SSD在PCIe拓扑结构中的位置如图4所示。 图4 PCIe拓扑结构图 PCIe的拓扑结构由三部分组成,根联合体(Root Complex, RC)、PCIe交换器(PCIe Switch)和端点(Endpoint, EP)。根联合体位于拓扑结构的根部,最靠近CPU。端点设备位于PCIe的端末。交换机位于根联合体和端点设备之间。PCIe使用串行链路连接,一个链路的两端只能有两个设备。因此PCIe需要通过PCIe Switch扩展PCIe链路后,才能连接多个EP设备。在NVMe存储结构中,NVMe SSD也作为PCIe的一个EP端挂载在RC上。 NVMe协议中的SQ和CQ位于Host内存中,主机在初始化时根据队列的个数和深度在主机内存开辟出相应的内存空间,来存放SQ、CQ命令。DB寄存器位于NVMe SSD中,且被映射到BAR(Base Address Register)空间中,Host可以通过访问BAR空间来更新DB寄存器的值。 当Host需要向NVMe SSD发送命令时,首先将命令存放在主机内存开辟的SQ区域中,其次通过访问BAR空间的DB寄存器来告诉NVMe SSD到主机端内存区域取走待执行的命令。待命令执行完成后,NVMe SSD向主机内存的CQ区域写入完成命令。 想进一步了解相关视频,请搜索B站用户:专注与守望 或者链接:https://space.bilibili.com/585132944/dynamic?spm_id_from=333.1365.list.card_title.click
  • 热度 18
    2015-7-20 16:44
    3436 次阅读|
    0 个评论
    1、什么是AXI     AXI(Advanced eXtensible Interface)是一种总协议,该协议的第一个版本AXI3是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分。2010发布的AMBA4.0包含了AXI的第二个版本AXI4。     AXI4包含3种类型的接口:     1)AXI4:主要面向高性能地址映射通信的需求;     2)AXI4-Lite:是一个轻量级的,适用于吞吐量较小的地址映射通信总线;     3)AXI4-Stream:面向高速流数据传输。 2、AXI4协议的优势     1)高效:通过标准化的AXI接口,开发者只需要学习一种IP核的通讯协议即可;     2)易用:针对具体应用提供合适的接口协议。        AXI4:面向地址映射的接口,在单地址传输的情况下最大允许256个时钟周期的数据突发长度;        AXI4-Lite:一个轻量级的地址映射单次传输接口,占用较少的资源;        AXI4-Stream:去掉了地址传输的功能,允许无限制的数据突发传输,无需考虑地址映射。     3)易得:标准化的AXI接口协议资源,不仅可以在xilinx官网上获得,也可以在全球范围内ARM的所有合作伙伴处获得。        大量的IP core支持AXI4协议;        大量的第三方AXI工具可提供多样的系统开发、验证和功能定制。 3、AXI4的工作模式     AXI4和AXI4-Lite包含5个不同的通道:     读地址通道     写地址通道     读数据通道     写数据通道     读响应通道     数据可以在主从设备间同步的双向传输,并且数据传输大小可以改变。AXI4将数据传输的突发长度限制为最大256,AXI4-Lite每次传输仅运输传输一个数据。     如图1所示,AXI4协议主从设备间的读操作使用独立的读地址和读数据通道,只需要一个地址就可以执行最大为256的突发长度的读操作。 图1 读操作的通道结构     如图2所示,AXI4协议主从设备间的写操作使用写地址、写数据和写响应通道。只需要一个地址就可以执行最大为256的突发长度的写操作。      图2写操作的通道结构     AXI4-Lite接口和AXI4接口类似,但是不支持AXI4的突发传输模式。AXI4-Stream接口仅使用数据通道传输数据流,数据突发长度无限。 4、AXI4和AXI4-Lite接口信号     1)全局信号    信号名 AXI4 AXI4-Lit ACLK 全局时钟 ARESETN 全局复位,低有效。       2)写地址通道信号 信号名 源 AXI4 AXI4-Lit AWID 主 写地址ID。这个信号用于写地址信号组的标记。 不支持 AWADDR 主 写地址。写地址给出突发数据传输的第一个传输地址。 AWLEN 主 突发长度。给出突发传输中准确的传输个数。支持INCR和WRAP传输模式。 不支持 AWSIZE 主 突发大小。这个信号用于确定突发传输中每个传输的大小。 不支持 AWBURST 主 突发类型。该信息与突发大小信息一起,表示在突发过程中,地址如何应用于每个传输。支持INCR和WRAP传输模式。 不支持 AWLOCK 主 锁类型。该信号提供了关于传输原子特性的额外信息(普通或互斥访问)。 不支持 AWCACHE 主 缓存类型,建议值为0011。 AWPROT 主 保护类型,建议值为000。 AWQOS 主 QoS标识符,xilinx AXI4不支持。 不支持 AWREGION 主 用于每个写操作的地址通道上的域标识符。 不支持 AWUSER 主 xilinx AXI4不支持。 不支持 AWVALID 主 写地址有效信号。为高指示地址有效。 AWREADY 从 写地址准备信号。为高表示从设备空闲,准备接收地址;为低表示从设备忙。     3)写数据通道信号 信号名 源 AXI4 AXI-Lite WDATA 主 写数据,32位到1024位宽 只支持32位宽 WSTRB 主 写字节选通,用于表示更新存储器的字节通道,对于数据总线的每8位数据有一位写选通信号。 从设备端可选择忽略。 WLAST 主 写最后一个数据指示信号。表示突发传输中的最后一个数据。 不支持 WUSER 主 xilinx AXI4不支持。 不支持 WVALID 主 写有效。为高指示数据有效。 WREADY 从 写准备。为高表示从设备空闲,准备接收数据;为低表示从设备忙。     4)写响应通道 信号名 源 AXI4 AXI-Lite BID 从 响应ID。写响应识别标记,BID值必须匹配AWID值。 不支持 BRESP 从 写响应。该信号表示写状态,可允许相应的表示为OKAY\EXOKAY\SLVERR\DECERR。 EXOKAY状态不支持 BUSER 从 xilinx AXI4不支持。 不支持 BVALID 从 写响应有效。为高指示响应数据有效。 BREADY 主 写响应准备。为高表示主设备空闲,准备接收写响应;为低表示主设备忙。     5)读地址通道 信号名 源 AXI4 AXI-Lite ARID 主 读地址ID。这个信号用于读地址信号组的标记。 不支持 ARADDR 主 读地址。读地址给出突发数据传输的第一个传输地址。 ARLEN 主 突发长度。给出突发传输中准确的传输个数。支持INCR和WRAP传输模式。 不支持 ARSIZE 主 突发大小。这个信号用于确定突发传输中每个传输的大小。 不支持 ARBURST 主 突发类型。该信息与突发大小信息一起,表示在突发过程中,地址如何应用于每个传输。支持INCR和WRAP传输模式。 不支持 ARLOCK 主 锁类型。该信号提供了关于传输原子特性的额外信息(普通或互斥访问)。 不支持 ARCACHE 主 缓存类型,建议值为0011。 ARPROT 主 保护类型,建议值为000。 ARQOS 主 QoS标识符,xilinx AXI4不支持。 不支持 ARREGION 主 用于每个读操作的地址通道上的域标识符。 不支持 ARUSER 主 xilinx AXI4不支持。 不支持 ARVALID 主 读地址有效信号。为高指示地址有效。 ARREADY 从 读地址准备信号。为高表示从设备空闲,准备接收地址;为低表示从设备忙。     6)读数据通道 信号名 源 AXI4 AXI-Lite RID 从 读ID标记,该信号是读数据信号组标记,由从设备产生RID,RID必须和读交易中的ARID匹配。 不支持 RDATA 从 读数据。32位到1024位宽 只支持32位宽 RRESP 从 读响应。该信号表示读状态,可允许相应的表示为OKAY\EXOKAY\SLVERR\DECERR。 EXOKAY状态不支持 RLAST 从 读最后一个数据指示信号。表示突发传输中的最后一个数据。 不支持 RUSER 从 xilinx AXI4不支持。 不支持 RVALID 从 读有效。为高指示数据有效。 RREADY 主 读准备。为高表示主设备空闲,准备接收数据;为低表示主设备忙。     7)AXI4-Stream信号 信号名 源 默认值 功能 TVALID No N/A Stream读写数据有效。为高指示数据有效。 TREADY Yes 1 Stream读写读准备。为高表示对端设备空闲,准备接收数据;为低表示对端设备忙。 TDATA Yes 0 Stream读写数据,8到4096位宽。 TSTRB Yes 同TKEEP,否则为1 字节选通信号。用于表示更新存储器的字节通道,对于数据总线的每8位数据有一位选通信号。 TKEEP Yes 1 字节选通信号。TKEEP未被确认的那些相关的字节是空字节,可以从数据流中去除。 TLAST Yes 0 表明包的边界。 TID Yes 0 数据流标识符。 TDEST Yes 0 数据流路由信息。 TUSER Yes 0 用户定义的边带信息,这些信息能伴随数据流进行发送。    
相关资源