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
lizhongxiao
OpenXG-RAN
Commits
b4a314b6
Commit
b4a314b6
authored
Jan 30, 2024
by
Melissa
Committed by
Ejaz Ahmed
Feb 16, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated prconfiguration code & Moved configuration file
parent
6be609a5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
140 additions
and
13 deletions
+140
-13
executables/nr-uesoftmodem.h
executables/nr-uesoftmodem.h
+4
-1
openair2/LAYER2/NR_MAC_UE/nr_ue_sci_slsch.c
openair2/LAYER2/NR_MAC_UE/nr_ue_sci_slsch.c
+16
-11
openair2/RRC/NR_UE/rrc_sl_preconfig.c
openair2/RRC/NR_UE/rrc_sl_preconfig.c
+1
-1
targets/PROJECTS/NR-SIDELINK/CONF/sl_preconfiguration.conf
targets/PROJECTS/NR-SIDELINK/CONF/sl_preconfiguration.conf
+119
-0
No files found.
executables/nr-uesoftmodem.h
View file @
b4a314b6
...
...
@@ -13,6 +13,7 @@
#define CONFIG_HLP_OFFSET_DIV "Divisor for computing OFDM symbol offset in Rx chain (num samples in CP/<the value>). Default value is 8. To set the sample offset to 0, set this value ~ 10e6\n"
#define CONFIG_HLP_MAX_LDPC_ITERATIONS "Maximum LDPC decoder iterations\n"
#define CONFIG_HLP_SL_SYNCSOURCEUE "Sidelink UE acts as SYNC REF UE"
#define CONFIG_HLP_PSFCH "Set value to 1 if PSFCH is based on PUCCH, otherwise 0\n"
/***************************************************************************************************************************************/
/* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
when calling config_get or config_getlist functions */
...
...
@@ -62,7 +63,8 @@
{"chest-time", CONFIG_HLP_CHESTTIME, 0, .iptr=&(nrUE_params.chest_time), .defintval=0, TYPE_INT, 0}, \
{"ue-timing-correction-disable", CONFIG_HLP_DISABLETIMECORR, PARAMFLAG_BOOL, .iptr=&(nrUE_params.no_timing_correction), .defintval=0, TYPE_INT, 0}, \
{"SLC", CONFIG_HLP_SLF, 0, .u64ptr=&(sidelink_frequency[0][0]), .defuintval=2600000000,TYPE_UINT64,0}, \
{"sync-ref", CONFIG_HLP_SL_SYNCSOURCEUE, PARAMFLAG_BOOL, .uptr=&(nrUE_params.sync_ref), .defuintval=0, TYPE_UINT32, 0}, \
{"sync-ref", CONFIG_HLP_SL_SYNCSOURCEUE, PARAMFLAG_BOOL, .uptr=&(nrUE_params.sync_ref), .defuintval=0, TYPE_UINT32, 0}, \
{"send_psfch_with_pucch", CONFIG_HLP_PSFCH, 0, .iptr=&(nrUE_params.send_psfch_with_pucch), .defintval=0, TYPE_INT, 0}, \
}
// clang-format on
...
...
@@ -85,6 +87,7 @@ typedef struct {
int
N_RB_DL
;
int
ssb_start_subcarrier
;
uint32_t
sync_ref
;
int
send_psfch_with_pucch
;
}
nrUE_params_t
;
extern
uint64_t
get_nrUE_optmask
(
void
);
extern
uint64_t
set_nrUE_optmask
(
uint64_t
bitmask
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_sci_slsch.c
View file @
b4a314b6
...
...
@@ -36,6 +36,7 @@
/* exe */
#include "executables/nr-softmodem.h"
#include "executables/nr-uesoftmodem.h"
/* RRC*/
#include "RRC/NR_UE/rrc_proto.h"
...
...
@@ -195,19 +196,19 @@ int get_nREDMRS(const NR_SL_ResourcePool_r16_t *sl_res_pool) {
}
void
fill_pssch_pscch_pdu
(
sl_nr_tx_config_pscch_pssch_pdu_t
*
nr_sl_pssch_pscch_pdu
,
const
NR_SL_BWP_ConfigCommon_r16_t
*
sl_bwp
,
const
NR_SL_BWP_ConfigCommon_r16_t
*
sl_bwp
,
const
NR_SL_ResourcePool_r16_t
*
sl_res_pool
,
nr_sci_pdu_t
*
sci_pdu
,
nr_sci_pdu_t
*
sci2_pdu
,
nr_sci_pdu_t
*
sci_pdu
,
nr_sci_pdu_t
*
sci2_pdu
,
uint16_t
slsch_pdu_length
,
const
nr_sci_format_t
format1
,
const
nr_sci_format_t
format2
)
{
int
pos
=
0
,
fsize
;
uint64_t
*
sci_payload
=
(
uint64_t
*
)
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload
;
uint64_t
*
sci2_payload
=
(
uint64_t
*
)
nr_sl_pssch_pscch_pdu
->
sci2_payload
;
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload_len
=
nr_sci_size
(
sl_res_pool
,
sci_pdu
,
format1
);
const
nr_sci_format_t
format1
,
const
nr_sci_format_t
format2
)
{
int
pos
=
0
,
fsize
;
uint64_t
*
sci_payload
=
(
uint64_t
*
)
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload
;
uint64_t
*
sci2_payload
=
(
uint64_t
*
)
nr_sl_pssch_pscch_pdu
->
sci2_payload
;
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload_len
=
nr_sci_size
(
sl_res_pool
,
sci_pdu
,
format1
);
nr_sl_pssch_pscch_pdu
->
sci2_payload_len
=
nr_sci_size
(
sl_res_pool
,
sci2_pdu
,
format2
);
int
sci_size
=
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload_len
;
int
sci_size
=
nr_sl_pssch_pscch_pdu
->
pscch_sci_payload_len
;
int
sci2_size
=
nr_sl_pssch_pscch_pdu
->
sci2_payload_len
;
*
sci_payload
=
0
;
...
...
@@ -247,6 +248,7 @@ void fill_pssch_pscch_pdu(sl_nr_tx_config_pscch_pssch_pdu_t *nr_sl_pssch_pscch_p
if
(
sl_res_pool
->
sl_PSFCH_Config_r16
&&
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
&&
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
>
0
)
{
num_psfch_symbols
=
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
;
if
(
num_psfch_symbols
==
3
)
num_psfch_symbols
++
;
if
(
get_nrUE_params
()
->
send_psfch_with_pucch
)
num_psfch_symbols
=
0
;
}
nr_sl_pssch_pscch_pdu
->
pssch_numsym
=
7
+*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
-
num_psfch_symbols
-
2
;
LOG_D
(
NR_PHY
,
"num_psfch_symbols %d, sl_LengthSymbols: %d, pssch_numsym: %d
\n
"
,
num_psfch_symbols
,
*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
,
nr_sl_pssch_pscch_pdu
->
pssch_numsym
);
...
...
@@ -513,6 +515,7 @@ void config_pscch_pdu_rx(sl_nr_rx_config_pscch_pdu_t *nr_sl_pscch_pdu,
if
(
sl_res_pool
->
sl_PSFCH_Config_r16
&&
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
&&
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
>
0
)
{
num_psfch_symbols
=
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
;
if
(
num_psfch_symbols
==
3
)
num_psfch_symbols
++
;
if
(
get_nrUE_params
()
->
send_psfch_with_pucch
)
num_psfch_symbols
=
0
;
}
nr_sl_pscch_pdu
->
pssch_numsym
=
7
+*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
-
num_psfch_symbols
-
2
;
//sci 1A length used to decode on PSCCH.
...
...
@@ -673,6 +676,7 @@ void config_pssch_slsch_pdu_rx(sl_nr_rx_config_pssch_pdu_t *nr_sl_pssch_pdu,
if
(
sl_res_pool
->
sl_PSFCH_Config_r16
&&
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
&&
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
>
0
)
{
num_psfch_symbols
=
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
;
if
(
num_psfch_symbols
==
3
)
num_psfch_symbols
++
;
if
(
get_nrUE_params
()
->
send_psfch_with_pucch
)
num_psfch_symbols
=
0
;
}
int
pssch_numsym
=
7
+*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
-
num_psfch_symbols
-
2
;
uint16_t
l_subch
;
...
...
@@ -767,8 +771,9 @@ int config_pssch_sci_pdu_rx(sl_nr_rx_config_pssch_sci_pdu_t *nr_sl_pssch_sci_pdu
if
(
sl_res_pool
->
sl_PSFCH_Config_r16
&&
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
&&
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
>
0
)
{
num_psfch_symbols
=
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
;
if
(
num_psfch_symbols
==
3
)
num_psfch_symbols
++
;
if
(
get_nrUE_params
()
->
send_psfch_with_pucch
)
num_psfch_symbols
=
0
;
}
nr_sl_pssch_sci_pdu
->
pssch_numsym
=
7
+*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
-
num_psfch_symbols
-
2
;
;
nr_sl_pssch_sci_pdu
->
pssch_numsym
=
7
+*
sl_bwp
->
sl_BWP_Generic_r16
->
sl_LengthSymbols_r16
-
num_psfch_symbols
-
2
;
//DMRS SYMBOL MASK. If bit set to 1 indicates it is a DMRS symbol. LSB is symbol 0
// Table from SPEC 38.211, Table 8.4.1.1.2-1
...
...
openair2/RRC/NR_UE/rrc_sl_preconfig.c
View file @
b4a314b6
...
...
@@ -143,7 +143,7 @@ static void prepare_NR_SL_ResourcePool(NR_SL_ResourcePool_r16_t *sl_res_pool,
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_Period_r16
=
calloc
(
1
,
sizeof
(
long
));
// Set of PRBs that are actually used for PSFCH transmission and reception (bitmap)
// 0
b10101010101010101010101010101010101010101010101001
(PRBs bitmap)
// 0
xAAAAAAAAAAAA8
(PRBs bitmap)
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_RB_Set_r16
=
calloc
(
1
,
sizeof
(
*
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_RB_Set_r16
));
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_RB_Set_r16
->
size
=
7
;
sl_res_pool
->
sl_PSFCH_Config_r16
->
choice
.
setup
->
sl_PSFCH_RB_Set_r16
->
bits_unused
=
6
;
...
...
targets/PROJECTS/NR-SIDELINK/CONF/sl_preconfiguration.conf
0 → 100644
View file @
b4a314b6
SIDELINK_PRECONFIGURATION
= (
{
# TDD ULDL CONFIG used for sidelink
sl_dl_UL_TransmissionPeriodicity
=
6
;
sl_nrofDownlinkSlots
=
1
;
sl_nrofDownlinkSymbols
=
10
;
sl_nrofUplinkSlots
=
8
;
sl_nrofUplinkSymbols
=
4
;
sl_FrequencyCommonConfig
= (
{
sl_offstToCarrier
=
0
;
sl_subcarrierSpacing
=
1
;//
0
-
15
Khz
,
1
-
30
Khz
sl_carrierBandwidth
=
106
;//
numPRBs
#NR bands for Sidelink n47, n38. N47 - 5855Mhz - 5925Mhz
#SL SSB chosen to be located from RB10 to RB21. points to the middle of the SSB block.
#SSB location should be within Sidelink BWP
# this is 2584.95 MHz => 301 REs from PointA 25 PRBs + 1 RE
sl_absoluteFrequencySSB
=
516990
;
# this is 2575.92 MHz (center frequency is 2585.1 MHz
sl_absoluteFrequencyPointA
=
515184
;
}
);
sl_BWP
= (
{
#RB start 0, RB size = 106. occupies complete Bw.
sl_locationAndBandwidth
=
28875
;
#Num Symbols used for Sidelink in an uplink slot
#Value can be between symbols 7 to 14
sl_LengthSymbols
=
5
;
#Sidelink Starting symbol in a slot
#Value can be between symbols 0 to 7
sl_StartSymbol
=
0
;
}
);
sl_syncCfg
= (
{
#NUM SL-SSB within 16 frames
sl_NumSSB_WithinPeriod_0
=
4
;
#Slot Offset for the first txn in the 16 frame period
sl_TimeOffsetSSB_0
=
8
;
#interval in slots for repetition of SL-SSB
sl_TimeInterval_0
=
120
;
}
);
sl_RxResPools
= (
{
#Number of symbols which carry PSCCH.
#Possible values 0 means 2 symbols, 1 - means 3 symbols.
sl_TimeResourcePSCCH
=
0
;
#Number of RBS which carry PSCCH
#Possible values {n10,n12,n15,n20,n25}
sl_FreqResourcePSCCH
=
1
; //
12
RBs
#Size of subchannel in RBs
#Possible values - {n10,n12,n15,n20,n25,n50,n75,n100}
sl_SubchannelSize
=
5
;//
10
RBs
#start in RB of the lowest subchannel in a rpool
sl_StartRB_Subchannel
=
0
;
#number of PRBs in a rpool
sl_RB_Number
=
50
;
sl_NumSubchannel
=
1
;
# period of PSFCH resource in units of slots within this resource pool
# Possible values sl0 means no PSFCH resource, {sl0, sl1, sl2, sl4}
sl_PSFCH_Period
=
3
; //
sl4
# Number of cyclic shift pairs used for a PSFCH transmission that can be multiplexed in a PRB
# Possible values {n1, n2, n3, n4}
sl_NumMuxCS_Pair
=
1
;
# Minimum time gap between PSFCH and the associated PSSCH in the unit of slots {sl2, sl3}
sl_MinTimeGapPSFCH
=
1
; //
sl3
# Scrambling ID {0..1023} for sequence hopping of the PSFCH used in the resource pool
sl_PSFCH_HopID
=
1
;
# Number of PSFCH resources available {startSubCH, allocSubCH} for multiplexing HARQ-ACK information in a PSFCH transmission
sl_PSFCH_CandidateResourceType
=
0
; //
startSubCH
}
);
sl_TxResPools
= (
{
#Number of symbols which carry PSCCH.
#Possible values 0 means 2 symbols, 1 - means 3 symbols.
sl_TimeResourcePSCCH
=
0
;
#Number of RBS which carry PSCCH
#Possible values {n10,n12,n15,n20,n25}
sl_FreqResourcePSCCH
=
1
; //
12
RBs
#Size of subchannel in RBs
#Possible values - {n10,n12,n15,n20,n25,n50,n75,n100}
sl_SubchannelSize
=
5
;//
50
RBs
#start in RB of the lowest subchannel in a rpool
sl_StartRB_Subchannel
=
0
;
#number of PRBs in a rpool
sl_RB_Number
=
50
;
sl_NumSubchannel
=
1
;
# period of PSFCH resource in units of slots within this resource pool
# Possible values sl0 means no PSFCH resource, {sl0, sl1, sl2, sl4}
sl_PSFCH_Period
=
3
; //
sl4
# Number of cyclic shift pairs used for a PSFCH transmission that can be multiplexed in a PRB
# Possible values {n1, n2, n3, n4}
sl_NumMuxCS_Pair
=
1
;
# Minimum time gap between PSFCH and the associated PSSCH in the unit of slots {sl2, sl3}
sl_MinTimeGapPSFCH
=
1
; //
sl3
# Scrambling ID {0..1023} for sequence hopping of the PSFCH used in the resource pool
sl_PSFCH_HopID
=
1
;
# Number of PSFCH resources available {startSubCH, allocSubCH} for multiplexing HARQ-ACK information in a PSFCH transmission
sl_PSFCH_CandidateResourceType
=
0
; //
startSubCH
}
);
sl_UEINFO
= (
{
srcid
=
0
;
thirdOctet
=
0
;
fourthOctet
=
1
;
}
);
}
);
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