diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp index e7a1fe8fb352ebedb2d10d2758afdba1b91a39d4..4217eeb0e363034dcea3a13a1e0ced5f3da243ed 100644 --- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp @@ -438,7 +438,7 @@ int MultiCoreCPU::allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const int total = 0; for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if (cpt >= begining) { - (*i)->toXML(glob, 1, _name); + (*i)->toXML(glob, 0, _name); total ++; } cpt ++; @@ -451,7 +451,7 @@ void MultiCoreCPU::latencies2XML(std::ostringstream& glob, int id1, int id2) { for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if ((*i)->getCommand() !=NULL){ if ((*i)->getCommand()->getID() == id1 || (*i)->getCommand()->getID() == id2){ - (*i)->toXML(glob, 1, _name); + (*i)->toXML(glob, 0, _name); } } } diff --git a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp index b90dd9e6e9e633028b9b4caaa9895a984843f21c..4bc2334287ac26d0513d1bdcf798ca996f69f266 100644 --- a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp @@ -428,7 +428,7 @@ int SingleCoreCPU::allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) cons int total = 0; for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if (cpt >= begining) { - (*i)->toXML(glob, 1, _name); + (*i)->toXML(glob, 0, _name); total ++; } cpt ++; @@ -440,7 +440,7 @@ void SingleCoreCPU::latencies2XML(std::ostringstream& glob, unsigned int id1, un for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if ((*i)->getCommand() !=NULL){ if ((*i)->getCommand()->getID() == id1 || (*i)->getCommand()->getID() == id2){ - (*i)->toXML(glob, 1, _name); + (*i)->toXML(glob, 0, _name); } } } diff --git a/src/main/java/avatartranslator/AvatarPragmaLatency.java b/src/main/java/avatartranslator/AvatarPragmaLatency.java index 19db85bb5ea2a131b2ca659ff004619c837775df..58276b8759714b471da2fbab65cda48ba3765300 100644 --- a/src/main/java/avatartranslator/AvatarPragmaLatency.java +++ b/src/main/java/avatartranslator/AvatarPragmaLatency.java @@ -50,9 +50,9 @@ package avatartranslator; import java.util.List; public class AvatarPragmaLatency extends AvatarPragma { - private AvatarActionOnSignal state1; + private AvatarStateMachineElement state1; private AvatarBlock block1; - private AvatarActionOnSignal state2; + private AvatarStateMachineElement state2; private AvatarBlock block2; private int symbolType; public static final int lessThan =1; @@ -63,7 +63,7 @@ public class AvatarPragmaLatency extends AvatarPragma { private List<String> id2; private String pragmaString=""; - public AvatarPragmaLatency(String _name, Object _referenceObject, AvatarBlock block1, AvatarActionOnSignal state1, AvatarBlock block2, AvatarActionOnSignal state2, int symbolType, int time, List<String> id1, List<String> id2, String pragmaString) + public AvatarPragmaLatency(String _name, Object _referenceObject, AvatarBlock block1, AvatarStateMachineElement state1, AvatarBlock block2, AvatarStateMachineElement state2, int symbolType, int time, List<String> id1, List<String> id2, String pragmaString) { super(_name, _referenceObject); this.block1 = block1; @@ -77,7 +77,7 @@ public class AvatarPragmaLatency extends AvatarPragma { this.pragmaString=pragmaString; } - public AvatarActionOnSignal getState1() + public AvatarStateMachineElement getState1() { return this.state1; } @@ -87,7 +87,7 @@ public class AvatarPragmaLatency extends AvatarPragma { return this.block1; } - public AvatarActionOnSignal getState2() + public AvatarStateMachineElement getState2() { return this.state2; } diff --git a/src/main/java/avatartranslator/AvatarState.java b/src/main/java/avatartranslator/AvatarState.java index 0f0290414d244d9b33f357672ee4c211519a6521..880eb41b464998dd8cb360e5bba3aadb29be96bc 100644 --- a/src/main/java/avatartranslator/AvatarState.java +++ b/src/main/java/avatartranslator/AvatarState.java @@ -51,6 +51,7 @@ public class AvatarState extends AvatarStateElement { private String entryCode; private boolean hidden; // i.e, not present in the original state machine public int stateID; // to be used by code generator to more efficiently keep track of states. + private boolean checkLatency; public AvatarState(String _name, Object _referenceObject) { super(_name, _referenceObject); @@ -81,6 +82,15 @@ public class AvatarState extends AvatarStateElement { public String getNiceName() { return "State " + getName(); } + + public boolean getCheckLatency(){ + return checkLatency; + } + + public void setCheckLatency(boolean b){ + checkLatency=b; + } + public int hasEmptyTransitionsOnItself(AvatarStateMachine _asm) { AvatarTransition at; diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java index 72d8905efe722f14dba7d095c6d643097d6bed1b..892e452735a428a9458a8a80afabb9e620579d92 100644 --- a/src/main/java/ui/AvatarDesignPanelTranslator.java +++ b/src/main/java/ui/AvatarDesignPanelTranslator.java @@ -270,7 +270,7 @@ public class AvatarDesignPanelTranslator { String block1 = p1.split("\\.")[0]; String state1 = p1.split("\\.")[1]; AvatarBlock bl1; - AvatarActionOnSignal st1=null; + AvatarStateMachineElement st1=null; List<String> id1= new ArrayList<String>(); bl1 = as.getBlockWithName(block1); if (bl1==null){ @@ -288,6 +288,14 @@ public class AvatarDesignPanelTranslator { st1= aaos; } } + AvatarState astate1 = asm.getStateWithName(state1); + if (astate1!=null){ + if (astate1.getCheckLatency()){ + id1.add("State-"+state1 + ":"+ astate1.getID()); + st1= astate1; + } + } + if (id1.size()==0){ UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot find checkable state " + block1+ "." + state1 + " in pragma"); ce.setTDiagramPanel(adp.getAvatarBDPanel()); @@ -320,7 +328,7 @@ public class AvatarDesignPanelTranslator { AvatarBlock bl2; - AvatarActionOnSignal st2=null; + AvatarStateMachineElement st2=null; bl2 = as.getBlockWithName(block2); if (bl2==null){ @@ -342,6 +350,14 @@ public class AvatarDesignPanelTranslator { } } + AvatarState astate2 = asm.getStateWithName(state2); + if (astate2!=null){ + if (astate2.getCheckLatency()){ + id2.add("State-"+state2 + ":"+ astate2.getID()); + st2= astate2; + } + } + if (id2.size()==0){ UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot find checkable state " + block2+ "." + state2 + " in pragma"); ce.setTDiagramPanel(adp.getAvatarBDPanel()); @@ -1594,7 +1610,7 @@ public class AvatarDesignPanelTranslator { astate.addReferenceObject (tgc); tgc.setAVATARID (astate.getID()); if (tgc.getCheckLatency()){ - // astate.setCheckLatency(true); + astate.setCheckLatency(true); _as.checkedIDs.add(tgc.getName()+"-"+tgc.getValue()+":"+astate.getID()); } } diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java index 11b0b717f45eddc7093adaddcfb6ea40dc2bbe5f..dcd604a490c039c46091106400bb27a16e1465d0 100755 --- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java +++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java @@ -927,8 +927,8 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar jspLatency = new JScrollPane(latTable); jspLatency.setWheelScrollingEnabled(true); jspLatency.getVerticalScrollBar().setUnitIncrement(10); - jspLatency.setMinimumSize(new Dimension(250, 50)); - jspLatency.setPreferredSize(new Dimension(250, 50)); + jspLatency.setMinimumSize(new Dimension(450, 100)); + jspLatency.setPreferredSize(new Dimension(450, 100)); latencyPanel.add(jspLatency, c0); diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java index 3bbcf132a3de8b5da0670eb832fb8b9496eca307..3a6497ebcc6e26c7e48545ad5c1a3736b263b001 100755 --- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java +++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java @@ -1534,7 +1534,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } try { - if ((command.equals("Write") || command.equals("Read")) && tran.deviceName.contains("CPU")){ + if ((command.equals("Write") || command.equals("Read")) && tran.nodeType.equals("0")){ TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(tran.channelName); if (chan!=null){ TMLTask originTask = chan.getOriginTask(); @@ -1581,7 +1581,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } } } - else if ((command.equals("Send") || command.equals("Wait") || command.equals("SelectEvent")) && tran.deviceName.contains("CPU") && !tran.channelName.startsWith("reqChannel")){ + else if ((command.equals("Send") || command.equals("Wait") || command.equals("SelectEvent")) && tran.nodeType.equals("0") && !tran.channelName.startsWith("reqChannel")){ if (command.equals("SelectEvent")){ String trace="time="+tran.endTime+ " block=" + tran.taskName + " type=state_entering state=SelectEvent"; if (!simtraces.contains(trace)){ @@ -1634,7 +1634,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } } } - else if ((command.equals("Request") || command.equals("Wait")) && tran.deviceName.contains("CPU") && tran.channelName.startsWith("reqChannel")){ + else if ((command.equals("Request") || command.equals("Wait")) && tran.nodeType.equals("0") && tran.channelName.startsWith("reqChannel")){ TMLRequest req=null; for (TMLRequest request: tmap.getTMLModeling().getRequests()){ if (tran.channelName.replaceAll("reqChannel_","").equals(request.getDestinationTask().getName())){ diff --git a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java index 829f0ec875635e0fd53ab2ac522857c73643107d..172fb14e5531c84a132a47da14c1c896a2f838c3 100644 --- a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java +++ b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java @@ -103,7 +103,11 @@ public class AvatarSafetyTests { AvatarBlock C = new AvatarBlock("C", null, null); AvatarStateMachine Casm = C.getStateMachine(); - Casm.addElement(new AvatarState("c1", null)); + AvatarState c1= new AvatarState("c1", null); + c1.setCheckLatency(true); + Casm.addElement(c1); + + C.addAttribute(new AvatarAttribute("attr", AvatarType.INTEGER, C, null)); C.addAttribute(new AvatarAttribute("m__a", AvatarType.UNDEFINED, C, null)); C.addAttribute(new AvatarAttribute("m__b", AvatarType.UNDEFINED, C, null)); @@ -139,8 +143,14 @@ public class AvatarSafetyTests { assertEquals(pragma.getBlock1().getName(),"A"); assertEquals(pragma.getBlock2().getName(),"B"); //Check State names - assertEquals(pragma.getState1().getSignal().getName(),"sig"); - assertEquals(pragma.getState2().getSignal().getName(),"sig2"); + if (pragma.getState1() instanceof AvatarActionOnSignal){ + AvatarActionOnSignal aos = (AvatarActionOnSignal) pragma.getState1(); + assertEquals(aos.getSignal().getName(),"sig"); + } + if (pragma.getState2() instanceof AvatarActionOnSignal){ + AvatarActionOnSignal aos2 = (AvatarActionOnSignal) pragma.getState2(); + assertEquals(aos2.getSignal().getName(),"sig2"); + } //Check ids not empty assertEquals(pragma.getId1().size(),1); assertEquals(pragma.getId2().size(),1); @@ -208,6 +218,34 @@ public class AvatarSafetyTests { } + @Test + public void testFormAvatarStatePragma(){ + pragma = adpt.checkPerformancePragma("Latency(A.sig,C.c1)<1", blocks, as, null); + assertTrue(pragma !=null); + //Check Block names + assertEquals(pragma.getBlock1().getName(),"A"); + assertEquals(pragma.getBlock2().getName(),"C"); + //Check State names + assertTrue(pragma.getState1() instanceof AvatarActionOnSignal); + if (pragma.getState1() instanceof AvatarActionOnSignal){ + AvatarActionOnSignal aos = (AvatarActionOnSignal) pragma.getState1(); + assertEquals(aos.getSignal().getName(),"sig"); + } + assertTrue(pragma.getState2() instanceof AvatarState); + if (pragma.getState2() instanceof AvatarState){ + AvatarState st = (AvatarState) pragma.getState2(); + assertEquals(st.getName(),"c1"); + } + + //Check ids not empty + assertEquals(pragma.getId1().size(),1); + assertEquals(pragma.getId2().size(),1); + //Check symbol + assertEquals(pragma.getSymbolType(),AvatarPragmaLatency.lessThan); + //Check time + assertEquals(pragma.getTime(),1); + } + public static void main(String[] args){ AvatarSafetyTests ast = new AvatarSafetyTests (); // ast.runTest ();