NVDLA系列之C-model:include<113>

cmod/include/NV_NVDLA_cdma_base.h

// File Name: NV_NVDLA_cdma_base.h

#ifndef _NV_NVDLA_CDMA_BASE_H_
#define _NV_NVDLA_CDMA_BASE_H_

#define SC_INCLUDE_DYNAMIC_PROCESSES
#include "NV_MSDEC_csb2xx_16m_secure_be_lvl_iface.h"
#include "nvdla_xx2csb_resp_iface.h"

#include "nvdla_dat_info_update_iface.h"
#include "nvdla_dma_rd_req_iface.h"
#include "nvdla_dma_rd_rsp_iface.h"
#include "nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_iface.h"
#include "nvdla_wt_info_update_iface.h"
#include "scsim_common.h"
#include <systemc.h>
#include <tlm.h>
#include <tlm_utils/multi_passthrough_initiator_socket.h>
#include <tlm_utils/multi_passthrough_target_socket.h>

// Base SystemC class for module NV_NVDLA_cdma
class NV_NVDLA_cdma_base : public sc_module
{
    
    
    public:

    // Constructor
    NV_NVDLA_cdma_base(const sc_module_name name);

    // Target Socket (unrecognized protocol: NV_MSDEC_csb2xx_16m_secure_be_lvl_t): csb2cdma_req
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> csb2cdma_req;
    virtual void csb2cdma_req_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void csb2cdma_req_b_transport(int ID, NV_MSDEC_csb2xx_16m_secure_be_lvl_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_dat_info_update_t): dat_up_sc2cdma
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> dat_up_sc2cdma;
    virtual void dat_up_sc2cdma_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void dat_up_sc2cdma_b_transport(int ID, nvdla_dat_info_update_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): mcif2cdma_dat_rd_rsp
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> mcif2cdma_dat_rd_rsp;
    virtual void mcif2cdma_dat_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void mcif2cdma_dat_rd_rsp_b_transport(int ID, nvdla_dma_rd_rsp_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): cvif2cdma_dat_rd_rsp
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cvif2cdma_dat_rd_rsp;
    virtual void cvif2cdma_dat_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void cvif2cdma_dat_rd_rsp_b_transport(int ID, nvdla_dma_rd_rsp_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): cvif2cdma_wt_rd_rsp
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cvif2cdma_wt_rd_rsp;
    virtual void cvif2cdma_wt_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void cvif2cdma_wt_rd_rsp_b_transport(int ID, nvdla_dma_rd_rsp_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): mcif2cdma_wt_rd_rsp
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> mcif2cdma_wt_rd_rsp;
    virtual void mcif2cdma_wt_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void mcif2cdma_wt_rd_rsp_b_transport(int ID, nvdla_dma_rd_rsp_t* payload, sc_time& delay) = 0;

    // Target Socket (unrecognized protocol: nvdla_wt_info_update_t): wt_up_sc2cdma
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> wt_up_sc2cdma;
    virtual void wt_up_sc2cdma_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void wt_up_sc2cdma_b_transport(int ID, nvdla_wt_info_update_t* payload, sc_time& delay) = 0;

