From 98cbcf619be03ef2a1e95cab1c38762df046e7d0 Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Tue, 18 Apr 2017 04:45:42 -0700
Subject: [PATCH] vcd modifications for RU-RAU split, gtkw for rau_if4

---
 openair1/PHY/LTE_TRANSPORT/if4_tools.c        |   6 +-
 openair2/UTIL/LOG/vcd_signal_dumper.c         |  12 +-
 openair2/UTIL/LOG/vcd_signal_dumper.h         |  12 +-
 targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c |   2 +-
 .../ETHERNET/USERSPACE/LIB/ethernet_lib.c     |   5 +-
 targets/RT/USER/lte-ru.c                      |  18 +-
 targets/RT/USER/rau_if4_single_thread.gtkw    | 155 ++++++++++++++++++
 7 files changed, 195 insertions(+), 15 deletions(-)
 create mode 100644 targets/RT/USER/rau_if4_single_thread.gtkw

diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
index 3c2d950a9e..be4191a4ba 100755
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -62,7 +62,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type, int k)
   if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 1 );   
 
   if (packet_type == IF4p5_PDLFFT) {
-    LOG_I(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
+    LOG_D(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
 
     if (subframe_select(fp,subframe)==SF_S)
       nsym=fp->dl_symbols_in_S_subframe;
@@ -234,7 +234,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
   IF4p5_header_t *packet_header=NULL;
   uint16_t *data_block=NULL, *i=NULL;
 
-  LOG_I(PHY,"recv IF4p5: RU %d waiting (%d samples)\n",ru->idx,db_fulllength);    
+  LOG_D(PHY,"recv IF4p5: RU %d waiting (%d samples)\n",ru->idx,db_fulllength);    
   if (ru->ifdevice.trx_read_func(&ru->ifdevice,
 				 (int64_t*) packet_type,
 				 &rx_buffer,
@@ -261,7 +261,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
   if (*packet_type == IF4p5_PDLFFT) {          
     *symbol_number = ((packet_header->frame_status)>>26)&0x000f;         
 
-    LOG_I(PHY,"DL_IF4p5: RU %d frame %d, subframe %d, symbol %d\n",ru->idx,*frame,*subframe,*symbol_number);
+    LOG_D(PHY,"DL_IF4p5: RU %d frame %d, subframe %d, symbol %d\n",ru->idx,*frame,*subframe,*symbol_number);
 
     slotoffsetF = (*symbol_number)*(fp->ofdm_symbol_size);// + (*subframe)*(fp->ofdm_symbol_size)*((fp->Ncp==1) ? 12 : 14) + 1;
     blockoffsetF = slotoffsetF + fp->ofdm_symbol_size - db_halflength - 1; 
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 96f173833a..8f7c83673f 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -75,6 +75,14 @@ const char* eurecomVariablesNames[] = {
   "subframe_number_TX1_eNB",
   "subframe_number_RX0_eNB",
   "subframe_number_RX1_eNB",
+  "frame_number_TX0_RU",
+  "frame_number_TX1_RU",
+  "frame_number_RX0_RU",
+  "frame_number_RX1_RU",
+  "subframe_number_TX0_RU",
+  "subframe_number_TX1_RU",
+  "subframe_number_RX0_RU",
+  "subframe_number_RX1_RU",
   "runtime_TX_eNB",
   "runtime_RX_eNB",
   "frame_number_TX0_UE",
@@ -230,8 +238,8 @@ const char* eurecomFunctionsNames[] = {
   "lte_ue_pbch_procedures",
   "phy_procedures_eNb_tx0",
   "phy_procedures_eNb_tx1",
-  "phy_procedures_eNb_rx_common0",
-  "phy_procedures_eNb_rx_common1",
+  "phy_procedures_ru_feprx0",
+  "phy_procedures_ru_feprx1",
   "phy_procedures_eNb_rx_uespec0",
   "phy_procedures_eNb_rx_uespec1",
   "phy_eNB_slot_fep",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index e1bcff39fc..fdd590a7b7 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -47,6 +47,14 @@ typedef enum {
   VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_ENB,
   VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_ENB,
   VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_ENB,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU,
+  VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_RU,
   VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB,
   VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB,
   VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE,
@@ -204,8 +212,8 @@ typedef enum {
   VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX1,
-  VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON,
-  VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON1,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX1,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC1,
   VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP,
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
index 41507565cc..074886890e 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
@@ -224,7 +224,7 @@ int trx_eth_write_udp_IF4p5(openair0_device *device, openair0_timestamp timestam
   }
    
   eth->tx_nsamps = nblocks;
-  printf("Sending %d bytes to %s\n",packet_size,str);
+  //printf("Sending %d bytes to %s\n",packet_size,str);
 
   bytes_sent = sendto(eth->sockfd,
 		      buff[0], 
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index c989b763f2..1d58206968 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -86,8 +86,9 @@ int trx_eth_start(openair0_device *device) {
   } else if (eth->flags == ETH_UDP_IF4p5_MODE) {
     printf("Setting ETHERNET to UDP_IF4p5_MODE\n");
     if (eth_socket_init_udp(device)!=0)   return -1;
-    printf("Setting Timenout to 999999 usecs\n");
-    if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0)  return -1;
+
+    //    printf("Setting Timeout to 999999 usecs\n");
+    //    if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0)  return -1;
 
 
     if (device->host_type == RAU_HOST) {
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index aa46ae3caa..2696df5db4 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -223,6 +223,7 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   proc->timestamp_tx = proc->timestamp_rx +  (4*fp->samples_per_tti);
   proc->subframe_tx = (sf+4)%10;
   proc->frame_tx    = (sf>5) ? (f+1)&1023 : f;
+
  
   if (proc->first_rx == 0) {
     if (proc->subframe_rx != *subframe){
@@ -239,6 +240,13 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
     *subframe = proc->subframe_rx;        
   }
 
+  if (ru == RC.ru[0]) {
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, f );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, sf );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
+  }
+
   proc->symbol_mask[sf] = 0;  
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );
   
@@ -370,8 +378,8 @@ void fh_if4p5_north_in(RU_t *ru,int *frame,int *subframe) {
 
   // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB, *frame );
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_ENB, *subframe );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, *frame );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, *subframe );
   }
 }
 
@@ -468,14 +476,14 @@ void fh_if4p5_north_out(RU_t *ru) {
   RU_proc_t *proc=&ru->proc;
   LTE_DL_FRAME_PARMS *fp = &ru->frame_parms;
   const int subframe     = proc->subframe_rx;
-  if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_ENB, proc->subframe_rx );
+  if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, proc->subframe_rx );
 
   if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) {
     /// **** in TDD during DL send_IF4 of ULTICK to RCC **** ///
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK, 0);
     return;
   }
-  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON, 1 ); 
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); 
 
   AssertFatal(ru->feprx!=NULL,"No northbound FEP function, exiting\n");
   if (ru->feprx) { 
@@ -484,7 +492,7 @@ void fh_if4p5_north_out(RU_t *ru) {
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULFFT, 0);
   }
 
-  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON, 0 );
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 0 );
 }
 void rx_rf(RU_t *ru,int *frame,int *subframe) {
 
diff --git a/targets/RT/USER/rau_if4_single_thread.gtkw b/targets/RT/USER/rau_if4_single_thread.gtkw
new file mode 100644
index 0000000000..454c36b753
--- /dev/null
+++ b/targets/RT/USER/rau_if4_single_thread.gtkw
@@ -0,0 +1,155 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Tue Apr 18 08:34:21 2017
+[*]
+[dumpfile] "/tmp/openair_dump_eNB.vcd"
+[dumpfile_mtime] "Tue Apr 18 08:25:27 2017"
+[dumpfile_size] 5288218
+[savefile] "/home/knopp/oai/openairinterface5g/targets/RT/USER/rau_if4_single_thread.gtkw"
+[timestart] 64780000000
+[size] 1301 716
+[pos] 309 0
+*-27.793451 65200000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[sst_width] 284
+[signals_width] 262
+[sst_expanded] 1
+[sst_vpaned_height] 294
+@24
+variables.trx_ts[63:0]
+variables.trx_tst[63:0]
+@28
+functions.recv_if4
+functions.send_if4
+functions.eNB_thread_rxtx0
+@24
+variables.frame_number_RX0_RU[63:0]
+variables.subframe_number_RX0_RU[63:0]
+variables.frame_number_RX0_eNB[63:0]
+variables.subframe_number_RX0_eNB[63:0]
+variables.frame_number_TX0_RU[63:0]
+variables.subframe_number_TX0_RU[63:0]
+variables.frame_number_TX0_eNB[63:0]
+variables.subframe_number_TX0_eNB[63:0]
+@29
+functions.phy_procedures_ru_feprx0
+@28
+functions.phy_procedures_eNb_tx0
+functions.phy_procedures_eNb_rx_uespec0
+functions.phy_enb_sfgen
+functions.phy_eNB_slot_fep
+functions.phy_enb_prach_rx
+@24
+variables.dci_info[63:0]
+variables.ue0_BO[63:0]
+@420
+variables.ue0_BSR[63:0]
+variables.ue0_timing_advance[63:0]
+@28
+functions.macxface_initiate_ra_proc
+functions.macxface_terminate_ra_proc
+functions.phy_enb_ulsch_msg3
+functions.macxface_SR_indication
+@420
+variables.ue0_SR_ENERGY[63:0]
+variables.ue0_SR_THRES[63:0]
+@28
+functions.phy_enb_ulsch_decoding0
+@24
+variables.ue0_res0[63:0]
+@420
+variables.ue0_rssi0[63:0]
+variables.ue0_MCS0[63:0]
+variables.ue0_RB0[63:0]
+@24
+variables.ue0_ROUND0[63:0]
+variables.ue0_SFN0[63:0]
+@28
+functions.phy_enb_ulsch_decoding1
+@24
+variables.ue0_res1[63:0]
+@420
+variables.ue0_rssi1[63:0]
+variables.ue0_MCS1[63:0]
+variables.ue0_RB1[63:0]
+@24
+variables.ue0_ROUND1[63:0]
+variables.ue0_SFN1[63:0]
+@28
+functions.phy_enb_ulsch_decoding2
+@24
+variables.ue0_res2[63:0]
+@420
+variables.ue0_rssi2[63:0]
+variables.ue0_MCS2[63:0]
+variables.ue0_RB2[63:0]
+@24
+variables.ue0_ROUND2[63:0]
+variables.ue0_SFN2[63:0]
+@28
+functions.phy_enb_ulsch_decoding3
+@24
+variables.ue0_res3[63:0]
+@420
+variables.ue0_rssi3[63:0]
+variables.ue0_MCS3[63:0]
+variables.ue0_RB3[63:0]
+@24
+variables.ue0_ROUND3[63:0]
+variables.ue0_SFN3[63:0]
+@28
+functions.phy_enb_ulsch_decoding4
+@420
+variables.ue0_rssi4[63:0]
+@24
+variables.ue0_res4[63:0]
+@420
+variables.ue0_MCS4[63:0]
+variables.ue0_RB4[63:0]
+@24
+variables.ue0_ROUND4[63:0]
+variables.ue0_SFN4[63:0]
+@28
+functions.phy_enb_ulsch_decoding5
+@24
+variables.ue0_res5[63:0]
+@420
+variables.ue0_rssi5[63:0]
+variables.ue0_MCS5[63:0]
+variables.ue0_RB5[63:0]
+@24
+variables.ue0_ROUND5[63:0]
+variables.ue0_SFN5[63:0]
+@28
+functions.phy_enb_ulsch_decoding6
+@24
+variables.ue0_res6[63:0]
+@420
+variables.ue0_rssi6[63:0]
+variables.ue0_MCS6[63:0]
+variables.ue0_RB6[63:0]
+@24
+variables.ue0_ROUND6[63:0]
+variables.ue0_SFN6[63:0]
+@28
+functions.phy_enb_ulsch_decoding7
+@24
+variables.ue0_res7[63:0]
+@420
+variables.ue0_rssi7[63:0]
+variables.ue0_MCS7[63:0]
+variables.ue0_RB7[63:0]
+@24
+variables.ue0_ROUND7[63:0]
+variables.ue0_SFN7[63:0]
+@28
+functions.phy_enb_prach_rx
+functions.phy_eNB_dlsch_encoding
+functions.phy_eNB_dlsch_modulation
+functions.phy_eNB_dlsch_scrambling
+functions.phy_enb_pdcch_tx
+functions.phy_enb_rs_tx
+functions.rrc_mac_config_req
+functions.rlc_data_req
+functions.udp_enb_task
+[pattern_trace] 1
+[pattern_trace] 0
-- 
GitLab