From 7f68e4eb273b581a250fd9aa6cd6a90cc330a52c Mon Sep 17 00:00:00 2001
From: Andrea Enrici <andrea.enrici@nokia.com>
Date: Thu, 19 Feb 2015 17:26:09 +0000
Subject: [PATCH] added MEC for dma and load store

---
 src/Ctranslator/CPMEC.java              | 12 ++++
 src/Ctranslator/CpuLoadMEC.java         | 44 ++++----------
 src/Ctranslator/CpuStoreMEC.java        | 46 ++++-----------
 src/Ctranslator/CwlMEC.java             | 58 +++++++++----------
 src/Ctranslator/DmaMEC.java             | 33 +++++------
 src/Ctranslator/FftMEC.java             |  2 +-
 src/Ctranslator/InterleaverMEC.java     | 32 +++++-----
 src/Ctranslator/MapperMEC.java          | 22 +++----
 src/Ctranslator/Signal.java             |  3 +-
 src/Ctranslator/TMLCCodeGeneration.java | 77 ++++++++++++++++++++++---
 src/ui/GTURTLEModeling.java             |  2 +-
 11 files changed, 176 insertions(+), 155 deletions(-)

diff --git a/src/Ctranslator/CPMEC.java b/src/Ctranslator/CPMEC.java
index 6616c0c2af..1ad89f2896 100755
--- a/src/Ctranslator/CPMEC.java
+++ b/src/Ctranslator/CPMEC.java
@@ -69,6 +69,18 @@ public abstract class CPMEC	{
 		node_type = "1";
 	}
 
+	public String getExecCode()	{
+		return exec_code;
+	}
+
+	public String getInitCode()	{
+		return init_code;
+	}
+
+	public String getCleanupCode()	{
+		return cleanup_code;
+	}
+
 	public String toString()	{
 		return node_type + CR + inst_decl + CR + inst_type + CR + buff_type + CR + buff_init + CR + exec_code + CR + init_code + CR + messages_code + CR + attributes_code + CR + cleanup_code;
 	}
diff --git a/src/Ctranslator/CpuLoadMEC.java b/src/Ctranslator/CpuLoadMEC.java
index f4a674ec6e..7fdf580190 100644
--- a/src/Ctranslator/CpuLoadMEC.java
+++ b/src/Ctranslator/CpuLoadMEC.java
@@ -47,44 +47,20 @@
 package Ctranslator;
 
 import java.util.*;
-//import Ctranslator.*;
 
 public class CpuLoadMEC extends CPMEC	{
 
+	protected String addr = "";
+
 	public CpuLoadMEC()	{
-		node_type = "FEP";
-		inst_type = "SUM";
-		inst_decl = "FEP_CONTEXT";
-		buff_type = "FEP_BUFF_TYPE";
-		buff_init = "= {/*l,b,q,t*/};";
-		exec_code = "/*firm instruction*/" + CR +
-			" fep_set_qx(&$XOP$,((FEP_BUFF_TYPE*)sig[$ID0$].pBuff)->q);" + CR +
-			"/*start execution*/" + CR +
-			"fep_start(&$XOP$);" + CR;
-		
-		init_code ="/***** INIT $XOP$ *******/" + CR +
-			"void init_$XOP$(void){" + CR +
-			" fep_ctx_init(&$XOP$,0);" + CR +
-			" // initialize context" + CR +
-			" fep_set_op(&$XOP$,FEP_OP_MOV);" + CR +
-			" fep_set_r(&$XOP$, /*USER TODO*/);" + CR +
-			" fep_set_l(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_bx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_qx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_wx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_tx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_sx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_nx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_mx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_px(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_dx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_vrx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_vix(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_sma(&$XOP$,2);" + CR +
-			" fep_set_qs(&$XOP$,((FEP_BUFF_TYPE*)sig[$OD0$].pBuff)->q);" + CR +
-			" fep_set_bs(&$XOP$,((FEP_BUFF_TYPE*)sig[$OD0$].pBuff)->b);" + CR +
-			"}" + CR;
-		cleanup_code = "fep_ctx_cleanup(&$XOP$);";
+		node_type = "CPU";
+		inst_type = "LOAD";
+		inst_decl = "VOID";
+		buff_type = "MM_BUFF_TYPE";
+		buff_init = "VOID";
+		exec_code = "embb_mem_read_32( uint32_t " + addr + " );";
+		init_code = "VOID";
+		cleanup_code = "VOID";
 	}
 
 }	//End of class
