gem5 v24.0.0.0
Loading...
Searching...
No Matches
decode.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
45#ifndef __CPU_MINOR_DECODE_HH__
46#define __CPU_MINOR_DECODE_HH__
47
48#include <vector>
49
50#include "base/named.hh"
51#include "cpu/minor/buffers.hh"
52#include "cpu/minor/cpu.hh"
53#include "cpu/minor/dyn_inst.hh"
55
56namespace gem5
57{
58
59namespace minor
60{
61
62/* Decode takes instructions from Fetch2 and decomposes them into micro-ops
63 * to feed to Execute. It generates a new sequence number for each
64 * instruction: execSeqNum.
65 */
66class Decode : public Named
67{
68 protected:
71
76
79
81 unsigned int outputWidth;
82
86
87 public:
88 /* Public for Pipeline to be able to pass it to Fetch2 */
90
91 protected:
95 {
97
100 inMacroop(other.inMacroop),
101 execSeqNum(other.execSeqNum),
102 blocked(other.blocked)
103 {
104 set(microopPC, other.microopPC);
105 }
106
107
110 unsigned int inputIndex = 0;
111
117 bool inMacroop = false;
118 std::unique_ptr<PCStateBase> microopPC;
119
122
124 bool blocked = false;
125 };
126
129
130 protected:
133
135 void popInput(ThreadID tid);
136
140 public:
141 Decode(const std::string &name,
142 MinorCPU &cpu_,
143 const BaseMinorCPUParams &params,
146 std::vector<InputBuffer<ForwardInstData>> &next_stage_input_buffer);
147
148 public:
150 void evaluate();
151
152 void minorTrace() const;
153
158 bool isDrained();
159};
160
161} // namespace minor
162} // namespace gem5
163
164#endif /* __CPU_MINOR_DECODE_HH__ */
Classes for buffer, queue and FIFO behaviour.
MinorCPU is an in-order CPU model with four fixed pipeline stages:
Definition cpu.hh:85
Interface for things with names.
Definition named.hh:39
virtual std::string name() const
Definition named.hh:47
void evaluate()
Pass on input/buffer data to the output if you can.
Definition decode.cc:127
void minorTrace() const
Definition decode.cc:341
bool isDrained()
Is this stage drained? For Decoed, draining is initiated by Execute halting Fetch1 causing Fetch2 to ...
Definition decode.cc:330
std::vector< InputBuffer< ForwardInstData > > inputBuffer
Definition decode.hh:89
const ForwardInstData * getInput(ThreadID tid)
Get a piece of data to work on, or 0 if there is no data.
Definition decode.cc:85
void popInput(ThreadID tid)
Pop an element off the input buffer, if there are any.
Definition decode.cc:98
std::vector< InputBuffer< ForwardInstData > > & nextStageReserve
Interface to reserve space in the next stage.
Definition decode.hh:78
Latch< ForwardInstData >::Output inp
Input port carrying macro instructions from Fetch2.
Definition decode.hh:73
std::vector< DecodeThreadInfo > decodeInfo
Definition decode.hh:127
unsigned int outputWidth
Width of output of this stage/input of next in instructions.
Definition decode.hh:81
Decode(const std::string &name, MinorCPU &cpu_, const BaseMinorCPUParams &params, Latch< ForwardInstData >::Output inp_, Latch< ForwardInstData >::Input out_, std::vector< InputBuffer< ForwardInstData > > &next_stage_input_buffer)
Definition decode.cc:51
Latch< ForwardInstData >::Input out
Output port carrying micro-op decomposed instructions to Execute.
Definition decode.hh:75
ThreadID getScheduledThread()
Use the current threading policy to determine the next thread to decode from.
Definition decode.cc:300
ThreadID threadPriority
Definition decode.hh:128
MinorCPU & cpu
Pointer back to the containing CPU.
Definition decode.hh:70
bool processMoreThanOneInput
If true, more than one input word can be processed each cycle if there is room in the output to conta...
Definition decode.hh:85
Forward flowing data between Fetch2,Decode,Execute carrying a packet of instructions of a width appro...
Definition pipe_data.hh:284
Like a Queue but with a restricted interface and a setTail function which, when the queue is empty,...
Definition buffers.hh:572
static const InstSeqNum firstExecSeqNum
Definition dyn_inst.hh:84
Encapsulate wires on either input or output of the latch.
Definition buffers.hh:252
STL vector class.
Definition stl.hh:37
Top level definition of the Minor in-order CPU model.
The dynamic instruction and instruction/line id (sequence numbers) definition for Minor.
Bitfield< 12, 11 > set
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
int16_t ThreadID
Thread index/ID type.
Definition types.hh:235
uint64_t InstSeqNum
Definition inst_seq.hh:40
Minor contains all the definitions within the MinorCPU apart from the CPU class itself.
Contains class definitions for data flowing between pipeline stages in the top-level structure portio...
Data members after this line are cycle-to-cycle state.
Definition decode.hh:95
InstSeqNum execSeqNum
Source of execSeqNums to number instructions.
Definition decode.hh:121
bool blocked
Blocked indication for report.
Definition decode.hh:124
bool inMacroop
True when we're in the process of decomposing a micro-op and microopPC will be valid.
Definition decode.hh:117
std::unique_ptr< PCStateBase > microopPC
Definition decode.hh:118
unsigned int inputIndex
Index into the inputBuffer's head marking the start of unhandled instructions.
Definition decode.hh:110
DecodeThreadInfo(const DecodeThreadInfo &other)
Definition decode.hh:98

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