AXI协议容易忽视的细节

这篇具有很好参考价值的文章主要介绍了AXI协议容易忽视的细节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多处翻译官方文档IHI0022E_amba_axi_and_ace_protocol_spec.pdf

基本的读写操作

握手协议

AXI具有5个独立的通道,每个通道都使用相同的VALID和READY的握手过程去传输地址、数据、控制信息等。双向握手带来的好处是主机和从机都可以控制传输的节奏。请求方的VALID信号的发出表示着地址、数据、控制信号的信息是有效的。应答方的READY信号的发出表示可以接收上述信号。仅仅当VALID信号和READY信号同时为高电平时,传输才正式发生
AXI协议容易忽视的细节

在T1之后,准备好地址、数据、控制信号VALID,在T2被采样,T3时刻时采样READY信号,完成一次握手,在完成握手之前请求信号将一直保持到T3,一旦VALID拉高请求方就必须等待握手的发生。请求方不可以在valid未拉高之前去判断READY信号。
AXI协议容易忽视的细节 在请求地址、数据、控制信号未准备好时,可以提前将应答READY拉高,当T3的上升沿时采样完成握手
在这种情况下传输只占用了一个周期的时间。应答方可以在未拉高VALID前等待VALID信号,如果READY已经拉高,则允许应答方在请求方VALID有效之前取消READY拉高

AXI协议容易忽视的细节在T1上升沿之后,请求和应答分别拉高对应信号,在T2上升沿信号的采样,完成握手。

通道信号规则

通道握手信号

每一个通道都有自己单独的VALID和READY握手信号
AXI协议容易忽视的细节

写地址通道

通信主机可以拉高AWVALID信号来表示地址和控制信号有效,当该信号拉高后必须要保持到从机拉高AWREADY的上升沿之后才能拉低。默认的情况下AWREADY可以为高或低,规范建议的情况为高(规范不建议默认AWREADY为低,因为这使得至少需要两个周期来传输,一个周期用来判断AWVAID,一个周期用来拉高AWREADY),当AWREADY为高的情况下从机必须可以接收任意的主机发来的有效信号。

写数据通道

在写操作期间,通信主机可以拉高WVALID信号来表示当前总线上的数据是有效的,当WVALID信号拉高,该信号就必须保持到从机拉高WREADY的上升沿之后才能拉低。默认情况下从机的WREADY可以为高,仅当从机有可以单周期处理数据的能力,主机必须要拉高WLAST信号,当突发的过程中写入最后的数据。

写响应信号

从机可以拉高BVALID信号,当驱动一个写响应时,当该信号拉高后必须保持到主机BREADY的上升沿之后才能拉低,BVALID信号可以默认为高,但是仅仅当主机可以在一个周期之内写入响应信号

读地址通道

在读操作期间,主机可以拉高ARVALID信号当地址和控制信号有效,当该信号拉高后必须保持到从机拉高ARREADY的上升沿之后才能拉低。默认情况下ARREADY信号可以为高电平或者低电平,规范建议高(规范不建议默认ARREADY为低,因为这使得至少需要两个周期来传输,一个周期用来判断ARVAID,一个周期用来拉高AREADY),当ARREADY为高的情况下从机必须可以接收任意的主机发来的有效信号。

读数据通道

从机可以拉高RVALID信号当读数据在总线上有效,当该信号拉高后必须保持到主机拉高RREADY的上升沿之后才能拉低。主机使用RREADY信号来表面接收数据,默认RREADY可以为高,仅仅当主机可以立刻读取的数据的情况下,从机必须在突发的最后一次传输时拉高RLAST信号

通道之间的关系

通道与通道直接需要遵循以下关系:
1.写响应通道必须在写突发最后的写传输后进行
2.读数据通道必须在读地址完成后进行
3.通道握手必须符合定义的依赖项
除此之外,通道与通道之间不存在任何关系。
这就意味着,写入的数据可以在写入地址之前产生,也可能产生在同一周期内

