Skip to content

File commit_stage.h

File List > pipelined > commit_stage.h

Go to the documentation of this file

#pragma once

#include <cstdint>
#include <vector>

#include "sim/queue.h"
#include "sm/instr_ptr.h"
#include "sm/pipelined/pipelined.h"

namespace simtix {

namespace pipelined {

class CommitStage {
 public:
  CommitStage(PipelinedSMImpl *sm, const PipelinedSM::Param &p);

  ~CommitStage() = default;
  void Commit();

  void Reset();

 protected:
  void AcceptPendingCommitRequests();
  void RetireReadyCommitReqeusts();
  PipelinedSMImpl *const sm_;

  sim::SizedQueue<uint32_t> free_commit_buf_ids_;
  std::vector<uint32_t> pending_commit_buf_ids_;
  std::vector<InstrPtr> commit_buf_;

  const uint32_t kCommitWidth;
};

}  // namespace pipelined

}  // namespace simtix