Ignore:
Timestamp:
Mar 27, 2015, 5:21:52 PM (9 years ago)
Author:
alain
Message:

Fix a bug in platform tsar_generic_iob to support more than 4 processors per cluster.
The hard_config.h file format has also been enriched.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/tsar_generic_iob/top.cpp

    r953 r959  
    5050// Besides the external peripherals, each cluster contains one XICU component,
    5151// and one multi channels DMA component.
    52 // The XICU component is mainly used to handle WTI IRQs, as only 5 HWI IRQs
    53 // are connected to XICU in each cluster:
    54 // - IRQ_IN[0] : MMC
    55 // - IRQ_IN[1] : DMA channel 0
    56 // - IRQ_IN[2] : DMA channel 1
    57 // - IRQ_IN[3] : DMA channel 2
    58 // - IRQ_IN[4] : DMA channel 3
     52// The XICU component is mainly used to handle WTI IRQs, as only
     53// 1 + NB_PROCS_MAX HWI IRQs are connected to XICU in each cluster:
     54// - IRQ_IN[0]            : MMC
     55// - IRQ_IN[1]            : DMA channel 0
     56// - IRQ_IN[2]            : DMA channel 1
     57// - ...                    ...   
     58// - IRQ_IN[NB_PROCS_MAX] : DMA channel NB_PROCS_MAX
    5959//
    6060// All clusters are identical, but cluster(0,0) and cluster(XMAX-1,YMAX-1)
     
    8080// - X_SIZE           : number of clusters in a row
    8181// - Y_SIZE           : number of clusters in a column
    82 // - NB_PROCS_MAX     : number of processors per cluster (power of 2)
    83 // - NB_DMA_CHANNELS  : number of DMA channels per cluster    (up to 8)
     82// - NB_PROCS_MAX     : number of processors per cluster (up to 8)
     83// - NB_DMA_CHANNELS  : number of DMA channels per cluster    (>= NB_PROCS_MAX)
    8484// - NB_TTY_CHANNELS  : number of TTY channels in I/O network (up to 16)
    8585// - NB_NIC_CHANNELS  : number of NIC channels in I/O network (up to 2)
     
    8787// - FBUF_X_SIZE      : width of frame buffer (pixels)
    8888// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
    89 // - XCU_NB_INPUTS    : number of HWIs = number of WTIs = number of PTIs
     89// - XCU_NB_HWI       : number of XCU HWIs (>= NB_PROCS_MAX + 1)
     90// - XCU_NB_PTI       : number of XCU PTIs (>= NB_PROCS_MAX)
     91// - XCU_NB_WTI       : number of XCU WTIs (>= 4*NB_PROCS_MAX)
     92// - XCU_NB_OUT       : number of XCU output IRQs (>= 4*NB_PROCS_MAX)
    9093//
    9194// Some secondary hardware parameters must be defined in this top.cpp file:
     
    445448           "The YMAX parameter cannot be larger than 16" );
    446449
    447    assert( (NB_PROCS_MAX <= (1 << P_WIDTH)) and
    448            "NB_PROCS_MAX parameter cannot be larger than 2^P_WIDTH" );
    449 
    450    assert( (NB_DMA_CHANNELS <= 8) and
     450   assert( (NB_PROCS_MAX <= 8) and
     451           "NB_PROCS_MAX parameter cannot be larger than 8" );
     452
     453   assert( (XCU_NB_HWI > NB_PROCS_MAX) and
     454           "XCU_NB_HWI must be larger than NB_PROCS_MAX" );
     455
     456   assert( (XCU_NB_PTI >= NB_PROCS_MAX) and
     457           "XCU_NB_PTI cannot be smaller than NB_PROCS_MAX" );
     458
     459   assert( (XCU_NB_WTI >= 4*NB_PROCS_MAX) and
     460           "XCU_NB_WTI cannot be smaller than 4*NB_PROCS_MAX" );
     461
     462   assert( (XCU_NB_OUT >= 4*NB_PROCS_MAX) and
     463           "XCU_NB_OUT cannot be smaller than 4*NB_PROCS_MAX" );
     464   
     465   assert( (NB_DMA_CHANNELS >= NB_PROCS_MAX) and
    451466           "The NB_DMA_CHANNELS parameter cannot be larger than 8" );
    452467
     
    10701085                L1_DSETS,
    10711086                XRAM_LATENCY,
    1072                 XCU_NB_INPUTS,
     1087                XCU_NB_HWI,
     1088                XCU_NB_PTI,
     1089                XCU_NB_WTI,
     1090                XCU_NB_OUT,
    10731091
    10741092                loader,
     
    14311449
    14321450        // Monitor a specific address for one L1 cache
    1433         // clusters[0][0]->proc[0]->cache_monitor(0x600800ULL);
     1451        // clusters[0][0]->proc[0]->cache_monitor(0x800080ULL);
    14341452
    14351453        // Monitor a specific address for one L2 cache
    1436         // clusters[0][0]->memc->cache_monitor( 0x600800ULL, false );   // full line
     1454        // clusters[0][0]->memc->cache_monitor( 0x800080ULL, false );   // full line
    14371455
    14381456        // Monitor a specific address for one XRAM
     
    14571475                clusters[x][y]->signal_int_vci_ini_proc[l].print_trace(proc_signame.str());
    14581476
    1459 //              clusters[x][y]->xicu->print_trace(l);
    1460 //              std::ostringstream xicu_signame;
    1461 //              xicu_signame << "[SIG]XICU_" << x << "_" << y;
    1462 //              clusters[x][y]->signal_int_vci_tgt_xicu.print_trace(xicu_signame.str());
     1477                clusters[x][y]->xicu->print_trace(1);
     1478                std::ostringstream xicu_signame;
     1479                xicu_signame << "[SIG]XICU_" << x << "_" << y;
     1480                clusters[x][y]->signal_int_vci_tgt_xicu.print_trace(xicu_signame.str());
    14631481
    14641482                clusters[x][y]->mdma->print_trace();
    1465                 std::ostringstream mdma_signame;
    1466                 mdma_signame << "[SIG]MDMA_" << x << "_" << y;
    1467                 clusters[x][y]->signal_int_vci_tgt_mdma.print_trace(mdma_signame.str());
     1483                std::ostringstream mdma_tgt_signame;
     1484                mdma_tgt_signame << "[SIG]MDMA_TGT_" << x << "_" << y;
     1485                clusters[x][y]->signal_int_vci_tgt_mdma.print_trace(mdma_tgt_signame.str());
     1486                std::ostringstream mdma_ini_signame;
     1487                mdma_ini_signame << "[SIG]MDMA_INI_" << x << "_" << y;
     1488                clusters[x][y]->signal_int_vci_ini_mdma.print_trace(mdma_ini_signame.str());
    14681489
    14691490                // local interrupts in cluster(x,y)
Note: See TracChangeset for help on using the changeset viewer.