通道握手信号之间的依赖关系

为了防止死锁情况,必须遵守握手信号之间存在的依赖关系规则
1.请求方的VALID信号不能依赖于应答方的READY信号
2.应答放可以等待检测到VALID信号后再拉高READY信号,也可以在等待VALID之前拉高READY信号,这会带来更高的效率。
下图表中单箭头指向的信号可以在箭头开始信号之前或者之后变化。双箭头指向信号只能在判断箭头开始信号之后变化

读传输依赖

AXI协议容易忽视的细节

1.主机不能在ARRVALID拉高之前去等待从机的ARREADY
2.从机可以在ARRVALID拉高之后去拉高ARREADY
3.从机可以在ARRVALID拉高之前去拉高ARREADY
4.从机必须要等到ARRVALID和ARREADY都拉高之后,才能去拉高RVALID表示总线上读取的数据是有效的
5.从机不可在RVALID拉高之前去等待RREADY信号
6.主机可以在等待RVALID拉高之后去拉高RREADY
7.主机可以在等待RVALID拉高之前去拉高RREADY

写传输依赖

AXI协议容易忽视的细节1.主机不可以依赖AWREADY和WREADY来产生对应的AWVALID和WVALID
2.从机可以在AWREADY没有拉高之前,去等待AWVALID和WVALID
3.从机可以在AWVALID和WVALID拉高之前去拉高AWVALID
4.从机可以在WREADY没有拉高之前,去等待AWVALID和WVALID
5.从机必须等待WVALID和WREADY都拉高才可以去拉高BVALID
6.从机必须等待WLAST拉高之后才可以拉高BVALD
7.从机不可以在BVALID拉高之前去等待BREADY
8.主机可以在拉高BREADY之前等待BVALID
9.主机可以在bvalid拉高之前拉高BREADY

AXI4写响应依赖关系

AXI3与AXI4的区别在于AXI4协议中规定写响应通道必须在写通道和写地址 通道都结束之后才能回响应,进一步避免deadlock。
AXI协议容易忽视的细节
1.主机不可以依赖AWREADY和WREADY来产生对应的AWVALID和WVALID
2.从机可以在AWREADY没有拉高之前,去等待AWVALID和WVALID
3.从机可以在AWVALID和WVALID拉高之前去拉高AWVALID
4.从机可以在WREADY没有拉高之前,去等待AWVALID和WVALID
5.从机必须等待AWVALID、AWREADY、WVALID、WREADY都拉高才可以去拉高BVALID
6.从机必须等待WLAST拉高之后才可以拉高BVALD
7.从机不可以在BVALID拉高之前去等待BREADY
8.主机可以在拉高BREADY之前等待BVALID
9.主机可以在bvalid拉高之前拉高BREADY

传输结构

地址结构

AXI协议基于突发传输,主机开始发送地址和控制信号给从机,从机需要计算地址进行后续的突发传输。按照协议规定一次突发不超过4KB大小,这可以防止一次突发传输跨越两个从机,所以从机在地址划分时候需要最小4KB的地址增量

突发长度

突发长度由ARLEN[7:0]和AWLEN[7:0]决定
AXI-3支持1~16突发,在所有的突发模式,突发长度 = AXLEN[3:0] + 1
AXI-4支持1~256突发长度在INCR模式下,支持在其他模式下支持1-16的长度突发。突发长度 = AXLEN[7:0] +1
突发需要遵循以下规则:
1.在回环模式下突发,突发的长度只能为2、4、8、16
2.一次突发不能超过4KB的边界
3.不能提前终止突发(可以通过禁用位字节选通来间接停止数据的传输)

突发大小

突发大小表示可以在一次突发过程中传输多少个字节,突发长度由ARSIZE[2:0]和AWSIZE[2:0]决定。

AXI协议容易忽视的细节

突发类型