    // Special socket for CDMA_WT internal arbiter
    tlm_utils::multi_passthrough_target_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types, 1, sc_core::SC_ZERO_OR_MORE_BOUND> cdma_wt_dma_arbiter_source_id;
    virtual void cdma_wt_dma_arbiter_source_id_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay);
    virtual void cdma_wt_dma_arbiter_source_id_b_transport(int ID, int source_id, sc_time& delay) = 0;

    // Initiator Socket (unrecognized protocol: nvdla_xx2csb_resp_t): cdma2csb_resp
    tlm::tlm_generic_payload cdma2csb_resp_bp;
    nvdla_xx2csb_resp_t cdma2csb_resp_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma2csb_resp;
    virtual void cdma2csb_resp_b_transport(nvdla_xx2csb_resp_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_dat_info_update_t): dat_up_cdma2sc
    tlm::tlm_generic_payload dat_up_cdma2sc_bp;
    nvdla_dat_info_update_t dat_up_cdma2sc_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> dat_up_cdma2sc;
    virtual void dat_up_cdma2sc_b_transport(nvdla_dat_info_update_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_dma_rd_req_t): cdma_dat2mcif_rd_req
    tlm::tlm_generic_payload cdma_dat2mcif_rd_req_bp;
    nvdla_dma_rd_req_t cdma_dat2mcif_rd_req_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma_dat2mcif_rd_req;
    virtual void cdma_dat2mcif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_dma_rd_req_t): cdma_dat2cvif_rd_req
    tlm::tlm_generic_payload cdma_dat2cvif_rd_req_bp;
    nvdla_dma_rd_req_t cdma_dat2cvif_rd_req_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma_dat2cvif_rd_req;
    virtual void cdma_dat2cvif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_dma_rd_req_t): cdma_wt2cvif_rd_req
    tlm::tlm_generic_payload cdma_wt2cvif_rd_req_bp;
    nvdla_dma_rd_req_t cdma_wt2cvif_rd_req_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma_wt2cvif_rd_req;
    virtual void cdma_wt2cvif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_dma_rd_req_t): cdma_wt2mcif_rd_req
    tlm::tlm_generic_payload cdma_wt2mcif_rd_req_bp;
    nvdla_dma_rd_req_t cdma_wt2mcif_rd_req_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma_wt2mcif_rd_req;
    virtual void cdma_wt2mcif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t): cdma2buf_dat_wr
    tlm::tlm_generic_payload cdma2buf_dat_wr_bp;
    nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t cdma2buf_dat_wr_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma2buf_dat_wr;
    virtual void cdma2buf_dat_wr_b_transport(nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t): cdma2buf_wt_wr
    tlm::tlm_generic_payload cdma2buf_wt_wr_bp;
    nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t cdma2buf_wt_wr_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> cdma2buf_wt_wr;
    virtual void cdma2buf_wt_wr_b_transport(nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t* payload, sc_time& delay);

    // Initiator Socket (unrecognized protocol: nvdla_wt_info_update_t): wt_up_cdma2sc
    tlm::tlm_generic_payload wt_up_cdma2sc_bp;
    nvdla_wt_info_update_t wt_up_cdma2sc_payload;
    tlm_utils::multi_passthrough_initiator_socket<NV_NVDLA_cdma_base, 32, tlm::tlm_base_protocol_types> wt_up_cdma2sc;
    virtual void wt_up_cdma2sc_b_transport(nvdla_wt_info_update_t* payload, sc_time& delay);

    // Port has no flow: cdma_dat2glb_done_intr
    sc_vector< sc_out<bool> > cdma_dat2glb_done_intr;

    // Port has no flow: cdma_wt2glb_done_intr
    sc_vector< sc_out<bool> > cdma_wt2glb_done_intr;

    sc_in <bool> cdma_wt_dma_arbiter_override_enable;
    // Destructor
    virtual ~NV_NVDLA_cdma_base() {
    
    }

};

这是一个名为 NV_NVDLA_cdma_base 的 SystemC 模块的基类定义,该基类定义了 CDMA(Channel Data Memory Access)模块的接口和通信协议。以下是该类的主要成员和作用:

  1. 构造函数:用于初始化 CDMA 模块的名称和成员变量。

  2. csb2cdma_req:一个多通道目标 Socket,用于接收来自 CSB(Configuration Space Bus)的请求,这是一个未识别的协议类型 NV_MSDEC_csb2xx_16m_secure_be_lvl_t

  3. dat_up_sc2cdma:一个多通道目标 Socket,用于接收数据更新信息,这是一个未识别的协议类型 nvdla_dat_info_update_t

  4. mcif2cdma_dat_rd_rsp:一个多通道目标 Socket,用于接收来自 MCIF(Memory Controller Interface)的数据读取响应,这是一个未识别的协议类型 nvdla_dma_rd_rsp_t

  5. cvif2cdma_dat_rd_rsp:一个多通道目标 Socket,用于接收来自 CVIF(Cascaded Virtual Interface)的数据读取响应,这是一个未识别的协议类型 nvdla_dma_rd_rsp_t

  6. cvif2cdma_wt_rd_rsp:一个多通道目标 Socket,用于接收来自 CVIF 的权重读取响应,这是一个未识别的协议类型 nvdla_dma_rd_rsp_t

  7. mcif2cdma_wt_rd_rsp:一个多通道目标 Socket,用于接收来自 MCIF 的权重读取响应,这是一个未识别的协议类型 nvdla_dma_rd_rsp_t

  8. wt_up_sc2cdma:一个多通道目标 Socket,用于接收权重更新信息,这是一个未识别的协议类型 nvdla_wt_info_update_t

  9. cdma_wt_dma_arbiter_source_id:用于 CDMA_WT 内部仲裁器的特殊 Socket。这是一个多通道目标 Socket,用于接收来自权重 DMA 仲裁器的请求,这是一个未识别的协议类型。

  10. cdma2csb_resp:一个多通道发起 Socket,用于向 CSB 发送响应,这是一个未识别的协议类型 nvdla_xx2csb_resp_t

  11. dat_up_cdma2sc:一个多通道发起 Socket,用于向上游发送数据更新信息,这是一个未识别的协议类型 nvdla_dat_info_update_t

  12. cdma_dat2mcif_rd_req:一个多通道发起 Socket,用于向 MCIF 发送数据读取请求,这是一个未识别的协议类型 nvdla_dma_rd_req_t

  13. cdma_dat2cvif_rd_req:一个多通道发起 Socket,用于向 CVIF 发送数据读取请求,这是一个未识别的协议类型 nvdla_dma_rd_req_t

  14. cdma_wt2cvif_rd_req:一个多通道发起 Socket,用于向 CVIF 发送权重读取请求,这是一个未识别的协议类型 nvdla_dma_rd_req_t

  15. cdma_wt2mcif_rd_req:一个多通道发起 Socket,用于向 MCIF 发送权重读取请求,这是一个未识别的协议类型 nvdla_dma_rd_req_t

  16. cdma2buf_dat_wr:一个多通道发起 Socket,用于向缓冲区发送数据写入请求,这是一个未识别的协议类型 nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t

  17. cdma2buf_wt_wr:一个多通道发起 Socket,用于向缓冲区发送权重写入请求,这是一个未识别的协议类型 nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t

  18. wt_up_cdma2sc:一个多通道发起 Socket,用于向上游发送权重更新信息,这是一个未识别的协议类型 nvdla_wt_info_update_t

  19. cdma_dat2glb_done_intr:用于将数据操作完成信号发送给全局模块的端口。

  20. cdma_wt2glb_done_intr:用于将权重操作完成信号发送给全局模块的端口。

  21. cdma_wt_dma_arbiter_override_enable:CDMA_WT 内部仲裁器的使能信号。

这个基类为 CDMA 模块提供了通信接口和协议定义,具体的 CDMA 模块应该从这个基类派生,并实现各个目标 Socket 和发起 Socket 的具体处理逻辑。这些 Socket 中的通信协议类型需要在派生类中进行解释和实现。


