最近接触到了一些产线的Test的东西,然后发现这里面有一些DFX的相关东西。
之前在梳理整个安全领域全景图的时候,也提到了调试安全。
林林种种原因让打算来学习一下相关的内容,自然就绕不开Coresight。
今天就一起来看看Coresight吧,最近喜欢上了画图来整理自己的思路。
CoreSight Soc-400一个完整的调试和跟踪解决方案,包括如下组件:
控制和接入组件:
跟踪数据源:跟踪源是CoreSight中用于产生跟踪信息的组件。每个跟踪源组件都会产生一种格式的信息,最终可以组合在一起并且通过跟踪链接到输出端口。
连接:
跟踪输出节点:
时间戳组件:产生CoreSight或处理器所需的时间戳。通过Narrow timestamp replicator分发到多个目的设备。路径:时间戳发生器->时间戳编码器->Narrow timestamp replicator->时间戳解码器->CPU/CTI等。
coresight是ARM公司提出的,用于对复杂的SOC,实现debug和trace的架构。该架构,包含了多个coresight组件。众多的coresight组件,构成了一个coresight系统。
我们也可以根据coresight架构,实现自己的coresight组件。
每个coresight的组件(component),都要遵循coresight架构的要求。
以下是一个典型的coresight环境,包含了两个ARM core,一个DSP,和众多的coresight组件。
这个coresight组件,实现对core,DSP的debug和trace功能。
trace通路,实现对master组件的数据追踪功能,使用ETM来追踪。
ETM负责追踪处理器和DSP的信息,将信息打包,通过ATB总线发送到trace bus上。
trace bus上有trace funnel,funnel接收多个ATB总线数据,然后合并成一个ATB总线数据,发送给replicator。
replicator接收到ATB数据,根据配置,将ATB数据发送给ETB和TPIU。
debug通路,用于外部的debugger,对ARM core和DSP进行调试功能。
上图中,只考虑了JTAG的port。其实还有SW的port。
DAP接收外部端口的JTAG数据,然后转化成对DAP内部的AP的访问,然后AP再转化为memory-mapped的总线访问,去访问soc内部的资源。
上图中,DAP输出两个memory-mapped总线,
debug APB互联,连接了有CTI,ETM,HTM,ITM,ETB,TPIU等coresight组件,因此外部的debugger可以通过JTAG port,对这些coresight组件进行访问。
bus matrix一般是连接soc的一些外设,如memory,串口等,因此外部的debugger可以通过JTAG port对这些外设设备进行访问。
trigger通路,用于给指定的组件发送trigger信号,或者接收指定的组件的trigger信号。
这个功能由CTI和CTM来实现。
CoreSight交叉触发接口(CTI)是一种硬件设备,它将被称为触发器的单个输入和输出硬件信号带到设备和从设备输出,并通过交叉触发矩阵(CTM)将它们通过编号信道互连到其他设备,以便在设备之间传播事件。
每个core和DSP都有一个CTI组件相连,CTI可以给处理器(DSP)发送trigger信号,也可以接收处理器(DSP)的trigger信号。
所有的CTI和CTM相连,因此可以实现多个CTI之间的trigger信号的相互发送与接收。
trigger的coresight组件
trace的coresight组件:
trace信息传递过程中所需要的中间coresight组件:
最终接收trace信息的coresight组件
每个trace sink可以有一个trace formatter。
DAP不属于coresight的组件,但是我们会通过DAP来对coresight的组件进行访问。
DAP包括以下:
DAP主要是由DP和AP组件。DP负责接收外部的JTAG或SW数据,然后转化为对AP的访问,而对AP的访问,是可以发起memory-mapped的访问。因此就可以对内部的资源进行访问。
APB-AP: 对挂接到debug APB总线上的内部调试设备的访问
AHB-AP: 对挂载在AHB系统总线上的设备的访问
JTAG-AP: 对JTAG设备的访问。这个是兼容以前较早的ARM处理器,如ARM9。这些较早的处理器内部是用JTAG来调试的。但是现在的ARM处理器,已经不用这种方式,统一用memory-mapped方式进行调试。
目前的ARM soc中,一般至少会包括一个DAP。而一个DAP可以包括1-256个AP(access port),AP受DP的控制。只有对AP的访问,才可以转化成memory-mapped总线,对soc的内部资源进行访问。
DP中有一个SELECT寄存器,该寄存器用来选择,DP对AP的访问,是针对于哪一个AP进行访问。
DAP中,是可以有多个AP的,而每次,只能对一个AP进行访问。因为需要对AP进行编号,编号的值就在APSEL位域中。因为这个位域有8位,因此DAP中可以最多有256个AP。
包括了一个DP,和3个AP,依次是AHB-AP,APB-AP,JTAG-AP。
DP通过JTAG或者SW管脚,连接外部的debugger,和外部debugger进行通信。
DP接收到外部debugger发送的JTAG或SW数据,转化为对内部AP的访问。经过decoder模块,判断是对哪一个AP进行访问,然后将访问信息发送给对应的AP。AP接收到DP的访问后,转化为对应的总线访问,去访问内部资源。然后将访问的信息,才回送给DP,DP再通过JTAG或SW,将访问信息返回给外部的debugger。
那么到这里就应该对coresight有一个了解了,这也是我的目的所在,这个前辈关于coresight有一系列文章,从浅入深,如果感兴趣可以进一步学习。