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

深入理解AMBA总线协议(AXI总结篇)

AXI总线已经是AMBA总线中最常见,使用最频繁的总线,并且没有之一。

可以说AXI总线已经成为了片上总线中最重要的协议,本篇文章打算花一些篇幅,帮大家总结一下AXI总线的学习重点、学习难点,以帮助大家更好更快的掌握AXI总线。

一、什么是总线(Bus)

1.1、什么是片上总线

要理解AXI总线,首先要理解什么是总线。大家刚接触总线的时候千万不要纠结于具体的概念,可以简单的理解成几根线按照规定的方式通信即可。

对于芯片设计而言,可以简单的理解,总线就是一组通信规范,允许系统中不同组件之间进行传输。

AMBA总线,包括AXI属于片上总线(On-chip Bus),它用于芯片内部中各个模块之间的通信。

总线可以简单的分为设备之间的总线和片上总线。其中设备之间的总线有时候也可以叫做传输接口,比如最常见的UART串口,硬盘的PCIE、SATA接口。显示器的HDMI接口,电脑的USB、Type-C接口等。这些传输接口往往更注重设备的电气特性、稳定性。这是另外一套大的话题,后面可以单独开个专题讲一些常见的传输接口。

而另外一种总线就是我们今天要聊的话题,片上总线。所谓片上总线。顾名思义,就是同一个芯片上(一般指SoC系统),各个模块(IP核)之间的数据通信方式。比如大家都设计好了自己的模块,要集成在一个芯片上。如果都能满足类似的通信方式或者接口,那集成起来就非常的方便,其实片上总线的规范制定也是考虑到可扩展性。一般片上总线要满足以下的标准:

对频率和数据吞吐量有较高的要求

扩展性强,能够很方便扩展更多模块

常见的片上总线有Wishbone(部分MIPS芯片使用)、Avalon(Altera芯片会使用)、Tilelink(UCB用在其RISC-V项目中)、AMBA(绝大多数SoC会使用)。

1.2、总线中常见的名词和组件

接下来我们谈谈总线中常见的组件。以下说的这些概念和机制对任何常见的片上总线都是成立的。

首先是Master和Slave。前面已经说到了,总线是用来进行数据传输用的,那么既然是数据传输,必然有发起方和接收方。一般我们称之为Master和Slave。

在这里插入图片描述

对于命令而言,是由Master发给Slave,而数据可以是双向传输的。比如可以是Master写给Slave,也可以是Slave返回数据给Master,甚至还可以是两者都有。Master和Slave的区分关键在于命令(这次传输)是谁发起的。

除了Master和Slave,总线中一般还包括哪些组件呢?比如有多个Slave的时候,那么自然要确定你的命令是发给哪个Slave的,这个时候我们就需要地址译码器。而当Slave返回数据的时候,Master需要知道是哪个Slave回的数据,因此还需要MUX选择器。
在这里插入图片描述

如果我们有多个Master的时候,就需要仲裁器来选择到底是哪个Master可以发起某次通信,上述的这一套仲裁译码等机制,可以组合在一起,构成片上互联(Interconnect)。所谓的互联,可以理解为把所有模块的通信集成在一起。基于互联系统可以完成Master对Slave的访问而不用在乎互联的内部实现细节(对于IP设计者而言)。

1.3、什么是AMBA总线

AMBA全称Advanced Microcontroller Bus Architecture。即高级微控制总线架构。首先高级是针对那个年代而言的,其实也没有多高级。然后是Microcontroller,微控制器,可以知道它最初是用在微控制器上,实际上就是ARM自己的处理器上。然后Bus Architecture,即总线架构。

AMBA协议是一个公开标准的片上芯片互联协议。(AMBA没有版权费,大家都可以使用,协议都是公开的)

提供接口标准使IP可以服用(IP reuse,加速设计和集成)

移动领域和物联网领域使用最广泛的片上总线,没有之一(桌面领域我不清楚)

然后我们看一下AMBA的发展历史,对于大家来说,学习APB、AHB和AXI就行。我相信如果大家已经学习到ACE和CHI了,也不用看我这篇文章了。而最最重要的就是AXI。

在这里插入图片描述

二、AXI总线的学习路线

大家有了总线的基本概念以后,便可以开始学习AXI总线,以下是我推荐的AXI总线的学习路线。

2.1、第一阶段:带着问题去看源文档

学习AXI总线之前,首先我们要知道为什么会出现AXI总线,即它设计之初是为了解决什么问题的,没有AXI总线会怎么样?

AXI总线是ARM公司在其第三代AMBA中推出的,称之为AXI3.0,有时候也可以叫做AXI1.0。其设计的目的是针对高性能、高时钟频率的系统设计,用于在这些场景替代AHB协议的。针对这一特点,我们可以思考一下,为什么AXI的性能就高了?为什么AXI可以跑到较高的时钟频率?

带着这一问题去看协议,就可以明白AXI提高性能最主要的因素是因为,AXI是读写通道分离的,其作为全双工的协议,自然比AHB这样的半双工协议快,此外AXI是基于握手机制的,并且通道之间的握手没有1T cycle delay的要求。因此这么多复杂的东西不需要一个时钟周期就全部算完,可以插入寄存器逻辑,自然可以提高主频。

