Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 137)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 138)
@@ -50,6 +50,9 @@
   public    : Stat                           * _stat;
     
-  private   : counter_t                      * _stat_nb_read;
-  private   : counter_t                      * _stat_nb_write;
+  // private   : counter_t                      * _stat_nb_read;
+  // private   : counter_t                      * _stat_nb_write;
+  private   : counters_t                     * _stat_port_read;
+  private   : counters_t                     * _stat_port_write;
+  private   : counters_t                     * _stat_port_read_write;
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp	(revision 137)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_statistics_declaration.cpp	(revision 138)
@@ -21,12 +21,32 @@
 		      param_statistics);
 
-    _stat_nb_read           = _stat->create_variable("nb_read" );
-    _stat_nb_write          = _stat->create_variable("nb_write");
+    if (_param->_nb_port_read>0)
+    _stat_port_read         = _stat->create_counters("port_read",_param->_nb_port_read,"",
+                                                     _("Usage of read port %d."),
+                                                     _("Percent of usage read port %d."),
+                                                     _("Average of usage read port.")
+                                                     );
 
-    _stat->create_expr_average_by_cycle("average_read" , "nb_read" , "", _("Average read by cycle" ));
-    _stat->create_expr_average_by_cycle("average_write", "nb_write", "", _("Average write by cycle"));
+    if (_param->_nb_port_write>0)
+    _stat_port_write        = _stat->create_counters("port_write",_param->_nb_port_write,"",
+                                                     _("Usage of write port %d."),
+                                                     _("Percent of usage write port %d."),
+                                                     _("Average of usage write port.")
+                                                     );
+    if (_param->_nb_port_read_write>0)
+    _stat_port_read_write   = _stat->create_counters("port_read_write",_param->_nb_port_read_write,"",
+                                                     _("Usage of read_write port."),
+                                                     _("Percent of usage read_write port %d."),
+                                                     _("Average of usage read_write port.")
+                                                     );
 
-    _stat->create_expr_percent         ("percent_use_read" , "average_read" , toString(_param->_nb_port_read +_param->_nb_port_read_write), _("Percent read by cycle" ));
-    _stat->create_expr_percent         ("percent_use_write", "average_write", toString(_param->_nb_port_write+_param->_nb_port_read_write), _("Percent write by cycle"));
+    // _stat_nb_read           = _stat->create_variable("nb_read" );
+    // _stat_nb_write          = _stat->create_variable("nb_write");
+
+    // _stat->create_expr_average_by_cycle("average_read" , "nb_read" , "", _("Average read by cycle" ));
+    // _stat->create_expr_average_by_cycle("average_write", "nb_write", "", _("Average write by cycle"));
+
+    // _stat->create_expr_percent         ("percent_use_read" , "average_read" , toString(_param->_nb_port_read +_param->_nb_port_read_write), _("Percent read by cycle" ));
+    // _stat->create_expr_percent         ("percent_use_write", "average_write", toString(_param->_nb_port_write+_param->_nb_port_read_write), _("Percent write by cycle"));
 
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 137)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 138)
@@ -37,4 +37,9 @@
     else
       {
+#ifdef STATISTICS
+        uint32_t stat_nb_read      =0;
+        uint32_t stat_nb_write     =0;
+        uint32_t stat_nb_read_write=0;
+#endif
         for (uint32_t i=0; i<_param->_nb_port_write; i++)
           {
@@ -45,7 +50,11 @@
               {
 #ifdef STATISTICS
-                if (usage_is_set(_usage,USE_STATISTICS))
-                  (*_stat_nb_write) ++;
-#endif    
+                stat_nb_write++;
+#endif
+
+// #ifdef STATISTICS
+//                 if (usage_is_set(_usage,USE_STATISTICS))
+//                   (*_stat_nb_write) ++;
+// #endif    
 
                 Taddress_t address = (_param->_have_port_address)?PORT_READ(in_WRITE_ADDRESS[i]):0;
@@ -74,10 +83,14 @@
             if (PORT_READ(in_READ_WRITE_VAL[i]) == true)
               {
+#ifdef STATISTICS
+                stat_nb_read_write++;
+#endif
+
                 if (PORT_READ(in_READ_WRITE_RW [i]) == RW_WRITE)
                   {
-#ifdef STATISTICS
-                    if (usage_is_set(_usage,USE_STATISTICS))
-                      (*_stat_nb_write) ++;
-#endif    
+// #ifdef STATISTICS
+//                     if (usage_is_set(_usage,USE_STATISTICS))
+//                       (*_stat_nb_write) ++;
+// #endif    
                     
                     Taddress_t address = (_param->_have_port_address)?PORT_READ(in_READ_WRITE_ADDRESS[i]):0;
@@ -95,21 +108,34 @@
                     reg_DATA[address] = data;
                   }
-#ifdef STATISTICS
-                else
-                  {
-                    if (usage_is_set(_usage,USE_STATISTICS))
-                      (*_stat_nb_read) ++;
-                  }
-#endif    
+// #ifdef STATISTICS
+//                 else
+//                   {
+//                     if (usage_is_set(_usage,USE_STATISTICS))
+//                       (*_stat_nb_read) ++;
+//                   }
+// #endif    
               }
           }
+
+        
+#ifdef STATISTICS
+        if (usage_is_set(_usage,USE_STATISTICS))
+          {
+            for (uint32_t i=0; i<_param->_nb_port_read; i++)
+              if ( PORT_READ(in_READ_VAL [i]) == 1)
+                {
+                  stat_nb_read ++;
+                  // (*_stat_nb_read) ++;
+                }
+
+            if (_param->_nb_port_read>0)
+            (*_stat_port_read      ) += stat_nb_read;
+            if (_param->_nb_port_write>0)
+            (*_stat_port_write     ) += stat_nb_write;
+            if (_param->_nb_port_read_write>0)
+            (*_stat_port_read_write) += stat_nb_read_write;
+          }
+#endif    
       }
-
-#ifdef STATISTICS
-    if (usage_is_set(_usage,USE_STATISTICS))
-      for (uint32_t i=0; i<_param->_nb_port_read; i++)
-        if ( PORT_READ(in_READ_VAL [i]) == 1)
-          (*_stat_nb_read) ++;
-#endif    
 
 #if defined(DEBUG_RegisterFile_Monolithic) and DEBUG_RegisterFile_Monolithic and (DEBUG >= DEBUG_TRACE)