// Constructor for base SystemC class for module NV_NVDLA_cdma
inline NV_NVDLA_cdma_base::NV_NVDLA_cdma_base(const sc_module_name name)
    : sc_module(name),
    csb2cdma_req("csb2cdma_req"),
    dat_up_sc2cdma("dat_up_sc2cdma"),
    mcif2cdma_dat_rd_rsp("mcif2cdma_dat_rd_rsp"),
    cvif2cdma_dat_rd_rsp("cvif2cdma_dat_rd_rsp"),
    cvif2cdma_wt_rd_rsp("cvif2cdma_wt_rd_rsp"),
    mcif2cdma_wt_rd_rsp("mcif2cdma_wt_rd_rsp"),
    wt_up_sc2cdma("wt_up_sc2cdma"),
    cdma2csb_resp_bp(),
    cdma2csb_resp("cdma2csb_resp"),
    dat_up_cdma2sc_bp(),
    dat_up_cdma2sc("dat_up_cdma2sc"),
    cdma_dat2mcif_rd_req_bp(),
    cdma_dat2mcif_rd_req("cdma_dat2mcif_rd_req"),
    cdma_dat2cvif_rd_req_bp(),
    cdma_dat2cvif_rd_req("cdma_dat2cvif_rd_req"),
    cdma_wt2cvif_rd_req_bp(),
    cdma_wt2cvif_rd_req("cdma_wt2cvif_rd_req"),
    cdma_wt2mcif_rd_req_bp(),
    cdma_wt2mcif_rd_req("cdma_wt2mcif_rd_req"),
    cdma2buf_dat_wr_bp(),
    cdma2buf_dat_wr("cdma2buf_dat_wr"),
    cdma2buf_wt_wr_bp(),
    cdma2buf_wt_wr("cdma2buf_wt_wr"),
    wt_up_cdma2sc_bp(),
    wt_up_cdma2sc("wt_up_cdma2sc"),
    cdma_dat2glb_done_intr("cdma_dat2glb_done_intr", 2),
    cdma_wt2glb_done_intr("cdma_wt2glb_done_intr", 2),
    cdma_wt_dma_arbiter_override_enable("cdma_wt_dma_arbiter_override_enable")
{
    
    
    // Target Socket (unrecognized protocol: NV_MSDEC_csb2xx_16m_secure_be_lvl_t): csb2cdma_req
    this->csb2cdma_req.register_b_transport(this, &NV_NVDLA_cdma_base::csb2cdma_req_b_transport);

    // Target Socket (unrecognized protocol: nvdla_dat_info_update_t): dat_up_sc2cdma
    this->dat_up_sc2cdma.register_b_transport(this, &NV_NVDLA_cdma_base::dat_up_sc2cdma_b_transport);

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): mcif2cdma_dat_rd_rsp
    this->mcif2cdma_dat_rd_rsp.register_b_transport(this, &NV_NVDLA_cdma_base::mcif2cdma_dat_rd_rsp_b_transport);

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): cvif2cdma_dat_rd_rsp
    this->cvif2cdma_dat_rd_rsp.register_b_transport(this, &NV_NVDLA_cdma_base::cvif2cdma_dat_rd_rsp_b_transport);

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): cvif2cdma_wt_rd_rsp
    this->cvif2cdma_wt_rd_rsp.register_b_transport(this, &NV_NVDLA_cdma_base::cvif2cdma_wt_rd_rsp_b_transport);

    // Target Socket (unrecognized protocol: nvdla_dma_rd_rsp_t): mcif2cdma_wt_rd_rsp
    this->mcif2cdma_wt_rd_rsp.register_b_transport(this, &NV_NVDLA_cdma_base::mcif2cdma_wt_rd_rsp_b_transport);

    // Target Socket (unrecognized protocol: nvdla_wt_info_update_t): wt_up_sc2cdma
    this->wt_up_sc2cdma.register_b_transport(this, &NV_NVDLA_cdma_base::wt_up_sc2cdma_b_transport);

    this->cdma_wt_dma_arbiter_source_id.register_b_transport(this, &NV_NVDLA_cdma_base::cdma_wt_dma_arbiter_source_id_b_transport);
}

这是 NV_NVDLA_cdma_base 类的构造函数,用于初始化 CDMA 模块的各个成员变量和通信接口。

