From aa232879a32243ab1ccee10ac13f796161eb2a49 Mon Sep 17 00:00:00 2001
From: Wang Tsu-Han <wangts@eurecom.fr>
Date: Tue, 6 Nov 2018 15:15:56 +0100
Subject: [PATCH] adding VCD log in file

---
 common/utils/LOG/vcd_signal_dumper.c          | 16 +++++-
 common/utils/LOG/vcd_signal_dumper.h          | 15 ++++++
 common/utils/T/T_defs.h                       |  4 +-
 common/utils/T/T_messages.txt                 | 54 +++++++++++++++++++
 openair2/GNB_APP/gnb_config.c                 |  2 +
 .../CONF/gnb.band78.tm1.106PRB.usrpx300.conf  |  9 ++++
 targets/RT/USER/nr-gnb.c                      | 21 +++++++-
 targets/RT/USER/nr-ru.c                       |  7 ++-
 targets/RT/USER/nr-uesoftmodem.h              |  4 +-
 9 files changed, 122 insertions(+), 10 deletions(-)

diff --git a/common/utils/LOG/vcd_signal_dumper.c b/common/utils/LOG/vcd_signal_dumper.c
index 666bf46d44..cb28be8550 100644
--- a/common/utils/LOG/vcd_signal_dumper.c
+++ b/common/utils/LOG/vcd_signal_dumper.c
@@ -189,7 +189,17 @@ const char* eurecomVariablesNames[] = {
   "ue0_trx_write_ns_missing",
   "enb_thread_rxtx_CPUID",
   "ru_thread_CPUID",
-  "ru_thread_tx_CPUID"
+  "ru_thread_tx_CPUID",
+
+  /*signal for NR*/
+  "frame_number_TX0_gNB",
+  "frame_number_TX1_gNB",
+  "frame_number_RX0_gNB",
+  "frame_number_RX1_gNB",
+  "subframe_number_TX0_gNB",
+  "subframe_number_TX1_gNB",
+  "subframe_number_RX0_gNB",
+  "subframe_number_RX1_gNB"
 };
 
 const char* eurecomFunctionsNames[] = {
@@ -408,6 +418,10 @@ const char* eurecomFunctionsNames[] = {
   "pdcch_interleaving",
   "pdcch_tx",
 
+  /*NR softmodem signal*/
+  "gNB_thread_rxtx0",
+  "gNB_thread_rxtx1"
+
 };
 
 struct vcd_module_s vcd_modules[] = {
diff --git a/common/utils/LOG/vcd_signal_dumper.h b/common/utils/LOG/vcd_signal_dumper.h
index 749978bb48..5c1ba9e7fe 100644
--- a/common/utils/LOG/vcd_signal_dumper.h
+++ b/common/utils/LOG/vcd_signal_dumper.h
@@ -167,6 +167,17 @@ typedef enum {
   VCD_SIGNAL_DUMPER_VARIABLES_CPUID_ENB_THREAD_RXTX,
   VCD_SIGNAL_DUMPER_VARIABLES_CPUID_RU_THREAD,
   VCD_SIGNAL_DUMPER_VARIABLES_CPUID_RU_THREAD_TX,
+
+  /*signal for NR*/
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_GNB,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_GNB,
+
   VCD_SIGNAL_DUMPER_VARIABLES_END
 } vcd_signal_dump_variables;
 
@@ -389,6 +400,10 @@ typedef enum {
   VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_INTERLEAVING,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_TX,
 
+  /*NR softmodem signal*/
+  VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX1,
+
   VCD_SIGNAL_DUMPER_FUNCTIONS_END
 } vcd_signal_dump_functions;
 
diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h
index 83a380662d..5300237178 100644
--- a/common/utils/T/T_defs.h
+++ b/common/utils/T/T_defs.h
@@ -41,10 +41,10 @@ typedef struct {
 } T_cache_t;
 
 /* number of VCD functions (to be kept up to date! see in T_messages.txt) */
-#define VCD_NUM_FUNCTIONS 190
+#define VCD_NUM_FUNCTIONS 192//190
 
 /* number of VCD variables (to be kept up to date! see in T_messages.txt) */
-#define VCD_NUM_VARIABLES 128
+#define VCD_NUM_VARIABLES 136//128
 
 /* first VCD function (to be kept up to date! see in T_messages.txt) */
 #define VCD_FIRST_FUNCTION    ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index ec0585c799..6057c09f1c 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -1680,6 +1680,48 @@ ID = VCD_VARIABLE_CPUID_RU_THREAD_TX
     FORMAT = ulong,value
     VCD_NAME = ru_thread_tx_CPUID
 
+ #variable for gNB
+ID = VCD_VARIABLE_FRAME_NUMBER_TX0_GNB
+    DESC = VCD variable FRAME_NUMBER_TX0_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = frame_number_TX0_gNB
+ID = VCD_VARIABLE_FRAME_NUMBER_TX1_GNB
+    DESC = VCD variable FRAME_NUMBER_TX1_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = frame_number_TX1_gNB
+ID = VCD_VARIABLE_FRAME_NUMBER_RX0_GNB
+    DESC = VCD variable FRAME_NUMBER_RX0_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = frame_number_RX0_gNB
+ID = VCD_VARIABLE_FRAME_NUMBER_RX1_GNB
+    DESC = VCD variable FRAME_NUMBER_RX1_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = frame_number_RX1_gNB
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_GNB
+    DESC = VCD variable SUBFRAME_NUMBER_TX0_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = subframe_number_TX0_gNB
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_GNB
+    DESC = VCD variable SUBFRAME_NUMBER_TX1_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = subframe_number_TX1_gNB
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_GNB
+    DESC = VCD variable SUBFRAME_NUMBER_RX0_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = subframe_number_RX0_gNB
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_GNB
+    DESC = VCD variable SUBFRAME_NUMBER_RX1_GNB
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+    VCD_NAME = subframe_number_RX1_gNB
+
 #functions
 
 ID = VCD_FUNCTION_RT_SLEEP
@@ -2637,3 +2679,15 @@ ID = VCD_FUNCTION_PDCCH_TX
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
     VCD_NAME = pdcch_tx
+
+  #function for gNB
+ID = VCD_FUNCTION_gNB_PROC_RXTX0
+    DESC = VCD function gNB_PROC_RXTX0
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+    VCD_NAME = gNB_thread_rxtx0
+ID = VCD_FUNCTION_gNB_PROC_RXTX1
+    DESC = VCD function gNB_PROC_RXTX1
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+    VCD_NAME = gNB_thread_rxtx1
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index db1bc52090..7270ce9258 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -3004,8 +3004,10 @@ int RCconfig_nr_parallel(void) {
   }
 
   if(parallel_config == NULL) set_parallel_conf(parallel_conf);
+if(parallel_config == NULL)printf("~~~~~~~~~~~~~~~~~~~~parallel_conf = %s\n",parallel_conf);
 
   if(worker_config == NULL)   set_worker_conf(worker_conf);
+if(worker_config == NULL)printf("~~~~~~~~~~~~~~~~~~~~worker_conf = %s\n",worker_conf);
 
   return 0;
 }
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
index cd85fe7a33..721c307f71 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
@@ -259,6 +259,15 @@ RUs = (
     }
 );  
 
