X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/4cf57e6db08da791233d75237f62e74bc88dd427..3bcfe4df6fdde086eb1b59f7a0173358170174a1:/AbstractBlock.h

diff --git a/AbstractBlock.h b/AbstractBlock.h
index 80e0413..fe3f90e 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,7 +33,7 @@ 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();
@@ -56,6 +59,19 @@ public:
   bool isWBConfigurable();
 
   // others
+
+  /*!
+   * \brief connectClkReset connects the clock and reset inputs to a clkrstgen block or the the group ifaces
+   * \param idBlockClk is the id of the clock interface (there may be severals)
+   * \param idGen is the id of the clkrstgen block
+  */
+  void connectClock(QString clkName, int idGen = 0) throw(Exception);
+  void connectReset(QString rstName, int idGen = 0) 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);
@@ -98,6 +114,13 @@ protected:
   
   // 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__