diff --git a/src/Ctranslator/CpuStoreMEC.java b/src/Ctranslator/CpuStoreMEC.java
index eb3ae23fa9..cfe767c9c5 100644
--- a/src/Ctranslator/CpuStoreMEC.java
+++ b/src/Ctranslator/CpuStoreMEC.java
@@ -47,44 +47,20 @@
 package Ctranslator;
 
 import java.util.*;
-//import Ctranslator.*;
 
 public class CpuStoreMEC extends CPMEC	{
 
+	protected String addr = "";
+	protected String word = "";
+
 	public CpuStoreMEC()	{
-		node_type = "FEP";
-		inst_type = "SUM";
-		inst_decl = "FEP_CONTEXT";
-		buff_type = "FEP_BUFF_TYPE";
-		buff_init = "= {/*l,b,q,t*/};";
-		exec_code = "/*firm instruction*/" + CR +
-			" fep_set_qx(&$XOP$,((FEP_BUFF_TYPE*)sig[$ID0$].pBuff)->q);" + CR +
-			"/*start execution*/" + CR +
-			"fep_start(&$XOP$);" + CR;
-		
-		init_code ="/***** INIT $XOP$ *******/" + CR +
-			"void init_$XOP$(void){" + CR +
-			" fep_ctx_init(&$XOP$,0);" + CR +
-			" // initialize context" + CR +
-			" fep_set_op(&$XOP$,FEP_OP_MOV);" + CR +
-			" fep_set_r(&$XOP$, /*USER TODO*/);" + CR +
-			" fep_set_l(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_bx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_qx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_wx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_tx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_sx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_nx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_mx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_px(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_dx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_vrx(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_vix(&$XOP$,/*USER TODO*/);" + CR +
-			" fep_set_sma(&$XOP$,2);" + CR +
-			" fep_set_qs(&$XOP$,((FEP_BUFF_TYPE*)sig[$OD0$].pBuff)->q);" + CR +
-			" fep_set_bs(&$XOP$,((FEP_BUFF_TYPE*)sig[$OD0$].pBuff)->b);" + CR +
-			"}" + CR;
-		cleanup_code = "fep_ctx_cleanup(&$XOP$);";
+		node_type = "CPU";
+		inst_type = "STORE";
+		inst_decl = "VOID";
+		buff_type = "MM_BUFF_TYPE";
+		buff_init = "VOID";
+		exec_code = "embb_mem_write_32( uint32_t " + addr + ", uint32_t " + word + ");";
+		init_code = "VOID";
+		cleanup_code = "VOID";
 	}
-
 }	//End of class
