当前位置:   article > 正文

AXI 笔记2:来自网络_a method for cross 4kb address boundary data trans

a method for cross 4kb address boundary data transfer in axi4 bus

 

AW

AR

W

R

B

握手

VALID

VALID

VALID

VALID

VALID

READY

READY

READY

READY

READY

ID

ID

ID

ID

ID

响应

 

 

 

RESP

RESP

通道

ADDR

ADDR

DATA

DATA

 

突发

LEN

LEN

LAST

LAST

 

SIZE

SIZE

STRB

 

BURST

BURST

 

特殊

USER

USER

USER

USER

USER

CACHE

CACHE

 

PROT

PROT

 

LOCK

LOCK

 

QOS

 

REGION

 

 

 

 

握手

握手

VALID/READY关系灵活,无先后要求

响应

响应

响应方式
  1)写事务,一个BURST回一个RESP
  2)读事务,BURST中每个TRANSFER可以回RESP
报错条件
  1)decoder error
     slave不存在,由默认slave报错
  2)slave error
     slave挂起、只读、SIZE不符、空满、超时等

1. 对于read操作,Spec明确规定必须先写addr,再读read data,那么slave回read data时,已经能确定该transfer是否成功,因此这时的response是已知的,response就可以和read data​一块回给master。

2. 对于write操作,addr和data均是从master到slave,而response是从slave到master,因此需要增加一个response通道​。再看为什么不是每次transfer都有response,由于addr和data没有先后依赖关系,因此,第n次transfer时,slave有可能只收到data,而没收到addr,此时还无法判断response结果,所以write操作做不到每次transfer都给出response,而是每次burst有一次response。

通道

多通道
并行(重叠、Outstanding)
乱序(不同ID之间)

通道间关系灵活,但也有限制
 (1)读数据必须总是跟在与其数据相关联的地址之后。
 (2)写响应必须总是跟在与其相关联的写事务的最后出现。
 (3)AW和W之间关系比较灵活,重点掌握
 (4)ID限制了乱序传输规则

########################
Outstanding整体来看指的是一个未结束的transaction,不光针对的是一个地址;当然每一个channel也有对应的outstanding transfers. 比如协议里说的,master可以一连发好几个地址出去,不用等ready信号回来。

这个就是我们讲的issue capability 和 acceptance capability,前者是针对的是master支持outstanding的能力,后者是slave能够支持outstanding的能力。master既然要支持outstanding的话,就需要一个buffer或者queue去保存transaction的信息,同理slave要能处理outstanding的话,也需要queue去保存。 注意啊,这里不是fifo。fifo是顺序的,但是transaction有可能是out of order的。

########################

https://blog.csdn.net/qwaszx523/article/details/53737276
Outstanding
: The ability to issue multiple outstanding addresses means that masters can issue transaction addresses without waiting for earlier transactions to complete. This featurecan improve system performance because it enables parallel processing of transactions.

      https://img-blog.csdn.net/20161219113833246?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXdhc3p4NTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

​​发出A11的addr后,在完成D11~D14的transfer之前,发出A21叫做outstanding。

Out-of-order : 

The ability to complete transactions out of order means that transactions to faster memory regions can complete without waiting for earlier transactions to slower memory regions. This feature can also improve system performance because it reducesthe effect of transaction latency.

https://img-blog.csdn.net/20161219113905943?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXdhc3p4NTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

地址的顺序是A11,A21,A31,而数据顺序则可能是D2?,D3?,D1?,这个过程叫做Out-of-order

Interleaving:  

Write data interleaving enables a slave interface to accept interleaved write data withdifferent AWID values. The slave declares a write data interleaving depth that indicatesif the interface can accept interleaved write data from sources with different AWIDvalues.

https://img-blog.csdn.net/20161219113923435?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXdhc3p4NTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

D11和D12之间插入D23,叫做interleaving。

简单而言,outsatanding是对地址而言,一次burst还没结束,就可以发送下一相地址。而out-of-order和interleaving则是相对于 transaction,out-of-order说的是发送transaction和接收的cmd之间的顺序没有关系,如先接到A的cmd,再接到B的cmd,则可以先发B的data,再发A的data;interleaving指的是A的data和B的data可以交错,如A1 B1 A2 B2 B3……

显然,你自己设计master时,如果是写操作,你不会主动发出out of oder和interleave的操作,因为这个明显增加了复杂度且没带来master自己的效率提高。