构造函数的主要工作如下:

  1. 初始化模块的名称:通过构造函数的参数 name 来设置 CDMA 模块的名称。

  2. 初始化多通道目标 Socket csb2cdma_req:注册目标 Socket 的 b_transport 方法,用于处理来自 CSB 的请求。

  3. 初始化多通道目标 Socket dat_up_sc2cdma:注册目标 Socket 的 b_transport 方法,用于处理数据更新信息。

  4. 初始化多通道目标 Socket mcif2cdma_dat_rd_rsp:注册目标 Socket 的 b_transport 方法,用于处理来自 MCIF 的数据读取响应。

  5. 初始化多通道目标 Socket cvif2cdma_dat_rd_rsp:注册目标 Socket 的 b_transport 方法,用于处理来自 CVIF 的数据读取响应。

  6. 初始化多通道目标 Socket cvif2cdma_wt_rd_rsp:注册目标 Socket 的 b_transport 方法,用于处理来自 CVIF 的权重读取响应。

  7. 初始化多通道目标 Socket mcif2cdma_wt_rd_rsp:注册目标 Socket 的 b_transport 方法,用于处理来自 MCIF 的权重读取响应。

  8. 初始化多通道目标 Socket wt_up_sc2cdma:注册目标 Socket 的 b_transport 方法,用于处理权重更新信息。

  9. 初始化特殊 Socket cdma_wt_dma_arbiter_source_id:注册特殊 Socket 的 b_transport 方法,用于处理来自 CDMA_WT 内部仲裁器的请求。

构造函数还会初始化其他成员变量和端口,包括一些信号端口和发起 Socket。这些 Socket 都会在 CDMA 模块的具体派生类中用于实际的通信和数据传输。需要注意的是,构造函数中的多通道目标 Socket 和发起 Socket 都会注册相应的 b_transport 方法,以便在通信时进行数据传输和处理。


inline void
NV_NVDLA_cdma_base::csb2cdma_req_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    NV_MSDEC_csb2xx_16m_secure_be_lvl_t* payload = (NV_MSDEC_csb2xx_16m_secure_be_lvl_t*) bp.get_data_ptr();
    csb2cdma_req_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::dat_up_sc2cdma_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_dat_info_update_t* payload = (nvdla_dat_info_update_t*) bp.get_data_ptr();
    dat_up_sc2cdma_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::mcif2cdma_dat_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_dma_rd_rsp_t* payload = (nvdla_dma_rd_rsp_t*) bp.get_data_ptr();
    mcif2cdma_dat_rd_rsp_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::cvif2cdma_dat_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_dma_rd_rsp_t* payload = (nvdla_dma_rd_rsp_t*) bp.get_data_ptr();
    cvif2cdma_dat_rd_rsp_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::cvif2cdma_wt_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_dma_rd_rsp_t* payload = (nvdla_dma_rd_rsp_t*) bp.get_data_ptr();
    cvif2cdma_wt_rd_rsp_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::mcif2cdma_wt_rd_rsp_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_dma_rd_rsp_t* payload = (nvdla_dma_rd_rsp_t*) bp.get_data_ptr();
    mcif2cdma_wt_rd_rsp_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::wt_up_sc2cdma_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    nvdla_wt_info_update_t* payload = (nvdla_wt_info_update_t*) bp.get_data_ptr();
    wt_up_sc2cdma_b_transport(ID, payload, delay);
}

inline void
NV_NVDLA_cdma_base::cdma_wt_dma_arbiter_source_id_b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay)
{
    
    
    int source_id;
    uint8_t* data_ptr = bp.get_data_ptr();
    memcpy((void *) & source_id, (void *) data_ptr, sizeof(int));
    // 0:weight data; 1:wmb data; 2:wgs_data
    cdma_wt_dma_arbiter_source_id_b_transport(ID, source_id, delay);
}

