in hdk/common/ip/cl_ip/cl_ip.ip_user_files/sim_scripts/cl_axi_sc_1x1/activehdl/smartconnect_xtlm.cxx [1330:1508]
void smartconnect_xtlm::process_saxi_wr_resp() {
print_header("process_saxi_wr_resp()");
// unsigned int num_si = maxi_wr_req_numsi_vec[slave_wr_resp].front();
// xtlm::aximm_payload* trans_ptr = saxi_wr_resp_vec[num_si].front();
while(!slave_wr_resp.empty()) {
xtlm::aximm_payload* trans_ptr = slave_wr_resp.front();
unsigned int num_si = map_wr_si_to_numsi[trans_ptr];
unsigned int num_mi = slave_wr_resp_nummi.front();
bool si_cascaded = (SI_m_properties[num_si].getInt("IS_CASCADED") == 1);
bool mi_cascaded = (MI_m_properties[num_mi].getInt("IS_CASCADED") == 1);
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "saxi_wr_resp_vec[" << num_si << "] size: " << saxi_wr_resp_vec[num_si].size() << "\n"
<< "Processing process_saxi_wr_resp on num_si: " << num_si << "\n"
<< "BEGIN Response information\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
trans_ptr->get_log(payload_msg, 3);
m_ss.str("");
m_ss << this->name() << payload_msg << std::endl;
m_ss << "RESPONSE: " << trans_ptr->get_response_string() << "\n"
<< "END Response information\n\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
payload_msg = "";
}
if (saxi_wr_util[num_si]->is_master_ready() == false) {
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "Processing process_saxi_wr_resp on num_si: " << num_si << " master not ready\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
next_trigger(saxi_wr_util[num_si]->resp_sampled);
return;
}
slave_wr_resp.pop_front();
slave_wr_resp_nummi.pop_front();
saxi_wr_resp_vec[num_si].pop_front();
trans_ptr->set_response_status(xtlm::XTLM_OK_RESPONSE);
mmap_wr_si_to_mi_itr = mmap_wr_si_to_mi.find(trans_ptr);
xtlm::aximm_payload* m_trans_ptr = NULL;
while (mmap_wr_si_to_mi_itr != mmap_wr_si_to_mi.end() ) {
m_trans_ptr = mmap_wr_si_to_mi_itr->second;
if (!si_cascaded && m_trans_ptr->is_response_error()) {
trans_ptr->set_response_status(m_trans_ptr->get_response_status());
}
if (mi_cascaded && !si_cascaded) {
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "Accessing extension of " << m_trans_ptr << " \n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
smartconnect_extension* exten = m_trans_ptr->get_extension<smartconnect_extension>();
xtlm::aximm_payload* mi_trans_ptr = NULL;
if (exten != 0) {
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "Extension exists!!\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
} else {
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() <<"Extension does not exists!!\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
}
while ( !((exten->get_mi_trans_vec()).empty()) ) {
mi_trans_ptr = (exten->get_mi_trans_vec()).front();
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "Accessed:" << mi_trans_ptr << "\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
(exten->get_mi_trans_vec()).pop_front();
if (mi_trans_ptr->is_response_error()) {
trans_ptr->set_response_status(mi_trans_ptr->get_response_status());
}
mi_trans_ptr->release();
}
}
if (!si_cascaded) {
m_trans_ptr->release();
}
mmap_wr_si_to_mi.erase(mmap_wr_si_to_mi_itr);
map_wr_mi_to_si.erase(m_trans_ptr);
mmap_wr_si_to_mi_itr = mmap_wr_si_to_mi.find(trans_ptr);
}
if (trans_ptr->get_response_status() == NULL) {
trans_ptr->set_response_status(xtlm::XTLM_GENERIC_ERROR_RESPONSE);
}
sc_time delay = SC_ZERO_TIME;
if (trans_ptr != NULL) {
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "BEGIN sending Write Response information on num_si " << num_si << "\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
trans_ptr->get_log(payload_msg, 3);
m_ss.str("");
m_ss << this->name() << payload_msg << std::endl;
m_ss << "RESPONSE: " << trans_ptr->get_response_string() << "\n"
<< "END sending Write Response information on num_si " << num_si << "\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
payload_msg = "";
}
print_log("SI", num_si, "WRITE", "Response sent", trans_ptr);
saxi_wr_util[num_si]->send_resp(*trans_ptr, delay);
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "INFO: " << std::string(this->name()) << ": process_saxi_wr_resp(): SAXI WR RESP sent \n\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
map_wr_si_to_nummi.erase(trans_ptr);
map_wr_si_to_numsi.erase(trans_ptr);
// trans_ptr->release();
create_wr_resp = false;
bad_saxi_wr_trans = -1;
if (m_report_handler->get_verbosity_level()
== xsc::common_cpp::VERBOSITY::DEBUG) {
m_ss.str("");
m_ss << this->name() << "INFO: " << std::string(this->name()) << ": process_saxi_wr_resp(): SAXI WR RESP released and sent \n\n";
XSC_REPORT_INFO_VERB((*m_report_handler), "1", m_ss.str().c_str(),
DEBUG);
}
}
} //end of while loop
//Check for pending incoming wr transaction
check_saxi_wr_req.notify(sc_core::SC_ZERO_TIME);
print_footer("process_saxi_wr_resp()");
}