类似的点还有很多,我帮大家总结了一下,大家可以先带着这些问题去思考,然后去看AXI协议,知道这些信号设计的目的是什么,即使协议看不太明白,也不至于不清楚为什么要有这个东西。这种感觉就像之前学数学课,即使你看不太明白推导,但也不至于完全不清楚为什么要有这个东西。

如何提升主频以及保证数据安全?->AXI的握手机制

数据不是顺序回来的怎么办、想多发几个命令出去怎么办?->AXI的Out of Order、Outstanding、ID机制

现代多核处理器中的数据一致性如何保证?->AXI的原子访问机制和Response相关信号

非对齐访问如何实现?->AXI支持非对齐访问

现代处理器中往往有Cache和Buffer,AXI怎么支持?->AXI的Cache信号

现代处理器往往有特权访问、安全访问等机制,AXI如何支持?->AXI的PROT信号

大家带着这些问题,然后去看文档,边看边思考。理解AXI为什么要设计这些信号,先不用在意实现细节,具体哪些比特代表啥,先知道有这么一回事就行。并且边看边补充一些计算机组成原理和操作系统相关的知识,这是第一阶段。

2.2、第二阶段:自己动手设计简单的AXI IP模块

在完成第一阶段以后,基本都会对AXI协议有个初步的了解,但毕竟纸上得来终觉浅,绝知此事要躬行。完成AXI协议的了解以后,应该自己动手去设计具有AXI接口的Master和Slave。

不一定要特别复杂。这里建议可以从最简单的AXI-lite开始,设计一个AXI-lite的从机,然后可以通过AXI-lite给它配置相应的寄存器。配置寄存器这一部分可以在TB里面完成。

然后可以设计一个相对复杂点的AXI-full的Slave,比如AXI2RAM模块,该模块可以支持突发乃至Outstanding,甚至可以支持乱序,完成该模块以后工作中再遇到AXI-Slave设计,至少心里不会虚,并且面试基本可以应付大部分问题了。

最后可以再设计一个AXI Master,从主机和从机两个不同的维度深刻理解AXI协议的通信机制,这个主机同样的也可以支持Outstanding乃至乱序。这里建议设计一个AXI DMA,非常的锻炼人。

上述的这些模块设计可以去网上如github找些开源的AXI IP,参考别人的设计理念,然后再自己动手做,毕竟能一次自己做出来,基本上是不可能的。

2.3、第三阶段:学习AXI接口验证以及AXI互联IP

首先说AXI接口验证,其实工作中大家写完了AXI的IP,并不知道是否符合AXI的通信要求,很多公司可能会用VIP,能给各种AXI的激励,然后大家根据自己IP的结果判断设计的是否合理。大家可以想一想这个VIP到底是怎么设计的,如果让你来设计,你会怎么做。

然后是AXI互联IP,前面已经说过什么是互联了,由于总线互联非常复杂并且非常重要。实际上大多数公司会采用买总线互联IP的方式。大家可以自己动手设计一个简单的互联IP,让自己设计的Master和Slave挂在上面,然后看能否建立通信,如果没问题的话,可以进一步的学习如何使用第三方IP,比如典型的NIC400。

三、一些AXI面试常问的问题

最近移知对AMBA课程进行全面升级,打磨了《AMBA进阶之AXI总线实战》课程。本人非常有幸受邀移知教育参加它们的课程体验官活动,有幸成为了AMBA-AXI课程的首席体验官。该课程基本符合我推荐的AXI学习路线。并且给大家解决了AXI学习中会碰到的疑难问题。

课程系统全面解读AXI总线协议,帮助学习者快速定位到具体实际问题,解决面试和实际项目中常见难题,如outstanding机制、握手机制原则、out of order机制,死锁问题等。

在协议的理解基础上,提供Masrter和Slave的设计案例模块,通过循序渐进的方式,理解RTL源代码,掌握AXI接口的视线。

在这里插入图片描述
在这里插入图片描述

目前秋招已经开始了,关注我的很多都是学生朋友,大家学习AXI的目的可能也是为了吊打面试官,找到满意的工作。下面给大家分享一些我之前参加面试以及我面试别人,常问的一些AXI相关的问题。

AXI和AHB的区别在哪里,为什么AXI相比AHB有明显的性能优势?

AXI3和AXI4的区别在哪里?

Exclusive访问是什么?它的实现机制是什么?相比于Lock Access的优势是什么?

AXI的outstanding数量如何计算?

Burst中的WRAP类型,如何计算上下界地址?

AXI哪些情况可能出现死锁,如何避免此问题?

AXI Stream中如何进行反压?

AXI中各个Channel之间的依赖关系是什么?

如何计算AXI最大传输带宽?

Interleave和乱序的区别是什么?

AXI的Out of Order应该怎么去实现?

如果大家能把上述的问题都答出来,那恭喜大家,AXI已经掌握的很好了。去参加面试这部分的内容不会成为你的障碍了。如果仍然有不会的,那还需要继续学习。

