三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Arm CoreSight调试系统架构与多核调试实践

Arm CoreSight调试系统架构与多核调试实践

1. Arm CoreSight调试系统架构解析

在嵌入式系统开发中,高效的调试与追踪能力直接影响产品开发周期和质量。Arm CoreSight架构作为业界领先的解决方案,其SoC-400实现通过硬件化设计解决了传统调试方式的三大痛点:实时性不足(软件断点影响执行流)、数据带宽受限(串口传输速率低)、以及多核协同调试困难。

CoreSight SoC-400的架构设计遵循"分而治之"原则,将调试系统划分为三个功能平面:

  • 控制平面:基于DAP(Debug Access Port)的调试接口,通过JTAG/SWD协议提供寄存器访问和断点控制
  • 数据平面:ATB(Analyzer Trace Bus)总线网络负责传输海量追踪数据
  • 触发平面:CTM(Cross Trigger Matrix)实现多核间的硬件级事件同步

典型部署如下图所示(根据TRM文档Figure 2-1重构):

[处理器集群] │ ├─[DAP]─┬─[JTAG/SWD接口] │ ├─[APB调试总线]─[CTI]─[CTM] │ └─[AXI访问端口] │ ├─[ATB网络]─┬─[Trace Funnel]─[ETB/ETF] │ ├─[Replicator] │ └─[TPIU]─[Trace Port] │ └─[时间戳系统]─┬─[Timestamp Generator] └─[Narrow Timestamp总线]

1.1 调试访问端口(DAP)设计

DAP子系统是调试入口,其设计亮点在于协议兼容性和访问灵活性:

  • SWJ-DP模块:通过引脚复用同时支持JTAG(4/8位IR)和SWD协议,实测SWD在50MHz时钟下可实现1.6MB/s的调试数据传输
  • 多总线访问端口:
    • AXI-AP支持64位地址/数据总线,适合访问大容量DDR
    • APB-AP专用于配置CoreSight组件,典型配置延迟<10个时钟周期
    • JTAG-AP可级联传统JTAG设备,保持向后兼容

实际项目中,我们常通过AXI-AP直接读写内存来批量上传固件,相比SWD单线传输效率提升20倍以上。但需注意AXI突发长度被限制为1,连续访问需多次发起请求。

1.2 ATB追踪网络拓扑

ATB总线采用分层设计解决数据汇聚问题:

  • 带宽自适应:通过Upsizer/Downsizer组件实现8bit到128bit总线宽度转换
  • 流量控制:每个ATB接口包含valid/ready握手信号,支持反压机制
  • 典型配置示例:
    // 设置ETF(Embedded Trace FIFO)为循环缓冲模式 REG_WRITE(TMC_FFCR, 0x101); // 使能循环缓冲+格式化数据 REG_WRITE(TMC_TRG, 1024); // 触发水位线设为1KB

在异构计算场景中,建议为每个处理器配置独立的Trace Funnel,再通过ATB Replicator将数据同时发送到片内ETB和片外TPIU,兼顾实时分析和长期记录需求。

2. 关键组件实现原理

2.1 时间戳系统

精确的时间同步是多核调试的基础,CoreSight的时间戳系统包含三级结构:

  1. 全局时间源:Timestamp Generator产生64位计数器,支持1MHz~1GHz时钟域
  2. 分发网络:Narrow Timestamp总线将压缩时间戳广播到各子系统
  3. 本地插值:Timestamp Interpolator在接收端恢复高精度时间(典型误差<10ns)

时间戳编码采用差分压缩算法:

原始值: 0x0000_1234_5678 (48bit) 压缩后: 0x5678 + 0x1234 (各16bit)

实测显示该方案可减少60%的时间戳带宽占用。

2.2 低功耗调试设计

针对电源管理带来的调试挑战,CoreSight提供以下解决方案:

  • 电源域隔离:异步桥接器(如DAPBUS Asynchronous Bridge)支持电压域交叉
  • 状态保持:通过UPF(Unified Power Format)定义电源关闭时的信号钳位
  • 唤醒控制:调试子系统可发起电源请求(cdbgpwrupreq信号)

在手机SoC中常见这样的配置:

power_ctrl u_pwr ( .dbg_req(cdbgpwrupreq), .sys_ack(csyspwrupack), .debug_retention(1'b1) // 保持调试逻辑供电 );

2.3 交叉触发机制

CTM(Cross Trigger Matrix)实现了硬件级的事件广播,典型应用包括:

  • 多核同步断点:CPU0断点触发CPU1调试异常
  • 追踪触发:DMA传输完成事件触发ETB记录
  • 性能分析:Cache miss事件触发STM(系统跟踪宏单元)计数

配置示例(通过APB接口):

// 设置CTI(Cross Trigger Interface)通道0为触发输入 REG_WRITE(CTI_INEN0, 0x1); // 将通道0事件映射到CTM总线1 REG_WRITE(CTI_GATE, (1<<1));

3. 实战调试技巧

3.1 追踪配置优化

根据应用场景选择追踪模式:

  • 模式对比表:
模式带宽需求适用场景典型配置
PC采样8bit@10MHz性能分析ETF循环缓冲
数据追踪64bit@100MHz内存错误调试TPIU外接分析仪
全指令追踪128bit@200MHz安全认证ETR DDR存储

在Cortex-M7项目中,我们通过缩小ATB宽度到32bit并启用数据压缩,使ETB记录时间从2分钟延长到15分钟。

3.2 常见问题排查

  1. 调试器连接失败:

    • 检查SWJ-DP的jtagsw信号电平
    • 验证DAPBUS interconnect的时钟门控状态(dapclken)
  2. 追踪数据丢失:

    • 使用ATB同步桥的FIFO深度参数调节(建议≥16)
    • 检查Timestamp Generator的时钟同步状态
  3. 低功耗状态异常:

    • 确认所有异步桥接器的csysreq/csysack握手
    • 测量电源域隔离缓冲器的漏电流(应<1μA)

3.3 性能调优案例

某AI加速器项目中,通过CoreSight发现DMA性能瓶颈:

  1. 配置STM监控AXI总线事务
  2. 通过CTI触发DMA传输前后的时间戳记录
  3. 分析显示总线仲裁延迟占传输时间35%
  4. 优化后吞吐量提升22%

对应trace解码命令:

# 使用DS-5 Trace Analyzer trace32 -c "CONFIG CORE=CA53_0" -f trace.etf

4. 系统集成建议

4.1 时钟设计

  • 调试子系统建议使用独立时钟源(与处理器时钟异步)
  • ATB总线时钟应≥2倍追踪源时钟频率
  • Timestamp Generator需专用高精度振荡器(±50ppm)

4.2 电源管理

  • 为每个电压域配置独立的DAPBUS异步桥
  • 在UPF中明确定义调试网络的电源状态:
    create_power_domain PD_DBG -elements {cxatb_bridge} set_retention R_DBG -domain PD_DBG -save_signal {save} -restore_signal {restore}

4.3 安全性设计

  • 利用APB-AP的PADDR31信号区分调试工具和片上软件访问
  • 为关键组件(如ETR)配置TrustZone安全属性
  • 在安全启动流程中锁定调试接口(通过efuse控制)

随着异构计算架构的普及,CoreSight的灵活配置特性将发挥更大价值。建议新项目采用CoreSight v3架构,其增强的分布式追踪功能可更好地适应chiplet设计需求。

← 返回列表