Skip to content

Missing capacity check for dispatcher unit in simx #317

@THUTwenTy

Description

@THUTwenTy

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions