X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/48f48e6a26a54751ecd0ab90b10ab972cc5e89cd..6ca6321283b9c93a6df9dcd5216bfa01df9ad24b:/AbstractBlock.h

diff --git a/AbstractBlock.h b/AbstractBlock.h
index 9216212..0ca5536 100644
--- a/AbstractBlock.h
+++ b/AbstractBlock.h
@@ -4,6 +4,7 @@
 #include <iostream>
 
 #include <QtCore>
+#include <QtXml>
 
 #include "AbstractInterface.h"
 class AbstractInterface;
@@ -20,8 +21,10 @@ class AbstractBlock {
 
 public:  
       
+  enum BlockVHDLContext {AnyContext = 0, Entity = 1, Component = 2, Architecture = 3 }; // NB : 3 is when creating an instance of the block that owns this iface
+
   AbstractBlock();
-  AbstractBlock(const QString& _name);
+  //AbstractBlock(const QString& _name);
   virtual ~AbstractBlock();
 
   // getters
@@ -30,18 +33,21 @@ public:
   inline QList<BlockParameter *> getParameters() { return params; }
   inline QList<AbstractInterface*> getInputs() { return inputs; }
   inline QList<AbstractInterface*> getOutputs() { return outputs; }
-  inline QList<AbstractInterface*> getBidirs() { return bidirs; }
+  inline QList<AbstractInterface*> getBidirs() { return bidirs; }  
   QList<BlockParameter *> getUserParameters();
   QList<BlockParameter *> getGenericParameters();
   QList<BlockParameter *> getPortParameters();
   QList<BlockParameter *> getWishboneParameters();
   inline AbstractBlock* getParent() { return parent; }
   inline bool getPatternComputed() { return patternComputed; }
+  inline int getTraversalLevel() { return traversalLevel; }
   
   // setters
   void setName(const QString& str);
   virtual void setParent(AbstractBlock* _parent);
   inline void setPatternComputed(bool state) { patternComputed = state; }
+  inline void resetTraversalLevel() { traversalLevel = -1; }
+  inline void setTraversalLevel(int level) { traversalLevel = level; }
 
   // testers
   virtual bool isReferenceBlock();
@@ -53,6 +59,12 @@ public:
   bool isWBConfigurable();
 
   // others
+  void connectClkReset() throw(Exception);  
+  virtual QList<QString> getExternalResources() = 0; // returns the list of all external files needed for VHDL generation
+  virtual void generateVHDL(const QString& path) throw(Exception) = 0; // main entry to generate the VHDL code
+  void generateComponent(QTextStream& out, bool hasController=false) throw(Exception); // generate the component using reference
+  void generateEntity(QTextStream& out, bool hasController=false) throw(Exception); // generate the entity using reference
+
   virtual void parametersValidation(QList<AbstractBlock*>* checkedBlocks, QList<AbstractBlock*>* blocksToConfigure) = 0; // ugly but usefull   
 
   void addParameter(BlockParameter *param);
@@ -70,7 +82,9 @@ public:
   BlockParameter* getParameterFromName(QString name);
 
   // patterns
-  virtual bool computeOutputPattern(int nbExec = -1) = 0;
+  virtual void checkInputPatternCompatibility() throw(Exception) = 0;
+  virtual void computeOutputPattern(int nbExec = -1) throw(Exception) = 0;
+  virtual void computeAdmittanceDelays() throw(Exception) = 0;
   
 protected:
 
@@ -89,9 +103,17 @@ protected:
   
   // patterns  
   bool patternComputed;
+  int traversalLevel; // the level (0, 1, ...) during the traversal of the graph
   
   // NB: only GroupBlock and FunctionalBlock have a real parent, except sources that have no parents
   AbstractBlock* parent;
+
+  virtual void generateComments(QTextStream& out, QDomElement &elt, QString coreFile) throw(Exception) = 0; // generates comments from <comments> element
+  virtual void generateLibraries(QTextStream& out, QDomElement &elt) throw(Exception) = 0; // generates libraries from <libraries> element  
+  virtual void generateArchitecture(QTextStream& out, QDomElement &elt ) throw(Exception) = 0; // generate the architecture using <architecture> element
+  virtual void generateController(QTextStream& out) throw(Exception) = 0; // generate the wishbone controller of the block
+  virtual void generateEntityOrComponentBody(QTextStream& out, int indentLevel, bool hasController=false) throw(Exception) = 0; // generate the entity/compo body using reference
+
 };
 
 #endif // __ABSTRACTBLOCK_H__