diff --git a/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.cpp b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ebe9946c620d70bf369691398f21d513dda09b96 --- /dev/null +++ b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.cpp @@ -0,0 +1,38 @@ +#include "my_hwa0.h" + +namespace dsx { namespace caba { + + +#define tmpl(...) __VA_ARGS__ MyHWA0 + +tmpl(/**/)::~MyHWA0() +{ +} + +tmpl(/**/)::MyHWA0(sc_core::sc_module_name insname) + :dsx::caba::FifoVirtualCoprocessorWrapper(insname, stringArray("output", NULL), intArray(1, 8), stringArray("input", NULL), intArray(1, 8)) +{ +} + +tmpl(void *)::task_func() { + srl_mwmr_t input = SRL_GET_MWMR(input); + srl_mwmr_t output = SRL_GET_MWMR(output); + + uint32_t in0[8]; + uint32_t in1[8]; + uint32_t out[8]; + + while (true) { + // srl_mwmr_read(input0, &in0, 1); // Read 8 words from input0, i.e. 1 item since the fifo is 8-word wide + //srl_mwmr_read(input1, &in1, 1); // Read 8 words from input1 + srl_mwmr_read(input, &in0, 1); //DG 4.9. corrige + srl_mwmr_read(input, &in1, 1); //DG 4.9. corrige + for (int32_t i = 0; i < 8; i++) { + out[i] = in0[i] + in1[i]; + } + srl_busy_cycles(2); // The computation takes 2 cycles + srl_mwmr_write(output, &out, 1); // Write 8 words to output + } +} + +}} diff --git a/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.h b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.h new file mode 100644 index 0000000000000000000000000000000000000000..918e0c06159019c881d7a98b86d7843657246141 --- /dev/null +++ b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.h @@ -0,0 +1,25 @@ +#ifndef _ADDER_COPRO_H +#define _ADDER_COPRO_H + +#include <systemc> + +#include "fifo_virtual_copro_wrapper.h" + +namespace dsx { namespace caba { + +class MyHWA0 + : public dsx::caba::FifoVirtualCoprocessorWrapper +{ + + public: + ~MyHWA0(); + MyHWA0(sc_core::sc_module_name insname); + + + private: + void * task_func(); // Task code + +}; + +}} +#endif /* _ADDER_COPRO_H */ diff --git a/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.sd b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.sd new file mode 100644 index 0000000000000000000000000000000000000000..28472d3ed755900043f475da78c3e4fe63975ead --- /dev/null +++ b/MPSoC/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial/my_hwa0.sd @@ -0,0 +1,27 @@ +#-*- python -*- + +Module('caba:my_hwa0', + classname = 'dsx::caba::MyHWA0', + header_files = [ + "my_hwa0.h", + + ], + interface_files = [ + ], + implementation_files = [ + "my_hwa0.cpp", + + ], + ports = [ + ], + uses = [ + Uses('caba:fifo_virtual_copro_wrapper'), + ], + instance_parameters = [ + ], + tmpl_parameters = [ + ], + extensions = [ + ], +) + diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java b/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java index b7af805e5967019cb195e92876846850f9d2740c..360ee2b1826baa8c8a03ea966ef825c35bff39e1 100755 --- a/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java +++ b/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java @@ -171,16 +171,17 @@ public class MappingTable { /* Instanciation of the MWMR wrappers for hardware accellerators */ /* The accelerators themselves are specifies on DIPLODOCUS level */ - + int count = l+5; int hwa_count=0; int MWMR_SIZE=4096; int MWMRd_SIZE=12288; // int MWMR_BASE=0xA0200000; i=0; for (AvatarCoproMWMR MWMRwrapper : TopCellGenerator.avatardd.getAllCoproMWMR()) { - mapping += "maptab.add(Segment(\"mwmr_ram"+hwa_count+"\", 0xA0"+ Integer.toHexString(2097152+MWMR_SIZE*i)+", 0x00001000, IntTab("+(l+5+hwa_count)+"), false));" + CR; - //mapping += "maptab.add(Segment(\"mwmrd_ram"+hwa_count+"\", 0xA0"+ Integer.toHexString(2097152+MWMR_SIZE*i)+", 0x00001000, IntTab("+(l+5+hwa_count2)+"), false));" + CR; - hwa_count++; + mapping += "maptab.add(Segment(\"mwmr_ram"+hwa_count+"\", 0xA0"+ Integer.toHexString(2097152+MWMR_SIZE*i)+", 0x00001000, IntTab("+count+"), false));" + CR; + mapping += "maptab.add(Segment(\"mwmrd_ram"+hwa_count+"\", 0x20"+ Integer.toHexString(2097152+MWMRd_SIZE*i)+", 0x00003000, IntTab("+(count+1)+"), false));" + CR; + hwa_count++; + count+=2; } hwa_count=0; diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java b/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java index 5299c2125def2d1157fdf37d45d25b4d8313a73f..75262fe7f6e99bfa0f0201038be4c9c74f90f89c 100755 --- a/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java +++ b/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java @@ -222,18 +222,47 @@ public class NetList { } if(nb_clusters==0){ - /* we can have several TTYs and each is associated to the fdtrom */ - if(icn=="vgmn"){ + // we can have several TTYs and each is associated to the fdtrom + + /* if(icn=="vgmn"){ netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target())+"](signal_vci_vcifdaccesst);" + CR; netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+1)+"](signal_vci_ethernett);" + CR; netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+2)+"](signal_vci_bdt);" + CR; netlist = netlist + "vgmn.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+3)+"](signal_vci_vcilocks);" + CR; - }else{ /* vgsb */ + }else{ //vgsb netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target())+"](signal_vci_vcifdaccesst);" + CR; netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+1)+"](signal_vci_ethernett);" + CR; netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+2)+"](signal_vci_bdt);" + CR; netlist = netlist + "vgsb.p_to_target["+(TopCellGenerator.avatardd.getNb_target()+3)+"](signal_vci_vcilocks);" + CR; - } + }*/ + + int l=8; //number of last tty ToDo + if(icn=="vgmn"){ + netlist = netlist + "vgmn.p_to_target["+(l)+"](signal_vci_vcifdaccesst);" + CR; + netlist = netlist + "vgmn.p_to_target["+(l+1)+"](signal_vci_ethernett);" + CR; + netlist = netlist + "vgmn.p_to_target["+(l+2)+"](signal_vci_bdt);" + CR; + netlist = netlist + "vgmn.p_to_target["+(l+3)+"](signal_vci_vcilocks);" + CR; + int i; + //DG 14.09. + int coproc_count=0; + for(i=0;i<coproc_count;i++){ + + netlist = netlist + "vgmn.p_to_target["+(l+4+i)+"](signal_mwmr_"+i+"_target);" + CR; + } + }else{ //vgsb + netlist = netlist + "vgsb.p_to_target["+(l)+"](signal_vci_vcifdaccesst);" + CR; + netlist = netlist + "vgsb.p_to_target["+(l+1)+"](signal_vci_ethernett);" + CR; + netlist = netlist + "vgsb.p_to_target["+(l+2)+"](signal_vci_bdt);" + CR; + netlist = netlist + "vgsb.p_to_target["+(l+3)+"](signal_vci_vcilocks);" + CR; + + //DG 14.09. + int coproc_count=0; + int i; + for(i=0;i<coproc_count;i++){ + netlist = netlist + "vgmn.p_to_target["+(l+4+i)+"](signal_mwmr_"+i+"_target);" + CR; + } + } + }else{ /* cluster case */ if(icn=="vgmn"){ @@ -340,6 +369,8 @@ public class NetList { ////////////////MWMR controller; hypothesis 1 per coprocessor // if(nb_cluster == 0){ i=0; + int coproc_count=0; + for (AvatarCoproMWMR copro : TopCellGenerator.avatardd.getAllCoproMWMR()){ //a coprocessor with its FIFO interface built from HWA netlist = netlist +"hwa"+i+".p_clk(signal_clk);" + CR; @@ -358,6 +389,7 @@ netlist = netlist +copro.getCoprocName() +".p_to_coproc["+i+"](signal_fifo_"+i+" // netlist = netlist +copro.getCoprocName() +".status();" + CR; // netlist = netlist +copro.getCoprocName() +".config();" + CR; i++; +coproc_count++; } diff --git a/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSConnection.java b/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSConnection.java index 20c538e520dbc623d09b5b5b0503cbaa3180ae65..1d3961178b432a319805925dd62652b2361b01dc 100755 --- a/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSConnection.java +++ b/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSConnection.java @@ -62,16 +62,16 @@ public class CAMSConnection{ public int rate; public int type; - public CAMSConnection(CAMSBlocks _inputBlock, CAMSBlock _outputBlock){ + public CAMSConnection(CAMSBlocks _inputBlock, CAMSBlocks _outputBlock){ inputBlock = _inputBlock; outputBlock = _outputBlock; } - public CAMSBlock getInputBlock(){ + public CAMSBlocks getInputBlock(){ return inputBlock; } - public CAMSBlock getOutputBlock(){ + public CAMSBlocks getOutputBlock(){ return outputBlock; } diff --git a/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSSpecification.java b/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSSpecification.java index 68829e26f1a9dbe4783acdf22988c001b4a3bc7c..d3e55540753afdb04f5d364351c794d1594f4d44 100755 --- a/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSSpecification.java +++ b/src/main/java/heterogeneoustranslator/systemCAMStranslator/CAMSSpecification.java @@ -52,6 +52,7 @@ import java.util.List; public class CAMSSpecification{ + public int nb_target, nb_init; private List<CAMSBlocks> blocks; private List<CAMSSignal> signals; @@ -66,11 +67,11 @@ public class CAMSSpecification{ nb_init = _nb_init; } - public List<CAMSBlock> getBlock(){ + public List<CAMSBlocks> getBlock(){ return blocks; } - public List<CAMSSignals> getSignals(){ + public List<CAMSSignal> getSignals(){ return signals; } @@ -79,9 +80,9 @@ public class CAMSSpecification{ } public List<CAMSBlocks> getUnconnectedBlocks(){ - List<CAMSBlocks> unconnectedBlocks; + /* List<CAMSBlocks> unconnectedBlocks; for(CAMSBlocks block : blocks){ - for(CAMSConnections connection : connections){ + for(CAMSConnection connection : connections){ if (block == connection.getInputBlock() || block == connection.getOutputBlock()){ break; } @@ -90,13 +91,11 @@ public class CAMSSpecification{ } } } - return unconnectedBlocks; + return unconnectedBlocks;*/ } - public list<CAMSSignals> getunconnectedSignals(){ - list<CAMSSignals> unconnectedSignals; + public List<CAMSSignal> getunconnectedSignals(){ + /* List<CAMSSignal> unconnectedSignals;*/ return unconnectedSignals; } - - }