+THREAD_STRUCT = (
+  {
+    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+    parallel_config    = "PARALLEL_RU_L1_TRX_SPLIT";
+    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+    worker_config      = "WORKER_DISABLE";
+  }
+);
+
 NETWORK_CONTROLLER :
 {
     FLEXRAN_ENABLED        = "no";
diff --git a/targets/RT/USER/nr-gnb.c b/targets/RT/USER/nr-gnb.c
index 34e9f295fd..58e9be4a9e 100644
--- a/targets/RT/USER/nr-gnb.c
+++ b/targets/RT/USER/nr-gnb.c
@@ -290,6 +290,8 @@ static void* gNB_L1_thread_tx(void* param) {
   gNB_L1_proc_t *gNB_proc  = (gNB_L1_proc_t*)param;
   gNB_L1_rxtx_proc_t *proc = &gNB_proc->L1_proc_tx;
   PHY_VARS_gNB *gNB = RC.gNB[0][proc->CC_id];
+
+printf("~~~~~~~~~~~~~~~~~~~~gNB_L1_thread_tx is created\n");
   
   char thread_name[100];
   sprintf(thread_name,"TXnp4_%d\n",&gNB->proc.L1_proc == proc ? 0 : 1);
@@ -299,8 +301,9 @@ static void* gNB_L1_thread_tx(void* param) {
   
   while (!oai_exit) {
     
-
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX1, 0 );
     if (wait_on_condition(&proc->mutex,&proc->cond,&proc->instance_cnt,thread_name)<0) break;
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX1, 1 );
     if (oai_exit) break;    
     // *****************************************
     // TX processing for subframe n+4
@@ -308,6 +311,11 @@ static void* gNB_L1_thread_tx(void* param) {
     // (may be relaxed in the future for performance reasons)
     // *****************************************
     
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_GNB,proc->subframe_tx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_GNB,proc->subframe_rx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_GNB,proc->frame_tx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_GNB,proc->frame_rx);
+
     phy_procedures_gNB_TX(gNB, proc, 1);
 
     pthread_mutex_lock( &proc->mutex );
@@ -337,6 +345,8 @@ static void* gNB_L1_thread( void* param ) {
   gNB_L1_rxtx_proc_t *proc = &gNB_proc->L1_proc;
   PHY_VARS_gNB *gNB = RC.gNB[0][proc->CC_id];
 
+printf("~~~~~~~~~~~~~~~~~~~~gNB_L1_thread_tx is created\n");
+
   char thread_name[100];
 
 
@@ -349,8 +359,14 @@ static void* gNB_L1_thread( void* param ) {
 
   while (!oai_exit) {
 
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0, 0 );
     if (wait_on_condition(&proc->mutex,&proc->cond,&proc->instance_cnt,thread_name)<0) break;
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0, 1 );
 
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_GNB,proc->subframe_tx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_GNB,proc->subframe_rx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_GNB,proc->frame_tx);
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_GNB,proc->frame_rx);
 
     if (oai_exit) break;
 
@@ -769,7 +785,9 @@ void init_gNB_proc(int inst) {
 
     LOG_I(PHY,"gNB->single_thread_flag:%d\n", gNB->single_thread_flag);
 
+printf("~~~~~~~~~~~~~~~~~~~thread_parallel = %d",get_thread_parallel_conf());
     if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) {
+printf("~~~~~~~~~~~~~~~~~~~~~~~creating gNB_L1_thread and gNB_L1_thread_tx \n");
       pthread_create( &L1_proc->pthread, attr0, gNB_L1_thread, proc );
       pthread_create( &L1_proc_tx->pthread, attr1, gNB_L1_thread_tx, proc);
     }
@@ -1046,6 +1064,7 @@ void init_eNB_afterRU(void) {
       //init_transport(gNB);
       //init_precoding_weights(RC.gNB[inst][CC_id]);
     }
+printf("~~~~~~~~~~~~~~~~~~~~~~~start init gNB proc\n");
     init_gNB_proc(inst);
   }
 
diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c
index 83410608e6..f4481dcbf6 100644
--- a/targets/RT/USER/nr-ru.c
+++ b/targets/RT/USER/nr-ru.c
@@ -1407,8 +1407,7 @@ static void* ru_thread_tx( void* param ) {
 
   printf( "ru_thread_tx ready\n");
   while (!oai_exit) { 
-
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_CPUID_RU_THREAD_TX,sched_getcpu());   
+ 
     if (oai_exit) break;   
 
 
@@ -1430,7 +1429,7 @@ static void* ru_thread_tx( void* param ) {
     }
     else
     {
-      if(proc->frame_tx == print_frame)
+      /*if(proc->frame_tx == print_frame)
       {
         for (i=0; i<ru->nb_tx; i++)
         {
@@ -1454,7 +1453,7 @@ static void* ru_thread_tx( void* param ) {
 	    }
           }//if(proc->subframe_tx == 9)
         }//for (i=0; i<ru->nb_tx; i++)
-      }//if(proc->frame_tx == print_frame)
+      }//if(proc->frame_tx == print_frame)*/
     }//else  emulate_rf
     release_thread(&proc->mutex_gNBs,&proc->instance_cnt_gNBs,"ru_thread_tx");
     for(i = 0; i<ru->num_gNB; i++)
diff --git a/targets/RT/USER/nr-uesoftmodem.h b/targets/RT/USER/nr-uesoftmodem.h
index 90887fe128..dd74adc014 100644
--- a/targets/RT/USER/nr-uesoftmodem.h
+++ b/targets/RT/USER/nr-uesoftmodem.h
@@ -179,8 +179,8 @@
 {"T" ,                      CONFIG_HLP_TDD,         PARAMFLAG_BOOL,         iptr:&tddflag,                      defintval:0,                    TYPE_INT,       0},                     \
 {"numerology" ,             CONFIG_HLP_NUMEROLOGY,  PARAMFLAG_BOOL,         iptr:&numerology,                   defintval:0,                    TYPE_INT,       0},                     \
 {"emulate-rf" ,             CONFIG_HLP_EMULATE_RF,  PARAMFLAG_BOOL,         iptr:&emulate_rf,                   defintval:0,                    TYPE_INT,       0},                     \
-{"codingw" ,                CONFIG_HLP_CODINGW,     PARAMFLAG_BOOL,         iptr:&codingw,                      defintval:0,                    TYPE_INT,       0},                     \
-{"fepw" ,                   CONFIG_HLP_FEPW,        PARAMFLAG_BOOL,         iptr:&fepw,                         defintval:0,                    TYPE_INT,       0},                     \
+{"parallel-config",         CONFIG_HLP_PARALLEL_CMD,0,                      strptr:(char **)&parallel_config,   defstrval:NULL,                 TYPE_STRING,    0},                     \
+{"worker-config",           CONFIG_HLP_WORKER_CMD,  0,                      strptr:(char **)&worker_config,     defstrval:NULL,                 TYPE_STRING,    0},                     \
 {"nbiot-disable",           CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL,         iptr:&nonbiotflag,			defintval:0,			TYPE_INT,	0} \
 }
 
-- 
2.26.2