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

Private GIT Repository
finished conn mode of library
[blast.git] / GroupBlock.cpp
index ea7f2f7e7b7cc01c8709df86a557162f835e098b..fda0546ed12ff4fb57417ced4dbc4e8d46f948e4 100644 (file)
@@ -12,41 +12,42 @@ int GroupBlock::counter = 1;
 
 GroupBlock::GroupBlock(GroupBlock *_parent, bool createIfaces) throw(Exception) :  AbstractBlock() {
 
+  parent = _parent;
   GroupInterface* clk = NULL;
   GroupInterface* rst = NULL;
   
   // force topGroup to false if this group has a parent
-  if (_parent != NULL) {
+  if (parent != NULL) {
     topGroup = false;
     name = QString("sub_group")+"_"+QString::number(counter++);
-    // creating clk/rst interfaces
-    clk = new GroupInterface(this,"clk", AbstractInterface::Input, AbstractInterface::Clock);
-    rst = new GroupInterface(this,"reset", AbstractInterface::Input, AbstractInterface::Reset);
-    addInterface(clk);    
-    addInterface(rst);
-
-    try {
-      connectClkReset();
-    }
-    catch(Exception e) {
-      AbstractBlock* source = (AbstractBlock *)(e.getSource());
-      cerr << qPrintable(source->getName()) << ":" << qPrintable(e.getMessage()) << endl;
-      throw(e);
-    }
   }
   else {
     topGroup = true;
     name = QString("top_group");
     // creating external clk/rst interfaces
-    clk = new GroupInterface(this,"ext_clk", AbstractInterface::Input, AbstractInterface::Clock);
-    rst = new GroupInterface(this,"ext_reset", AbstractInterface::Input, AbstractInterface::Reset);
-    addInterface(clk);
-    addInterface(rst);
-    // creating clkrstgen block and connecting it to this: done in Dispatcher since this has no access to library
-    cout << "created ext_clk and reset ifaces for top group" << endl;
   }
-  parent = _parent;
 
+  if (createIfaces) {
+    if (topGroup) {
+      clk = new GroupInterface(this,"ext_clk_0", AbstractInterface::Input, AbstractInterface::Clock);
+      rst = new GroupInterface(this,"ext_reset_0", AbstractInterface::Input, AbstractInterface::Reset);
+      addInterface(clk);
+      addInterface(rst);
+    }
+    else {
+      // get all clock and reset from parent
+      QList<AbstractInterface*> lstClk = parent->getInterfaces(AbstractInterface::Input, AbstractInterface::Clock);
+      QList<AbstractInterface*> lstRst = parent->getInterfaces(AbstractInterface::Input, AbstractInterface::Reset);
+      foreach(AbstractInterface* iface, lstClk) {
+        clk = new GroupInterface(this,iface->getName(),AbstractInterface::Input, AbstractInterface::Clock);
+        addInterface(clk);
+      }
+      foreach(AbstractInterface* iface, lstRst) {
+        rst = new GroupInterface(this,iface->getName(),AbstractInterface::Input, AbstractInterface::Reset);
+        addInterface(rst);
+      }
+    }
+  }
 }
 
 GroupBlock::~GroupBlock() {