ZHCAFU0 October   2025 TDA4VM

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2指令
    1. 2.1 范围
    2. 2.2 HWA 指令定义
    3. 2.3 故障注入程序
      1. 2.3.1 方框图
      2. 2.3.2 故障注入:步骤
        1. 2.3.2.1 下溢错误
        2. 2.3.2.2 溢出错误
        3. 2.3.2.3 偏移奇偶校验错误
        4. 2.3.2.4 配置奇偶校验错误
          1. 2.3.2.4.1 FSM 配置奇偶校验错误
          2. 2.3.2.4.2 B FSM 配置奇偶校验错误
          3. 2.3.2.4.3 C FSM 配置奇偶校验错误
          4. 2.3.2.4.4 X FSM 配置奇偶校验错误
        5. 2.3.2.5 C 读取错误
        6. 2.3.2.6 C 写入错误
  6. 3流程图
    1. 3.1 代码更改
      1. 3.1.1 返回挂钩定义
      2. 3.1.2 清除 MMA 函数
      3. 3.1.3 序列测试
  7. 4总结
  8. 5参考资料
C FSM 配置奇偶校验错误

当在 HWA_CONFIG 寄存器中检测到奇偶校验不匹配时,会发生 C FSM 配置奇偶校验错误。以下步骤列出了有关如何注入 C FSM 配置奇偶校验错误的程序。

  1. HWAOPEN 指令用于在启用奇偶校验计算和启用奇偶校验 (PARITYCTRL = NORMAL) 的情况下,写入 HWA_CONFIG 和 HWA_OFFSET,也可使用 Get_MMAconfig() 中提到的参数来配置 HWA_CONFIG。
  2. 在要进行测试的特定字段 (C FSM),软件会损坏向量寄存器中的数据值。
  3. 在禁用奇偶校验计算并启用奇偶校验 (PARITYCTRL = PNCMCK) 的情况下,HWAOPEN 指令再次用于使用来自该 C7x 向量寄存器的损坏数据写入 HWA_CONFIG 和 HWA_OFFSET。在此模式下,将根据受影响寄存器中使用时计算出的奇偶校验值,检查最初计算并保存的奇偶校验值。
  4. 执行 HWALDC /HWAXFER 以注入错误。错误会在 HWA_STATUS 寄存器中更新。
  5. 执行 HWARCV 指令以观察错误。
#pragma FUNCTION_OPTIONS(Get_CFSM_Corrupt_config,"--opt_level=off")
__HWA_CONFIG_REG_v1 Get_CFSM_Corrupt_config(void)
{
  __HWA_CONFIG_REG_v1 corrupted_config = __gen_HWA_CONFIG_REG_v1(); 
  corrupted_config.C_ATYPE = __MMA_C_CONFIG_ATYPE_UA; 
  corrupted_config.C_BTYPE = __MMA_C_CONFIG_BTYPE_UINT16;
  return corrupted_config;
}
#pragma FUNCTION_OPTIONS(Get_MMAconfig,"--opt_level=off")
__HWA_CONFIG_REG_v1 Get_MMAconfig(void)
{
  __HWA_CONFIG_REG_v1 mma_config_reg;
  mma_config_reg = __gen_HWA_CONFIG_REG_v1();
  mma_config_reg.A_ATYPE = __MMA_A_CONFIG_ATYPE_UINT16;
  mma_config_reg.A_ALUTEN = __MMA_A_LUTEN_LAST;
  mma_config_reg.B_BSWPER = 1000;
  mma_config_reg.B_BTYPE = __MMA_B_CONFIG_SIZE16;
  mma_config_reg.B_BSTART = 1;
  mma_config_reg.C_ATYPE = __MMA_C_CONFIG_ATYPE_SA;
  mma_config_reg.C_BTYPE = __MMA_C_CONFIG_BTYPE_UINT16;
  mma_config_reg.PARITYCTRL = __MMA_NORMAL;
  mma_config_reg.C_BSTART = 1; /* Initial B bank selection for reading B matrix data for the matrix computations */
  mma_config_reg.C_CRSTART = 1; /* Initial C bank selection for reading operands */
  mma_config_reg.C_CWSTART = 1; /* Initial C bank selection for writing computation results */
  mma_config_reg.C_CLSTART = 1; 
  return mma_config_reg;
}

#pragma FUNCTION_OPTIONS(MMA_CFSM_configParityError_injection,"--opt_level=off")
void MMA_CFSM_configParityError_injection(void)
{
  __HWA_CONFIG_REG_v1 mma_config_reg = Get_MMAconfig();
  __HWA_OFFSET_REG offset_reg;
  offset_reg = __gen_HWA_OFFSET_REG(); 
  __HWAOPEN(mma_config_reg,offset_reg,__MMA_OPEN_FSM_RESET);
 __HWAADV();
  __HWAADV();
  __HWAADV();
  __asm(" HWALDC .L2 VB1");
  __HWAXFER(__MMA_XFER_SRC_C);
  __HWA_CONFIG_REG_v1 mma_config_corrupt = Get_CFSM_Corrupt_config();
  mma_config_corrupt.PARITYCTRL = __MMA_PNCM_CK;
  __HWA_OFFSET_REG offset_reg2 = __gen_HWA_OFFSET_REG(); 
  __HWAADV();
  __HWAADV();
  __HWAADV();
  __HWAOPEN(mma_config_corrupt,offset_reg2,__MMA_OPEN_FSM_RESET);
   __HWAADV();
  __HWAADV();
  __HWAADV();
  __asm(" HWALDC .L2 VB0"); //Load to C Matrix
  __HWAXFER(__MMA_XFER_SRC_HWA_CONFIG);
 __HWAADV();
  __HWAADV();
  __HWAADV();
  __HWARCV(0);
  __asm(" NOP");
  __asm(" NOP");
}