diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java index 67535404a2e6d961e1f0cf48483e01afb88a9a6e..6d01fbb7b1dd4c49455234dcd870fd126bbb91f2 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 55a308cd511187dc1719cc89679b58028838b322..e792c713abcdede55075b89cc2e354be712c2af0 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 () );*/