---
# System prepended metadata

title: OAI Monolithic SW-Arch Graph
tags: [OAI]

---

# OAI Monolithic SW-Arch Graph
###### tags: `OAI`


```mermaid
flowchart TB
    A[ru_thread] --> RFin>block rx_rf] --> feprx
    feprx --> half-slot --> end_feprx
    feprx --> second-thread -- block_end_feprx --> end_feprx>feprx]
    end_feprx --> rx_nr_prach_ru
rx_nr_prach_ru -- block_queue_singleton --> resp_L1>resp L1]
resp_L1 -- async launch --> rx_func
resp_L1 -- immediate return --> RFin

subgraph rxfunc
rx_func_implem[rx_func] 
    subgraph rxfuncbeg
      handle_nr_slot_ind
      --> rnti_to_remove-mgmt
      --> L1_nr_prach_procedures
      --> apply_nr_rotation_ul
    end 
    subgraph phy_procedures_gNB_uespec_RX
      fill_ul_rb_mask
      --> pucch(decode each gNB->pucch)
      -->nr_fill_ul_indication
      --> nr_ulsch_procedures
      --> nr_ulsch_decoding
      --> segInParallel[[all segments decode in parallel]]
      --> barrier_end_of_ulsch_decoding
    end 
    subgraph NR_UL_indication
      handle_nr_rach
      --> handle_nr_uci
      --> handle_nr_ulsch
      subgraph gNB_dlsch_ulsch_scheduler
          run_pdcp
          --> nr_rrc_trigger
          --> schedule_xxxx
      end
      handle_nr_ulsch --> gNB_dlsch_ulsch_scheduler
      subgraph NR_Schedule_response
         L1_tx_free3>L1_tx_free]
         --> handle_nr_nfapi_xxx_pdu
         --> sendTxFilled((L1_tx_filled))
         --> nr_fill_ul_xxx
         --> nr_fill_prach
      end
      gNB_dlsch_ulsch_scheduler --> NR_Schedule_response
    end 
    rx_func_implem --> rxfuncbeg
    rxfuncbeg --> phy_procedures_gNB_uespec_RX
phy_procedures_gNB_uespec_RX --> NR_UL_indication
-- block_queue_block_PNF_monolithic --> L1_tx_free2>L1 tx filled]
-- async launch --> tx_func
L1_tx_free2 -- send_msg --> rsp((resp_L1))
end 
rx_func --> rxfunc


subgraph tx_func
    direction LR
    subgraph phy_procedures_gNB_TX
       dcitop[nr_generate dci top]
       --> nr_generate_csi_rs
       --> apply_nr_rotation
       -- send_msg --> end_tx_func((L1_tx_out))
    end
    subgraph tx_reorder_thread
        L1_tx_out>L1_tx_out]
        --> reorder{re order} --> reorder
        reorder --> ru_tx_func
        reorder --> L1_tx_free((L1_tx_free))
        ru_tx_func --> feptx_prec
        --> feptx_ofdm
    end 
end

```