大家加油,祝大家早日掌握AMBA总线!

相关文章:

深入理解AMBA总线协议(AXI总结篇)

AXI总线已经是AMBA总线中最常见,使用最频繁的总线,并且没有之一。 可以说AXI总线已经成为了片上总线中最重要的协议,本篇文章打算花一些篇幅,帮大家总结一下AXI总线的学习重点、学习难点,以帮助大家更好更快的掌握AXI…...

建立无需build的react单页面应用SPA框架(2)

react-18.1.0,rc-easyui-1.2.9,babel-7.17.11 SPA还要处理的问题: (一)tabs切换事件通知 tabs切换时,自己的框架需要处理组件的生命周期,要有active/deactive,让组件能知道何时创…...

C# char曲线控件

一、char曲线显示随机数数据 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using Syst…...

远程访问本地jupyter notebook服务 - 无公网IP端口映射

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…...

flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法

flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法 一、背景二、相关技术博客三、flume层面解决方法四、debezium数据采集层面解决方法一、背景 Debezium采集了大量的数据,数据包含DMl语句,数据本身比较大。flume消费了大…...

Could not find artifact com.pageOffice:pageOffice:pom:4.3.0.2 in aliyunmaven

Could not find artifact com.pageOffice:pageOffice:pom:4.3.0.2 in aliyunmaven (https://maven.aliyun.com/repository/public) 仓库服务 阿里云云效 Maven 是什么 阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库,帮助研发人员提高研发生产效率&#x…...

2023年9月数据治理/项目管理/产品管理/商务礼仪企业内训定制

在节奏飞驰、风起云涌的企业世界中,为了企业的蓬勃发展,可以在内部或者外部挑选有经验的老师进行培训和学习。简而言之,任何一个企业想要发展,都少不了进行内训。 企业内训的好处 提高员工的技能和知识水平 通过不断地学习和培训…...

后端面试话术集锦第 九 篇:Activiti工作流面试话术

这是后端面试集锦第九篇博文——Activiti工作流面试话术❗❗❗ 1. 工作流话术 工作流这块儿,实际在工作中使用的时候,Activiti用的居多,当然还有一些其他的工作流引擎。 在网上看了也大概看了一下,其他的像JBPM以及workflow等用的情况来讲不是很多。 所以说Activiti目前…...

JS中方法、函数、属性是一个东西吗

在 JavaScript 中,方法、函数和属性是相关但不完全相同的概念。 方法(Method):在对象中,方法是对象的属性,但它的值是一个函数。方法可以通过对象来调用,并且可以访问对象的属性和其他方法。 …...

面经:微服务

文章目录 参考资料一. 微服务概述1. CAP理论2. BASE理论3. SpringBoot 与 SpringCloud对比 二. 服务注册:Zookeeper,Eureka,Nacos,Consul1. Nacos两种健康检查方式?2. nacos中负责负载均衡底层是如何实现的3. Nacos原理4. 临时实例和持久化(非临时)实例 …...

K8s 持久化存储有几种方式?一文了解本地盘/CSI 外接存储/K8s 原生存储的优缺点

当今云原生环境中,Kubernetes(K8s)已成为既定的容器编排工具。随着 K8s 的普及,存储也成为 K8s 用户关注的一个重要问题:为了满足不同的场景需求,K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么…...

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统,能够更快速的查询信…...

【Hello Algorithm】链表相关算法题

本篇博客介绍: 介绍下链表相关的算法题 链表相关算法题 快慢指针回文结构链表将单向链表按某值划分为左边小,中间相等,右边大的形式复制带随机指针的链表 链表相关的算法题其实都算不上难 我们真正要考虑的是一些边界问题 事实上链表题就是在…...

自动化管理管理工具----Ansible

目录 ​编辑 一、Ansible概念 1.1特点 二、工作机制(日常模块) 2.1 核心程序 三、Ansible 环境安装部署 四、ansible 命令行模块 4.1command 模块 4.2shell 模块 4.3cron 模块 4.4user 模块 4.5group 模块 4.6copy模块 4.7file模块 4.8ho…...

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份,图像中间的舍弃,其他部分图像对应边框的相应区域放置,上右下左四角固定,border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…...

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…...

Redis内存空间预估与内存优化策略:保障数据安全与性能的架构实践

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 「java、python面试题」…...

【zookeeper】zookeeper集群安装

环境规划 实际的生产使用中,我们一般推荐搭建奇数多节点的zookeeper集群,如3/5/7。在本次测试中,我使用了centos7 三台服务器搭建,复用了我搭建k8s集群的环境,如下表。 IPhostname192.168.2.140k8s-m1192.168.2.141k…...

CUDA小白 - NPP(2) - Arithmetic and Logical Operations(1)

cuda小白 原文链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xff0c…...

计算机视觉-LeNet

目录 LeNet LeNet在手写数字识别上的应用 LeNet在眼疾识别数据集iChallenge-PM上的应用 LeNet LeNet是最早的卷积神经网络之一。1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,在手写数字识别任务中取得了巨大成功。LeNet通过连续使用…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...