53 template <
int IN_WIDTH,
int OUT_WIDTH>
55 ,target_socket(
"target_socket")
56 ,wr_socket(
"init_wr_socket",OUT_WIDTH)
57 ,rd_socket(
"init_rd_socket",OUT_WIDTH)
58 ,m_btrans_conv(
"b_transport_converter")
59 ,xtlm_bridge(
"tlm2xtlmbridge")
66 template <
int IN_WIDTH,
int OUT_WIDTH>
68 void (*callback)(xtlm::aximm_payload*,
69 const tlm::tlm_generic_payload*)) {
70 xtlm_bridge.registerUserExtensionHandlerCallback(callback);
86 if((xtlm_pay == NULL) || (gp == NULL))
88 if((gp->get_command() == tlm::TLM_WRITE_COMMAND) && (xtlm_pay->get_awuser_size() > 0))
90 genattr_extension* ext = NULL;
91 gp->get_extension(ext);
95 uint32_t val = ext->get_master_id() && 0x3F;
96 unsigned char* ptr = xtlm_pay->get_awuser_ptr();
97 unsigned int size = xtlm_pay->get_awuser_size();
98 *ptr = (
unsigned char)val;
101 else if((gp->get_command() == tlm::TLM_READ_COMMAND) && (xtlm_pay->get_aruser_size() > 0))
103 genattr_extension* ext = NULL;
104 gp->get_extension(ext);
108 uint32_t val = ext->get_master_id() && 0x3F;
109 unsigned char* ptr = xtlm_pay->get_aruser_ptr();
110 unsigned int size = xtlm_pay->get_aruser_size();
111 *ptr = (
unsigned char)val;
130 if((gp->get_command() != tlm::TLM_WRITE_COMMAND) && (gp->get_command() != tlm::TLM_READ_COMMAND))
134 genattr_extension* ext =
new genattr_extension;
135 ext->set_master_id(val);
136 gp->set_extension(ext);
137 gp->set_streaming_width(gp->get_data_length());
138 if(gp->get_command() != tlm::TLM_WRITE_COMMAND)
140 gp->set_byte_enable_length(0);
141 gp->set_byte_enable_ptr(0);
146 xsc::common_cpp::properties& _prop): sc_module(name)
203 ,S_AXI_HP0_xtlm_brdg(
"S_AXI_HP0_xtlm_brdg")
204 ,m_rp_bridge_M_AXI_GP0(
"m_rp_bridge_M_AXI_GP0")
205 ,FCLK_CLK0_clk(
"FCLK_CLK0_clk", sc_time(8000.0,sc_core::SC_PS))
206 ,FCLK_CLK1_clk(
"FCLK_CLK1_clk", sc_time(40000.0,sc_core::SC_PS))
207 ,FCLK_CLK2_clk(
"FCLK_CLK2_clk", sc_time(29999.997600000188,sc_core::SC_PS))
208 ,FCLK_CLK3_clk(
"FCLK_CLK3_clk", sc_time(10000.0,sc_core::SC_PS))
218 char* unix_path = getenv(
"COSIM_MACHINE_PATH");
219 char* tcpip_addr = getenv(
"COSIM_MACHINE_TCPIP_ADDRESS");
220 char* dir_path_to_test_machine;
221 bool unix_socket_en =
false;
222 if (unix_path !=
nullptr) {
223 dir_path_to_test_machine = strdup(unix_path);
224 unix_socket_en =
true;
226 if ((unix_socket_en ==
false) && (tcpip_addr !=
nullptr)) {
227 dir_path_to_test_machine = strdup(tcpip_addr);
228 }
else if (unix_socket_en ==
false) {
230 "ERROR: Environment Variables Either COSIM_MACHINE_TCPIP_ADDRESS or COSIM_MACHINE_PATH is not specified.\n 1. Specify COSIM_MACHINE_PATH for Unix Socket Communication.\n 2. Specify COSIM_MACHINE_TCPIP_ADDRESS for TCP Socket Communication.\n");
233 std::string skt_name;
234 if (unix_socket_en) {
235 skt_name.append(
"unix:");
236 skt_name.append(dir_path_to_test_machine);
237 skt_name.append(
"//qemu-rport-_cosim@0");
239 skt_name.append(dir_path_to_test_machine);
242 const char* skt = skt_name.c_str();
313 int irq = ((
IRQ_F2P.read().to_uint()) & 0xFFFF);
314 for(
int i = 0; i <
prop.getLongLong(
"C_NUM_F2P_INTR_INPUTS"); i++) {