|
|
## How to offload turbo decode to FPGA
|
|
|
|
|
|
This page describes the modification of OAI process to invoke Turbo offloaded to FPGA in the UE side L1 process (DLSCH).
|
|
|
|
|
|
#### HW Accelerator with FPGA Board
|
|
|
Turbo Decoder on the UE side is offloaded to FPGA Board.
|
|
|

|
|
|
|
|
|
#### System Architecture
|
|
|

|
|
|
|
|
|
#### Specification of “PCIe FPGA Board”
|
|
|

|
|
|
|
|
|
#### API List
|
|
|

|
|
|
|
|
|
#### Timing chart and PCIe Transfer Delay
|
|
|

|
|
|
|
|
|
#### Modification image for the Turbo offload
|
|
|
Initialization
|
|
|
From OAI process, Turbo decode operation initialization API is called in order to use Turbo offload process in FPGA.The API call is located in the very beginning of main function described below. To be more concrete, API is called immedeiately after logInit.
|
|
|
Real : /targets/RT/USER/lte_softmodem.c main()
|
|
|
SIM : /openair1/SIMULATION/LTE_PHY/dlsim.c main()
|
|
|
|
|
|
DLSCH decode process (dlsch_decoding)
|
|
|
In order to pass the data which the De-rate matching process is done to FPGA for Turbo offload, Turbo decode operation request API is called. When the API transfers the operation request to FPGA, the buffer mapped by Turbo decode operation initalization API is needed, but, this buffer trasnfer is done during 16bit -> 8bit conversion in Turbo decode operation request API,so that OAI has to give harq_process->w[r] to the API as it is (r is CodeBlock number).
|
|
|
|
|
|
After OAI calls Turbo decode operation request API as many as the number of CodeBlocks, OAI waits for the Turbo decode process completion by calling Turbo decode end wait API. The asynchronous mode is used for the API. The number of retry of the API call should be determined in case of no end response.
|
|
|
|
|
|
When the Turbo deocode operation result read API returns NG or returns CRC NG, HARQ retransmission counter is incremented, and the function returns the iteration max number + 1. The API returns OK and CRC OK, OAI manages the pointer to the Turbo decoded data which is notified by the API. The buffer is stored in harq_process->b, and the function returns the interation number which is also notifed by the API.
|
|
|
|
|
|
The detalied process flow is described in the "Turbo Offload Modification Flow" sheet.
|
|
|
[TurboOffloadModificationFlow.xlsx](/uploads/b488bbba24bf551f3e9e0bb0434e9560/TurboOffloadModificationFlow.xlsx) |