所以,对于master,不建议发出out of order与interleave的写数据,但是必须支持out of order与interleave的读操作!同理,可以分析,对于slave,必须支持out of order与interleave的写操作,不建议返回out of order与interleave的读数据。在一个系统中,interleave会明显增加设计复杂度,其实可以约定master,slave以及连接总线都不要使用interleave,(另外可以配置depth ==1,达到不支持interleaving的目的)这样可以降低复杂度,但out of order是AXI特性,这个功能必须支持。

为了减小设计复杂度,减小pin-countAXI4W channelWID给拿掉了,也就是说,AXI4没有W channelout of orderinterleave特性了。所有data必须是in order的。

突发

突发
非对齐

(1)地址不能跨4K边界(地址)
(2)突发类型,难点:WRAP(地址)
(3)非对齐(地址)

(4)endian(数据)

##################

4KB address boundary

This prohibition prevents a burst from crossing a boundary between two slaves. It also limits the number of address increments that a slave must support.

1AXI协议定义每个slave的地址空间是4K/1K对齐的,所以规定一个Burst不能跨越4K边界是为了避免一笔burst交易同时访问两个slave.

2,规定一个每个slave的地址空间是4K对齐,一个很重要的原因就是操作系统的page大小是4K

3,如果Burst跨越4K边界,需要按照4K边界的要求,对Burst进行拆分。

##################

wrap

The lowest address used by the burst is aligned to the total size of the data to be transferred:wrap boundary= ((size of each transfer in the burst) × (number of transfers in the burst)).

The start address must be aligned to the size of each transfer.

The length of the burst must be 2, 4, 8, or 16 transfers

This burst type is used for cache line accesses.

##################

unaligned

For example, a 32-bit data packet that starts at a byte address of 0x1002 is not aligned to the natural 32-bit address boundary

Support for unaligned data transfers, using byte strobes

The information on the low-order address lines must be consistent with the information on the byte lane strobes.
The slave is not required to take special action based on any alignment information from the master.

##################

endian

通常因特网协议中使用大端模式,x86体系使用小端模式,数据在本地和网络间进行交换时,需要进行大小端转换

axi中的数据,是不区分大小端的,直接将memory中的低位数据,放在data bus的低位byte-invariant实际数据的大小端,需要由slave来自己调整

特殊

Cache

Bufferable意思是说不必把结果写进最终目的地而只是写进中间某个buffer就可以回response,而non-bufferable则是把结果要写进最终的目的地才能回response。non-bufferable一般用于device的读写,也就是SOC里讲的MMR。bufferable与否区别在于何时回response。

Normally, the Bufferable attribute is only relevant to writes.

Cacheable说的是进行读写的时候要去cache里查看(noncacheable就是不用去cache里查看,直接送往memory)。在AXI4的协议里面,cacheable改成了另外modifiable,还有两个特性就是read prefetch和write merge。详细的请参考AXI4的protocol文档。 AMBA总线是根据ARM处理器架构设计的总线,如果要深入了解AXI3.0的一些协议必须高清楚ARM11(ARMv6架构)的内存管理系统。你所提到的cacheable 和 bufferable在ARM11说明文档上都能找到答案。

cashslave端的一个缓冲,如果多个设备都访问slave的某一部分数据,那么这部分数据可以缓存到cash中,只要第一个master访问后,其他master访问则部分数据时就不去slave中去取这些数据,而是直接从cash中取出来,这样节省时间。axcash信号在总线中是透传的。在与AXI相连的CHI协议中实现实现了cash操作。

一般会在使能MMU的过程中,规定MMU page tabledefinition。其中20bit表示每一pagememory attributes12位表示每一page的基地址。一共32

                                    位。每一page都会设置两个属性,cacheablebufferable

保护

Unprivileged or privileged  AxPROT[0]

Some processors support multiple levels of privilege, see the documentation for the selected processor to determine the mapping to AXI privilege levels. The only distinction AXI can provide is between privileged and unprivileged access.

Secure or Non-secure AxPROT[1]

This bit is defined so that when it is asserted the transaction is identified as Non-secure. This is consistent with other signaling in implementations of the ARM Security Extensions.

Instruction or dataAxPROT[2]

The AXI protocol defines this indication as a hint. It is not accurate in all cases, for example, where
a transaction contains a mix of instruction and data items. This specification recommends that a
master sets AxPROT[2] LOW, to indicate a data access unless the access is specifically known to
be an instruction access.

独占/上锁

独占/上锁

Exclusive(独占)

