Open gxflying opened 8 months ago
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
}
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)