JAJAA48 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参考資料
X FSM 構成パリティエラー

HWA_CONFIG レジスタでパリティの不一致が検出された場合、X FSM 構成パリティ エラーが発生します。X FSM 構成パリティ エラーを注入する手順を、次の手順に示します。

  1. HWAOPEN 命令は、パリティ計算およびパリティ チェックを有効 (PARITYCTRL = NORMAL) にした状態で HWA_CONFIG および HWA_OFFSET に書き込むために使用されます。また、Get_MMAconfig() で指定されたパラメータを使用して HWA_CONFIG を設定します。
  2. ベクトル レジスタの値は、テストすべき特定のフィールド (X FSM) のソフトウェアによって破損します。

  3. HWAOPEN 命令は再び使用され、パリティ計算を無効にし、パリティ チェックを有効 (PARITYCTRL = PNCMCK) に設定した状態で、その C7x ベクタ レジスタの破損データを使用して HWA_CONFIG および HWA_OFFSET に書き込みを行います。このモードでは、最初に計算された保存されたパリティ値が、影響を受けるレジスタで使用されて計算されたパリティと比較してチェックされます。
  4. HWAXFER を実行してエラーを注入します。このエラーは HWA_STATUS レジスタで更新されます。
  5. HWARCV 命令が実行され、エラーが観測されます。

#pragma FUNCTION_OPTIONS(Get_XFSM_Corrupt_config,"--opt_level=off")
__HWA_CONFIG_REG_v1 Get_XFSM_Corrupt_config(void)
{
  __HWA_CONFIG_REG_v1 corrupted_config = __gen_HWA_CONFIG_REG_v1(); 
  corrupted_config.X_ReLU = 1;
  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_XFSM_configParityError_injection,"--opt_level=off")
void MMA_XFSM_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); //Initialises Config,offset
 __HWAXFER(__MMA_XFER_SRC_HWA_CONFIG);
  __HWA_CONFIG_REG_v1 mma_config_corrupt = Get_XFSM_Corrupt_config(); //Receives X FSM corrupt configuration
  mma_config_corrupt.PARITYCTRL = __MMA_PNCM_CK; //Parity checking enabled calculation disabled
  __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();
  __HWAXFER(__MMA_XFER_SRC_HWA_CONFIG); 
  __HWAADV();
  __HWAADV();
  __HWAADV();
  __HWARCV(0);
  __asm(" NOP");
  __asm(" NOP");
}