diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java index d4b6365202e69d80eaae39379ddbef6a282de50f..e75f9cb0759c4f3056d8db09ed53c1f2f23d208b 100755 --- a/src/main/java/tmltranslator/TMLTask.java +++ b/src/main/java/tmltranslator/TMLTask.java @@ -237,6 +237,15 @@ public class TMLTask extends TMLElement { return activity; } + public void addElement(TMLActivityElement prev, TMLActivityElement succ) { + if (activity == null) { + return; + } + activity.addElement(succ); + prev.addNext(succ); + } + + public void setExit(boolean b) { mustExit = b; } diff --git a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java index dcb3f2933a2b92c3af86972a41d8a95b29d3adf4..0720ee29b1a97240da3306b08b7a12db3d77bf42 100644 --- a/src/main/java/tmltranslator/tonetwork/TMAP2Network.java +++ b/src/main/java/tmltranslator/tonetwork/TMAP2Network.java @@ -81,7 +81,10 @@ public class TMAP2Network { // Make all routers for(int i=0; i<nocSize; i++) { for(int j=0; j<nocSize; j++) { - TranslatedRouter tr = new TranslatedRouter(nbOfVCs, i, j); + // We must find the number of apps connected on this router + int nbOfApps = 2; + + TranslatedRouter tr = new TranslatedRouter(nbOfApps, nbOfVCs, i, j); routers[i][j] = tr; tr.makeRouter(); } @@ -95,8 +98,7 @@ public class TMAP2Network { // Connect channels to the NoC - - + // A bridge is put with the same position as the router as to allow classical paths not to use the router diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java index bc1676a6cc436e09a0f9bd6d097d1f23eec5c903..a659d79ae0678fdf5fd0aa016c3fa8dfc185ee2f 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterface.java @@ -53,7 +53,6 @@ import java.util.Vector; */ public class TaskNetworkInterface extends TMLTask { protected int nbOfVCs; - protected int nbOfTasks; public TaskNetworkInterface(String name, Object referenceToClass, Object referenceToActivityDiagram) { super(name, referenceToClass, referenceToActivityDiagram); @@ -62,13 +61,11 @@ public class TaskNetworkInterface extends TMLTask { // feedbackEvents: one per vc // inputEvt, channels: one per task // outputChannel, output event: only one, common: this is a network interface, only one exit! - public void generate(int nbOfVCs, int nbOfTasks, TMLEvent outputEvent, TMLChannel outputChannel, - Vector<TMLEvent> feedbackEvents, Vector<TMLEvent> inputEvents, - Vector<TMLChannel> inputChannels) { + public void generate(int nbOfVCs, Vector<TMLEvent> inputFeedbackEvents, Vector<TMLEvent> inputEventsFromMUX, + TMLEvent outputEvent, TMLChannel outputChannel) { int i; this.nbOfVCs = nbOfVCs; - this.nbOfTasks = nbOfTasks; // Attributes @@ -87,7 +84,7 @@ public class TaskNetworkInterface extends TMLTask { //Attributes per tasks - for (i=0; i<nbOfTasks; i++) { + for (i=0; i<nbOfVCs; i++) { TMLAttribute pktlen = new TMLAttribute("pktlen"+i, "pktlen"+i, new TMLType(TMLType.NATURAL), "0"); this.addAttribute(pktlen); TMLAttribute iA = new TMLAttribute("i"+i, "i"+i, new TMLType(TMLType.NATURAL), "0"); @@ -98,27 +95,22 @@ public class TaskNetworkInterface extends TMLTask { this.addAttribute(eopi); TMLAttribute dst = new TMLAttribute("dst"+i, "dst"+i, new TMLType(TMLType.NATURAL), "0"); this.addAttribute(dst); - - } - - for (i=0; i<nbOfVCs; i++) { TMLAttribute vci = new TMLAttribute("vc"+i, "vc"+i, new TMLType(TMLType.NATURAL), ""+i); this.addAttribute(vci); } + // Events and channels addTMLEvent(outputEvent); - for(TMLEvent evt: feedbackEvents) { + for(TMLEvent evt: inputFeedbackEvents) { addTMLEvent(evt); } - for(TMLEvent evt: inputEvents) { + for(TMLEvent evt: inputEventsFromMUX) { addTMLEvent(evt); } - addReadTMLChannel(outputChannel); - for(TMLChannel ch: inputChannels) { - addWriteTMLChannel(ch); - } + addWriteTMLChannel(outputChannel); + // Activity Diagram TMLStartState start = new TMLStartState("mainStart", referenceObject); @@ -126,53 +118,66 @@ public class TaskNetworkInterface extends TMLTask { TMLForLoop loop = new TMLForLoop("mainLoop", referenceObject); loop.setInfinite(true); - activity.addElement(loop); - start.addNext(loop); - - /*TMLWaitEvent waitEvt = new TMLWaitEvent("PacketEvent", referenceObject); - waitEvt.setEvent(inputEvent); - waitEvt.addParam("pktlen"); - waitEvt.addParam("dst"); - waitEvt.addParam("vc"); - waitEvt.addParam("eop"); - activity.addElement(waitEvt); - loop.addNext(waitEvt); - - TMLChoice choice = new TMLChoice("MainChoice", referenceObject); - activity.addElement(choice); - - for(int i=0; i<nbOfVCs; i++) { - TMLSendEvent sendEvt = new TMLSendEvent("SendEvtToVC" + i, referenceObject); - sendEvt.setEvent(outputEvents.get(i)); - sendEvt.addParam("pktlen"); - sendEvt.addParam("dst"); - sendEvt.addParam("vc"); - sendEvt.addParam("eop"); - activity.addElement(sendEvt); - choice.addNext(sendEvt); - choice.addGuard("vc == " + i); - - TMLReadChannel read = new TMLReadChannel("ReadFlit" + i, referenceObject); - read.addChannel(inputChannel); - read.setNbOfSamples("1"); - activity.addElement(read); - sendEvt.addNext(read); - - TMLWriteChannel write = new TMLWriteChannel("WriteFlit" + i, referenceObject); - write.addChannel(outputChannels.get(i)); - write.setNbOfSamples("1"); - activity.addElement(write); - read.addNext(write); - - TMLStopState stopL = new TMLStopState("WriteFlit" + i, referenceObject); - activity.addElement(stopL); - write.addNext(stopL); - }*/ - - // Ending loop - TMLStopState stop = new TMLStopState("StopState", referenceObject); - activity.addElement(stop); - loop.addNext(stop); + addElement(start, loop); + + TMLActionState state = new TMLActionState("LoopExitSeeting", referenceObject); + state.setAction("loopexit = 2"); + addElement(loop, state); + + TMLSequence mainSequence = new TMLSequence("mainSequence", referenceObject); + addElement(state, mainSequence); + + for(i=0; i<nbOfVCs; i++) { + TMLNotifiedEvent notifiedEvent = new TMLNotifiedEvent("NotifiedVC", referenceObject); + notifiedEvent.setEvent(inputEventsFromMUX.get(i)); + notifiedEvent.setVariable("nEvt"); + addElement(mainSequence, notifiedEvent); + + TMLChoice testingEvt = new TMLChoice("testingEvtVC", referenceObject); + addElement(notifiedEvent, testingEvt); + + TMLStopState endOfLoopNotified = new TMLStopState("NoEvetNorispkt", referenceObject); + addElement(testingEvt, endOfLoopNotified); + testingEvt.addGuard("(nEvt == 0) and (ispkt" + i + " == 0)"); + + TMLSequence intermediateSeq = new TMLSequence("intermediateSeq", referenceObject); + addElement(testingEvt, intermediateSeq); + testingEvt.addGuard("(nEvt > 0) or (ispkt" + i + " > 0)"); + + // Choice on the left of intermediate sequence + TMLChoice ispktChoice = new TMLChoice("ChoiceOnNewPacket", referenceObject); + addElement(intermediateSeq, ispktChoice); + + TMLStopState endOfIspkt = new TMLStopState("endOfIspkt", referenceObject); + addElement(testingEvt, endOfIspkt); + testingEvt.addGuard("(ispkt" + i + " > 0)"); + + TMLWaitEvent waitingForStartPacket = new TMLWaitEvent("WaitingStartPacket", referenceObject); + waitingForStartPacket.setEvent(inputEventsFromMUX.get(i)); + waitingForStartPacket.addParam("pktlen" + i); + waitingForStartPacket.addParam("dst" + i); + waitingForStartPacket.addParam("vc"); + waitingForStartPacket.addParam("eop"); + addElement(ispktChoice, waitingForStartPacket); + ispktChoice.addGuard("ispkt == 0"); + + TMLActionState ispktSetting = new TMLActionState("ispktSetting", referenceObject); + ispktSetting.setAction("ispkt = 1"); + addElement(waitingForStartPacket, ispktSetting); + + TMLActionState iSetting = new TMLActionState("iSetting", referenceObject); + iSetting.setAction("i" + i + " = 1"); + addElement(ispktSetting, iSetting); + + TMLStopState endOfInitPkt = new TMLStopState("endOfInitPkt", referenceObject); + addElement(iSetting, endOfInitPkt); + + // Right branch of intermediate seq + + + } + + } diff --git a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java index 888675dd3da14555dbe1c21e033a4aa6d4359b8e..706352a7fcd4002897744ce4c0f5f5d10ae4e4a4 100644 --- a/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java +++ b/src/main/java/tmltranslator/tonetwork/TranslatedRouter.java @@ -57,7 +57,7 @@ public class TranslatedRouter<E> { private final int CHANNEL_SIZE = 4; private final int CHANNEL_MAX = 8; - private int nbOfVCs, xPos, yPos; + private int nbOfVCs, xPos, yPos, nbOfApps; private TMLMapping<E> map; private Vector<TMLEvent> pktins; @@ -65,8 +65,9 @@ public class TranslatedRouter<E> { - public TranslatedRouter(int nbOfVCs, int xPos, int yPos) { + public TranslatedRouter(int nbOfApps, int nbOfVCs, int xPos, int yPos) { this.nbOfVCs = nbOfVCs; + this.nbOfApps = nbOfApps; this.xPos = xPos; this.yPos = yPos; } @@ -89,6 +90,8 @@ public class TranslatedRouter<E> { + + // VC DISPATCHERS // One dispatcher per port // A dispatcher outputs to VCs tasks