setting m_gotRspSepData=true in HandleRxDat result in TLM_GENERIC_ERROR_RESPONSE?
Hi sir: I am trying to integrated the chi here into a system, while I readed the implementation of the chi protocol , I found for a read transaction with seperate response (which is RespSepData and DataSepResp), if the DataSepResp comes first and we get all the data the transaction requested , the m_gotRspSepData will be set to true in HandleRxDat. this may result in a TLM_GENERIC_ERROR_RESPONSE response when the RespSepData came sometime later after the DataSepResp in cache_chi::b_transport_rxrsp ?
https://github.com/Xilinx/libsystemctlm-soc/blob/42aa8ed780cb9eef3a61bc50ea35ff079a7e6284/tlm-modules/private/chi/txns-rn.h#L477
virtual void b_transport_rxrsp(tlm::tlm_generic_payload& trans, sc_time& delay)
{
trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
.....
ret = t->HandleRxRsp(trans, chiattr); // return false. see the comment blow
m_transmitter.Process(t);
}
// false here, so the trans respoonse will he TLM_GENERIC_ERROR_RESPONSE
// which is set at the first line of b_transport_rxrsp
if (ret) {
trans.set_response_status(
tlm::TLM_OK_RESPONSE);
}
because when the RespSepData comes and is handled by HandleRxRsp (with m_gotRspSepData=true being set by HandleRxDat aforementioned in the last comment )
virtual bool HandleRxRsp(tlm::tlm_generic_payload& gp,chiattr_extension *chiattr)
{
bool acceptRspSepData = !m_gotRspSepData &&chiattr->GetOpcode() == Rsp::RespSepData; // false
bool acceptReadReceipt = !m_gotRspSepData &&chiattr->GetOpcode() == Rsp::ReadReceipt; // false
bool rspHandled = false;
if (acceptRspSepData) { // false
m_gotRspSepData = true;
m_gotReadReceipt = true;
rspHandled = true;
} else if (acceptReadReceipt) { // false
m_gotReadReceipt = true;
rspHandled = true;
}
return rspHandled; // return false eventully
}