【ARM AMBA ATB 入门 1 - ATB 总线简介】

文章目录

    • 背景
    • 1.1 ATB BUS
      • 1.2.1 全局信号
      • 1.2.2 数据信号
      • 1.2.3 流控信号
      • 1.2.4 Trace ID
      • 1.2.5 Buffer Flusing

背景

AMBA3 中,增加了 Advanced Trace Bus (ATB) 总线作为片上调试的总线接口,为 DebugTrace 提供一种解决方案。第3代总线是2003年发布的AMBA3标准。在第三代总线中,增加AHB-Lite精简协议,升级了APB总线外,为了满足更高的互联性能需求,增加了Advanced eXtensible Interface (AXI),这是一个重要的标志,至此开启了高性能系统设计的通道,在AXI总线的加持下,系统性能得到了质的提升。

1.1 ATB BUS

ATB Bus 用来在 Coresight 组件之间传递 Trace 信息用,主要包括两部分:

  • Master: 在ATB总线上产生 Trace 信息的接口;
  • Slave: 在ATB总线上接收 Trace 信息的接口。

ATB 总线以 AT 作为信号的前缀

如下图 1-1:HTMxTM 是产生 trace 信息的 Master,通过 ATB 总线,发送给 Funnel,Funnel 将收到的两路 ATB 数据合并成一路 ATB 数据发送给 Replicator,Replicator 再将接收的一路 ATB 数据,重复以两路 ATB 数据分别发送给 ETB 和 TPIU,TPIU 通过 Trace port 发送到外部。
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第1张图片

图 1-1 ATB relationships

专用名词解释如下

  • ETB(embedded trace buffer): 片内存储 trace 数据的SRAM;
  • xTM(trace macrocells): 从连接的处理器中追踪数据,产生 trace 信息输出, 包括两个:
    • ETM(embedded trace macrocell): 可以产生指令trace信息,也可以产生数据trace信息;
    • PTM(program flow macrocell): 产生指令 trace 信息;
  • HTM(advanced high-performance bus trace macrocell): 连接到AHB互联总线上,产生总线的trace信息;
  • TPIU( trace port interface unit):接收ATB trace数据,传输到trace port上,将trace信息输出到片外;
  • Trace Replicator: 将一个ATB数据发送给独立的两个ATB slave;
  • Trace Funnel: 将多个trace源信息,合并成一个trace数据输出。

1.2.1 全局信号

时钟复位信号:复位信号低电平有效。数据在时钟的上升沿采样
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第2张图片

1.2.2 数据信号

【ARM AMBA ATB 入门 1 - ATB 总线简介】_第3张图片

1.2.3 流控信号

【ARM AMBA ATB 入门 1 - ATB 总线简介】_第4张图片
master 和 slave 之间的通信,通过 ATVALIDATREADY 作为握手信号。
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第5张图片

  • Master 将 ATVALID 拉高,表示 master 传输的数据有效;
  • Slave 将 ATREADY信号拉高,表示 slave 准备好接收 master 的数据。

如果 master 发送数据,发现 slave 的 ATREADY 没有拉高,那么就要将数据重新发送一遍。

时序图如下
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第6张图片

  • T1: master 发送数据A,ATVALID拉高。但是master检测到ATREADY没有拉高;
  • T2: master 检测到上一次数据传输,ATREADY没有拉高,因此需要将数据A重新发送, 此时ATREADY为1,表示此时数据发送成功。因此下一次可以发送新的数据;
  • T3: master 发送数据B,ATREADY为1,表示此时数据发送成功,下一拍可以发送新的数据;
  • T4: master将 ATVALID 拉低,表示没有数据发送;

如果 slave 在 master 发送数据的时刻,不能及时接收 master 发送的数据(ATREADY 不能在 master 发送数据时刻拉高),那么在 slave 端,建议实现 internal buffer(etf/etb),接收 master 发送的数据。然后再处理。这样的话,当 buffer 没有满的话,ATREADY 信号就可以一直为高,master 就不用一直重新发数据。

对于 ATBYTES[m:0]ATDATA[n:0]:

   m = log2(n+1)4

【ARM AMBA ATB 入门 1 - ATB 总线简介】_第7张图片

1.2.4 Trace ID

对于 ATID 信号,trace 的数据要伴随着 ATID 进行发送的,因为产生 trace 的组件有很多,因此需要一个 ID 来识别这些组件,ID 就保存在 ATID中发送。

ATID是一个7位的值。0x000x70-0x7f 是 coresight 中规定的保留值,在 soc实现中,coresight trace 组件不应该使用这些ID

在一个 soc 中,对于每个trace组件,ID 必须是唯一的。对于ID,有两种选择:

  • Fixed ID:在soc设计的时候,就将ID值给固定了;
  • Programmed ID: trace 组件的 ID 可以通过外部的 debugger 进行更改,但是 debugger 要保证,组件的 ID 必须是唯一的。

ATIDATDATA,在同一时刻被 slave所接收。

1.2.5 Buffer Flusing

一般 Trace 数据都是从 trace source 发送到 trace sink, 但是在某些情况下,trace sink 需要主动要求 trace source 发送数据,此时就会用到 flusing。
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第8张图片

sink 发送 flush 信号给 source,source 将内部所有的 trace 数据全部发送出去,发送完毕后,回应 sink flush complete 信号。

flush 使用 AFVALID 和 AFREADY 两个信号来作为握手信号。
【ARM AMBA ATB 入门 1 - ATB 总线简介】_第9张图片

推荐阅读
http://www.lujun.org.cn/?p=2365
https://zhuanlan.zhihu.com/p/407577715

你可能感兴趣的:(#,ARM,Bus,Introduction,fpga开发,arm,arm开发,嵌入式硬件)