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)模块的接口和通信协议。以下是该类的主要成员和作用:
-
构造函数:用于初始化 CDMA 模块的名称和成员变量。
-
csb2cdma_req
:一个多通道目标 Socket,用于接收来自 CSB(Configuration Space Bus)的请求,这是一个未识别的协议类型NV_MSDEC_csb2xx_16m_secure_be_lvl_t
。 -
dat_up_sc2cdma
:一个多通道目标 Socket,用于接收数据更新信息,这是一个未识别的协议类型nvdla_dat_info_update_t
。 -
mcif2cdma_dat_rd_rsp
:一个多通道目标 Socket,用于接收来自 MCIF(Memory Controller Interface)的数据读取响应,这是一个未识别的协议类型nvdla_dma_rd_rsp_t
。 -
cvif2cdma_dat_rd_rsp
:一个多通道目标 Socket,用于接收来自 CVIF(Cascaded Virtual Interface)的数据读取响应,这是一个未识别的协议类型nvdla_dma_rd_rsp_t
。 -
cvif2cdma_wt_rd_rsp
:一个多通道目标 Socket,用于接收来自 CVIF 的权重读取响应,这是一个未识别的协议类型nvdla_dma_rd_rsp_t
。 -
mcif2cdma_wt_rd_rsp
:一个多通道目标 Socket,用于接收来自 MCIF 的权重读取响应,这是一个未识别的协议类型nvdla_dma_rd_rsp_t
。 -
wt_up_sc2cdma
:一个多通道目标 Socket,用于接收权重更新信息,这是一个未识别的协议类型nvdla_wt_info_update_t
。 -
cdma_wt_dma_arbiter_source_id
:用于 CDMA_WT 内部仲裁器的特殊 Socket。这是一个多通道目标 Socket,用于接收来自权重 DMA 仲裁器的请求,这是一个未识别的协议类型。 -
cdma2csb_resp
:一个多通道发起 Socket,用于向 CSB 发送响应,这是一个未识别的协议类型nvdla_xx2csb_resp_t
。 -
dat_up_cdma2sc
:一个多通道发起 Socket,用于向上游发送数据更新信息,这是一个未识别的协议类型nvdla_dat_info_update_t
。 -
cdma_dat2mcif_rd_req
:一个多通道发起 Socket,用于向 MCIF 发送数据读取请求,这是一个未识别的协议类型nvdla_dma_rd_req_t
。 -
cdma_dat2cvif_rd_req
:一个多通道发起 Socket,用于向 CVIF 发送数据读取请求,这是一个未识别的协议类型nvdla_dma_rd_req_t
。 -
cdma_wt2cvif_rd_req
:一个多通道发起 Socket,用于向 CVIF 发送权重读取请求,这是一个未识别的协议类型nvdla_dma_rd_req_t
。 -
cdma_wt2mcif_rd_req
:一个多通道发起 Socket,用于向 MCIF 发送权重读取请求,这是一个未识别的协议类型nvdla_dma_rd_req_t
。 -
cdma2buf_dat_wr
:一个多通道发起 Socket,用于向缓冲区发送数据写入请求,这是一个未识别的协议类型nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t
。 -
cdma2buf_wt_wr
:一个多通道发起 Socket,用于向缓冲区发送权重写入请求,这是一个未识别的协议类型nvdla_ram_wr_port_WADDR_12_WDATA_512_BE_1_t
。 -
wt_up_cdma2sc
:一个多通道发起 Socket,用于向上游发送权重更新信息,这是一个未识别的协议类型nvdla_wt_info_update_t
。 -
cdma_dat2glb_done_intr
:用于将数据操作完成信号发送给全局模块的端口。 -
cdma_wt2glb_done_intr
:用于将权重操作完成信号发送给全局模块的端口。 -
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 模块的各个成员变量和通信接口。
构造函数的主要工作如下:
-
初始化模块的名称:通过构造函数的参数
name
来设置 CDMA 模块的名称。 -
初始化多通道目标 Socket
csb2cdma_req
:注册目标 Socket 的b_transport
方法,用于处理来自 CSB 的请求。 -
初始化多通道目标 Socket
dat_up_sc2cdma
:注册目标 Socket 的b_transport
方法,用于处理数据更新信息。 -
初始化多通道目标 Socket
mcif2cdma_dat_rd_rsp
:注册目标 Socket 的b_transport
方法,用于处理来自 MCIF 的数据读取响应。 -
初始化多通道目标 Socket
cvif2cdma_dat_rd_rsp
:注册目标 Socket 的b_transport
方法,用于处理来自 CVIF 的数据读取响应。 -
初始化多通道目标 Socket
cvif2cdma_wt_rd_rsp
:注册目标 Socket 的b_transport
方法,用于处理来自 CVIF 的权重读取响应。 -
初始化多通道目标 Socket
mcif2cdma_wt_rd_rsp
:注册目标 Socket 的b_transport
方法,用于处理来自 MCIF 的权重读取响应。 -
初始化多通道目标 Socket
wt_up_sc2cdma
:注册目标 Socket 的b_transport
方法,用于处理权重更新信息。 -
初始化特殊 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
类中一些成员函数的实现,这些函数用于处理各种通信和数据传输。以下是每个函数的作用:
-
csb2cdma_req_b_transport
:处理来自 CSB 总线的请求。这个函数会将传入的bp
数据转换为NV_MSDEC_csb2xx_16m_secure_be_lvl_t
类型的指针,并调用csb2cdma_req_b_transport
函数来处理请求。 -
dat_up_sc2cdma_b_transport
:处理来自数据更新通道的信息。这个函数将传入的bp
数据转换为nvdla_dat_info_update_t
类型的指针,并调用dat_up_sc2cdma_b_transport
函数来处理信息。 -
mcif2cdma_dat_rd_rsp_b_transport
:处理来自 MCIF 的数据读取响应。这个函数将传入的bp
数据转换为nvdla_dma_rd_rsp_t
类型的指针,并调用mcif2cdma_dat_rd_rsp_b_transport
函数来处理响应。 -
cvif2cdma_dat_rd_rsp_b_transport
:处理来自 CVIF 的数据读取响应。这个函数将传入的bp
数据转换为nvdla_dma_rd_rsp_t
类型的指针,并调用cvif2cdma_dat_rd_rsp_b_transport
函数来处理响应。 -
cvif2cdma_wt_rd_rsp_b_transport
:处理来自 CVIF 的权重读取响应。这个函数将传入的bp
数据转换为nvdla_dma_rd_rsp_t
类型的指针,并调用cvif2cdma_wt_rd_rsp_b_transport
函数来处理响应。 -
mcif2cdma_wt_rd_rsp_b_transport
:处理来自 MCIF 的权重读取响应。这个函数将传入的bp
数据转换为nvdla_dma_rd_rsp_t
类型的指针,并调用mcif2cdma_wt_rd_rsp_b_transport
函数来处理响应。 -
wt_up_sc2cdma_b_transport
:处理来自权重更新通道的信息。这个函数将传入的bp
数据转换为nvdla_wt_info_update_t
类型的指针,并调用wt_up_sc2cdma_b_transport
函数来处理信息。 -
cdma_wt_dma_arbiter_source_id_b_transport
:处理来自 CDMA_WT 内部仲裁器的请求。这个函数会从bp
中提取源 ID,并调用cdma_wt_dma_arbiter_source_id_b_transport
函数来处理请求。 -
cdma2csb_resp_b_transport
:将 CDMA 发送给 CSB 总线的响应数据传递给 CSB 总线。这个函数会将响应数据放入cdma2csb_resp_bp
中,然后通过多通道发起 Socket 将数据传递给 CSB 总线。 -
dat_up_cdma2sc_b_transport
:将数据更新信息传递给上层模块。这个函数会将信息放入dat_up_cdma2sc_bp
中,然后通过多通道发起 Socket 将信息传递给上层模块。 -
cdma_dat2mcif_rd_req_b_transport
:将数据读取请求传递给 MCIF。这个函数会将请求放入cdma_dat2mcif_rd_req_bp
中,然后通过多通道发起 Socket 将请求传递给 MCIF。 -
cdma_dat2cvif_rd_req_b_transport
:将数据读取请求传递给 CVIF。这个函数会将请求放入cdma_dat2cvif_rd_req_bp
中,然后通过多通道发起 Socket 将请求传递给 CVIF。 -
cdma_wt2cvif_rd_req_b_transport
:将权重读取请求传递给 CVIF。这个函数会将请求放入cdma_wt2cvif_rd_req_bp
中,然后通过多通道发起 Socket 将请求传递给 CVIF。 -
cdma_wt2mcif_rd_req_b_transport
:将权重读取请求传递给 MCIF。这个函数会将请求放入cdma_wt2mcif_rd_req_bp
中,然后通过多通道发起 Socket 将请求传递给 MCIF。 -
cdma2buf_dat_wr_b_transport
:将数据写入请求传递给缓存。这个函数会将请求放入cdma2buf_dat_wr_bp
中,然后通过多通道发起 Socket 将请求传递给缓存。 -
cdma2buf_wt_wr_b_transport
:将权重写入请求传递给缓存。这个函数会将请求放入cdma2buf_wt_wr_bp
中,然后通过发起 Socket 将请求传递给缓存。 -
wt_up_cdma2sc_b_transport
:将权重更新信息传递给上层模块。这个函数会将信息放入wt_up_cdma2sc_bp
中,然后通过多通道发起 Socket 将信息传递给上层模块。
这些函数的具体实现会根据 CDMA 模块的派生类来提供。它们用于处理 CDMA 模块与其他模块之间的通信和数据传输。