From a5423dc9e904153ce454ae1a91ffd9a176c4742e Mon Sep 17 00:00:00 2001 From: Daniel Knorreck <daniel.knorreck@telecom-paristech.fr> Date: Tue, 8 Mar 2011 14:45:51 +0000 Subject: [PATCH] TEPE diagram translation added --- .../tomappingsystemc2/LiveVariableNode.java | 8 + .../tomappingsystemc2/MappedSystemCTask.java | 5 + .../tomappingsystemc2/StaticAnalysis.java | 36 ++- .../tomappingsystemc2/SystemCTEPE.java | 247 +++++++++++++++--- .../tomappingsystemc2/TML2MappingSystemC.java | 84 ++++-- 5 files changed, 315 insertions(+), 65 deletions(-) diff --git a/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java b/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java index adb082c5e8..d8d6ba3efe 100755 --- a/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java +++ b/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java @@ -11,6 +11,7 @@ public class LiveVariableNode{ //** Live Variable Analysis private int[] _useVars; private int[] _defVars; + private int[] _initialDefVars; private int[] _inVars; private int[] _outVars; //** Reachable Definition analysis @@ -54,6 +55,9 @@ public class LiveVariableNode{ LiveVariableNode(StaticAnalysis iAnalysis, int[] iUseVars, int[] iDefVars, TMLActivityElement iLinkedElem, LiveVariableNode iSuperiorNode){ _useVars=iUseVars; _defVars=iDefVars; + _initialDefVars = new int[_defVars.length]; + for (int i=0; i<_defVars.length; i++) + _initialDefVars[i]=_defVars[i]; _superiorBranchNode = iSuperiorNode; _linkedElem = iLinkedElem; _analysis = iAnalysis; @@ -703,6 +707,10 @@ public class LiveVariableNode{ return _outDefs; } + public int[] getInitialDefVars(){ + return _initialDefVars; + } + private boolean canBeRemoved(){ //if ((_lhs==null || _lhs.isEmpty()) && (_rhs==null || _rhs.isEmpty()) && !(_linkedElem==null || _linkedElem instanceof TMLNotifiedEvent || _linkedElem instanceof TMLRandom)) return false; for (int i=0; i<_defVars.length;i++){ diff --git a/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java index 541c3800e7..afc6c98a0e 100755 --- a/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java +++ b/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java @@ -276,6 +276,7 @@ public class MappedSystemCTask { // public dec hcode += CR + functionSig + CR + "public:" + CR; hcode += "friend bool condFunc(TMLTask* _ioTask_);\n"; + hcode += "friend class CurrentComponents;\n"; // Simulation hcode += makeConstructorSignature() + SCCR; // + "~" + reference + "()" + SCCR; makeSerializableFuncs(); @@ -953,4 +954,8 @@ public class MappedSystemCTask { public void determineCheckpoints(int[] aStatistics){ _analysis.determineCheckpoints(aStatistics); } + + public StaticAnalysis getAnalysis(){ + return _analysis; + } } diff --git a/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java b/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java index ed246f552f..7c143b1a14 100644 --- a/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java +++ b/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java @@ -6,7 +6,7 @@ import java.util.regex.*; //import java.util.HashSet; public class StaticAnalysis{ - private ArrayList<LiveVariableNode> liveNodes= new ArrayList<LiveVariableNode>();; + private ArrayList<LiveVariableNode> liveNodes= new ArrayList<LiveVariableNode>(); private final static Pattern _varPattern = Pattern.compile("[\\w&&\\D]+[\\w]*"); private TMLTask _task; private ArrayList<TMLChannel> _channels; @@ -59,6 +59,7 @@ public class StaticAnalysis{ } private int getVarSeqNoByName(String attName){ + attName=attName.trim(); int aSeq=0; for(TMLAttribute att: _task.getAttributes()) { if (att.name.equals(attName)) return aSeq; @@ -285,12 +286,12 @@ public class StaticAnalysis{ int aNbOfCheckPoints=0, aNbOfCandidates=0; for(LiveVariableNode aLiveNode: liveNodes){ int aStatResult = aLiveNode.varStatistics(aStatistics); - //if((aStatResult & 1)!=0){ - aLiveNode.printReachingEntries(); - printLiveVarNode(aLiveNode); + if((aStatResult & 1)!=0){ + //aLiveNode.printReachingEntries(); + //printLiveVarNode(aLiveNode); aNbOfCandidates++; if((aStatResult & 2)!=0) aNbOfCheckPoints++; - //} + } } if (aNbOfCandidates==0) System.out.println("No checkpoint candidates"); @@ -503,4 +504,29 @@ public class StaticAnalysis{ if (aLiveNode.getLinkedElement()==iCmd) return aLiveNode; return null; } + + public void getCommandsImpactingVar(String iVarName, HashSet<Integer> oList){ + //int[] aVarMap=new int[_bytesForVars]; + int aVarSeqNo = getVarSeqNoByName(iVarName); + if (aVarSeqNo>=0){ + //aVarMap[aVarSeqNo >>> 5] |= 1 << (aVarSeqNo & 0x1F); + int intPos = aVarSeqNo >>> 5; + int bitMask = 1 << (aVarSeqNo & 0x1F); + for(LiveVariableNode aLiveNode: liveNodes){ + /*int[] aDefVars = aLiveNode.getDefVars(); + boolean aMatchFound=false; + for (int i=0; i<aDefVars.length && !aMatchFound;i++){ + aMatchFound |= ((aDefVars[i] & aVarMap[i]) !=0); + }*/ + + //if (aMatchFound && aLiveNode.getLinkedElement()!=null) oList.add(aLiveNode.getLinkedElement().getID()); + if ((aLiveNode.getInitialDefVars()[intPos] & bitMask)!=0){ + if (aLiveNode.getLinkedElement()!=null) oList.add(aLiveNode.getLinkedElement().getID()); + else System.out.println("No linked elem"); + }else + System.out.println("Bit for var not set"); + } + }else + System.out.println("Variable " + iVarName + " not found in getCommandsImpactingVar"); + } } \ No newline at end of file diff --git a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java index 92196e923c..541f08ea15 100644 --- a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java +++ b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java @@ -49,6 +49,7 @@ import java.util.*; import tmltranslator.*; import myutil.*; import tepe.*; +import java.util.regex.*; public class SystemCTEPE { @@ -59,34 +60,60 @@ public class SystemCTEPE { private final static String EFCR = "}\n"; private final static String EFCR2 = "}\n\n"; private final static String EF = "}"; + private final static Pattern _varPattern = Pattern.compile("[\\w&&\\D]+[\\w]*"); private ArrayList<TEPE> _tepes; - - private String _floatingSigProc="", _floatingSigComp="", _floatingEnaComp="", _connect="", _declare="", _evtRegister="", _code=""; + private int _nbOfFloatingSig=0,_nbOfStartNodes=0; + private String _floatingSigProc="", _floatingSigComp="", _floatingEnaComp="", _connect="", _declare="", _evtRegister="", _code="", _listeners="", _eqFuncs="", _eqFuncDecl=""; + TML2MappingSystemC _tmltranslator; - public SystemCTEPE(ArrayList<TEPE> tepes){ + public SystemCTEPE(ArrayList<TEPE> tepes, TML2MappingSystemC tmltranslator){ _tepes=tepes; + _tmltranslator=tmltranslator; } public void generateTEPEs(){ - _floatingSigProc=""; _floatingSigComp=""; _floatingEnaComp=""; _connect=""; _declare=""; _evtRegister=""; - System.out.println("And the TEPEs are..............."); - for(TEPE tepe: _tepes) { - for(TEPEComponent comp: tepe) { - System.out.println("Component: " + comp.getName()); - generateTEPEProp(comp); + _nbOfFloatingSig=0; _nbOfStartNodes=0; + _floatingSigProc=""; _floatingSigComp=""; _floatingEnaComp=""; _connect=""; _declare=""; _evtRegister=""; _listeners=""; _eqFuncs=""; _eqFuncDecl=""; + if (!_tepes.isEmpty()){ + System.out.println("And the TEPEs are..............."); + for(TEPE tepe: _tepes) { + for(TEPEComponent comp: tepe) { + System.out.println("Component: " + comp.getName()); + generateTEPEProp(comp,null,null,null); + } } + _code = "bool aIsId;\n" + _declare; + //TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc); + _code += "TEPEFloatingSigListener* flListener = new TEPEFloatingSigListener(_simulator," + _nbOfFloatingSig + ","; + if (_nbOfFloatingSig==0) + _code += "0,0"; + else + _code+= "array(" + _nbOfFloatingSig + _floatingSigComp + "),array(" + _nbOfFloatingSig + _floatingSigProc + ")"; + _code += "," + _nbOfStartNodes + ",array(" + _nbOfStartNodes + _floatingEnaComp + "))" + SCCR; + //_code += "SignalConstraint* opMapping[] = {0" + _floatingSigComp + "}"+SCCR; + //_code += "NtfSigFuncPointer fnMapping[] = {0" + _floatingSigProc + "}" + SCCR; + //_code += "PropertyConstraint* startNodes[] ={0" + _floatingEnaComp + "}" + SCCR; + _code += _connect; + _code += _listeners; } - _code = _declare; - _code += "SignalConstraint* opMapping[] = {0" + _floatingSigComp + "}"+SCCR; - _code += "NtfSigFuncPointer fnMapping[] = {0" + _floatingSigProc + "}" + SCCR; - _code += "PropertyConstraint* startNodes[] ={0" + _floatingEnaComp + "}" + SCCR; - _code += _connect; } public void saveFile(String filename) throws FileException{ FileUtils.saveFile(filename, _code); } + public String getCode(){ + return _code; + } + + public String getEqFuncs(){ + return _eqFuncs; + } + + public String getEqFuncDeclaration(){ + return _eqFuncDecl; + } + private String getTEPECompName(TEPEComponent currComp){ return "_" + Conversion.replaceAllChar(currComp.getName(),' ',"") + currComp.getID(); } @@ -96,64 +123,157 @@ public class SystemCTEPE { String connect=""; if (currComp.hasOutSignalComponents()){ for(TEPEComponent outCmp: currComp.getOutSignals()){ - int index = outCmp.getInSignals().indexOf(currComp)+1; - connect += getTEPECompName(currComp) + ".connectSigOut(&" + getTEPECompName(outCmp) + ",&SignalConstraint::notifyS" + index + ")" + SCCR; + int index = outCmp.getInSignals().indexOf(currComp); + String suffix = (index==-1)? "f": ""+(index+1); + connect += getTEPECompName(currComp) + "->connectSigOut(" + getTEPECompName(outCmp) + ",&SignalConstraint::notifyS" + suffix + ")" + SCCR; } - } + }else + System.out.println(getTEPECompName(currComp) + " has no out signal components"); int noOfSig= (currComp.hasInSignalComponents())? currComp.getInSignals().size():0; System.out.println(getTEPECompName(currComp) + " Number of sig: " + noOfSig); for(int i=noOfSig+1; i<=maxNoOfSig; i++){ _floatingSigProc += ",&SignalConstraint::notifyS" + i; - _floatingSigComp += ",&" + getTEPECompName(currComp); + _floatingSigComp += ",(SignalConstraint*)" + getTEPECompName(currComp); + _nbOfFloatingSig++; } noOfSig= (currComp.hasInNegatedSignalComponents())? currComp.getInNegatedSignals().size():0; System.out.println(getTEPECompName(currComp) + " Number of neg sig: " + noOfSig); for(int i=noOfSig; i<maxNoOfNegSig; i++){ _floatingSigProc += ",&SignalConstraint::notifySf"; - _floatingSigComp += ",&" + getTEPECompName(currComp); + _floatingSigComp += ",(SignalConstraint*)" + getTEPECompName(currComp); + _nbOfFloatingSig++; } return connect; } private String connectOutProperties(TEPEComponent currComp){ String connect=""; - if (currComp.hasOutPropertyComponents()){ - for(TEPEComponent outCmp: currComp.getOutProperties()){ - connect += getTEPECompName(currComp) + ".connectEnaOut(array(1,(PropertyConstraint*)&" + getTEPECompName(outCmp) + ",1)" + SCCR; + if (currComp.hasInPropertyComponents()){ + for(TEPEComponent outCmp: currComp.getInProperties()){ + connect += getTEPECompName(currComp) + "->connectEnaOut(array(1,(PropertyConstraint*)" + getTEPECompName(outCmp) + "),1)" + SCCR; } }else System.out.println(getTEPECompName(currComp) + " has no out properties.\n"); - if (!currComp.hasInPropertyComponents()) _floatingEnaComp+= ",&" + getTEPECompName(currComp); + if (!currComp.hasOutPropertyComponents()){ + _floatingEnaComp+= ",(PropertyConstraint*)" + getTEPECompName(currComp); + _nbOfStartNodes++; + } return connect; } - private void generateTEPEProp(TEPEComponent currComp){ + private void parseExprToTokenList(String iAdd, LinkedList<String> iList){ + //LinkedList<String> resultList = new LinkedList<String>(); + Matcher matcher = _varPattern.matcher(iAdd); + //System.out.print("Found tokens: "); + int lastEnd=0; + while (matcher.find()){ + String token = iAdd.substring(matcher.start(), matcher.end()).trim(); + if (matcher.start()>lastEnd) iList.add(iAdd.substring(lastEnd,matcher.start()).trim()); + iList.add(token); + lastEnd=matcher.end(); + } + if (lastEnd<iAdd.length()) iList.add(iAdd.substring(lastEnd,iAdd.length()).trim()); + } + + private void replaceTokenInList(LinkedList<String> iList, String iReplace, String iAdd){ + //for(TEPEComponent outCmp: currComp.getInProperties()){ + iReplace = iReplace.trim(); + ListIterator itr = iList.listIterator(); + LinkedList<String> addTokenList= new LinkedList<String>(); + parseExprToTokenList(iAdd,addTokenList); + boolean aFound; + System.out.println("Decomp in replaceTokenInList: "); + for(String aToken: addTokenList) + System.out.print(aToken + ", "); + System.out.println(""); + do{ + aFound=false; + while(!aFound && itr.hasNext()){ + aFound = ((String)itr.next()).equals(iReplace); + } + if (aFound){ + System.out.println("Pattern found\n"); + itr.remove(); + for(String anAddString: addTokenList){ + itr.add(anAddString); + } + } + }while(itr.hasNext()); + } + + private void generateTEPEProp(TEPEComponent currComp, LinkedList<String> iTokenList, ArrayList<String> iTskVarList, HashSet<Integer> iCmdIDList){ //labc.connectEnaOut(array(1, (PropertyConstraint*)&seqc1),1); //void connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc){ String cmpName = getTEPECompName(currComp); if(currComp instanceof TEPEAttributeComponent){ + if (iTokenList!=null){ + //replaceTokenInList(iTokenList, currComp.getValue(), ((TEPEAttributeComponent)currComp).getBlockName() + "x" + currComp.getValue()); + replaceTokenInList(iTokenList, currComp.getValue(), "*iVar[" + iTskVarList.size() + "]"); + //iTskVarList.add( "&task__" + ((TEPEAttributeComponent)currComp).getBlockName() + "->" + currComp.getValue()); + iTskVarList.add("getTaskByName(\""+ ((TEPEAttributeComponent)currComp).getBlockName() + "\")-> getVariableByName(\"" + currComp.getValue() + "\", aIsId)"); + //getCommandsImpactingVar(String iVarName, ArrayList<Integer> oList) + MappedSystemCTask srcTsk = _tmltranslator.getMappedTaskByName(((TEPEAttributeComponent)currComp).getBlockName()); + if (srcTsk==null) + System.out.println("Task not found: " + ((TEPEAttributeComponent)currComp).getBlockName()); + else{ + System.out.println("Search for Var " + currComp.getValue() +" in Task " + ((TEPEAttributeComponent)currComp).getBlockName()); + srcTsk.getAnalysis().getCommandsImpactingVar(currComp.getValue(), iCmdIDList); + } + } + }else if (currComp instanceof TEPEAliasComponent){ //no param - _declare+= "AliasConstraint " + cmpName + "()" + SCCR; + _declare+= "AliasConstraint* " + cmpName + " = new AliasConstraint(" + currComp.getID() + ")" + SCCR; _connect += connectOutSignals(currComp,2,0); + }else if (currComp instanceof TEPEEquationComponent){ //EqConstraint(PropType iType, bool iIncludeBounds) - _declare+= "EqConstraint " + cmpName + "(GENERAL,true)" + SCCR; + //TEPEEquationListener::TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator) + LinkedList<String> addTokenList = new LinkedList<String>(); + ArrayList<String> addTskVarList = new ArrayList<String>(); + HashSet<Integer> addCmdIDList = new HashSet<Integer>(); + parseExprToTokenList(currComp.getValue(), addTokenList); + for(TEPEComponent linkedComps: currComp.getInAttributes()){ + System.out.println("%%%%%%%%%%% in Attribute"); + generateTEPEProp(linkedComps, addTokenList, addTskVarList, addCmdIDList); + } + _declare+= "EqConstraint* " + cmpName + " = new EqConstraint(" + currComp.getID() + ",GENERAL,true)" + SCCR; + _declare += "addTEPEConstraint(" + cmpName + ");\n"; + System.out.print(cmpName + "transformed to: "); + _eqFuncDecl+= "bool " + cmpName + "_func(ParamType** iVar);\n"; + _eqFuncs += "bool " + cmpName + "_func(ParamType** iVar){\n return "; + for(String anAddString: addTokenList){ + System.out.print(anAddString); + _eqFuncs += anAddString; + } + System.out.println(); + _eqFuncs += ";\n}\n\n"; + _listeners+= "TEPEEquationListener* " + cmpName + "_listener = new TEPEEquationListener(" + "array(" + addCmdIDList.size(); + for(Integer id: addCmdIDList){ + _listeners+= ",(ID)" + id.toString(); + } + _listeners+= ")," + addCmdIDList.size() + "," + "array(" + addTskVarList.size(); + for(String anAddTskVar: addTskVarList) + _listeners+= "," + anAddTskVar; + _listeners+= "),&" + cmpName + "_func" + "," + cmpName + ",&SignalConstraint::notifyS1,this, _simulator)" + SCCR; _connect += connectOutProperties(currComp); + }else if (currComp instanceof TEPELogicalConstraintComponent){ //LogConstraint(PropType iType, bool iIncludeBounds) //SeqConstraint(PropType iType, bool iIncludeBounds) if (((TEPELogicalConstraintComponent)currComp).getType()==TEPELogicalConstraintComponent.SEQUENCE){ - _declare += "SeqConstraint " + cmpName + "(GENERAL,true)" + SCCR; + _declare += "SeqConstraint* " + cmpName + " = new SeqConstraint("+ currComp.getID() + ",GENERAL,true)" + SCCR; }else{ - _declare += "LogConstraint " + cmpName + "(GENERAL,true)" + SCCR; + _declare += "LogConstraint* " + cmpName + " = new LogConstraint("+ currComp.getID() + ",GENERAL,true)" + SCCR; } + _declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutSignals(currComp,2,1); _connect += connectOutProperties(currComp); + }else if (currComp instanceof TEPEPropertyComponent){ //PropLabConstraint(PropLabType iType) - _declare += "PropLabConstraint " + cmpName + "("; + _declare += "PropLabConstraint* " + cmpName + " = new PropLabConstraint("; TEPEPropertyComponent propComp = (TEPEPropertyComponent)currComp; if (propComp.getType()==TEPEPropertyComponent.LIVENESS){ _declare += "LIVENESS"; @@ -165,10 +285,12 @@ public class SystemCTEPE { _declare += "NREACHABILITY"; } _declare += ")" + SCCR; + _declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); + }else if (currComp instanceof TEPEPropertyOperatorComponent){ //PropRelConstraint(PropRelType iType) - _declare += "PropRelConstraint " + cmpName + "("; + _declare += "PropRelConstraint* " + cmpName + " = new PropRelConstraint("; TEPEPropertyOperatorComponent propOpComp = (TEPEPropertyOperatorComponent)currComp; if (propOpComp.getType()==TEPEPropertyOperatorComponent.OR){ _declare += "OR"; @@ -177,22 +299,83 @@ public class SystemCTEPE { } _declare += ")" + SCCR; //_connect += connectOutSignals(currComp); + _declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); + }else if (currComp instanceof TEPESettingComponent){ //Variable Setting + if (iTokenList!=null){ + String[] lhsrhs = currComp.getValue().split("=",2); + System.out.println("Replace " + lhsrhs[0] + " by " + lhsrhs[1] + " before: "); + for(String aToken: iTokenList) + System.out.print(aToken + ", "); + System.out.println("\nafter:"); + replaceTokenInList(iTokenList, lhsrhs[0], lhsrhs[1]); + for(String aToken: iTokenList) + System.out.print(aToken + ", "); + System.out.println(""); + for(TEPEComponent linkedComps: currComp.getInAttributes()) + generateTEPEProp(linkedComps, iTokenList, iTskVarList, iCmdIDList); + } + }else if (currComp instanceof TEPESignalComponent){ //Declaration of Signal? + //TEPESigListener(ID* iSubjectIDs, unsigned int nbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp) + if (currComp.hasOutSignalComponents()){ + String[] aTokens = currComp.getValue().split("__"); + System.out.println("name of block: " + currComp.getValue()); + for(int i=0; i<aTokens.length; i++) + System.out.println("A tokens [" + i + "]: " + aTokens[i]); + System.out.println("A tokens lenght: " + aTokens.length); + String[] aSrcIDs = aTokens[0].split("_"); + String[] aEvts = aTokens[1].split("_"); + String[] aTransTypes = aTokens[2].split("_"); + String[] aEvtDescriptor = {"SIMSTART", "SIMEND", "TIMEADV", "TASKSTART", "TASKEND", "CMDRUNNABLE", "CMDSTART", "CMDEND", "TRANSEXEC"}; + String[] aTransDescriptor = {"NONE", "EXE", "RD", "WR", "SEL", "SND", "REQ", "WAIT", "NOTIF", "ACT", "CHO", "RND", "STP"}; + _listeners+= "TEPESigListener* " + cmpName + "= new TEPESigListener(array(" + (aSrcIDs.length-1); + for(int i=1; i<aSrcIDs.length; i++) + _listeners+= ",(ID)" + aSrcIDs[i]; + _listeners+= ")," + (aSrcIDs.length-1) + ","; + int aEvtCode=0, aTransCode=0; + for(int aEvtsInSigCmp=0; aEvtsInSigCmp<aEvts.length; aEvtsInSigCmp++){ + for(int aEvtDescr=0; aEvtDescr<aEvtDescriptor.length; aEvtDescr++ ){ + if (aEvts[aEvtsInSigCmp].toUpperCase().equals(aEvtDescriptor[aEvtDescr])) aEvtCode += (1<<aEvtDescr); + } + } + for(int aTransInSigCmp=0; aTransInSigCmp<aTransTypes.length; aTransInSigCmp++){ + for(int aTransDescr=0; aTransDescr<aTransDescriptor.length; aTransDescr++ ){ + if (aTransTypes[aTransInSigCmp].toUpperCase().equals(aTransDescriptor[aTransDescr])) aTransCode += (1<<aTransDescr); + } + } + + _listeners+= aEvtCode + "," + aTransCode + ","; + _listeners+= currComp.getOutSignals().size() + ",array(" + currComp.getOutSignals().size(); + /*int index = currComp.getOutSignals().get(0).getInSignals().indexOf(currComp); + String suffix = (index==-1)? "f": ""+(index+1); + _listeners += getTEPECompName(currComp.getOutSignals().get(0)) + ","; + _listeners += "&SignalConstraint::notifyS" + suffix + ",this, _simulator)" + SCCR;*/ + String aDstFuncs=""; + for (TEPEComponent aDstCmp: currComp.getOutSignals()){ + int index = aDstCmp.getInSignals().indexOf(currComp); + String suffix = (index==-1)? "f": ""+(index+1); + _listeners += ",(SignalConstraint*)" + getTEPECompName(aDstCmp); + aDstFuncs += ",(NtfSigFuncPointer)&SignalConstraint::notifyS" + suffix; + } + _listeners += "),array(" + currComp.getOutSignals().size() + aDstFuncs + "),this, _simulator)" + SCCR; + } + }else if (currComp instanceof TEPETimeConstraintComponent){ //TimeMMConstraint(PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds) //TimeTConstraint(TMLTime iT, bool iRetrigger, bool iIncludeBounds) TEPETimeConstraintComponent timeConstr = (TEPETimeConstraintComponent)currComp; if (currComp.getInSignals().size()>1){ - _declare += "TimeMMConstraint " + cmpName + "(GENERAL, " + timeConstr.getMinTime() + "," + timeConstr.getMaxTime() + ",false,true)" + SCCR; + _declare += "TimeMMConstraint* " + cmpName + " = new TimeMMConstraint("+ currComp.getID() + ",GENERAL, " + timeConstr.getMinTime() + "," + timeConstr.getMaxTime() + ",false,true)" + SCCR; _connect += connectOutSignals(currComp,2,0); }else{ - _declare += "TimeTConstraint " + cmpName + "(" + timeConstr.getMinTime() + ",false,true)" + SCCR; + _declare += "TimeTConstraint* " + cmpName + " = new TimeTConstraint(" + currComp.getID() + "," + timeConstr.getMinTime() + ",false,true)" + SCCR; _connect += connectOutSignals(currComp,1,0); } + _declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); } } diff --git a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java index 0a7d82c70c..34a7f6e650 100755 --- a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java +++ b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java @@ -71,10 +71,10 @@ public class TML2MappingSystemC { private String header, declaration, mainFile, src; private ArrayList<MappedSystemCTask> tasks; - private ArrayList<EBRDD> ebrdds; + //private ArrayList<EBRDD> ebrdds; //private ArrayList<TEPE> tepes; SystemCTEPE tepeTranslator; - private ArrayList<SystemCEBRDD> systemCebrdds = new ArrayList<SystemCEBRDD>(); + //private ArrayList<SystemCEBRDD> systemCebrdds = new ArrayList<SystemCEBRDD>(); public TML2MappingSystemC(TMLModeling _tmlm) { tmlmodeling = _tmlm; @@ -88,18 +88,18 @@ public class TML2MappingSystemC { public TML2MappingSystemC(TMLModeling _tmlm, ArrayList<EBRDD> _ebrdds, ArrayList<TEPE> _tepes) { tmlmodeling = _tmlm; - ebrdds = _ebrdds; + //ebrdds = _ebrdds; tmlmapping = tmlmodeling.getDefaultMapping(); - tepeTranslator = new SystemCTEPE(_tepes); - tepeTranslator.generateTEPEs(); + tepeTranslator = new SystemCTEPE(_tepes, this); + //tepeTranslator.generateTEPEs(); } public TML2MappingSystemC(TMLMapping _tmlmapping, ArrayList<EBRDD> _ebrdds, ArrayList<TEPE> _tepes) { tmlmapping = _tmlmapping; - ebrdds = _ebrdds; + //ebrdds = _ebrdds; tmlmapping.makeMinimumMapping(); - tepeTranslator = new SystemCTEPE(_tepes); - tepeTranslator.generateTEPEs(); + tepeTranslator = new SystemCTEPE(_tepes, this); + //tepeTranslator.generateTEPEs(); } public void saveFile(String path, String filename) throws FileException { @@ -107,7 +107,7 @@ public class TML2MappingSystemC { FileUtils.saveFile(path + filename + ".cpp", getFullCode()); src += filename + ".cpp"; FileUtils.saveFile(path + "Makefile.src", src); - tepeTranslator.saveFile(path + "src_simulator/TEPE/test.h"); + //tepeTranslator.saveFile(path + "src_simulator/TEPE/test.h"); } public String getFullCode() { @@ -121,7 +121,7 @@ public class TML2MappingSystemC { tmlmodeling = tmlmapping.getTMLModeling(); tasks = new ArrayList<MappedSystemCTask>(); //generateSystemCTasks(); - generateEBRDDs(); + //generateEBRDDs(); generateMainFile(); generateMakefileSrc(); } @@ -129,6 +129,7 @@ public class TML2MappingSystemC { private void generateMainFile() { makeHeader(); makeDeclarations(); + header += tepeTranslator.getEqFuncDeclaration() + "\n"; mainFile = header + declaration; mainFile = Conversion.indentString(mainFile, 4); } @@ -138,22 +139,31 @@ public class TML2MappingSystemC { for(TMLTask mst: tmlmapping.getMappedTasks()) { src += mst.getName() + ".cpp "; } - for(EBRDD ebrdd: ebrdds){ - src += ebrdd.getName() + ".cpp "; - } + //for(EBRDD ebrdd: ebrdds){ + // src += ebrdd.getName() + ".cpp "; + //} } private void makeHeader() { // System headers header = "#include <Simulator.h>" + CR; + header += "#include <AliasConstraint.h>\n#include <EqConstraint.h>\n#include <LogConstraint.h>\n#include <PropLabConstraint.h>\n"; + header += "#include <PropRelConstraint.h>\n#include <SeqConstraint.h>\n#include <SignalConstraint.h>\n#include <TimeMMConstraint.h>\n"; + header += "#include <TimeTConstraint.h>\n"; + header += "#include <CPU.h>\n#include <SingleCoreCPU.h>\n#include <RRScheduler.h>\n#include <PrioScheduler.h>\n#include <Bus.h>\n"; + header += "#include <Bridge.h>\n#include <Memory.h>\n#include <TMLbrbwChannel.h>\n#include <TMLnbrnbwChannel.h>\n"; + header += "#include <TMLbrnbwChannel.h>\n#include <TMLEventBChannel.h>\n#include <TMLEventFChannel.h>\n#include <TMLEventFBChannel.h>\n"; + header += "#include <TMLTransaction.h>\n#include <TMLCommand.h>\n#include <TMLTask.h>\n"; + header += "#include <SimComponents.h>\n#include <Server.h>\n#include <SimServSyncInfo.h>\n#include <ListenersSimCmd.h>\n"; + // Generate tasks header for(TMLTask mst: tmlmapping.getMappedTasks()) { //header += "#include <" + mst.getReference() + ".h>" + CR; header += "#include <" + mst.getName() + ".h>" + CR; } - for(EBRDD ebrdd: ebrdds){ - header += "#include <" + ebrdd.getName() + ".h>" + CR; - } + //for(EBRDD ebrdd: ebrdds){ + // header += "#include <" + ebrdd.getName() + ".h>" + CR; + //} header += CR; } @@ -398,26 +408,36 @@ public class TML2MappingSystemC { declaration += "addTask(task__"+ task.getName() +")"+ SCCR; } //int[] aStatistics = new int[8]; + declaration += "\n}\n\n"; + + //Declaration of TEPEs + declaration += "void generateTEPEs(){" + CR; + declaration += "//Declaration of TEPEs" + CR; + tepeTranslator.generateTEPEs(); + declaration += tepeTranslator.getCode(); + + //Generation of tasks for(MappedSystemCTask task: tasks){ task.determineCheckpoints(aStatistics); task.generateSystemC(debug, optimize); } + + //Declaration of TEPEs continued + declaration += CR; + declaration += "}\n};\n\n" + tepeTranslator.getEqFuncs(); + declaration +="#include <main.h>\n"; + if (aStatistics[0]!=0) System.out.println("Global gain variables " + 100 * aStatistics[1] / aStatistics[0]); if (aStatistics[2]!=0) System.out.println("Global gain Channels " + 100 * aStatistics[3] / aStatistics[2]); if (aStatistics[4]!=0) System.out.println("Global gain events " + 100 * aStatistics[5] / aStatistics[4]); if (aStatistics[6]!=0) System.out.println("Global gain checkpoints " + 100 * aStatistics[7] / aStatistics[6]); - declaration += CR; - + //Declaration of EBRDDs - declaration += "//Declaration of EBRDDs" + CR; + /*declaration += "//Declaration of EBRDDs" + CR; for(EBRDD ebrdd: ebrdds){ declaration += ebrdd.getName() + "* ebrdd__" + ebrdd.getName() + " = new " + ebrdd.getName() + "(0, \""+ ebrdd.getName() + "\");\n"; declaration += "addEBRDD(ebrdd__"+ ebrdd.getName() +")"+ SCCR; - } - - - declaration += "}\n};\n\n"; - declaration +="#include <main.h>\n"; + }*/ } @@ -609,20 +629,28 @@ public class TML2MappingSystemC { return null; } - private void generateEBRDDs(){ + /*private void generateEBRDDs(){ for(EBRDD ebrdd: ebrdds){ SystemCEBRDD newEbrdd = new SystemCEBRDD(ebrdd, tmlmodeling, tmlmapping); newEbrdd.generateSystemC(debug); systemCebrdds.add(newEbrdd); } - } + }*/ private void generateTaskFiles(String path) throws FileException { for(MappedSystemCTask mst: tasks) { mst.saveInFiles(path); } - for(SystemCEBRDD ebrdd: systemCebrdds) { - ebrdd.saveInFiles(path); + //for(SystemCEBRDD ebrdd: systemCebrdds) { + // ebrdd.saveInFiles(path); + //} + } + + + public MappedSystemCTask getMappedTaskByName(String iName){ + for(MappedSystemCTask task: tasks){ + if (task.getTMLTask().getName().equals(iName)) return task; } + return null; } } -- GitLab