不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

AMBA-ATB spec

声明:本文结合赵中民先生的博客与自己使用coresight的理解。如有侵权,请与我联系!

文章目录

1. ATB总线的用途及版本

1.1 ATB总线用途

一般来说,ATB(Advanced Trace Bus)总线用来在ARM的coresight组件之间传递trace数据。如下图所示:
在这里插入图片描述

1.2 ATB总线的版本

ATB(Advanced Trace Bus)共有两个版本,其中v1.0作为AMBA3的一部分,于2006年发布的,而v1.1则是2012年随着AMBA4发布的。ATB规范新增了数据(主要针对trace data)不可知的接口,以便在跟踪系统中根据 AMBA 规范跟踪数据。

2. ATB协议介绍

ATB之间的数据信号如下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1 ATB的Flow操作

ATB flow操作的波形图如下图所示:
在这里插入图片描述
ATVALID和ATREADY是一对握手协议。ATVALID指示当前master发出的数据是有效的,ATREADY指示当前slave可以接受数据。当时钟上升沿来临时,ATVALID和ATREADY均为1时表示一次传输完成。
在时钟的上升沿来临时,当ATREADY为0,ATVALID为1时,这时要保持ATVALID,ATBYTES,ATDATA,ATID不变,直到ATREADY为1,表示一次传输完成。
需要说明的是ATB的ATDATA信号总是由master发送到slave,这与APB,AXI双向传输数据的模式是不同的。
ATID: ATID指示该ATDATA数据是从哪一个地方产生的,在一个core_sight trace系统中,可以有很多产生trace数据的地方,通过这种方式标记数据,便于后期对数据进行解码。
ATBYTES 表示多少字节的atdata是有效的。比如 atbytes = 3’b011,表示有 (3+1)个字节,也就是32bit的数据是有效的。

2.2 ATB的Flush操作

Flow操作是master主动发起,slave被动接收数据,那么slave可不可以主动发起向master要数据呢?ATB提供了Flush操作,slave端通过拉高afvalid信号,通知master端向其发送数据,而mater使用afready进行应答,告诉slave是否完成了该笔flush操作。
​通常,Trace source可看成ATB的master, mater则会包含用于存储数据的buffer。如下图所示:
设想这样的场景,当slave组件需要下电时,它需要告知master自己将要下电,master需要将缓存的数据发送给slave,这时就需要进行flush操作。 当slave发起Flush操作是,master会将目前FIFO中暂存的数据输出给slave,而在发起Flush操作后写入fifo中的数据则不会输出给slave。
在这里插入图片描述
Flush操作时序图如下所示:
在这里插入图片描述
T0: slave拉高afvalid,发起flush操作。
T1: master检测到afvalid被拉高,响应flush操作(拉高atvalid准备传数据)。
T2: flush A
T3: atready为低,​master保持信号不变,等待atready拉高。
T4/T5: flush B/C
T6: afready为高,flush操作完成。但是,此时atvalid和atready均为高,因此master也会把D发给slave,即flow的操作方式。
T7: flow操作,master向发送数据E。

flush操作也必须遵循一定的规则:
1、当slave拉高afvalid信号,afvalid必须保持High,直到afready为高,即该笔flush操作结束。

2、当slave拉高afvalid请求flush操作时,此时master应立即响应地flush操作,但并不一定意味着,master必须在下一个时钟上升沿立即拉高atvalid信号,也可以delay多个cycles。

3、当master拉高atready后,并不意味着mater中的buffer是空的,master只是将​slave请求时,buffer中的数据发给slave。(如,master向slave发送数据的同时,也在接收数据,当flush操作结束后,master的buffer中保留了slave请求后,master接收到的数据)

4、当afready为高时,afvalid​必须在下一个cycle拉低。

Q: 当slave端拉高afvalid信号,请求数据时,若此时master中的buffer为空,该怎么操作呢?

A: 针对该类情况,spec没有明确规定该怎样操作,分析如下:此时buffer为空,master一定不能发送数据,但是master又必须要响应,因此master必须保持atvalid为低,并且拉高afready。

3 ATB 1.1 协议

3.1 syncreq信号

ATBv1.1增加了SYNCREQ的信号。syncreq的功能是slave向master发出syncreq信号,请求master在输出的data中插入同步时序。
发送syncreq的原因是:在trace数据传输过程中,master会对data进行编码,slave端需要对数据进行解析。master端会先发送一个开始信号,当slave检测到这个开始信号后才开始对master发送的数据进行解码。假设slave不发送syncreq信号,master也会发送这个开始信号,只是间隔会很长,会导致一些master发送的数据被解析的很少。当slave发送syncreq信号后,master会向slave发送开始信号,其结果就是更多的master数据被解析出来。

3.2 Trigger操作

master可以向slave发起一个trigger,可以通过该方式告诉slave,master端可能会有某些重大事情(如:将会shut down)发生,以便让slave做好准备。若atid为0x10的master执行trigger操作,可分为如下3步:

1、master将其atid该为0x7d
2、master向slave发送数据,atid为0x7d, atdata为0x10(该master最初的atid)​,atbytes为0x00。
3、​slave接收到atid为0x7d的数据后,知道master端将有xx发生。

posted on 2022-04-02 13:05  皮皮祥  阅读(385)  评论(0编辑  收藏  举报