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