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
相关文章:

NVMe协议简介之AXI总线更新
更新AXI4总线知识 AXI4总线协议 AXI4总线协议是由ARM公司提出的一种片内总线协议 ,旨在实现SOC中各模块之间的高效可靠的数据传输和管理。AXI4协议具有高性能、高吞吐量和低延迟等优点,在SOC设计中被广泛应用 。随着时间的推移,AXI4的影响不…...

设计模式——责任链设计模式(行为型)
摘要 责任链设计模式是一种行为型设计模式,旨在将请求的发送者与接收者解耦,通过多个处理器对象按链式结构依次处理请求,直到某个处理器处理为止。它包含抽象处理者、具体处理者和客户端等核心角色。该模式适用于多个对象可能处理请求的场景…...

基于Android的医院陪诊预约系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...

基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

【金融基础学习】债券回购方式
债券回购作为货币市场的重要工具,本质上是一种以债券为抵押的短期资金借贷行为。在银行间市场,质押式回购与**买断式回购*是两种主要形式。 1. 质押式回购(Pledged Repo, RP) – 所有权不转移的短期融资工具 1.1 质押式回购概述 质押式回购是交易双方…...

第五十九节:性能优化-GPU加速 (CUDA 模块)
在计算机视觉领域,实时性往往是关键瓶颈。当传统CPU处理高分辨率视频流或复杂算法时,力不从心。本文将深入探索OpenCV的CUDA模块,揭示如何通过GPU并行计算实现数量级的性能飞跃。 一、GPU加速:计算机视觉的必由之路 CPU的强项在于复杂逻辑和低延迟任务,但面对图像处理中高…...

单元测试-概述入门
目录 main方法测试缺点: 在pom.xm中,引入junit的依赖。,在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明test注解。 练习:验证身份证合法性 测试成功 测试失败 main方法测试缺点&am…...

⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架! 在现代 Web 服务开发中,开发者需要一个既轻量级又高性能的 HTTP 服务器库来简化开发流程,同时确保服务的高效运行。Hyperlane 正是为此而生——一个专为 Rust 开发者设计的 HTTP 服务器库…...

《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战
一、模型蒸馏环境部署 注:本次实验仍然采用Ubuntu操作系统,基本配置如下: 需要注意的是,本次公开课以Qwen 1.5-instruct模型为例进行蒸馏,从而能省略冷启动SFT过程,并且 由于Qwen系列模型本身性能较强&…...
Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决 在 Ubuntu 24.04 LTS 中,如果你发现 Chrome 浏览器用不了搜狗输入法或其他 Fcitx5 中文输入法,可以试试下面的方法。 直接上解决方案: 打…...

