100 Commits
Author SHA1 Message Date
Raymond Knopp 0dcea09e87 bugfix for arm-v8x/v9 2025-10-09 16:04:45 +02:00
Raymond Knopp fb47748fae fixed precoder_simd after CI run (test for n_layers=1) failed 2025-10-09 16:01:09 +02:00
Raymond Knopp 264f7cb817 aarch64 optimizations for precoding, more complete timing reporting in
nr_dlsim
2025-10-09 16:01:09 +02:00
Raymond Knopp e44d498cba optimization of DLSCH precoding for AVX2 2025-10-09 16:01:09 +02:00
Raymond Knopp 34ba85f3b1 precoder optimizations for AVX512 2025-10-09 16:01:09 +02:00
Raymond Knopp 8711556d9e Handle larger RB step size in precoding 2025-10-09 16:01:09 +02:00
Raymond Knopp be236d450e Add measurements for performance analysis 2025-10-09 16:01:09 +02:00
Raymond Knopp 0e09c7c347 Add changes for avx512/aarch64 ldpc encoder optimizations
newly-generated files for innermost part of the parity bit
generation which, for AVX512, uses the mm512_permutex2var_epi8
instruction and for 128-bit (aarch64) the mm_alignr_epi8 (vextq_s8) in
the computation corresponding to each non-zero bit of the H matrix.

It is generated with ldpctest -n0 -g1. the changes for this are in a
future MR.  I did these changes to compare with the GPU version
(ldpc_encoder_cuda), so that the CPU version is as fast as possible. The
generator will come when we merge the GPU encoder/decoder which also has
a generator for the CUDA version. it was difficult to extract the
changes in ldpctest/ldpc_encoder.c so I just took the generated file.

This allows for removing a very large memcpy and reduces the memory
demand for the parity matrix computation. For the moment this is limited
to largest case in BG1, namely Zc=384. This is the only format used when
the number of segments after codeblock segmentation is large (>8).  This
improves the timing required for ldpc parity bits generation by more
than a factor 2 with AVX512. This significantly reduces the total time
to generate the DLSCH/PDSCH
2025-09-02 08:55:08 +02:00
Raymond Knopp 48d19e8a91 Add reset of dlsch_precoding timing counter in nr_dlsim 2025-09-02 08:48:32 +02:00
Raymond Knopp 5e3e8a70ff addition of aarch64 native implementation for rotate_cpx_vector for the case output_shift=15 2025-09-02 08:28:13 +02:00
Raymond Knopp 53813f522c Change target architecture in arm container build to armv8.2-a
This enables some additional instructions needed in the follow-up
commit.
2025-09-02 08:22:34 +02:00
Raymond Knopp 1153721b19 changes for multi-RU DAS scenario, handling of antenna ports in 7.2 (memory allocations for PRACH and neAxc in fh_config) 2025-06-10 12:11:51 +02:00
Raymond Knopp a1a4f24d0f hotfix for F. Mani's update to nr_feptx_prec handling of multiple beams 2025-06-10 12:11:51 +02:00
Raymond Knopp bbbbda70f5 feat(nrLDPC_coding_segment_encoder): Dense Rate Matching and Dense and Concatenated Output
1. 3GPP Rate-matching/interleaving on 8-segment blocks, deinterleaving at output of multi-segment processing.

2. Bit-packing done in nrLDPC_coding_segment_encoder.c now instead of nr_scrambling.
   Interestingly, it improves performance significantly too.
   Tested for AVX512 only for now.
