• AXI非常用信号说明


    1. AXI4中trans相关的特殊信号

    SignalsourceDescription
    AxLOCKMasterLock type. This changes between AXI3 and AXI4.
    AxCACHEMasterMemory type.This changes between AXI3 and AXI4.
    AxPROTMasterProtection type.
    AxQOSMasterQuality of Service, QoS.Implemented only in AXI4
    AxREGIONMasterRegion identifier. Permits a single physical interface on a slave to be used for multiple logical interfaces. Implemented only in AXI4. 
    AxUSER/XUSERMaster/SlaveUser signal. Optional User-defined signal in the write data channel.
    Supported only in AXI4
    xrespSlaveThis signal indicates the status of the write/read transaction
    AxDOMAINMasterThis signal indicates the shareability domain of a read/write transaction.
    该信号属于ACE接口,容易被误解,所以这里提出来做对比


    上表给出了AXI4的一些特殊信号,有些是之前AXI协议没有的。有些是和之前协议定义不一致的。下面会分节介绍。

    1.1 AxLOCK

    1.1.1 原子操作(atomic access)

    AxLOCK信号是和原子访问有关的信号。原子访问是在没有另一个请求者干扰的情况下执行的读-修改-写序列,或者说允许请求者修改内存的特定区域的数据,同时确保其他请求者的写入不会破坏数据。

    AxLOCK在AXI3和AXI4中有不同的定义。AXI3中是2bit,AXI4是1bit。AXI3支持Locked和Exclusive操作,而AXI4只支持Exclusive操作。

    对比上表可以发现AXI4只有Normal access和Exclusive access。

    1.1.1 Locked access

    在互联网络中如果存在Locked的trans,那么互联网络必须阻止其他master的trans对locked地址的访问。另一方面master在发locked trans【包括读和写】时候,该master必须确认其他发出的trans都已经完成。

    一个完整的locked trans序列最后必须以一个unlocked的trans结束,它们的AxID一致。等这个unlocked trans结束了,才认为一次locked完成。

    所以根据上面的描述,locked trans对整个互联的性能是有影响的。

    1.1.2 Exclusive access

    Exclusive access一定是包含了一读一写的过程。先Exclusive read,rresp返回OKay,说明slave不支持Exclusive操作,后续就不用发送Exclusive write了。如果返回ExOKay,则后续可以继续发送Exclusive write,在发送Ex read和Ex write中间,如果没有trans改写Ex trans对应地址空间的数据,那么bresp就返回Exokay,此时标志一次完整的Exclusive access成功完成。如果有其他trans改写了该地址,那么就返回Okay,标志着Exclusive access失败。

    Exclusive 的一次read和write必须是相同AxID,AxADDR,AxBurst,Axsize,AxLen。slave要支持Exclusive就必须对Exclusive read覆盖的地址空间进行监控,所以需要额外的Monitor。

    在Ex read之后,Monitor又检测到其他的Ex read,那么Monitor会放弃第一次的Ex addr而监测第二次的Ex addr。那么第一次AxID对应的Ex write再发过来只能是返回Okay,也就是第一次AxID对应的Ex access失败。

    为了保证Ex trans能够到达具有Monitor的slave端,而不是中途被buff或cache存储,要求AxCACHE设置为non-buffer或者non-cacheable。

    相比Locked access,Exclusive不会阻塞其他master的访问,对性能友好了。

    可参考:

    AXI之原子操作_axi原子操作-CSDN博客

    1.1.3 AXI5/CHI5与原子事务

    对于AXI4/3的Exclusive access来讲,虽然一定程度上改善了带宽利用率问题,但是还会有其他的问题,当master和slave距离较远,一次Ex read和Ex write的延迟就比较大。比如说Processor0需要将当前数据与较远的DDR或cache中Addr0的数据相加,然后再写入该地址Addr0,这个过程latency就比较大。同时其他master是不能访问Addr0的时间就比较长。

    为了解决这个问题AXI5和CHI5都增加了原子事务【同时为了支持ArmV8的原子指令,反过来说V8原子指令也是为了提高指令执行性能】。原子事务允许将operation发送到data,从而允许operation在data所在位置附近进行执行。原子事务适用于data与要执行operation的agent距离很远的情况。具体怎么实现的我们在举例说明:

    P0直接将当前操作数据data1和运算类型(比如说atomic_add)发送到addr0数据所在的地方,然后在addr0数据所在的地方把数据data0读取出来与发送过来的data1做运算,然后再写入addr0.

    这个过程只有一次write data1的传输。降低了时延提高了性能。

    需要注意的是,一次原子事务虽然只有一次write trans,但是包含了对addr0的一次读+一次写。

    为了支持原子事务,AXI5又增加了不少信号,比如发送操作指令的AWATOP[5:0]。可参考:

    AXI5原子操作一协议翻译

    AXI原子操作总结

    另一方面需要addr0处具有完成operator的逻辑计算单元ALU。目前基本没见到在DDR侧有ALU单元的,原子事务一般实现在cache一致性互联网络中的HN节点。可参考:

    AMBA CHI协议导论-CSDN博客 文章中第9章原子操作

    其中原子事务有以下4类,Atomic_store和Atomic_Load又有一些子分类,这里不在详述,可参考AXI5的spec。

    AWATOP[5:0]描述
    0b000000非原子操作
    0b01exxxAtomicStore
    0b10exxxAtomicLoad
    0b110000AtomicSwap
    0b110001AtomicCompare

    1.2 AxCACHE

    AxCACHE信号描述了trans的以下属性:

    主要涉及到:

    • trans是否会被buffer(主要针对写,能buffer就说明响应信号可以在buffer节点返回,而不用等到DDR);
    • trans是否能够在传输过程中被修改
    • 在能够cache的情况下,如果miss了要不要allocated cacheLine

    该信号在AXI3和AXI4协议中的bit位含义稍有改变。下面将分开来讲。

    1.2.1 AXI3中AxCACHE含义

    1.2.1.1 AxCACHE定义的trans属性

    该信号 在AXI3中,4bit的AxCACHE编码如下:

    bufferable:多用在write操作中,表示可以由一个中间节点来返回response信号。当AxCACHE[3:2]!=0时,用于区分write-back和write-through。

    cacheable:在读操作中,表示可以prefetch一些数据或者多个读trans合并成一次读,在写操作中,表示可以将不同的write merged together。【这一段是翻译AXI3 spec原文】。下面给出了一些根据spec描述能想到的场景:

    1.一个传输切分成了多个传输

    2.多个传输合并成了一个传输

    3.读传输多抓了一些数据存在Cache里

    4.写传输激活了更大范围的地址空间

    简单对第2,3个场景做个说明,其他的类似。

    多个传输合并成了一个传输

    先后发送了两个burst读传输操作,前一个是针对于32bit数据通路的低16位进行,后一个是针对于32bit数据通路的高16bit进行,其他的burst参数一致,假如我们设定了modifiable后,在outstanding传输机制中,我们更倾向于将其合并,将两个读操作进行合并为一个来进行,当然这里面涉及到很多的考量,比如说地址之间依赖关系,或者是什么情况下可以进行合并、等等等。但若是这些事情都被解决了,传输的合并势必会提高整个AXI协议的效率。

    读传输多抓了一些数据存在Cache里

    之前就一直在讨论Cache中应该放什么样的数据,什么样的数据价值更高,一个普遍的观点是,假如我们抓取了0x0000_1000这个地址的数据,那这个地址周边的数据如0x0000_0111这种的离得很近的地址最终被读取的可能型一定比地址离它远的高,因此我们可不可以把它周边的数据也同样放到离CPU更近的位置来提高效率?cacheable给出了这种操作的可能性。

    Read Allocate (RA) :为1时表示,当前为read trans,当read miss的时候,需要read allocate。只对read trans有效,且只在cacheable=1时有效。

    Write Allocate(WA):为1时表示,当前为write trans,当write miss的时候,需要write allocate。只对write trans有效,且只在cacheable=1时有效。

    1.2.1.2 AxCACHE取值关联的memType

    AxCACHE取值是对读写trans的属性的描述,但是trans的数据属性和memType及cache的操作有关,比如device mem是不支持cacheable的,那么axCACHE[3:1]===0.

    AXI3的spec定义了如下关系:

    其中AxCACHE[3:0] = 4'b0010时,对应的是cacheable,but do not allocate。既然是non-allocate,怎么是cacheable呢?

    实际上这里的cacheable和mem 属性的cacheable并不相同【所以在AXI4中修改了bit[1]的名字为modifiable】,如1.2.1.1节描述,这里是指原始trans请求在传输过程中可以改变,比如merge和preFetch。

    AxCACHE=4'b0010的时候,trans是不会到cache中查找对应数据的。

    真正的需要去cache中查找都需要带write-back和write-through属性的。所以只要带上这两个属性的,后面至少有一种allocate属性。

    那么write-back或write-through时,只有read allocate,写一定会miss吗?

    答案是否定的,write-back或write-through时,还是首先查询cache,对应的cacheLine可以由之前的read allocate分配【为了区分这种allocate,在AXI4中定义了other allocate】。如果真的miss了,由于是write nonallocate的那就只能直接写到ddr中。

    1.2.1.3 cacheable的疑问
    1.cacheable(modifiable)到底和cache有没有关系?

    由1.2.1.2节AxCACHE=4'b0010来看,cacheable(modifiable)并不一定对数据进行真的缓存,而只是trans可以在传输过程被修改。

    但是能够缓存数据的时候,cacheable(modifiable)肯定为1.

    那么就可以这么理解,凡是有cache的,它是一定支持trans merge和预取的。但是支持trans merge和预取的可以不用cache,而使用其他逻辑来实现。

    但是具体怎么脱离cache来实现,目前没有看到实际的例子。我能想到的还是像在AXI trans convert模块中做的那样。这样就引入一个问题,我们平常使用的AXI trans convert在设置AxCACHE的时候为啥是4'b0000?

    2.cacheable(modifiable)和我们平常AXI trans convert中的trans merge,preFetch是什么区别

    常用的AXI trans convert模块可以做trans merge,trans拆分,AXI数据位宽转换,为对齐多读数据等操作,和cacheable(modifiable)的描述基本一致,那为啥在AXI trans convert时AxCACHE没有设置为4'b0010呢?

    我想应该主要区别在于AXI trans convert的转换是一个双向的。举个例子,两个相邻地址的读trans,在AXI trans convert之后变成一个读trans,在返回一个burst的数据之后,经过AXI trans convert,又被拆分为了两个trans。如果不拆分, AXI trans convert的master侧看到trans就不匹配。-----这个理解不一定正确,cacheable的read merge之后,返回数据,不拆分为两个resp,原来的master怎么能知道被merge的trans数据返回了呢?

    上面标红的两段还没有确切的答案,等待有实例后更新,或者有读者朋友可以补充吗?

    1.2.2 AXI4中AxCACHE含义

    1.2.2.1 AxCACHE定义的trans属性

    和AXI3有两点区别:

    • 将AxCACHE[1]的命名由cacheable改为了modifiable,更符合属性含义,真正的cacheable只是modifiable的充分不必要条件
    • 对AxCACHE[3:2]引入了other allocate的概念

    关于第一条修改,只是属性命名修改,不影响实际的实现。对于第二条,区分了读写trans。

    对于读trans,ArCACHE[3]就是other allocate。含义是读trans的cacheLine可以来自一下两个过程

    • 该cacheLine是被读trans之前的write trans所allocate
    • 该cacheLine是被读trans之前的其他master的读写所allocate

    对于read trans,ArCACHE[2]含义和AXI3一致,表示read allocate。

    对于写trans,AwCACHE[2]就是other allocate。含义是写trans的cacheLine可以来自一下两个过程

    • 该cacheLine是被write trans之前的read trans所allocate
    • 该cacheLine是被write trans之前的其他master的读写所allocate

    对于write trans,ArCACHE[3]含义和AXI3一致,表示write allocate。

    无论对于 write allocate,read allocate还是other allocate,都是属于cacheable,且一定对应着write-back或者write-through。所以此时无论读写都要首先在cache中查找数据,另外AxCACHE[1]一定为1.另外如果只有other allocate,读写在查找cache miss的时候,本次读或写是不会allocate的

    只要是write-back或write-through,无论allocate情况如何,读写都要首先在cache中查找数据。

    1.2.2.2 AxCACHE取值关联的memType

    相比AXI3有了一些新的memType,如下:

    小括号中的编码是为了和AXI3兼容,在AXI4中都支持。

    AxCACHE[3:0]=4'b0010,这里面就变成了non-cacheable non-bufferable,但是可modifiable。和AXI3描述的do not allocate,cacheable(modifiable)一致。

    其中ArCACHE[3:0]=4'b1010和AwCACHE[3:0]=4'b0110,被标记为write-through No-allocate,我觉得应该标记为write-through other-allocate更合适一点。如果完全no-allocate,那么不可能由hit的trans,只是miss的时候读写都不会去主动allocate。但是AXI4的spec中又写了,这个no-allocate并不是严格的miss就一定不allocate,这只是一个出于性能原因建议不去allocate。实际是可以在read miss时候read allocate,write miss时候来write allocate。Write-back No-allocate含义类似。

    关于所有memType对对应的trans的要求,可参考AXI4 spec的A4.4.1 Memory type requirements章节内容。

    1.3 AxPROT

    该信号定义了访问权限,可以阻止非法访问。AXI3/4都是一样的用法。共有3bit:

    AxPROT[0]:特权访问和非特权访问。ArmV8支持四个特权层次EL0~EL3,其中EL0是用户空间,EL1是OS空间,对应了不同的权限级别。如果说AxPROT[0]映射的是ArmV8的EL0为非特权空间,EL1以上的为特权空间,那么AxPROT[0]=0时,是无法访问EL1以上的空间的;AxPROT[0]=1的trans可以访问所有特权级别。因为AXI只有特权和非特权的区别,而处理器往往有多个特权级别,所以两者之间的映射是可以是多对一或一对多。

    AxPROT[1]:安全和非安全访问,安全访问可以访问安全区域和非安全区域,非安全trans只能访问非安区域。安全和非安全区域由软件根据业务及场景进行定义。

    AxPROT[2]:该位指示事务是指令访问还是数据访问,它并不在所有情况下都是准确的,例如,当事务包含指令和数据项的混合时。本规范建议主设备将AxPROT[2] 设置为低电平,以指示数据访问,除非该访问明确是指令访问。
     

    1.4 AxQOS

    AxQOS有4bit,协议上没有指定 QoS 标识符的确切用途。协议建议使用 AxQOS 作为相关写入或读取事务的优先级指示器。值越高表示事务优先级越高。具体用法要看片内互联的实现方案。

    1.5 AxREGION

    4 位区域标识符可用于唯一地标识最多 16 个不同的区域。区域标识符可以提供高阶地址位的解码。区域标识符在任何 4Kbyte 地址内必须保持不变。

    比如说一个slave里面的一段地址空间又划分了不同的属性,某一段是只读的,某一段是可读写的,你可以用对Axaddr decode的方式对这些trans进行区分,也可以用AxREGION进行区分。

    【虽然APB目前没有这个信号,但可以用APB slave来举例说明,比如一个subsys的有多个IP的配置地址空间,你可以用paddr的decode来区分,也可以用REGION来区分】
    协议中提供的两种场景如下:

    1.6 AxUser/Xuser

    在AW/W/B/AR/R这五个通道上都可以有用户自定义信号,协议本身并没有规定这些信号的使用方法。设计者可以根据自己的需求,选择使用哪些通道的user信号,各通道可以有不同的bit位宽。

    AxPROT在支持特权和安全等级时,只有两个等级,如果需要支持更多的划分,那么使用user信号就是不错的选择。

    1.7 xresp

    resp包含bresp和rresp两种,分别是写响应resp和读响应resp。2bit的resp信号含义如下:

    • OKAY:正常访问成功。表明已经正常访问成功。还可以指示独占访问(Exclusive Access)失败。

    OKAY 是大多数交易的响应,响应表示以下任一情况:

    1. 正常访问成功
    2. 独占访问失败
    3. 对不支持独占访问的从站的独占访问。
    • ExOKAY:独家访问权限可以。表示独占访问的读或写部分已完成
    • SLVERR:从站错误。当访问已成功到达从站,但从站希望向原始主站返回错误条件时使用。

    slave返回SLVERR的情况可以包含如下:

    1. FIFO 或缓冲区溢出或欠载情况
    2. 尝试的传输大小不受支持
    3. 尝试对只读位置进行写访问
    4. 从机中的超时条件
    5. 尝试访问禁用或断电的功能
    • DECERR:解码错误。通常由互连组件生成,以指示事务地址处没有从属设备。换句话说就是访问无效地址。

    需要注意的是,无论是哪一种错误,传输的数据量一定要和命令通道一致

    1.8 AxDomain

    这个实际是ACE信号,容易被混到AXI信号中,这里也做一个简单的说明。mem的属性中有inner shareability,outer shareability的区分。这个2bit的AxDomain用来表示该访问的地址空间属于哪一个shareability domain。

    关于shareability domain可以参考:

    ARM的cache和mem零散记录(属性)-CSDN博客

    的第1.1.2节mem的Shareability

    2.AXI低功耗信号

    Signal   Source                    Description
    CSYSREQ Clock controller        System exit low-power state request. This signal is a request from the system clock controller for the peripheral to exit from a low-power state. See Power-down or power-up handshake on page A9-107.
    CSYSACK Peripheral device       Exit low-power state acknowledgement. This signal is the acknowledgement from a peripheral to a system exit low-power state request. See Power-down or power-up handshake on page A9-107.
    CACTIVE  Peripheral device       Clock active. This signal indicates that the peripheral requires its clock signal.See Peripheral clock required on page A9-107.

    AXI的低功耗信号用的比较少,原因在于现在的互联总线都使用NOC,很少见使用AXI-Fabric的。AXI只是作为接口信号,没有实际的组件。所以低功耗用的少。

    3.参考内容

    可以阅读本人另外两篇文章:

    ARM的cache和mem零散记录(属性)-CSDN博客

    cache读写策略(write-back/through)与分配策略(allocate)-CSDN博客

  • 相关阅读:
    SMT生产中基板的机械清洁处理法有哪些
    SQL Server中row_number函数用法介绍
    Linux驱动开发led亮灯
    Service和启动其他应用的功能和替换Fragment
    GRE简单模拟 Generic Routing Encapsulation
    C# 语言在AGI 赛道上能做什么
    盘点十个让工作效率倍增且有趣的 Python工具包
    VSCode配置MingW编译调试环境
    基于Java的宠物医院管理系统设计与实现(源码+lw+部署文档+讲解等)
    Codesys数据类型(2.7):扩展数据类型之 别名 详解
  • 原文地址:https://blog.csdn.net/cy413026/article/details/134080838