gem5 v24.0.0.0
Loading...
Searching...
No Matches
func_unit.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013-2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
44#ifndef __CPU_MINOR_FUNC_UNIT_HH__
45#define __CPU_MINOR_FUNC_UNIT_HH__
46
47#include <cstdint>
48#include <ostream>
49#include <string>
50#include <vector>
51
52#include "base/types.hh"
53#include "cpu/func_unit.hh"
54#include "cpu/minor/buffers.hh"
55#include "cpu/minor/dyn_inst.hh"
56#include "cpu/timing_expr.hh"
57#include "params/MinorFU.hh"
58#include "params/MinorFUPool.hh"
59#include "params/MinorOpClass.hh"
60#include "params/MinorOpClassSet.hh"
61#include "sim/clocked_object.hh"
62#include "sim/sim_object.hh"
63
64namespace gem5
65{
66
69class MinorOpClass : public SimObject
70{
71 public:
72 OpClass opClass;
73
74 public:
75 MinorOpClass(const MinorOpClassParams &params) :
78 { }
79};
80
83{
84 public:
86
90
91 public:
92 MinorOpClassSet(const MinorOpClassSetParams &params);
93
94 public:
96 bool provides(OpClass op_class) { return capabilityList[op_class]; }
97};
98
104{
105 public:
108 uint64_t mask;
109 uint64_t match;
110
112 std::string description;
113
117
122
128
137
140
141 public:
142 MinorFUTiming(const MinorFUTimingParams &params);
143
144 public:
146 bool provides(OpClass op_class) { return opClasses->provides(op_class); }
147};
148
187
189class MinorFUPool : public SimObject
190{
191 public:
193
194 public:
195 MinorFUPool(const MinorFUPoolParams &params) :
198 { }
199};
200
201namespace minor
202{
203
207{
208 public:
210
211 public:
213 inst(inst_)
214 { }
215
216 public:
218 void reportData(std::ostream &os) const;
219 bool isBubble() const { return inst->isBubble(); }
220
223};
224
228typedef SelfStallingPipeline<QueuedInst,
230
232class FUPipeline : public FUPipelineBase, public FuncUnit
233{
234 public:
237
240
242 std::bitset<Num_OpClasses> capabilityList;
243
247
248 public:
253
254 public:
255 FUPipeline(const std::string &name, const MinorFU &description_,
256 ClockedObject &timeSource_);
257
258 public:
262
264 bool canInsert() const;
265
269
271 void advance();
272};
273
274} // namespace minor
275} // namespace gem5
276
277#endif /* __CPU_MINOR_FUNC_UNIT_HH__ */
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
Classes for buffer, queue and FIFO behaviour.
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Cycles is a wrapper class for representing cycle counts, i.e.
Definition types.hh:79
std::string name
Definition func_unit.hh:113
A collection of MinorFUs.
Definition func_unit.hh:190
std::vector< MinorFU * > funcUnits
Definition func_unit.hh:192
MinorFUPool(const MinorFUPoolParams &params)
Definition func_unit.hh:195
Extra timing capability to allow individual ops to have their source register dependency latencies tw...
Definition func_unit.hh:104
TimingExpr * extraCommitLatExpr
Definition func_unit.hh:121
std::vector< Cycles > srcRegsRelativeLats
Cycle offsets from the scoreboard delivery times of register values for each of this instruction's so...
Definition func_unit.hh:136
std::string description
Textual description of the decode's purpose.
Definition func_unit.hh:112
uint64_t mask
Mask off the ExtMachInst of an instruction before comparing with match.
Definition func_unit.hh:108
bool provides(OpClass op_class)
Does the extra decode in this object support the given op class.
Definition func_unit.hh:146
Cycles extraAssumedLat
Extra delay that results should show in the scoreboard after leaving the pipeline.
Definition func_unit.hh:127
MinorOpClassSet * opClasses
Extra opClasses check (after the FU one)
Definition func_unit.hh:139
bool suppress
If true, instructions matching this mask/match should not be issued in this FU.
Definition func_unit.hh:116
Cycles extraCommitLat
Extra latency that the instruction should spend at the end of the pipeline.
Definition func_unit.hh:120
MinorFUTiming(const MinorFUTimingParams &params)
Definition func_unit.cc:63
A functional unit that can execute any of opClasses operations with a single op(eration)Lat(ency) and...
Definition func_unit.hh:158
MinorFU(const MinorFUParams &params)
Definition func_unit.hh:178
Cycles issueLat
Delay after issuing an operation before the next operation can be issued.
Definition func_unit.hh:168
std::vector< unsigned int > cantForwardFromFUIndices
FUs which this pipeline can't receive a forwarded (i.e.
Definition func_unit.hh:172
MinorOpClassSet * opClasses
Definition func_unit.hh:160
Cycles opLat
Delay from issuing the operation, to it reaching the end of the associated pipeline.
Definition func_unit.hh:164
std::vector< MinorFUTiming * > timings
Extra timing info to give timings to individual ops.
Definition func_unit.hh:175
Wrapper for a matchable set of op classes.
Definition func_unit.hh:83
std::vector< MinorOpClass * > opClasses
Definition func_unit.hh:85
bool provides(OpClass op_class)
Does this set support the given op class.
Definition func_unit.hh:96
std::vector< bool > capabilityList
Convenience packing of opClasses into a bit vector for easier testing.
Definition func_unit.hh:89
MinorOpClassSet(const MinorOpClassSetParams &params)
Definition func_unit.cc:52
Boxing for MinorOpClass to get around a build problem with C++11 but also allow for future additions ...
Definition func_unit.hh:70
MinorOpClass(const MinorOpClassParams &params)
Definition func_unit.hh:75
Abstract superclass for simulation objects.
A functional unit configured from a MinorFU object.
Definition func_unit.hh:233
const MinorFU & description
Functional unit description that this pipeline implements.
Definition func_unit.hh:236
Cycles nextInsertCycle
When can a new instruction be inserted into the pipeline? This is an absolute cycle time unless it is...
Definition func_unit.hh:252
FUPipeline(const std::string &name, const MinorFU &description_, ClockedObject &timeSource_)
Definition func_unit.cc:86
std::vector< bool > cantForwardFromFUIndices
FUs which this pipeline can't receive a forwarded (i.e.
Definition func_unit.hh:246
Cycles cyclesBeforeInsert()
How many cycles must from curCycle before insertion into the pipeline is allowed.
Definition func_unit.cc:143
bool canInsert() const
Can an instruction be inserted now?
Definition func_unit.cc:152
void advance()
Step the pipeline.
Definition func_unit.cc:158
MinorFUTiming * findTiming(const StaticInstPtr &inst)
Find the extra timing information for this instruction.
Definition func_unit.cc:176
std::bitset< Num_OpClasses > capabilityList
Set of operation classes supported by this FU.
Definition func_unit.hh:242
ClockedObject & timeSource
An FUPipeline needs access to curCycle, use this timing source.
Definition func_unit.hh:239
static MinorDynInstPtr bubble()
There is a single bubble inst.
Definition dyn_inst.hh:250
Container class to box instructions in the FUs to make those queues have correct bubble behaviour whe...
Definition func_unit.hh:207
void reportData(std::ostream &os) const
Report and bubble interfaces.
Definition func_unit.cc:81
QueuedInst(MinorDynInstPtr inst_=MinorDynInst::bubble())
Definition func_unit.hh:212
MinorDynInstPtr inst
Definition func_unit.hh:209
static QueuedInst bubble()
Definition func_unit.hh:221
...ReportTraits are trait classes with the same functionality as ReportIF, but with elements explicit...
Definition buffers.hh:97
A pipeline simulating class that will stall (not advance when advance() is called) if a non-bubble va...
Definition buffers.hh:294
STL vector class.
Definition stl.hh:37
ClockedObject declaration and implementation.
const Params & params() const
The dynamic instruction and instruction/line id (sequence numbers) definition for Minor.
Bitfield< 17 > os
Definition misc.hh:838
SelfStallingPipeline< QueuedInst, ReportTraitsAdaptor< QueuedInst > > FUPipelineBase
Functional units have pipelines which stall when an inst gets to their ends allowing Execute::commit ...
Definition func_unit.hh:229
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
Minor contains all the definitions within the MinorCPU apart from the CPU class itself.

Generated on Tue Jun 18 2024 16:24:01 for gem5 by doxygen 1.11.0