From 06e1a2c19db444d405c1f980e73d94ad37dac386 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Wed, 22 May 2019 13:17:04 +0200
Subject: [PATCH] Update on syntax checking for routing between elements

---
 .../java/tmltranslator/TMLSyntaxChecking.java     | 15 +++++++++++++++
 .../DiploSimulatorCodeGenerator.java              |  6 +++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java
index 67535404a2..6d01fbb7b1 100755
--- a/src/main/java/tmltranslator/TMLSyntaxChecking.java
+++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java
@@ -45,6 +45,7 @@ import compiler.tmlparser.TMLExprParser;
 import compiler.tmlparser.TokenMgrError;
 import myutil.Conversion;
 import myutil.TraceManager;
+import tmltranslator.tomappingsystemc2.DiploSimulatorCodeGenerator;
 
 import java.io.StringReader;
 import java.util.ArrayList;
@@ -80,6 +81,7 @@ public class TMLSyntaxChecking {
     private final String TOO_MANY_MEMORIES = "Channel is mapped on more than one memory";
     private final String INVALID_CHANNEL_PATH = "Channel path is invalid";
     private final String INVALID_BUS_PATH = "Bus path is invalid for channel"; // Should be a warning only
+    private final String INVALID_ROUTING = "No possible routing for channel"; // Should be a warning only
 
     private final String DUPLICATE_PATH_TO_BUS = "Path to bus is duplicated"; // Should be a warning only
     private final String ONLY_ONE_NOC = "Only one NoC can be used"; // Should be a warning only
@@ -136,6 +138,7 @@ public class TMLSyntaxChecking {
             checkPathValidity();
             checkNonDuplicatePathToBuses();
             checkOneNOC();
+            checkRouting();
 
             // Check that if their is a memory for a channel, the memory is connected to the path
         }
@@ -824,6 +827,18 @@ public class TMLSyntaxChecking {
 
     }
 
+    private void checkRouting() {
+        DiploSimulatorCodeGenerator gen = new DiploSimulatorCodeGenerator(mapping);
+        for(TMLChannel ch: mapping.getTMLModeling().getChannels()) {
+            String s = gen.determineRouting(mapping.getHwNodeOf(ch.getOriginTask()),
+                    mapping.getHwNodeOf(ch.getDestinationTask()), ch);
+            if (s == null) {
+                addError(ch.getOriginTask(), null, INVALID_ROUTING + ": " + ch.getName() + " between " + ch.getOriginTask().getName() + " and " +
+                        ch.getDestinationTask().getName(), TMLError.ERROR_STRUCTURE);
+            }
+        }
+    }
+
 
 
 }
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
index 55a308cd51..e792c713ab 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java
@@ -88,7 +88,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
 
 
 
-    DiploSimulatorCodeGenerator(TMLModeling<?> _tmlm) {
+    public DiploSimulatorCodeGenerator(TMLModeling<?> _tmlm) {
         this(_tmlm.getDefaultMapping());
 
         tmlmodeling = _tmlm;
@@ -97,7 +97,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         //        tepeTranslator = new  SystemCTEPE(new ArrayList<TEPE>(), this);
     }
 
-    DiploSimulatorCodeGenerator(TMLMapping<?> _tmlmapping) {
+    public DiploSimulatorCodeGenerator(TMLMapping<?> _tmlmapping) {
         //        tmlmapping = _tmlmapping;
         //      tmlmapping.handleCPs();
         //      tmlmapping.removeForksAndJoins();
@@ -782,7 +782,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator
         return -masterCount;
     }
 
-    private String determineRouting(HwNode startNode, HwNode destNode, TMLElement commElemToRoute) {
+    public String determineRouting(HwNode startNode, HwNode destNode, TMLElement commElemToRoute) {
 
         /*TraceManager.addDev( "******** -------> ROUTING ROUTING ROUTING\nDetermine routing from " + startNode.getName() + " to " + destNode.getName
                 () );*/
-- 
GitLab