Skip to content

File frontend_golden.h

File List > projects > simtix > src > simtix > uvm > frontend_golden.h

Go to the documentation of this file

#pragma once

#include <simtix/uvm.h>

#include <cstdint>
#include <string>

#include "simtix/sm.h"
#include "sm/pipelined/pipelined.h"
#include "uvm/mock_instr_buffer.h"

namespace simtix {

namespace uvm {

using pipelined::PipelinedSM;

class FrontendGoldenImpl : public pipelined::PipelinedSMImpl {
 public:
  explicit FrontendGoldenImpl(
      const std::string &name, uint32_t cid,
      const ArchParam &p = kDefaultArchParam,
      const PipelinedSM::Param &pp = PipelinedSM::kDefaultParam);

  ~FrontendGoldenImpl();

 protected:
  void Tick() override;

  MockInstrBuffer *mock_ibuffer_;
  std::deque<FrontendGolden::Input> test_q_;
};

class FrontendGolden::Impl : public FrontendGoldenImpl {
 public:
  Impl(const std::string &name, uint32_t cid,
       const ArchParam &p = kDefaultArchParam,
       const PipelinedSM::Param &pp = PipelinedSM::kDefaultParam)
      : FrontendGoldenImpl(name, cid, p, pp) {}
  ~Impl() = default;

 protected:
  friend class FrontendGolden;
};
}  // namespace uvm
}  // namespace simtix