OpenASIP 2.2
Loading...
Searching...
No Matches
NetlistGenerator.hh
Go to the documentation of this file.
1/*
2 Copyright (c) 2002-2009 Tampere University.
3
4 This file is part of TTA-Based Codesign Environment (TCE).
5
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the "Software"),
8 to deal in the Software without restriction, including without limitation
9 the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 and/or sell copies of the Software, and to permit persons to whom the
11 Software is furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 DEALINGS IN THE SOFTWARE.
23 */
24/**
25 * @file NetlistGenerator.hh
26 *
27 * Declaration of NetlistGenerator class.
28 *
29 * @author Lasse Laasonen 2005 (lasse.laasonen-no.spam-tut.fi)
30 * @note rating: red
31 */
32
33#ifndef TTA_NETLIST_GENERATOR_HH
34#define TTA_NETLIST_GENERATOR_HH
35
36#include <iostream>
37#include <map>
38#include <vector>
39
40#include "Exception.hh"
42#include "HDBTypes.hh"
43#include "ProGeTypes.hh"
45#include "TCEString.hh"
46#include "ProGeOptions.hh"
47
48namespace IDF {
49 class MachineImplementation;
50 class FUGenerated;
51}
52
53namespace HDB {
54 class FUEntry;
55 class RFEntry;
56 class FUImplementation;
57}
58
59namespace TTAMachine {
60 class Unit;
61 class FunctionUnit;
62 class ControlUnit;
63 class FUPort;
64 class Machine;
65 class BaseRegisterFile;
66 class AddressSpace;
67 class Port;
68 class ImmediateUnit;
69}
70
71namespace ProGe {
72
73 class ICDecoderGeneratorPlugin;
74 class Netlist;
75 class NetlistBlock;
76 class NetlistPort;
77 class ProGeContext;
78 class Signal;
79 class GeneratableFUNetlistBlock;
80
81 /**
82 * Generates a netlist of processor building blocks. [DEPRECATED]
83 */
86
87 public:
90 virtual ~NetlistGenerator();
91
93 const ProGeOptions& options, int imemWidthInMAUs,
94 TCEString entityNameStr, std::ostream& warningStream);
95
97 const TTAMachine::Port& port, Direction dir = IN) const;
98 NetlistBlock& netlistBlock(const TTAMachine::Unit& unit) const;
99 NetlistPort& loadPort(const NetlistPort& port) const;
100 bool hasOpcodePort(const NetlistPort& port) const;
101 NetlistPort& rfOpcodePort(const NetlistPort& port) const;
102 NetlistPort& rfGuardPort(const NetlistBlock& rfBlock) const;
103 NetlistPort& fuOpcodePort(const NetlistBlock& fuBlock) const;
104 NetlistPort& fuGuardPort(const NetlistPort& fuPort) const;
105 NetlistPort& clkPort(const NetlistBlock& block) const;
106 NetlistPort& rstPort(const NetlistBlock& block) const;
107 bool hasGlockPort(const NetlistBlock& block) const;
108 NetlistPort& glockPort(const NetlistBlock& block) const;
109 bool hasGlockReqPort(const NetlistBlock& block) const;
110 NetlistPort& glockReqPort(const NetlistBlock& block) const;
111
113 const TTAMachine::ImmediateUnit& iu) const;
116
117 NetlistBlock& ttaCore() const;
121
122 HDB::FUEntry& fuEntry(const std::string& fuName) const;
123 HDB::RFEntry& rfEntry(const std::string& rfName) const;
124
125 const ProGeContext& context() const { return context_; }
126
127 /// Instruction word port name in instruction decoder.
128 static const std::string DECODER_INSTR_WORD_PORT;
129 /// Reset port name in instruction decoder.
130 static const std::string DECODER_RESET_PORT;
131 /// Clock port name in instruction decoder.
132 static const std::string DECODER_CLOCK_PORT;
133 /// RA load port name in instruction decoder.
134 static const std::string DECODER_RA_LOAD_PORT;
135 /// PC load port name in instruction decoder.
136 static const std::string DECODER_PC_LOAD_PORT;
137 /// PC opcode port name in instruction decoder.
138 static const std::string DECODER_PC_OPCODE_PORT;
139 /// Lock request out port name in instruction decoder.
140 static const std::string DECODER_LOCK_REQ_OUT_PORT;
141 /// Lock request in port name in instruction decoder.
142 static const std::string DECODER_LOCK_REQ_IN_PORT;
143 // Name of lock status port in instruction decoder.
144 static const std::string DECODER_LOCK_STATUS_PORT;
145 /// Lock request in port name in decompressor.
146 static const std::string DECOMP_LOCK_REQ_IN_PORT;
147 /// Global lock out port name in decompressor.
148 static const std::string DECOMP_GLOCK_PORT;
149 /// Instruction word port name in decompressor.
150 static const std::string DECOMP_INSTR_WORD_PORT;
151 // Name of address width parameter
152 static const std::string ADDR_WIDTH;
153 // Name of the fetch block port
154 static const std::string FETCHBLOCK_PORT_NAME;
155
157 const NetlistBlock& block, NetlistPort& glockReqPort);
158
159 private:
160 /// Multimap type to map ADF ports to NetlistPorts.
161 typedef std::multimap<const TTAMachine::Port*, NetlistPort*>
163 /// Map type to map ADF Units to NetlistBlocks
164 typedef std::map<const TTAMachine::Unit*, NetlistBlock*>
166 /// Map type for NetlistPorts.
167 typedef std::map<const NetlistPort*, NetlistPort*> PortRelationMap;
168 /// Map type for NetlistPorts.
169 typedef std::map<const NetlistBlock*, NetlistPort*> PortPurposeMap;
170 /// Map type for port of immediate units.
171 typedef std::map<const TTAMachine::ImmediateUnit*, NetlistPort*>
173 /// Map type for FUImplementation.
174 typedef std::map<std::string, HDB::FUEntry*> FUEntryMap;
175 /// Map type for RFImplementation.
176 typedef std::map<std::string, HDB::RFEntry*> RFEntryMap;
177
178 void addGCUToNetlist(NetlistBlock& toplevelBlock, int imemWidthInMAUs);
179 void addFUToNetlist(
180 const IDF::FUImplementationLocation& location,
181 NetlistBlock& netlistBlock, std::ostream& warningStream);
185 const HDB::FUImplementation& fuImplementation,
186 NetlistBlock& coreBlock, NetlistBlock& fuBlock,
187 const TTAMachine::FunctionUnit& adfFU);
188 void addRFToNetlist(
189 const ProGeOptions& options,
190 const IDF::RFImplementationLocation& location,
192 void addIUToNetlist(
193 const ProGeOptions& options,
194 const IDF::RFImplementationLocation& location,
197 const ProGeOptions& options,
198 const TTAMachine::BaseRegisterFile& regFile,
199 const IDF::RFImplementationLocation& location,
200 NetlistBlock& netlistBlock, const std::string& blockNamePrefix);
201 void mapNetlistPort(
202 const TTAMachine::Port& adfPort, NetlistPort& netlistPort);
203 void mapNetlistBlock(
205 bool netlistPortIsMapped(const TTAMachine::Port& adfPort);
206 void mapLoadPort(const NetlistPort& port, NetlistPort& loadPort);
207 void mapRFOpcodePort(const NetlistPort& port, NetlistPort& opcodePort);
208 void mapClockPort(const NetlistBlock& block, NetlistPort& clkPort);
209 void mapResetPort(const NetlistBlock& block, NetlistPort& resetPort);
210 void
212 void mapRFGuardPort(const NetlistBlock& block, NetlistPort& guardPort);
213 void
214 mapFUGuardPort(const NetlistPort& dataPort, NetlistPort& guardPort);
215 void
216 mapFUOpcodePort(const NetlistBlock& block, NetlistPort& opcodePort);
218 const TTAMachine::ImmediateUnit& iu, NetlistPort& port);
220 const std::string& paramName, const HDB::FUEntry* fuEntry) const;
221 unsigned int
223
224 TCEString checkInstanceName(const TCEString& baseInstanceName,
225 const TCEString& moduleName) const;
226
227 bool isLSU(const TTAMachine::FunctionUnit& fu) const;
228 static bool isLSUDataPort(
229 const TTAMachine::FunctionUnit& adfFU, const std::string& portName);
230 static Signal inferLSUSignal(const std::string& portName);
231
232 static int opcodePortWidth(
233 const HDB::FUEntry& fu, std::ostream& warningStream);
234 static int opcodePortWidth(const TTAMachine::ControlUnit& gcu);
236 const TTAMachine::FunctionUnit& fuToSearch,
237 const TTAMachine::FunctionUnit& origFU,
238 const std::string& portName);
245
247 /// The generator plugin.
249 /// Maps the ADF ports to the netlist ports.
251 /// Maps the ADF units to the netlist blocks.
253 /// Maps loads ports.
255 /// Maps opcode ports.
257 /// Maps clock ports.
259 /// Maps reset ports.
261 /// Maps RF guard ports.
263 /// Maps global lock ports.
265 /// Maps global lock request ports.
267 /// Maps FU guard ports.
269 /// Maps FU opcode ports.
271 /// Maps the created netlist ports to immediate units
273 /// The TTA core block
275 /// The instruction decoder block.
277 /// The instruction decompressor block
279 /// The instruction fetch block
281 /// Maps FU implementations for different FU's.
283 /// Maps RF implementations for different RF's.
285 /// Return address in port in GCU (ifetch).
287 /// Returns address out port in GCU (ifetch).
289 };
290}
291
292#endif
TTAMachine::Machine * machine
the architecture definition of the estimated processor
static MachInfoCmdLineOptions options
Definition MachInfo.cc:46
NetlistPort & fuGuardPort(const NetlistPort &fuPort) const
PortPurposeMap clkPorts_
Maps clock ports.
IUPortMap iuPortMap_
Maps the created netlist ports to immediate units.
std::map< std::string, HDB::FUEntry * > FUEntryMap
Map type for FUImplementation.
PortRelationMap loadPortMap_
Maps loads ports.
static const std::string DECOMP_GLOCK_PORT
Global lock out port name in decompressor.
static int instructionMemoryAddressWidth(const TTAMachine::Machine &machine)
void addFUExternalPortsToNetlist(const HDB::FUImplementation &fuImplementation, NetlistBlock &coreBlock, NetlistBlock &fuBlock, const TTAMachine::FunctionUnit &adfFU)
PortPurposeMap fuOpcodePorts_
Maps FU opcode ports.
static const std::string DECODER_LOCK_REQ_OUT_PORT
Lock request out port name in instruction decoder.
FUEntryMap fuEntryMap_
Maps FU implementations for different FU's.
void mapLoadPort(const NetlistPort &port, NetlistPort &loadPort)
RFEntryMap rfEntryMap_
Maps RF implementations for different RF's.
static bool isLSUDataPort(const TTAMachine::FunctionUnit &adfFU, const std::string &portName)
NetlistPort & rstPort(const NetlistBlock &block) const
void mapRFOpcodePort(const NetlistPort &port, NetlistPort &opcodePort)
NetlistBlock & netlistBlock(const TTAMachine::Unit &unit) const
ICDecoderGeneratorPlugin & plugin_
The generator plugin.
GeneratableFUNetlistBlock * addGeneratableFUsToNetlist(const IDF::FUGenerated &fug, NetlistBlock &netlistBlock)
NetlistBlock * generate(const ProGeOptions &options, int imemWidthInMAUs, TCEString entityNameStr, std::ostream &warningStream)
bool isParameterizable(const std::string &paramName, const HDB::FUEntry *fuEntry) const
static const std::string DECODER_PC_LOAD_PORT
PC load port name in instruction decoder.
const ProGeContext & context_
void mapFUOpcodePort(const NetlistBlock &block, NetlistPort &opcodePort)
void addRFToNetlist(const ProGeOptions &options, const IDF::RFImplementationLocation &location, NetlistBlock &netlistBlock)
PortPurposeMap glockPorts_
Maps global lock ports.
static const std::string FETCHBLOCK_PORT_NAME
TCEString checkInstanceName(const TCEString &baseInstanceName, const TCEString &moduleName) const
unsigned int calculateAddressWidth(TTAMachine::FunctionUnit const *fu) const
NetlistPort & loadPort(const NetlistPort &port) const
void mapGlobalLockPort(const NetlistBlock &block, NetlistPort &glockPort)
static const std::string DECODER_PC_OPCODE_PORT
PC opcode port name in instruction decoder.
bool hasGlockPort(const NetlistBlock &block) const
static const std::string DECODER_CLOCK_PORT
Clock port name in instruction decoder.
std::map< std::string, HDB::RFEntry * > RFEntryMap
Map type for RFImplementation.
static const std::string ADDR_WIDTH
static const std::string DECODER_INSTR_WORD_PORT
Instruction word port name in instruction decoder.
NetlistBlock & ttaCore() const
PortPurposeMap rfGuardPorts_
Maps RF guard ports.
static const std::string DECODER_RA_LOAD_PORT
RA load port name in instruction decoder.
static const std::string DECOMP_INSTR_WORD_PORT
Instruction word port name in decompressor.
void mapNetlistPort(const TTAMachine::Port &adfPort, NetlistPort &netlistPort)
NetlistBlock * coreBlock_
The TTA core block.
NetlistPort * raOutPort_
Returns address out port in GCU (ifetch).
static Signal inferLSUSignal(const std::string &portName)
void mapNetlistBlock(const TTAMachine::Unit &unit, NetlistBlock &netlistBlock)
NetlistPort & gcuReturnAddressInPort() const
UnitCorrespondenceMap unitCorrespondenceMap_
Maps the ADF units to the netlist blocks.
NetlistPort & rfOpcodePort(const NetlistPort &port) const
bool hasGlockReqPort(const NetlistBlock &block) const
NetlistBlock * instructionDecompressor_
The instruction decompressor block.
bool isLSU(const TTAMachine::FunctionUnit &fu) const
NetlistBlock & instructionDecompressor() const
void addFUToNetlist(const IDF::FUImplementationLocation &location, NetlistBlock &netlistBlock, std::ostream &warningStream)
HDB::FUEntry & fuEntry(const std::string &fuName) const
static int instructionMemoryWidth(const TTAMachine::Machine &machine)
NetlistBlock & instructionDecoder() const
PortPurposeMap rstPorts_
Maps reset ports.
void addBaseRFToNetlist(const ProGeOptions &options, const TTAMachine::BaseRegisterFile &regFile, const IDF::RFImplementationLocation &location, NetlistBlock &netlistBlock, const std::string &blockNamePrefix)
void mapRFGuardPort(const NetlistBlock &block, NetlistPort &guardPort)
NetlistPort & immediateUnitWritePort(const TTAMachine::ImmediateUnit &iu) const
std::map< const TTAMachine::ImmediateUnit *, NetlistPort * > IUPortMap
Map type for port of immediate units.
static const std::string DECODER_LOCK_REQ_IN_PORT
Lock request in port name in instruction decoder.
NetlistPort & glockReqPort(const NetlistBlock &block) const
void mapResetPort(const NetlistBlock &block, NetlistPort &resetPort)
static TTAMachine::AddressSpace & instructionMemory(const TTAMachine::Machine &machine)
NetlistBlock & instructionFetch() const
void mapImmediateUnitWritePort(const TTAMachine::ImmediateUnit &iu, NetlistPort &port)
NetlistBlock * instructionDecoder_
The instruction decoder block.
std::map< const NetlistBlock *, NetlistPort * > PortPurposeMap
Map type for NetlistPorts.
NetlistPort & gcuReturnAddressOutPort() const
PortRelationMap rfOpcodePortMap_
Maps opcode ports.
void mapGlobalLockRequestPort(const NetlistBlock &block, NetlistPort &glockReqPort)
NetlistPort & netlistPort(const TTAMachine::Port &port, Direction dir=IN) const
static const std::string DECOMP_LOCK_REQ_IN_PORT
Lock request in port name in decompressor.
void mapClockPort(const NetlistBlock &block, NetlistPort &clkPort)
PortCorrespondenceMap portCorrespondenceMap_
Maps the ADF ports to the netlist ports.
bool hasOpcodePort(const NetlistPort &port) const
void mapFUGuardPort(const NetlistPort &dataPort, NetlistPort &guardPort)
void addGCUToNetlist(NetlistBlock &toplevelBlock, int imemWidthInMAUs)
void addIUToNetlist(const ProGeOptions &options, const IDF::RFImplementationLocation &location, NetlistBlock &netlistBlock)
std::map< const NetlistPort *, NetlistPort * > PortRelationMap
Map type for NetlistPorts.
NetlistPort & fuOpcodePort(const NetlistBlock &fuBlock) const
static int opcodePortWidth(const HDB::FUEntry &fu, std::ostream &warningStream)
NetlistPort & glockPort(const NetlistBlock &block) const
PortPurposeMap glockReqPorts_
Maps global lock request ports.
static TTAMachine::FUPort & findCorrespondingPort(const TTAMachine::FunctionUnit &fuToSearch, const TTAMachine::FunctionUnit &origFU, const std::string &portName)
std::multimap< const TTAMachine::Port *, NetlistPort * > PortCorrespondenceMap
Multimap type to map ADF ports to NetlistPorts.
NetlistPort * raInPort_
Return address in port in GCU (ifetch).
NetlistPort & clkPort(const NetlistBlock &block) const
bool netlistPortIsMapped(const TTAMachine::Port &adfPort)
const ProGeContext & context() const
NetlistBlock * instructionFetch_
The instruction fetch block.
NetlistPort & rfGuardPort(const NetlistBlock &rfBlock) const
std::map< const TTAMachine::Unit *, NetlistBlock * > UnitCorrespondenceMap
Map type to map ADF Units to NetlistBlocks.
PortRelationMap fuGuardPortMap_
Maps FU guard ports.
HDB::RFEntry & rfEntry(const std::string &rfName) const
static const std::string DECODER_LOCK_STATUS_PORT
static Direction translateDirection(HDB::Direction direction)
static const std::string DECODER_RESET_PORT
Reset port name in instruction decoder.
Direction
Direction of port.
Definition HDBTypes.hh:40
Definition FUGen.hh:54
Direction
Direction of the port.
Definition ProGeTypes.hh:52
@ IN
Input port.
Definition ProGeTypes.hh:53