字节golang后端二面
前端接口使用restful格式,post与get的区别是什么? HTTP网络返回的状态码有哪些? go语言切片与数组的区别是什么? MySQL实现并发安全避免两个事务同时对一个记录写操作的手段有哪些? 如何实现业务的幂等性(在…...
计算机网络物理层基础练习
第二章 物理层 填空题 从通信双方信息交互的方式来看,通信的三种基本方式为单工、半双工和全双工。其中,单工数据传输只支持数据在一个方向上传输,全双工数据传输则允许数据同时在两个方向上传输。最基本的带通调制方法包括三种:…...

vscode + cmake + ninja+ gcc 搭建MCU开发环境
vscode cmake ninja gcc 搭建MCU开发环境 文章目录 vscode cmake ninja gcc 搭建MCU开发环境1. 前言2. 工具安装及介绍2.1 gcc2.1.1 gcc 介绍2.1.2 gcc 下载及安装 2.2 ninja2.2.1 ninja 介绍2.2 ninja 安装 2.3 cmake2.3.1 cmake 介绍2.3.2 cmake 安装 2.4 VScode 3. 上手…...

三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现 目录 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现效果一览基本介绍程序设…...

JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
一、JVM 堆内存:对象的生存与消亡之地 作为 Java 虚拟机中最大的内存区域,堆内存是所有对象实例的 “出生地” 与 “安息所”。从程序运行的角度看,所有通过new关键字创建的对象都在堆中分配内存,其生命周期完全由垃圾回收机制&am…...

OpenCV4.4.0下载及初步配置(Win11)
目录 OpenCV4.4.0工具下载安装环境变量系统配置 OpenCV4.4.0 工具 系统:Windows 11 下载 OpenCV全版本百度网盘链接:: https://pan.baidu.com/s/15qTzucC6ela3bErdZ285oA?pwdjxuy 提取码: jxuy找到 opencv-4.0.0-vc14_vc15 下载得到 安装 运行op…...
【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
App版本不升级时,又想即时更新本地数据库怎么办? 办法一:直接从服务器下载最新的sqlite数据库替换掉本地的 具体逻辑 1、首先本地数据库里一定要有一个字段(名字自己取) 比如dbVersion,可用数字&#x…...
Flink CDC将MySQL数据同步到数据湖
此项目可以理解为MySQL数据迁移,由Flink Stream监听MySQL的Binlog日志写入Kafka,在Kafka消费端将消息写入Doris或其他外部对象存储。 涉及的环境与版本 组件版本flink1.20.1flink-cdc3.4.0kafka2.13-4.0.0Dragonwell17 引入相关依赖 <?xml versio…...

使用Mathematica观察多形式根的分布随参数的变化
有两种方式观察多项式的根随着参数变化:(1)直接制作一个小的动态视频;(2)绘制所有根形成的痕迹(locus)。 制作动态视频: (*Arg-plane plotting routine with plotting …...

【C++高级主题】转换与多个基类
目录 一、多重继承的虚函数表结构:每个基类一个虚表 1.1 单继承与多重继承的虚表差异 1.2 代码示例:多重继承的虚函数覆盖 1.3 虚表结构示意图 二、指针与引用的类型转换:地址调整的底层逻辑 2.1 派生类指针转基类指针的地址偏移 2.2 …...
C++.双指针算法(1.1目录修正)
C.双指针算法 1. 双指针算法概述1.1 双指针算法的定义1.2 双指针算法的应用场景1.2.1 数组中的两数之和问题1.2.2 链表中的环检测问题1.2.3 滑动窗口问题1.2.4 有序数组的合并问题 2. 双指针算法的实现基础2.1 指针的基本概念2.2 指针的运算操作 3. 双指针算法的常见类型及示例…...

『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
目录 手机环境适配说明安卓效果图代码 iOS(暂未实测,没有水果开发者)总结 欢迎关注 『uniapp』 专栏,持续更新中 欢迎关注 『uniapp』 专栏,持续更新中 手机环境适配说明 个别手机系统可能需要进行特别的权限设置,否则会无法使用 桌面快捷方式: 已知的有…...

【LLM vs Agent】从语言模型到智能体,人工智能迈出的关键一步
目录 一、什么是 LLM?语言的天才,思维的起点 ✅ 特点小结: 二、什么是 Agent?智能的执行者,自主的决策者 ✅ 特点小结: 三、LLM 与 Agent 的关系:是工具,更是大脑 四、案例实战…...
【看到哪里写到哪里】C的指针-3(函数指针)
//定义四个函数 加减乘数 int add(int a, int b) {return a b; } int subtract(int a, int b) {return a - b; } int multiply(int a, int b) {return a * b; } int divide(int a, int b) {if (b 0){printf("Error: devision by ZERO!");return 0;}return a / b; }…...

麦克风和电脑内播放声音实时识别转文字软件FunASR整合包V5下载
我基于FunASR制作的实时语音识别转文字软件当前更新到V5版本。软件可以实时识别麦克风声音和电脑内播放声音转为文字。 FunASR软件介绍 FunASR 是一款基础语音识别工具包和开源 SOTA 预训练模型,支持语音识别、语音活动检测、文本后处理等。 我使用FunASR制作了一…...

PyTorch——卷积层(3)
conv_arithmetic/README.md at master vdumoulin/conv_arithmetic GitHub out_channel1 out_channel2...
(面试)OkHttp实现原理
OkHttp 是一个高效的 HTTP 客户端,被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性,例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理: 1…...

从 PyTorch 到 TensorFlow Lite:模型训练与推理
一、方案介绍 研发阶段:利用 PyTorch 的动态图特性进行快速原型验证,快速迭代模型设计。 灵活性与易用性:PyTorch 是一个非常灵活且易于使用的深度学习框架,特别适合研究和实验。其动态计算图特性使得模型的构建和调试变得更加直…...
C++ 17 正则表达式
正则表达式不是C语言的一部分,这里仅做简单的介绍。 将这项技术引进,在 』的讨论 正则表达式描述了一种字符串匹配的模式。一般使用正则表达式主要是实现下面三个需求: 1,检查一个串是否包含某种形式的子串; 2,将匹配的子串替换&a…...

【存储基础】存储设备和服务器的关系和区别
文章目录 1. 存储设备和服务器的区别2. 客户端访问数据路径场景1:经过服务器处理场景2:客户端直连 3. 服务器作为"中转站"的作用 刚开始接触存储的时候,以为数据都是存放在服务器上的,服务器和存储设备是一个东西&#…...