AXI有三种突发类型
1.固定突发:对于每次突发,突发的地址都是固定的,多用与fifo结构中。
2.自增突发:在递增突发中,每个传输的地址都是上一个地址的增量,增量的值取决于突发的大小,在突发大小为4的增量传输中,每次增量为4,多用于可以正常顺序访问的内存。
3.回环突发:回环突发首先自增突发,若地址达到上限地址将会复位到最初始地址。初始地址要与突发大小对齐,且突发的长度只能为2、4、8、16
AXI协议容易忽视的细节
突发种类由ARBURST[1:0]和WRBURST[1:0]决定

传输数据处理

读写数据总线需要处理总线上不同大小的传输,以及处理非对其的传输。

写选通信号strobes

WSTRB[n:0]在为高时发出信号,指定数据总线中包含有效信息的字节选通,写入数据总线每8个位都有一个写选通,WSTRB[n]对应于WDATA[(8n+7):8n]。当WVALID为低电平时,WSTRB可以为任意值 ,规范建议改信号为低或者保持之前的值。

部分位宽传输控制

当主机传输数据比总线宽度窄时,地址和控制信息将确定传输的位置,在自增突发和回环突发中,每次传输的选用不同的选通信号。在固定突发中,每次传输选用固定的选通信号。
8bit数据在32bit总线位宽的自增传输传输和32bit数据在64bit总线位宽传输示意图:
AXI协议容易忽视的细节
AXI协议容易忽视的细节

Byte invariance

Byte invariance 称为字节不变性,在计算机系统中存在大端存储(在memory中高位地址存低位,低位地址存高位)和小端地址(在memory中大端地址存高位,低位地址存低位)

AXI协议容易忽视的细节
AXI协议容易忽视的细节
在AXI协议中不考虑大端和小端模式,默认小端传输即地址0对应的byte一定是放到小端总线的data[7:0] 进行传输的。

非对齐传输

AXI支持不对其的传输,对于多个字节的传输可能会出现地址不对齐的情况,例如从非32bit对齐的地址进行32bit的传输,会跨越两个32bit的地址边界。
主机需要做响应的处理,将非对齐的地址传输进行对齐处理,地址对齐处理之后将不需要传输的字节通过位选通信号WSTRB来进行屏蔽。
例如:

AXI协议容易忽视的细节
AXI协议容易忽视的细节

读写响应

AXI协议为读写提供响应,对于读取事物,来自从机的响应通过读取数据通道上发出信号。对于写入事物,响应的信息在写响应通道发出。
响应信号为RRESP[1:0]和BRESP[1:0]
OKAY(大多数事物的响应):
1.正常访问成功
2. 独占访问失败
3. 独占访问的从机不支持独占访问
EXOKAY:表示独占操作完成
SLVERR
访问已经到达从机,但是从机无法响应,可能出现的情况包括:
1.FIFO出现上溢或下溢
2.传输大小不支持
3.对只读区域进行写操作
4.从机超时
5.访问powered-down的从机
DECERR:无法通过总线互联的地址分配找到对应的从机

AXI协议容易忽视的细节
读写响应发生在每一次的传输,而不是只正对于一组突发事件,在一组突发传输中可以发生不同响应信号,比如在读16突发中,可以发生15次OKAY信号和一次SLVERR信号。所以要求就算是DECERR响应信号,从机也必须发出对于主机请求的错误信号。文章来源地址https://www.toymoban.com/news/detail-464062.html