https://www.cnblogs.com/yuandonghua/p/11936357.html

多线程的操作系统中,都有一个获取线程锁的过程,这个锁是唯一的,一个线程抢到了其他线程就抢不到,如何实现这个功能呢?加入将内存的一个变量作为锁的标志,如果这个标志位0表示没有线程抢这个锁,如果为1表示某个线程抢到了这个锁。那么在抢锁之前先要看一下这个标志是否为0,如果为0表示锁是空闲的可以抢,为了表示抢到了这个锁,还得把这个变量置为1。这个抢锁的过程就至少需要有一读一写。但是在多线程操作的过程中,可能很多线程都在读取这个变量,都读到的值为0(读的时间还是比较长的,多核并发完全可以读多次),然后所有线程都写1,这样就造成了多个线程都得到了锁,与锁唯一的要求不合。也就是说通过软件手段是不能保证某个值被一个线程(Master)读取和写入的过程中没有被其他线程(Master)读取和写入。这就要求线程支持原子操作。

由于内存在使用过程中会出现ecc错误,需要刷新数据来纠正这些错误,操作系统通过内存巡检来完成刷新操作,内存巡检就是读取内存的值,通过ecc校验更正错误值,然后写入到内存,系统读取数据后,操作系统还是在正常运行的,内存上的程序很有可能把内部数据修改了,如果还是拿原来读取的数据ecc校验后写入就会冲掉程序保存的数据,这当然是不行的。这个时候内存巡检就要用到原子操作,巡检值使用exlusive方式读取内存,让这段内存记录在读取数据后内存数据有没有被改写过,如果被改写过,ecc校验后的数据使用exlusive方式写入的时候就会不成功,防止覆盖新的数据。巡检程序发现写入不成功就重新巡检这段内存,直到成功。

Master_Aexclusive方式读取Salve的一段地址(以lane_cash为单位,一般为64byte)的值后,相当于Master通知slave监控这段地址的写,slave的一个moniter会纪录这个Master_A,如果Master_A在写入这个slave之前没有其他Master写过这个数据的话,Master_A往这段地址写入数据是会返回一个Exok即原子操作成功,指示数据正确写入;如果在Master_A写入数据之前有其他Master也往slave的这段地址写过数据,那么Master_Aexlusive写数据的操作会返回ok,这其实表示exclusive操作失败了,数据也被moniter阻挡没有写入到slave中。这样保证读写这一整个过程中,软件知道是不是只有一个线程(Master)在写这段地址(其他线程在这个过程可以读),也只有exlusive写返回Exok后才说明线程锁抢占成功,这样就只有一个线程能抢占成功。

是一种应用场景相关的操作,在多核CPU中,为了保证一个masterslave的访问操作不让其他master来访问,保证访问slave的数据不被其他master改写。有点像多线程中的线程锁。在AXI3.0的时候有normal access/exclusive access/locked access 其中normal access是不进行任何干预的访问,exclusive则是slave端监控一下,在master访问期间有没有其他master访问过,如果访问过就给告警什么的,让master重新访问一遍。locked access这种模式在AXI 4.0取消了,即硬件锁定,其他master访问不了masterslave的总线,这种方式对性能影响很大,所以取消了。

lokced

AXI4 does not support locked transactions. However, an AXI3 implementation must support locked transactions

AXI4 removes support for locked transactions because:

1) The majority of components do not require locked transactions

2) The implementation of locked transactions has a significant effect on

  The complexity of the interconnect.

  The ability to make QoS guarantees.

通过信号ARLOCK[1:0]或信号AWLOCK[1:0]对事务加锁,需要确定只允许主机存取设备区域直到一个未加锁的事务从同一个主机完成

QOS

The protocol does not specify the exact use of the QoS identifier. This specification recommends that AxQOS is
used as a priority indicator for the associated write or read transaction. A higher value indicates a higher priority
transaction.

AXQOSAXI4中的信号,4bitquality,用在每个读写transactionchannel中,用作priority indicator,越大的值,表示越高的优先级,默认值是4’b0000表示接口不实现QoS

master侧必须根据scenario来产生具体的QoS值,而slave根据QoS的值

来决定不同transaction的值。如用在DDR Controller中,决定transaction的优先级来转换为DDR的读写次序。

http://blog.sina.com.cn/s/blog_13f7886010102x4y6.html

AXI4AXI3的区别

