CMN-600AE的调试跟踪系统采用分布式架构设计,由DTM(Debug Trace Module)和DTC(Debug Trace Controller)两级组件构成。每个XP(交叉点)节点都集成DTM模块,负责本节点的CHI协议层事务监控;而DTC作为域控制器,负责协调多个DTM的工作并管理ATB(Advanced Trace Bus)输出接口。
ATB总线上的数据包采用4字节头部+可变长度负载的格式。头部关键字段包括:
典型跟踪数据流包含以下有序元素:
关键技巧:当启用周期计数时,ATB包头部CC位会置1,此时在数据负载后会附加2字节的周期计数。这个特性对分析跨组件延迟至关重要。
每个DTM提供4个观察点(WP0-WP3),可通过以下寄存器组配置:
配置示例:监控RN-F2节点的ReadShared请求
c复制// 配置WP0匹配Opcode
write_reg(por_dtm_wp0_val, CHI_OPCODE_ReadShared);
write_reg(por_dtm_wp0_mask, CHI_OPCODE_MASK);
write_reg(por_dtm_wp0_config,
(WP_DEV_SEL_RNF2_PORT | WP_CHN_SEL_REQ | WP_GRP_PRIMARY));
// 配置WP1匹配特定地址X
write_reg(por_dtm_wp1_val, X);
write_reg(por_dtm_wp1_mask, 0xFFFFFFFF);
write_reg(por_dtm_wp1_config,
(WP_DEV_SEL_RNF2_PORT | WP_CHN_SEL_REQ | WP_GRP_SECONDARY));
// 启用组合模式
set_bit(por_dtm_wp0_config, WP_COMBINE_BIT);
// 启用跟踪包生成
set_field(por_dtm_wp0_config, WP_PKT_TYPE, TRACE_TYPE_FULL);
set_bit(por_dtm_wp0_config, WP_PKT_GEN_BIT);
// 最后启用DTM
set_bit(por_dtm_control, DTM_ENABLE_BIT);
CMN-600AE的标签传播具有以下特点:
典型应用场景:追踪特定地址的完整事务生命周期,分析从请求发起到数据返回的全路径延迟。
实现步骤:
c复制// 配置DTC等待HN-D的10次触发
write_reg(por_dt_dtc_ctl,
(CROSS_TRIGGER_COUNT(9) | WAIT_FOR_TRIGGER_BIT));
触发时序:
CMN-600AE的PMU采用分层设计:
联动关系:
实现周期性事件采样的关键步骤:
c复制// 1. 配置XP事件源
write_reg(xp_pmu_event_sel, EVENT_CACHE_MISS);
// 2. 映射本地计数器0到全局计数器A
set_field(por_dtm_pmu_config, PMEVCNT0_GLOBAL_NUM, 0); // 0对应A
// 3. 设置采样间隔为1000周期
write_reg(por_dtm_pmsirr, 1000);
write_reg(por_dtm_pmsicr, 1000);
// 4. 启用PMU
set_bit(por_dtm_pmu_config, PMU_EN_BIT);
set_bit(por_dt_pmcr, PMU_EN_BIT);
触发快照的两种方式:
中断处理流程:
c复制void pmu_isr() {
// 检查溢出源
uint32_t pmovsr = read_reg(por_dt_pmovsr);
// 处理计数器A溢出
if (pmovsr & 0x1) {
// 读取快照值
uint32_t snapshot = read_reg(por_dt_pmevcnta_shadow);
// ...处理逻辑...
// 清除中断标志
write_reg(por_dt_pmovsr_clr, 0x1);
}
}
针对不同通道的优化配置建议:
| 通道类型 | 关键监控字段 | 典型用途 |
|---|---|---|
| REQ | Opcode, Addr, SrcID | 事务起源分析 |
| RSP | Opcode, RespErr | 错误诊断 |
| SNP | Opcode, TgtID | 一致性流量监控 |
| DAT | DataID, DataLen | 带宽利用率分析 |
实现精确时序分析的三个关键:
时序校准示例:
code复制[时间轴]
XP0: |---[REQ]----[RSP]---------------|
XP1: |------[SNP]-----[DAT]-----------|
▲ Δt1 ▲ Δt2
通过周期计数包可计算出:
- REQ到SNP延迟Δt1
- SNP到RSP延迟Δt2
问题1:ATB数据不完整
问题2:PMU计数不准
问题3:跨组件触发不同步
通过PMU计数器监测到HN-F端口拥塞时,可采取以下措施:
c复制// 原始256B写操作
WriteUnique(addr, 256B);
// 优化为4个64B写
for (i=0; i<4; i++) {
WriteUnique(addr+i*64, 64B);
}
关键寄存器设置:
c复制// 启用CXLA低延迟模式
set_bit(por_cxg_ra_cfg_ctl, EN_CXLA_PMUCMD_PROP_BIT);
// 设置RN-I最优参数
write_reg(por_rni_qos,
(ARB_WEIGHT_HIGH << REQ_ARB_WEIGHT_POS) |
(1 << COMBINE_WRITES_POS));
实测效果对比:
code复制| 配置方案 | 平均延迟(ns) | 吞吐量(GB/s) |
|---------------|--------------|--------------|
| 默认参数 | 120 | 25.6 |
| 优化参数 | 82 | 28.4 |
在完成CMN-600AE的调试跟踪系统配置后,建议通过逐步增加观察点复杂度的方式验证系统行为:先从单个XP的REQ通道监控开始,逐步扩展到跨节点的标签传播场景,最后实施包含PMU计数的全系统监控。实际项目中,我们发现将周期计数包间隔设置为100μs能在跟踪数据量和时序精度间取得较好平衡。