到了这里,关于AXI协议容易忽视的细节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • slint1.32 官方文档翻译00

    来源于 Slint 1.3.2 Reference 主要用 有道翻译,个人参考用。翻译不妥的,请指正。 目录: Slint 1.3.2 Reference Slint 1.3.2参考 INTRODUCTION 介绍 Getting Started 开始 Supported Platforms 支持的平台 LANGUAGE REFERENCE 语言参考 Introduction 介绍 Concepts 概念 .slint File 文件 Positioning and Layout of Elements 元

    2024年01月16日
    浏览(51)
  • slint 1.3.2 官方文档翻译06

    SlintPad 基于官方文档的个人翻译,主要使用 有道翻译。 Debugging Techniques - Slint 1.3.2 Reference ADVANCED TOPICS 高级的主题-- Debugging Techniques 调试技术   On this page we share different techniques and tools we’ve built into Slint that help you track down different issues you may be running into, during the design and dev

    2024年01月18日
    浏览(59)
  • OpenLayers7官方文档翻译,OpenLayers7中文文档,OpenLayers快速入门

    这个入门文档向您展示如何放一张地图在web网页上。 开发设置使用 NodeJS (至少需要Nodejs 14 或更高版本),并要求安装 git 。 开始使用OpenLayers构建项目的最简单方法是运行: npm create ol-app 第一个命令将创建一个名为 my-app 的目录(如果您愿意,可以使用不同的名称),安装

    2024年02月10日
    浏览(54)
  • 运维系列(仅供参考):官方文档翻译 -- 开始 Elasticsearch 入门

    想快速入门,来看 官方文档吧!!! 个人翻译版 Github地址,英语水平有限,有错误或遗漏的欢迎留言指正。 准备好如何使用 Elasticsearch 来测试驱动使用 REST APIs 来存储、查询、分析数据了吗? 遵循如下开始教程: 获取一个 Elasticsearch 实例并启动运行 添加索引实例文档 使用

    2024年04月27日
    浏览(62)
  • 【JAVA】最容易忽视的数据类型——枚举

    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 Java枚举是一个特殊的类一般表示一组常量,比如一年的 4个季节,一年的 12 个月份,一个星期的7天,方向有东南西北等。今天就让我们来学习一下在JAVA中这个特殊的类。 枚举是一种数据类型,用于 定义一组具有相同属性的

    2024年02月08日
    浏览(37)
  • java中容易被忽视的toString()方法

    之前一直认为toString就是将数据转换成字符类型,直到最近写出了一个bug才对toString有了新的认识 不同数据类型,toString() 有不同的操作 定义一个student类,包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的list类型 测试toString方法 运行结果,toString()方

    2024年02月21日
    浏览(59)
  • 快速傅里叶变换-FFTW库的使用-参考和翻译官方文档

    Plan:为实现意外结果的最佳方法而烦恼。 [Ambrose Bierce, The Enlarged Devil’s Dictionary。] FFTW 计算大小为 N 的一维 DFT 的基本用法很简单,它通常看起来像这样的代码: 您必须将此代码与 fftw3 库链接。 在 Unix 系统上,使用 -lfftw3 -lm 链接。 示例代码首先分配输入和输出数组。 您可

    2023年04月08日
    浏览(113)
  • 性能调优:容易忽视的JavaScript标签属性及其性能影响

    在性能优化中,我们都知道, async 属性可以让 script 标签变得不阻塞 HTML 解析, defer 属性也有类似的功能,但实际 defer 是会阻塞 script 解析的(用 defer 的话,多个 script 会按顺序执行,而 async 执行是无序的,谁下载的快执行谁),使用 async 属性理论上讲,是要比 defer 更快的

    2024年02月21日
    浏览(50)
  • Unity3d_Rewired官方文档翻译:概念(一):InputManager、Players、Actions

    仅翻译了官方文档中的Essentials(要点)、Concepts(概念)两部分,这是文档中最重要的部分,理解了这两部分的内容应该足以让你将Rewired运用到你的项目中,之后再去阅读文档的其他部分也能更容易理解。 斜体加下划线部分为添加的注解,非官方文档内容。若你发现有翻译

    2024年02月02日
    浏览(66)
  • 《如何搭建一条私有多Geth节点的链》最新版以太坊私链搭建官方文档要点翻译

    Last edited on January 31, 2023 This guide explains how to set up a private network of multiple Geth nodes. An Ethereum network is private if the nodes are not connected to the main network. In this context private only means reserved or isolated, rather than protected or secure. A fully controlled, private Ethereum network is useful as a backend for core de

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包