Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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 UE
Commits
22794e03
Commit
22794e03
authored
May 08, 2019
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added real-time parametrization to L1_thread and L1_thread_tx
parent
a55007f8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
26 deletions
+60
-26
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+3
-1
targets/RT/USER/gNB_usrp.gtkw
targets/RT/USER/gNB_usrp.gtkw
+7
-5
targets/RT/USER/nr-gnb.c
targets/RT/USER/nr-gnb.c
+49
-18
targets/RT/USER/nr-ru.c
targets/RT/USER/nr-ru.c
+1
-2
No files found.
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
22794e03
...
...
@@ -332,7 +332,9 @@ int nr_dlsch_encoding(unsigned char *a,
dlsch
->
harq_processes
[
harq_pid
]
->
B
=
A
+
24
;
// dlsch->harq_processes[harq_pid]->b = a;
AssertFatal
((
A
/
8
)
+
4
<=
MAX_DLSCH_PAYLOAD_BYTES
,
"A %d is too big (A/8+4 = %d > %d)
\n
"
,
A
,(
A
/
8
)
+
4
,
MAX_DLSCH_PAYLOAD_BYTES
);
memcpy
(
dlsch
->
harq_processes
[
harq_pid
]
->
b
,
a
,(
A
/
8
)
+
4
);
nr_segmentation
(
dlsch
->
harq_processes
[
harq_pid
]
->
b
,
...
...
targets/RT/USER/gNB_usrp.gtkw
View file @
22794e03
[*]
[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
[*]
Tue May 7 21:21:14
2019
[*]
Wed May 8 09:33:31
2019
[*]
[dumpfile] "/tmp/openair_dump_gNB40.vcd"
[dumpfile_mtime] "
Tue May 7 21:19:43
2019"
[dumpfile_size] 1
8197199
[savefile] "/home/
belostom
e/raymond/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
[dumpfile_mtime] "
Wed May 8 09:32:07
2019"
[dumpfile_size] 1
965634
[savefile] "/home/
espagn
e/raymond/openairinterface5g/targets/RT/USER/gNB_usrp.gtkw"
[timestart] 8147990000
[size] 1920 859
[pos] -1 -1
...
...
@@ -17,8 +17,10 @@
@28
functions.trx_read
functions.trx_write
@42
1
@42
0
variables.frame_number_TX0_UE[63:0]
@421
variables.frame_number_TX1_UE[63:0]
@420
variables.frame_number_RX1_UE[63:0]
@24
...
...
targets/RT/USER/nr-gnb.c
View file @
22794e03
...
...
@@ -244,8 +244,21 @@ static void* gNB_L1_thread_tx(void* param) {
char
thread_name
[
100
];
// This tells L1_thread (RX) that L1_thread_tx is not ready yet
pthread_mutex_lock
(
&
L1_proc_tx
->
mutex
);
L1_proc_tx
->
instance_cnt
=
-
2
;
pthread_mutex_unlock
(
&
L1_proc_tx
->
mutex
);
sprintf
(
thread_name
,
"gNB_L1_thread_tx
\n
"
);
thread_top_init
(
thread_name
,
1
,
870000L
,
1000000L
,
1000000L
);
// This tells L1_thread (RX) that L1_thread_tx is ready
pthread_mutex_lock
(
&
L1_proc_tx
->
mutex
);
L1_proc_tx
->
instance_cnt
++
;
pthread_mutex_unlock
(
&
L1_proc_tx
->
mutex
);
while
(
!
oai_exit
)
{
if
(
wait_on_condition
(
&
L1_proc_tx
->
mutex
,
&
L1_proc_tx
->
cond
,
&
L1_proc_tx
->
instance_cnt
,
thread_name
)
<
0
)
break
;
...
...
@@ -296,7 +309,10 @@ static void* gNB_L1_thread( void* param ) {
char
thread_name
[
100
];
// This tells ru_thread that L1_thread is not ready
pthread_mutex_lock
(
&
L1_proc
->
mutex
);
L1_proc
->
instance_cnt
=
-
2
;
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
// set default return value
gNB_thread_rxtx_status
=
0
;
...
...
@@ -304,6 +320,13 @@ static void* gNB_L1_thread( void* param ) {
sprintf
(
thread_name
,
"gNB_L1_thread"
);
thread_top_init
(
thread_name
,
1
,
870000L
,
1000000L
,
1000000L
);
// This tells ru_thread that L1_thread is ready
pthread_mutex_lock
(
&
L1_proc
->
mutex
);
L1_proc
->
instance_cnt
++
;
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
while
(
!
oai_exit
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0
,
0
);
...
...
@@ -476,6 +499,11 @@ int wakeup_tx(PHY_VARS_gNB *gNB,int frame_rx,int slot_rx,int frame_tx,int slot_t
exit_fun
(
"ERROR pthread_lock"
);
return
(
-
1
);
}
if
(
L1_proc_tx
->
instance_cnt
==
-
2
)
{
// L1_thread_tx isn't ready yet so return
pthread_mutex_unlock
(
&
L1_proc_tx
->
mutex
);
return
(
0
);
}
while
(
L1_proc_tx
->
instance_cnt
==
0
){
pthread_cond_wait
(
&
L1_proc_tx
->
cond
,
&
L1_proc_tx
->
mutex
);
}
...
...
@@ -490,7 +518,10 @@ int wakeup_tx(PHY_VARS_gNB *gNB,int frame_rx,int slot_rx,int frame_tx,int slot_t
L1_proc_tx
->
timestamp_tx
=
timestamp_tx
;
pthread_mutex_unlock
(
&
L1_proc_tx
->
mutex
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_UE
,
1
);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_UE
,
0
);
// the thread can now be woken up
if
(
pthread_cond_signal
(
&
L1_proc_tx
->
cond
)
!=
0
)
{
LOG_E
(
PHY
,
"[eNB] ERROR pthread_cond_signal for eNB TXnp4 thread
\n
"
);
...
...
@@ -535,16 +566,6 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) {
wait
.
tv_sec
=
0
;
wait
.
tv_nsec
=
5000000L
;
/* accept some delay in processing - up to 5ms */
for
(
i
=
0
;
i
<
fp
->
slots_per_frame
&&
L1_proc
->
instance_cnt
==
0
;
i
++
)
{
LOG_W
(
PHY
,
"[gNB] SFN.SL %d.%d, gNB L1 thread busy!! (i %d, cnt %i)
\n
"
,
L1_proc
->
frame_tx
,
L1_proc
->
slot_tx
,
i
,
L1_proc
->
instance_cnt
);
usleep
(
100
);
}
if
(
L1_proc
->
instance_cnt
==
0
)
{
exit_fun
(
"RX thread busy"
);
return
(
-
1
);
}
// wake up TX for subframe n+sl_ahead
// lock the TX mutex and make sure the thread is ready
if
(
pthread_mutex_timedlock
(
&
L1_proc
->
mutex
,
&
wait
)
!=
0
)
{
...
...
@@ -552,7 +573,17 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) {
exit_fun
(
"error locking mutex"
);
return
(
-
1
);
}
if
(
L1_proc
->
instance_cnt
==-
2
)
{
// L1_thread isn't ready yet so return
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
return
(
0
);
}
if
(
L1_proc
->
instance_cnt
==
0
)
{
// L1_thread is busy so abort the subframe
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
LOG_W
(
PHY
,
"L1_thread isn't ready in %d.%d, aborting RX processing
\n
"
,
ru_proc
->
frame_rx
,
ru_proc
->
tti_rx
);
}
++
L1_proc
->
instance_cnt
;
// We have just received and processed the common part of a subframe, say n.
...
...
@@ -569,6 +600,8 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) {
LOG_D
(
PHY
,
"wakeupL1: passing parameter IC = %d, RX: %d.%d, TX: %d.%d to L1 sl_ahead = %d
\n
"
,
L1_proc
->
instance_cnt
,
L1_proc
->
frame_rx
,
L1_proc
->
slot_rx
,
L1_proc
->
frame_tx
,
L1_proc
->
slot_tx
,
sl_ahead
);
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
// the thread can now be woken up
if
(
pthread_cond_signal
(
&
L1_proc
->
cond
)
!=
0
)
{
LOG_E
(
PHY
,
"[gNB] ERROR pthread_cond_signal for gNB RXn-TXnp4 thread
\n
"
);
...
...
@@ -576,8 +609,6 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) {
return
(
-
1
);
}
pthread_mutex_unlock
(
&
L1_proc
->
mutex
);
return
(
0
);
}
/*
...
...
@@ -707,8 +738,8 @@ void init_gNB_proc(int inst) {
L1_proc
=
&
proc
->
L1_proc
;
L1_proc_tx
=
&
proc
->
L1_proc_tx
;
L1_proc
->
instance_cnt
=
-
1
;
L1_proc_tx
->
instance_cnt
=
-
1
;
L1_proc
->
instance_cnt
=
-
2
;
L1_proc_tx
->
instance_cnt
=
-
2
;
L1_proc
->
instance_cnt_RUs
=
0
;
L1_proc_tx
->
instance_cnt_RUs
=
0
;
proc
->
instance_cnt_prach
=
-
1
;
...
...
targets/RT/USER/nr-ru.c
View file @
22794e03
...
...
@@ -754,7 +754,7 @@ void tx_rf(RU_t *ru) {
if
((
SF_type
==
SF_DL
)
||
(
SF_type
==
SF_S
))
{
int
siglen
=
fp
->
samples_per_slot
>>
1
,
flags
=
1
;
int
siglen
=
fp
->
samples_per_slot
,
flags
=
1
;
/*
if (SF_type == SF_S) {
...
...
@@ -1310,7 +1310,6 @@ static void* ru_thread_tx( void* param ) {
if
(
!
emulate_rf
){
// do outgoing fronthaul (south) if needed
if
((
ru
->
fh_north_asynch_in
==
NULL
)
&&
(
ru
->
fh_south_out
))
ru
->
fh_south_out
(
ru
);
if
(
ru
->
fh_north_out
)
ru
->
fh_north_out
(
ru
);
}
else
...
...
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