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
常顺宇
OpenXG-RAN
Commits
c91d689d
Commit
c91d689d
authored
4 years ago
by
Shweta Shrivastava
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Imrpovements for extracting UL DCI, remove hardcoding, blind decoding of DCI
parent
bdc1fa4e
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
317 additions
and
153 deletions
+317
-153
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+8
-2
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+36
-31
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
+12
-8
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+260
-111
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+1
-1
No files found.
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
c91d689d
...
...
@@ -415,8 +415,14 @@ typedef struct {
uint8_t
number_of_candidates
;
uint16_t
CCE
[
64
];
uint8_t
L
[
64
];
uint8_t
dci_length
;
uint8_t
dci_format
;
// 3GPP TS 38.212 Sec. 7.3.1.0, 3GPP TS 138.131 sec. 6.3.2 (SearchSpace)
// The maximum number of DCI lengths allowed by the spec are 4, with max 3 for C-RNTI.
// But a given search space may only support a maximum of 2 DCI formats at a time
// depending on its search space type configured by RRC. Hence for blind decoding, UE
// needs to monitor only upto 2 DCI lengths for a given search space.
uint8_t
num_dci_options
;
// Num DCIs the UE actually needs to decode (1 or 2)
uint8_t
dci_length_options
[
2
];
uint8_t
dci_format_options
[
2
];
}
fapi_nr_dl_config_dci_dl_pdu_rel15_t
;
typedef
struct
{
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
View file @
c91d689d
...
...
@@ -845,7 +845,6 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
for
(
int
i
=
0
;
i
<
pdcch_vars
->
nb_search_space
;
i
++
)
{
rel15
=
&
pdcch_vars
->
pdcch_config
[
i
];
int
dci_length
=
rel15
->
dci_length
;
//int gNB_id = 0;
int16_t
tmp_e
[
16
*
108
];
rnti_t
n_rnti
;
...
...
@@ -853,41 +852,47 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
for
(
int
j
=
0
;
j
<
rel15
->
number_of_candidates
;
j
++
)
{
int
CCEind
=
rel15
->
CCE
[
j
];
int
L
=
rel15
->
L
[
j
];
uint64_t
dci_estimation
[
2
]
=
{
0
};
const
t_nrPolar_params
*
currentPtrDCI
=
nr_polar_params
(
NR_POLAR_DCI_MESSAGE_TYPE
,
dci_length
,
L
,
1
,
&
ue
->
polarList
);
LOG_D
(
PHY
,
"Trying DCI candidate %d of %d number of candidates, CCE %d (%d), L %d
\n
"
,
j
,
rel15
->
number_of_candidates
,
CCEind
,
CCEind
*
9
*
6
*
2
,
L
);
// Loop over possible DCI lengths
for
(
int
k
=
0
;
k
<
rel15
->
num_dci_options
;
k
++
)
{
int
dci_length
=
rel15
->
dci_length_options
[
k
];
uint64_t
dci_estimation
[
2
]
=
{
0
};
const
t_nrPolar_params
*
currentPtrDCI
=
nr_polar_params
(
NR_POLAR_DCI_MESSAGE_TYPE
,
dci_length
,
L
,
1
,
&
ue
->
polarList
);
LOG_D
(
PHY
,
"Trying DCI candidate %d of %d number of candidates, CCE %d (%d), L %d
\n
"
,
j
,
rel15
->
number_of_candidates
,
CCEind
,
CCEind
*
9
*
6
*
2
,
L
);
nr_pdcch_unscrambling
(
&
pdcch_vars
->
e_rx
[
CCEind
*
108
],
rel15
->
coreset
.
scrambling_rnti
,
L
*
108
,
rel15
->
coreset
.
pdcch_dmrs_scrambling_id
,
tmp_e
);
nr_pdcch_unscrambling
(
&
pdcch_vars
->
e_rx
[
CCEind
*
108
],
rel15
->
coreset
.
scrambling_rnti
,
L
*
108
,
rel15
->
coreset
.
pdcch_dmrs_scrambling_id
,
tmp_e
);
#ifdef DEBUG_DCI_DECODING
uint32_t
*
z
=
(
uint32_t
*
)
&
pdcch_vars
->
e_rx
[
CCEind
*
108
];
for
(
int
index_z
=
0
;
index_z
<
96
;
index_z
++
){
for
(
int
i
=
0
;
i
<
9
;
i
++
)
{
LOG_D
(
PHY
,
"z[%d]=(%d,%d)
\n
"
,
(
9
*
index_z
+
i
),
*
(
int16_t
*
)
&
z
[
index_z
+
i
],
*
(
1
+
(
int16_t
*
)
&
z
[
index_z
+
i
]));
#ifdef DEBUG_DCI_DECODING
uint32_t
*
z
=
(
uint32_t
*
)
&
pdcch_vars
->
e_rx
[
CCEind
*
108
];
for
(
int
index_z
=
0
;
index_z
<
96
;
index_z
++
){
for
(
int
i
=
0
;
i
<
9
;
i
++
)
{
LOG_D
(
PHY
,
"z[%d]=(%d,%d)
\n
"
,
(
9
*
index_z
+
i
),
*
(
int16_t
*
)
&
z
[
index_z
+
i
],
*
(
1
+
(
int16_t
*
)
&
z
[
index_z
+
i
]));
}
}
#endif
uint16_t
crc
=
polar_decoder_int16
(
tmp_e
,
dci_estimation
,
1
,
currentPtrDCI
);
n_rnti
=
rel15
->
rnti
;
if
(
crc
==
n_rnti
)
{
LOG_D
(
PHY
,
"Decoded crc %x matches rnti %x for DCI format %d
\n
"
,
crc
,
n_rnti
,
rel15
->
dci_format_options
[
k
]);
dci_ind
->
SFN
=
frame
;
dci_ind
->
slot
=
slot
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
rnti
=
n_rnti
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
n_CCE
=
CCEind
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
dci_format
=
rel15
->
dci_format_options
[
k
];
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
payloadSize
=
dci_length
;
memcpy
((
void
*
)
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
payloadBits
,(
void
*
)
dci_estimation
,
8
);
dci_ind
->
number_of_dcis
++
;
break
;
// If DCI is found, no need to check for remaining DCI lengths
}
else
{
LOG_D
(
PHY
,
"Decoded crc %x does not match rnti %x for DCI format %d
\n
"
,
crc
,
n_rnti
,
rel15
->
dci_format_options
[
k
]);
}
#endif
uint16_t
crc
=
polar_decoder_int16
(
tmp_e
,
dci_estimation
,
1
,
currentPtrDCI
);
n_rnti
=
rel15
->
rnti
;
if
(
crc
==
n_rnti
)
{
LOG_D
(
PHY
,
"Decoded crc %x matches rnti %x for DCI format %d
\n
"
,
crc
,
n_rnti
,
rel15
->
dci_format
);
dci_ind
->
SFN
=
frame
;
dci_ind
->
slot
=
slot
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
rnti
=
n_rnti
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
n_CCE
=
CCEind
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
dci_format
=
rel15
->
dci_format
;
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
payloadSize
=
dci_length
;
memcpy
((
void
*
)
dci_ind
->
dci_list
[
dci_ind
->
number_of_dcis
].
payloadBits
,(
void
*
)
dci_estimation
,
8
);
dci_ind
->
number_of_dcis
++
;
}
else
{
LOG_D
(
PHY
,
"Decoded crc %x does not match rnti %x for DCI format %d
\n
"
,
crc
,
n_rnti
,
rel15
->
dci_format
);
}
}
}
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_UE/nr_ue_dci_configuration.c
View file @
c91d689d
...
...
@@ -64,7 +64,7 @@ void fill_dci_search_candidates(NR_SearchSpace_t *ss,fapi_nr_dl_config_dci_dl_pd
}
void
config_dci_pdu
(
NR_UE_MAC_INST_t
*
mac
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
,
fapi_nr_dl_config_request_t
*
dl_config
,
int
rnti_type
,
int
ss_id
,
uint8_t
dci_format
){
void
config_dci_pdu
(
NR_UE_MAC_INST_t
*
mac
,
fapi_nr_dl_config_dci_dl_pdu_rel15_t
*
rel15
,
fapi_nr_dl_config_request_t
*
dl_config
,
int
rnti_type
,
int
ss_id
){
uint16_t
monitoringSymbolsWithinSlot
;
uint8_t
bwp_id
=
1
,
coreset_id
=
1
;
...
...
@@ -76,9 +76,6 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
NR_BWP_DownlinkCommon_t
*
initialDownlinkBWP
=
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
;
NR_SearchSpace_t
*
ss
=
mac
->
SSpace
[
bwp_id
-
1
][
coreset_id
-
1
][
ss_id
];
// DCI format configuration
rel15
->
dci_format
=
dci_format
;
// CORESET configuration
NR_ControlResourceSet_t
*
coreset
=
mac
->
coreset
[
bwp_id
-
1
][
coreset_id
-
1
];
rel15
->
coreset
.
duration
=
coreset
->
duration
;
...
...
@@ -123,7 +120,9 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15
->
BWPSize
=
NRRIV2BW
(
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
rel15
->
BWPStart
=
NRRIV2PRBOFFSET
(
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
rel15
->
SubcarrierSpacing
=
bwp_Common
->
genericParameters
.
subcarrierSpacing
;
rel15
->
dci_length
=
nr_dci_size
(
scc
,
mac
->
scg
,
def_dci_pdu_rel15
,
rel15
->
dci_format
,
NR_RNTI_C
,
rel15
->
BWPSize
,
bwp_id
);
for
(
int
i
=
0
;
i
<
rel15
->
num_dci_options
;
i
++
)
{
rel15
->
dci_length_options
[
i
]
=
nr_dci_size
(
scc
,
mac
->
scg
,
def_dci_pdu_rel15
,
rel15
->
dci_format_options
[
i
],
NR_RNTI_C
,
rel15
->
BWPSize
,
bwp_id
);
}
break
;
case
NR_RNTI_RA
:
// we use the initial DL BWP
...
...
@@ -133,7 +132,7 @@ void config_dci_pdu(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_dci_dl_pdu_rel15_t
rel15
->
BWPSize
=
NRRIV2BW
(
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
275
);
rel15
->
BWPStart
=
NRRIV2PRBOFFSET
(
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
//NRRIV2PRBOFFSET(initialDownlinkBWP->genericParameters.locationAndBandwidth, 275);
rel15
->
SubcarrierSpacing
=
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
;
rel15
->
dci_length
=
nr_dci_size
(
scc
,
mac
->
scg
,
def_dci_pdu_rel15
,
rel15
->
dci_format
,
NR_RNTI_RA
,
rel15
->
BWPSize
,
bwp_id
);
rel15
->
dci_length
_options
[
0
]
=
nr_dci_size
(
scc
,
mac
->
scg
,
def_dci_pdu_rel15
,
rel15
->
dci_format_options
[
0
]
,
NR_RNTI_RA
,
rel15
->
BWPSize
,
bwp_id
);
break
;
case
NR_RNTI_P
:
break
;
...
...
@@ -215,7 +214,9 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
LOG_D
(
MAC
,
"[DCI_CONFIG] Configure monitoring of PDCCH candidates in Type1-PDCCH common random access search space
\n
"
);
switch
(
mac
->
ra_state
){
case
WAIT_RAR
:
config_dci_pdu
(
mac
,
rel15
,
dl_config
,
NR_RNTI_RA
,
ss_id
,
NR_DL_DCI_FORMAT_1_0
);
rel15
->
num_dci_options
=
1
;
rel15
->
dci_format_options
[
0
]
=
NR_DL_DCI_FORMAT_1_0
;
config_dci_pdu
(
mac
,
rel15
,
dl_config
,
NR_RNTI_RA
,
ss_id
);
fill_dci_search_candidates
(
ss
,
rel15
);
break
;
case
WAIT_CONTENTION_RESOLUTION
:
...
...
@@ -286,7 +287,10 @@ void ue_dci_configuration(NR_UE_MAC_INST_t *mac, fapi_nr_dl_config_request_t *dl
// Monitors DCI 01 and 11 scrambled with C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
if
(
get_softmodem_params
()
->
phy_test
==
1
&&
mac
->
crnti
>
0
)
{
LOG_D
(
MAC
,
"[DCI_CONFIG] Configure monitoring of PDCCH candidates in the user specific search space
\n
"
);
config_dci_pdu
(
mac
,
rel15
,
dl_config
,
NR_RNTI_C
,
ss_id
,
NR_DL_DCI_FORMAT_1_1
);
rel15
->
num_dci_options
=
2
;
rel15
->
dci_format_options
[
0
]
=
NR_DL_DCI_FORMAT_1_1
;
rel15
->
dci_format_options
[
1
]
=
NR_UL_DCI_FORMAT_0_1
;
config_dci_pdu
(
mac
,
rel15
,
dl_config
,
NR_RNTI_C
,
ss_id
);
fill_dci_search_candidates
(
ss
,
rel15
);
#ifdef DEBUG_DCI
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
c91d689d
This diff is collapsed.
Click to expand it.
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
c91d689d
...
...
@@ -155,7 +155,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_
ul_config
->
number_pdus
=
0
;
//hook up pointers
mac
->
scheduled_response
.
dl_config
=
dl_config
;
mac
->
scheduled_response
.
ul_config
=
ul_config
;
mac
->
scheduled_response
.
ul_config
=
NULL
;
mac
->
scheduled_response
.
tx_request
=
&
mac
->
tx_request
;
mac
->
scheduled_response
.
module_id
=
dl_info
->
module_id
;
mac
->
scheduled_response
.
CC_id
=
dl_info
->
cc_id
;
...
...
This diff is collapsed.
Click to expand it.
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