深入浅出AXI4协议(1)——概述

写在前面

        从这篇文章开始,我们将正式进入AXI4协议的学习,在xilinx系列的FPGA中,AXI4协议的使用是非常广泛的,很多的IP核都会支持AXI接口,而如果使用的是zynq系列,那AXI协议的学习更是重中之重。但是作为一款商用的成熟的总线协议,AXI接口本身的复杂程度也让很多初学者觉得无从下手。本系列希望通过最朴素的语言和一系列的使用实例帮助读者快速入门AXI4协议。但是笔者受限于自身水平有限,难免会有纰漏和理解不深刻的地方,还望读者不吝指正。

一、通信协议

        AXI协议本身是一种数据传输协议,其作用就是把数据从一端传输到另一端,也就是一种通信,所以我们首先来理解一下什么是通信协议。

        通信协议,简单说就是双方进行信息传递所遵循的某种规则,举一个最简单的例子,古代的烽火台就可以理解成一种通信协议:通信的双方约定当烽火台点起,就意味着有敌情,这就是一种最简单的通信协议。

7aeb210523b24d8f8b5c4da88b115048.jpeg

        但是考虑一些现实因素,有时候我们的通信会发生意外,信宿(接收方)无法正确收到信源(发送方)。那么为了使得信息能够确保正确的从一端传输到另一端,看我们就可以引入一个确认信号,当接收方正确收到信息,就给发送方发一个确认信号,如果发送方在一定时间内没有收到确认信号,就认为这次通信是失败的(不管是发送的信息丢失还是确认信号丢失)。

        还有的时候,发送方准备发送数据了,但是接收方却没有做好接收的准备,设想一下,这边烽火狼烟点着了,那边负责接收的工作人员睡着了(好像不太可能,但是在通信中接收端没准备好还是很常见的)。因此,为了确保我们的通信能够正常进行,在真正重要的信息开始传输之前,最好还能有一个建立传输的机制,这里不妨就称之为握手机制吧。

        还有一个问题,烽火台是单向的传输(边境—>中央),但是我们的信息通信有时候需要的双向可传输(你也不想打电话的时候只能听不能说吧),在专业的通信领域,会有很多的方式(例如使用不同的频段进行传输)来实现这一需求,但是对于总线的设计来说,简单才是最重要的,那就开设2个通道嘛,一个用于A->B,一个用于B->A 。

        说了这么多通信协议的内容,主要是因为这是我们理解AXI总线协议设计初衷的必要储备,我们学习总线协议,最低的境界是学会如何使用它,更高的境界是从设计者的角度去理解为什么要这么进行设计。

二、AXI 概述

        言归正传,首先我们来认识一下什么是AXI协议。AXI,是Advanced eXtensible Interface的缩写,其中文含义是高级可扩展接口,它是 ARM 公司所提出的 AMBA (Advanced Microcontroller Bus Architecture)协议的一部分。如今主流的是AXI4,本系列文章也是以AXI4为讨论主题。(AXI4不是意味着AXI的第四代,是因为其是ABMA4协议的一部分,最早的AXI是AXI3,如今在一些地方还依然能看,如今随着AMBA5的推出,已经出现了AXI5,不过版本间都是向下兼容,且变化不大)。

1、AXI特点

        AXI是一种面向高性能、高带宽、低延迟的片内总线,它具有如下的几个特点:

        (1)总线的地址/控制和数据通道是分离的;

        (2)支持不对齐的数据传输;

        (3)支持突发传输,突发传输过程中只需要首地址;

        (4)具有分离的读/写数据通道;

        (5)支持显著传输访问和乱序访问;

        (6)更加容易进行时序收敛。

        这里暂时不做深入的解读,我们随着学习的深入来逐步体会这些特点。

2、AXI优点  

        AXI在如今xilinx的FPGA中有着非常广泛的应用,必然有其特殊的优点,主要就体现在三个方面

2.1 生产性

        (1)将不同的接口整合到一个接口(AXI4)中,因此用户仅需要了解单个系列的接口即可。

        (2)简化了不同领域IP的集成,并使自身或者第三方IP的开发工具更简单易行。

        (3)由于AXI IP已经为实现最高性能、最大吞吐量及最低时延进行了优化,从而进一步简化了设计工作。

2.2 灵活性

        (1)支持嵌入式、DSP及逻辑版本用户

        (2)调节互联机制,满足系统要求,即性能、面积和功耗。

        (3)帮助设计者在目标市场中构建最具号召力的产品

2.3 可获得性

        (1)第三方IP和EDA厂商普遍采用AXI4标准从而使该接口获得广泛的应用。

        (2)基于AXI4的目标设计平台可加速嵌入式处理,DSP及连接功能设计开发。

2.4 优点 小结

        其实很简单,说白了就是好用,和搭积木一样,这个零件只要支持AXI接口,很多地方都能搭起来,而且性能还好,然后大家都在用,就这么简单。 

3、AXI分类

        AXI4下面也有细分:

AXI4(AXI4-full)高性能存储映射接口
AXI4-Lite简化版的 AXI4 接口,用于较少数据量的存储映射通信
AXI4-Stream用于高速数据流传输,非存储映射接口

        这里面设计到了一个概念:存储映射(Memory Map)。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。简单说就是主机会给出一个地址去对应从机的某个区域。       

        AXI4 协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI-Lite 为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而 AXI-Stream 接口则像 FIFO 一样, 数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速 AD、PCIe、DMA 接口等需要高速数据传输的场合。
 

三、AXI4 结构

1、通道结构

AXI4和AXI4-Lite包含5个独立的通道:

        (1)读地址通道(Read address channel,AR)

        (2)读数据通道(Read data channel,R)

        (3)写地址通道(Write address channel,AW)

        (4)写数据通道(Write data channel,W)

        (5)写响应通道(Write response channel,B)

        回想一下我们最开始聊的通信协议,首先分通道是因为会有两个方向的数据要传输,这里由于是存储器映射的方式,所以除了数据通道,还需要有地址通道2条,而这里的读响应通道,就像是我们之前说的确认信号,我们进行一个写操作,但是有没有写成功我们却不知道,所以引入了确认机制(写响应)。为什么没有读响应通道?你在读数据的时候自己有没有读到还能不知道嘛。

2、通道定义

        AXI通道定义:每一个独立的通道都包含一组信息信号、VALID信号和READY信号,用于提供双向的握手机制。握手机制我们之前也在通信协议的部分提到了,这里补充一下AXI的握手机制:

(1)所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。

(2)双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率

(3)只有当VALID和READY同时为高电平时,传输才会发生。

(4)信息的源端使用VALID信号表示当前通道地址、数据和控制信息什么什么时候有效

(5)目的端使用READY信号表示什么时候可以接受信息

  • 读数据通道和写数据通道都包含一个LAST信号,用来表示传输的最后一个数据。
  • 读数据通道和写数据通道都包含各自的地址通道,地址通道携带了请求所需的地址和信息。
  • 读数据通道由从机发送给主机,包含了读数据和读响应的信息,读响应的信号用于表示读数据是否操作完成。
  • 写数据通道由主机发送给从机,包含了写数据,然后通过WSTRB信号表示当前数据的哪个字节有效。
  • 写响应通道由从机发送给主机,包含了写响应信号,用于表示当前写操作是否完成。

        这里补充说一下last信号,在通信协议的部分,我们说到了通信前要建立连接,既然有建立,就应该要有释放,所以就要释放约定什么是最后一个数据,这就是我们的last信号。

四、总结

        本文我们主要介绍了什么是AXI协议,AXI协议的特点与优点,然后对于AXI协议非常重要的五通道结构进行了介绍,了解了五通道各自的作用,初步了解了AXI协议中至关重要的握手协议,这是本系列的第一篇文章,带领大家了解一下我们学习的对象,接下来的文章中,我们将正式开始AXI协议深层次的学习。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90211.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode1475. 商品折扣后的最终价格 【单调栈】