inline void
NV_NVDLA_cdma_base::cdma2csb_resp_b_transport(nvdla_xx2csb_resp_t* payload, sc_time& delay)
{
    
    
    cdma2csb_resp_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma2csb_resp.size(); socket_id++) {
    
    
        cdma2csb_resp[socket_id]->b_transport(cdma2csb_resp_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::dat_up_cdma2sc_b_transport(nvdla_dat_info_update_t* payload, sc_time& delay)
{
    
    
    dat_up_cdma2sc_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < dat_up_cdma2sc.size(); socket_id++) {
    
    
        dat_up_cdma2sc[socket_id]->b_transport(dat_up_cdma2sc_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma_dat2mcif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay)
{
    
    
    cdma_dat2mcif_rd_req_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma_dat2mcif_rd_req.size(); socket_id++) {
    
    
        cdma_dat2mcif_rd_req[socket_id]->b_transport(cdma_dat2mcif_rd_req_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma_dat2cvif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay)
{
    
    
    cdma_dat2cvif_rd_req_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma_dat2cvif_rd_req.size(); socket_id++) {
    
    
        cdma_dat2cvif_rd_req[socket_id]->b_transport(cdma_dat2cvif_rd_req_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma_wt2cvif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay)
{
    
    
    cdma_wt2cvif_rd_req_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma_wt2cvif_rd_req.size(); socket_id++) {
    
    
        cdma_wt2cvif_rd_req[socket_id]->b_transport(cdma_wt2cvif_rd_req_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma_wt2mcif_rd_req_b_transport(nvdla_dma_rd_req_t* payload, sc_time& delay)
{
    
    
    cdma_wt2mcif_rd_req_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma_wt2mcif_rd_req.size(); socket_id++) {
    
    
        cdma_wt2mcif_rd_req[socket_id]->b_transport(cdma_wt2mcif_rd_req_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma2buf_dat_wr_b_transport(nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t* payload, sc_time& delay)
{
    
    
    cdma2buf_dat_wr_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < cdma2buf_dat_wr.size(); socket_id++) {
    
    
        cdma2buf_dat_wr[socket_id]->b_transport(cdma2buf_dat_wr_bp, delay);
    }
}

inline void
NV_NVDLA_cdma_base::cdma2buf_wt_wr_b_transport(nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t* payload, sc_time& delay)
{
    
    
    cdma2buf_wt_wr_bp.set_data_ptr((unsigned char*) payload);
    // for (uint8_t socket_id=0; socket_id < cdma2buf_wt_wr.size(); socket_id++) {
    
    
    //     cdma2buf_wt_wr[socket_id]->b_transport(cdma2buf_wt_wr_bp, delay);
    // }
    cdma2buf_wt_wr->b_transport(cdma2buf_wt_wr_bp, delay);
}

inline void
NV_NVDLA_cdma_base::wt_up_cdma2sc_b_transport(nvdla_wt_info_update_t* payload, sc_time& delay)
{
    
    
    wt_up_cdma2sc_bp.set_data_ptr((unsigned char*) payload);
    for (uint8_t socket_id=0; socket_id < wt_up_cdma2sc.size(); socket_id++) {
    
    
        wt_up_cdma2sc[socket_id]->b_transport(wt_up_cdma2sc_bp, delay);
    }
}

这些是 NV_NVDLA_cdma_base 类中一些成员函数的实现,这些函数用于处理各种通信和数据传输。以下是每个函数的作用:

  1. csb2cdma_req_b_transport:处理来自 CSB 总线的请求。这个函数会将传入的 bp 数据转换为 NV_MSDEC_csb2xx_16m_secure_be_lvl_t 类型的指针,并调用 csb2cdma_req_b_transport 函数来处理请求。

  2. dat_up_sc2cdma_b_transport:处理来自数据更新通道的信息。这个函数将传入的 bp 数据转换为 nvdla_dat_info_update_t 类型的指针,并调用 dat_up_sc2cdma_b_transport 函数来处理信息。

  3. mcif2cdma_dat_rd_rsp_b_transport:处理来自 MCIF 的数据读取响应。这个函数将传入的 bp 数据转换为 nvdla_dma_rd_rsp_t 类型的指针,并调用 mcif2cdma_dat_rd_rsp_b_transport 函数来处理响应。

  4. cvif2cdma_dat_rd_rsp_b_transport:处理来自 CVIF 的数据读取响应。这个函数将传入的 bp 数据转换为 nvdla_dma_rd_rsp_t 类型的指针,并调用 cvif2cdma_dat_rd_rsp_b_transport 函数来处理响应。

  5. cvif2cdma_wt_rd_rsp_b_transport:处理来自 CVIF 的权重读取响应。这个函数将传入的 bp 数据转换为 nvdla_dma_rd_rsp_t 类型的指针,并调用 cvif2cdma_wt_rd_rsp_b_transport 函数来处理响应。

  6. mcif2cdma_wt_rd_rsp_b_transport:处理来自 MCIF 的权重读取响应。这个函数将传入的 bp 数据转换为 nvdla_dma_rd_rsp_t 类型的指针,并调用 mcif2cdma_wt_rd_rsp_b_transport 函数来处理响应。

  7. wt_up_sc2cdma_b_transport:处理来自权重更新通道的信息。这个函数将传入的 bp 数据转换为 nvdla_wt_info_update_t 类型的指针,并调用 wt_up_sc2cdma_b_transport 函数来处理信息。

  8. cdma_wt_dma_arbiter_source_id_b_transport:处理来自 CDMA_WT 内部仲裁器的请求。这个函数会从 bp 中提取源 ID,并调用 cdma_wt_dma_arbiter_source_id_b_transport 函数来处理请求。

  9. cdma2csb_resp_b_transport:将 CDMA 发送给 CSB 总线的响应数据传递给 CSB 总线。这个函数会将响应数据放入 cdma2csb_resp_bp 中,然后通过多通道发起 Socket 将数据传递给 CSB 总线。

  10. dat_up_cdma2sc_b_transport:将数据更新信息传递给上层模块。这个函数会将信息放入 dat_up_cdma2sc_bp 中,然后通过多通道发起 Socket 将信息传递给上层模块。

  11. cdma_dat2mcif_rd_req_b_transport:将数据读取请求传递给 MCIF。这个函数会将请求放入 cdma_dat2mcif_rd_req_bp 中,然后通过多通道发起 Socket 将请求传递给 MCIF。

  12. cdma_dat2cvif_rd_req_b_transport:将数据读取请求传递给 CVIF。这个函数会将请求放入 cdma_dat2cvif_rd_req_bp 中,然后通过多通道发起 Socket 将请求传递给 CVIF。

  13. cdma_wt2cvif_rd_req_b_transport:将权重读取请求传递给 CVIF。这个函数会将请求放入 cdma_wt2cvif_rd_req_bp 中,然后通过多通道发起 Socket 将请求传递给 CVIF。

  14. cdma_wt2mcif_rd_req_b_transport:将权重读取请求传递给 MCIF。这个函数会将请求放入 cdma_wt2mcif_rd_req_bp 中,然后通过多通道发起 Socket 将请求传递给 MCIF。

  15. cdma2buf_dat_wr_b_transport:将数据写入请求传递给缓存。这个函数会将请求放入 cdma2buf_dat_wr_bp 中,然后通过多通道发起 Socket 将请求传递给缓存。

  16. cdma2buf_wt_wr_b_transport:将权重写入请求传递给缓存。这个函数会将请求放入 cdma2buf_wt_wr_bp 中,然后通过发起 Socket 将请求传递给缓存。

  17. wt_up_cdma2sc_b_transport:将权重更新信息传递给上层模块。这个函数会将信息放入 wt_up_cdma2sc_bp 中,然后通过多通道发起 Socket 将信息传递给上层模块。

这些函数的具体实现会根据 CDMA 模块的派生类来提供。它们用于处理 CDMA 模块与其他模块之间的通信和数据传输。

猜你喜欢

转载自blog.csdn.net/lincolnjunior_lj/article/details/135017704
113