cmod/glb/gen/glb_reg_model.h
ファイル名: glb_reg_model.h
// ================================================================
// NVDLA Open Source Project
//
// Copyright(c) 2016 - 2017 NVIDIA Corporation. Licensed under the
// NVDLA Open Hardware License; Check "LICENSE" which comes with
// this distribution for more information.
// ================================================================
// File Name: glb_reg_model.h
#ifndef _GLB_REG_MODEL_H_
#define _GLB_REG_MODEL_H_
#include <systemc.h>
#include <tlm.h>
#include "scsim_common.h"
SCSIM_NAMESPACE_START(clib)
SCSIM_NAMESPACE_END()
SCSIM_NAMESPACE_START(cmod)
// Forward declarating cmacro parsed register model class
class CNVDLA_GLB_REGSET;
これは glb_reg_model.h
という名前のヘッダー ファイルで、NVIDIA の NVDLA (NVIDIA Deep Learning Accelerator) オープン ソース プロジェクトに属しています。このヘッダー ファイルの主な内容と機能は次のとおりです。
-
ファイルの先頭の注意: ファイルには、コードの著作権とライセンス情報を示す著作権情報と使用許諾契約が含まれています。
-
#ifndef
および#define
ディレクティブ: これらのディレクティブは、複数のインクルードを避けるためにヘッダー ファイルの内容をラップするために使用されます。ファイルが 1 回だけ組み込まれるようにするために、プリプロセッサ マクロ_GLB_REG_MODEL_H_
を定義します。 -
には他のヘッダー ファイルが含まれています: ヘッダー ファイルには、
systemc.h
やtlm.h
などのいくつかのシステム レベルのヘッダー ファイルと、カスタマイズされたscsim_common.h
。 -
名前空間: 名前空間は、コードを整理するためにコード内で使用されます。
SCSIM_NAMESPACE_START(clib)
とSCSIM_NAMESPACE_END()
はclib
という名前の名前空間を定義し、SCSIM_NAMESPACE_START(cmod)
は名前空間という名前の名前空間を定義します。cmod
の。 -
クラス の前方宣言: ファイル
class CNVDLA_GLB_REGSET;
内に、CNVDLA_GLB_REGSET
という名前のクラスを宣言する前方宣言がありますが、クラス定義は提供されていません。これはおそらく、クラスの定義が別のファイルにあり、ヘッダー ファイルはクラスの存在を認識する必要があるだけで、完全な定義を含める必要がないためです。
つまり、このヘッダー ファイルの主な機能は、後続のコードに必要なインクルージョンと名前空間の定義を提供し、CNVDLA_GLB_REGSET
という名前のクラスを宣言し、その定義はファイル内の別の場所にあります。
class glb_reg_model {
public:
glb_reg_model();
~glb_reg_model();
sc_event operation_enable_event_;
sc_event intr_status_w;
protected:
// bool is_there_ongoing_glb_csb_response_;
CNVDLA_GLB_REGSET *glb_register_group;
// Register field variables
uint8_t s_nvdla_hw_version_major_;
uint16_t s_nvdla_hw_version_minor_;
uint8_t s_intr_mask_sdp_done_mask0_;
uint8_t s_intr_mask_sdp_done_mask1_;
uint8_t s_intr_mask_cdp_done_mask0_;
uint8_t s_intr_mask_cdp_done_mask1_;
uint8_t s_intr_mask_pdp_done_mask0_;
uint8_t s_intr_mask_pdp_done_mask1_;
uint8_t s_intr_mask_bdma_done_mask0_;
uint8_t s_intr_mask_bdma_done_mask1_;
uint8_t s_intr_mask_rubik_done_mask0_;
uint8_t s_intr_mask_rubik_done_mask1_;
uint8_t s_intr_mask_cdma_dat_done_mask0_;
uint8_t s_intr_mask_cdma_dat_done_mask1_;
uint8_t s_intr_mask_cdma_wt_done_mask0_;
uint8_t s_intr_mask_cdma_wt_done_mask1_;
uint8_t s_intr_mask_cacc_done_mask0_;
uint8_t s_intr_mask_cacc_done_mask1_;
uint8_t s_intr_set_sdp_done_set0_;
uint8_t s_intr_set_sdp_done_set1_;
uint8_t s_intr_set_cdp_done_set0_;
uint8_t s_intr_set_cdp_done_set1_;
uint8_t s_intr_set_pdp_done_set0_;
uint8_t s_intr_set_pdp_done_set1_;
uint8_t s_intr_set_bdma_done_set0_;
uint8_t s_intr_set_bdma_done_set1_;
uint8_t s_intr_set_rubik_done_set0_;
uint8_t s_intr_set_rubik_done_set1_;
uint8_t s_intr_set_cdma_dat_done_set0_;
uint8_t s_intr_set_cdma_dat_done_set1_;
uint8_t s_intr_set_cdma_wt_done_set0_;
uint8_t s_intr_set_cdma_wt_done_set1_;
uint8_t s_intr_set_cacc_done_set0_;
uint8_t s_intr_set_cacc_done_set1_;
uint8_t s_intr_status_sdp_done_status0_;
uint8_t s_intr_status_sdp_done_status1_;
uint8_t s_intr_status_cdp_done_status0_;
uint8_t s_intr_status_cdp_done_status1_;
uint8_t s_intr_status_pdp_done_status0_;
uint8_t s_intr_status_pdp_done_status1_;
uint8_t s_intr_status_bdma_done_status0_;
uint8_t s_intr_status_bdma_done_status1_;
uint8_t s_intr_status_rubik_done_status0_;
uint8_t s_intr_status_rubik_done_status1_;
uint8_t s_intr_status_cdma_dat_done_status0_;
uint8_t s_intr_status_cdma_dat_done_status1_;
uint8_t s_intr_status_cdma_wt_done_status0_;
uint8_t s_intr_status_cdma_wt_done_status1_;
uint8_t s_intr_status_cacc_done_status0_;
uint8_t s_intr_status_cacc_done_status1_;
// CSB request target socket
// void csb2glb_b_transport (int ID, NV_MSDEC_csb2xx_16m_secure_be_lvl_t* payload, sc_time& delay);
// CSB response send function
// void GlbSendCsbResponse(uint32_t date, uint8_t error_id);
// Register accessing
bool GlbAccessRegister(uint32_t reg_addr, uint32_t & data, bool is_write);
// Reset
void GlbRegReset();
// Update configuration from register to variable
void GlbUpdateVariables(CNVDLA_GLB_REGSET *reg_group_ptr);
//void GlbUpdateIdleStatus(bool status);
void GlbUpdateBdmaIntrStatus_0(bool status);
void GlbUpdateBdmaIntrStatus_1(bool status);
void GlbUpdateCdmaDatIntrStatus_0(bool status);
void GlbUpdateCdmaDatIntrStatus_1(bool status);
void GlbUpdateCdmaWtIntrStatus_0(bool status);
void GlbUpdateCdmaWtIntrStatus_1(bool status);
void GlbUpdatePdpIntrStatus_0(bool status);
void GlbUpdatePdpIntrStatus_1(bool status);
void GlbUpdateSdpIntrStatus_0(bool status);
void GlbUpdateSdpIntrStatus_1(bool status);
void GlbUpdateCdpIntrStatus_0(bool status);
void GlbUpdateCdpIntrStatus_1(bool status);
void GlbUpdateRbkIntrStatus_0(bool status);
void GlbUpdateRbkIntrStatus_1(bool status);
void GlbUpdateCaccIntrStatus_0(bool status);
void GlbUpdateCaccIntrStatus_1(bool status);
};
SCSIM_NAMESPACE_END()
#endif
これは、 という名前のクラスを定義する glb_reg_model.h
という名前のヘッダー ファイルです。このクラスの主なメンバーと関数は次のとおりです。glb_reg_model
-
コンストラクタとデストラクタ: クラス
glb_reg_model
には、オブジェクトの作成と破棄のためのコンストラクタとデストラクタが含まれています。 -
メンバー変数:
operation_enable_event_
およびintr_status_w
: これらは、操作の有効化と割り込みステータスの監視を制御する SystemC イベント オブジェクトです。glb_register_group
: レジスタ グループの操作を管理するために使用される、タイプCNVDLA_GLB_REGSET
へのポインタ。- ハードウェア バージョン番号、割り込みマスク レジスタ、割り込み設定レジスタ、割り込みステータス レジスタなど、さまざまなレジスタ フィールドの値を保存するために使用される一連のメンバー変数。
-
関数メンバー:
GlbAccessRegister
: レジスタにアクセスするために使用され、指定したアドレスのレジスタ値を読み書きすることができます。GlbRegReset
: レジスタおよび内部ステータスをリセットするために使用されます。GlbUpdateVariables
: 設定をレジスタから変数に更新するために使用されます。- さまざまな割り込みステータスを更新するために使用される一連の関数 (
GlbUpdateBdmaIntrStatus_0
、GlbUpdateBdmaIntrStatus_1
など)。
このクラスの主な目的は、構成、割り込みステータス、割り込みマスクなどを含む、NVDLA のグローバル レジスタ セットを管理することです。これらのレジスタにアクセスして更新する機能に加え、割り込みステータスと割り込みマスキングを処理するロジックも提供します。これらの関数は、NVDLA モジュールの構成と割り込み処理を制御するために使用されます。
glb_reg_model.cpp
// ================================================================
// NVDLA Open Source Project
//
// Copyright(c) 2016 - 2017 NVIDIA Corporation. Licensed under the
// NVDLA Open Hardware License; Check "LICENSE" which comes with
// this distribution for more information.
// ================================================================
// File Name: glb_reg_model.cpp
#include "glb_reg_model.h"
#include "arnvdla.uh"
#include "arnvdla.h"
#include "cmacros.uh"
#include "log.h"
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
SCSIM_NAMESPACE_START(cmod)
MK_UREGSET_CLASS(NVDLA_GLB)
SCSIM_NAMESPACE_END()
USING_SCSIM_NAMESPACE(cmod)
USING_SCSIM_NAMESPACE(clib)
using namespace tlm;
using namespace sc_core;
using namespace std;
glb_reg_model & :~glb_reg_model
glb_reg_model::glb_reg_model() {
glb_register_group = new CNVDLA_GLB_REGSET;
GlbRegReset();
}
glb_reg_model::~glb_reg_model() {
delete glb_register_group;
}
これは、glb_reg_model
クラスのコンストラクターとデストラクターの実装です。
コンストラクター内:
- は
glb_register_group
という名前のポインタを作成し、new
演算子を使用してCNVDLA_GLB_REGSET
型のオブジェクトを割り当てます。 GlbRegReset
関数を呼び出して、レジスタと内部状態を初期化します。
デストラクター内:
- メモリ リークを避けるために、コンストラクタに割り当てられた
glb_register_group
オブジェクトのメモリを解放します。
これらのコンストラクターとデストラクターの目的は、オブジェクトの作成と破棄中に必要な操作を実行して、リソースの適切な管理と解放を保証することです。コンストラクターでは、オブジェクトの作成後にレジスタと内部状態が初期化されますが、デストラクターでは、オブジェクトが破棄されると、対応するメモリ リソースが解放されます。
Glbアクセス登録
bool glb_reg_model::GlbAccessRegister(uint32_t reg_addr, uint32_t & data, bool is_write) {
uint32_t offset;
uint32_t rdata = 0;
uint32_t new_value = 0;
offset = (reg_addr & 0xFFF); // each sub-unit has only 4KBytes
if (is_write) {
// Write Request
if (offset == REG_off(NVDLA_GLB_S_INTR_STATUS)) {
glb_register_group->Get(offset, &rdata);
new_value = rdata & (~data);
glb_register_group->SetWritable(offset, new_value);
GlbUpdateVariables(glb_register_group);
if((new_value&0xf03ff)==0)
intr_status_w.notify();
} else {
glb_register_group->SetWritable(offset, data);
}
} else {
// Read Request
glb_register_group->Get(offset, &rdata);
data = rdata;
}
return true;
}
これは、glb_reg_model
クラスの GlbAccessRegister
関数の実装であり、レジスタにアクセスし、読み取りおよび書き込み操作を実行するために使用されます。
reg_addr
パラメータはアクセスするレジスタのアドレスを表します。data
パラメータは、レジスタから読み取られるデータ、またはレジスタに書き込まれるデータを格納する参照です。is_write
パラメータは、書き込み操作を実行するかどうかを示すブール値です。true
の場合は書き込み操作が実行され、false
の場合は読み取り操作が実行されます。
関数内では次の処理が行われます。
reg_addr
に基づいてレジスタ グループに対するオフセットoffset
を計算します。is_write
がtrue
の場合は、書き込み操作を実行し、offset
(例: a>NVDLA_GLB_S_INTR_STATUS
)。特定のレジスタの場合は、レジスタの対応するビットをビット単位でクリア(AND演算)し、新しい値をレジスタに書き込みます。新しい値の特定のビット (ここでは0xf03ff
) がすべて 0 の場合、intr_status_w
イベントがトリガーされます。is_write
がfalse
の場合、読み取り操作が実行され、レジスタからデータを読み取り、そのデータを < a i =3> をパラメータに指定します。data
- 最後に、関数は
true
を返し、操作が正常に完了したことを示します。
この関数により、レジスタへの読み取りおよび書き込み操作が可能になり、書き込み操作中に対応するイベントがトリガーされます。
GlbUpdate*
void glb_reg_model::GlbRegReset() {
glb_register_group->ResetAll();
}
//void glb_reg_model::GlbUpdateIdleStatus(bool status) {
//}
void glb_reg_model::GlbUpdateBdmaIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uBDMA_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateBdmaIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uBDMA_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdatePdpIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uPDP_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdatePdpIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uPDP_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateSdpIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uSDP_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateSdpIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uSDP_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateCdpIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uCDP_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateCdpIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uCDP_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateRbkIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uRUBIK_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateRbkIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uRUBIK_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateCaccIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uCACC_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateCaccIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uCACC_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateCdmaDatIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uCDMA_DAT_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateCdmaDatIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uCDMA_DAT_DONE_STATUS1(status);
}
void glb_reg_model::GlbUpdateCdmaWtIntrStatus_0(bool status) {
glb_register_group->rS_INTR_STATUS.uCDMA_WT_DONE_STATUS0(status);
}
void glb_reg_model::GlbUpdateCdmaWtIntrStatus_1(bool status) {
glb_register_group->rS_INTR_STATUS.uCDMA_WT_DONE_STATUS1(status);
}
これらはglb_reg_model
クラスの一連の関数であり、さまざまなサブユニット (BDMA、PDP、SDP、CDP など) の割り込みステータス レジスタの値を更新するために使用されます。 )、および割り込みステータスで変化が発生すると、対応するレジスタフィールドに書き込まれます。これらの関数の機能は次のとおりです。
-
GlbUpdateBdmaIntrStatus_0
およびGlbUpdateBdmaIntrStatus_1
: BDMA サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdatePdpIntrStatus_0
およびGlbUpdatePdpIntrStatus_1
: PDP サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateSdpIntrStatus_0
およびGlbUpdateSdpIntrStatus_1
: SDP サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateCdpIntrStatus_0
およびGlbUpdateCdpIntrStatus_1
: CDP サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateRbkIntrStatus_0
およびGlbUpdateRbkIntrStatus_1
: RBK サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateCaccIntrStatus_0
およびGlbUpdateCaccIntrStatus_1
: CACC サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateCdmaDatIntrStatus_0
およびGlbUpdateCdmaDatIntrStatus_1
: CDMA_DAT サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。 -
GlbUpdateCdmaWtIntrStatus_0
およびGlbUpdateCdmaWtIntrStatus_1
: CDMA_WT サブユニットの割り込みステータス レジスタのビット 0 および 1 を更新します。
これらの関数は、さまざまなサブユニットの割り込みステータスに従って、対応するレジスタフィールドの値を更新するために使用されます。場合によっては、特定の条件が満たされたときに他のイベントやアクションもトリガーします。
GlbUpdate変数
void glb_reg_model::GlbUpdateVariables(CNVDLA_GLB_REGSET *reg_group_ptr) {
s_nvdla_hw_version_major_ = reg_group_ptr->rS_NVDLA_HW_VERSION.uMAJOR();
s_nvdla_hw_version_minor_ = reg_group_ptr->rS_NVDLA_HW_VERSION.uMINOR();
s_intr_mask_sdp_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uSDP_DONE_MASK0();
s_intr_mask_sdp_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uSDP_DONE_MASK1();
s_intr_mask_cdp_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uCDP_DONE_MASK0();
s_intr_mask_cdp_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uCDP_DONE_MASK1();
s_intr_mask_pdp_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uPDP_DONE_MASK0();
s_intr_mask_pdp_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uPDP_DONE_MASK1();
s_intr_mask_bdma_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uBDMA_DONE_MASK0();
s_intr_mask_bdma_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uBDMA_DONE_MASK1();
s_intr_mask_rubik_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uRUBIK_DONE_MASK0();
s_intr_mask_rubik_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uRUBIK_DONE_MASK1();
s_intr_mask_cdma_dat_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uCDMA_DAT_DONE_MASK0();
s_intr_mask_cdma_dat_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uCDMA_DAT_DONE_MASK1();
s_intr_mask_cdma_wt_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uCDMA_WT_DONE_MASK0();
s_intr_mask_cdma_wt_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uCDMA_WT_DONE_MASK1();
s_intr_mask_cacc_done_mask0_ = reg_group_ptr->rS_INTR_MASK.uCACC_DONE_MASK0();
s_intr_mask_cacc_done_mask1_ = reg_group_ptr->rS_INTR_MASK.uCACC_DONE_MASK1();
s_intr_set_sdp_done_set0_ = reg_group_ptr->rS_INTR_SET.uSDP_DONE_SET0();
s_intr_set_sdp_done_set1_ = reg_group_ptr->rS_INTR_SET.uSDP_DONE_SET1();
s_intr_set_cdp_done_set0_ = reg_group_ptr->rS_INTR_SET.uCDP_DONE_SET0();
s_intr_set_cdp_done_set1_ = reg_group_ptr->rS_INTR_SET.uCDP_DONE_SET1();
s_intr_set_pdp_done_set0_ = reg_group_ptr->rS_INTR_SET.uPDP_DONE_SET0();
s_intr_set_pdp_done_set1_ = reg_group_ptr->rS_INTR_SET.uPDP_DONE_SET1();
s_intr_set_bdma_done_set0_ = reg_group_ptr->rS_INTR_SET.uBDMA_DONE_SET0();
s_intr_set_bdma_done_set1_ = reg_group_ptr->rS_INTR_SET.uBDMA_DONE_SET1();
s_intr_set_rubik_done_set0_ = reg_group_ptr->rS_INTR_SET.uRUBIK_DONE_SET0();
s_intr_set_rubik_done_set1_ = reg_group_ptr->rS_INTR_SET.uRUBIK_DONE_SET1();
s_intr_set_cdma_dat_done_set0_ = reg_group_ptr->rS_INTR_SET.uCDMA_DAT_DONE_SET0();
s_intr_set_cdma_dat_done_set1_ = reg_group_ptr->rS_INTR_SET.uCDMA_DAT_DONE_SET1();
s_intr_set_cdma_wt_done_set0_ = reg_group_ptr->rS_INTR_SET.uCDMA_WT_DONE_SET0();
s_intr_set_cdma_wt_done_set1_ = reg_group_ptr->rS_INTR_SET.uCDMA_WT_DONE_SET1();
s_intr_set_cacc_done_set0_ = reg_group_ptr->rS_INTR_SET.uCACC_DONE_SET0();
s_intr_set_cacc_done_set1_ = reg_group_ptr->rS_INTR_SET.uCACC_DONE_SET1();
s_intr_status_sdp_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uSDP_DONE_STATUS0();
s_intr_status_sdp_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uSDP_DONE_STATUS1();
s_intr_status_cdp_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uCDP_DONE_STATUS0();
s_intr_status_cdp_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uCDP_DONE_STATUS1();
s_intr_status_pdp_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uPDP_DONE_STATUS0();
s_intr_status_pdp_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uPDP_DONE_STATUS1();
s_intr_status_bdma_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uBDMA_DONE_STATUS0();
s_intr_status_bdma_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uBDMA_DONE_STATUS1();
s_intr_status_rubik_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uRUBIK_DONE_STATUS0();
s_intr_status_rubik_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uRUBIK_DONE_STATUS1();
s_intr_status_cdma_dat_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uCDMA_DAT_DONE_STATUS0();
s_intr_status_cdma_dat_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uCDMA_DAT_DONE_STATUS1();
s_intr_status_cdma_wt_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uCDMA_WT_DONE_STATUS0();
s_intr_status_cdma_wt_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uCDMA_WT_DONE_STATUS1();
s_intr_status_cacc_done_status0_ = reg_group_ptr->rS_INTR_STATUS.uCACC_DONE_STATUS0();
s_intr_status_cacc_done_status1_ = reg_group_ptr->rS_INTR_STATUS.uCACC_DONE_STATUS1();
}
GlbUpdateVariables
関数は、CNVDLA_GLB_REGSET
クラス オブジェクトからレジスタ フィールドの値を読み取り、これらの値を クラス オブジェクトのメンバー変数に保存するために使用されます。 =2> クラス。これらのメンバー変数は、後続の操作で割り込みステータスやその他の機能をチェックおよび更新するために使用できます。この関数の動作は次のとおりです。glb_reg_model
reg_group_ptr
からCNVDLA_GLB_REGSET
クラス オブジェクトのさまざまなレジスタ フィールドの値を読み取り、glb_reg_model
に保存します。クラスのメンバー変数内。
たとえば、reg_group_ptr
フィールドから rS_NVDLA_HW_VERSION
レジスタの uMAJOR()
と uMINOR()
を読み取ります。値を取得し、 s_nvdla_hw_version_major_
および s_nvdla_hw_version_minor_
メンバー変数に保存します。同様に、他のレジスタフィールドからも値を読み取り、対応するメンバー変数に保存します。
こうすることでglb_reg_model
、クラスは、割り込みステータスのチェック、割り込みの生成、CSB リクエストへの応答など、さまざまな操作を実行するために必要なときにこれらのメンバー変数にアクセスできます。