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