OpenASIP 2.2
Loading...
Searching...
No Matches
PlatformIntegrator.cc
Go to the documentation of this file.
1/*
2 Copyright (c) 2002-2010 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 PlatformIntegerator.cc
26 *
27 * Implementation of PlatformIntegrator class.
28 *
29 * @author Otto Esko 2010 (otto.esko-no.spam-tut.fi)
30 * @note rating: red
31 */
32
33#include <iostream>
34#include <vector>
35#include <string>
36#include "PlatformIntegrator.hh"
37#include "MemoryGenerator.hh"
38#include "FileSystem.hh"
39#include "StringTools.hh"
40#include "Exception.hh"
41#include "Netlist.hh"
42#include "NetlistBlock.hh"
43#include "NetlistPort.hh"
44#include "VHDLNetlistWriter.hh"
46#include "Machine.hh"
47#include "HWOperation.hh"
49#include "FUPort.hh"
50#include "FUEntry.hh"
51#include "FUArchitecture.hh"
52#include "MathTools.hh"
53#include "HDBManager.hh"
54#include "HDBRegistry.hh"
55#include "FUImplementation.hh"
56#include "FUExternalPort.hh"
57using std::vector;
58using std::endl;
59using std::multimap;
62using ProGe::Netlist;
64
67
69 : machine_(NULL),
70 idf_(NULL),
71 integratorBlock_(NULL),
72 hdl_(ProGe::VHDL),
73 progeOutputDir_(""),
74 coreEntityName_(""),
75 outputDir_(""),
76 programName_(""),
77 targetFrequency_(0),
78 warningStream_(std::cout),
79 errorStream_(std::cerr),
80 ttaCores_(NULL),
81 imem_(),
82 dmemType_(UNKNOWN),
83 dmem_(),
84 lsus_(),
85 clkPort_(NULL),
86 resetPort_(NULL),
87 unconnectedPorts_(NULL) {
89}
90
93 ProGe::HDL hdl, TCEString progeOutputDir, TCEString coreEntityName,
94 TCEString outputDir, TCEString programName, int targetClockFreq,
95 std::ostream& warningStream, std::ostream& errorStream,
96 const MemInfo& imem, MemType dmemType)
97 : machine_(machine),
98 idf_(idf),
99 integratorBlock_(NULL),
100 hdl_(hdl),
101 progeOutputDir_(progeOutputDir),
102 sharedOutputDir_(""),
103 coreEntityName_(coreEntityName),
104 outputDir_(outputDir),
105 programName_(programName),
106 targetFrequency_(targetClockFreq),
107 warningStream_(warningStream),
108 errorStream_(errorStream),
109 ttaCores_(NULL),
110 imem_(imem),
111 dmemType_(dmemType),
112 dmem_(),
113 lsus_(),
114 clkPort_(NULL),
115 resetPort_(NULL),
116 unconnectedPorts_(NULL) {
119
121}
122
124
130
131
134
135 return programName_;
136}
137
138
140PlatformIntegrator::progeFilePath(TCEString fileName, bool absolute) const {
141
142 TCEString pathToFile =
144
145 if (absolute) {
146 pathToFile = FileSystem::absolutePathOf(pathToFile);
147 }
148
149 return pathToFile;
150}
151
152
155 TCEString fileName, bool absolute) const {
156
157 TCEString pathToFile =
159
160 if (absolute) {
161 pathToFile = FileSystem::absolutePathOf(pathToFile);
162 }
163
164 return pathToFile;
165}
166
168PlatformIntegrator::tbFilePath(TCEString fileName, bool absolute) const {
170 +"tb" + FileSystem::DIRECTORY_SEPARATOR + fileName;
171
172 if (absolute) {
173 pathToFile = FileSystem::absolutePathOf(pathToFile);
174 }
175
176 return pathToFile;
177}
178
179void
187
188
193
194
197 const TCEString& original,
198 const TCEString& tag) const {
199
200 TCEString signal = original;
201 if (original.find(tag) != TCEString::npos) {
202 signal = original.substr(original.find(tag));
203 }
204 return StringTools::trim(signal);
205}
206
207
208void
210 std::vector<TCEString>& files) const {
211
212 bool makeAbsolute = false;
213 try {
214 TCEString gcuPath =
216 std::vector<std::string> gcuFiles =
217 FileSystem::directoryContents(gcuPath, makeAbsolute);
218
219 for (unsigned int i = 0; i < gcuFiles.size(); i++) {
220 files.push_back(gcuFiles.at(i));
221 }
222 } catch (FileNotFound& e) {
223 errorStream() << "Error: " << e.errorMessage() << std::endl;
224 throw e;
225 }
226
227 try {
228 bool foundImemMau = false;
229 TCEString imemMau = coreEntityName() + "_imem_mau_pkg.vhdl";
230
231 TCEString vhdlPath =
233 std::vector<std::string> vhdlFiles =
234 FileSystem::directoryContents(vhdlPath, makeAbsolute);
235 for (unsigned int i = 0; i < vhdlFiles.size(); i++) {
236 if (vhdlFiles.at(i).find(imemMau) != TCEString::npos) {
237 foundImemMau = true;
238 }
239 files.push_back(vhdlFiles.at(i));
240 }
241
242 // imem_mau_pkg was not yet present, but add it to file list
243 if (!foundImemMau) {
244 TCEString path =
245 vhdlPath + FileSystem::DIRECTORY_SEPARATOR + imemMau;
246 files.push_back(path);
247 }
248 } catch (FileNotFound& e) {
249 errorStream() << "Error: " << e.errorMessage() << std::endl;
250 throw e;
251 }
252
253 if (!sharedOutputDir_.empty()) {
254 try {
255 std::string sharedVhdl =
257 std::vector<std::string> sharedFiles =
258 FileSystem::directoryContents(sharedVhdl, makeAbsolute);
259 for (unsigned int i = 0; i < sharedFiles.size(); i++) {
260 files.push_back(sharedFiles.at(i));
261 }
262 } catch (FileNotFound& e) {
263 errorStream() << "Error: " << e.errorMessage() << std::endl;
264 throw e;
265 }
266 }
267}
268
269
270void
272
274 if (!FileSystem::createDirectory(absolute)) {
275 throw IOException(__FILE__, __LINE__, "PlatformIntegrator",
276 "Couldn't create dir " + absolute);
277 }
278}
279
280
281std::ostream&
286
287
288std::ostream&
290
291 return errorStream_;
292}
293
294
295int
300
306
309
310 return machine_;
311}
312
313
316
317 return idf_;
318}
319
320
323
324 return coreEntityName() + "_toplevel";
325}
326
327void
329 const ProGe::NetlistBlock* progeBlock) {
330 NetlistBlock* highestBlock = integratorBlock_;
331 // Must add ports to highest block *before* copying tta toplevel
332 clkPort_ = new NetlistPort(
333 TTA_CORE_CLK, "0", 1, ProGe::BIT, ProGe::IN, *highestBlock);
335 TTA_CORE_RSTX, "0", 1, ProGe::BIT, ProGe::IN, *highestBlock);
337
338 if (dmemType_ != NONE) {
340 }
341}
342
343
344void
348 for (int i = 0; i < fuNav.count(); i++) {
349 TTAMachine::FunctionUnit* fu = fuNav.item(i);
350 if (fu->hasAddressSpace()) {
352
353 bool isLSU = false;
354 for (int i = 0; i < fu->operationCount(); ++i) {
355 std::string operation = fu->operation(i)->name();
356 std::string prefix = operation.substr(0, 2);
357 if (prefix == "ld" || prefix == "st") {
358 isLSU = true;
359 break;
360 }
361 }
362
363 if (isLSU) {
364 dmem_[as] = readLsuParameters(*fu);
365 lsus_.push_back(fu);
366 }
367 }
368 }
369}
370
371void
373 dmem_.clear();
374 lsus_.clear();
375}
376
377std::vector<std::string>
379 if (idf()->hasFUImplementation(fu.name())) {
381 idf()->fuImplementation(fu.name());
382 TCEString hdb = location.hdbFile();
383 int id = location.id();
385 HDB::FUEntry* entry = manager.fuByEntryID(id);
386
387 if (!entry->hasImplementation()) {
388 TCEString msg = "HDB entry for " + fu.name() +
389 " does not contain " + "implementation!";
390 throw InvalidData(__FILE__, __LINE__, "PlatformIntegrator", msg);
391 }
392
393 auto implementation = entry->implementation();
394
395 std::vector<std::string> ports;
396 for (int i = 0; i > implementation.externalPortCount(); ++i) {
397 ports.push_back(implementation.externalPort(i).name());
398 }
399 return ports;
400 } else if (idf()->hasFUGeneration(fu.name())) {
401 // quick fix: assume AlmaIF ports
402 std::vector<std::string> ports = {
403 "avalid_out", "aready_in", "aaddr_out", "awren_out", "astrb_out",
404 "rvalid_in", "rready_out", "rdata_in", "adata_out"};
405 return ports;
406 } else {
407 TCEString msg = "Function Unit " + fu.name() + " does not have an " +
408 "implementation!";
409 throw InvalidData(__FILE__, __LINE__, "PlatformIntegrator", msg);
410 }
411}
412
415
416 MemInfo dmem;
417 dmem.type = dmemType_;
418 dmem.mauWidth = lsu.addressSpace()->width();
419 unsigned int internalAddrw =
421 unsigned int dataWidth = 0;
422 for (int i = 0; i < lsu.operationPortCount(); i++) {
423 TTAMachine::FUPort* port = lsu.operationPort(i);
424 if (port->isInput() && !port->isTriggering()) {
425 dataWidth = std::max((unsigned)port->width(), dataWidth);
426 }
427 }
428 dmem.widthInMaus = static_cast<int>(
429 ceil(static_cast<double>(dataWidth)/dmem.mauWidth));
430 int bytemaskWidth = 0;
431 if (dmem.widthInMaus > 1) {
432 unsigned int maus = static_cast<unsigned int>(dmem.widthInMaus) - 1;
433 bytemaskWidth = MathTools::requiredBits(maus);
434 }
435 dmem.portAddrw = internalAddrw - bytemaskWidth;
436 unsigned long int lastAddr = lsu.addressSpace()->end();
437 dmem.asAddrw = MathTools::requiredBits(lastAddr);
438 dmem.asName = lsu.addressSpace()->name();
439 dmem.lsuName = lsu.name();
440 dmem.isShared = false;
441 return dmem;
442}
443
444bool
446 const ProGe::NetlistBlock& cores, int coreId) {
449 const NetlistPort* coreClk = cores.port(clkPortName);
450 const NetlistPort* coreRstx = cores.port(resetPortName);
451 integratorBlock()->netlist().connect(*clockPort(), *coreClk);
452 integratorBlock()->netlist().connect(*resetPort(), *coreRstx);
453
454 if (!createMemories(coreId)) {
455 return false;
456 }
457
459
460 return true;
461}
462
463void
465 const NetlistBlock& core = progeBlock();
466 for (size_t i = 0; i < core.portCount(); i++) {
467 const NetlistPort& port = core.port(i);
468 if (!integratorBlock()->netlist().isPortConnected(port)) {
470 }
471 }
472}
473
474void
476 const ProGe::NetlistPort& corePort, const TCEString signalPrefix) {
477 TCEString toplevelName = corePort.name();
478 if (chopTaggedSignals() && hasPinTag(toplevelName)) {
479 toplevelName = signalPrefix + chopSignalToTag(toplevelName, pinTag());
480 }
481 NetlistPort* topPort = NULL;
482 if (corePort.realWidthAvailable()) {
483 int width = corePort.realWidth();
484 if (width == 0 || width == 1) {
485 topPort = new NetlistPort(
486 toplevelName, corePort.widthFormula(), corePort.realWidth(),
487 ProGe::BIT, corePort.direction(), *integratorBlock());
488 } else {
489 topPort = new NetlistPort(
490 toplevelName, corePort.widthFormula(), corePort.realWidth(),
492 }
493 } else {
494 topPort = new NetlistPort(
495 toplevelName, corePort.widthFormula(), corePort.dataType(),
496 corePort.direction(), *integratorBlock());
497 }
498 if (topPort->dataType() == corePort.dataType()) {
499 integratorBlock()->netlist().connect(*topPort, corePort);
500 } else {
501 integratorBlock()->netlist().connect(*topPort, corePort, 0, 0, 1);
502 }
503}
504
505bool
507
508 return signal.find(pinTag()) != TCEString::npos;
509}
510
511
512void
514 const ProGe::NetlistBlock* progeBlock) {
518
519 // copy parameters to the current toplevel
520 for (size_t i = 0; i < ttaCores_->parameterCount(); i++) {
521 // Filter out some parameters not usable in the integrator block.
522 if (ttaCores_->parameter(i).name() == "core_id") {
523 continue;
524 }
525
527 }
528
529 // copy package references to the current toplevel
530 for (size_t i = 0; i < ttaCores_->packageCount(); i++) {
532 }
533
534 for (size_t i = 0; i < ttaCores_->netlist().parameterCount(); i++) {
536 }
537}
538
539
542 assert(ttaCores_ != NULL);
543 return *ttaCores_;
544}
545
546
551
552bool
555
556 int imemIndex = 0;
557 MemoryGenerator& imemGen = imemInstance(imem_, coreId);
558 vector<TCEString> imemFiles;
559
560 if (imem_.type != NONE) {
561 if (!generateMemory(imemGen, imemFiles, imemIndex, coreId)) {
562 return false;
563 }
564 if (imemFiles.size() != 0) {
565 projectFileGenerator()->addHdlFiles(imemFiles);
566 }
567 }
568
569 for (unsigned int i = 0; i < lsus_.size(); i++) {
570 TTAMachine::FunctionUnit* lsuArch = lsus_.at(i);
571 std::vector<std::string> ports = loadFUExternalPorts(*lsuArch);
572
573 TTAMachine::AddressSpace* as = lsuArch->addressSpace();
574 assert(dmem_.find(as) != dmem_.end() && "Address space not found!");
575
576 MemoryGenerator& dmemGen =
577 dmemInstance(dmem_.find(as)->second, *lsuArch, ports);
578 vector<TCEString> dmemFiles;
579 if (!generateMemory(dmemGen, dmemFiles, i, coreId)) {
580 return false;
581 }
582 if (dmemFiles.size() != 0) {
583 projectFileGenerator()->addHdlFiles(dmemFiles);
584 }
585 }
586 return true;
587}
588
589bool
591 MemoryGenerator& memGen, std::vector<TCEString>& generatedFiles,
592 int memIndex, int coreId) {
593 const NetlistBlock& ttaCores = progeBlock();
594
595 vector<TCEString> reasons;
596 if (!memGen.isCompatible(ttaCores, coreId, reasons)) {
597 errorStream() << "TTA core doesn't have compatible memory "
598 <<"interface:" << std::endl;
599 for (unsigned int i = 0; i < reasons.size(); i++) {
600 errorStream() << reasons.at(i) << std::endl;
601 }
602 return false;
603 }
604
605 memGen.addMemory(ttaCores, *integratorBlock(), memIndex, coreId);
606
607 if (memGen.generatesComponentHdlFile()) {
608 generatedFiles =
610 if (generatedFiles.size() == 0) {
611 errorStream() << "Failed to create mem component" << endl;
612 return false;
613 }
614 }
615
616 return true;
617}
618
619void
621
622 ProGe::NetlistWriter* writer;
623 if (hdl_ == ProGe::VHDL) {
625 } else {
626 assert(false);
627 }
628
629 TCEString platformDir = outputPath();
630 writer->write(platformDir);
631 delete writer;
632
633
634 TCEString toplevelFile =
635 outputFilePath(coreEntityName() + "_toplevel.vhdl");
636 if (!FileSystem::fileExists(toplevelFile)) {
637 TCEString msg = "NetlistWriter failed to create file " + toplevelFile;
638 throw FileNotFound(__FILE__, __LINE__, "platformIntegrator", msg);
639 }
640 projectFileGenerator()->addHdlFile(toplevelFile);
641
642 TCEString paramFile =
643 outputFilePath(platformEntityName() + "_params_pkg.vhdl");
644 if (FileSystem::fileExists(paramFile)) {
645 projectFileGenerator()->addHdlFile(paramFile);
646 }
647}
648
649
650void
652
653 vector<TCEString> progeOutFiles;
654 progeOutputHdlFiles(progeOutFiles);
655 for (unsigned int i = 0; i < progeOutFiles.size(); i++) {
656 projectFileGenerator()->addHdlFile(progeOutFiles.at(i));
657 }
658}
659
660
661const MemInfo&
663
664 return imem_;
665}
666
667const MemInfo&
669
670 if (as == NULL || dmem_.find(as) == dmem_.end()) {
671 TCEString msg = "Invalid address space";
672 throw InvalidData(__FILE__, __LINE__, "PlatformIntegrator", msg);
673 }
674 return dmem_.find(as)->second;
675}
676
677const MemInfo&
679
680 if (index > static_cast<int>(dmem_.size())) {
681 TCEString msg = "Data memory index out of range";
682 throw OutOfRange(__FILE__, __LINE__, "PlatformIntegrator", msg);
683 }
684 std::map<TTAMachine::AddressSpace*, MemInfo>::const_iterator iter =
685 dmem_.begin();
686 int i = 0;
687 while (i < index) {
688 iter++;
689 i++;
690 }
691 assert(iter != dmem_.end());
692 return iter->second;
693}
694
695int
697
698 return dmem_.size();
699}
700
701
704
705 if (clkPort_ == NULL) {
706 TCEString msg;
707 msg << "PlatformIntegrator was not initialized properly";
708 throw ObjectNotInitialized(__FILE__, __LINE__, __func__, msg);
709 }
710 return clkPort_;
711}
712
713
716
717 if (resetPort_ == NULL) {
718 TCEString msg;
719 msg << "PlatformIntegrator was not initialized properly";
720 throw ObjectNotInitialized(__FILE__, __LINE__, __func__, msg);
721 }
722 return resetPort_;
723}
#define __func__
#define assert(condition)
IDF::MachineImplementation * implementation
the implementation definition of the estimated processor
TTAMachine::Machine * machine
the architecture definition of the estimated processor
@ UNKNOWN
@ NONE
std::string errorMessage() const
Definition Exception.cc:123
static std::string absolutePathOf(const std::string &pathName)
static bool createDirectory(const std::string &path)
static const std::string DIRECTORY_SEPARATOR
static std::vector< std::string > directoryContents(const std::string &directory, const bool absolutePaths=true)
static bool fileExists(const std::string fileName)
FUImplementation & implementation() const
Definition FUEntry.cc:86
virtual bool hasImplementation() const
Definition FUEntry.cc:74
FUEntry * fuByEntryID(RowID id) const
static HDBRegistry & instance()
CachedHDBManager & hdb(const std::string fileName)
FUImplementationLocation & fuImplementation(const std::string &fu) const
static int requiredBits(unsigned long int number)
virtual std::vector< TCEString > generateComponentFile(TCEString outputPath)=0
virtual bool generatesComponentHdlFile() const =0
virtual void addMemory(const ProGe::NetlistBlock &ttaCore, ProGe::NetlistBlock &integratorBlock, int memIndex, int coreId)
virtual bool isCompatible(const ProGe::NetlistBlock &ttaCore, int coreId, std::vector< TCEString > &reasons) const
ProGe::NetlistPort * resetPort() const
virtual void initPlatformNetlist(const ProGe::NetlistBlock *progeBlock)
virtual MemoryGenerator & imemInstance(MemInfo imem, int coreId)=0
const ProGe::NetlistBlock & toplevelBlock() const
const MemInfo & dmemInfo(TTAMachine::AddressSpace *as) const
ProGe::NetlistPort * clockPort() const
virtual void exportUnconnectedPorts(int coreId)
TCEString platformEntityName() const
ProGe::NetlistBlock * integratorBlock_
virtual bool chopTaggedSignals() const =0
const TTAMachine::Machine * machine() const
TCEString chopSignalToTag(const TCEString &original, const TCEString &tag) const
static const TCEString TTA_CORE_CLK
std::ostream & warningStream_
std::ostream & warningStream() const
virtual void connectToplevelPort(const ProGe::NetlistPort &corePort, const TCEString signalPrefix="")
ProGe::NetlistBlock * ttaCores_
const IDF::MachineImplementation * idf() const
std::ostream & errorStream_
virtual int targetClockFrequency() const
TCEString tbFilePath(TCEString fileName, bool absolute=false) const
const IDF::MachineImplementation * idf_
ProGe::NetlistPort * clkPort_
MemInfo readLsuParameters(const TTAMachine::FunctionUnit &lsu)
static const TCEString TTA_CORE_RSTX
TCEString programName() const
const MemInfo & imemInfo() const
void setSharedOutputDir(const TCEString &sharedDir)
std::ostream & errorStream() const
ProGe::NetlistBlock * integratorBlock()
virtual bool integrateCore(const ProGe::NetlistBlock &cores, int coreId)
void copyProgeBlockToNetlist(const ProGe::NetlistBlock *progeBlock)
const TTAMachine::Machine * machine_
const ProGe::NetlistBlock & progeBlock() const
virtual TCEString pinTag() const =0
virtual bool createMemories(int coreId)
TCEString progeFilePath(TCEString fileName, bool absolute=false) const
virtual MemoryGenerator & dmemInstance(MemInfo dmem, TTAMachine::FunctionUnit &lsuArch, std::vector< std::string > lsuPorts)=0
TCEString outputPath() const
virtual void writeNewToplevel()
TCEString outputFilePath(TCEString fileName, bool absolute=false) const
virtual ProjectFileGenerator * projectFileGenerator() const =0
std::vector< std::string > loadFUExternalPorts(TTAMachine::FunctionUnit &fu) const
ProGe::NetlistPort * resetPort_
TCEString coreEntityName() const
std::vector< TTAMachine::FunctionUnit * > lsus_
virtual bool hasPinTag(const TCEString &signal) const
void progeOutputHdlFiles(std::vector< TCEString > &files) const
virtual bool generateMemory(MemoryGenerator &memGen, std::vector< TCEString > &generatedFiles, int memIndex, int coreId)
std::map< TTAMachine::AddressSpace *, MemInfo > dmem_
virtual size_t parameterCount() const
NetlistBlock * shallowCopy(const std::string &instanceName) const
virtual size_t packageCount() const
virtual const Parameter & parameter(const std::string &name) const
void addSubBlock(BaseNetlistBlock *subBlock, const std::string &instanceName="")
virtual const std::string & package(size_t idx) const
void setParameter(const std::string &name, const std::string &type, const std::string &value)
virtual NetlistPort * port(const std::string &portName, bool partialMatch=true)
virtual size_t portCount() const
void addPackage(const std::string &packageName)
virtual const Netlist & netlist() const
bool realWidthAvailable() const
std::string widthFormula() const
DataType dataType() const
Direction direction() const
std::string name() const
int realWidth() const
virtual void write(const std::string &dstDirectory)=0
bool connect(const NetlistPort &port1, const NetlistPort &port2, int port1FirstBit, int port2FirstBit, int width=1)
Definition Netlist.cc:83
void setParameter(const std::string &name, const std::string &type, const std::string &value)
Definition Netlist.cc:362
Parameter parameter(size_t index) const
Definition Netlist.cc:434
const TCEString & name() const
Definition Parameter.cc:133
void addHdlFiles(const std::vector< TCEString > &files)
void addHdlFile(const TCEString &file)
static std::string trim(const std::string &source)
virtual ULongWord end() const
virtual int width() const
virtual int width() const
virtual TCEString name() const
virtual bool isTriggering() const
Definition FUPort.cc:182
virtual AddressSpace * addressSpace() const
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const
virtual FUPort * operationPort(const std::string &name) const
virtual int operationPortCount() const
virtual bool hasAddressSpace() const
const std::string & name() const
ComponentType * item(int index) const
virtual FunctionUnitNavigator functionUnitNavigator() const
Definition Machine.cc:380
virtual bool isInput() const
Definition Port.cc:298
Definition FUGen.hh:54
@ BIT
One bit.
Definition ProGeTypes.hh:47
@ BIT_VECTOR
Several bits.
Definition ProGeTypes.hh:48
@ IN
Input port.
Definition ProGeTypes.hh:53
HDL
HDLs supported by ProGe.
Definition ProGeTypes.hh:40
@ VHDL
VHDL.
Definition ProGeTypes.hh:41
MemType type
TCEString lsuName
TCEString asName