diff --git a/src/tmltranslator/ctranslator/AdaifOperationMEC.java b/src/tmltranslator/ctranslator/AdaifOperationMEC.java index 6c408ee3a789d92d627bc9aac9299dd7911ab33f..de3433c2e3ac1131091984c3fe4a292dc1bd222c 100644 --- a/src/tmltranslator/ctranslator/AdaifOperationMEC.java +++ b/src/tmltranslator/ctranslator/AdaifOperationMEC.java @@ -54,7 +54,9 @@ public class AdaifOperationMEC extends OperationMEC { public AdaifOperationMEC( String ctxName, String ID0, String OD0 ) { name = "AdaifOperationMEC"; - exec_code = "adaif_do(&" + ctxName + ");" + CR; + exec_code = TAB + "int status;" + CR + TAB + + "adaif_wait(&" + ctxName + ");" + CR + TAB + + "status = adaif_wait(&" + ctxName + ");" + CR; init_code = "void init_" + ctxName.split("_ctx")[0] + "( void )\t{" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/CwaMEC.java b/src/tmltranslator/ctranslator/CwaMEC.java index 1f9869bf77f77c4d1385bf20a44335322f28b93f..77ba345ea1de0645ffe2ad7a17e26ae09dde80d8 100644 --- a/src/tmltranslator/ctranslator/CwaMEC.java +++ b/src/tmltranslator/ctranslator/CwaMEC.java @@ -55,6 +55,7 @@ public class CwaMEC extends FepOperationMEC { name = "Component Wise Addition MEC"; exec_code = TAB + "/*firm instruction*/" + CR + TAB + + "int status;" + CR + TAB + "fep_set_l(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->num_samples);" + CR + TAB + "fep_set_qx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->bank);" + CR + TAB + "fep_set_bx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->base_address);" + CR + TAB + @@ -66,7 +67,7 @@ public class CwaMEC extends FepOperationMEC { "fep_set_bz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->base_address);" + CR + TAB + "fep_set_tz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->data_type);" + CR + TAB + "/*start execution*/" + CR + TAB + - "fep_do(&"+ _ctxName + ");" + CR; + "status = fep_do(&"+ _ctxName + ");" + CR; init_code ="/***** INIT "+ _ctxName.split("_ctx")[0] + " *******/" + CR + "void init_"+ _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/CwlMEC.java b/src/tmltranslator/ctranslator/CwlMEC.java index 8a721809680a0b40abef23b67952b99de3b85b59..7a3e32185c3a4de068df7985ef1b6b51810d09a0 100755 --- a/src/tmltranslator/ctranslator/CwlMEC.java +++ b/src/tmltranslator/ctranslator/CwlMEC.java @@ -55,6 +55,7 @@ public class CwlMEC extends FepOperationMEC { name = "Component Wise Lookup MEC"; exec_code = TAB + "/*firm instruction*/" + CR + TAB + + "int status;" + CR + TAB + "fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB + "fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB + "fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB + @@ -63,7 +64,7 @@ public class CwlMEC extends FepOperationMEC { "fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB + "fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB + "/*start execution*/" + CR + TAB + - "fep_do(&" + _ctxName + ");" + CR; + "status = fep_do(&" + _ctxName + ");" + CR; init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/CwmMEC.java b/src/tmltranslator/ctranslator/CwmMEC.java index ca5a9b4365c9c9017c37b53c221849fc6dc0aacc..d131740c11b81168f29089173500f8eb3167f756 100755 --- a/src/tmltranslator/ctranslator/CwmMEC.java +++ b/src/tmltranslator/ctranslator/CwmMEC.java @@ -55,6 +55,7 @@ public class CwmMEC extends FepOperationMEC { name = "Component Wise Multiplication MEC"; exec_code = TAB + "/*firm instruction*/" + CR + + "int status;" + CR + TAB + "fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + "fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + "fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + @@ -63,7 +64,7 @@ public class CwmMEC extends FepOperationMEC { "fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + "fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + "/*start execution*/" + CR + - "fep_do(&" + _ctxName + ");" + CR; + "status = fep_do(&" + _ctxName + ");" + CR; init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/CwpMEC.java b/src/tmltranslator/ctranslator/CwpMEC.java index 14147a0c6a417a46bf5433dc59ebf24f2cd47732..057f0b534ac04b392791e5963a5bb025272e0b31 100755 --- a/src/tmltranslator/ctranslator/CwpMEC.java +++ b/src/tmltranslator/ctranslator/CwpMEC.java @@ -55,6 +55,7 @@ public class CwpMEC extends FepOperationMEC { name = "Component Wise Product MEC"; exec_code = TAB + "/*firm instruction*/" + CR + TAB + + "int status;" + CR + TAB + "fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB + "fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB + "fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB + @@ -63,7 +64,7 @@ public class CwpMEC extends FepOperationMEC { "fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB + "fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB + "/*start execution*/" + CR + TAB + - "fep_do(&" + _ctxName + ");" + CR; + "status = fep_do(&" + _ctxName + ");" + CR; init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/FftMEC.java b/src/tmltranslator/ctranslator/FftMEC.java index 6d517ee9a26b3236a8e2b42b007f4cfd942d8e7a..88f8daee9bd79a7f9ae23e5db6e1ad19c000cd77 100644 --- a/src/tmltranslator/ctranslator/FftMEC.java +++ b/src/tmltranslator/ctranslator/FftMEC.java @@ -54,6 +54,7 @@ public class FftMEC extends FepOperationMEC { public FftMEC( String _ctxName, String inSignalName, String outSignalName ) { name = "Fast Fourier Transform MEC"; exec_code = TAB + "/*firm instruction*/" + CR + + "int status;" + CR + TAB + "fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB + "fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB + "fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB + @@ -62,7 +63,7 @@ public class FftMEC extends FepOperationMEC { "fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB + "fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB + "/*start execution*/" + CR + TAB + - "fep_do(&" + _ctxName + ");" + CR; + "status = fep_do(&" + _ctxName + ");" + CR; init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/IntlOperationMEC.java b/src/tmltranslator/ctranslator/IntlOperationMEC.java index 869907379ddfdb0245c4a33d5cfb3a99eab34f36..948d63b484d7cd287a7064673e8818fea4626e6b 100644 --- a/src/tmltranslator/ctranslator/IntlOperationMEC.java +++ b/src/tmltranslator/ctranslator/IntlOperationMEC.java @@ -53,9 +53,10 @@ public class IntlOperationMEC extends OperationMEC { public IntlOperationMEC( String ctxName, String ID0, String OD0 ) { name = "InterleaverOperationMEC"; - exec_code = TAB + "/*firm instruction*/" + CR + TAB + - "/*start execution*/" + CR + TAB + - "intl_do(&" + ctxName + ");" + CR; + exec_code = TAB + "/*start execution*/" + CR + TAB + + "int status;" + CR + TAB + + "intl_start(&" + ctxName + ");" + CR + TAB + + "status = intl_wait(&" + ctxName + ");" + CR; init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/MappOperationMEC.java b/src/tmltranslator/ctranslator/MappOperationMEC.java index 595a50df21dc8f45ac40b59b22c253bce2ce90c4..df1aab4c352a68014c74dc5748f92a8932b5cf0a 100644 --- a/src/tmltranslator/ctranslator/MappOperationMEC.java +++ b/src/tmltranslator/ctranslator/MappOperationMEC.java @@ -47,16 +47,15 @@ package tmltranslator.ctranslator;; import java.util.*; -//import Ctranslator.*; public class MappOperationMEC extends OperationMEC { - public MappOperationMEC( String ctxName, String ID0, String OD0 ) { name = "MapperOperationMEC"; - exec_code = TAB + "/*firm instruction*/" + CR + TAB + - "/*start execution*/" + CR + TAB + - "mapper_do(&" + ctxName + ");" + CR; + exec_code = TAB + CR + TAB + "/*start execution*/" + CR + TAB + + "int status;" + CR + TAB + + "mapper_start(&" + ctxName + ");" + CR + TAB + + "status = mapper_wait(&" + ctxName + ");" + CR; init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR + "void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/SumMEC.java b/src/tmltranslator/ctranslator/SumMEC.java index 225c69a0302c2c8114d7615afead47f10143b2b9..ddf2f2df1c49bd4af20c81a712012818acc0194d 100644 --- a/src/tmltranslator/ctranslator/SumMEC.java +++ b/src/tmltranslator/ctranslator/SumMEC.java @@ -53,9 +53,10 @@ public class SumMEC extends FepOperationMEC { public SumMEC( String _ctxName, String inSignalName, String outSignalName ) { name = "Sum MEC"; exec_code = TAB + "/*firm instruction*/" + CR + TAB + + "int status;" + CR + TAB + "fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB + "/*start execution*/" + CR + TAB + - "fep_do(&" + _ctxName + ");" + CR; + "status = fep_do(&" + _ctxName + ");" + CR; init_code = "void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB + diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java index fb895e6207a57e0ed7152fa7c93aa5ce520fd149..e1073c4fb93a2bab986a06686bb29c58d6e654df 100755 --- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java +++ b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java @@ -696,10 +696,10 @@ public class TMLCCodeGeneration { "#include <embb/mapper.h>" + CR + "#include <embb/adaif.h>" + CR + "#include <embb/memory.h>" + CR2 + - "char fep_mss[0x10000];" + CR + - "char adaif_mss[0x10000];" + CR + - "char intl_mss[0x10000];" + CR + - "char mapper_mss[0x10000];" + CR2; + "extern char fep_mss[];" + CR + + "extern char adaif_mss[];" + CR + + "extern char intl_mss[];" + CR + + "extern char mapper_mss[];" + CR2; return s; } @@ -809,6 +809,14 @@ public class TMLCCodeGeneration { for( Signal sig: signalsList ) { s.append( sig.getName() + "," + CR ); } + s.append( postexList.get(0).getName() + "," + CR ); + /*for( Operation op: operationsList ) { + if( op.isPostex() ) { + TraceManager.addDev( "OPERATION: " + op.getName() ); + TraceManager.addDev( "\t\tinSignal = " + op.getInSignals().get(0).getName() ); + } + } + System.exit(0);*/ s.append( "NUM_SIGS };" + CR2 + "enum ops_enu {" + CR ); for( Operation op: operationsList ) { @@ -908,18 +916,20 @@ public class TMLCCodeGeneration { for( Operation op: operationsList ) { if( op.getType() == Operation.SDR ) { - programString.append( generateSDROperation( op, op.getSDRTasks().get( Operation.X_TASK ), op.getSDRTasks().get( Operation.F_TASK ) ) ); + programString.append( generateSDROperation( op ) ); } } } - private String generateSDROperation( Operation op, TMLTask xTask, TMLTask fTask ) { + private String generateSDROperation( Operation op ) { //For SDR operations the xTask is used to retrieve the mapped unit String signalOutName = ""; String signalInName = ""; - String ctxName = op.getContextName(); StringBuffer code = new StringBuffer(); + String ctxName = op.getContextName(); + TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK ); + TMLTask fTask = op.getSDRTasks().get( Operation.F_TASK ); OperationMEC xTaskOperation = xTask.getOperationMEC(); @@ -930,7 +940,10 @@ public class TMLCCodeGeneration { signalInName += sig.getName(); } - code.append( "int op_" + op.getName() + "()\t{" + CR + getTaskAttributes( fTask ) + CR ); + code.append( "int op_" + op.getName() + "()\t{" + CR /*+ getTaskAttributes( fTask )*/ + CR ); + if( op.isPrex() ) { + code.append( TAB + "int status = 0;" + CR ); + } //Mark input signals as false for( Signal sig: op.getInSignals() ) { @@ -1067,6 +1080,7 @@ public class TMLCCodeGeneration { attributes = tmlcplib.getAssignedAttributes(); String name = tmlcplib.getName().split("::")[0]; programString.append( "int op_" + name + "()\t{" + CR ); + programString.append( TAB + "int status = 0;" + CR ); for( Signal sig: dt.getInSignals() ) { programString.append( TAB + "sig[ " + sig.getName() + " ].f = false;" + CR ); @@ -1075,14 +1089,14 @@ public class TMLCCodeGeneration { TraceManager.addDev( "CPMEC: " + cpMEC + "\n" + attributes.toString() ); if( cpMEC instanceof CpuMemoryCopyMEC ) { CpuMemoryCopyMEC mec = new CpuMemoryCopyMEC( ctxName, "", "", "", "" ); - programString.append( mec.getExecCode() ); + programString.append( "/*" + mec.getExecCode() + "*/" ); } if( cpMEC instanceof SingleDmaMEC ) { destinationAddress = attributes.get( SingleDmaMEC.destinationAddressIndex ); sourceAddress = attributes.get( SingleDmaMEC.sourceAddressIndex ); counter = attributes.get( SingleDmaMEC.counterIndex ); SingleDmaMEC mec = new SingleDmaMEC( ctxName, destinationAddress, sourceAddress, counter ); - programString.append( mec.getExecCode() ); + programString.append( "/*" + mec.getExecCode() + "*/" ); } if( cpMEC instanceof DoubleDmaMEC ) { destinationAddress1 = attributes.get( DoubleDmaMEC.destinationAddress1Index ); @@ -1092,7 +1106,7 @@ public class TMLCCodeGeneration { sourceAddress2 = attributes.get( DoubleDmaMEC.sourceAddress2Index ); counter2 = attributes.get( DoubleDmaMEC.counter2Index ); DoubleDmaMEC mec = new DoubleDmaMEC( ctxName, destinationAddress1, sourceAddress1, counter1, destinationAddress2, sourceAddress2, counter2 ); - programString.append( mec.getExecCode() ); + programString.append( "/*" + mec.getExecCode() + "*/" ); } for( Signal sig: dt.getOutSignals() ) { @@ -1171,6 +1185,10 @@ public class TMLCCodeGeneration { String inSignalName, outSignalName; initFileString.append( "#include \"" + applicationName + ".h\"" + CR2 ); initFileString.append( "/**** variables ****/" + CR2 ); + initFileString.append( "char fep_mss[0x10000];" + CR ); + initFileString.append( "char adaif_mss[0x10000];" + CR ); + initFileString.append( "char intl_mss[0x10000];" + CR ); + initFileString.append( "char mapper_mss[0x10000];" + CR ); initFileString.append( buffersAndInstructionsDeclaration( false ) + CR2 ); generateCodeToInitializeBuffers(); generateCodeToInitializeSignals(); @@ -1245,7 +1263,7 @@ public class TMLCCodeGeneration { generateInitRoutinesForCPs(); - initFileString.append( "/**** init contexts ****/" + CR + "void init_operations_context(void)\t{" + CR ); + initFileString.append( "/**** init contexts ****/" + CR + "void init_operations(void)\t{" + CR ); for( Operation op: operationsList ) { if( op.getType() == Operation.SDR ) { TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );