New LDPC coding library interface for decoding and encoding complete slots in one call to the library Previous attempts to integrate LDPC decoding relying on offloading show the limitation of the original code segment coding interface for the library implementing LDPC coding. In order to perform the offload and therefore the decoding in an optimal fashion, it is relevant to provide the implementation with the broader amount of data possible per call, which is a slot. A previous MR related to T2 offload managed to offer an interface for decoding transport blocks by modifying only nr_ulsch_decoding.c. But this may not be sufficient for performing an efficient decoding in any situation. Slots could be shared between multiple transport blocks in case multiple UEs are connected to the RAN, which makes the transport block size shrink and therefore degrades the efficiency of the offloading. This MR offers a broader interface with a gNB decoding entry point in phy_procedures_nr_gNB.c. The file nr_ulsch_decoding.c now lets the decoding library implement deinterleaving, rate-unmatching and decoding for the slot. In gNB encoding and UE decoding and encoding as well, tasks are partitioned in a similar fashion. As it allows to feed the implementation with the broadest amount of data possible, it allows to fit any coding solution in a library. This will avoid further modification to OAI source code and addition of options to select an implementation when integrating new decoding solutions. An implementation of this interface will therefore be offered for every existing decoding solution in OAI and solutions added in the future will be provided as independent module code without any modification to the core of OAI code. The way to choose the decoding solution and to configure it was also unified using configmodule. The library can be chosen through the option --loader.ldpc.shlibversion. The slot coding solutions shipped with this MR can be configured through configmodule (e.g., T2 address and isolated cores). This MR includes three coding implementations: - A wrapper around segment decoding libraries for test purpose: libldpc.so - A one shot slot coding and encoding with the T2 board: libldpc_t2.so - A decoder on FPGA using the XDMA driver: libldpc_xdma.so Improvements brought by this MR: - Easy integration of a wider variety of LDPC coding solution at gNB and UE - Easy selection of the LDPC coding solution (option --ldpc-offload-enable is kept for now but it can be ultimately removed) - T2: * More efficient when many UEs are connected * Decoding and encoding in nr-uesoftmodem
|
OpenAirInterface documentation overview |
This is the general overview page of the OpenAirInterface documentation.
This page groups links to general information, tutorials, design documents, radio integration, and special-purpose libraries.
IMPORTANT NOTE:
Before reading this documentation, we strongly advise you to keep your own repository rebased on develop
or at least to checkout the documentation on the version of the repository you are using.
Then the documentation will better reflect the features available in your repository so that you may avoid some errors.
Beware if you previously pulled the develop branch that your repository may be now behind develop.
[[TOC]]
General
- FEATURE_SET.md: lists supported features
- GET_SOURCES.md: how to download the sources
- BUILD.md: how to build the sources
- code-style-contrib.md: overall working practices, code style, and review process
- cross-compile.md: how to cross-compile OAI for ARM
- clang-format.md: how to format the code
- sanitizers.md: how to run with ASan/UBSan/MemSAN/TSan
- environment-variables.md: the environment variables used by OAI
- tuning_and_security.md: performance and security considerations
There is some general information in the OpenAirInterface Gitlab Wiki
Tutorials
- Step-by-step tutorials to set up 5G:
- RUNMODEM.md: Generic information on how to
- Run simulators
- Run with hardware
- Specific OAI modes (phy-test, do-ra, noS1)
- (5G) Using SDAP and custom DRBs
- IF setups and arbitrary frequencies
- MIMO
- How to run OAI with O-RAN 7.2 FHI
- How to run a 5G-NSA setup
- How to run a 4G setup using L1 simulator Note: we recommend the RFsimulator
- How to use the L2 simulator
- How to use the OAI channel simulator
- How to use multiple BWPs
- How to run OAI-VNF and OAI-PNF Note: does not work currently
- How to use the positioning reference signal (PRS)
- How to use device-to-device communication (D2D, 4G)
- How to run with E2 agent
- How to run the physical simulators
- How to setup OAI with Nvidia Aerial and Foxconn
- How to setup OAI with AMD T2 Telco card
- How to do a handover
- How to setup gNB frequency
Legacy unmaintained files:
L2NFAPI_NOS1.md,L2NFAPI_S1.md: old L2simulator, not valid anymoreSystemX-tutorial-design.md: old, high-level documentationUL_MIMO.txt: UL-MIMO specific notes
Designs
- General software architecture notes: SW_archi.md
- Information on E1
- Information on F1
- Information on how NR nFAPI works
- Flow graph of the L1 in gNB
- L1 threads in NR-UE
- Information on gNB MAC
- Information on gNB RRC
Legacy unmaintained files:
Building and running from images
- How to build images
- How to run 5G with the RFsimulator from images
- How to run 4G with the RFsimulator from images
- How to run physical simulators in OpenShift
Libraries
General
- The T tracer: a generic tracing tool (VCD, Wireshark, GUI, to save for later, ...)
- OPT: how to trace to wireshark
- The configuration module
- The logging module
- The shared object loader
- The threadpool used in L1
- The LDPC implementation is a shared library
Radios
Some directories under radio contain READMEs:
The other SDRs (AW2S, LimeSDR, ...) have no READMEs.
Special-purpose libraries
- OAI has two scopes: one based on Xforms and one based on imgui, described in this README
- OAI comes with an integrated telnet server to monitor and control
- OAI comes with an integrated web server
Testing
- UnitTests.md explains the unit testing setup
- TESTBenches.md lists the CI setup and links to pipelines
Developer tools
- formatting is a clang-format error detection tool
- iwyu is a tool to detect
#includeerrors