解读AMBA-ATB spec
2016-09-17 09:58阅读:
ATB(Advanced Trace
Bus)共有两个版本,其中v1.0作为AMBA3的一部分,于2006年发布的,而v1.1则是2012年随着AMBA4发布的。ATB规范新增了数据(主要针对trace
data)不可知的接口,以便在跟踪系统中根据 AMBA 规范跟踪数据。
ATB组件
在一个ATB的系统中,通常会有多个master和多个slave,
而ATB使用的是1:1通信方式,因此需要funnel和replicator, 下图给出了ATB系统的结构。
ATB
relationships
在该系统中,xTM和HTM相当于master,
用于采集数据,ETB和TPIU相当于slave,接收数据。那么funnel则是仲裁器,它从多个master中选择一路数据送给replicator,而replicator则又将这一路数据复制多份分别给不同的slave。ATB只规定了其通信的协议,没有具体规定funnel和replicator的具体实现方式,因此需要用语根据需要实现。
另外,上面的介绍只是从master向slave信号,那么从slave向master的信号貌似用上面的方法又解释不通。以atready为例,ETB和TPIU均会输出atready信号,则replicato的输入端是两个atready,输出端是一个atready,那么replicator该怎样处理呢?这个处理
方法也是用户控制的,如可选择一路输出,也可进行&/|
等运算后输出,对于该方向的信号,replicator相当于承担了funnel的功能,而funnel相当于承担了replicator的功能。
ATB信号描述
ATB总线的信号线分为全局信号、数据信号、控制信号以及同步请求信号。
全局信号有ATCLK, ATCLKEN, ATRESETn,其相对于master和slave均为输入:
Global signals
Note: ATRESETn信号可以拉低时可以是异步的,但是必须是同步释放。
数据信号master向slave待发送的数据:
Data signals
控制信号分为data flow模式的控制信号和flush操作的控制信号,其中前缀为AT代表data
flow方式,前缀是AF代表flush操作方式:
control signals for data
flow
control signals for
flush
另外,ATBv1.1新增加了一个同步请求信号:
Synchronization request
signals
表中的Clamp value指的是当master/slave被disable或power
down时,信号线应表现出的数值。设置该值的目的是为了不影响其它的组件工作。如,当一个系统中有多个master和slave时,其中一个power
down,其总线上设置成clamp value,不会影响其它的master或者slave工作。
ATBYTES和ATDATA中的位宽满足如下关系:
m = log2(n+1) - 4
之所以设置了ATBYTES,是因为并非master端发出的所有ATDATA上的数据,都是slave端想要的,这样增加ATBYTES,master可以告诉slave有多少bytes是有效数据。
ATB信号连接
ATB connection
Flow 操作
flow操作是根据atvalid和atready信号提供的handshake进行数据传递,那么根据spec,flow操作必须遵循以下规则:
1、必须等到atresetn信号为高时,atvalid才能拉高。
2、当atvalid为低时,这时master不会查看atready信号,即:此时atready是高或低均不care。
3、当master端拉高atvalid信号,而atready信号仍为低时,master端的输出信号atvalid, atid,
atdata, atbytes必须保持不变,直到atready为高后,才可以改变。
4、当atvalid和atready均为高时,完成一次Flow操作,slave会接收master发出的atid,
atbytes以及atdata的有效数据位。
下面给出一个flow操作的例子:
flow control
signaling
T0: master拉高atvalid, 并更新atdata, atbytes, atid。
T1:
slave检测到bus上的数据,但是,此时slave还未准备好接收数据,因此atready为低,不进行数据传输,master必须保持其输出信号不变。
T2/T3: slave接收数据A/B。
T4: master拉低atvalid,不再care atready信号。
Flush操作
Flow操作是master主动发起,slave被动接收数据,那么slave可不可以主动发起向master要数据呢?ATB提供了Flush操作,slave端通过拉高afvalid信号,通知master端向其发送数据,而mater使用afready进行应答,告诉slave是否完成了该笔flush操作。
通常,Trace source可看成ATB的master,
mater则会包含用于存储数据的buffer,而对于某些系统,也可能没有buffer,则flush操作分为with
buffer和without buffer两种。
flush操作结构
同样,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。
针对以上规则,给出下面flush操作的例子:
Flush
signaling
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。
在上面的操作中,当afvalid为低时,slave不会care
afready信号。若master端buffer的大小为1,也叫without
buffer的情况,那么,afready信号完全由atvalid和afready信号控制了,只要两个信号为高,说明flush操作已经完成,afready就会在下一个cycle拉高。因此,针对without
buffer的情况,afready有如下的控制算法。
AFREADY control
algorithm
ATBv1.1新增功能
ATCLKEN
ATBv1.1增加了atclk的使能信号atclken。
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发生。
同步请求操作
既然master可以主动通知slave有某些事情发生,同样,slave也可以通知master,即采用同步请求操作。
ATBv1.1增加了SYNCREQ的信号,当slave端将该信号拉高时,master就可以检测到slave端的请求。spec上只是给出了该信号的连接方式,以及哪些地方应该有该信号的接口,但是与trigger操作类似,并未给出实际的应用要求。因此,用户可以根据实际需要,灵活使用trigger操作和同步请求操作。