USER GUIDE / SECURITY / BUS MONITOR / BUS MONITOR OPERATION

BUS_MONITOR 操作

AXI & AHB bus

Axi read burst
Axi write burst

G32S10 ID 中的数据块

CH0:TNPU

CH1:V1

CH2:V0

CH3:IPU / MSC0 / MSC1 / I2D

CH4:ISP / DPU

CH5:AHB

CH6:MCU-DMA

CH7:ENC / DEC / SCALER

带宽监测

带宽监测主要分为两种模式,手动控制以及自动控制;

手动控制模式:

  1. 配置 CH_FUN_CTRL.CH_FUN_CLR 清除所有计数,初始化操作;
  2. 配置 CH_FUN_CTRL.CH_FUN_MODE 为 1 使用手动控制模式;
  3. 配置 CH_FUN_CTRL.CH_FUN_EN 为 1 启动监测;
  4. 一段时间后,配置 CH_FUN_CTRL.CH_FUN_EN 为 0 关闭监测;
  5. 读取 VAL_CLK_NUM、WVAL_HIT_NUM、RVAL_HIT_NUM。

自动控制模式:

  1. 配置 CH_FUN_CTRL.CH_FUN_CLR 清除所有计数,初始化操作;
  2. 配置 CH_FUN_CTRL.CH_FUN_MODE 为 0 使用自动控制模式;
  3. 配置 CH_CLK_THRES,表明自动监测多长时间后停止监测;
  4. 配置 CH_FUN_CTRL.CH_FUN_EN 为 1 启动监测;
  5. 等待 CH_INT_STATE.CH_CNT_DONE 为 1 表明监测完成,配置 CH_INT_CTRL.CH_INT_CLR 清除状态;
  6. 读取 VAL_CLK_NUM、WVAL_HIT_NUM、RVAL_HIT_NUM。

AXI ch 带宽计算方式为(以 CH0 举例):

B = Fch0 * (WVAL_HIT_NUM + RVAL_HIT_NUM) * 8 / VAL_CLK_NUM

其中,Fch0 为 CH0 的时钟频率,单位 Mhz。

AHB ch 带宽计算方式为(以 CH6 举例):

B = Fch6 * (WVAL_HIT_NUM + RVAL_HIT_NUM) * 4 / VAL_CLK_NUM

其中,Fch6 为 CH6 的时钟频率,单位 Mhz。

DEBUG FUNCTION

配置 DBG_TRANS_EN 为 1 可使能总线 debug 模式,monitor 中所有 debug 功能将全部被启用。

在 watchdog 复位或者 pprst 复位时,所有 debug 信息将被锁存在 monitor 内部对应的寄存器中(推荐最好使用 watchdog 复位),复位释放后第一时间读取出 debug 信息用于分析现场。分析策略如下:

  1. 根据 DBG_BRIDGE0 寄存器中信息判断 CPU / TNPU 是否发出过 AHB 的非 single 访问,正常情况下,CPU / TNPU 在访问模块时为 single 访问,当 0-5bit 为 1 时,CPU / TNPU 所发出的行为不符合预期;

以 DBG_BRIDGE0 中的第 0、6、12bit 为例分析(CPU 访问 AHB0 下的模块):

第0bit第6bit第12bitDebug分析
011正常情况
00x异常,总线出现挂死现象
111出现非single访问,但总线未出现异常
10x异常,总线出现挂死现象,可能和非single访问有关
其余组合情况可能性较低,未做分析

同时结合 DBG_BRIDGE1 寄存器,可知道具体是哪个模块在访问哪个模块,具体可见 DBG_BRIDGE1 寄存器中的注释。

  1. DDR 挂死情况分析,DDR 中共有 7 个 ch,除 ch5 以外(ahb 总线 ch),其余 ch 均为 axi 总线 ch,在 debug 时,对每一个 ch 中的各标志位进行分析帮助定位,以 DBG_DDRC_CH0 为例:
位名称说明RW
31:20Reserved写入无影响,读取为零。R
19TIMEOUT_WR写数据超出一定时间阈值无法响应时,置位为1(阈值可配)R
18:11MISMATCH_ID当AXI写传输时,实际写数据量和写cmd发出的数据量不匹配时,记录下AX_ID号,用于判断是哪个主机发生错误R
10MISMATCH_WR当AXI写传输时,实际写数据量和写cmd发出的数据量不匹配时,置位为1R
9EXCEED_RANGE_RD配置AXI读地址范围,当总线访问不在范围内,置位为1R
8EXCEED_RANGE_WR配置AXI写地址范围,当总线访问不在范围内,置位为1R
7EXCEED_4K_RD当AXI总线读传输跨4K边界时,置位为1R
6EXCEED_4K_WR当AXI总线读传输跨4K边界时,置位为1R
5BUSY_WR0:AXI写传输空闲状态 1:AXI写传输未完成R
4BUSY_RD0:AXI读传输空闲状态 1:AXI读传输未完成R
3RREADY读传输ready信号,正常情况下应为1R
2RVALID读传输valid信号,正常情况下应为0R
1WREADY读传输ready信号,正常情况下应为1R
0WVALID读传输valid信号,正常情况下应为0R

优先根据第 4、5bit 判断总线上是否空闲,当处于传输未完成状态时,再根据第 0-3bit 初步判断是由于什么信号导致未完成,如下:

BUSY_WRBUSY_RDWVALIDWREADYRVALIDRREADYDebug分析
000101/0正常情况
101001/0axi写传输挂死,挂死原因为 DDR 不接收写数据,但具体原因可能是别的 ch 间接引起
100101/0axi写传输挂死,原因为该 ch 的主机不再发送数据,导致DDR挂死
010110axi读传输挂死,原因为该 ch 的主机发出了读命令,但是不再接受读数据

上述分析情况为分别只有读或者写未完成传输的情况。当读写传输同时处于未完成状态时,优先分析写传输的 debug 信息进行定位,在多数情况下,写传输导致的 DDR 挂死会蔓延至所有 ch 的读写传输,而读传输导致的挂死仅影响该 ch 的读传输。

初步定位到读写传输挂死后,可根据第 6-19bit 判断在传输过程中出现过什么类型的错误,当出现第 10bit 实际写传输数据量和发出的命令不对应时,会记录下此时的 ID 号(第 11-18bit),可根据 ID 号判断是哪个主机发出了异常行为。

  1. 第 2 点描述中提到了写传输挂死会蔓延到所有的 ch,在蔓延的过程中,记录顺序可在一定程度上帮助判断(多数情况下最先挂死的 ch 是挂死的根本原因)。通过 DBG_SORT 寄存器可知顺序,若 ch1 最先挂死,则 DBG_SORT 从高位开始会记录 1001(B),其中高位 1 为挂死标志,001 为 ch1 序号。
  2. 此外,debug 模式下还会保存一些关键模块中的重要信息,在 DBG_DDRC_ISP 中,分别记录了 DDRC 模块以及 ISP 模块中的一些关键信号,在上述 3 点 debug 策略过程中可结合 DBG_DDRC_ISP 信息分析,帮助有效定位。

注:debug 方案本身是在以往芯片经验上结合对于整体架构的理解输出的方案,但在真是芯片上可能远不止于此的 bug 定位。上述思路只是一个言简意赅的分析顺序,具体情况还需具体分析。