2025-05-13 14:08:33 +00:00
Raymond KnoppandRomain Beurdouche 33078f9e3d feat(cnProc_gen_BG1_128): Put back small change in 128-bit SIMD code generator for LDPC decoder (cnProc).
Avoid the use of simde_mm_sign_epi8 which is inefficient on aarch64.
Decoding times are significantly improved on aarch64.

Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
2025-05-13 14:08:33 +00:00
Raymond Knopp a4c950774b feat(ldpc_encoder_optim8segmulti): Improvements for Arm Neoverse
Use 128 bit SIMD in packing and unpacking segment bits in bytes
Adapt compiler options for Neoverse.
2025-05-13 14:08:33 +00:00
Raymond Knopp 8964fdb6a2 AVX512 modifications for LDPC encoding: interleaving, ZC384 BG1, output formatting for encoder, segmentation (memcpy) 2025-05-13 14:08:33 +00:00
Raymond Knopp c07bfe6db5 Put CPU affinity control in nr_ulsim. 2025-05-13 14:08:33 +00:00
Raymond Knopp fa38798521 bugfix in nr_dlsch.c 2025-02-16 23:26:51 +01:00
Raymond Knopp 1d538592fe fixed compilation warnings and minor errors for aarch64 2025-02-12 11:59:52 +01:00
Raymond Knopp 6194b9a525 trace in nr_dlsim : since resource mapping and layer precoding are merged, the indication of timing was reworked in the statistics output 2025-02-12 11:59:52 +01:00
Raymond Knopp 026190e0d1 nr_ulsch log2_maxh case for single-layer 2024-10-28 16:55:06 +01:00
Raymond Knopp e0c0df38ea adjustment of log2_maxh for 2-layer UL MIMO 2024-10-28 10:50:53 +01:00
Raymond Knopp 3e6f2db124 use ML receiver for 64 QAM UL-MIMO 2024-10-28 10:50:28 +01:00
Raymond Knopp 03b24c1ee6 fixed signal level computation for PUCCH2 and threshold in pucchsim.
Threshold allows detection with -9 dB SNR with 8 RX antennas
2024-10-18 15:43:08 +02:00
Raymond Knopp eb9cb2f988 added DTX detection in PUCCH 2 receiver. This is detected by MAC already
which will drop PUCCH 2 indications that are detected as DTX. For the
moment this uses the same pucch0_dtx_threshold value indicated in L1
section of the configuration file.
2024-10-17 10:08:08 +02:00
Raymond Knopp d2ebc356a0 removed division by num_antenna_ports in PDSCH precoding matrix generation. These matrices are defined for CSI reporting in this way but here we are using them for transmission and this results in an unwanted 10*log10(num_antenna_ports) reduction in transmit power 2024-09-29 10:17:56 +02:00
Raymond KnoppandRobert Schmidt 7e18293c70 Changes for multi-RU support in fhi72
Co-authored-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2024-08-27 15:40:15 +02:00
Raymond Knopp 70751e04d8 Added automatic scaling to PUCCH2 receiver
Scaling based on incoming signal level to help with polar case.
Can subsequently add PUCCH2 CQI measurement based on this.
2024-08-01 14:03:48 +02:00
Raymond Knopp e3aff6c37b fix in nr_modulation.c: avoid fail for 64QAM and G < 192 bits
Adds a check for these short payloads and handle correctly
2024-05-24 09:25:44 +02:00
Raymond Knopp fec145cac6 Pucch2 polar rx: fix dynamic range
fixes the overflow issue in the PUCCH2 RX with 4+ RX antennas and 12+
bits (polar code format). The fix scales the polar decoding LLR
computation according to the number of RX antennas. The issue was clear
for 100 MHz 4 RX antennas. Even

  nr_pucchsim -s -5 -q 8 -P 2 -b 12 -R 273 -z4 -n1000

doesn't converge to 0 BLER with increasing SNR. The issue didn't appear
in CI because of the bandwidth and antenna count limitations.
2024-04-08 12:53:35 +02:00
Raymond Knoppandkiran d52b81798b Introduce separate thread to handle gNB TX processing
This commit introduces a separate thread (l1_tx_thread) that processes
gNB DL/TX slots. It receives a message from the ru_thread when a new
slot started, and starts processing.

The DL part of the scheduler is run in the l1_tx_thread.  Therefore,
only call UL indication (for scheduler) in UL slots.  The UL indication
previously triggered the DL scheduler -- hence, it had to be called in
every slot. Now, since the DL scheduler is moved into the DL thread, we
don't have to call the scheduler in every slot anymore.

The reorder thread is removed, as reordering with this scheme is not
necessary anymore.

The main advantage of this version is that the TX can be scheduled
earlier (sl_ahead). Further, there can no longer be race conditions in
the TX path, since the scheduler/L2, TX L1 processing and the RU tx
function are all execute in the same thread (L1_tX_thread).

Also, the scheduler prepares PRACH/PUSCH/PUCCH FAPI PDUs. As of this
commit, the scheduler runs in the TX processing chain, whereas these
PDUs are destined for RX processing.  Thus, too avoid data races,
instead of triggering the RX processing at the same time as TX
processing in the RU thread, this commit changes the code to trigger RX
processing after the scheduler has been run in TX processing to avoid
data races.

Finally, we synchronize RU and L1 threads. This is important for
rfsimulator, since unlike most radios, rfsimulator can run slower or
faster, depending on I/O and CPU (it does not have a stable "tick").

Co-authored-by: kiran <saikiran@iitj.ac.in>
2024-02-12 12:04:55 +01:00
Raymond Knopp 94a0704e43 Update sample config gnb.sa.band41.fr1.106PRB.usrpb210.conf 2024-02-06 16:03:56 +01:00
Raymond Knopp bb044cf940 Update logs to NR_ version and add some new 2024-02-06 16:03:56 +01:00
Raymond Knopp 1ec528dbdb Remove commented code 2024-02-06 16:03:56 +01:00
Raymond Knopp 47e150fbb8 fixes radix-2 butterfly for NEON, dft size 512 works properly now 2023-09-13 17:20:08 +02:00
Raymond Knopp a7bc282302 First-level of support for new aarch64 machines
Testing on Neoverse N1 (Ampere 3GHz). Tested only on a subset of phy-simulators.

- Changes:
- use SIMDE consistently
- adaptations of LDPC decoder generator for ARMv8 performance
- SIMDe modifications of Intel CRC to allow for aarch64 build.
  optimizations for 128-bit to improve performance of LDPC encode/decode
  on aarch64 (Neoverse 1)
- added BG2 files for 128-bit ldpc encoder (aarch64)
- testing on Xeon
- testing on x86
- minor changes to build/run on x86
- change in crc.h after returning to aarch64
- removed some warning in ldpc decoder generator for x86_64
- char
- Delete irrelevant constants
- Correctly declare variables
- Define stdbool for all architectures
- Remove definition of _MM_SHUFFLE and use SIMDE_MM_SHUFFLE
- Remove commented code
- Fix CMakeLists.txt
- Include SIMDE avx2 functions in tools_defs.h
2023-09-13 17:19:20 +02:00
Raymond Knopp 139cdc0ddf Add new parameter tx_amp_backoff_dB to L1 section of configuration file
Provides the backoff from full-scale output at the L1 entity
(frequency-domain samples). Default is, 36 dBFS, which is the correct
value when using the OAI RU entity. For O-RAN RU, this value should be
set according to the O-RU manufacturer requirements. For example 12
would corresponding to 14-bit input level (6 dB/bit).

Applies the TX amp backoff to PBCH, PDCCH and CSI
2023-05-15 09:27:35 +02:00
Raymond Knopp a3c7af0a7a Merge remote-tracking branch 'origin/develop' into threading-rk 2023-04-28 22:28:18 +02:00
Raymond Knopp 2a6b188635 removed temporary "USE_MSGQ" definition. Now, with
reorder_thread_disable we use the native message queue and L1_rx_thread instead of the thread-pool for the main L1 thread. There is a single TX thread (no slot parallelization)
2023-04-27 15:17:07 +02:00
Raymond Knopp 7d3a0cd157 Merge remote-tracking branch 'origin/develop' into threading-rk 2023-04-18 23:25:38 +02:00
Raymond Knopp 7455bae459 added 256QAM LLR computation for ULSCH 2023-04-17 12:41:47 +02:00
Raymond Knopp 455e2203e7 Merge remote-tracking branch 'origin/develop' into threading-rk 2023-04-09 18:29:42 +02:00
Raymond Knopp 80d84d3271 compilation after merge conflicts 2023-03-27 16:15:47 +02:00
Raymond Knopp 48d04bbffd Merge remote-tracking branch 'origin/develop' into threading-rk 2023-03-27 16:09:33 +02:00
Raymond Knopp 2b143370ee small changes in eth_udp.c for AW2S 2023-03-12 22:51:09 +01:00
Raymond Knopp e4b3757e1e comment L1_tx_thread for now 2023-03-08 21:43:44 +01:00
Raymond Knopp e3425b1f9e added msg-q threading options (and CPU thread pinning) from O-RAN 7.2 branch to develop-based for testing
with USRP.
2023-03-07 11:24:26 +01:00
Raymond Knopp 9a91ed0eeb priorities/policy on usrp-tx-thread. Thread id for ru_thread 2023-03-06 06:54:55 +01:00
Raymond Knopp 9dc8eccaf4 fix for msg3 scheduling 2022-12-14 17:43:57 +01:00
Raymond Knopp 3b0eed2edc hotfix to avoid checking for sdu_sizeP=255 in nr_rrc_data_req. If ever
the SDU has this size the function will return. This is an old piece of
code where 255 meant -1 which was what was returned from the asn1c
encoding function if the ASN.1 message was not encodable.
2022-12-07 22:23:10 +01:00
Raymond Knopp e97bf2b25a added QPSK/16QAM TX optimizations for TM2 2022-12-07 15:53:26 +01:00
Raymond Knopp e6a2ffb42d optimization of symbols with CRS in TM2 2022-12-07 15:53:25 +01:00
Raymond Knopp 3ea36ba0d3 bugfix in use of sizeof in thread-pool.c 2022-10-11 10:58:14 +02:00
Raymond Knopp 3ef063194a small modification for performance tracing of RU procedures 2022-08-10 17:27:57 +02:00
Raymond Knopp 8530b9c2c2 fixed issue with default CPU cores for RU in CI (now defaults to 2 TP cores and O/S controlled scheduling) 2022-08-09 08:24:37 +02:00
Raymond Knopp 2ed7e89bd2 Merge remote-tracking branch 'origin/develop' into if5_ECPRI_rework
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
2022-08-08 07:25:13 +02:00
Raymond Knopp 4e9c9c5864 added configurable half-slot parallelization to RU processing (same as original version) 2022-08-07 22:49:11 +02:00
Raymond Knopp 087a97f606 fix for 3-digit MNC in asn1_msg.c 2022-08-06 16:30:59 +02:00
Raymond Knopp ed972fd6c6 changes to documentation ethernet.md and bug introduced through simplification (sectional of nr_feptx in nr-ru.c) 2022-08-06 16:27:41 +02:00
Raymond Knopp d517c0c5b2 missing definitiona for build of OAI RU 2022-08-06 14:02:28 +02:00
Raymond Knopp 491d97dee9 removal of IF5_tools.x and old NR RU multi-threaded implementation. Fixes for LTE build 2022-08-06 12:13:16 +02:00
Raymond Knopp 517970a445 warning removal 2022-08-05 07:44:22 +02:00
Raymond Knopp 87a51c9e18 Merge remote-tracking branch 'origin/develop' into if5_ECPRI_rework
Conflicts:
	openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
2022-08-05 07:21:09 +02:00
Raymond Knopp 1b35f0b163 added profiling circular buffer to gNB 2022-08-05 07:18:44 +02:00
Raymond Knopp afed0cec34 testing with 20 and 50 MHz 2x2 on Jaguar. Adding simple documentation in ethernet.md file. 2022-08-03 17:15:49 +02:00
Raymond Knopp 745ef122b8 logging in eth_udp.c to warn about potential missed TX opportunities. 2022-08-02 09:09:07 +02:00
Raymond Knopp cecb9568ad warning removal 2022-08-01 08:51:29 +02:00
Raymond Knopp 7387721ecf Merge branch 'ldpc-decoder-codegen' of https://gitlab.eurecom.fr/oai/openairinterface5g into ldpc-decoder-codegen 2022-06-12 23:24:11 +02:00
Raymond Knopp f6bb869c0b fixed AVX2 issue for cnProc code generator. Some cleanup in formatting and deleting unused files. 2022-06-12 23:23:07 +02:00
Raymond Knopp 83d40a9b7c Add missing parameter preambleTransMax_CE_rel13
To SIB2 and its passing to RRC. Parameter was read but not transfered
before. Basic LTE-M functionality should ok on develop branch with this
fix. Tested with uBlox SARA-R4 (QCOM chipset)
2022-05-30 16:19:35 +02:00
Raymond Knopp 514462f1df Merge branch 'if5_ECPRI_rework' of https://gitlab.eurecom.fr/oai/openairinterface5g into if5_ECPRI_rework
Conflicts:
	targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
2022-05-30 11:47:58 +02:00
Raymond Knopp 29f84b815e commit before merge 2022-05-30 10:35:04 +02:00
Raymond Knopp d0be523f6c corrections for 20 and 40 MHz n38. Some assertions were wrong. 2022-05-23 22:06:23 +02:00
Raymond Knopp 44a3a60183 commented useless call to function which creates an assert with band n38 2022-05-23 10:57:22 +02:00
Raymond Knopp bad9c5969f Merge remote-tracking branch 'origin/develop' into if5_ECPRI_rework
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
2022-05-14 09:27:39 +02:00
Raymond Knopp 8506307ef0 Merge remote-tracking branch 'origin/develop' into ldpc-decoder-codegen
Conflicts:
	cmake_targets/build_oai
	openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
	openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c
	openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h
	openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h
	openair1/PHY/NR_REFSIG/ptrs_nr.c
2022-05-02 22:41:48 +02:00
Raymond Knopp e721f6af04 Merge remote-tracking branch 'origin/tdd25period_for_MR' into F1_interop_ACC_n78
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
2022-04-14 11:14:36 +02:00
Raymond Knopp 86b5b9db3d Merge remote-tracking branch 'origin/develop' into tdd25period_for_MR
Conflicts:
	openair2/GNB_APP/gnb_config.c
	openair2/GNB_APP/gnb_paramdef.h
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
	openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
	openair2/RRC/NR/MESSAGES/asn1_msg.c
	openair2/RRC/NR/rrc_gNB_reconfig.c
2022-04-09 19:44:26 +02:00
Raymond Knopp 05cdd1b4da temporary commit 2022-04-09 15:56:30 +02:00
Raymond Knopp 5962824038 Integrate true reporting of buffer availability of RLC(DU) towards the CU 2022-04-07 16:34:16 +02:00
Raymond Knopp 8fdf4af6aa added multiple thread support for ECPRI/IF5 interface. Uses SO_REUSEPORT for listening with multiple sockets in different threads 2022-04-03 22:23:33 +02:00
Raymond Knopp 10b4f4331e CQI report in slots 7/27 2022-03-29 23:10:08 +02:00
Raymond Knopp b7389ab3d1 Merge remote-tracking branch 'origin/develop' into tdd25period_for_MR
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
2022-03-29 22:57:56 +02:00
Raymond Knopp a77c1d3202 Trigger first DL Data Delivery status from DU to report the buffer availability to the CU
-After that no DL traffic is getting blocked at the Accelleran CU for low values of throughput
-Remaining to remove the hardcoded value of buffer availability and report the actual value from the DU.
2022-03-29 12:17:37 +02:00
Raymond Knopp 65bea43111 Merge branch 'tdd25period_for_MR' of https://gitlab.eurecom.fr/oai/openairinterface5g into tdd25period_for_MR
Conflicts:
	openair1/PHY/NR_TRANSPORT/pucch_rx.c
2022-03-28 21:55:24 +02:00
Raymond Knopp 9bd16f3c66 - fix for CSI-RS allocation (slot slot 0 in symbol 13, SIB1 10 symbols instead of 12 by default)
- extra logging for CRNTI procedure (to catch bug in nr_free_list
2022-03-28 21:45:50 +02:00
Raymond Knopp d840ca0dee Merge remote-tracking branch 'origin/develop' into tdd25period_for_MR
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
2022-03-22 07:03:40 +01:00
Raymond Knopp 05c07c401f removal of some logs. Temporary suppression of QAM256 for 5G Records testing 2022-03-18 18:51:22 +01:00
Raymond Knopp b880e449c7 Merge branch 'nr_prs' of https://gitlab.eurecom.fr/oai/openairinterface5g into nr_prs 2022-03-14 18:07:15 +01:00
Raymond Knopp 27c16382bf changes to support 768-point DFT/IDFT, renaming of 768-point DFT for DFT-precoding (4 DFTs per call) 2022-03-14 18:06:14 +01:00
Raymond Knopp 070b663a54 intermediate commit 2022-03-14 13:29:16 +01:00
Raymond Knopp e71578e7d0 Merge branch 'tdd25period_for_MR' into tdd2_5period_withRLCupdate
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/config.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
	targets/ARCH/AW2SORI/oaiori.c
2022-03-13 07:30:44 +01:00
Raymond Knopp d24068a33b some bugfixes for CSI reporting with PUCCH2. Configuration of cqi_Table 2 for CSI reporting when 256-QAM is enabled. 2022-03-11 01:23:39 +01:00
Raymond Knopp 6abb1e362d Merge remote-tracking branch 'origin/tdd25period_for_MR' into F1_interop_ACC
Conflicts:
	cmake_targets/CMakeLists.txt
	openair1/PHY/NR_TRANSPORT/pucch_rx.c
	openair1/SCHED_NR/fapi_nr_l1.c
	openair1/SIMULATION/NR_PHY/dlschsim.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
	openair2/LAYER2/NR_MAC_gNB/main.c
	openair2/RRC/NR/MESSAGES/asn1_msg.c
	openair2/RRC/NR/MESSAGES/asn1_msg.h
	openair2/RRC/NR/nr_rrc_proto.h
	openair2/RRC/NR/rrc_gNB.c
	openair3/ocp-gtpu/gtp_itf.cpp
	targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
2022-03-09 19:16:23 +01:00
Raymond Knopp f2e21b7381 removed AssertFatal in nr_sch_dmrs.c which prevented using type B configuration (e.g. for 10 MHz test in CI) 2022-03-08 07:47:46 +01:00
Raymond Knopp 2bd90d5b49 Merge remote-tracking branch 'origin/develop' into tdd25period_for_MR
Conflicts:
	openair2/RRC/NR/MESSAGES/asn1_msg.h
2022-03-07 07:38:03 +01:00
Raymond Knopp fcd88de2ab SR/CSI multiplexing fix. default sl_head=6 instead of 4 to check if RF simulator behaves better 2022-03-07 00:08:12 +01:00
Raymond Knopp 3402ea00cc build for NR UE 2022-03-06 09:40:36 +01:00
Raymond Knopp 091386174e bugfix for new sf_ahead parameter 2022-03-05 23:20:35 +01:00