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
9ea4ebdc
Commit
9ea4ebdc
authored
Feb 04, 2020
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more updates on samples_per_slot
parent
bc38ec6b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
31 additions
and
23 deletions
+31
-23
executables/nr-ru.c
executables/nr-ru.c
+5
-5
executables/nr-ue.c
executables/nr-ue.c
+14
-10
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+8
-4
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+1
-1
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+1
-1
openair1/SCHED_NR/nr_ru_procedures.c
openair1/SCHED_NR/nr_ru_procedures.c
+2
-2
No files found.
executables/nr-ru.c
View file @
9ea4ebdc
...
...
@@ -394,7 +394,7 @@ void fh_if4p5_south_in(RU_t *ru,
//caculate timestamp_rx, timestamp_tx based on frame and subframe
proc
->
tti_rx
=
sl
;
proc
->
frame_rx
=
f
;
proc
->
timestamp_rx
=
(
proc
->
frame_rx
*
fp
->
samples_per_subframe
*
10
)
+
fp
->
get_samples_slot_timestamp
(
proc
->
tti_rx
,
fp
);
proc
->
timestamp_rx
=
(
proc
->
frame_rx
*
fp
->
samples_per_subframe
*
10
)
+
fp
->
get_samples_slot_timestamp
(
proc
->
tti_rx
,
fp
,
0
);
// proc->timestamp_tx = proc->timestamp_rx + (4*fp->samples_per_subframe);
proc
->
tti_tx
=
(
sl
+
(
fp
->
slots_per_subframe
*
sf_ahead
))
%
fp
->
slots_per_frame
;
proc
->
frame_tx
=
(
sl
>
(
fp
->
slots_per_frame
-
1
-
(
fp
->
slots_per_subframe
*
sf_ahead
)))
?
(
f
+
1
)
&
1023
:
f
;
...
...
@@ -564,7 +564,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
if
((
frame_tx
==
0
)
&&
(
slot_tx
==
0
))
proc
->
frame_tx_unwrap
+=
1024
;
proc
->
timestamp_tx
=
(((
uint64_t
)
frame_tx
+
(
uint64_t
)
proc
->
frame_tx_unwrap
)
*
fp
->
samples_per_subframe
*
10
)
+
fp
->
get_samples_slot_timestamp
(
slot_tx
,
fp
);
proc
->
timestamp_tx
=
(((
uint64_t
)
frame_tx
+
(
uint64_t
)
proc
->
frame_tx_unwrap
)
*
fp
->
samples_per_subframe
*
10
)
+
fp
->
get_samples_slot_timestamp
(
slot_tx
,
fp
,
0
);
LOG_D
(
PHY
,
"RU %d/%d TST %llu, frame %d, subframe %d
\n
"
,
ru
->
idx
,
0
,(
long
long
unsigned
int
)
proc
->
timestamp_tx
,
frame_tx
,
slot_tx
);
// dump VCD output for first RU in list
...
...
@@ -636,7 +636,7 @@ void rx_rf(RU_t *ru,int *frame,int *slot) {
AssertFatal
(
*
slot
<
fp
->
slots_per_frame
&&
*
slot
>=
0
,
"slot %d is illegal (%d)
\n
"
,
*
slot
,
fp
->
slots_per_frame
);
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
ru
->
common
.
rxdata
[
i
][
fp
->
get_samples_slot_timestamp
(
*
slot
,
fp
)];
rxp
[
i
]
=
(
void
*
)
&
ru
->
common
.
rxdata
[
i
][
fp
->
get_samples_slot_timestamp
(
*
slot
,
fp
,
0
)];
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
1
);
old_ts
=
proc
->
timestamp_rx
;
...
...
@@ -724,7 +724,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
unsigned
int
txs
;
int
i
,
txsymb
;
T
(
T_ENB_PHY_OUTPUT_SIGNAL
,
T_INT
(
0
),
T_INT
(
0
),
T_INT
(
frame
),
T_INT
(
slot
),
T_INT
(
0
),
T_BUFFER
(
&
ru
->
common
.
txdata
[
0
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
)],
fp
->
samples_per_subframe
));
T_INT
(
0
),
T_BUFFER
(
&
ru
->
common
.
txdata
[
0
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)],
fp
->
samples_per_subframe
));
int
slot_type
=
nr_slot_select
(
cfg
,
frame
,
slot
%
fp
->
slots_per_frame
);
int
prevslot_type
=
nr_slot_select
(
cfg
,
frame
,(
slot
+
(
fp
->
slots_per_frame
-
1
))
%
fp
->
slots_per_frame
);
...
...
@@ -767,7 +767,7 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
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_TTI_NUMBER_TX0_RU
,
slot
);
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
)
-
sf_extension
];
txp
[
i
]
=
(
void
*
)
&
ru
->
common
.
txdata
[
i
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)
-
sf_extension
];
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
-
ru
->
openair0_cfg
.
tx_sample_advance
)
&
0xffffffff
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
...
...
executables/nr-ue.c
View file @
9ea4ebdc
...
...
@@ -239,7 +239,8 @@ static void UE_synch(void *arg) {
if
(
nr_initial_sync
(
&
syncD
->
proc
,
UE
,
UE
->
mode
,
2
)
==
0
)
{
freq_offset
=
UE
->
common_vars
.
freq_offset
;
// frequency offset computed with pss in initial sync
hw_slot_offset
=
(
UE
->
rx_offset
<<
1
)
/
UE
->
frame_parms
.
samples_per_slot
;
hw_slot_offset
=
((
UE
->
rx_offset
<<
1
)
/
UE
->
frame_parms
.
samples_per_subframe
*
UE
->
frame_parms
.
slots_per_subframe
)
+
round
(((
UE
->
rx_offset
<<
1
)
%
UE
->
frame_parms
.
samples_per_subframe
)
/
UE
->
frame_parms
.
samples_per_slot0
);
LOG_I
(
PHY
,
"Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %d (DL %lu, UL %lu), UE_scan_carrier %d
\n
"
,
hw_slot_offset
,
freq_offset
,
...
...
@@ -719,24 +720,25 @@ void *UE_thread(void *arg) {
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_rx
;
i
++
)
rxp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
rxdata
[
i
][
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
+
slot_nr
*
UE
->
frame_parms
.
samples_per_slot
];
-
UE
->
frame_parms
.
nb_prefix_samples0
+
UE
->
frame_parms
.
get_samples_slot_timestamp
(
slot_nr
,
&
UE
->
frame_parms
,
0
)
];
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][((
curMsg
->
proc
.
nr_tti_rx
+
DURATION_RX_TO_TX
)
%
nb_slot_frame
)
*
UE
->
frame_parms
.
samples_per_slot
];
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][
UE
->
frame_parms
.
get_samples_slot_timestamp
(
((
curMsg
->
proc
.
nr_tti_rx
+
DURATION_RX_TO_TX
)
%
nb_slot_frame
),
&
UE
->
frame_parms
,
0
)];
int
readBlockSize
,
writeBlockSize
;
if
(
slot_nr
<
(
nb_slot_frame
-
1
))
{
readBlockSize
=
UE
->
frame_parms
.
samples_per_slot
;
writeBlockSize
=
UE
->
frame_parms
.
samples_per_slot
;
readBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
slot_nr
,
&
UE
->
frame_parms
)
;
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
slot_nr
,
&
UE
->
frame_parms
)
;
}
else
{
UE
->
rx_offset_diff
=
computeSamplesShift
(
UE
);
readBlockSize
=
UE
->
frame_parms
.
samples_per_slot
-
readBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
slot_nr
,
&
UE
->
frame_parms
)
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
-
UE
->
rx_offset_diff
;
writeBlockSize
=
UE
->
frame_parms
.
samples_per_slot
-
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
slot_nr
,
&
UE
->
frame_parms
)
-
UE
->
rx_offset_diff
;
}
...
...
@@ -750,7 +752,8 @@ void *UE_thread(void *arg) {
AssertFatal
(
writeBlockSize
==
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
(
DURATION_RX_TO_TX
*
UE
->
frame_parms
.
samples_per_slot
)
-
UE
->
frame_parms
.
get_samples_slot_timestamp
(
slot_nr
,
&
UE
->
frame_parms
,
DURATION_RX_TO_TX
)
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
-
openair0_cfg
[
0
].
tx_sample_advance
,
txp
,
...
...
@@ -774,7 +777,8 @@ void *UE_thread(void *arg) {
}
curMsg
->
proc
.
timestamp_tx
=
timestamp
+
(
DURATION_RX_TO_TX
*
UE
->
frame_parms
.
samples_per_slot
)
-
UE
->
frame_parms
.
get_samples_slot_timestamp
(
slot_nr
,
&
UE
->
frame_parms
,
DURATION_RX_TO_TX
)
-
UE
->
frame_parms
.
ofdm_symbol_size
-
UE
->
frame_parms
.
nb_prefix_samples0
;
notifiedFIFO_elt_t
*
res
;
...
...
openair1/PHY/INIT/nr_parms.c
View file @
9ea4ebdc
...
...
@@ -229,13 +229,17 @@ uint32_t get_samples_per_slot(int slot, NR_DL_FRAME_PARMS* fp)
return
fp
->
samples_per_slot0
;
}
uint32_t
get_samples_slot_timestamp
(
int
slot
,
NR_DL_FRAME_PARMS
*
fp
)
uint32_t
get_samples_slot_timestamp
(
int
slot
,
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
sl_ahead
)
{
uint32_t
samp_count
=
0
;
for
(
uint8_t
idx_slot
=
0
;
idx_slot
<
slot
;
idx_slot
++
)
samp_count
+=
fp
->
get_samples_per_slot
(
idx_slot
,
fp
);
if
(
!
sl_ahead
)
{
for
(
uint8_t
idx_slot
=
0
;
idx_slot
<
slot
;
idx_slot
++
)
samp_count
+=
fp
->
get_samples_per_slot
(
idx_slot
,
fp
);
}
else
{
for
(
uint8_t
idx_slot
=
slot
;
idx_slot
<
slot
+
sl_ahead
;
idx_slot
++
)
samp_count
+=
fp
->
get_samples_per_slot
(
idx_slot
,
fp
);
}
return
samp_count
;
}
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
9ea4ebdc
...
...
@@ -364,7 +364,7 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
timing_advance
=
0
;
#endif
tx_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot
,
frame_parms
)
-
timing_advance
;
tx_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot
,
frame_parms
,
0
)
-
timing_advance
;
if
(
tx_offset
<
0
)
tx_offset
+=
frame_parms
->
samples_per_frame
;
...
...
openair1/PHY/defs_nr_common.h
View file @
9ea4ebdc
...
...
@@ -227,7 +227,7 @@ typedef struct NR_DL_FRAME_PARMS NR_DL_FRAME_PARMS;
typedef
uint32_t
(
*
get_samples_per_slot_t
)(
int
slot
,
NR_DL_FRAME_PARMS
*
fp
);
typedef
uint32_t
(
*
get_samples_slot_timestamp_t
)(
int
slot
,
NR_DL_FRAME_PARMS
*
fp
);
typedef
uint32_t
(
*
get_samples_slot_timestamp_t
)(
int
slot
,
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
sl_ahead
);
struct
NR_DL_FRAME_PARMS
{
/// frequency range
...
...
openair1/SCHED_NR/nr_ru_procedures.c
View file @
9ea4ebdc
...
...
@@ -66,7 +66,7 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+(first_symbol!=0?1:0) , 1 );
slot_offset
=
fp
->
get_samples_slot_timestamp
(
slot
,
fp
);
slot_offset
=
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
);
slot_offsetF
=
first_symbol
*
fp
->
ofdm_symbol_size
;
...
...
@@ -370,7 +370,7 @@ void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx) {
int
slot_sizeF
=
(
fp
->
ofdm_symbol_size
)
*
((
cyclic_prefix_type
==
1
)
?
12
:
14
);
int
slot
=
tti_tx
;
int
*
txdata
=
&
ru
->
common
.
txdata
[
aa
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
)];
int
*
txdata
=
&
ru
->
common
.
txdata
[
aa
][
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)];
if
(
nr_slot_select
(
cfg
,
frame_tx
,
slot
)
==
NR_UPLINK_SLOT
)
return
;
...
...
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