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

Private GIT Repository
clkconvert OP compute done
[blast.git] / FunctionalInterface.cpp
index 7d1217a88a31bec7c76f89fca1632e432ec0f16f..55f65ec48c076bb01ece044e5a35594c4e416245 100644 (file)
@@ -90,7 +90,7 @@ bool FunctionalInterface::canConnectTo(AbstractInterface *iface) {
         - iface type must be functional or group interface\r
         - iface->connectedFrom must be NULL\r
 \r
-     valid cases:\r
+     valid "normal" cases:\r
      1 - iface is owned by a block (group or func) that is within the same group as the block that own this\r
         1.1 - this is output and iface is input\r
         1.2 - both are inout\r
@@ -99,11 +99,21 @@ bool FunctionalInterface::canConnectTo(AbstractInterface *iface) {
         2.2 - both are inout\r
      3 - this is owned by a source block and iface is owned by the top group\r
 \r
+     special case : clk/reset from clkrstgen can connect to stimuli clk/reset\r
+\r
   */\r
   if (direction == Input) return false;\r
   if (iface->isReferenceInterface()) return false;\r
   ConnectedInterface* connIface = AI_TO_CON(iface);\r
   if (connIface->getConnectedFrom() != NULL) return false;\r
+  // special case\r
+  if ((getOwner()->getName().startsWith("clkrstgen")) && (iface->getOwner()->isStimuliBlock())) {\r
+    if ((direction == Output) && (iface->getDirection() == Input)) {\r
+      if ((purpose == AbstractInterface::Clock) && (iface->getPurpose() == AbstractInterface::Clock)) return true;\r
+      else if ((purpose == AbstractInterface::Reset) && (iface->getPurpose() == AbstractInterface::Reset)) return true;\r
+    }\r
+  }\r
+\r
   // first case: interface of blocks within the same group\r
   if (getOwner()->getParent() == iface->getOwner()->getParent()) {\r
 \r
@@ -138,11 +148,21 @@ bool FunctionalInterface::canConnectFrom(AbstractInterface *iface) {
      2 - iface is owned by the parent group of the block that owns this\r
         2.1 - this is an input, iface is an input of the group\r
         2.2 - both are inout\r
+\r
+     special case : clk/reset of stimuli can connect from clk/reset of clkrstgen\r
   */\r
   if (direction == Output) return false;\r
   if (iface->isReferenceInterface()) return false;\r
   if (connectedFrom != NULL) return false;\r
 \r
+  // special case\r
+  if ((iface->getOwner()->getName().startsWith("clkrstgen")) && (getOwner()->isStimuliBlock())) {\r
+    if ((direction == Input) && (iface->getDirection() == Output)) {\r
+      if ((purpose == AbstractInterface::Clock) && (iface->getPurpose() == AbstractInterface::Clock)) return true;\r
+      else if ((purpose == AbstractInterface::Reset) && (iface->getPurpose() == AbstractInterface::Reset)) return true;\r
+    }\r
+  }\r
+\r
   if (getOwner()->getParent() == iface->getOwner()->getParent()) {\r
 \r
     if ((direction == Input) && (iface->getDirection() == Output) && (purpose == iface->getPurpose())) return true;\r