Go to the documentation of this file.
46 #include "debug/MinorTiming.hh"
47 #include "enums/OpClass.hh"
54 opClasses(params.opClasses),
57 capabilityList(
Num_OpClasses, (opClasses.empty() ? true : false))
64 const MinorFUTimingParams ¶ms) :
68 description(params.description),
69 suppress(params.suppress),
70 extraCommitLat(params.extraCommitLat),
71 extraCommitLatExpr(params.extraCommitLatExpr),
72 extraAssumedLat(params.extraAssumedLat),
73 srcRegsRelativeLats(params.srcRegsRelativeLats),
74 opClasses(params.opClasses)
90 description(description_),
91 timeSource(timeSource_),
112 if (debug::MinorTiming) {
113 std::ostringstream lats;
117 while (
j < num_lats) {
126 "Adding extra timing decode pattern %d to FU"
127 " mask: %016x match: %016x srcRegLatencies: %s\n",
137 for (
auto i = cant_forward.begin();
i != cant_forward.end(); ++
i) {
184 uint64_t mach_inst = inst->
getEMI();
188 unsigned int num_timings = timings.size();
190 for (
unsigned int i = 0;
i < num_timings;
i++) {
194 (mach_inst & timing.
mask) == timing.
match)
197 "Found extra timing match (pattern %d '%s')"
198 " %s %16x (type %s)\n",
200 typeid(inst).name());
206 if (num_timings != 0) {
208 "No extra timing info. found for inst: %s"
209 " mach_inst: %16x\n",
bool stalled
If true, advance will not advance the pipeline.
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
FUPipeline(const std::string &name, const MinorFU &description_, ClockedObject &timeSource_)
void advance()
Step the pipeline.
std::string description
Textual description of the decode's purpose.
Extra timing capability to allow individual ops to have their source register dependency latencies tw...
Cycles issueLat
Delay after issuing an operation before the next operation can be issued.
ClockedObject & timeSource
An FUPipeline needs access to curCycle, use this timing source.
std::vector< unsigned int > cantForwardFromFUIndices
FUs which this pipeline can't receive a forwarded (i.e.
constexpr uint64_t mask(unsigned nbits)
Generate a 64-bit mask of 'nbits' 1s, right justified.
std::vector< MinorOpClass * > opClasses
Cycles nextInsertCycle
When can a new instruction be inserted into the pipeline? This is an absolute cycle time unless it is...
Cycles is a wrapper class for representing cycle counts, i.e.
Interface for things with names.
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
void reportData(std::ostream &os) const
Report and bubble interfaces.
A functional unit that can execute any of opClasses operations with a single op(eration)Lat(ency) and...
void addCapability(OpClass cap, unsigned oplat, bool pipelined)
Abstract superclass for simulation objects.
bool provides(OpClass op_class)
Does the extra decode in this object support the given op class.
uint64_t mask
Mask off the ExtMachInst of an instruction before comparing with match.
#define DPRINTFS(x, s,...)
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
const std::string & name()
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
MinorFUTiming(const MinorFUTimingParams ¶ms)
Cycles opLat
Delay from issuing the operation, to it reaching the end of the associated pipeline.
virtual uint64_t getEMI() const
virtual const std::string & disassemble(Addr pc, const loader::SymbolTable *symtab=nullptr) const
Return string representation of disassembled instruction.
const MinorFU & description
Functional unit description that this pipeline implements.
MinorOpClassSet(const MinorOpClassSetParams ¶ms)
bool canInsert() const
Can an instruction be inserted now?
void advance()
Try to advance the pipeline.
std::vector< Cycles > srcRegsRelativeLats
Cycle offsets from the scoreboard delivery times of register values for each of this instruction's so...
std::vector< bool > cantForwardFromFUIndices
FUs which this pipeline can't receive a forwarded (i.e.
static const OpClass Num_OpClasses
Cycles cyclesBeforeInsert()
How many cycles must from curCycle before insertion into the pipeline is allowed.
std::vector< bool > capabilityList
Convenience packing of opClasses into a bit vector for easier testing.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
MinorOpClassSet * opClasses
A pipeline simulating class that will stall (not advance when advance() is called) if a non-bubble va...
std::vector< MinorFUTiming * > timings
Extra timing info to give timings to individual ops.
bool alreadyPushed()
Have we already pushed onto this pipe without advancing.
MinorFUTiming * findTiming(const StaticInstPtr &inst)
Find the extra timing information for this instruction.
Generated on Tue Sep 21 2021 12:25:00 for gem5 by doxygen 1.8.17