转载:https://blog.csdn.net/hit_shaoqi/article/details/53243173

Cachable和Bufferable
一个Master发出一个读写的request,中间要经过很多Buffer,最后才能送到memory。这些Buffer的添加是为了outstanding,timing,performance等。
Buffer有两种类型:一种FIFO结构,仅仅就是保存发送Request给下一级或者返回Response给上一级。还有一种Buffer,在接受了上一级的Request之后立刻给上一级回response,告诉上一级这个操作已经做完了,而实际上这个操作并没有发到下一级Buffer,更没有被送到memory。有的人可能就问,write的时候这样可以,read的时候则无法这么做。其实read一样有bufferable,如果此处buffer的write data channel有此read需要的数据,就可以直接返回,而不用去访问memory,如果没有,则要把Request发到下一级。
总之,所以的访问都要经过这些buffer,是否bufferable在于何时由谁回response,在于是否要把request送到最终的memory。
Cacheable
Interconnect其实只是一个路由的功能,内部有buffer,但并没有cache。而是在这个访问从Master发起request到送到最终的memory这个过程中,可能会经过一些cache,cacheable代表了是不是要去这个cache中查找自己需要的数据。要不要更新cache。
利用cache来提高性能,有些操作是要求绝对non-cacheable的,比如device 内部寄存器的访问,这些都是MMR。只能使用non-cachable。
AXI 五个channel所有的信号,可以是Master-Interconnect,也可以是Interconnect-Slave,也可以直接是Master-Slave。
outstanding 乱序与穿插
简单讲,如果没有outstanding,或者说outstanding能力为1,则AXI Master的行为如下:
读操作:读地址命令->等待读数据返回->读地址命令->等待读数据返回->读地址命令->等待读数据返回。。。。。
写操作:写地址命令->写数据->等待写响应返回->写地址命令->写数据->等待写响应返回。。。。。(如果支持out-of-order,对于AXI3,写命令和写数据不一定有先后顺序且ID顺序不一定相同,AXI4因为已经没有WID信号,所以写数据的顺序要和写地址的顺序一样)
而如果outstanding能力为N>1的话,则:
读操作:可以连续发N个读地址命令,这期间如果读数据没有返回,则需要需要等待读数据返回,如果有读数据返回,则返回了几个,那么仍然可以接着发几个。也就是说,“在路上” 的读命令(或者读数据)最多可以是N。多说一点,可以看出,如果数据返回得比较慢,那么IP需要等待,效率就会比较低,因此,为了提高效率,有必要提高outstanding能力,以弥补”路上“(总线)引入的延时。但是也不能无限制地发,有可能会引起总线拥塞,把其他IP给堵住。
写操作:可以连续发出N组写地址(写数据)命令,这期间如果写响应没有返回,则必须等待写响应返回才能接着发写地址(写数据)命令,如果有写响应返回,则返回了几个,那么仍然可以接着发几组。也就是说,“在路上” 的写响应最多可以是N。
out of order 和interleave
乱序和间插是两个完全不同的概念。笼统的说,乱序指的是burst这个粒度,而间插指的是beat这个粒度。
简单说了,乱序是salve返回master请求的out of order特性,但这个slave可以是广义上的,一般总线会完成这个功能;而间插(interleave)是指写数据,或是读返回数据,按找不同ID交织出现。比如:ID0 ID1 ID0 ID1....。乱序和间插都有深度,一般乱序深度比间插大的多。上面那个例子就是间插深度为2的情况。
exclusive 和lock
首先,Lock在amba2.0中就有涉及,意思是,某个master 可以通过Lock 总线来实现独占。只有当该master完成传输后才释放出总线。这样的话,总线的效率会降低。 2. 相比Lock,AXI 中引入了exclusive操作,不需要将bus锁定给某个master。而是通过TAG ID以及slave 返回的response来判断当前的传输是否成功。过程如下:
 1)mst 首先向slave的某个地址位置发起一个exclusive读操作。slave中的monitor会纪录下该mst的 ARID和 要访问的地址位置(返回EXOKEY)。
 2)mst向同一地址区域发起一exclusive写操作。slave同样要记录该操作的mst的 AWID 和 要访问的地址位置。如果AWID==ARID && 该地址内容没有改变(没有 其他的mst访问过),这个写操作就是成功的。该地址就会更新,同时slv会返回EXOKEY. 否则,slv会返回OKEY.
 由此看来,对于exclusive操作,总线其实允许其他mst同时来请求总线。比如,当其他mst要同时通过总线访问其他的slv时,上述2)就不满足,所以总线就不会被锁定。