ARM自己也没有明确AWQOSARQOS的意义,比较像sideband信号,spec里面举例是说用于标识commandpriority。但其实很多IP自己有urgent,ultra,flushsideband信号实现的。

REGION

增加了AWREGIONARREGION,这个比较属于系统组的应用。以我实际碰到case的经验来讲有几个好处。1.transaction标识region,从而很方便的实现logical adressphysical addressaddress mapping,如一个logical address标识为不同的region,就可以mapping到不同的物理地址上去。所以不需要slave用额外的decoder去支援不同的逻辑地址。2. 通过划分region,对某些physical allocation进行保护,比如某个region只能被non-secure write,某个region只能被secure write 3.修改了write response dependenciesAXI3中规定一定要在write channel结束之后发,slave才能加write response; 而在AXI4中额外规定AW channel结束才可以回write response。这是因为,如果发生W channel before AW channelcase时,没有AXI4的规定,B channel也有可能先于AW channel完成。

说实话,即使碰到过W channel before AW channel的情况,也是说W可以先于AW,但是slave一般会把wready先拉低,等AW channel完成后才收data,所以没有碰到过B channel先于AW channel完成的情况

USER

Optionally, the AXI4 interface signal set can include a set of user-defined signals, called the User signals, on each
AXI4 channel.
Generally, this specification recommends that User signals not be used. The AXI protocol does not define the
functions of these signals, which can lead to interoperability issues if two components use the same User signals in
an incompatible manner.

http://forum.eepw.com.cn/thread/263309/1

AXI协议的深入分析

主机仲裁

AXI最多支持16master,16slave,它们可以通过AXI interconnect连接,不同的master发出的id可能相同,但是经过AXI interconnect处理后会变得唯一,所以自己开发AXI interconnect也要注意这个问题。同一个master发出的id可以相同也可以不同,相同的id数据传输必须按照先后顺序否则会出现错误,不能乱序和交叉。AXI 支持ID方式,这也是该总线效率较高的一个原因。

低功耗

低功耗的理解(参考):AXI的低功耗接口本身也是数据传输协议的扩展。它针对自身具有低功耗处理的设备和自身不具有低功耗处理的设备都是通用的。

AXI低功耗控制接口包括两类信号:

设备给出表示当前时钟是否可以被gated的信号。外设使用CACTIVE信号表明它希望时钟,时钟控制模块必须马上给设置时钟。

对于系统时钟控制模块,提供可以进入或退出低功耗状态的握手信号。CSYSREQ表明了系统请求设备进入低功耗状态,而设备使用CSYSACK信号来握手低功耗状态请求和退出。

http://uphotos.eepw.com.cn/1384955505/pics/16ff8874ec7503bfc4699f5d13e93638.jpg

图2 AXI低功耗握手时序(1

CSYSREQCSYSACK信号为高的时候,也就是T1时刻之前,设备处于正常状态。在T1时刻,系统拉低了CSYSREQ信号,在T2时刻,外设 拉低CSYSACK信号。在T3时刻系统拉高CSYSREQ表示系统要求设备从低功耗状态退出。T4时刻设备握手拉高CSYSACK表明已经退出。在握手 中,CACTIVE可以作为拒绝或者同意的标志。下图中CATIVE一直拉高,来表示当前不接受这种低功耗的请求,而不是依靠ACK信号。可以看 出,ACK 信号只是表示状态迁移的完整性,而对于是否进入低功耗状态,需要CACTIVE信号表示。同时该信号也表示了设备在低功耗状态需要退出。

在系统层面的操作:

有两种方法进行设备的低功耗控制。第一种是系统不断的轮询设备,一旦某个设备可以进入低功耗状态,就把相应的CATIVE 拉低,然后把CSYSACK信号拉低。这样做的效率不是很高,系统并不知道哪个设备已经可以提前进入低功耗状态,而是简单的按照时间进行查询,并不能精确 的控制。这一种方案主要强调系统与设备的强耦合性。只有系统需要的时候才开始轮询,系统不需要,就不能进入低功耗模式。

http://uphotos.eepw.com.cn/1384955505/pics/8a58988628d5dc12f1abb5fed43f4185.jpg

第二种方法是系统被动接受设备发出来的CATIVE,然后开始低功耗处理流程。这样可以提高效率。但是可能系统由于预测到马上需要使用该device,不发起低功耗请求。值得注意的是,两种低功耗管理是可以混合使用的。

reorder FIFO  outstanding FIFO

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/539208
推荐阅读
相关标签
  

闽ICP备14008679号