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

Private GIT Repository
moved clocks list to graph
authorstephane Domas <stephane.domas@univ-fcomte.fr>
Thu, 3 May 2018 19:15:04 +0000 (21:15 +0200)
committerstephane Domas <stephane.domas@univ-fcomte.fr>
Thu, 3 May 2018 19:15:04 +0000 (21:15 +0200)
15 files changed:
AbstractInterface.cpp
AbstractInterface.h
BlockLibraryWidget.cpp
Dispatcher.cpp
Dispatcher.h
Graph.cpp
Graph.h
MainWindow.cpp
NewProjectDialog.cpp
Parameters.cpp
Parameters.h
SpecialBlock.cpp
blast.creator.user
lib/implementations/impls.bmf
lib/references/references.bmf

index 3295dc8eb99bde841b9351b1a44575ffc8c57366..d040598b58e3d50ab48added85ba419e2e7fd955 100644 (file)
@@ -5,7 +5,7 @@
 
 AbstractInterface::AbstractInterface(AbstractBlock* _owner) {
 
 
 AbstractInterface::AbstractInterface(AbstractBlock* _owner) {
 
-  owner = _owner;
+  owner = _owner;  
   name = "";
   width = "1";
   direction = Input;
   name = "";
   width = "1";
   direction = Input;
index 8a509fb03bf2b98445affc8d13561dde41c1da1d..1e208bfbbd275e33bc7e8cf6b1b66daae3b2e834 100644 (file)
@@ -91,8 +91,7 @@ protected:
   int direction;
   int type;
   QString width;
   int direction;
   int type;
   QString width;
-  int endianess;
-
+  int endianess;  
 
   AbstractBlock* owner;
   /*!
 
   AbstractBlock* owner;
   /*!
index d80a78ee795a8938d6b0998d5cfa2c763be367ea..32012c552c67f697da54517a5fc7ec097e28ac27 100644 (file)
@@ -1,5 +1,6 @@
 #include "BlockLibraryWidget.h"
 #include "BlockLibraryTree.h"
 #include "BlockLibraryWidget.h"
 #include "BlockLibraryTree.h"
+#include "Graph.h"
 
 BlockLibraryWidget::BlockLibraryWidget(Dispatcher* _dispatcher,
                                        Parameters* _params,
 
 BlockLibraryWidget::BlockLibraryWidget(Dispatcher* _dispatcher,
                                        Parameters* _params,
@@ -31,7 +32,7 @@ BlockLibraryWidget::BlockLibraryWidget(Dispatcher* _dispatcher,
 
 
   QString msg = "Connect to main clock/rst ext_clk/reset_0 (";
 
 
   QString msg = "Connect to main clock/rst ext_clk/reset_0 (";
-  msg += QString::number(params->clocks.at(0));
+  msg += QString::number(params->getGraph()->getClock(0));
   msg += ")";
   radAutoClk = new QRadioButton(msg);
   radChooseClk = new QRadioButton("Choose among available clk/rst");
   msg += ")";
   radAutoClk = new QRadioButton(msg);
   radChooseClk = new QRadioButton("Choose among available clk/rst");
@@ -198,7 +199,7 @@ void BlockLibraryWidget::updateBoxConn() {
     //enableAvailableClocks(true);
   }
   QString msg = "Auto-connect to main clk/rst (ext_clk_0 at ";
     //enableAvailableClocks(true);
   }
   QString msg = "Auto-connect to main clk/rst (ext_clk_0 at ";
-  msg += QString::number(params->clocks.at(0));
+  msg += QString::number(params->getGraph()->getClock(0));
   msg += " MHz)";
   radAutoClk->setText(msg);
 }
   msg += " MHz)";
   radAutoClk->setText(msg);
 }
@@ -243,7 +244,7 @@ void BlockLibraryWidget::updateClkRst(int idCat, int idBlock) {
     comboClkGen[i] = new QComboBox();
     QString name = "";
     int id = 0;
     comboClkGen[i] = new QComboBox();
     QString name = "";
     int id = 0;
-    foreach(double d, params->clocks) {
+    foreach(double d, params->getGraph()->getClocks()) {
       name = "ext_clk_"+QString::number(id)+" (";
       name += QString::number(d) + " MHz)";
       comboClkGen[i]->addItem(name);
       name = "ext_clk_"+QString::number(id)+" (";
       name += QString::number(d) + " MHz)";
       comboClkGen[i]->addItem(name);
@@ -255,7 +256,7 @@ void BlockLibraryWidget::updateClkRst(int idCat, int idBlock) {
   for(int i=0;i<lstRst.size();i++) {
     comboRstGen[i] = new QComboBox();
     QString name = "";
   for(int i=0;i<lstRst.size();i++) {
     comboRstGen[i] = new QComboBox();
     QString name = "";
-    for(int j=0;j<params->clocks.size();j++) {
+    for(int j=0;j<params->getGraph()->getClocks().size();j++) {
       name = "ext_rst_"+QString::number(j);
       comboRstGen[i]->addItem(name);
     }
       name = "ext_rst_"+QString::number(j);
       comboRstGen[i]->addItem(name);
     }
index c50270c7f91eebeaae3f519db87fc31fd39921c0..b1625593cedad52154794e4b67dd91ecbbbbfc4f 100644 (file)
@@ -684,7 +684,7 @@ void Dispatcher::addClkRstGenBlock(Context context, double frequency) {
 
   if (context == Design) {
 
 
   if (context == Design) {
 
-    params->clocks.append(frequency);
+    params->getGraph()->addClock(frequency);
 
     // get the top group
     GroupBlock *group = params->getGraph()->getTopGroup();
 
     // get the top group
     GroupBlock *group = params->getGraph()->getTopGroup();
@@ -695,7 +695,7 @@ void Dispatcher::addClkRstGenBlock(Context context, double frequency) {
     FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(group, ref, true);
 
     QString name = "clkrstgen_";
     FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(group, ref, true);
 
     QString name = "clkrstgen_";
-    name += QString::number(params->clocks.size()-1);
+    name += QString::number(params->getGraph()->getClocks().size()-1);
     newOne->setName(name);
 
     // creating the box item
     newOne->setName(name);
 
     // creating the box item
@@ -704,8 +704,8 @@ void Dispatcher::addClkRstGenBlock(Context context, double frequency) {
 
     ConnectedInterface* fromIfaceClk = NULL;
     ConnectedInterface* fromIfaceReset = NULL;
 
     ConnectedInterface* fromIfaceClk = NULL;
     ConnectedInterface* fromIfaceReset = NULL;
-    QString clkName = "ext_clk_"+QString::number(params->clocks.size()-1);
-    QString rstName = "ext_reset_"+QString::number(params->clocks.size()-1);
+    QString clkName = "ext_clk_"+QString::number(params->getGraph()->getClocks().size()-1);
+    QString rstName = "ext_reset_"+QString::number(params->getGraph()->getClocks().size()-1);
     fromIfaceClk = new GroupInterface(group,clkName, AbstractInterface::Input, AbstractInterface::Clock);
     fromIfaceReset = new GroupInterface(group,rstName, AbstractInterface::Input, AbstractInterface::Reset);
     group->addInterface(fromIfaceClk);
     fromIfaceClk = new GroupInterface(group,clkName, AbstractInterface::Input, AbstractInterface::Clock);
     fromIfaceReset = new GroupInterface(group,rstName, AbstractInterface::Input, AbstractInterface::Reset);
     group->addInterface(fromIfaceClk);
@@ -737,7 +737,7 @@ void Dispatcher::addClkRstGenBlock(Context context, double frequency) {
 
 
 
 
 
 
-GroupWidget *Dispatcher::createTopScene(Context context){
+GroupWidget *Dispatcher::createTopScene(Context context, double mainClock){
   static QString fctName = "Dispatcher::createTopScene()";
 #ifdef DEBUG_FCTNAME
   cout << "call to " << qPrintable(fctName) << endl;
   static QString fctName = "Dispatcher::createTopScene()";
 #ifdef DEBUG_FCTNAME
   cout << "call to " << qPrintable(fctName) << endl;
@@ -748,7 +748,8 @@ GroupWidget *Dispatcher::createTopScene(Context context){
     createIfaces = false;
   }
   // creating the graph and thus, the topgroup
     createIfaces = false;
   }
   // creating the graph and thus, the topgroup
-  Graph* graph = params->createGraph(createIfaces);
+  Graph* graph = params->initGraph(createIfaces);
+  graph->addClock(mainClock);
   // get the top group
   GroupBlock *topBlock = graph->getTopGroup();
   // creating the top group widget
   // get the top group
   GroupBlock *topBlock = graph->getTopGroup();
   // creating the top group widget
@@ -771,8 +772,8 @@ GroupWidget *Dispatcher::createTopScene(Context context){
 
   if (context == Design) {
     // create clkrstgen
 
   if (context == Design) {
     // create clkrstgen
-    double freq = params->clocks.at(0);
-    params->clocks.clear();
+    double freq = params->getGraph()->getClock(0);
+    params->getGraph()->resetClocks();
     addClkRstGenBlock(context,freq);
   }
 
     addClkRstGenBlock(context,freq);
   }
 
index cf14b6a36aee70f896c975372ff5992349619d3d..46db9b523476c1081b9ef7feeb1366d2ff7670dc 100644 (file)
@@ -75,7 +75,7 @@ public:
   void setSceneCounter(Context context, int value);
   // testers
   // others
   void setSceneCounter(Context context, int value);
   // testers
   // others
-  GroupWidget* createTopScene(Context context);
+  GroupWidget* createTopScene(Context context, double mainClock = 0.0);
   GroupWidget* createChildScene(Context context, GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
   void destroyScene(Context context, GroupScene* scene);
   GroupWidget *addNewEmptyGroup(Context context, GroupScene *scene, bool show = true);
   GroupWidget* createChildScene(Context context, GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
   void destroyScene(Context context, GroupScene* scene);
   GroupWidget *addNewEmptyGroup(Context context, GroupScene *scene, bool show = true);
index 4b22691ff97492ba3bf853d1f49563ccf2b08479..8e55077e6d069759f837f790924f0661fb33fea2 100644 (file)
--- a/Graph.cpp
+++ b/Graph.cpp
@@ -4,10 +4,8 @@
 #include "FunctionalBlock.h"
 #include "SpecialBlock.h"
 
 #include "FunctionalBlock.h"
 #include "SpecialBlock.h"
 
-Graph::Graph(bool createTopGroupIface) {
-  topGroup = new GroupBlock(NULL, createTopGroupIface);
-  topGroup->setName("top group");
-  groups.append(topGroup);
+Graph::Graph() {
+  topGroup = NULL;
 }
 
 Graph::~Graph() {
 }
 
 Graph::~Graph() {
@@ -15,6 +13,12 @@ Graph::~Graph() {
   delete topGroup;
 }
 
   delete topGroup;
 }
 
+void Graph::createTopGroup(bool createTopGroupIfaces) {
+  topGroup = new GroupBlock(NULL, createTopGroupIfaces);
+  topGroup->setName("top group");
+  groups.append(topGroup);
+}
+
 QList<AbstractInterface *> Graph::getOutsideInterfaces() {
   return topGroup->getInterfaces();
 }
 QList<AbstractInterface *> Graph::getOutsideInterfaces() {
   return topGroup->getInterfaces();
 }
diff --git a/Graph.h b/Graph.h
index 58690c9761def608401ec1b8ccc80ce6ef4e9e89..d5b15a9ae872d559fa76b46ff0062e04f29ddb9e 100644 (file)
--- a/Graph.h
+++ b/Graph.h
@@ -19,13 +19,18 @@ using namespace Qt;
 class Graph {
 
 public:
 class Graph {
 
 public:
-  Graph(bool createTopGroupIface = true);
+  Graph();
   ~Graph();
 
   // getters  
   inline GroupBlock* getTopGroup() { return topGroup; }
   inline QList<GroupBlock*> getAllGroups() { return groups; }
   ~Graph();
 
   // getters  
   inline GroupBlock* getTopGroup() { return topGroup; }
   inline QList<GroupBlock*> getAllGroups() { return groups; }
+  inline double getClock(int id) { return clocks.at(id); }
+  inline QList<double>& getClocks() { return clocks; }
   
   
+  //setters
+  inline void resetClocks() { clocks.clear(); }
+
   // methods for group blocks
   GroupBlock* createChildGroupBlock(GroupBlock* parent, bool createGroupIface = true);
   void removeGroupBlock(GroupBlock *group);
   // methods for group blocks
   GroupBlock* createChildGroupBlock(GroupBlock* parent, bool createGroupIface = true);
   void removeGroupBlock(GroupBlock *group);
@@ -44,6 +49,8 @@ public:
   bool removeStimuliBlock(FunctionalBlock* block);
   
   // others
   bool removeStimuliBlock(FunctionalBlock* block);
   
   // others
+  void createTopGroup(bool createTopGroupIfaces = true);
+  inline void addClock(double freq) { clocks.append(freq); }
   QList<AbstractInterface *> getOutsideInterfaces();
   QList<QString> getExternalResources(); // returns the list of all external files needed for VHDL generation
 
   QList<AbstractInterface *> getOutsideInterfaces();
   QList<QString> getExternalResources(); // returns the list of all external files needed for VHDL generation
 
@@ -63,6 +70,7 @@ private:
   GroupBlock* topGroup;
   QList<GroupBlock *> groups; //! usefull to avoid recursive methods to find a particular group.
   QList<FunctionalBlock*> stimulis; //! source for the top group
   GroupBlock* topGroup;
   QList<GroupBlock *> groups; //! usefull to avoid recursive methods to find a particular group.
   QList<FunctionalBlock*> stimulis; //! source for the top group
+  QList<double> clocks; // clocks[0] is the main clock.
 
 };
 
 
 };
 
index 8169dd0f255506d24544acf602b1faf9021aaa91..99f13bba8c36dc32d9ac8be5a71bdea97c93d654 100644 (file)
@@ -345,7 +345,7 @@ void MainWindow::slotNewProject(){
   if (ret == 1) {
     enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
     enableAnalysisActions(true, ANALYSIS_ANALYZE | ANALYSIS_GENERATE, OP_RAZ);
   if (ret == 1) {
     enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
     enableAnalysisActions(true, ANALYSIS_ANALYZE | ANALYSIS_GENERATE, OP_RAZ);
-    GroupWidget* topGroup = dispatcher->createTopScene(Dispatcher::Design);
+    GroupWidget* topGroup = dispatcher->createTopScene(Dispatcher::Design, params->mainClock);
     addTopGroup(topGroup);
     library->updateComboScene();
     library->updateBoxConn();
     addTopGroup(topGroup);
     library->updateComboScene();
     library->updateBoxConn();
index beed4278fdc4064b0d871643db86c75ed4c1b1e8..d8e72f651db892b067e59a63d20421f62f1b33d7 100644 (file)
@@ -71,7 +71,7 @@ void NewProjectDialog::checkBeforeAccept() {
   //cout << "all ok" << endl;
   params->projectPath = dirProjEdit->text();
   params->projectFile = params->projectPath + "/" + params->projectName + ".xml";
   //cout << "all ok" << endl;
   params->projectPath = dirProjEdit->text();
   params->projectFile = params->projectPath + "/" + params->projectName + ".xml";
-  params->clocks.append(freq);
+  params->mainClock = freq;
   if (autoConnClkCheck->isChecked()) {
     params->autoConnMainClk = true;
   }
   if (autoConnClkCheck->isChecked()) {
     params->autoConnMainClk = true;
   }
index 1195f51f7e776e54ed30c22f92df709e10db207f..d7621d232a1afa54f59d2a4078eeba3bac0f521b 100644 (file)
@@ -52,6 +52,8 @@ Parameters::Parameters() {
   projectPath = "";\r
   projectName = "";\r
   projectFile = "";\r
   projectPath = "";\r
   projectName = "";\r
   projectFile = "";\r
+\r
+  graph = new Graph();\r
 }\r
 \r
 Parameters::~Parameters() {\r
 }\r
 \r
 Parameters::~Parameters() {\r
@@ -69,8 +71,8 @@ void Parameters::clear() {
   refPathes.clear();\r
 }\r
 \r
   refPathes.clear();\r
 }\r
 \r
-Graph* Parameters::createGraph(bool createTopGroupIfaces) {\r
-  graph = new Graph(createTopGroupIfaces);\r
+Graph* Parameters::initGraph(bool createTopGroupIfaces) {\r
+  graph->createTopGroup(createTopGroupIfaces);\r
   return graph;\r
 }\r
 \r
   return graph;\r
 }\r
 \r
@@ -158,7 +160,7 @@ double Parameters::getFeedingClockFrequency(AbstractInterface *iface) {
       }\r
     }\r
   }\r
       }\r
     }\r
   }\r
-  return clocks.at(idClock);\r
+  return graph->getClock(idClock);\r
 }\r
 \r
 void Parameters::createDelayBlock() {\r
 }\r
 \r
 void Parameters::createDelayBlock() {\r
@@ -346,6 +348,11 @@ GroupWidget *Parameters::loadProject(QDomElement root) throw(Exception) {
     else {\r
       cout << "trying to create scene n°" << idScene << " with upper scene n°" <<idUpperScene << endl;\r
       GroupScene* upperScene = searchSceneById(idUpperScene, topScene);\r
     else {\r
       cout << "trying to create scene n°" << idScene << " with upper scene n°" <<idUpperScene << endl;\r
       GroupScene* upperScene = searchSceneById(idUpperScene, topScene);\r
+      /* IMPORTANT: calling addNewEmptyGroup() leads to create a new GroupWidget\r
+       *            AND a BoxItem in upperScene that represents the GroupItem in the\r
+       *            newly created child scene. Thus, it has not to be created when\r
+       *            reading bi_group tags in the following but just searched\r
+       */\r
       groupWidget = dispatcher->addNewEmptyGroup(Dispatcher::Load, upperScene,false);\r
       groupWidget->getScene()->setId(idScene);\r
       groupItem = groupWidget->getScene()->getGroupItem();      \r
       groupWidget = dispatcher->addNewEmptyGroup(Dispatcher::Load, upperScene,false);\r
       groupWidget->getScene()->setId(idScene);\r
       groupItem = groupWidget->getScene()->getGroupItem();      \r
index bf679fc2a41b9c71e4ce080da4217984c2de25d9..e14b3fe11cc856e2d2705c440f157fd6335e58d9 100644 (file)
@@ -138,10 +138,10 @@ public :
   QString projectPath;\r
   QString projectName;\r
   QString projectFile; // equals to projectPath/projectName.xml\r
   QString projectPath;\r
   QString projectName;\r
   QString projectFile; // equals to projectPath/projectName.xml\r
-  bool autoConnMainClk; // true if auto-connection to main clock (i.e. ext_clk)\r
-  QList<double> clocks; // clocks[0] is the main clock.\r
+  bool autoConnMainClk; // true if auto-connection to main clock (i.e. ext_clk) \r
+  double mainClock; // main clock freq (reported in graph->clocks(0))\r
 \r
 \r
-  Graph* createGraph(bool createTopGroupIfaces = true);\r
+  Graph* initGraph(bool createTopGroupIfaces = true);\r
   void destroyGraph();\r
   inline Graph* getGraph() { return graph; }  \r
   ReferenceBlock* getReferenceBlock(int idCategory, int idBlock); // get the reference block from its category and index\r
   void destroyGraph();\r
   inline Graph* getGraph() { return graph; }  \r
   ReferenceBlock* getReferenceBlock(int idCategory, int idBlock); // get the reference block from its category and index\r
index 8f2271db619f05c05a573fd3bd1335a6a9b8aea6..fdec328f7252f72045f1828b8480527e1045469e 100644 (file)
@@ -104,7 +104,7 @@ void SpecialBlock::computeOutputPatternClockConvert(int nbExec) throw(Exception)
    */\r
   AbstractInterface* clkIn = getIfaceFromName("clk_in");\r
   AbstractInterface* clkOut = getIfaceFromName("clk_out");\r
    */\r
   AbstractInterface* clkIn = getIfaceFromName("clk_in");\r
   AbstractInterface* clkOut = getIfaceFromName("clk_out");\r
-  cout << "freq clk_in = " << clkIn-\r
+  //cout << "freq clk_in = " << clkIn-\r
 \r
   // in case of inputPattern not created, do it\r
   if (lengthIP <= 0) {\r
 \r
   // in case of inputPattern not created, do it\r
   if (lengthIP <= 0) {\r
index b2e76dd8d8f2568cb51c38d42e99d9a1eeee0d95..72704001018bca42e1712ba6394763775efa1fa3 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.2.0, 2018-05-03T17:24:00. -->
+<!-- Written by QtCreator 4.2.0, 2018-05-03T21:14:33. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
-  <value type="QByteArray">{3701e197-5b6c-48ea-9e98-a6cf6de18672}</value>
+  <value type="QByteArray">{c8006d66-d34f-42be-ad10-d0207752286d}</value>
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -61,7 +61,7 @@
   <valuemap type="QVariantMap">
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
   <valuemap type="QVariantMap">
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ed04208c-8774-456b-99b9-4a02094ca7a4}</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{2c9bf876-3476-44eb-8065-1f0844704dda}</value>
    <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
index 31ec0a1a87da3f8be4fd98d9f4f0e3556672e735..3fc15fe88cb31a5ae83e427ff9f1f830fa797dd8 100644 (file)
Binary files a/lib/implementations/impls.bmf and b/lib/implementations/impls.bmf differ
index b7a6ef6d9acaa1b455b30970d8800f9d287577d9..ffc13f1aabbedeaed3d3a625235c20a55bfb292b 100644 (file)
Binary files a/lib/references/references.bmf and b/lib/references/references.bmf differ