————————————————
版权声明:本文为CSDN博主「南方铁匠」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hit_shaoqi/java/article/details/53243173

AXI协议中的模棱两可的含义的解释(Cachable和Bufferable)的更多相关文章

  1. HTTP协议状态代码和错误状态含义的解释

    面试互联网公司经常被问的就是HTTP协议的知识,甚至比TCP/IP问的还多,其中HTTP代码的知识也是开发过程中经常会接触的,今天学习所有 HTTP 状态代码及其定义. 代码  指示     2xx  ...

  2. Protocol buffer序列化及其在微信蓝牙协议中的应用

    Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关.平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用.目前其已经提 ...

  3. Linux: 介绍make menuconfig中的每个选项含义【转】

    转自:http://blog.csdn.net/gaoyuanlinkconcept/article/details/8810468 介绍make menuconfig中的每个选项含义 Linux 2 ...

  4. 关于 AXI协议的学习解释说明

    AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...

  5. 说说http协议中的编码和解码

    http://www.csdn1 2 3.com/html/itweb/20130730/29422_29378_29408.htm ****************************** 一. ...

  6. 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...

  7. AXI协议(一)

    最近弄Zynq,不懂AXI协议Zynq很难玩儿的转.这些笔记主要攻克AXI中的一些难题. 所有的AXI4包含了5个不同的通道:     (1)读/写地址通道(Read/Write address ch ...

  8. Http协议中的get和post

    Http中post和get区别,是不是用get的方法用post都能办到? Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符 ...

  9. tcp协议close_wait与time_wait状态含义

    题目描述 1.什么是三次握手,四次挥手?为什么分别要三次与四次? 2.tcp协议中,close_wait与time_wait状态分别代表什么含义,为什么要设计这两种状态,解决了什么问题? 3.time ...

随机推荐

  1. python工作中总结

    以下方法平时很少用,用其它解决方法,只是总结了一些其它同事的技巧 1   如何自动生成列表,加一个条件还能筛选 [x for x in range(10) if x>5 ] 来生一个字典试试 d ...

  2. Nginx:进程调度

    Blog:博客园 个人 Nginx采用的是固定数量的多进程模型,由一个主进程(MasterProcess)和数量与主机CPU核数相同的工作进程协同处理各种事件. 主管理进程负责工作进程的配置加载.启停 ...

  3. 记一次k8s pod频繁重启的优化之旅

    关键词:k8s.jvm.高可用 1.背景 最近有运维反馈某个微服务频繁重启,客户映像特别不好,需要我们尽快看一下. 听他说完我立马到监控平台去看这个服务的运行情况,确实重启了很多次.对于技术人员来说, ...

  4. 防刷功能的实现(thinkphp5)

    $seconds = '3'; //时间段[秒] $refresh = '3';//最大次数 $cur_time = time(); if(Session::get('refresh_times')) ...

  5. P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P4022 题目大意 给出\(m\)个模板串. 然后\(n\)次询问给出一个串\(S\)要求找到一个最大的\(L\)使 ...

  6. Python3入门系列之-----算术运算符|比较运算符|赋值运算符|逻辑运算符|成员运算符|身份运算符

    什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 1 +2 = 3 . 例子中,1 和 1.2 被称为操作数,"+" 称为运算符. Python语言支持以下类型的 ...

  7. JDBC连接mariadb时使用依赖

    问题描述:最近在尝试使用mariadb,使用idea开发,在使用jdbc连接数据库的时候,一般会用到driver,user,pwd,url,使用mysql的例子太多了,也有很多详细的教程,但是现在尝试 ...

  8. python class自身返回值研究

    在python中,如果你写了这样一串代码: import datetime a = datetime.date(2021, 9, 1) b = "2021-09-01" print ...

  9. oracle查看和修改session和最大连接数

    第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes NA ...

  10. xLua中C#调用Lua

    C#调用Lua 一.前提 这里使用的是XLua框架,需要提前配置xlua,设置加载器路径: 可以参考之前的Blog:<xlua入门基础>: 二.C#调用Lua全局变量 lua中所有的全局变 ...