Set payload extensions in arbiter at END_REQ.
This commit is contained in:
@@ -264,13 +264,14 @@ void ArbiterFifo::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase &c
|
||||
|
||||
if (cbPhase == BEGIN_REQ) // from initiator
|
||||
{
|
||||
GenerationExtension::setExtension(cbPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(cbPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[channelId]++);
|
||||
activeTransactions[threadId]++;
|
||||
|
||||
if (activeTransactions[threadId] <= maxActiveTransactions)
|
||||
if (activeTransactions[threadId] < maxActiveTransactions)
|
||||
{
|
||||
activeTransactions[threadId]++;
|
||||
|
||||
GenerationExtension::setExtension(cbPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(cbPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[channelId]++);
|
||||
|
||||
tlm_phase tPhase = END_REQ;
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
|
||||
@@ -339,18 +340,21 @@ void ArbiterFifo::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase &c
|
||||
{
|
||||
lastEndResp[threadId] = sc_time_stamp();
|
||||
cbPayload.release();
|
||||
activeTransactions[threadId]--;
|
||||
|
||||
if (activeTransactions[threadId] == maxActiveTransactions)
|
||||
if (outstandingEndReq[threadId] != nullptr)
|
||||
{
|
||||
tlm_generic_payload &tPayload = *outstandingEndReq[threadId];
|
||||
outstandingEndReq[threadId] = nullptr;
|
||||
tlm_phase tPhase = END_REQ;
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
tlm_generic_payload &tPayload = *outstandingEndReq[threadId];
|
||||
unsigned int tChannelId = DramExtension::getExtension(tPayload).getChannel().ID();
|
||||
|
||||
GenerationExtension::setExtension(tPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(tPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[tChannelId]++);
|
||||
|
||||
tSocket[static_cast<int>(threadId)]->nb_transport_bw(tPayload, tPhase, tDelay);
|
||||
|
||||
unsigned int tChannelId = DramExtension::getExtension(tPayload).getChannel().ID();
|
||||
|
||||
if (!channelIsBusy[tChannelId])
|
||||
{
|
||||
channelIsBusy[tChannelId] = true;
|
||||
@@ -363,6 +367,8 @@ void ArbiterFifo::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase &c
|
||||
else
|
||||
pendingRequests[tChannelId].push(&tPayload);
|
||||
}
|
||||
else
|
||||
activeTransactions[threadId]--;
|
||||
|
||||
if (!pendingResponses[threadId].empty())
|
||||
{
|
||||
@@ -389,13 +395,14 @@ void ArbiterReorder::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase
|
||||
|
||||
if (cbPhase == BEGIN_REQ) // from initiator
|
||||
{
|
||||
GenerationExtension::setExtension(cbPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(cbPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[channelId]++);
|
||||
activeTransactions[threadId]++;
|
||||
|
||||
if (activeTransactions[threadId] <= maxActiveTransactions)
|
||||
if (activeTransactions[threadId] < maxActiveTransactions)
|
||||
{
|
||||
activeTransactions[threadId]++;
|
||||
|
||||
GenerationExtension::setExtension(cbPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(cbPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[channelId]++);
|
||||
|
||||
tlm_phase tPhase = END_REQ;
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
|
||||
@@ -468,18 +475,21 @@ void ArbiterReorder::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase
|
||||
{
|
||||
lastEndResp[threadId] = sc_time_stamp();
|
||||
cbPayload.release();
|
||||
activeTransactions[threadId]--;
|
||||
|
||||
if (activeTransactions[threadId] == maxActiveTransactions)
|
||||
if (outstandingEndReq[threadId] != nullptr)
|
||||
{
|
||||
tlm_generic_payload &tPayload = *outstandingEndReq[threadId];
|
||||
outstandingEndReq[threadId] = nullptr;
|
||||
tlm_phase tPhase = END_REQ;
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
tlm_generic_payload &tPayload = *outstandingEndReq[threadId];
|
||||
unsigned int tChannelId = DramExtension::getExtension(tPayload).getChannel().ID();
|
||||
|
||||
GenerationExtension::setExtension(tPayload, sc_time_stamp());
|
||||
DramExtension::setPayloadIDs(tPayload,
|
||||
nextThreadPayloadIDToAppend[threadId]++, nextChannelPayloadIDToAppend[tChannelId]++);
|
||||
|
||||
tSocket[static_cast<int>(threadId)]->nb_transport_bw(tPayload, tPhase, tDelay);
|
||||
|
||||
unsigned int tChannelId = DramExtension::getExtension(tPayload).getChannel().ID();
|
||||
|
||||
if (!channelIsBusy[tChannelId])
|
||||
{
|
||||
channelIsBusy[tChannelId] = true;
|
||||
@@ -492,6 +502,8 @@ void ArbiterReorder::peqCallback(tlm_generic_payload &cbPayload, const tlm_phase
|
||||
else
|
||||
pendingRequests[tChannelId].push(&tPayload);
|
||||
}
|
||||
else
|
||||
activeTransactions[threadId]--;
|
||||
|
||||
tlm_generic_payload &tPayload = **pendingResponses[threadId].begin();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user