diff --git a/src/Ctranslator/CwlMEC.java b/src/Ctranslator/CwlMEC.java
index 77375bdb4f..0bfc772538 100755
--- a/src/Ctranslator/CwlMEC.java
+++ b/src/Ctranslator/CwlMEC.java
@@ -59,40 +59,40 @@ public class CwlMEC extends TaskMEC	{
 		buff_type = "FEP_BUFF_TYPE";
 		buff_init = "= {/*l,b,q,t*/};";
 		exec_code = "/*firm instruction*/" + CR +
-			" fep_set_l(&" + XOP + ", ((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->l);" + CR +
-			" fep_set_qx(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->q);" + CR +
-			" fep_set_bx(&" + XOP + ",sig[" + ID0 + "].roff + ((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->b);" + CR +
-			" fep_set_tx(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->t);" + CR +
-			" fep_set_qz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->q);" + CR +
-			" fep_set_bz(&" + XOP + ",sig[" + OD0 + "].woff + ((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->b);" + CR +
-			" fep_set_tz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->t);" + CR +
+			"fep_set_l(&" + XOP + ", ((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->l);" + CR +
+			"fep_set_qx(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->q);" + CR +
+			"fep_set_bx(&" + XOP + ",sig[" + ID0 + "].roff + ((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->b);" + CR +
+			"fep_set_tx(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + ID0 + "].pBuff)->t);" + CR +
+			"fep_set_qz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->q);" + CR +
+			"fep_set_bz(&" + XOP + ",sig[" + OD0 + "].woff + ((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->b);" + CR +
+			"fep_set_tz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->t);" + CR +
 			"/*start execution*/" + CR +
 			"fep_start(&" + XOP + ");" + CR;
 	
 		init_code ="/***** INIT " + XOP + " *******/" + CR +
 			"void init_" + XOP + "(void){" + CR +
-			" fep_ctx_init(&" + XOP + ",0);" + CR +
-			" // initialize context" + CR +
-			" fep_set_op(&" + XOP + ",FEP_OP_CWL );" + CR +
-			" fep_set_r(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_l(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->l);" + CR +
-			" fep_set_wx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_sx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_nx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_mx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_px(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_dx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_vrx(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_vix(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_qz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->q);" + CR +
-			" fep_set_bz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->b);" + CR +
-			" fep_set_tz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->t);" + CR +
-			" fep_set_wz(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_ri(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_sz(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_nz(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_mz(&" + XOP + ",/*USER TODO*/);" + CR +
-			" fep_set_sma(&" + XOP + ",1);" + CR +
+			"fep_ctx_init(&" + XOP + ",0);" + CR +
+			"// initialize context" + CR +
+			"fep_set_op(&" + XOP + ",FEP_OP_CWL );" + CR +
+			"fep_set_r(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_l(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->l);" + CR +
+			"fep_set_wx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_sx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_nx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_mx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_px(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_dx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_vrx(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_vix(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_qz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->q);" + CR +
+			"fep_set_bz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->b);" + CR +
+			"fep_set_tz(&" + XOP + ",((FEP_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->t);" + CR +
+			"fep_set_wz(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_ri(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_sz(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_nz(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_mz(&" + XOP + ",/*USER TODO*/);" + CR +
+			"fep_set_sma(&" + XOP + ",1);" + CR +
 			"}" + CR;
 		cleanup_code = "fep_ctx_cleanup(&" + XOP + ");";
 	}
diff --git a/src/Ctranslator/DmaMEC.java b/src/Ctranslator/DmaMEC.java
index 80c90a87b4..1a65249411 100755
--- a/src/Ctranslator/DmaMEC.java
+++ b/src/Ctranslator/DmaMEC.java
@@ -47,31 +47,28 @@
 package Ctranslator;
 
 import java.util.*;
-//import Ctranslator.*;
 
