Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG-RAN
Commits
a60e7013
Commit
a60e7013
authored
May 30, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug fixing for new L1 scheduling, updates to vcd tracing
parent
cbc4160b
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
64 additions
and
47 deletions
+64
-47
openair1/PHY/defs.h
openair1/PHY/defs.h
+2
-0
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+45
-35
openair2/UTIL/LOG/vcd_signal_dumper.c
openair2/UTIL/LOG/vcd_signal_dumper.c
+1
-0
openair2/UTIL/LOG/vcd_signal_dumper.h
openair2/UTIL/LOG/vcd_signal_dumper.h
+1
-0
targets/RT/USER/eNB_usrp.gtkw
targets/RT/USER/eNB_usrp.gtkw
+10
-10
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+5
-2
No files found.
openair1/PHY/defs.h
View file @
a60e7013
...
...
@@ -210,6 +210,8 @@ typedef struct {
pthread_t
pthread_tx
;
/// pthread structure for rx processing thread
pthread_t
pthread_rx
;
/// flag to indicate first RX acquisition
int
first_rx
;
/// pthread attributes for tx processing thread
pthread_attr_t
attr_tx
;
/// pthread attributes for rx processing thread
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
a60e7013
...
...
@@ -2487,6 +2487,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
int
subframe
=
proc
->
subframe_rx
;
int
frame
=
proc
->
frame_rx
;
if
(
subframe
==
9
)
{
subframe
=
0
;
frame
++
;
...
...
@@ -2515,7 +2516,10 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
fp
->
nb_antennas_rx
);
proc
->
frame_rx
=
(
proc
->
timestamp_rx
/
(
fp
->
samples_per_tti
*
10
))
&
1023
;
proc
->
subframe_rx
=
(
proc
->
timestamp_rx
/
fp
->
samples_per_tti
)
%
10
;
if
(
proc
->
first_rx
==
0
)
AssertFatal
(
proc
->
subframe_rx
==
subframe
,
"Received Timestamp doesn't correspond to the time we think it is"
);
else
proc
->
first_rx
=
0
;
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS
,
proc
->
timestamp_rx
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX_ENB
,
frame
);
...
...
@@ -2527,6 +2531,41 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
// wake up TX thread
// lock the TX mutex and make sure the thread is ready
if
(
pthread_mutex_lock
(
&
proc
->
mutex_tx
)
!=
0
)
{
LOG_E
(
PHY
,
"[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)
\n
"
,
proc
->
instance_cnt_tx
);
exit_fun
(
"error locking mutex_tx"
);
return
;
}
int
cnt_tx
=
++
proc
->
instance_cnt_tx
;
// We have just received and processed the common part of the first slot of a subframe, say n.
// TX_rx is the last received timestamp (start of 1st slot), TX_tx is the desired
// transmitted timestamp of the next TX slot (first).
// The last (TS_rx mod samples_per_frame) was n*samples_per_tti,
// we want to generate subframe (n+3), so TS_tx = TX_rx+3*samples_per_tti,
// and proc->subframe_tx = proc->subframe_rx+3
proc
->
timestamp_tx
=
proc
->
timestamp_rx
+
(
3
*
fp
->
samples_per_tti
);
proc
->
frame_tx
=
(
subframe
>
6
)
?
(
frame
+
1
)
:
frame
;
proc
->
subframe_tx
=
(
subframe
+
3
)
%
10
;
pthread_mutex_unlock
(
&
proc
->
mutex_tx
);
if
(
cnt_tx
==
0
){
// the thread was presumably waiting where it should and can now be woken up
if
(
pthread_cond_signal
(
&
proc
->
cond_tx
)
!=
0
)
{
LOG_E
(
PHY
,
"[eNB] ERROR pthread_cond_signal for eNB TX thread
\n
"
);
exit_fun
(
"ERROR pthread_cond_signal"
);
return
;
}
}
else
{
LOG_W
(
PHY
,
"[eNB] Frame %d, eNB TX thread busy!! (cnt_tx %i)
\n
"
,
frame
,
cnt_tx
);
exit_fun
(
"TX thread busy"
);
return
;
}
// now do common RX processing for first slot in subframe
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
remove_7_5_kHz
(
eNB
,
subframe
<<
1
);
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
slot_fep_ul
(
fp
,
...
...
@@ -2540,6 +2579,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
if
(
eNB
->
node_function
==
NGFI_RRU_IF4
)
{
//send_IF4(eNB,subframe<<1);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
0
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
i
][(
fp
->
samples_per_tti
>>
1
)
+
(
subframe
*
fp
->
samples_per_tti
)];
...
...
@@ -2552,6 +2592,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
fp
->
nb_antennas_rx
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS
,
proc
->
timestamp_rx
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
remove_7_5_kHz
(
eNB
,(
subframe
<<
1
)
+
1
);
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
slot_fep_ul
(
fp
,
...
...
@@ -2561,6 +2602,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
0
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
0
);
if
(
eNB
->
node_function
==
NGFI_RRU_IF4
)
{
//send_IF4(eNB,(subframe<<1)+1);
}
...
...
@@ -2610,39 +2652,7 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl
}
// wake up TX thread
// lock the TX mutex and make sure the thread is ready
if
(
pthread_mutex_lock
(
&
proc
->
mutex_tx
)
!=
0
)
{
LOG_E
(
PHY
,
"[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)
\n
"
,
proc
->
instance_cnt_tx
);
exit_fun
(
"error locking mutex_tx"
);
return
;
}
int
cnt_tx
=
++
proc
->
instance_cnt_tx
;
// We have just received and processed the common part of an entire subframe, say n.
// TX_rx is the last received timestamp (start of 2nd slot), TX_tx is the desired
// transmitted timestamp of the next TX slot (first).
// The last (TS_rx mod samples_per_frame) was (n+.5)*samples_per_tti,
// we want to generate subframe (n+3), so TS_tx = TX_rx+2.5*samples_per_tti,
// and proc->subframe_tx = proc->subframe_rx+3
proc
->
timestamp_tx
=
proc
->
timestamp_rx
+
(
fp
->
samples_per_tti
<<
1
)
+
(
fp
->
samples_per_tti
>>
1
);
proc
->
frame_tx
=
(
subframe
>
6
)
?
(
frame
+
1
)
:
frame
;
proc
->
subframe_tx
=
(
subframe
+
3
)
%
10
;
pthread_mutex_unlock
(
&
proc
->
mutex_tx
);
if
(
cnt_tx
==
0
){
// the thread was presumably waiting where it should and can now be woken up
if
(
pthread_cond_signal
(
&
proc
->
cond_tx
)
!=
0
)
{
LOG_E
(
PHY
,
"[eNB] ERROR pthread_cond_signal for eNB TX thread
\n
"
);
exit_fun
(
"ERROR pthread_cond_signal"
);
return
;
}
}
else
{
LOG_W
(
PHY
,
"[eNB] Frame %d, eNB TX thread busy!! (cnt_tx %i)
\n
"
,
frame
,
cnt_tx
);
exit_fun
(
"TX thread busy"
);
return
;
}
}
...
...
openair2/UTIL/LOG/vcd_signal_dumper.c
View file @
a60e7013
...
...
@@ -230,6 +230,7 @@ const char* eurecomFunctionsNames[] = {
"phy_procedures_eNb_rx"
,
"phy_procedures_eNb_rx_common"
,
"phy_procedures_eNb_rx_uespec"
,
"phy_eNB_slot_fep"
,
"phy_procedures_ue_tx"
,
"phy_procedures_ue_rx"
,
"phy_procedures_eNB_lte"
,
...
...
openair2/UTIL/LOG/vcd_signal_dumper.h
View file @
a60e7013
...
...
@@ -204,6 +204,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC
,
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE
,
...
...
targets/RT/USER/eNB_usrp.gtkw
View file @
a60e7013
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*]
Fri May 27 01:34:58
2016
[*]
Sun May 29 20:10:01
2016
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "
Fri May 27 01:33:50
2016"
[dumpfile_size] 1
2743642
[dumpfile_mtime] "
Sun May 29 20:07:25
2016"
[dumpfile_size] 1
6398004
[savefile] "/home/papillon/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart] 1080
10
70000
[size] 1535
845
[pos]
-1 -1
*-
21.793451 10817350000
-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
[timestart] 1080
62
70000
[size] 1535
724
[pos]
309 0
*-
18.793451 10806918339
-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] 254
[sst_expanded] 1
...
...
@@ -28,10 +28,12 @@ variables.subframe_number_RX_eNB[63:0]
functions.eNB_thread_rx0
functions.eNB_thread_tx0
functions.phy_procedures_eNb_tx
@29
functions.phy_enb_sfgen
@29
functions.phy_eNB_slot_fep
@28
functions.phy_procedures_eNb_rx
functions.phy_enb_prach_rx
@24
variables.dci_info[63:0]
variables.ue0_BO[63:0]
...
...
@@ -46,8 +48,6 @@ functions.macxface_SR_indication
@420
variables.ue0_SR_ENERGY[63:0]
variables.ue0_SR_THRES[63:0]
@24
variables.dci_info[63:0]
@28
functions.phy_enb_ulsch_decoding0
@24
...
...
targets/RT/USER/lte-enb.c
View file @
a60e7013
...
...
@@ -372,7 +372,7 @@ static void* eNB_thread_tx( void* param )
}
LOG_I
(
HW
,
"[SCHED][eNB] TX thread
%d
started on CPU %d TID %ld, sched_policy = %s , priority = %d, CPU Affinity=%s
\n
"
,
sched_getcpu
(),
gettid
(),
LOG_I
(
HW
,
"[SCHED][eNB] TX thread started on CPU %d TID %ld, sched_policy = %s , priority = %d, CPU Affinity=%s
\n
"
,
sched_getcpu
(),
gettid
(),
(
policy
==
SCHED_FIFO
)
?
"SCHED_FIFO"
:
(
policy
==
SCHED_RR
)
?
"SCHED_RR"
:
(
policy
==
SCHED_OTHER
)
?
"SCHED_OTHER"
:
...
...
@@ -868,7 +868,7 @@ static void* eNB_thread_prach( void* param )
}
LOG_I
(
HW
,
"[SCHED][eNB] RX thread
%d
started on CPU %d TID %ld, sched_policy = %s, priority = %d, CPU Affinity = %s
\n
"
,
sched_getcpu
(),
gettid
(),
LOG_I
(
HW
,
"[SCHED][eNB] RX thread started on CPU %d TID %ld, sched_policy = %s, priority = %d, CPU Affinity = %s
\n
"
,
sched_getcpu
(),
gettid
(),
(
policy
==
SCHED_FIFO
)
?
"SCHED_FIFO"
:
(
policy
==
SCHED_RR
)
?
"SCHED_RR"
:
(
policy
==
SCHED_OTHER
)
?
"SCHED_OTHER"
:
...
...
@@ -975,6 +975,9 @@ void init_eNB_proc(void)
proc
->
instance_cnt_tx
=
-
1
;
proc
->
instance_cnt_prach
=
-
1
;
proc
->
CC_id
=
CC_id
;
proc
->
first_rx
=
1
;
pthread_mutex_init
(
&
proc
->
mutex_tx
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_tx
,
NULL
);
pthread_cond_init
(
&
proc
->
cond_prach
,
NULL
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment