Index: trunk/platforms/tsar_generic_leti/arch.py
===================================================================
--- trunk/platforms/tsar_generic_leti/arch.py	(revision 825)
+++ trunk/platforms/tsar_generic_leti/arch.py	(revision 826)
@@ -193,22 +193,36 @@
     tty = mapping.addPeriph( 'TTY', base = tty_base, size = tty_size, ptype = 'TTY', channels = nb_ttys )
 
-    nic = mapping.addPeriph( 'NIC', base = nic_base, size = nic_size, ptype = 'NIC', channels = nb_nics )
-
-    cma = mapping.addPeriph( 'CMA', base = cma_base, size = cma_size, ptype = 'CMA', channels = 2*nb_nics )
-
-    fbf = mapping.addPeriph( 'FBF', base = fbf_base, size = fbf_size, ptype = 'FBF', arg = fbf_width )
-
-    pic = mapping.addPeriph( 'PIC', base = pic_base, size = pic_size, ptype = 'PIC', channels = 32 )
-
-    mapping.addIrq( pic, index = 0 , isrtype = 'ISR_NIC_RX', channel = 0 )
-    mapping.addIrq( pic, index = 1 , isrtype = 'ISR_NIC_RX', channel = 1 )
-    mapping.addIrq( pic, index = 2 , isrtype = 'ISR_NIC_TX', channel = 0 )
-    mapping.addIrq( pic, index = 3 , isrtype = 'ISR_NIC_TX', channel = 1 )
-    mapping.addIrq( pic, index = 4 , isrtype = 'ISR_CMA'   , channel = 0 )
-    mapping.addIrq( pic, index = 5 , isrtype = 'ISR_CMA'   , channel = 1 )
-    mapping.addIrq( pic, index = 6 , isrtype = 'ISR_CMA'   , channel = 2 )
-    mapping.addIrq( pic, index = 7 , isrtype = 'ISR_CMA'   , channel = 3 )
-    mapping.addIrq( pic, index = 8 , isrtype = 'ISR_BDV'   , channel = 0 )
-    mapping.addIrq( pic, index = 16, isrtype = 'ISR_TTY_RX', channel = 0 )
+    if x_io != 0 or y_io != 0:
+        nic = mapping.addPeriph( 'NIC', base = nic_base, size = nic_size, ptype = 'NIC', channels = nb_nics )
+        cma = mapping.addPeriph( 'CMA', base = cma_base, size = cma_size, ptype = 'CMA', channels = 2*nb_nics )
+        fbf = mapping.addPeriph( 'FBF', base = fbf_base, size = fbf_size, ptype = 'FBF', arg = fbf_width )
+        pic = mapping.addPeriph( 'PIC', base = pic_base, size = pic_size, ptype = 'PIC', channels = 32 )
+
+        mapping.addIrq( pic, index = 0 , isrtype = 'ISR_NIC_RX', channel = 0 )
+        mapping.addIrq( pic, index = 1 , isrtype = 'ISR_NIC_RX', channel = 1 )
+        mapping.addIrq( pic, index = 2 , isrtype = 'ISR_NIC_TX', channel = 0 )
+        mapping.addIrq( pic, index = 3 , isrtype = 'ISR_NIC_TX', channel = 1 )
+        mapping.addIrq( pic, index = 4 , isrtype = 'ISR_CMA'   , channel = 0 )
+        mapping.addIrq( pic, index = 5 , isrtype = 'ISR_CMA'   , channel = 1 )
+        mapping.addIrq( pic, index = 6 , isrtype = 'ISR_CMA'   , channel = 2 )
+        mapping.addIrq( pic, index = 7 , isrtype = 'ISR_CMA'   , channel = 3 )
+        mapping.addIrq( pic, index = 8 , isrtype = 'ISR_BDV'   , channel = 0 )
+        mapping.addIrq( pic, index = 16, isrtype = 'ISR_TTY_RX', channel = 0 )
+
+        mapping.addGlobal( 'seg_nic', nic_base, nic_size, '__W_',
+                           vtype = 'PERI', x = 0, y = 0, pseg = 'NIC',
+                           local = False, big = True )
+
+        mapping.addGlobal( 'seg_cma', cma_base, cma_size, '__W_',
+                           vtype = 'PERI', x = 0, y = 0, pseg = 'CMA',
+                           local = False, big = True )
+
+        mapping.addGlobal( 'seg_fbf', fbf_base, fbf_size, '__W_',
+                           vtype = 'PERI', x = 0, y = 0, pseg = 'FBF',
+                           local = False, big = True )
+
+        mapping.addGlobal( 'seg_pic', pic_base, pic_size, '__W_',
+                           vtype = 'PERI', x = 0, y = 0, pseg = 'PIC',
+                           local = False, big = True )
 
     ### hardware components replicated in all clusters