-/* This is the code from Jair MEC. It refers to old drivers. So far I am just interested in the proof of concepts of generating
- * code. */
 public class DmaMEC extends CPMEC	{
 
-	public DmaMEC()	{
+	protected String src_dev = "NULL";
+	protected String dma_dev;
 
+	public DmaMEC( String name, String ctx, String src_address, String dst_address, String data_amount, String dst_dev )	{
+
+		dma_dev = dst_dev;
 		node_type = "DMA";
-		inst_type = "I2M";
-		inst_decl = "DMA_CONTEXT";
+		inst_type = "VOID";
+		inst_decl = "EMBB_DMA_CONTEXT";
 		buff_type = "MM_BUFF_TYPE";
-		buff_init = "= {/*bl*/,$OD0$_dat};";
+		buff_init = "VOID";
 		exec_code = "/*firm instruction*/" + CR +
-			" dma_set_loc(&$XOP$, sig[$ID0$].roff * (((FEP_BUFF_TYPE*)sig[$ID0$].pBuff)->t+1) + ((FEP_BUFF_TYPE*)sig[$ID0$].pBuff)->b + ((FEP_BUFF_TYPE*)sig[$ID0$].pBuff)->q * FEP_QSIZE );" + CR +
-			" dma_set_mem(&$XOP$, sig[$OD0$].woff*4 + ((MM_BUFF_TYPE*)sig[$OD0$].pBuff)->b);" + CR +
-			" dma_set_bsize(&$XOP$, ((MM_BUFF_TYPE*)sig[$OD0$].pBuff)->bl );" + CR +
-			"dma_start_i2m(&$XOP$);" + CR;	
-			init_code = "/***** INIT $XOP$ I2M*******/" + CR +
-			"void init_$XOP$(void){" + CR +
-			" dma_ctx_init(&$XOP$, 0);" + CR +
-			" /* initialize context*/" + CR +
-			" dma_set_mem(&$XOP$, ((MM_BUFF_TYPE*)sig[$OD0$].pBuff)->b);" + CR +
-			"}" + CR;
-		cleanup_code = "dma_ctx_cleanup(&$XOP$);";
+								"embb_dma_start(&" + ctx + ", " + src_address + ", " + dst_address + ", " + data_amount + ");" + CR;	
+
+		init_code = "/***** INIT DMA*******/" + CR +
+								"void init_"  + name + "( void )\t{" + CR +
+								"embb_dma_ctx_init(&" + ctx + ", &" + dma_dev + ", &" + dst_dev + ", &" + src_dev + ");" + CR +
+								"}" + CR;
+		cleanup_code = "embb_dma_ctx_cleanup(&" + ctx + ");";
 	}
 
 }	//End of class
diff --git a/src/Ctranslator/FftMEC.java b/src/Ctranslator/FftMEC.java
index 6765736343..e6d90bad34 100644
--- a/src/Ctranslator/FftMEC.java
+++ b/src/Ctranslator/FftMEC.java
@@ -54,7 +54,7 @@ public class FftMEC extends TaskMEC	{
 	public FftMEC( String XOP, String ID0, String OD0, String BTC )	{
 		node_type = "FEP";
 		inst_type = "FFT";
-		inst_decl = "FEP_CONTEXT";
+		inst_decl = "embb_fep_context";
 		buff_type = "FEP_BUFF_TYPE";
 		buff_init = "= {/*l,b,q,t*/};";
 		exec_code = "/*firm instruction*/" + CR +
diff --git a/src/Ctranslator/InterleaverMEC.java b/src/Ctranslator/InterleaverMEC.java
index d6afa3b587..1c3ebee281 100644
--- a/src/Ctranslator/InterleaverMEC.java
+++ b/src/Ctranslator/InterleaverMEC.java
@@ -64,22 +64,22 @@ public class InterleaverMEC extends TaskMEC	{
 		init_code ="/***** INIT " + XOP + " *******/" + CR +
 			"void init_" + XOP + "( void )\t{" + CR + TAB +
 			"intl_ctx_init(/* TODO */);" + CR + TAB +
-			"intl_set_sv( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_arm( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_re( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_se( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_fe( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_pbo( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_pbi( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_widm1( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_biof( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_boof( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_fz( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_fo( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_iof( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_oof( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_pof( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"intl_set_lenm1( ((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_sv( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_arm( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_re( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_se( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_fe( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_pbo( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_pbi( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_widm1( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_biof( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_boof( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_fz( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_fo( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_iof( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_oof( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_pof( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"intl_set_lenm1( (((INTL_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
 			"}" + CR;
 		cleanup_code = "intl_ctx_cleanup( /*TODO*/ );";
 	}
diff --git a/src/Ctranslator/MapperMEC.java b/src/Ctranslator/MapperMEC.java
index c779a143f4..1c75bcdaff 100644
--- a/src/Ctranslator/MapperMEC.java
+++ b/src/Ctranslator/MapperMEC.java
@@ -64,17 +64,17 @@ public class MapperMEC extends TaskMEC	{
 		init_code ="/***** INIT " + XOP + " *******/" + CR +
 			"void init_" + XOP + "( void )\t{" + CR + TAB +
 			"mapper_ctx_init(/* TODO */);" + CR + TAB +
-			"mapper_set_lenm1( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_lba( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_oba( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_iba( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_mult( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_men( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_sym( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_bpsm1( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_m( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_n( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
-			"mapper_set_s( ((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_lenm1( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_lba( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_oba( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_iba( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_mult( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_men( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_sym( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_bpsm1( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_m( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_n( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
+			"mapper_set_s( (((MAPPER_BUFF_TYPE*)sig[" + OD0 + "].pBuff)->base_address), (uint64_t)/*USER TODO*/ );" + CR + TAB +
 			"}" + CR;
 		cleanup_code = "mapper_ctx_cleanup(/* TODO */);";
 	}
diff --git a/src/Ctranslator/Signal.java b/src/Ctranslator/Signal.java
index 2ee9fa793a..e84a310f0c 100755
--- a/src/Ctranslator/Signal.java
+++ b/src/Ctranslator/Signal.java
@@ -62,7 +62,8 @@ public class Signal	{
 	private String code = "";
 	
 	public Signal()	{
-		code = "struct SIG_TYPE	{" + CR + status + writeOffset + readOffset + buffPointer + "};	typedef struct SIG_TYPE SIG_TYPE;";
+		code = 	"struct SIG_TYPE	{" + CR + status + writeOffset + readOffset + buffPointer + "};" + CR +
+						"typedef struct SIG_TYPE SIG_TYPE;";
 	}
 
 	public String toString()	{
diff --git a/src/Ctranslator/TMLCCodeGeneration.java b/src/Ctranslator/TMLCCodeGeneration.java
index a59a6e3eb2..41254c03b5 100755
--- a/src/Ctranslator/TMLCCodeGeneration.java
+++ b/src/Ctranslator/TMLCCodeGeneration.java
@@ -71,6 +71,7 @@ public class TMLCCodeGeneration	{
 
 	private TMLMapping tmap;
 	private TMLModeling tmlm;
+	private TMLArchitecture tmla;
 	private String applicationName;
 	private String mainFile;
 	private String headerString;
@@ -101,10 +102,11 @@ public class TMLCCodeGeneration	{
 		commElts = new ArrayList<TMLElement>();
 	}
 
-	public void toTextFormat( TMLMapping _tmap , TMLModeling _tmlm )	{
+	public void toTextFormat( TMLMapping _tmap , TMLModeling _tmlm, TMLArchitecture _tmla )	{
 
 		tmap = _tmap;
 		tmlm = _tmlm;
+		tmla = _tmla;
 
 		ArrayList<TMLTask> mappedTasks = tmap.getMappedTasks();
 		ArrayList<TMLElement> commElts = tmap.getMappedCommunicationElement();
@@ -147,7 +149,8 @@ public class TMLCCodeGeneration	{
 
 		headerString += libraries();
 		headerString += prototypes();
-		headerString += buffers();
+		headerString += variablesInMainFile();
+		headerString += buffers( true );
 		headerString += instructions( mappedTasks );
 		headerString += signals();
 		headerString += variables();
@@ -177,13 +180,56 @@ public class TMLCCodeGeneration	{
 		return s;
 	}
 
-	private String buffers()	{
-		String s = "/**** Buffers *****/" + CR2;
+	private String variablesInMainFile()	{
+		String s = "extern int g_r_size;" + CR +
+								"extern int g_Ns;" + CR +
+								"extern int g_Fi" + CR +
+								"extern int g_Li" + CR +
+								"extern char *src_out_dat;" + CR +
+								"extern char *dma1_out_dat;" + CR2;
+		return s;
+	}
+
+	private String buffers( boolean declaration )	{
+
+		TMLTask xTask, fTask;
+		String s = "/**** Buffers *****/" + CR;
+		for( Operation op: operationsList )	{
+			if( op.getType() == Operation.SDR )	{
+				xTask = op.getSDRTasks().get( Operation.X_TASK );
+				fTask = op.getSDRTasks().get( Operation.F_TASK );
+				String name = tmap.getHwNodeOf( xTask ).getName();
+				if( name.contains( "FEP" ) )	{
+					if( declaration )	{
+						s += "extern FEP_BUFFER_TYPE " + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+					else	{
+						s += "FEP_BUFFER_TYPE " + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+				}
+				else if( name.contains( "MAPPER" ) )	{
+					if( declaration )	{
+						s += "extern MAPPER_BUFFER_TYPE " + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+					else	{
+						s += "MAPPER_BUFFER_TYPE " + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+				}
+				else if( name.contains( "INTL" ) )	{
+					if( declaration )	{
+						s += "extern INTL_BUFFER_TYPE" + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+					else	{
+						s += "INTL_BUFFER_TYPE" + "buff_" + xTask.getName().split("__")[1] + ";" + CR;
+					}
+				}
+			}
+		}
 		return s;
 	}
 
 	private String instructions( ArrayList<TMLTask> mappedTasks )	{
-		String s = 	"/**** Instructions *****/" + CR;
+		String s = 	CR + "/**** Instructions *****/" + CR;
 		for( String s1: getTaskNamePerMappedUnit( "FEP", mappedTasks ) )	{
 			s += "extern embb_fep_context " + s1 + ";" + CR;
 		}
@@ -758,9 +804,15 @@ public class TMLCCodeGeneration	{
 
 		initString += "#include \"" + applicationName + "_final.h\"" + CR2;
 
-		initString += "/**** variables ****/" + CR2;
+		initString += "/**** variables ****/" + CR2 +
+									"int g_r_size = 10240;" + CR +
+									"int g_Ns = 1024;" + CR +
+									"int g_Fi = 593;" + CR +
+									"int g_Li = 116;" + CR +
+									"char *src_out_dat;" + CR +
+									"char *dma1_out_dat;" + CR2;
 		
-		initString += "/**** buffers ****/" + CR2;
+		initString += buffers( false ) + CR2;
 
 		initString += "/**** instructions ****/" + CR;
 		for( String s: getTaskNamePerMappedUnit( "FEP", mappedTasks ) )	{
@@ -776,8 +828,8 @@ public class TMLCCodeGeneration	{
 		}
 		initString += CR;
 
-		initString += "/**** init buffers ****/" + CR +
-									"void " + applicationName + "_final_init()\t{" + CR + "}" + CR2;
+		initString += initializeApplication() + CR2;
+
 		initString += initializeSignals() + CR;
 
 		initString += "/**** init code ****/" + CR;
@@ -858,6 +910,13 @@ public class TMLCCodeGeneration	{
 		initString += "}";
 	}
 
+	private String initializeApplication()	{
+
+		String s = "void " + applicationName + "_final_init()\t{" + CR;
+		s += "}" + CR2;
+		return s;
+	}
+
 	private String initializeSignals()	{
 		String s = "void signal_to_buffer_init()\t{" + CR;
 		for( int i = 0; i < signalsCounter; i++ )	{
diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java
index 3c5380b85c..89dcf871f1 100755
--- a/src/ui/GTURTLEModeling.java
+++ b/src/ui/GTURTLEModeling.java
@@ -417,7 +417,7 @@ public class GTURTLEModeling {
 		String applicationName = tmap.getMappedTasks().get(0).getName().split("__")[0];
 
 		TMLCCodeGeneration myCode = new TMLCCodeGeneration( _title, applicationName, mgui.frame );
-		myCode.toTextFormat( tmap, tmap.getTMLModeling() );
+		myCode.toTextFormat( tmap, tmap.getTMLModeling(), tmap.getTMLArchitecture() );
 
 		try {
 		    myCode.saveFile( ConfigurationTTool.CcodeDirectory + File.separator, applicationName );
-- 
GitLab