简单题 第一次错误做法 class Solution { public:vector<int> finalPrices(vector<int>& prices) {int n prices.size();stack<int> st;unordered_map<int, int> mp;int i 0;while(i ! prices.size()) {int t prices[i];if (st.empty() || t …

机器学习笔记 - 使用 AugMix 增强图像分类模型的鲁棒性

一、简述 图像分类模型能够预测与训练数据具有相同分布的数据。然而,在现实场景中,输入数据可能会发生变化。例如,当使用不同的相机进行推理时,照明条件、对比度、颜色失真等可能与训练集不同,并显着影响模型的性能。为了应对这一挑战,Hendrycks 等人提出了 AugMix 算法。…

SELinux 入门 pt.2

哈喽大家好&#xff0c;我是咸鱼 在《SELinux 入门 pt.1》中&#xff0c;咸鱼向各位小伙伴介绍了 SELinux 所使用的 MAC 模型、以及几个重要的概念&#xff08;主体、目标、策略、安全上下文&#xff09; 我们还讲到&#xff1a; 对于受 SELinux 管制的进程&#xff0c;会先…

WordPress用于您的企业网站的优点和缺点

如今&#xff0c;WordPress 被广泛认为是一个可靠、可扩展且安全的平台&#xff0c;能够为商业网站提供支持。然而&#xff0c;许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点&#xff0c;您可以确定世界上最受欢…

C#_GDI+ 绘图编程入门

官网提供相关API GDI 基本图形功能_drawing 高级二维和矢量图形功能_drawing2D GDI 图像处理功能_Imaging GDI 排版功能_text Windows 窗体应用程序提供打印功能_Printing 像素 构成图像的最小单位就是像素&#xff1b;屏幕上显示不管是位图或者矢量图&#xff0c;当描述…

Oracle跨库访问DBLINK

1. DBLINK的介绍 Oracle在进行跨库访问时&#xff0c;可以创建DBLINK实现&#xff0c;比如要将UAT的表数据灌入开发环境&#xff0c;则可以使用UAT库为数据源&#xff0c;通过DBLINK实现将查出的数据灌入开发库。 简而言之就是在当前数据库中访问另一个数据库中的表中的数据 2…

论文阅读:DIN-SQL: Decomposed In-Context Learning of Text-to-SQL withSelf-Correction

NL2SQL是将自然语言转化为SQL的任务&#xff0c;该任务隶属于NLP的子任务&#xff0c;NL2SQL在AIGC时代之前&#xff0c;以seq2seq、BERT等系列的模型在NL2SQL的主流数据集上取得了不错的效果&#xff0c;2022年底&#xff0c;ChatGPT爆火&#xff0c;凭借LLM强大的逻辑推理、上…

uniapp使用sqlite 数据库

uniapp使用sqlite 数据库 傻瓜式使用方式&#xff0c;按步骤&#xff0c;即可使用。 1.开启sqlite 在项目中manifest.json该文件中配置 2.封装数据库的调用方法 const sqlName "zmyalh" //定义的数据库名称 const sqlPath "_doc/zmyalh.db" //定义数…

[SQLITE_ERROR] SQL error or missing database (near “=“: syntax error)【已解决】

这个报的错误是语法错误&#xff0c;但是我并没有看出来这行代码有什么错。 通过排除掉下边两个问题解决的 从增加记录方法复制的下来的代码&#xff0c;只删除了关闭自动提交事务&#xff0c;但是connection.commit忘记删除executeQuery和executeUpdate方法的用法忘记了&…

分布式事务篇-2.1 阿里云轻量服务器--Docker--部署Seata

文章目录 前言一、Seata 介绍二、Docker 部署&#xff1a;2.1.拉取镜像&#xff1a;2.2.运行镜像&#xff1a;2.3.拷贝配置文件&#xff1a;2.4.部署&#xff1a;2.5.参数解释&#xff1a;2.5.1 端口&#xff1a;2.5.2 SEATA_IP&#xff1a;2.5.3 SEATA_PORT&#xff1a;2.5.4 …

JavaEE初阶:Java线程的状态

目录 获取当前线程引用 休眠当前线程 线程的状态 1.NEW 2.TERMINATED 3.RUNNABLE 4.WAITING 5.TIMED_WAITING 6.BLOCKED 多线程的意义 单线程 多线程 获取当前线程引用 public static Thread currentThread(); 这个方法返回当前线程的引用。但是我…

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…

算法-滑动窗口-串联所有单词的子串

算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…

ES 7.6 - JAVA应用基础操作篇

ES 7.6 - JAVA应用基础操作篇 环境准备依赖配置 实体类准备使用说明索引/映射操作创建索引和映射索引和映射相关查询删除索引 文档操作插入数据更新数据删除数据批量操作 文档查询根据ID查询根据字段精准查询根据字段分词查询控制返回字段范围查询组合查询排序分页高亮搜索聚合…

springboot定时任务:同时使用定时任务和websocket报错

背景 项目使用了websocket,实现了消息的实时推送。后来项目需要一个定时任务&#xff0c;使用org.springframework.scheduling.annotation的EnableScheduling注解来实现&#xff0c;启动项目之后报错 Bean com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration of t…

HTML <template> 标签

实例 使用 <template> 保留页面加载时隐藏的内容。使用 JavaScript 来显示: <button οnclick="showContent()">显示被隐藏的内容</button><template><h2>Flower</h2><img src="img_white_flower.jpg" width=&q…

36、springboot --- 对 tomcat服务器 和 undertow服务器 配置访客日志

springboot 配置访客日志 ★ 配置访客日志&#xff1a; 访客日志&#xff1a; Web服务器可以将所有访问用户的记录都以日志的形式记录下来&#xff0c;主要就是记录来自哪个IP的用户、在哪个时间点、访问了哪个资源。 Web服务器可将所有访问记录以日志形式记录下来&#xff…

二级评论列表功能

一&#xff1a;需求场景 我的个人网站留言列表在开发时&#xff0c;因为本着先有功能的原则。留言列表只有一级&#xff0c;平铺的。 当涉及多人回复&#xff0c;或者两个人多次对话后&#xff0c; 留言逻辑看着非常混乱。如下图 于是&#xff0c;我就打算将平铺的列表&#…

用C/C++修改I2C默认的SDA和SCL针脚

首先要说明一点&#xff1a;Pico 有两个 I2C&#xff0c;也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出&#xff0c;比如下图的 Pin 4 和 Pin 5是 I2C1 的&#xff0c;而默认的 Pin 6 和 Pin 7 是 I2C0 的。 默认情况下是只开启了第一个 I2C&#xff0c;也就是只有 I2C…

【大虾送书第四期】《Python之光:Python编程入门与实战》

目录 ✨写在前面 ✨本书亮点 ✨强力推荐 ✨文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 作为一种极其流行的编程语言&#xff0c;Python已经成为了当今最为重要的生产力工具之一。无论小学生…