diff --git a/src/main/java/tmltranslator/TMLChoice.java b/src/main/java/tmltranslator/TMLChoice.java index 9a2f7aa31caeb755effb7fcc1dc08faf3de9560e..5b321e82fa3bc972b229c9c097056d7954c2310d 100755 --- a/src/main/java/tmltranslator/TMLChoice.java +++ b/src/main/java/tmltranslator/TMLChoice.java @@ -58,7 +58,14 @@ public class TMLChoice extends TMLActivityElement{ } public void addGuard(String _g) { - guards.add(_g); + String g = _g.trim(); + if(!(g.startsWith("["))) { + g = "[" + g; + } + if(!(g.endsWith("["))) { + g = g + "]"; + } + guards.add(g); } public int getNbGuard() { diff --git a/src/main/java/tmltranslator/TMLError.java b/src/main/java/tmltranslator/TMLError.java index e839315cca2f3190977b3dad040a71b9a9969383..50f7c42a2714647f65e21264fb7aa3f683546605 100755 --- a/src/main/java/tmltranslator/TMLError.java +++ b/src/main/java/tmltranslator/TMLError.java @@ -68,4 +68,22 @@ public class TMLError { public TMLError(int _type) { type = _type; } + + public String toString() { + String ret = ""; + ret += message + "."; + if (task != null) { + ret += " Task: " + task.getName(); + } + if (element != null) { + ret += " Activity element: " + element.getName(); + } + if (referenceObject != null) { + ret += " Reference: " + referenceObject.toString(); + } + + return ret; + } + + } \ No newline at end of file diff --git a/src/main/java/tmltranslator/TMLMapping.java b/src/main/java/tmltranslator/TMLMapping.java index 9ed708160bb39b0a605a2b3c3bd854141357a497..a586ba0b187f46f669c1e6d2efc57b1c4aa7adfb 100755 --- a/src/main/java/tmltranslator/TMLMapping.java +++ b/src/main/java/tmltranslator/TMLMapping.java @@ -855,7 +855,7 @@ public class TMLMapping<E> { TraceManager.addDev("\n\nFORKTASK is mapped: " + task.getName()); } } else { - TraceManager.addDev("Non fork task found: " + task.getName()); + //TraceManager.addDev("Non fork task found: " + task.getName()); } if (task.getName().startsWith("JOINTASK_")) { if (!isTaskMapped(task)) { diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java index 6d01fbb7b1dd4c49455234dcd870fd126bbb91f2..03e8ffca276ed0db5ff8e62151a1c3d3842abba2 100755 --- a/src/main/java/tmltranslator/TMLSyntaxChecking.java +++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java @@ -77,6 +77,7 @@ public class TMLSyntaxChecking { private final String TIME_UNIT_ERROR = "unknown time unit"; private final String NO_NEXT_OPERATOR_ERROR = "No next operator"; private final String SAME_PORT_NAME = "Two ports have the same name"; + private final String WRONG_PARAMS = "The number of params is not compatible"; private final String TOO_MANY_MEMORIES = "Channel is mapped on more than one memory"; private final String INVALID_CHANNEL_PATH = "Channel path is invalid"; @@ -452,14 +453,22 @@ public class TMLSyntaxChecking { } else if (elt instanceof TMLSendEvent) { tmlase = (TMLSendEvent) elt; evt = tmlase.getEvent(); - for (j = 0; j < tmlase.getNbOfParams(); j++) { - action = tmlase.getParam(j); - if ((action != null) && (action.length() > 0)) { - type = evt.getType(j); - if ((type == null) || (type.getType() == TMLType.NATURAL)) { - parsing(t, elt, "actionnat", action); - } else { - parsing(t, elt, "actionbool", action); + + if (tmlase.getNbOfParams() != evt.getNbOfParams()) { + addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() + + " (nb:" + evt.getNbOfParams() + + ") and send event (nb:" + tmlase.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR); + } else { + + for (j = 0; j < tmlase.getNbOfParams(); j++) { + action = tmlase.getParam(j); + if ((action != null) && (action.length() > 0)) { + type = evt.getType(j); + if ((type == null) || (type.getType() == TMLType.NATURAL)) { + parsing(t, elt, "actionnat", action); + } else { + parsing(t, elt, "actionbool", action); + } } } } @@ -467,26 +476,35 @@ public class TMLSyntaxChecking { } else if (elt instanceof TMLWaitEvent) { tmlwe = (TMLWaitEvent) elt; evt = tmlwe.getEvent(); - //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams()); - for (j = 0; j < tmlwe.getNbOfParams(); j++) { - action = tmlwe.getParam(j).trim(); - if ((action != null) && (action.length() > 0)) { - if (!(Conversion.isId(action))) { - addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR); - } else { - // Declared variable? - attr = t.getAttributeByName(action); - if (attr == null) { - addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); - TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension()); + //TraceManager.addDev("Nb of params of wait event:" + tmlwe.getNbOfParams() + " task=" + t.getTaskName()); + + + if (tmlwe.getNbOfParams() != evt.getNbOfParams()) { + addError(t, elt, WRONG_PARAMS + " between event " + evt.getName() + + " (nb:" + evt.getNbOfParams() + + ") and wait event (nb:" + tmlwe.getNbOfParams() + ") in task " + t.getTaskName(), TMLError.ERROR_BEHAVIOR); + } else { + + for (j = 0; j < tmlwe.getNbOfParams(); j++) { + action = tmlwe.getParam(j).trim(); + if ((action != null) && (action.length() > 0)) { + if (!(Conversion.isId(action))) { + addError(t, elt, SYNTAX_ERROR_VARIABLE_EXPECTED + " in expression " + action, TMLError.ERROR_BEHAVIOR); } else { - //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j); - if (tmlwe.getEvent().getType(j).getType() == 0) { - TraceManager.addDev("0"); - } - if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) { - TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType()); - addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + // Declared variable? + attr = t.getAttributeByName(action); + if (attr == null) { + addError(t, elt, UNDECLARED_VARIABLE + ": " + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + TraceManager.addDev("1 In task: " + t.getName() + " extended name:" + t.getNameExtension()); + } else { + //TraceManager.addDev("Nb of params:" + tmlwe.getEvent().getNbOfParams() + " j:" + j); + if (tmlwe.getEvent().getType(j).getType() == 0) { + TraceManager.addDev("0"); + } + if (attr.getType().getType() != tmlwe.getEvent().getType(j).getType()) { + TraceManager.addDev("Type0:" + attr.getType().getType() + " type1:" + tmlwe.getEvent().getType(j).getType()); + addError(t, elt, VARIABLE_ERROR + " :" + action + " in expression " + action, TMLError.ERROR_BEHAVIOR); + } } } } diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java index bb9240e9a11e8fb18690106d801ce52762e82823..63eac9b8fe5a1503d04a830d134cb898242fd769 100755 --- a/src/main/java/tmltranslator/TMLTask.java +++ b/src/main/java/tmltranslator/TMLTask.java @@ -113,6 +113,16 @@ public class TMLTask extends TMLElement { attributes.add(_tmla); } + + public void addAttributeIfApplicable(TMLAttribute _tmla) { + for(TMLAttribute att: attributes) { + if (att.getName().compareTo(_tmla.getName()) == 0) { + return; + } + } + attributes.add(_tmla); + } + public List<TMLAttribute> getAttributes() { return attributes; } diff --git a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java index fba3e2257a2cbea5e623291b7fa32f8a8ec34e7b..9503391ce5f079731be73462270fccbbdb918c75 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/DiploSimulatorCodeGenerator.java @@ -657,6 +657,8 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator final List<TMLEvent> events = new ArrayList<TMLEvent>(tmlmodeling.getEvents(task)); final List<TMLRequest> requests = new ArrayList<TMLRequest>(tmlmodeling.getRequests(task)); + //TraceManager.addDev("Handling task=" + task.getTaskName()); + final MappedSystemCTask mst = new MappedSystemCTask(task, channels, events, requests, tmlmapping, mappedChannels, mappedOnCPU); tasks.add(mst); @@ -731,14 +733,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator for(HwCommunicationNode nodeS: path){ pathS += nodeS.getName() + " "; } - TraceManager.addDev("Path=" + pathS); + //TraceManager.addDev("Path=" + pathS); if (reverseIn) { slaves.str += ",static_cast<Slave*>(0)"; } else { //firstPart=startNode.getName() + "0"; firstNode = startNode; - TraceManager.addDev("1. First node=" + firstNode); + //TraceManager.addDev("1. First node=" + firstNode); } for (final HwCommunicationNode commElem : path) { @@ -747,14 +749,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator final String memoryInstName = namesGen.memoryInstanceName((HwMemory) commElem); slaves.str += ",static_cast<Slave*>(" + memoryInstName + "),static_cast<Slave*>(" + memoryInstName + ")"; firstNode = null; - TraceManager.addDev("2. First node=" + firstNode); + //TraceManager.addDev("2. First node=" + firstNode); // firstPart = ""; } else { if (reverse) { if (firstNode == null) { // if ( firstPart.length()==0 ){ firstNode = commElem; - TraceManager.addDev("3. First node=" + firstNode); + //TraceManager.addDev("3. First node=" + firstNode); // firstPart=commElem.getName(); } else { masters.str += "," + namesGen.busMasterInstanceName(commElem, 0, (HwBus) firstNode); @@ -762,14 +764,14 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator masterCount++; slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")"; firstNode = null; - TraceManager.addDev("4. First node=" + firstNode); + //TraceManager.addDev("4. First node=" + firstNode); //firstPart=""; } } else { if (firstNode == null) { // if ( firstPart.length()==0 ){ firstNode = commElem; - TraceManager.addDev("5. First node=" + firstNode); + //TraceManager.addDev("5. First node=" + firstNode); slaves.str += ",static_cast<Slave*>(" + namesGen.communicationNodeInstanceName(commElem, 0) + ")"; // firstPart = commElem.getName(); // slaves.str+= ",static_cast<Slave*>(" + firstPart + ")"; @@ -778,7 +780,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator // masters.str+= "," + firstPart + "_" + commElem.getName() + "_Master"; masterCount++; firstNode = null; - TraceManager.addDev("6. First node=" + firstNode); + //TraceManager.addDev("6. First node=" + firstNode); // firstPart=""; } } @@ -786,7 +788,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } if (reverse) { - TraceManager.addDev("REVERSE. First node=" + firstNode); + //TraceManager.addDev("REVERSE. First node=" + firstNode); masters.str += "," + namesGen.busMasterInstanceName(destNode, 0, (HwBus) firstNode); // masters.str+= "," + destNode.getName() + "0_" + firstPart + "_Master"; @@ -799,7 +801,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } public String determineRouting(HwNode startNode, HwNode destNode, TMLElement commElemToRoute) { - if (startNode == null) { + /*if (startNode == null) { TraceManager.addDev( "Null start node"); } else { TraceManager.addDev( "Start node:" + startNode.getName()); @@ -812,7 +814,7 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } TraceManager.addDev( "******** -------> ROUTING ROUTING ROUTING\nDetermine routing from " + startNode.getName() + " to " + destNode.getName - () ); + () );*/ StrWrap masters = new StrWrap(); StrWrap slaves = new StrWrap(); @@ -839,8 +841,11 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator } else { final List<HwCommunicationNode> commNodes2 = new LinkedList<HwCommunicationNode>(commNodes); + //TraceManager.addDev("Explore bus from " + startNode.getName() + " to memory " + memory.getName()); + + if (!exploreBuses(0, commNodes, path, startNode, memory, commElemToRoute)) { - TraceManager.addDev("NO route to " + memory.getName() + "found!!!!!!!!!!!!!!!!!!!!!!!!!!"); + TraceManager.addDev("NO route to " + memory.getName() + " found!!!!!!!!!!!!!!!!!!!!!!!!!!"); } path.add(memory); @@ -854,21 +859,21 @@ public class DiploSimulatorCodeGenerator implements IDiploSimulatorCodeGenerator hopNum = extractPath(path, masters, slaves, destNode, destNode, true) - hopNum; } - TraceManager.addDev(commElemToRoute.getName() + " is mapped on:"); + /*TraceManager.addDev(commElemToRoute.getName() + " is mapped on:"); for (HwCommunicationNode commElem : path) { TraceManager.addDev(commElem.getName()); - } + }*/ - TraceManager.addDev("number of elements: " + hopNum); - TraceManager.addDev("masters: " + masters.str); - TraceManager.addDev("slaves: " + slaves.str); + //TraceManager.addDev("number of elements: " + hopNum); + //TraceManager.addDev("masters: " + masters.str); + //TraceManager.addDev("slaves: " + slaves.str); if (masters.str.length() == 0) { return null; } - TraceManager.addDev("Going to return:" + hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")"); + //TraceManager.addDev("Going to return:" + hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")"); return hopNum + ",array(" + hopNum + masters.str + "),array(" + hopNum + slaves.str + ")"; } diff --git a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java index e447f5c98ba62cae870f4f64b013ae5534fe44f3..b7e0855c0821e4c14ca2e22379edcaa973e2553a 100644 --- a/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java +++ b/src/main/java/tmltranslator/tomappingsystemc2/NamesGenerationHelper.java @@ -391,7 +391,7 @@ public class NamesGenerationHelper { String busMasterInstanceName(final HwNode element, final int indexCore, final HwBus linkBus) { - if (element == null) { + /*if (element == null) { TraceManager.addDev("NULL Hw element"); } else { TraceManager.addDev("Hw element=" + element.getName()); @@ -401,7 +401,7 @@ public class NamesGenerationHelper { TraceManager.addDev("NULL linkBus element"); } else { TraceManager.addDev("linkBus element=" + linkBus.getName()); - } + }*/ return normalize(busMasterName(element, indexCore, linkBus)); } diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java index 147cd7af7154f2173fb977f676602cbb9c4350f8..7aa9303fac518739dccac74adee938518ba36987 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskINForDispatch.java @@ -111,11 +111,10 @@ public class TaskINForDispatch extends TMLTask { waitEvt.addParam("vc"); waitEvt.addParam("eop"); waitEvt.addParam("chid"); - activity.addElement(waitEvt); - loop.addNext(waitEvt); + activity.addLinkElement(loop, waitEvt); TMLChoice choice = new TMLChoice("MainChoice", referenceObject); - activity.addElement(choice); + activity.addLinkElement(waitEvt, choice); for(int i=0; i<nbOfVCs; i++) { TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToVC" + i, referenceObject); @@ -124,7 +123,7 @@ public class TaskINForDispatch extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); - waitEvt.addParam("chid"); + sendEvt.addParam("chid"); activity.addElement(sendEvt); choice.addNext(sendEvt); choice.addGuard("vc == " + i); diff --git a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java index 8d4534881c788c1357f25ab7461e99fcf6225f4c..2cb9a74ab68e268e187075d804c600089a6170b2 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskINForVC.java +++ b/src/main/java/tmltranslator/tonetwork/TaskINForVC.java @@ -146,15 +146,16 @@ public class TaskINForVC extends TMLTask { // Second activity after sequence TMLForLoop loop2 = new TMLForLoop("mainLoop", referenceObject); loop2.setInfinite(true); - activity.addElement(loop2); - seq.addNext(loop2); + activity.addLinkElement(seq, loop2); - TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent", referenceObject); + + TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEventBeforeSecondSeq", referenceObject); waitEvt.setEvent(inPacketEvent); waitEvt.addParam("pktlen"); waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(loop2, waitEvt); TMLSequence secondSeq = new TMLSequence("SecondSeq", referenceObject); @@ -174,20 +175,39 @@ public class TaskINForVC extends TMLTask { activity.addLinkElement(computexd, firstRoutingChoice); TMLActionState requested3 = new TMLActionState("requested3", referenceObject); - requested3.setAction("requested_output = 3"); + requested3.setAction("requestedOutput = 3"); activity.addLinkElement(firstRoutingChoice, requested3); - firstRoutingChoice.addGuard("xd > x"); + firstRoutingChoice.addGuard("xd>x"); activity.addLinkElement(requested3, new TMLStopState("stopOfRequest3", referenceObject)); TMLActionState requested2 = new TMLActionState("requested2", referenceObject); - requested2.setAction("requested_output = 2"); + requested2.setAction("requestedOutput = 2"); activity.addLinkElement(firstRoutingChoice, requested2); - firstRoutingChoice.addGuard("xd < x"); + firstRoutingChoice.addGuard("xd<x"); activity.addLinkElement(requested2, new TMLStopState("stopOfRequest2", referenceObject)); TMLChoice secondRoutingChoice = new TMLChoice("secondRoutingChoice", referenceObject); activity.addLinkElement(firstRoutingChoice, secondRoutingChoice); - firstRoutingChoice.addGuard("xd == x"); + firstRoutingChoice.addGuard("xd==x"); + + TMLActionState requested0 = new TMLActionState("requested0", referenceObject); + requested0.setAction("requestedOutput = 0"); + activity.addLinkElement(secondRoutingChoice, requested0); + firstRoutingChoice.addGuard("yd<y"); + activity.addLinkElement(requested0, new TMLStopState("stopOfRequest0", referenceObject)); + + TMLActionState requested4 = new TMLActionState("requested4", referenceObject); + requested4.setAction("requestedOutput = 4"); + activity.addLinkElement(secondRoutingChoice, requested4); + firstRoutingChoice.addGuard("yd==y"); + activity.addLinkElement(requested4, new TMLStopState("stopOfRequest4", referenceObject)); + + TMLActionState requested1 = new TMLActionState("requested1", referenceObject); + requested1.setAction("requestedOutput = 4"); + activity.addLinkElement(secondRoutingChoice, requested1); + firstRoutingChoice.addGuard("yd<y"); + activity.addLinkElement(requested1, new TMLStopState("stopOfRequest1", referenceObject)); + @@ -265,7 +285,7 @@ public class TaskINForVC extends TMLTask { activity.addLinkElement(sendEvt, read); stop = new TMLStopState("StopStateOutLoop", referenceObject); - activity.addLinkElement(waitEvt, stop); + activity.addLinkElement(read, stop); } diff --git a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java index cdd9708d2e0fe1a0fa09af494387dc0ab87fc547..075c7d00803ca1ca75fb098318fa0984ff0bb50d 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskMUXAppDispatch.java @@ -86,7 +86,7 @@ public class TaskMUXAppDispatch extends TMLTask { TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "0"); this.addAttribute(eop); TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); - this.addAttribute(eop); + this.addAttribute(chid); // Events and channels for(TMLEvent evt: inputEvents) { @@ -108,6 +108,12 @@ public class TaskMUXAppDispatch extends TMLTask { activity.addElement(selectEvt); loop.addNext(selectEvt); + if (inputEvents.size() == 0) { + activity.addLinkElement(selectEvt, new TMLStopState("StopNoEvent", referenceObject)); + return ; + } + + // Branch for each app for(int i=0; i< inputEvents.size(); i++) { diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java index fb3dcc3962b3ee781d03933977bf1e8128060fe0..a7851af199aae27de7ad95865493c768c7331e3b 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java @@ -137,7 +137,7 @@ public class TaskNetworkInterface extends TMLTask { addElement(start, loop); TMLActionState state = new TMLActionState("LoopExitSetting", referenceObject); - state.setAction("loopexit = 2"); + state.setAction("loopExit = 2"); addElement(loop, state); TMLSequence mainSequence = new TMLSequence("mainSequence", referenceObject); @@ -146,14 +146,14 @@ public class TaskNetworkInterface extends TMLTask { for(i=0; i<nbOfVCs; i++) { TMLChoice testOnLoopExit = null; if (i>0) { - //Test on loopexit + //Test on loop exit testOnLoopExit = new TMLChoice("testOnLoopExit", referenceObject); addElement(mainSequence, testOnLoopExit); // Right branch TMLStopState endOfLoopExit = new TMLStopState("endOfLoopExit", referenceObject); addElement(testOnLoopExit, endOfLoopExit); - testOnLoopExit.addGuard("loopexit == 1"); + testOnLoopExit.addGuard("loopExit == 1"); } else { testOnLoopExit = null; @@ -166,7 +166,7 @@ public class TaskNetworkInterface extends TMLTask { addElement(mainSequence, notifiedEvent); } else { addElement(testOnLoopExit, notifiedEvent); - testOnLoopExit.addGuard("loopexit == 2"); + testOnLoopExit.addGuard("loopExit == 2"); } TMLChoice testingEvt = new TMLChoice("testingEvtVC", referenceObject); @@ -196,10 +196,10 @@ public class TaskNetworkInterface extends TMLTask { waitingForStartPacket.addParam("eop"); waitingForStartPacket.addParam("chid" + i); addElement(ispktChoice, waitingForStartPacket); - ispktChoice.addGuard("ispkt == 0"); + ispktChoice.addGuard("ispkt" + i + " == 0"); TMLActionState ispktSetting = new TMLActionState("ispktSetting", referenceObject); - ispktSetting.setAction("ispkt = 1"); + ispktSetting.setAction("ispkt" + i + " = 1"); addElement(waitingForStartPacket, ispktSetting); TMLActionState iSetting = new TMLActionState("iSetting", referenceObject); @@ -211,9 +211,9 @@ public class TaskNetworkInterface extends TMLTask { // Right branch of intermediate seq TMLForLoop loopOfRightBranch = new TMLForLoop("LoopOfRightBranch", referenceObject); - loopOfRightBranch.setInit("loopexit = 0"); - loopOfRightBranch.setCondition("loopexit < 1"); - loopOfRightBranch.setIncrement("loopexit = loopexit"); + loopOfRightBranch.setInit("loopExit = 0"); + loopOfRightBranch.setCondition("loopExit < 1"); + loopOfRightBranch.setIncrement("loopExit = loopExit"); addElement(intermediateSeq, loopOfRightBranch); TMLNotifiedEvent feedbackNotified = new TMLNotifiedEvent("WaitingForFeedback", referenceObject); @@ -231,7 +231,7 @@ public class TaskNetworkInterface extends TMLTask { // No feedback TMLActionState noFeedbackAction = new TMLActionState("noFeedbackAction", referenceObject); - noFeedbackAction.setAction("loopexit = 2"); + noFeedbackAction.setAction("loopExit = 2"); addElement(testOnFeedback, noFeedbackAction); testOnFeedback.addGuard("else"); @@ -269,7 +269,7 @@ public class TaskNetworkInterface extends TMLTask { packetLengthChoice.addGuard("i" + i + " < pktlen" + i + " - 1"); TMLActionState asOnI = new TMLActionState("ActionstateOnI", referenceObject); - asOnI.setAction("i" + i + " = i" + i + " 1"); + asOnI.setAction("i" + i + " = i" + i + " + 1"); addElement(sendEvtpktin, asOnI); TMLStopState endOfLB = new TMLStopState("EndOfLB", referenceObject); @@ -277,7 +277,7 @@ public class TaskNetworkInterface extends TMLTask { // Middle branch TMLActionState loopExitMB = new TMLActionState("loopExitMB", referenceObject); - loopExitMB.setAction("loopexit = 1"); + loopExitMB.setAction("loopExit = 1"); addElement(packetLengthChoice, loopExitMB); packetLengthChoice.addGuard("i" + i + " == pktlen" + i); @@ -301,7 +301,7 @@ public class TaskNetworkInterface extends TMLTask { packetLengthChoice.addGuard("i" + i + " == pktlen" + i + " - 1"); TMLActionState asOnIRB = new TMLActionState("asOnIRB", referenceObject); - asOnIRB.setAction("i" + i + " = i" + i + " 1"); + asOnIRB.setAction("i" + i + " = i" + i + "+ 1"); addElement(sendEvtpktinRB, asOnIRB); TMLStopState endOfRB = new TMLStopState("endOfRB", referenceObject); @@ -312,9 +312,9 @@ public class TaskNetworkInterface extends TMLTask { // Right branch TMLActionState loopexitTo1= new TMLActionState("loopexitTo1", referenceObject); - loopexitTo1.setAction("loopexit = 1"); + loopexitTo1.setAction("loopExit = 1"); addElement(packetLengthChoice1, loopexitTo1); - packetLengthChoice1.addGuard("i" + i + " = pktlen" + i); + packetLengthChoice1.addGuard("i" + i + " == pktlen" + i); TMLActionState ispktResetAction = new TMLActionState("ispktResetAction", referenceObject); @@ -344,7 +344,7 @@ public class TaskNetworkInterface extends TMLTask { choiceLBSeq.addGuard("i" + i + " < pktlen" + i + " - 1"); TMLActionState asOnI1 = new TMLActionState("ActionstateOnI1", referenceObject); - asOnI1.setAction("i" + i + " = i" + i + " 1"); + asOnI1.setAction("i" + i + " = i" + i + " + 1"); addElement(sendEvtpktin1, asOnI1); TMLStopState endOfLB1 = new TMLStopState("endOfLB1", referenceObject); @@ -361,7 +361,7 @@ public class TaskNetworkInterface extends TMLTask { choiceLBSeq.addGuard("i" + i + " == pktlen" + i + " - 1"); TMLActionState asOnIRB1 = new TMLActionState("asOnIRB1", referenceObject); - asOnIRB1.setAction("i" + i + " = i" + i + " 1"); + asOnIRB1.setAction("i" + i + " = i" + i + "+ 1"); addElement(sendEvtpktinRB1, asOnIRB1); TMLStopState endOfRB1SEQ = new TMLStopState("endOfRB1SEQ", referenceObject); @@ -370,21 +370,21 @@ public class TaskNetworkInterface extends TMLTask { // Right branch of seq TMLNotifiedEvent notifiedEventPrio = new TMLNotifiedEvent("notifiedEventPrio", referenceObject); notifiedEventPrio.setEvent(inputEventsFromMUX.get(i-1)); - notifiedEventPrio.setVariable("higher_prio"); + notifiedEventPrio.setVariable("higherPrio"); addElement(seqLB, notifiedEventPrio); TMLChoice testPrio = new TMLChoice("testPrio", referenceObject); addElement(notifiedEventPrio, testPrio); TMLActionState loopexitPrio= new TMLActionState("loopexitPrio", referenceObject); - loopexitPrio.setAction("loopexit = 1"); + loopexitPrio.setAction("loopExit = 1"); addElement(testPrio, loopexitPrio); - testPrio.addGuard("higher_prio > 0"); + testPrio.addGuard("higherPrio > 0"); addElement(loopexitPrio, new TMLStopState("EndOfHigherPrio", referenceObject)); addElement(testPrio, new TMLStopState("NoHigherPrio", referenceObject)); - testPrio.addGuard("higher_prio == 0"); + testPrio.addGuard("higherPrio == 0"); } diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java index 160dbf4911e24fc6da4a31ad80122faa04b1ecc6..f1e3e66204038c3b6e85b24f2ba9b4fac2dcca82 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java @@ -128,6 +128,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask { waitingForPacketFromOUT.addParam("dst"); waitingForPacketFromOUT.addParam("vc"); waitingForPacketFromOUT.addParam("eop"); + waitingForPacketFromOUT.addParam("chid"); addElement(loop, waitingForPacketFromOUT); // Reading on channel diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java index d4e020e13a5ea2c3d2062af4eb7ea7f57a4e07b0..dfbd8602d5b45fc514e9ec24f6e3b7caf40e9897 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java @@ -39,6 +39,7 @@ package tmltranslator.tonetwork; +import myutil.TraceManager; import tmltranslator.*; import java.util.Vector; @@ -132,7 +133,7 @@ public class TaskOUTForDispatch extends TMLTask { mainChoice.addGuard("nEvt > 0"); TMLNotifiedEvent notifiedFeedback = new TMLNotifiedEvent("FeedbackNotifiedEvt"+i, referenceObject); - notifiedFeedback.setEvent(outSelectEvents.get(i)); + notifiedFeedback.setEvent(feedbackEvents.get(i)); notifiedFeedback.setVariable("feedback"); activity.addLinkElement(loopInside, notifiedFeedback); @@ -140,12 +141,13 @@ public class TaskOUTForDispatch extends TMLTask { activity.addLinkElement(notifiedFeedback, internalChoice); // Left branch of internal choice - sendEvt = new TMLSendEvent("feedbackUpEvent", referenceObject); + sendEvt = new TMLSendEvent("SelectEvent", referenceObject); sendEvt.setEvent(outSelectEvents.get(i)); activity.addLinkElement(internalChoice, sendEvt); internalChoice.addGuard("feedback > 0"); waitEvt = new TMLWaitEvent("PacketEventInLoop", referenceObject); + TraceManager.addDev("Nb Of params of " + inPacketEvents.get(i).getName() + " = " + inPacketEvents.get(i).getNbOfParams()); waitEvt.setEvent(inPacketEvents.get(i)); waitEvt.addParam("pktlen"); waitEvt.addParam("dst"); @@ -164,7 +166,7 @@ public class TaskOUTForDispatch extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); - waitEvt.addParam("chid"); + sendEvt.addParam("chid"); activity.addLinkElement(reqOut, sendEvt); TMLWriteChannel write = new TMLWriteChannel("WriteChannel" + i, referenceObject); diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java index 53d93acaa40276b610fc1bde4a07ff75d3ad0dff..da58b789f734c0fbcd8a6c67a5c41ad60cb5d5a0 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java +++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForVC.java @@ -124,7 +124,7 @@ public class TaskOUTForVC extends TMLTask { sendEvt.addParam("dst"); sendEvt.addParam("vc"); sendEvt.addParam("eop"); - waitEvt.addParam("chid"); + sendEvt.addParam("chid"); activity.addLinkElement(packetLoop, sendEvt); waitEvt = new TMLWaitEvent("ReturnFromVC", referenceObject); @@ -145,6 +145,7 @@ public class TaskOUTForVC extends TMLTask { waitEvt.addParam("dst"); waitEvt.addParam("vc"); waitEvt.addParam("eop"); + waitEvt.addParam("chid"); activity.addLinkElement(choice, waitEvt); choice.addGuard("eop == 0"); diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java index 5cfc08b49e1275e249385d0ca16712128d9e9bf9..4187a53c567aabfdc4a4643ae3b67bb19846d4a8 100644 --- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java +++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java @@ -479,8 +479,6 @@ public class TranslatedRouter<E> { TMLEvent pktoutFromOut = playingTheRoleOfPrevious[NB_OF_PORTS-1].packetOut; pktoutFromOut.setDestinationTask(tniOut); - - tniOut.generate(nbOfVCs, feedbackPerVC, pktoutFromOut, chOfOut); } @@ -652,7 +650,7 @@ public class TranslatedRouter<E> { HwMemory memNIIN = new HwMemory("MemNetworkInterfaceIN" + getPositionNaming()); tmla.addHwNode(memNIIN); - tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS - 1].chOutToIN, memNIIN); + tmlmap.addCommToHwCommNode(playingTheRoleOfNext[NB_OF_PORTS - 1].chOutToIN, memNIIN); HwBridge bridgeNIIN = new HwBridge("BridgeNetworkInterfaceIN" + getPositionNaming()); tmla.addHwNode(bridgeNIIN); @@ -750,15 +748,16 @@ public class TranslatedRouter<E> { // Basically connects to the main bridge // NIOUT bus - HwBus busNIOUT = new HwBus("BusNetworkiInterfaceOUT" + getPositionNaming()); + HwBus busNIOUT = new HwBus("BusNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(busNIOUT); - HwCPU cpuNIOUT = new HwCPU("CPUNetworkiInterfaceOUT" + getPositionNaming()); + HwCPU cpuNIOUT = new HwCPU("CPUNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(cpuNIOUT); tmlmap.addTaskToHwExecutionNode(tniOut, cpuNIOUT); - HwMemory memNIOUT = new HwMemory("MemNetworkiInterfaceOUT" + getPositionNaming()); + HwMemory memNIOUT = new HwMemory("MemNetworkInterfaceOUT" + getPositionNaming()); tmla.addHwNode(memNIOUT); + tmlmap.addCommToHwCommNode(playingTheRoleOfPrevious[NB_OF_PORTS-1].chOutToIN, memNIOUT); tmla.makeHwLink(busNIOUT, outForExit); tmla.makeHwLink(busNIOUT, cpuNIOUT); @@ -819,16 +818,16 @@ public class TranslatedRouter<E> { // Must now modify the source app TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(pktlen); + t.addAttributeIfApplicable(pktlen); TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(dst); + t.addAttributeIfApplicable(dst); TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(vc); + t.addAttributeIfApplicable(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1"); - t.addAttribute(eop); + t.addAttributeIfApplicable(eop); TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), ""+main.getChannelID(ch)); - t.addAttribute(chid); + t.addAttributeIfApplicable(chid); TMLActivity activity = t.getActivityDiagram(); Vector<TMLActivityElement> newElements = new Vector<>(); @@ -911,15 +910,15 @@ public class TranslatedRouter<E> { // Must now modify the dest app TMLAttribute pktlen = new TMLAttribute("pktlen", "pktlen", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(pktlen); + t.addAttributeIfApplicable(pktlen); TMLAttribute dst = new TMLAttribute("dst", "dst", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(dst); + t.addAttributeIfApplicable(dst); TMLAttribute vc = new TMLAttribute("vc", "vc", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(vc); + t.addAttributeIfApplicable(vc); TMLAttribute eop = new TMLAttribute("eop", "eop", new TMLType(TMLType.NATURAL), "1"); - t.addAttribute(eop); + t.addAttributeIfApplicable(eop); TMLAttribute chid = new TMLAttribute("chid", "chid", new TMLType(TMLType.NATURAL), "0"); - t.addAttribute(chid); + t.addAttributeIfApplicable(chid); TMLActivity activity = t.getActivityDiagram(); Vector<TMLActivityElement> newElements = new Vector<>(); @@ -928,7 +927,9 @@ public class TranslatedRouter<E> { if (elt instanceof TMLReadChannel) { trc = (TMLReadChannel) elt; if (trc.getChannel(0) == ch) { - TraceManager.addDev("Modifying write ch of task " + t.getTaskName()); + TraceManager.addDev("Modifying read ch of task " + t.getTaskName() + " for channel " + ch.getName()); + // TODO TODO + //trc.replaceChannelWith(ch, ); TMLWaitEvent twe = new TMLWaitEvent("EvtForReceiving__" + ch.getName(), ch.getReferenceObject()); newElements.add(twe); twe.setEvent(mapOfAllInputChannels.get(ch)); diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java index 71a75222d0b4270cd054cc8583c976aba8f2f8d4..510f643acdb3f5be69dc059849ab59e3d3fe47b3 100644 --- a/src/main/java/ui/GTMLModeling.java +++ b/src/main/java/ui/GTMLModeling.java @@ -816,7 +816,7 @@ public class GTMLModeling { tmltt = new TMLType(request.getType(j).getType()); tmlattr = new TMLAttribute(attname, tmltt); tmlattr.initialValue = tmlattr.getDefaultInitialValue(); - TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue); + //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + task.getName() + "with value =" + tmlattr.initialValue); task.addAttribute(tmlattr); } } @@ -1522,7 +1522,7 @@ public class GTMLModeling { tmltt = new TMLType(request.getType(j).getType()); tmlattr = new TMLAttribute(attname, tmltt); tmlattr.initialValue = tmlattr.getDefaultInitialValue(); - //TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue); + TraceManager.addDev("Adding " + tmlattr.getName() + " to " + tt1.getName() + "with value =" + tmlattr.initialValue); tt1.addAttribute(tmlattr); } } diff --git a/src/main/java/ui/window/JDialogNoCManagement.java b/src/main/java/ui/window/JDialogNoCManagement.java index f9a4e809ce9d6da3d9c51d5ffcea7d56eef215f1..a8431922201e6cdabee6b89d5694c6ca13f89222 100644 --- a/src/main/java/ui/window/JDialogNoCManagement.java +++ b/src/main/java/ui/window/JDialogNoCManagement.java @@ -352,6 +352,24 @@ public class JDialogNoCManagement extends JDialog implements ActionListener, Lis outputText.append("\nSpecification generated in " + dir + "\n"); + outputText.append("\nChecking syntax of the specification\n"); + + TMLSyntaxChecking tmlsc = new TMLSyntaxChecking(mapping); + tmlsc.checkSyntax(); + + outputText.append("\n" + tmlsc.hasErrors() + " errrors, " + tmlsc.hasWarnings() + " warnings:\n"); + if (tmlsc.hasErrors() > 0) { + for (TMLError err :tmlsc.getErrors()) { + outputText.append("Error:" + err.toString() + "\n"); + } + } + if (tmlsc.hasWarnings() > 0) { + for (TMLError err :tmlsc.getWarnings()) { + outputText.append("Warning:" + err.toString() + "\n"); + } + } + + outputText.append("\nAll done\n"); stopProcess();