]> AND Private Git Repository - blast.git/blob - GroupBlock.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
nearly finished GroupBlock VHDL gen
[blast.git] / GroupBlock.h
1 #ifndef __GROUPBLOCK_H__
2 #define __GROUPBLOCK_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7
8 #include "AbstractBlock.h"
9 class AbstractBlock;
10 #include "Exception.h"
11 class Exception;
12
13 using namespace std;
14 using namespace Qt;
15
16
17 class GroupBlock : public AbstractBlock {
18 public:
19
20   GroupBlock(GroupBlock* _parent) throw(Exception);
21   virtual ~GroupBlock();
22
23   // getters
24   inline QList<AbstractBlock*> getBlocks() { return blocks; }
25   // setters
26   void setParent(AbstractBlock *_parent);
27
28   // testers
29   bool isGroupBlock();
30   bool isTopGroupBlock();
31   inline bool isTop() { return topGroup; }
32
33   // others
34   inline void addBlock(AbstractBlock* block) { blocks.append(block); }
35   void removeBlock(AbstractBlock* block);
36   AbstractBlock* getFunctionalBlockByName(QString name);
37
38   void removeAllBlocks();
39   void parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock*>* blocksToConfigure);  
40   void addGenericParameter(QString name, QString type, QString value);
41   void removeGenericParameter(QString name);
42   // public attributes
43   static int counter;
44
45   void checkInputPatternCompatibility() throw(Exception);
46   void computeOutputPattern(int nbExec = -1) throw(Exception);
47   void computeAdmittanceDelays() throw(Exception);
48   
49   void generateVHDL(const QString& path) throw(Exception); // main entry to generate the VHDL code  
50
51 private:    
52   // patterns  
53   /* NB: in opposition to FunctionalBlock, the input pattern and output pattern of a block
54      is not computed but just deduced from the output pattern of functional interfaces that
55      are connected to some block interfaces. Thus, there is no need to have an outputPattern QMap linking
56      interfaces and patterns as in FunctionalBlock.
57      Thus, the output patterns are directly set/retrieved from interfaces.
58     
59    */
60   /*!
61    * \brief createInputPattern
62    * Since input GroupInterface are just tunnels to input interfaces of inner blocks, they must
63    * have an output pattern that can be provided to inner interfaces. That outpu pattern is just
64    * found by taking the output pattern of the connectedFrom interface.
65    */   
66   void createInputPattern();
67
68   void generateComments(QTextStream& out, QDomElement &elt, QString coreFile) throw(Exception); // generates comments from <comments> element
69   void generateLibraries(QTextStream& out, QDomElement &elt) throw(Exception); // generates libraries from <libraries> element  
70   void generateArchitecture(QTextStream& out, QDomElement &elt ) throw(Exception); // generate the architecture using <architecture> element
71   void generateController(QTextStream& out) throw(Exception); // generate the wishbone controller of the block
72   void generateEntityOrComponentBody(QTextStream& out, int indentLevel, bool hasController=false) throw(Exception); // generate the entity/compo body using reference
73   bool topGroup;  
74   QList<AbstractBlock*> blocks; // contains instances of FunctionalBlock or GroupBlock that are children of this group
75
76 };
77
78 #endif // __GROUPBLOCK_H__