From 97269a9d2dc85a82e1206a4883fbcc3fc40bba23 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Mon, 28 Oct 2024 08:22:02 +0100 Subject: [PATCH] Update nr-ue-design.md Add information about newly added actors to NR UE. --- doc/nr-ue-design.md | 13 ++++++++----- doc/nr-ue-threads.svg | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 doc/nr-ue-threads.svg diff --git a/doc/nr-ue-design.md b/doc/nr-ue-design.md index 7ee42335d6..f1cef858e1 100644 --- a/doc/nr-ue-design.md +++ b/doc/nr-ue-design.md @@ -13,13 +13,17 @@ The `UE_thread` function in `nr-ue.c` is the main top level thread that interact The UE exits when at any point in operation it gets out of synchronization. When the command line option `--non-stop` is used, the UE goes to 'Initial Synchronization' mode when it loses synchronization with gNB. However, this feature is not fully implemented and it is a work in progress at the time of writing this documentation. This will be the default behavior (not a command line option) when the feature is fully implemented. +UE uses actors which are threads dedicated to particular activity. Sync Actor handles initial sync. DL Actors handle DLSCH PHY procedures. UL procedures are processed directly on the threadpool + +![design](nr-ue-threads.svg) + ## Initial Synchronization Block ```mermaid graph TD start(Start) -->|UE_thread| rxRu["RU read
(Reads two frames)"] - rxRu --> |Tpool thread| sync["SSB detection
(PSS & SSS detection
PBCH decoding
SIB decoding)"] + rxRu --> |Sync Actor| sync["SSB detection
(PSS & SSS detection
PBCH decoding
SIB decoding)"] rxRu --> |UE_thread| rxRuDummy["RU read
(Dummy read till sync detection to avoid buffer overflow at radio)"] - sync --> |Tpool thread| frameSync["Frame synchronization
(Shift received samples to align with frame)"] + sync --> |UE_thread| frameSync["Frame synchronization
(Shift received samples to align with frame)"] rxRuDummy --> |UE_thread| frameSync ``` ## Regular Slot Processing @@ -27,9 +31,8 @@ graph TD graph TD sync["Frame synchronization
(Shift received samples to align with frame)"] -->|UE_thread| hw_read["RU read (slot n)"] hw_read --> |UE_thread| rxPreProc["PBCH & PDCCH decoding (slot n)"] - hw_read --> |Tpool thread| txProc["Tx processing (slot n+3)
PUSCH encode
PUCCH encode (wait for DLSCH in slot n+3-k1 to finish)
RU write"] - rxPreProc --> |Tpool thread| rxProc["PDSCH decoding (slot n)"] + hw_read --> |UL Actor| txProc["Tx processing (slot n+3)
PUSCH encode
PUCCH encode (wait for DLSCH in slot n+3-k1 to finish)
RU write"] + rxPreProc --> |DL Actor| rxProc["PDSCH decoding (slot n)"] rxPreProc --> |UE_thread| join(Merge) - txProc --> |Tpool thread| join join --> |Go to next slot
UE_thread| hw_read ``` diff --git a/doc/nr-ue-threads.svg b/doc/nr-ue-threads.svg new file mode 100644 index 0000000000..0ae01ea8aa --- /dev/null +++ b/doc/nr-ue-threads.svg @@ -0,0 +1 @@ +