Ignore:
Timestamp:
Jan 24, 2011, 5:36:50 PM (13 years ago)
Author:
kane
Message:

add multi write buffer in cc_xcache_v4

File:
1 edited

Legend:

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

    r107 r134  
    1 
    21#include <systemc>
    32#include <sys/time.h>
    43#include <iostream>
     4#include <sstream>
    55#include <cstdlib>
    66#include <cstdarg>
     7#include <stdint.h>
     8#include <fstream>
    79
    810#include "mapping_table.h"
    911#include "mips32.h"
     12#include "vci_simhelper.h"
    1013#include "vci_simple_ram.h"
    1114#include "vci_multi_tty.h"
     15#include "vci_xicu.h"
    1216#include "vci_simple_ring_network_2.h"
    1317#include "vci_vgmn.h"
    1418#include "vci_mem_cache_v4.h"
    1519#include "vci_cc_xcache_wrapper_v4.h"
    16 #include "vci_logger.h"
     20#include "alloc_elems.h"
    1721
    1822#include "iss/gdbserver.h"
    1923
    20 //#define  VCI_LOGGER
    2124#include "segmentation.h"
    22 #define USE_VGMN
     25
     26//===========================================
     27// Define before include
     28//===========================================
     29
     30// Parameters
     31// * Platforms
     32#  define PARAM_VCI                         4,8,32,1,1,1,8,4,4,1
     33
     34#  define USE_OLD_XCACHE                    1
     35#  define USE_VGMN                          1
     36#  define NB_PROC_MIN                       1
     37#  define NB_PROC_MAX                       15
     38//                                          min_latency, fifo_depth
     39#  define PARAM_VGMN_P                      1          , 8
     40#  define PARAM_VGMN_C                      1          , 8
     41#  define PARAM_VGMN_X                      2          , 8
     42//                                          wrapper_fifo_depth
     43#  define PARAM_RING_P                      2
     44#  define PARAM_RING_C                      2
     45#  define PARAM_RING_X                      2
     46//                                          pti    , hwi    , wti, irq
     47#  define PARAM_XICU                        nb_proc, nb_proc, 0  , nb_proc
     48
     49// * Debug
     50#  define DEBUG_TOP                         0
     51#  define SOCVIEW                           0
     52#  define STOP_SIMULATION_NB_FRZ_CYCLES     100000
     53                                           
     54// * Simulation                             
     55#  define FILE_DEFAULT                      "configuration/default.cfg"
     56#  define NCYCLES_DEFAULT                   0
     57#  define SOFT_DEFAULT                      "soft/bin.soft"
     58//===========================================
     59
     60void usage (char * funcname)
     61{
     62  std::cout << funcname << " [nb_cycle [file [soft]]] " << std::endl;
     63  std::cout << " * nb_cycle : number of simulated cycle, if 0 then no stop condition. (default : " << NCYCLES_DEFAULT << " cycle(s))" << endl;
     64  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))" << endl;
     65  std::cout << " * soft     : software executed by this platforms. (default : \"" << SOFT_DEFAULT << "\")" << endl;
     66
     67  exit(1);
     68}
    2369
    2470int _main(int argc, char *argv[])
    2571{
     72        if ((argc < 1) or (argc > 4))
     73          {
     74            std::cout << "Invalid parameters number." << std::endl;
     75            usage(argv[0]);
     76          }
     77
     78#if not SOCVIEW
     79        int  ncycles = 0;
     80
     81        if (argc >= 2)
     82          ncycles = std::atoi(argv[1]);
     83        else
     84          ncycles = NCYCLES_DEFAULT;
     85
     86        if (ncycles == 0)
     87          ncycles = -1;
     88#endif
     89
     90        uint32_t nb_proc;
     91        uint32_t iways, isets, iwords;
     92        uint32_t dways, dsets, dwords;
     93        uint32_t wnwords, wnlines, wtimeout;
     94        uint32_t memc_nways, memc_nsets, memc_words, memc_heap_size;
     95
     96        std::ifstream inFile;
     97        const char * filename = (argc>=3)?argv[2]:FILE_DEFAULT;
     98
     99        inFile.open(filename);
     100       
     101        if (!inFile)
     102          {
     103            std::cout << "Can't open file : \"" << filename << "\"." << std::endl;
     104            usage(argv[0]);
     105          }
     106
     107        std::string str;
     108        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     109        nb_proc         =std::atoi(str.c_str());
     110        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     111        iways           =std::atoi(str.c_str());
     112        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     113        isets           =std::atoi(str.c_str());
     114        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     115        iwords          =std::atoi(str.c_str());
     116        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     117        dways           =std::atoi(str.c_str());
     118        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     119        dsets           =std::atoi(str.c_str());
     120        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     121        dwords          =std::atoi(str.c_str());
     122        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     123        wnwords         =std::atoi(str.c_str());
     124        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     125        wnlines         =std::atoi(str.c_str());
     126        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     127        wtimeout        =std::atoi(str.c_str());
     128        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     129        memc_nways      =std::atoi(str.c_str());
     130        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     131        memc_nsets      =std::atoi(str.c_str());
     132        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     133        memc_words      =std::atoi(str.c_str());
     134        if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);}
     135        memc_heap_size  =std::atoi(str.c_str());
     136
     137        if ((nb_proc<NB_PROC_MIN) or
     138            (nb_proc>NB_PROC_MAX))
     139          {
     140            std::cout << "Parameters nb_proc is out of bound." << std::endl;
     141            usage(argv[0]);
     142          }
     143
     144        char * soft;
     145
     146        if (argc >= 4)
     147          soft = argv[3];
     148        else
     149          soft = SOFT_DEFAULT;
     150
     151        std::cout << "  * Parameters : " << std::endl;
     152        std::cout << "    * nb_proc          : " << nb_proc          << std::endl;
     153        std::cout << "    * iways            : " << iways            << std::endl;
     154        std::cout << "    * isets            : " << isets            << std::endl;
     155        std::cout << "    * iwords           : " << iwords           << std::endl;
     156        std::cout << "    * dways            : " << dways            << std::endl;
     157        std::cout << "    * dsets            : " << dsets            << std::endl;
     158        std::cout << "    * dwords           : " << dwords           << std::endl;
     159        std::cout << "    * wnwords          : " << wnwords          << std::endl;
     160        std::cout << "    * wnlines          : " << wnlines          << std::endl;
     161        std::cout << "    * wtimeout         : " << wtimeout         << std::endl;
     162        std::cout << "    * memc_nways       : " << memc_nways       << std::endl;
     163        std::cout << "    * memc_nsets       : " << memc_nsets       << std::endl;
     164        std::cout << "    * memc_words       : " << memc_words       << std::endl;
     165        std::cout << "    * memc_heap_size   : " << memc_heap_size   << std::endl;
     166        std::cout << "  * Simulation : " << std::endl;
     167        std::cout << "    * ncycles          : " << ncycles          << std::endl;
     168        std::cout << "    * soft             : " << soft             << std::endl;
     169
    26170        using namespace sc_core;
    27171        // Avoid repeating these everywhere
     
    30174
    31175        // Define VCI parameters
    32         typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
     176        typedef soclib::caba::VciParams<PARAM_VCI> vci_param;
    33177        typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
    34178        // Mapping table
    35179
    36         soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000);
    37 
    38         maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(2), true));
    39         maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(2), true));
    40         maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), true));
    41         maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(1), false));
    42         maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0)));
    43         maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true ));
    44         maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE   , IntTab(2), true));
     180        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000); // size, level_addr_bits, level_id_bits, cacheability_mask
     181
     182        maptabp.add(Segment("reset"    , RESET_BASE    , RESET_SIZE    , IntTab(2), true));
     183        maptabp.add(Segment("excep"    , EXCEP_BASE    , EXCEP_SIZE    , IntTab(2), true));
     184
     185        maptabp.add(Segment("tty"      , TTY_BASE      , TTY_SIZE      , IntTab(1), false));
     186        maptabp.add(Segment("text"     , TEXT_BASE     , TEXT_SIZE     , IntTab(2), true));
     187        maptabp.add(Segment("mc_r"     , MC_R_BASE     , MC_R_SIZE     , IntTab(2), false, true, IntTab(0)));
     188        maptabp.add(Segment("mc_m"     , MC_M_BASE     , MC_M_SIZE     , IntTab(2), true));
     189        // maptabp.add(Segment("ptba"     , PTD_ADDR      , TAB_SIZE      , IntTab(2), true));
     190        maptabp.add(Segment("xicu"     , XICU_BASE     , XICU_SIZE     , IntTab(3), false));
     191        maptabp.add(Segment("simhelper", SIMHELPER_BASE, SIMHELPER_SIZE, IntTab(4), false));
    45192 
    46193        std::cout << maptabp << std::endl;
    47194
    48195        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000);
    49         maptabc.add(Segment("c_proc0" , C_PROC0_BASE , C_PROC0_SIZE , IntTab(0), false, true, IntTab(0)));
    50         maptabc.add(Segment("c_proc1" , C_PROC1_BASE , C_PROC1_SIZE , IntTab(1), false, true, IntTab(1)));
    51         maptabc.add(Segment("c_proc2" , C_PROC2_BASE , C_PROC2_SIZE , IntTab(2), false, true, IntTab(2)));
    52         maptabc.add(Segment("c_proc3" , C_PROC3_BASE , C_PROC3_SIZE , IntTab(3), false, true, IntTab(3)));
    53         maptabc.add(Segment("mc_r"    , MC_R_BASE , MC_R_SIZE , IntTab(4), false, false));
    54         maptabc.add(Segment("mc_m"  , MC_M_BASE , MC_M_SIZE  , IntTab(4), false, false));
    55         maptabc.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(4), false, false));
    56         maptabc.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(4), false, false));
    57         maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(4), false, false));
    58         maptabc.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(4), false, false));
     196        for (uint32_t i=0; i<nb_proc; ++i)
     197        {
     198          std::ostringstream str;
     199          str << "c_proc_" << i;
     200          maptabc.add(Segment(str.str().c_str(), C_PROC_BASE+i*C_PROC_SPAN, C_PROC_SIZE , IntTab(i), false, true, IntTab(i)));
     201        }
     202        maptabc.add(Segment("mc_r"    , MC_R_BASE  , MC_R_SIZE   , IntTab(nb_proc), false, false));
     203        maptabc.add(Segment("mc_m"    , MC_M_BASE  , MC_M_SIZE   , IntTab(nb_proc), false, false));
     204        maptabc.add(Segment("reset"   , RESET_BASE , RESET_SIZE  , IntTab(nb_proc), false, false));
     205        maptabc.add(Segment("excep"   , EXCEP_BASE , EXCEP_SIZE  , IntTab(nb_proc), false, false));
     206        maptabc.add(Segment("text"    , TEXT_BASE  , TEXT_SIZE   , IntTab(nb_proc), false, false));
     207        // maptabc.add(Segment("ptba"    , PTD_ADDR   , TAB_SIZE    , IntTab(nb_proc), false, false));
    59208
    60209        std::cout << maptabc << std::endl;
     
    65214        maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false));
    66215        maptabx.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(0), false));
    67         maptabx.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(0), false));
     216        // maptabx.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(0), false));
    68217       
    69218        std::cout << maptabx << std::endl;
     
    73222        sc_signal<bool> signal_resetn("resetn");
    74223   
    75         sc_signal<bool> signal_proc0_it0("proc0_it0");
    76         sc_signal<bool> signal_proc0_it1("proc0_it1");
    77         sc_signal<bool> signal_proc0_it2("proc0_it2");
    78         sc_signal<bool> signal_proc0_it3("proc0_it3");
    79         sc_signal<bool> signal_proc0_it4("proc0_it4");
    80         sc_signal<bool> signal_proc0_it5("proc0_it5");
    81 
    82         sc_signal<bool> signal_proc1_it0("proc1_it0");
    83         sc_signal<bool> signal_proc1_it1("proc1_it1");
    84         sc_signal<bool> signal_proc1_it2("proc1_it2");
    85         sc_signal<bool> signal_proc1_it3("proc1_it3");
    86         sc_signal<bool> signal_proc1_it4("proc1_it4");
    87         sc_signal<bool> signal_proc1_it5("proc1_it5");
    88 
    89         sc_signal<bool> signal_proc2_it0("proc2_it0");
    90         sc_signal<bool> signal_proc2_it1("proc2_it1");
    91         sc_signal<bool> signal_proc2_it2("proc2_it2");
    92         sc_signal<bool> signal_proc2_it3("proc2_it3");
    93         sc_signal<bool> signal_proc2_it4("proc2_it4");
    94         sc_signal<bool> signal_proc2_it5("proc2_it5");
    95 
    96         sc_signal<bool> signal_proc3_it0("proc3_it0");
    97         sc_signal<bool> signal_proc3_it1("proc3_it1");
    98         sc_signal<bool> signal_proc3_it2("proc3_it2");
    99         sc_signal<bool> signal_proc3_it3("proc3_it3");
    100         sc_signal<bool> signal_proc3_it4("proc3_it4");
    101         sc_signal<bool> signal_proc3_it5("proc3_it5");
    102 
    103         soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
    104         soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
    105 
    106         soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
    107 
    108         soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
    109         soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
    110 
    111         soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
    112 
    113         soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
    114         soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
    115 
    116         soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
    117 
    118         soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
    119         soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
    120 
    121         soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
     224        sc_signal<bool> ** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, 6);
     225
     226        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);
     227        soclib::caba::VciSignals<vci_param> * signal_vci_ini_c_proc  = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_ini_c_proc" , nb_proc);
     228        soclib::caba::VciSignals<vci_param> * signal_vci_tgt_proc    = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_tgt_proc"   , nb_proc);
    122229
    123230        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
    124231
     232        soclib::caba::VciSignals<vci_param> signal_vci_tgt_simhelper("signal_vci_tgt_simhelper");
     233
    125234        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
    126235
    127236        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
     237
     238        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xicu("vci_tgt_xicu");
    128239
    129240        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
     
    132243        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
    133244
    134         sc_signal<bool> signal_tty_irq0("signal_tty_irq0");
    135         sc_signal<bool> signal_tty_irq1("signal_tty_irq1");
    136         sc_signal<bool> signal_tty_irq2("signal_tty_irq2");
    137         sc_signal<bool> signal_tty_irq3("signal_tty_irq3");
    138 
    139         soclib::common::Loader loader("soft/bin.soft");
    140 
    141     soclib::common::GdbServer<soclib::common::Mips32ElIss>::set_loader(loader);
    142         //                                  init_rw   init_c   tgt
    143 /*      soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
    144         proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16);
    145 
    146         soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
    147         proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16);
    148 
    149         soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
    150         proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16);
    151 
    152         soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
    153         proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16);
    154 */
    155 
    156         soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss >
    157         proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),1,8,16,1,8,16);
    158 
    159         soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss >
    160         proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),1,8,16,1,8,16);
    161 
    162         soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss >
    163         proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),1,8,16,1,8,16);
    164 
    165         soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss >
    166         proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),1,8,16,1,8,16);
    167 
     245        sc_signal<bool> * signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc);
     246
     247        soclib::common::Loader loader(soft);
     248
     249        soclib::common::GdbServer<soclib::common::Mips32ElIss>::set_loader(loader);
     250
     251        soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > * proc [nb_proc];
     252        for (uint32_t i=0; i<nb_proc; ++i)
     253          {
     254            std::ostringstream str;
     255            str << "proc_" << i;
     256
     257            proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), i, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i)
     258#if USE_OLD_XCACHE
     259                                                                                    ,iways, isets, iwords
     260                                                                                    ,dways, dsets, dwords
     261#else
     262                                                                                    ,iways, isets, iwords
     263                                                                                    ,dways, dsets, dwords
     264                                                                                    ,wnwords, wnlines, wtimeout
     265#endif
     266                                                                                    );
     267
     268#if not USE_OLD_XCACHE
     269            proc[i]->stop_simulation(STOP_SIMULATION_NB_FRZ_CYCLES);
     270#endif
     271          }
    168272
    169273        soclib::caba::VciSimpleRam<vci_param>
    170         rom("rom", IntTab(0), maptabp, loader);
     274        rom ("rom", IntTab(0), maptabp, loader);
    171275
    172276        soclib::caba::VciSimpleRam<vci_param>
    173277        xram("xram", IntTab(0), maptabx, loader);
    174278
    175         //                                  x_init    c_init    p_tgt     c_tgt
     279        //                                  x_init    c_init          p_tgt     c_tgt
    176280        soclib::caba::VciMemCacheV4<vci_param>
    177         //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),16,256,16);
    178         //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16);
    179         memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,4,16);
     281          memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(nb_proc),IntTab(2),IntTab(nb_proc), memc_nways, memc_nsets, memc_words, memc_heap_size);
     282
     283        std::vector<std::string> tty_name;
     284        for (uint32_t i=0; i<nb_proc; ++i)
     285          {
     286            std::ostringstream str;
     287            str << "tty_" << i;
     288
     289            tty_name.push_back(str.str());
     290          }
    180291       
    181292        soclib::caba::VciMultiTty<vci_param>
    182         tty("tty",IntTab(1),maptabp,"tty0","tty1","tty2","tty3",NULL);
    183 
    184 #ifdef VCI_LOGGER
    185   soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
     293        tty("tty",IntTab(1),maptabp,tty_name);
     294
     295        soclib::caba::VciXicu<vci_param>
     296        xicu("xicu", maptabp, IntTab(3), PARAM_XICU);
     297
     298        // soclib::caba::VciTimer<vci_param>
     299        // timer("timer", IntTab(3), maptabp, nb_proc);
     300
     301        soclib::caba::VciSimhelper<vci_param>
     302        simhelper("simhelper", IntTab(4), maptabp);
     303
     304        //                  initiatior | target
     305        // interconnect_p : proc       | rom, tty, memc, xicu, simhelper
     306        // interconnect_c : proc, memc | proc, memc
     307        // interconnect_x : memc       | xram
     308
     309#if USE_VGMN
     310        soclib::caba::VciVgmn<vci_param>
     311        interconnect_p("interconnect_p",maptabp, nb_proc  , 5        , PARAM_VGMN_P);
     312
     313        soclib::caba::VciVgmn<vci_param>
     314        interconnect_c("interconnect_c",maptabc, nb_proc+1, nb_proc+1, PARAM_VGMN_C);
     315
     316        soclib::caba::VciVgmn<vci_param>
     317        interconnect_x("interconnect_x",maptabx, 1        , 1        , PARAM_VGMN_X);
     318#else
     319        soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
     320        interconnect_p("interconnect_p",maptabp, IntTab(), PARAM_RING_P,nb_proc  , 5        );
     321
     322        soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
     323        interconnect_c("interconnect_c",maptabc, IntTab(), PARAM_RING_C,nb_proc+1, nb_proc+1);
     324
     325        soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
     326        interconnect_x("interconnect_x",maptabx, IntTab(), PARAM_RING_X,1        , 1        );
    186327#endif
    187 #ifdef USE_VGMN
    188         soclib::caba::VciVgmn<vci_param>
    189         ringp("ringp",maptabp, 4, 3, 1, 8);
    190 
    191         soclib::caba::VciVgmn<vci_param>
    192         ringc("ringc",maptabc, 5, 5, 1, 8);
    193 
    194         soclib::caba::VciVgmn<vci_param>
    195         ringx("ringx",maptabx, 1, 1, 2, 8);
    196 #else
    197 
    198         soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
    199         ringp("ringp",maptabp, IntTab(), 2, 4, 3);
    200 
    201         soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
    202         ringc("ringc",maptabc, IntTab(), 2, 5, 5);
    203 
    204         soclib::caba::VciSimpleRingNetwork2<vci_param,37,33>
    205         ringx("ringx",maptabx, IntTab(), 2, 1, 1);
    206 #endif
     328
    207329        // Net-List
    208  
    209         proc0.p_clk(signal_clk); 
    210         proc0.p_resetn(signal_resetn); 
    211         proc0.p_irq[0](signal_proc0_it0);
    212         proc0.p_irq[1](signal_proc0_it1);
    213         proc0.p_irq[2](signal_proc0_it2);
    214         proc0.p_irq[3](signal_proc0_it3);
    215         proc0.p_irq[4](signal_proc0_it4);
    216         proc0.p_irq[5](signal_proc0_it5);
    217         proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
    218         proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
    219         proc0.p_vci_tgt(signal_vci_tgt_proc0);
    220 
    221         proc1.p_clk(signal_clk); 
    222         proc1.p_resetn(signal_resetn); 
    223         proc1.p_irq[0](signal_proc1_it0);
    224         proc1.p_irq[1](signal_proc1_it1);
    225         proc1.p_irq[2](signal_proc1_it2);
    226         proc1.p_irq[3](signal_proc1_it3);
    227         proc1.p_irq[4](signal_proc1_it4);
    228         proc1.p_irq[5](signal_proc1_it5);
    229         proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
    230         proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
    231         proc1.p_vci_tgt(signal_vci_tgt_proc1);
    232 
    233         proc2.p_clk(signal_clk); 
    234         proc2.p_resetn(signal_resetn); 
    235         proc2.p_irq[0](signal_proc2_it0);
    236         proc2.p_irq[1](signal_proc2_it1);
    237         proc2.p_irq[2](signal_proc2_it2);
    238         proc2.p_irq[3](signal_proc2_it3);
    239         proc2.p_irq[4](signal_proc2_it4);
    240         proc2.p_irq[5](signal_proc2_it5);
    241         proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
    242         proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
    243         proc2.p_vci_tgt(signal_vci_tgt_proc2);
    244 
    245         proc3.p_clk(signal_clk); 
    246         proc3.p_resetn(signal_resetn); 
    247         proc3.p_irq[0](signal_proc3_it0);
    248         proc3.p_irq[1](signal_proc3_it1);
    249         proc3.p_irq[2](signal_proc3_it2);
    250         proc3.p_irq[3](signal_proc3_it3);
    251         proc3.p_irq[4](signal_proc3_it4);
    252         proc3.p_irq[5](signal_proc3_it5);
    253         proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
    254         proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
    255         proc3.p_vci_tgt(signal_vci_tgt_proc3);
     330        for (uint32_t i=0; i<nb_proc; ++i)
     331          {
     332            proc[i]->p_clk(signal_clk); 
     333            proc[i]->p_resetn(signal_resetn); 
     334            proc[i]->p_irq[0](signal_proc_it[i][0]);
     335            proc[i]->p_irq[1](signal_proc_it[i][1]);
     336            proc[i]->p_irq[2](signal_proc_it[i][2]);
     337            proc[i]->p_irq[3](signal_proc_it[i][3]);
     338            proc[i]->p_irq[4](signal_proc_it[i][4]);
     339            proc[i]->p_irq[5](signal_proc_it[i][5]);
     340            proc[i]->p_vci_ini_rw(signal_vci_ini_rw_proc[i]);
     341            proc[i]->p_vci_ini_c(signal_vci_ini_c_proc[i]);
     342            proc[i]->p_vci_tgt(signal_vci_tgt_proc[i]);
     343          }
    256344
    257345        rom.p_clk(signal_clk);
     
    259347        rom.p_vci(signal_vci_tgt_rom);
    260348
    261 #ifdef VCI_LOGGER
    262   vci_logger0.p_clk(signal_clk);
    263   vci_logger0.p_resetn(signal_resetn);
    264   vci_logger0.p_vci(signal_vci_ini_rw_proc2);
    265 #endif
    266 
    267349        tty.p_clk(signal_clk);
    268350        tty.p_resetn(signal_resetn);
    269351        tty.p_vci(signal_vci_tgt_tty);
    270         tty.p_irq[0](signal_tty_irq0);
    271         tty.p_irq[1](signal_tty_irq1);
    272         tty.p_irq[2](signal_tty_irq2);
    273         tty.p_irq[3](signal_tty_irq3);
     352        for (uint32_t i=0; i<nb_proc; ++i)
     353          tty.p_irq[i](signal_tty_irq[i]);
     354
     355        xicu.p_clk(signal_clk);
     356        xicu.p_resetn(signal_resetn);
     357        xicu.p_vci(signal_vci_tgt_xicu);
     358        for (uint32_t i=0; i<nb_proc; ++i)
     359        {
     360          xicu.p_hwi[i](signal_tty_irq[i]);
     361          xicu.p_irq[i](signal_proc_it[i][0]);
     362        }
     363
     364        simhelper.p_clk(signal_clk);
     365        simhelper.p_resetn(signal_resetn);
     366        simhelper.p_vci(signal_vci_tgt_simhelper);
    274367
    275368        memc.p_clk(signal_clk);
     
    281374
    282375        xram.p_clk(signal_clk);
    283   xram.p_resetn(signal_resetn);
     376        xram.p_resetn(signal_resetn);
    284377        xram.p_vci(signal_vci_tgt_xram);
    285        
    286         ringp.p_clk(signal_clk);
    287         ringp.p_resetn(signal_resetn);
    288 
    289         ringc.p_clk(signal_clk);
    290         ringc.p_resetn(signal_resetn);
    291 
    292         ringx.p_clk(signal_clk);
    293         ringx.p_resetn(signal_resetn);
    294 
    295         ringp.p_to_initiator[0](signal_vci_ini_rw_proc0);
    296         ringp.p_to_initiator[1](signal_vci_ini_rw_proc1);
    297         ringp.p_to_initiator[2](signal_vci_ini_rw_proc2);
    298         ringp.p_to_initiator[3](signal_vci_ini_rw_proc3);
    299 
    300         ringc.p_to_initiator[4](signal_vci_ini_memc);
    301         ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
    302         ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
    303         ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
    304         ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
    305 
    306         ringx.p_to_initiator[0](signal_vci_ixr_memc);
    307 
    308         ringp.p_to_target[0](signal_vci_tgt_rom);
    309         ringp.p_to_target[1](signal_vci_tgt_tty);
    310         ringp.p_to_target[2](signal_vci_tgt_memc);
    311 
    312         ringc.p_to_target[0](signal_vci_tgt_proc0);
    313         ringc.p_to_target[1](signal_vci_tgt_proc1);
    314         ringc.p_to_target[2](signal_vci_tgt_proc2);
    315         ringc.p_to_target[3](signal_vci_tgt_proc3);
    316         ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
    317 
    318         ringx.p_to_target[0](signal_vci_tgt_xram);
    319 
    320         int ncycles;
    321 
    322 #ifndef SOCVIEW
    323 /*      if (argc == 2) {
    324                 ncycles = std::atoi(argv[1]);
    325         } else {
    326                 std::cerr
    327                         << std::endl
    328                         << "The number of simulation cycles must "
    329                            "be defined in the command line"
    330                         << std::endl;
    331                 exit(1);
    332         }
    333 */
    334         sc_start(sc_core::sc_time(0, SC_NS));
    335         signal_resetn = false;
    336 
    337         sc_start(sc_core::sc_time(1, SC_NS));
    338         signal_resetn = true;
    339 
    340 /*
    341   while(1){
    342     char buf[2];
    343           std::cin.getline(buf,1);
    344                 sc_start(sc_core::sc_time(1, SC_NS));
    345   }
    346 */
    347 
    348         for (int i = 0; ; i+=10000) {
    349                 sc_start(sc_core::sc_time(10000, SC_NS));
    350 //              proc0.print_stats();
    351 //              memc.print_stats();
    352         }
    353 
    354         std::cout << "Hit ENTER to end simulation" << std::endl;
    355         char buf[1];
    356 
    357         std::cin.getline(buf,1);
    358 
    359         return EXIT_SUCCESS;
    360 #else
    361         ncycles = 1;
     378       
     379        interconnect_p.p_clk(signal_clk);
     380        interconnect_p.p_resetn(signal_resetn);
     381
     382        for (uint32_t i=0; i<nb_proc; ++i)
     383        interconnect_p.p_to_initiator[i](signal_vci_ini_rw_proc[i]);
     384
     385        interconnect_p.p_to_target[0](signal_vci_tgt_rom);
     386        interconnect_p.p_to_target[1](signal_vci_tgt_tty);
     387        interconnect_p.p_to_target[2](signal_vci_tgt_memc);
     388        interconnect_p.p_to_target[3](signal_vci_tgt_xicu);
     389        interconnect_p.p_to_target[4](signal_vci_tgt_simhelper);
     390
     391        interconnect_c.p_clk(signal_clk);
     392        interconnect_c.p_resetn(signal_resetn);
     393
     394        for (uint32_t i=0; i<nb_proc; ++i)
     395        interconnect_c.p_to_initiator[i](signal_vci_ini_c_proc[i]);
     396        interconnect_c.p_to_initiator[nb_proc](signal_vci_ini_memc);
     397
     398        for (uint32_t i=0; i<nb_proc; ++i)
     399        interconnect_c.p_to_target[i](signal_vci_tgt_proc[i]);
     400        interconnect_c.p_to_target[nb_proc](signal_vci_tgt_cleanup_memc);
     401
     402        interconnect_x.p_clk(signal_clk);
     403        interconnect_x.p_resetn(signal_resetn);
     404
     405        interconnect_x.p_to_initiator[0](signal_vci_ixr_memc);
     406
     407        interconnect_x.p_to_target[0](signal_vci_tgt_xram);
     408
    362409        sc_start(sc_core::sc_time(0, SC_NS));
    363410        signal_resetn = false;
     
    365412        signal_resetn = true;
    366413
     414#if SOCVIEW
    367415        debug();
     416#elif DEBUG_TOP
     417        for (int32_t i=0; i<ncycles; ++i)
     418          {
     419            std::cout << std::endl
     420                      << std::dec << "===== [ cycle " << i << " ]======" << std::endl
     421                      << std::endl;
     422           
     423            sc_start(sc_core::sc_time(1, SC_NS));
     424           
     425            // for (uint32_t i=0; i<nb_proc; ++i)
     426            //   proc[i]->print_trace(1);
     427          }
     428#else
     429        if (ncycles==-1)
     430          sc_start();
     431        else
     432          sc_start(sc_core::sc_time(ncycles, SC_NS));
     433
     434        // std::cout << "Hit ENTER to end simulation" << std::endl;
     435        // char buf[1];
     436        // std::cin.getline(buf,1);
     437#endif
     438        for (uint32_t i=0; i<nb_proc; ++i)
     439          proc[i]->print_cpi();
     440        for (uint32_t i=0; i<nb_proc; ++i)
     441          proc[i]->print_stats();
     442
     443        soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_tty_irq         , nb_proc);
     444        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_tgt_proc    , nb_proc);
     445        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_c_proc  , nb_proc);
     446        soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_rw_proc , nb_proc);
     447        soclib::common::dealloc_elems<sc_signal<bool>                     >(signal_proc_it         , nb_proc, 6);
     448
     449        for (uint32_t i=0; i<nb_proc; ++i)
     450          delete proc[i];
     451
    368452        return EXIT_SUCCESS;
    369 #endif
    370453}
    371454
    372455int sc_main (int argc, char *argv[])
    373456{
    374         try {
    375                 return _main(argc, argv);
    376         } catch (std::exception &e) {
    377                 std::cout << e.what() << std::endl;
    378         } catch (...) {
    379                 std::cout << "Unknown exception occured" << std::endl;
    380                 throw;
    381         }
    382         return 1;
     457  try {
     458    return _main(argc, argv);
     459  } catch (std::exception &e) {
     460    std::cout << e.what() << std::endl;
     461  } catch (...) {
     462    std::cout << "Unknown exception occured" << std::endl;
     463    throw;
     464  }
     465  return 1;
    383466}
Note: See TracChangeset for help on using the changeset viewer.