Ignore:
Timestamp:
Mar 9, 2011, 4:11:43 PM (13 years ago)
Author:
kane
Message:

yAjout du multi_cache : plusieurs processeur peuvent ce partager le même cache L1.
2 remarques, (1) deux nouveaux paramètres : nb_cpu, nb_cache. Pour avoir un cache dont le comportement est identique à la version d'avant, mettre ces paramètres à 1.
(2) le port d'interruption est maintenant un tableau dépendant du nombre de processeur.
Voir le fichier "platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp" pour plus de détails.

--Cette ligne, et les suivantes ci-dessous, seront ignorées--

M platforms/tsarv4_dspin_generic_32/tsarv4_dspin_generic_32_top.cpp
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/segmentation.h
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/configuration/default.cfg
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/configuration/gen_config.sh
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/dhrystone/dhry21a.c
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/define.h
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/matrix_multiplication/matrix_multiplication.c
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/common/common.c
A platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/self_code_modifying
A platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/self_code_modifying/self_code_modifying.c
A platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/self_code_modifying/self_code_modifying.h
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark.h
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark_sort.c
A platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark_self_code_modifying.c
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark.c
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark_matrix_multiplication.c
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/Makefile
M platforms/caba-ring-ccxcachev4_memcachev4-mips32el/Makefile
M platforms/tsarv4_vgmn_generic_32/tsarv4_vgmn_generic_32_top.cpp
M modules/vci_cc_xcache_wrapper_v4/caba/source/include/vci_cc_xcache_wrapper_v4.h
M modules/vci_cc_xcache_wrapper_v4/caba/source/src/vci_cc_xcache_wrapper_v4.cpp
M modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h
M modules/vci_mem_cache_v4/caba/source/include/mem_cache_directory_v4.h
M modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp

    r137 r140  
    3131#  define PARAM_VCI                         4,8,32,1,1,1,8,4,4,1
    3232
     33#  define USE_OLD_XCACHE                    0
     34#  define USE_VGMN                          1
    3335#  define NB_PROC_MIN                       1
    3436#  define NB_PROC_MAX                       15
    35 //                                          min_latency, fifo_depth
     37//                                          fifo_depth
    3638#  define PARAM_RING_P                      2
    3739#  define PARAM_RING_C                      2
    3840#  define PARAM_RING_X                      2
    3941//                                          pti    , hwi    , wti, irq
    40 #  define PARAM_XICU                        nb_proc, nb_proc, 0  , nb_proc
     42#  define PARAM_XICU                        nb_proc*nb_cpu_by_cache, nb_proc*nb_cpu_by_cache, 0  , nb_proc*nb_cpu_by_cache
     43//#define PARAM_XICU                        nb_proc, nb_proc, 0  , nb_proc
    4144
    4245// * Debug
     
    4649                                           
    4750// * Simulation                             
    48 #  define FILE_DEFAULT                      "configuration/default.cfg"
     51#  define CONFIG_DEFAULT                      "configuration/default.cfg"
    4952#  define NCYCLES_DEFAULT                   0
    5053#  define SOFT_DEFAULT                      "soft/bin.soft"
     
    5356void usage (char * funcname)
    5457{
    55   std::cout << funcname << " [nb_cycle [file [soft]]] " << std::endl;
    56   std::cout << " * nb_cycle : number of simulated cycle, if 0 then no stop condition. (default : " << NCYCLES_DEFAULT << " cycle(s))" << std::endl;
    57   std::cout << " * file     : Configuration file : nb_proc, iways, isets, iwords, dways, dsets, dwords, wnwords, wnlines, wtimeout, memc_nways, memc_nsets, memc_words, memc_heap_size. (default : " << FILE_DEFAULT << " cycle(s))" << std::endl;
    58   std::cout << " * soft     : software executed by this platforms. (default : \"" << SOFT_DEFAULT << "\")" << std::endl;
     58  std::cout << funcname << " [option] " << std::endl;
     59  std::cout << " * -NCYCLES int : number of simulated cycle, if 0 then no stop condition." << std::endl;
     60  std::cout << "                  default : " << NCYCLES_DEFAULT << " cycle(s)" << std::endl;
     61  std::cout << " * -CFG string  : configuration file" << std::endl;
     62  std::cout << "                    - nb_proc," << std::endl;
     63  std::cout << "                    - nb_cpu_by_cache, nb_dcache," << std::endl;
     64  std::cout << "                    - iways, isets, iwords," << std::endl;
     65  std::cout << "                    - dways, dsets, dwords," << std::endl;
     66  std::cout << "                    - wnwords, wnlines, wtimeout," << std::endl;
     67  std::cout << "                    - memc_nways, memc_nsets, memc_words, memc_heap_size." << std::endl;
     68  std::cout << "                  default : \"" << CONFIG_DEFAULT << "\"" << std::endl;
     69  std::cout << " * -SOFT string : software executed by this platform." << std::endl;
     70  std::cout << "                  default : \"" << SOFT_DEFAULT << "\"" << std::endl;
    5971
    6072  exit(1);
     
    6375int _main(int argc, char *argv[])
    6476{
    65         if ((argc < 1) or (argc > 4))
    66           {
    67             std::cout << "Invalid parameters number." << std::endl;
    68             usage(argv[0]);
    69           }
    70 
    71 #if not SOCVIEW
    72         int  ncycles = 0;
    73 
    74         if (argc >= 2)
    75           ncycles = std::atoi(argv[1]);
    76         else
    77           ncycles = NCYCLES_DEFAULT;
     77        int    ncycles = NCYCLES_DEFAULT;
     78        char * config  = CONFIG_DEFAULT;
     79        char * soft    = SOFT_DEFAULT;
     80
     81        if (argc > 1)
     82          {
     83            for( int n=1 ; n<argc ; n=n+2 )
     84              {
     85                if( (strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc) )
     86                  {
     87                    ncycles = atoi(argv[n+1]);
     88                  }
     89                else if( (strcmp(argv[n],"-CFG") == 0) && (n+1<argc) )
     90                  {
     91                    // strcpy(config, argv[n+1]);
     92                    config = argv[n+1];
     93                  }
     94                else if( (strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) )
     95                  {
     96                    // strcpy(soft, argv[n+1]);
     97                    soft = argv[n+1];
     98                  }
     99                else
     100                  {
     101                    usage(argv[0]);
     102                  }
     103              }
     104          }
    78105
    79106        if (ncycles == 0)
    80107          ncycles = -1;
    81 #endif
    82108
    83109        uint32_t nb_proc;
     110        uint32_t nb_cpu_by_cache;
     111        uint32_t nb_dcache;
    84112        uint32_t iways, isets, iwords;
    85113        uint32_t dways, dsets, dwords;
     
    88116
    89117        std::ifstream inFile;
    90         const char * filename = (argc>=3)?argv[2]:FILE_DEFAULT;
     118        const char * filename = config;
    91119
    92120        inFile.open(filename);
     
    102130        nb_proc         =std::atoi(str.c_str());
    103131        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     132        nb_cpu_by_cache =std::atoi(str.c_str());
     133        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     134        nb_dcache       =std::atoi(str.c_str());
     135        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
    104136        iways           =std::atoi(str.c_str());
    105137        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     
    128160        memc_heap_size  =std::atoi(str.c_str());
    129161
    130         if ((nb_proc<NB_PROC_MIN) or
    131             (nb_proc>NB_PROC_MAX))
     162        if (((nb_proc*nb_cpu_by_cache)<NB_PROC_MIN) or
     163            ((nb_proc*nb_cpu_by_cache)>NB_PROC_MAX))
    132164          {
    133165            std::cout << "Parameters nb_proc is out of bound." << std::endl;
     
    135167          }
    136168
    137         char * soft;
    138 
    139         if (argc >= 4)
    140           soft = argv[3];
    141         else
    142           soft = SOFT_DEFAULT;
    143 
    144169        std::cout << "  * Parameters : " << std::endl;
    145170        std::cout << "    * nb_proc          : " << nb_proc          << std::endl;
     171        std::cout << "    * nb_cpu_by_cache  : " << nb_cpu_by_cache  << std::endl;
     172        std::cout << "    * nb_dcache        : " << nb_dcache        << std::endl;
    146173        std::cout << "    * iways            : " << iways            << std::endl;
    147174        std::cout << "    * isets            : " << isets            << std::endl;
     
    180207        maptabp.add(Segment("mc_r"     , MC_R_BASE     , MC_R_SIZE     , IntTab(2), false, true, IntTab(0)));
    181208        maptabp.add(Segment("mc_m"     , MC_M_BASE     , MC_M_SIZE     , IntTab(2), true));
    182         // maptabp.add(Segment("ptba"     , PTD_ADDR      , TAB_SIZE      , IntTab(2), true));
     209        // maptabp.add(Segment("mc_u"     , MC_U_BASE     , MC_U_SIZE     , IntTab(2), false));
     210      //maptabp.add(Segment("ptba"     , PTD_ADDR      , TAB_SIZE      , IntTab(2), true));
    183211        maptabp.add(Segment("xicu"     , XICU_BASE     , XICU_SIZE     , IntTab(3), false));
    184212        maptabp.add(Segment("simhelper", SIMHELPER_BASE, SIMHELPER_SIZE, IntTab(4), false));
     
    187215
    188216        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000);
     217        // for (uint32_t i=0; i<nb_proc; ++i)
     218        //   for (uint32_t j=0; j<nb_cpu_by_cache; ++j)
     219        //   {
     220        //     std::ostringstream str;
     221        //     str << "c_proc_" << i << "_" << j;
     222        //     maptabc.add(Segment(str.str().c_str(), C_PROC_BASE+(i*nb_cpu_by_cache+j)*C_PROC_SPAN, C_PROC_SIZE , IntTab(i), false, true, IntTab(i)));
     223        //   }
    189224        for (uint32_t i=0; i<nb_proc; ++i)
    190225        {
     
    195230        maptabc.add(Segment("mc_r"    , MC_R_BASE  , MC_R_SIZE   , IntTab(nb_proc), false, false));
    196231        maptabc.add(Segment("mc_m"    , MC_M_BASE  , MC_M_SIZE   , IntTab(nb_proc), false, false));
     232        // maptabc.add(Segment("mc_u"    , MC_U_BASE  , MC_U_SIZE   , IntTab(nb_proc), false, false));
    197233        maptabc.add(Segment("reset"   , RESET_BASE , RESET_SIZE  , IntTab(nb_proc), false, false));
    198234        maptabc.add(Segment("excep"   , EXCEP_BASE , EXCEP_SIZE  , IntTab(nb_proc), false, false));
    199235        maptabc.add(Segment("text"    , TEXT_BASE  , TEXT_SIZE   , IntTab(nb_proc), false, false));
    200         // maptabc.add(Segment("ptba"    , PTD_ADDR   , TAB_SIZE    , IntTab(nb_proc), false, false));
     236      //maptabc.add(Segment("ptba"    , PTD_ADDR   , TAB_SIZE    , IntTab(nb_proc), false, false));
    201237
    202238        std::cout << maptabc << std::endl;
     
    204240        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000);
    205241        maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false));
     242        // maptabx.add(Segment("uram" , MC_U_BASE , MC_U_SIZE , IntTab(0), false));
    206243        maptabx.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), false));
    207244        maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false));
     
    215252        sc_signal<bool> signal_resetn("resetn");
    216253   
    217         sc_signal<bool> ** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, 6);
     254        sc_signal<bool> *** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, nb_cpu_by_cache, 6);
    218255
    219256        soclib::caba::VciSignals<vci_param> * signal_vci_ini_rw_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_ini_rw_proc", nb_proc);
     
    236273        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
    237274
    238         sc_signal<bool> * signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc);
     275        sc_signal<bool> ** signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc, nb_cpu_by_cache);
    239276
    240277        soclib::common::Loader loader(soft);
     
    245282        for (uint32_t i=0; i<nb_proc; ++i)
    246283          {
     284            uint32_t num_cpu = i*nb_cpu_by_cache;
     285
    247286            std::ostringstream str;
    248             str << "proc_" << i;
    249 
    250             proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), i, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i)
     287            str << "proc_" << num_cpu;
     288
     289            proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), num_cpu, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i)
     290#if USE_OLD_XCACHE
    251291                                                                                    ,iways, isets, iwords
    252292                                                                                    ,dways, dsets, dwords
    253                                                                                     ,wnwords, wnlines, wtimeout
     293#else
     294                                                                                    ,nb_cpu_by_cache   
     295                                                                                    ,nb_dcache
     296                                                                                    ,iways*nb_cpu_by_cache, isets, iwords
     297                                                                                    ,dways*nb_cpu_by_cache, dsets, dwords
     298                                                                                    ,wnwords, wnlines*nb_cpu_by_cache, wtimeout
     299#endif
    254300                                                                                    );
    255301
     
    267313        //                                  x_init    c_init          p_tgt     c_tgt
    268314        soclib::caba::VciMemCacheV4<vci_param>
    269           memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(nb_proc),IntTab(2),IntTab(nb_proc), memc_nways, memc_nsets, memc_words, memc_heap_size);
     315        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(nb_proc),IntTab(2),IntTab(nb_proc), memc_nways, memc_nsets, memc_words, memc_heap_size);
    270316
    271317        std::vector<std::string> tty_name;
    272         for (uint32_t i=0; i<nb_proc; ++i)
     318        for (uint32_t i=0; i<nb_proc*nb_cpu_by_cache; ++i)
    273319          {
    274320            std::ostringstream str;
     
    308354          {
    309355            proc[i]->p_clk(signal_clk); 
    310             proc[i]->p_resetn(signal_resetn); 
    311             proc[i]->p_irq[0](signal_proc_it[i][0]);
    312             proc[i]->p_irq[1](signal_proc_it[i][1]);
    313             proc[i]->p_irq[2](signal_proc_it[i][2]);
    314             proc[i]->p_irq[3](signal_proc_it[i][3]);
    315             proc[i]->p_irq[4](signal_proc_it[i][4]);
    316             proc[i]->p_irq[5](signal_proc_it[i][5]);
     356            proc[i]->p_resetn(signal_resetn);
     357            for (uint32_t j=0; j<nb_cpu_by_cache; ++j)
     358              {
     359                proc[i]->p_irq[j][0](signal_proc_it[i][j][0]);
     360                proc[i]->p_irq[j][1](signal_proc_it[i][j][1]);
     361                proc[i]->p_irq[j][2](signal_proc_it[i][j][2]);
     362                proc[i]->p_irq[j][3](signal_proc_it[i][j][3]);
     363                proc[i]->p_irq[j][4](signal_proc_it[i][j][4]);
     364                proc[i]->p_irq[j][5](signal_proc_it[i][j][5]);
     365              }
    317366            proc[i]->p_vci_ini_rw(signal_vci_ini_rw_proc[i]);
    318367            proc[i]->p_vci_ini_c(signal_vci_ini_c_proc[i]);
     
    328377        tty.p_vci(signal_vci_tgt_tty);
    329378        for (uint32_t i=0; i<nb_proc; ++i)
    330           tty.p_irq[i](signal_tty_irq[i]);
     379          for (uint32_t j=0; j<nb_cpu_by_cache; ++j)
     380            tty.p_irq[i*nb_cpu_by_cache+j](signal_tty_irq[i][j]);
    331381
    332382        xicu.p_clk(signal_clk);
     
    334384        xicu.p_vci(signal_vci_tgt_xicu);
    335385        for (uint32_t i=0; i<nb_proc; ++i)
    336         {
    337           xicu.p_hwi[i](signal_tty_irq[i]);
    338           xicu.p_irq[i](signal_proc_it[i][0]);
    339         }
     386          for (uint32_t j=0; j<nb_cpu_by_cache; ++j)
     387          {
     388            xicu.p_hwi[i*nb_cpu_by_cache+j](signal_tty_irq[i][j]);
     389            xicu.p_irq[i*nb_cpu_by_cache+j](signal_proc_it[i][j][0]);
     390          }
    340391
    341392        simhelper.p_clk(signal_clk);
     
    392443        debug();
    393444#elif DEBUG_TOP
    394         for (int32_t i=0; i<ncycles; ++i)
     445
     446        uint32_t num_cycle=0;
     447        while(1)
    395448          {
    396449            std::cout << std::endl
    397                       << std::dec << "===== [ cycle " << i << " ]======" << std::endl
     450                      << std::dec << "===== [ cycle " << num_cycle << " ]======" << std::endl
    398451                      << std::endl;
    399452           
     
    402455            // for (uint32_t i=0; i<nb_proc; ++i)
    403456            //   proc[i]->print_trace(1);
     457            num_cycle ++;
    404458          }
    405459#else
     
    418472          proc[i]->print_stats();
    419473
    420         soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_tty_irq         , nb_proc);
     474        soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_tty_irq         , nb_proc, nb_cpu_by_cache);
    421475        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_tgt_proc    , nb_proc);
    422476        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_c_proc  , nb_proc);
    423477        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_rw_proc , nb_proc);
    424         soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_proc_it         , nb_proc, 6);
     478        soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_proc_it         , nb_proc, nb_cpu_by_cache, 6);
    425479
    426480        for (uint32_t i=0; i<nb_proc; ++i)
Note: See TracChangeset for help on using the changeset viewer.