@@ -326,20 +340,4 @@
                        local = False, big = True )
 
-    mapping.addGlobal( 'seg_nic', nic_base, nic_size, '__W_',
-                       vtype = 'PERI', x = 0, y = 0, pseg = 'NIC',
-                       local = False, big = True )
-
-    mapping.addGlobal( 'seg_cma', cma_base, cma_size, '__W_',
-                       vtype = 'PERI', x = 0, y = 0, pseg = 'CMA',
-                       local = False, big = True )
-
-    mapping.addGlobal( 'seg_fbf', fbf_base, fbf_size, '__W_',
-                       vtype = 'PERI', x = 0, y = 0, pseg = 'FBF',
-                       local = False, big = True )
-
-    mapping.addGlobal( 'seg_pic', pic_base, pic_size, '__W_',
-                       vtype = 'PERI', x = 0, y = 0, pseg = 'PIC',
-                       local = False, big = True )
-
     ### global vsegs for internal peripherals : non local / small pages
     ### allocated in all clusters with name indexed by (x,y)
Index: trunk/platforms/tsar_generic_leti/top.cpp
===================================================================
--- trunk/platforms/tsar_generic_leti/top.cpp	(revision 825)
+++ trunk/platforms/tsar_generic_leti/top.cpp	(revision 826)
@@ -697,4 +697,6 @@
 #endif
 
+
+#if USE_PIC
     //////////////////////////////////////////////////////////////////
     // IO bus and external peripherals in cluster[X_SIZE-1,Y_SIZE]
@@ -923,4 +925,6 @@
     wt_iobus->p_dspin_rsp              (signal_dspin_bound_rsp_in[X_SIZE-1][Y_SIZE-1][NORTH]);
 
+#endif // USE_PIC
+
     // Clock & RESET for clusters
     for (size_t x = 0; x < (X_SIZE); x++)
@@ -1116,4 +1120,11 @@
     }
 
+#if USE_PIC == 0
+    signal_dspin_bound_cmd_in[X_SIZE-1][Y_SIZE-1][NORTH].write = false;
+    signal_dspin_bound_rsp_out[X_SIZE-1][Y_SIZE-1][NORTH].read = true;
+    signal_dspin_bound_cmd_out[X_SIZE-1][Y_SIZE-1][NORTH].read = true;
+    signal_dspin_bound_rsp_in[X_SIZE-1][Y_SIZE-1][NORTH].write = false;
+#endif
+
     // set default values for VCI signals connected to unused ports on iobus
     signal_vci_tgt_memc.rspval = false;
@@ -1234,4 +1245,5 @@
             // clusters[1][1]->router_m2p->print_trace();
 
+#if USE_PIC
             // trace external ioc
             bdev->print_trace();
@@ -1243,4 +1255,5 @@
             signal_vci_tgt_iopi.print_trace("[SIG]IOPI_TGT");
             signal_vci_ini_iopi.print_trace("[SIG]IOPI_INI");
+#endif
 
             // trace internal tty
@@ -1250,45 +1263,46 @@
         }  // end trace
 
-        if (0)
+#if 0
+#if USE_PIC
+        // trace BDV interrupts events
+        if ( signal_irq_bdev.read() != prev_irq_bdev )
         {
-            // trace BDV interrupts events
-            if ( signal_irq_bdev.read() != prev_irq_bdev )
-            {
-                prev_irq_bdev = signal_irq_bdev.read();
-                std::cout << std::dec << "@@@ IRQ_BDEV = " << signal_irq_bdev.read()
-                          << " at cycle " << n << std::endl;
-            }
-
-            // trace TTY interrupts events
-            for ( size_t x = 0 ; x < 8 ; x++ )
-            {
-                if ( signal_irq_mtty_rx[x].read() != prev_irq_mtty_rx[x] )
-                {
-                    prev_irq_mtty_rx[x] = signal_irq_mtty_rx[x].read();
-                    std::cout << std::dec << "@@@ IRQ_MTTY["<<x<<"] = "
-                              << signal_irq_mtty_rx[x].read()
-                              << " at cycle " << n << std::endl;
-                }
-            }
-
-            // trace processor interrupts events
-            for ( size_t x = 0 ; x < X_SIZE ; x++ )
-            for ( size_t y = 0 ; y < Y_SIZE ; y++ )
-            for ( size_t i = 0 ; i < NB_PROCS_MAX ; i++ )
-            {
-                if ( clusters[x][y]->signal_proc_irq[i] != prev_irq_proc[x][y][i] )
-                {
+           prev_irq_bdev = signal_irq_bdev.read();
+           std::cout << std::dec << "@@@ IRQ_BDEV = " << signal_irq_bdev.read()
+              << " at cycle " << n << std::endl;
+        }
+
+        // trace TTY interrupts events
+        for ( size_t x = 0 ; x < 8 ; x++ )
+        {
+           if ( signal_irq_mtty_rx[x].read() != prev_irq_mtty_rx[x] )
+           {
+              prev_irq_mtty_rx[x] = signal_irq_mtty_rx[x].read();
+              std::cout << std::dec << "@@@ IRQ_MTTY["<<x<<"] = "
+                 << signal_irq_mtty_rx[x].read()
+                 << " at cycle " << n << std::endl;
+           }
+        }
+        // trace VCI transactions on IOPIC and XCU(0,0)
+        signal_vci_tgt_iopi.print_trace("@@@ IOPI_TGT");
+        signal_vci_ini_iopi.print_trace("@@@ IOPI_INI");
+#endif
+
+        // trace processor interrupts events
+        for ( size_t x = 0 ; x < X_SIZE ; x++ )
+           for ( size_t y = 0 ; y < Y_SIZE ; y++ )
+              for ( size_t i = 0 ; i < NB_PROCS_MAX ; i++ )
+              {
+                 if ( clusters[x][y]->signal_proc_irq[i] != prev_irq_proc[x][y][i] )
+                 {
                     prev_irq_proc[x][y][i] = clusters[x][y]->signal_proc_irq[i];
                     std::cout << std::dec << "@@@ IRQ_PROC["<<x<<","<<y<<","<<i<<"] = "
-                              << clusters[x][y]->signal_proc_irq[i]
-                              << " at cycle " << n << std::endl;
-                }
-            }
-
-            // trace VCI transactions on IOPIC and XCU(0,0)
-            signal_vci_tgt_iopi.print_trace("@@@ IOPI_TGT");
-            signal_vci_ini_iopi.print_trace("@@@ IOPI_INI");
-            clusters[0][0]->signal_vci_tgt_xicu.print_trace("@@@ XCU_0_0");
-        }
+                       << clusters[x][y]->signal_proc_irq[i]
+                       << " at cycle " << n << std::endl;
+                 }
+              }
+
+        clusters[0][0]->signal_vci_tgt_xicu.print_trace("@@@ XCU_0_0");
+#endif
 
         sc_start(sc_core::sc_time(1, SC_NS));
