I noticed that the dispatcher input buffer and some other pipeline units in simx don't have capacity checks.
But the ibuffer in decode stage has such check, like if (ibuffer.full()) {.
And I found that in an old version, such runtime capacity check existed (shown below), Commit 7e9e99e deleted this part.
if (dispatchers_.at((int)trace->fu_type)->push(i, trace)) {
operand->Output.pop();
trace->log_once(false);
} else {
if (!trace->log_once(true)) {
DT(4, "*** dispatch-stall: " << *trace);
}
}
and changed to a direct push.
dispatchers_.at((int)trace->fu_type)->Inputs.at(iw).push(trace);
operand->Output.pop();
Why such capacity check is deleted? How could the new version simulate the 'back-pressure' behavior in rtl? I would greatly appreciate any explanation on this.
I noticed that the dispatcher input buffer and some other pipeline units in
simxdon't have capacity checks.But the ibuffer in decode stage has such check, like
if (ibuffer.full()) {.And I found that in an old version, such runtime capacity check existed (shown below),
Commit 7e9e99edeleted this part.and changed to a direct
push.Why such capacity check is deleted? How could the new version simulate the 'back-pressure' behavior in rtl? I would greatly appreciate any explanation on this.