From 89bd05cbfc592fb0f028356f2cc6b978e9d0f9ab Mon Sep 17 00:00:00 2001 From: Daniela Genius <Daniela.Genius@lip6.fr> Date: Mon, 29 Aug 2016 15:11:54 +0000 Subject: [PATCH] rewritten mapping table generation --- .../toTopCell/MappingTable.java | 173 +++++++++++------- 1 file changed, 102 insertions(+), 71 deletions(-) diff --git a/src/ddtranslatorSoclib/toTopCell/MappingTable.java b/src/ddtranslatorSoclib/toTopCell/MappingTable.java index 17481e7835..17d2b016aa 100755 --- a/src/ddtranslatorSoclib/toTopCell/MappingTable.java +++ b/src/ddtranslatorSoclib/toTopCell/MappingTable.java @@ -60,19 +60,18 @@ public class MappingTable { /* here we have a loop over the CHANNEL segments specified in the deployment diagram and we calculate their addresses in a loop; more refined methods may be proposed later */ int j=0; - //int k=0; - if(TopCellGenerator.avatardd.getAllCrossbar().size()==0){ + //if(TopCellGenerator.avatardd.getAllCrossbar().size()==0){ for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { /* Boot Ram segments 0,1,2 */ if(ram.getNo_ram() ==0){ ram.setNo_target(2);//in the following assign target number 2 - mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0000000, 0x00100000, IntTab("+(ram.getNo_target())+"), false));" + CR; + mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0000000, 0x00100000, IntTab("+(ram.getNo_target())+"), true));" + CR; mapping += "maptab.add(Segment(\"uram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0200000, 0x00100000, IntTab("+(ram.getNo_target())+"), false));" + CR; } else{ ram.setNo_target(7+j); - mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0000000, 0x00100000, IntTab("+(ram.getNo_target())+"), false));" + CR; + mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0000000, 0x00100000, IntTab("+(ram.getNo_target())+"), true));" + CR; mapping += "maptab.add(Segment(\"uram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0200000, 0x00100000, IntTab("+(ram.getNo_target())+"), false));" + CR; j++; } @@ -90,96 +89,128 @@ public class MappingTable { m++; l=tty.getNo_target(); } - } - - else{ - /* clustered version */ - for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { - mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0000000, 0x00100000, IntTab("+ram.getNo_cluster()+","+(ram.getNo_target()+2)+"), false));" + CR; - mapping += "maptab.add(Segment(\"uram" + ram.getNo_ram() + "\", 0x" +(ram.getNo_ram()+1)+ "0200000, 0x00100000, IntTab("+ram.getNo_cluster()+","+(ram.getNo_target()+2)+"), false));" + CR; - } - - int m=0; - for (AvatarTTY tty : TopCellGenerator.avatardd.getAllTTY()) { - /* we calculate the target number of one or several (multi-) ttys which come after the j rams and the 7 compulsory targets */ - tty.setNo_target(7+j); - /* we use a simple formula for calculating the TTY address in case of multiple (multi-) ttys */ - /* only one tty per cluster currently */ - // mapping += "maptab.add(Segment(\"vci_multi_tty\" , 0xd"+tty.getNo_tty()+"200000, 0x00000010, IntTab("+m+","+tty.getNo_target() +"), false));" + CR; - mapping += "maptab.add(Segment(\"vci_multi_tty"+m+"\", 0xe"+(m+1)+"200000, 0x00000010, IntTab("+m+","+tty.getNo_target() +"), false));" + CR; - j++; - m++; - l=tty.getNo_target(); - } - } - + // } mapping = mapping + "maptab.add(Segment(\"vci_fd_access\", 0xd4200000, 0x00000100, IntTab("+(l+1)+"), false));" + CR; mapping = mapping + "maptab.add(Segment(\"vci_ethernet\", 0xd5000000, 0x00000020, IntTab("+(l+2)+"), false));" + CR; mapping = mapping + "maptab.add(Segment(\"vci_block_device\", 0xd1200000, 0x00000020, IntTab("+(l+3)+"), false));" + CR2; mapping = mapping + "maptab.add(Segment(\"vci_locks\", 0xC0200000, 0x00000100, IntTab("+(l+4)+"), false));" + CR2; -mapping = mapping + "maptab.add(Segment(\"mwmr_ram\", 0xA0200000, 0x00001000, IntTab("+(l+5)+"), false));" + CR2; -mapping = mapping + "maptab.add(Segment(\"mwmrd_ram\", 0xB0200000, 0x00003000, IntTab("+(l+6)+"), false));" + CR2; - + // mapping = mapping + "maptab.add(Segment(\"mwmr_ram\", 0xA0200000, 0x00001000, IntTab("+(l+5)+"), false));" + CR2; + //mapping = mapping + "maptab.add(Segment(\"mwmrd_ram\", 0xB0200000, 0x00003000, IntTab("+(l+6)+"), false));" + CR2; + + //DG 29.08. + // mapping = mapping + "maptab.add(Segment(\"cram\", 0xA0200000, 0x00001000, IntTab("+(l+5)+"), true));" + CR2; + //mapping = mapping + "maptab.add(Segment(\"uram\", 0xB0200000, 0x00003000, IntTab("+(l+6)+"), false));" + CR2; + return mapping; } + + + /////////////////////////////////////////////////////////////////////////////////////////////////// + // Mapping Table // + // There are 4 replicated segments in each cluster, and 8 single (not replicated) segments. // + // - Peripheral single segments (rom, ramdac, tg) are mapped in the cluster_rom and cluster_io. // + // - RAM single segments are mapped in each cluster at the first addresse of the cluster. // + // - Peripherals replicated segments (timer, icu, dma) are replicated in each cluster. // + /////////////////////////////////////////////////////////////////////////////////////////////////// + + /* MappingTable maptab(32, IntTab(8,4), IntTab(8,4), 0xFFFF0000); + + maptab.add(Segment("seg_ie" , SEG_IE_BASE , SEG_IE_SIZE , IntTab(cluster_io , TGTID_IE), false)); + maptab.add(Segment("seg_oe", SEG_OE_BASE, SEG_OE_SIZE, IntTab(cluster_io , TGTID_OE), false)); + maptab.add(Segment("seg_tty" , SEG_TTY_BASE , SEG_TTY_SIZE , IntTab(cluster_io , TGTID_TTY), false)); + maptab.add(Segment("seg_reset" , SEG_RESET_BASE , SEG_RESET_SIZE , IntTab(cluster_rom, tgtid_rom), true)); + + for (size_t c = 0; c < nc; c++) { + uint32_t ram_base = SEG_RAM_BASE + c * CLUSTER_SIZE; + uint32_t ram_size = SEG_RAM_SIZE; + std::ostringstream seg_ram_name; + seg_ram_name << "seg_ram_" << c; + maptab.add(Segment(seg_ram_name.str(), ram_base, ram_size, IntTab(c, TGTID_RAM), true)); + + uint32_t timer_base = SEG_TIM_BASE + c * CLUSTER_SIZE; + uint32_t timer_size = SEG_TIM_SIZE; + std::ostringstream seg_timer_name; + seg_timer_name << "seg_timer_" << c; + maptab.add(Segment(seg_timer_name.str(), timer_base, timer_size, IntTab(c, TGTID_TIM), true)); + + uint32_t icu_base = SEG_ICU_BASE + c * CLUSTER_SIZE; + uint32_t icu_size = SEG_ICU_SIZE; + std::ostringstream seg_icu_name; + seg_icu_name << "seg_icu_" << c; + maptab.add(Segment(seg_icu_name.str(), icu_base, icu_size, IntTab(c, TGTID_ICU), false)); */ + else{ - //clustered version - mapping = CR2 + "//-----------------------mapping table------------------------" + CR2; - mapping = mapping + "// ppc segments" + CR2; + /* clustered version */ - mapping = mapping + "maptab.add(Segment(\"resetppc\", 0xffffff80, 0x0080, IntTab(0,1), true));" + CR; + mapping = CR2 + "maptab.add(Segment(\"resetppc\", 0xffffff80, 0x0080, IntTab(0,1), true));" + CR; mapping = mapping + "maptab.add(Segment(\"resetnios\", 0x00802000, 0x1000, IntTab(0,1), true));" + CR; mapping = mapping + "maptab.add(Segment(\"resetzero\", 0x00000000, 0x1000, IntTab(0,1), true));" + CR; mapping = mapping + "maptab.add(Segment(\"resetmips\", 0xbfc00000, 0x1000, IntTab(0,1), true));" + CR; - mapping += CR2 + "// RAM shared segments" + CR2; + mapping += CR2 + "// RAM shared segments on cluster 0" + CR2; mapping += "maptab.add(Segment(\"text\", 0x60000000, 0x00100000, IntTab(0,0), true));" + CR; mapping += "maptab.add(Segment(\"rodata\", 0x80000000, 0x01000000, IntTab(0,1), true));" + CR; mapping += "maptab.add(Segment(\"data\", 0x7f000000, 0x01000000, IntTab(0,2), false)); " + CR2; - - mapping = mapping + "maptab.add(Segment(\"simhelper\", 0xd3200000, 0x00000100, IntTab(0,3), false));" + CR; - mapping = mapping + " maptab.add(Segment(\"vci_xicu\", 0xd2200000, 0x00001000, IntTab(0,4), false));" + CR; - mapping = mapping + "maptab.add(Segment(\"vci_rttimer\", 0xd6000000, 0x00000100, IntTab(0,5), false));" + CR2; + mapping = mapping + "maptab.add(Segment(\"simhelper\", 0xd3200000, 0x00000100, IntTab(0,3), false));" + CR; mapping = mapping + "maptab.add(Segment(\"vci_fdt_rom\", 0xe0000000, 0x00001000, IntTab(0,6), false));" + CR2; - - //fixed adresses also for the following hidden components, all in cluster 0 exclusively mapping = mapping + "maptab.add(Segment(\"vci_fd_access\", 0xd4200000, 0x00000100, IntTab(0,7), false));" + CR; mapping = mapping + "maptab.add(Segment(\"vci_ethernet\", 0xd5000000, 0x00000020, IntTab(0,8), false));" + CR; mapping = mapping + "maptab.add(Segment(\"vci_block_device\", 0xd1200000, 0x00000020, IntTab(0,9), false));" + CR2; - int j=0; int c; - for (AvatarChannel channel : TopCellGenerator.avatardd.getAllMappedChannels()) { - //we need to know on which cluster the channel is mapped - mapping += "maptab.add(Segment(\"channel" + j+ "\", 0x" + channel.getNo_cluster() + "f000000, 0x00100000, IntTab("+channel.getNo_cluster()+","+channel.getRAMNo()+"), false));" + CR; - j++; - } - - // DG 24.08. mettre a jour pour eviter le chevauchement des segments - for(c=0;c<nb_clusters;c++){ - // mapping = mapping + "maptab.add(Segment(\"vci_locks"+c+"\", 0xC0200000, 0x00000100, IntTab("+c+",3), false));" + CR2; - mapping = mapping + "maptab.add(Segment(\"vci_locks"+c+"\", 0xC"+c+"200000, 0x00000100, IntTab("+c+",3), false));" + CR2; - mapping = mapping + "maptab.add(Segment(\"mwmr_ram"+c+"\", 0xA"+c+"200000, 0x00001000, IntTab("+c+",1), false));" + CR2; - mapping = mapping + "maptab.add(Segment(\"mwmrd_ram"+c+"\", 0xB"+c+"200000, 0x00003000, IntTab("+c+",2), false));" + CR2; - } + //one RAM and TTY per cluster independently of user - //now treat ram and tty - for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { - c=ram.getIndex(); - ram.setNo_target(4); - mapping += "maptab.add(Segment(\"vci_multi_ram"+ram.getIndex()+"\" , 0xd"+ram.getIndex()+"0200000, 0x00010000, IntTab("+ram.getIndex()+",5), false));" + CR; - } + // uint32_t ram_base = SEG_RAM_BASE + c * CLUSTER_SIZE; + // soft/hard_config.h:#define CLUSTER_SIZE 0x40000000 + + int SEG_RAM_BASE = 0x00000000; + int SEG_RAM_SIZE = 0x00100000; + + int SEG_ICU_BASE = 0x00100000; + int SEG_ICU_SIZE = 0x00000014; + + int NB_TIMERS = 1; + int SEG_TIM_BASE = 0x00300000; + int SEG_TIM_SIZE = (NB_TIMERS * 16 ); - //one tty per cluster - int i=0; + int CLUSTER_SIZE = 0x40000000; + //uint32_t ram_base = SEG_RAM_BASE + c * CLUSTER_SIZE; + + // currently no DMA + + //In cluster 0 + int cluster = 0; + mapping += "maptab.add(Segment(\"cram0\", 0x"+ (SEG_RAM_BASE + cluster * CLUSTER_SIZE)+", 0x"+SEG_RAM_SIZE+", IntTab(0,10), true));" + CR; + + mapping += "maptab.add(Segment(\"uram0\", 0x"+ (SEG_RAM_BASE+0x00200000)+", 0x"+SEG_RAM_SIZE+", IntTab(0,11), true));" + CR; + +mapping += "maptab.add(Segment(\"icu0" + cluster + "\", 0x"+ (SEG_ICU_BASE)+", 0x"+SEG_ICU_SIZE+", IntTab(0,12);" + CR; + +mapping += "maptab.add(Segment(\"timer0" + cluster + "\", 0x"+ (SEG_TIM_BASE)+", 0x"+SEG_TIM_SIZE+", IntTab(0,13), true));" + CR; + +// in all other clusters + + + for(cluster=1;cluster<nb_clusters; cluster++){ + mapping += "maptab.add(Segment(\"cram" +cluster+ "\", 0x"+ (SEG_RAM_BASE + cluster * CLUSTER_SIZE)+", 0x"+SEG_RAM_SIZE+", IntTab("+cluster+","+0+"), true));" + CR; + mapping += "maptab.add(Segment(\"uram" + cluster + "\", 0x"+ (SEG_RAM_BASE + cluster * CLUSTER_SIZE+0x00200000)+", 0x"+SEG_RAM_SIZE+", IntTab("+cluster+","+1+"), true));" + CR; + +mapping += "maptab.add(Segment(\"icu" + cluster + "\", 0x"+ (SEG_ICU_BASE + cluster * CLUSTER_SIZE+0x00200000)+", 0x"+SEG_ICU_SIZE+", IntTab("+cluster +","+2+"), true));" + CR; + +mapping += "maptab.add(Segment(\"timer" + cluster + "\", 0x"+ (SEG_TIM_BASE + cluster * CLUSTER_SIZE+0x00200000)+", 0x"+SEG_TIM_SIZE+", IntTab("+cluster +","+3+"), true));" + CR; +//later we will add DMA etc. + } + + //several RAM or TTY per cluster + /* for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) { + mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x"++", 0x"++", IntTab("+ram.getNo_cluster()+","+(ram.getNo_target())+"), true));" + CR; + } + for (AvatarTTY tty : TopCellGenerator.avatardd.getAllTTY()) { - c=tty.getIndex(); - tty.setNo_target(5); - - // mapping += "maptab.add(Segment(\"vci_multi_tty"+tty.getIndex()+"\" , 0xd"+tty.getIndex()+"0200000, 0x00000010, IntTab("+tty.getIndex()+",5), false));" + CR; - mapping += "maptab.add(Segment(\"vci_multi_tty"+i+"\" , 0xd"+tty.getIndex()+"0200000, 0x00000010, IntTab("+tty.getIndex()+",5), false));" + CR; - i++; - } + c=tty.getIndex(); + tty.setNo_target(10); + mapping += "maptab.add(Segment(\"vci_multi_tty"+tty.getIndex()+"\" , 0x"+(tty.getIndex()+1)+"e200000, 0x00000010, IntTab("+tty.getIndex()+","+(10+i)+"), false));" + CR; + } + }*/ } - return mapping; } } -- GitLab