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

NVMe协议简介之AXI总线更新

更新AXI4总线知识

AXI4总线协议

AXI4总线协议是由ARM公司提出的一种片内总线协议 ,旨在实现SOC中各模块之间的高效可靠的数据传输和管理。AXI4协议具有高性能、高吞吐量和低延迟等优点,在SOC设计中被广泛应用 。随着时间的推移,AXI4的影响不断扩大。目前,由Xilinx提供的大部分IP接口都支持AXI4总线,使得系统中不同模块之间的互连更加高效。这也让基于这些IP的开发变得更加快捷、方便和可靠。AXI4协议规定了数据传输的信号描述、通道特性和握手机制,并指定了事务的过程和属性,例如突发数据传输的数量、每次传输的字节大小、突发类型和保护类型 。

AXI4总线类型

AMBA AXI4协议规范中针对不同的应用场景,制定了三个不同类型的接口,其中包括AXI4-Full、AXI4-Lite以及AXI4-Stream。表1为三种AXI4总线的对比。

表1三种AXI4总线对比
在这里插入图片描述
AXI4-Full:主要用于高性能地址映射通信的需求,是面向地址映射的接口。由于读写地址通道是分离的,所以支持双向同时传输,支持突发传输、Outstanding以及乱序传输等模式,突发长度最大支持256。

AXI4-Lite:是AXI4-Full总线的简化版本,主要用于寄存器配置。与AXI4总线相似,AXI4-Lite也具有五个通道。但AXI4-Lite不支持高级功能如突发传输和乱序传输等,并且数据位宽也受到限制。由于不需要支持大多数高性能功能,AXI4-Lite所需的资源也较少。

AXI4-Stream:主要用于高速数据流数据传输。相比于其他总线协议,AXI4-Stream支持无限制的数据突发传输。相比其他总线协议,AXI4-Stream仅包含数据通道,因此在主从设备之间需要保持一对一的连接关系。这意味着在数据传输期间,通道上的所有传输都将是直接的,并且不需要等待传输控制信号。

AXI4总线架构

AXI4总线的架构包括五个独立的通道,分别是读地址通道、读数据通道、写地址通道、写数据通道和写响应通道。其中,地址通道用于携带控制消息,以描述被传输的数据属性;数据传输则使用写通道来实现Master到Slave的传输,而Slave使用写响应通道对写传输进行响应;读通道则用来实现数据从Slave到Master的传输。这些通道之间既相互分离又相互依赖。相互分离是指每个通道通过握手机制来完成单向的传输,传输源端使用VALID来表明地址/控制信号和数据有效,而目的端使用READY来表明自己能够接收信息。相互依赖则是指写回复必须在收到最后一个写数据后触发,而读数据必须在收到读地址之后开始。

写通道架构如图1所示,包括写地址、写数据和写响应三个通道。在一次写传输操作中,主机首先在地址通道上发送传输操作的地址、突发大小等信息,并将需要写入的数据放在写数据通道上等待从机接收。从机在接收到写地址通道的命令后,开始从写数据通道接收数据。当从机接收到本次写传输的最后一个数据后,在写回复通道向主句回复本次传输状态,表示传输操作结束。协议中规定写回复必须在收到最后一个写数据后触发,而读数据必须在收到读地址之后开始。在从机具有一定的缓存能力后,协议中规定写数据可在写地址操作之后发生。当缓存能力用尽时,从机会通过将READY信号拉低来暂停数据传输。
在这里插入图片描述
图1 NVMe写通道架构图

读通道的架构如图2所示。读通道的架构与写通道不同,只包括两个通道:读地址通道和读数据通道,没有读响应通道。这是因为在读操作中,响应信息可以通过读数据通道返回,从而节省了资源。在一次读传输操作中,主机首先通过读地址通道向从机发送传输操作的地址、突发大小等信息。从机接收到信息后,在读数据通道上将数据和响应信号一并传输给主机。
在这里插入图片描述
图2 NVMe读通道架构图

在一个系统中,多个主机与从机进行传输时,需要通过AXI互联IP(AXI Interconnect)来实现多对多的拓扑结构 ,如图3所示。Interconnect拥有多个 Master/Slave接口,并在内部基于轮询或者优先级策略对多路数据进行路由转发,可以实现系统内部的高效通信。
在这里插入图片描述
图3 多对多拓扑结构
相关视频见B站 用户名:专注与守望
链接:
https://space.bilibili.com/585132944/dynamic?spm_id_from=333.1365.list.card_title.click

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

相关文章:

  • 设计模式——责任链设计模式(行为型)
  • 基于Android的医院陪诊预约系统
  • 基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
  • 【金融基础学习】债券回购方式
  • 第五十九节:性能优化-GPU加速 (CUDA 模块)
  • 单元测试-概述入门
  • ⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
  • 《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 字节golang后端二面
  • 计算机网络物理层基础练习
  • vscode + cmake + ninja+ gcc 搭建MCU开发环境
  • 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
  • JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
  • OpenCV4.4.0下载及初步配置(Win11)
  • 【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
  • Flink CDC将MySQL数据同步到数据湖
  • 使用Mathematica观察多形式根的分布随参数的变化
  • 【C++高级主题】转换与多个基类
  • C++.双指针算法(1.1目录修正)
  • 『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
  • 【LLM vs Agent】从语言模型到智能体,人工智能迈出的关键一步
  • 【看到哪里写到哪里】C的指针-3(函数指针)
  • 麦克风和电脑内播放声音实时识别转文字软件FunASR整合包V5下载
  • PyTorch——卷积层(3)
  • (面试)OkHttp实现原理
  • 从 PyTorch 到 TensorFlow Lite:模型训练与推理
  • C++ 17 正则表达式
  • 【存储基础】存储设备和服务器的关系和区别
  • kernel内核和driver驱动的区别