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

Private GIT Repository
begun integration of control ifaces
authorstephane Domas <stephane.domas@univ-fcomte.fr>
Thu, 4 May 2017 15:29:33 +0000 (17:29 +0200)
committerstephane Domas <stephane.domas@univ-fcomte.fr>
Thu, 4 May 2017 15:29:33 +0000 (17:29 +0200)
AbstractInterface.h
BlockParameter.h
ConnectedInterface.h
ReferenceBlock.cpp
ReferenceBlock.h
blast.creator.user
lib/README.txt
lib/implementations/average-Nx3_impl.xml
lib/references/average-Nx3.xml
lib/references/references.bmf
reference.xsd

index 608d04ca8e8867bc273769cb73069ed1de7a3178..5c0b83aa22287b72ea15e1379f76e5f806c46e8f 100644 (file)
@@ -24,7 +24,7 @@ class AbstractInterface {
 public :
 
   enum IfaceWidthType { Expression = 1, Boolean, Natural};
-  enum IfacePurpose { Data = 1, Clock = 2, Reset = 3, Wishbone = 4 };
+  enum IfacePurpose { Data = 1, Control, Clock, Reset, Wishbone };
   enum IfaceDirection { Input = 1, Output = 2, InOut = 3 };  
   enum IfaceVHDLContext { Entity = 1, Component = 2, Architecture = 3 }; // NB : 3 is when creating an instance of the block that owns this iface
   enum IfaceVHDLFlags { NoComma = 1 };
index e0c4af2fa7b7590e020bf62e25fc2d4718043286..adc8c5d15192f39ae72568a9356d96a4083e8fe8 100644 (file)
@@ -19,6 +19,15 @@ public :
 \r
   enum ParamType { Expression = 1, Character, String, Bit, BitVector, Boolean, Integer, Natural, Positive, Real, Time};\r
   // a bit ugly to put that here but more practical for using them\r
+  /*!\r
+   * \brief The ParamWBAccess enum\r
+   * Read means that the block setup the value of this parameter and it is possible to \r
+   * to read that value from outside the FPGA (via the wrapper of the wishbone). Thus,\r
+   * from the block point of view, the parameter corresponds to an output port.\r
+   * Write means that it is possible to setup the value of this paramter from outside the FPGA (via\r
+   * the wrapper of the wishbone) so that the block can read that value.  Thus,\r
+   * from the block point of view, the parameter corresponds to an input port.\r
+   */\r
   enum ParamWBAccess { Read = 1, Write = 2};\r
   enum ParamWBDuration { Permanent = 1, Trigger = 2 };\r
   enum ParamVHDLContext { Entity = 1, Component = 2, Architecture = 3 }; // NB : 3 is when creating an instance of the block that owns this iface\r
index a8ce4de7861bda09abe777c8e0fc8948975c6b49..3a1fb4f698b25bbf8141b0e4869c0c4de2f7090c 100644 (file)
@@ -14,7 +14,10 @@ class ReferenceInterface;
 using namespace std;
 using namespace Qt;
 
-
+/*!
+ * \brief The ConnectedInterface class represents an interface of block (functional or group) that may be connected from/to other interfaces
+ * A ConnectedInterface is used to establish connection between blocks.
+ */
 class ConnectedInterface : public AbstractInterface {
 
 public :
@@ -33,14 +36,13 @@ public :
   virtual bool canConnectTo(AbstractInterface* iface) = 0;
   virtual bool canConnectFrom(AbstractInterface* iface) = 0;
 
-  // others
+  // others  
   bool connectTo(ConnectedInterface* iface);
   bool connectFrom(ConnectedInterface* iface);
   ConnectedInterface* getConnectionToParentGroup();
   ConnectedInterface* getConnectionFromParentGroup();
 
-  virtual AbstractInterface *clone() = 0;
-
+  virtual AbstractInterface *clone() = 0;  
   void removeConnectedTo(ConnectedInterface *inter);
 
   virtual void clearConnectedTo();
@@ -49,9 +51,29 @@ public :
   //virtual void connectionsValidation(QStack<AbstractInterface*> *interfacetoValidate, QList<AbstractInterface*> *validatedInterfaces) throw(Exception) = 0;  
 
 protected:
+  /*!
+   * \brief connectedTo lists of connections to interfaces owned by other blocks (functional or group)
+   * Since the graph is oriented, and taking into account it modles a FPGA desing,
+   * this interface may be connected to several interfaces owned by other blocks (functional or group).
+   * connectedTo references such interfaces if they exist.
+   */
   QList<ConnectedInterface*> connectedTo;
+  /*!
+   * \brief connectedFrom connection from an interface owned by another blocks (functional or group)
+   * Since the graph is oriented, and taking into account it modles a FPGA desing,
+   * there may be a single interface owned by another block (functional or group) that is connected to
+   * this interface. connecteFrom references such an interface if it exists.
+   */
   ConnectedInterface* connectedFrom;
-
+  /*!
+   * \brief associatedIface the control (resp. data) interface that is bounded to this data (resp. control) interface
+   * If a reference block is designed to be fully integrated in Blast, nearly every data interface is bounded
+   * to a control interface that signals if the value presented on the interface is valid or not. associatedIface
+   * references this control interface if this is a data interface, and a data interface is this is a control interface.
+   * Note that the association is done by the call of setAssociatedIface() that must be done only for a control interface.
+   * (NB: a test is done in the method to prevent the other case).
+   */
+  ConnectedInterface* associatedIface;
 };
 
 
index 93f7c41c3f1a40fdb07c970bbbc169540804c681..a0a8220d297e10043a7a4d975999e4676f0419e1 100644 (file)
@@ -68,6 +68,14 @@ void ReferenceBlock::load(QDomElement &elt) throw(Exception) {
   try {
     loadInterfaces(eltInter);
   }
+  catch(int err) {
+    throw(err);
+  }
+
+  // create interfaces that correspond to a wishbone parameter, if any.
+  try {
+    createInterfaceForParameters();    
+  }
   catch(int err) {
     throw(err);
   }  
@@ -265,8 +273,27 @@ void ReferenceBlock::loadInterfaces(QDomElement &elt) throw(Exception) {
   }
 }
 
-void ReferenceBlock::parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock *> *blocksToConfigure)
-{
+void ReferenceBlock::createInterfaceForParameters() throw(Exception){
+  ReferenceInterface* iface = NULL;
+  foreach(BlockParameter* param, params) {
+    
+    if (param->isWishboneParameter()) {
+      BlockParameterWishbone* p = (BlockParameterWishbone*)param;
+      int orientation = -1;
+      if (p->getWBAccess() == BlockParameter::Read) {
+        iface = new ReferenceInterface(this,p->getName(),p->getType(),p->getWidth(), AbstractInterface::Output, AbstractInterface::Wishbone,1);
+        outputs.append(iface);        
+      }
+      else if (p->getWBAccess() == BlockParameter::Write) {
+        iface = new ReferenceInterface(this,p->getName(),p->getType(),p->getWidth(), AbstractInterface::Input, AbstractInterface::Wishbone,1);
+        inputs.append(iface);                
+      }
+      ReferenceInterface* iface = new ReferenceInterface(this,p->getName(),p->getType(),p->getWidth(), orientation, AbstractInterface::Wishbone,1);
+    }
+  }
+}
+
+void ReferenceBlock::parametersValidation(QList<AbstractBlock *> *checkedBlocks, QList<AbstractBlock *> *blocksToConfigure) {
     return;
 }
 
index 324e2890d234ba7666f5cdea5a70e749ff77c4c5..ebd46c93d4f07d644105a169eafa1024531c271d 100644 (file)
@@ -56,6 +56,7 @@ private:
   void loadInformations(QDomElement &elt) throw(Exception);
   void loadParameters(QDomElement &elt) throw(Exception);
   void loadInterfaces(QDomElement &elt) throw(Exception);
+  void createInterfaceForParameters() throw(Exception);
 
   friend QDataStream &operator<<(QDataStream &out, const ReferenceBlock &b);
   friend QDataStream &operator>>(QDataStream &in, ReferenceBlock &b);
index c87af5669790d79df0039e777bb87114da87943c..5ea7a3a40ba8926476f7c96672539d13287d3ab6 100755 (executable)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.2.1, 2017-05-03T17:42:11. -->
+<!-- Written by QtCreator 3.2.1, 2017-05-04T17:29:00. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -19,7 +19,7 @@
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
     <value type="QString" key="language">Cpp</value>
     <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+     <value type="QByteArray" key="CurrentPreferences">qt2</value>
     </valuemap>
    </valuemap>
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
@@ -31,7 +31,7 @@
    <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
    <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
    <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
-   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="int" key="EditorConfiguration.IndentSize">2</value>
    <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
    <value type="int" key="EditorConfiguration.MarginColumn">80</value>
    <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
    <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
    <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
    <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
-   <value type="int" key="EditorConfiguration.TabSize">8</value>
-   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.TabSize">4</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">false</value>
    <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
    <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
    <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
-   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">false</value>
    <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
   </valuemap>
  </data>
index 225b83efc2b9c5c62b075a07fd44373b79a700ab..85c9ae371f725b365186f1404d0215a39be2d8ed 100644 (file)
@@ -7,7 +7,7 @@ XML description of a block model :
   - type : required
   - value : required if context = constant/generic, optionnal if context = wb, optional but not used if context = user/port
   - context : required
-  - core : required if context = wb, not used for others. Possibles values : r or w. Specify if the parameter will be a register
+  - wishbone : required if context = wb, not used for others. Possibles values : r or w,keep_value,type_init. Specify if the parameter will be a register
     that is read by the core, i.e. an input port of the core, or written by the core.
 
 <inputs>, <outputs> attributes :
index e74de0fb7b6a0708fa636b6579df6a1920e69026..1ea7a7fa282790fced1128b42c1a5d77d216e878 100644 (file)
@@ -29,7 +29,7 @@
       <input name="data_i" pattern="(1){$nb_data}" />
     </consumption>
     <production>
-      <output name="data_o" pattern="00{$nb_data}" counter="{2,$nb_data+2}"/>
+      <output name="data_o" pattern="00{$nb_data}" counter="{2:$nb_data+2:1}"/>
     </production>
   </patterns>
 </block_impl>
index 76893224ba537df7c86626928611a43966fc233a..b10330539b5af9277d093e00185c8a6f1b0a82f8 100644 (file)
     <inputs>\r
       <input name="clk" type="boolean" width="1" purpose="clock" />\r
       <input name="rst" type="boolean" width="1" purpose="reset" />\r
-      \r
       <input name="data_i" type="expression" width="$data_width" />\r
+      <control iface="data_i" />\r
     </inputs>\r
     <outputs>\r
       <output name="data_o" type="expression" width="$data_width" multiplicity="1"/>\r
+      <control iface="data_o" />\r
     </outputs>    \r
   </interfaces>\r
 \r
index 8108f615bc6545a56f3ed5a5f83de9044ece639e..9bc3ec7bc6825962deb0dcc9e809f0036b5d4f69 100644 (file)
Binary files a/lib/references/references.bmf and b/lib/references/references.bmf differ
index a5c2c2d0c612e32eaae9e8e361e4bc9be592d0c7..3fa3faaf4f4119ea85c2e356272e8a62f3ea2040 100644 (file)
@@ -7,7 +7,6 @@
        <xs:attribute ref="name" use="required"/>
        <xs:attribute ref="type" use="required"/>
        <xs:attribute ref="wishbone" use="optional"/>
-       <xs:attribute ref="core" use="optional"/>
        <xs:attribute ref="value" use="optional"/>
        <xs:attribute ref="iface" use="optional"/>
        <xs:attribute ref="width" use="optional"/>      
@@ -28,7 +27,6 @@
     <xs:attribute name="ids" type="xs:string"/>
     <xs:attribute name="name" type="xs:string"/>
     <xs:attribute name="type" type="xs:string"/>
-    <xs:attribute name="core" type="xs:string"/>
     <xs:attribute name="wishbone" type="xs:string"/>
     <xs:attribute name="context" type="xs:string" />
     <xs:attribute name="multiplicity" type="xs:string" />
        </xs:complexType>
     </xs:element>
 
+    <xs:element name="control">
+       <xs:complexType>
+           <xs:attribute ref="iface"/>
+       </xs:complexType>
+    </xs:element>
+
     <xs:element name="inputs">
        <xs:complexType>
            <xs:sequence>
-               <xs:element ref="input" maxOccurs="unbounded" />
+             <xs:element ref="input" maxOccurs="unbounded" />
+             <xs:element ref="control" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
     </xs:element>
     <xs:element name="outputs">
        <xs:complexType>
            <xs:sequence>
-               <xs:element ref="output" maxOccurs="unbounded" />
+             <xs:element ref="output" maxOccurs="unbounded" />
+             <xs:element ref="control" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
     </xs:element>