Fix for the 16byte alignment issue observed during DMRS modulation.
Segmentation fault observed in case the address for mod_dmrs[dmrssymbol] is not 16byte aligned.
This commit is contained in:
committed by
Thomas Schlichter
parent
f3be3daa32
commit
e658023ff5
@@ -159,7 +159,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
|
|||||||
uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers;
|
uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers;
|
||||||
uint8_t Qm = rel15->qamModOrder[0];
|
uint8_t Qm = rel15->qamModOrder[0];
|
||||||
uint32_t encoded_length = nb_re*Qm;
|
uint32_t encoded_length = nb_re*Qm;
|
||||||
int16_t mod_dmrs[14][n_dmrs<<1] __attribute__ ((aligned(16)));
|
int16_t mod_dmrs[n_dmrs<<1] __attribute__ ((aligned(16)));
|
||||||
|
|
||||||
/* PTRS */
|
/* PTRS */
|
||||||
uint16_t beta_ptrs = 1;
|
uint16_t beta_ptrs = 1;
|
||||||
@@ -264,24 +264,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// DMRS QPSK modulation
|
|
||||||
// TODO: performance improvement, we can skip the modulation of DMRS symbols outside the bandwidth part
|
|
||||||
for (int l=rel15->StartSymbolIndex; l<rel15->StartSymbolIndex+rel15->NrOfSymbols; l++) {
|
|
||||||
if (rel15->dlDmrsSymbPos & (1 << l)) {
|
|
||||||
nr_modulation(pdsch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs[l]); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
|
||||||
|
|
||||||
#ifdef DEBUG_DLSCH
|
|
||||||
printf("DMRS modulation (symbol %d, %d symbols, type %d):\n", l, n_dmrs, dmrs_Type);
|
|
||||||
for (int i=0; i<n_dmrs>>4; i++) {
|
|
||||||
for (int j=0; j<8; j++) {
|
|
||||||
printf("%d %d\t", mod_dmrs[l][((i<<3)+j)<<1], mod_dmrs[l][(((i<<3)+j)<<1)+1]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Resource mapping
|
/// Resource mapping
|
||||||
|
|
||||||
@@ -349,6 +331,21 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// DMRS QPSK modulation
|
||||||
|
if (rel15->dlDmrsSymbPos & (1 << l)) {
|
||||||
|
nr_modulation(pdsch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
||||||
|
|
||||||
|
#ifdef DEBUG_DLSCH
|
||||||
|
printf("DMRS modulation (symbol %d, %d symbols, type %d):\n", l, n_dmrs, dmrs_Type);
|
||||||
|
for (int i=0; i<n_dmrs>>4; i++) {
|
||||||
|
for (int j=0; j<8; j++) {
|
||||||
|
printf("%d %d\t", mod_dmrs[((i<<3)+j)<<1], mod_dmrs[(((i<<3)+j)<<1)+1]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* calculate if current symbol is PTRS symbols */
|
/* calculate if current symbol is PTRS symbols */
|
||||||
ptrs_idx = 0;
|
ptrs_idx = 0;
|
||||||
|
|
||||||
@@ -379,8 +376,8 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
/* Map DMRS Symbol */
|
/* Map DMRS Symbol */
|
||||||
if ( ( dmrs_symbol_map & (1 << l) ) && (k == ((start_sc+get_dmrs_freq_idx(n, k_prime, delta, dmrs_Type))%(frame_parms->ofdm_symbol_size)))) {
|
if ( ( dmrs_symbol_map & (1 << l) ) && (k == ((start_sc+get_dmrs_freq_idx(n, k_prime, delta, dmrs_Type))%(frame_parms->ofdm_symbol_size)))) {
|
||||||
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[l][dmrs_idx<<1]) >> 15;
|
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[dmrs_idx<<1]) >> 15;
|
||||||
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[l][(dmrs_idx<<1) + 1]) >> 15;
|
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
|
||||||
#ifdef DEBUG_DLSCH_MAPPING
|
#ifdef DEBUG_DLSCH_MAPPING
|
||||||
printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d\n",
|
printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d\n",
|
||||||
dmrs_idx, l, k, k_prime, n, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
|
dmrs_idx, l, k, k_prime, n, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
|
||||||
|
|||||||
@@ -1,291 +0,0 @@
|
|||||||
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
|
||||||
# Asn1_verbosity, choice in: none, info, annoying
|
|
||||||
Asn1_verbosity = "none";
|
|
||||||
|
|
||||||
gNBs =
|
|
||||||
(
|
|
||||||
{
|
|
||||||
////////// Identification parameters:
|
|
||||||
gNB_ID = 0xe00;
|
|
||||||
|
|
||||||
cell_type = "CELL_MACRO_GNB";
|
|
||||||
|
|
||||||
gNB_name = "gNB-Eurecom-5GNRBox";
|
|
||||||
|
|
||||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
|
||||||
tracking_area_code = 1;
|
|
||||||
|
|
||||||
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
|
|
||||||
|
|
||||||
tr_s_preference = "local_mac"
|
|
||||||
|
|
||||||
////////// Physical parameters:
|
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
|
||||||
{
|
|
||||||
#spCellConfigCommon
|
|
||||||
|
|
||||||
physCellId = 0;
|
|
||||||
|
|
||||||
# downlinkConfigCommon
|
|
||||||
#frequencyInfoDL
|
|
||||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
|
|
||||||
absoluteFrequencySSB = 641032;
|
|
||||||
dl_frequencyBand = 78;
|
|
||||||
# this is 3600 MHz
|
|
||||||
dl_absoluteFrequencyPointA = 640000;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
dl_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
dl_subcarrierSpacing = 1;
|
|
||||||
dl_carrierBandwidth = 106;
|
|
||||||
#initialDownlinkBWP
|
|
||||||
#genericParameters
|
|
||||||
# this is RBstart=33 (Start RB of SSB block),L=24 (275*(L-1))+RBstart
|
|
||||||
initialDLBWPlocationAndBandwidth = 6358; #6368;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
|
||||||
#pdcch-ConfigCommon
|
|
||||||
initialDLBWPcontrolResourceSetZero = 0; #12;
|
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0;
|
|
||||||
#initialULBWPmappingType
|
|
||||||
#0=typeA,1=typeB
|
|
||||||
initialDLBWPmappingType_0 = 1;
|
|
||||||
#this is SS=1,L=13
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
|
||||||
initialDLBWPmappingType_1 = 1;
|
|
||||||
#this is SS=2,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
|
||||||
|
|
||||||
initialDLBWPk0_2 = 0;
|
|
||||||
initialDLBWPmappingType_2 = 1;
|
|
||||||
#this is SS=1,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
|
||||||
|
|
||||||
initialDLBWPk0_3 = 0;
|
|
||||||
initialDLBWPmappingType_3 = 1;
|
|
||||||
#this is SS=1,L=5
|
|
||||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
|
||||||
#frequencyInfoUL
|
|
||||||
ul_frequencyBand = 78;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
ul_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
ul_subcarrierSpacing = 1;
|
|
||||||
ul_carrierBandwidth = 106;
|
|
||||||
pMax = 20;
|
|
||||||
#initialUplinkBWP
|
|
||||||
#genericParameters
|
|
||||||
initialULBWPlocationAndBandwidth = 6358;#6368;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
|
||||||
#rach-ConfigCommon
|
|
||||||
#rach-ConfigGeneric
|
|
||||||
prach_ConfigurationIndex = 98;
|
|
||||||
#prach_msg1_FDM
|
|
||||||
#0 = one, 1=two, 2=four, 3=eight
|
|
||||||
prach_msg1_FDM = 0;
|
|
||||||
prach_msg1_FrequencyStart = 0;
|
|
||||||
zeroCorrelationZoneConfig = 13;
|
|
||||||
preambleReceivedTargetPower = -118;
|
|
||||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
|
||||||
preambleTransMax = 6;
|
|
||||||
#powerRampingStep
|
|
||||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
|
||||||
powerRampingStep = 1;
|
|
||||||
#ra_ReponseWindow
|
|
||||||
#1,2,4,8,10,20,40,80
|
|
||||||
ra_ResponseWindow = 4;
|
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
|
||||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
|
||||||
#ra_ContentionResolutionTimer
|
|
||||||
#(0..7) 8,16,24,32,40,48,56,64
|
|
||||||
ra_ContentionResolutionTimer = 7;
|
|
||||||
rsrp_ThresholdSSB = 19;
|
|
||||||
#prach-RootSequenceIndex_PR
|
|
||||||
#1 = 839, 2 = 139
|
|
||||||
prach_RootSequenceIndex_PR = 2;
|
|
||||||
prach_RootSequenceIndex = 1;
|
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
|
||||||
#
|
|
||||||
msg1_SubcarrierSpacing = 1,
|
|
||||||
# restrictedSetConfig
|
|
||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
|
||||||
restrictedSetConfig = 0,
|
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6;
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
# this is SS=0 L=11
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 55;
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6;
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
# this is SS=0 L=12
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 69;
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7;
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
# this is SS=10 L=4
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52;
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
|
||||||
p0_NominalWithGrant =-90;
|
|
||||||
|
|
||||||
# pucch-ConfigCommon setup :
|
|
||||||
# pucchGroupHopping
|
|
||||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
|
||||||
pucchGroupHopping = 0;
|
|
||||||
hoppingId = 40;
|
|
||||||
p0_nominal = -90;
|
|
||||||
# ssb_PositionsInBurs_BitmapPR
|
|
||||||
# 1=short, 2=medium, 3=long
|
|
||||||
ssb_PositionsInBurst_PR = 2;
|
|
||||||
ssb_PositionsInBurst_Bitmap = 0x1;
|
|
||||||
|
|
||||||
# ssb_periodicityServingCell
|
|
||||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
|
||||||
ssb_periodicityServingCell = 2;
|
|
||||||
|
|
||||||
# dmrs_TypeA_position
|
|
||||||
# 0 = pos2, 1 = pos3
|
|
||||||
dmrs_TypeA_Position = 0;
|
|
||||||
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
subcarrierSpacing = 1;
|
|
||||||
|
|
||||||
|
|
||||||
#tdd-UL-DL-ConfigurationCommon
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
referenceSubcarrierSpacing = 1;
|
|
||||||
# pattern1
|
|
||||||
# dl_UL_TransmissionPeriodicity
|
|
||||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
|
||||||
dl_UL_TransmissionPeriodicity = 6;
|
|
||||||
nrofDownlinkSlots = 7;
|
|
||||||
nrofDownlinkSymbols = 6;
|
|
||||||
nrofUplinkSlots = 2;
|
|
||||||
nrofUplinkSymbols = 4;
|
|
||||||
|
|
||||||
ssPBCH_BlockPower = -25;
|
|
||||||
}
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
# ------- SCTP definitions
|
|
||||||
SCTP :
|
|
||||||
{
|
|
||||||
# Number of streams to use in input/output
|
|
||||||
SCTP_INSTREAMS = 2;
|
|
||||||
SCTP_OUTSTREAMS = 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
////////// MME parameters:
|
|
||||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
|
||||||
ipv6 = "192:168:30::17";
|
|
||||||
active = "yes";
|
|
||||||
preference = "ipv4";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
|
||||||
{
|
|
||||||
|
|
||||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
|
||||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
MACRLCs = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_s_preference = "local_L1";
|
|
||||||
tr_n_preference = "local_RRC";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "local_mac";
|
|
||||||
pusch_proc_threads = 8;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 1
|
|
||||||
nb_rx = 1
|
|
||||||
att_tx = 0
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [7];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 50;
|
|
||||||
eNB_instances = [0];
|
|
||||||
## beamforming 1x2 matrix: 1 layer x 2 antennas
|
|
||||||
#bf_weights = [0x00007fff, 0x00007fff];
|
|
||||||
## beamforming 1x4 matrix: 1 layer x 4 antennas
|
|
||||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
|
||||||
## beamforming 2x2 matrix:
|
|
||||||
#bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
|
||||||
## beamforming 4x4 matrix:
|
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
|
||||||
sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
|
|
||||||
clock_src = "external";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
|
||||||
{
|
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
|
||||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
|
||||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
|
||||||
worker_config = "WORKER_ENABLE";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
log_config :
|
|
||||||
{
|
|
||||||
global_log_level ="info";
|
|
||||||
global_log_verbosity ="medium";
|
|
||||||
hw_log_level ="info";
|
|
||||||
hw_log_verbosity ="medium";
|
|
||||||
phy_log_level ="info";
|
|
||||||
phy_log_verbosity ="medium";
|
|
||||||
mac_log_level ="info";
|
|
||||||
mac_log_verbosity ="high";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
rlc_log_verbosity ="medium";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
pdcp_log_verbosity ="medium";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
rrc_log_verbosity ="medium";
|
|
||||||
};
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user