A 5G NR cell-search receiver for FPGA: from baseband I/Q samples to cell identity and the broadcast message a handset reads at power-on. Blind detection of the primary synchronization signal, energy thresholding and peak location, SSB extraction, OFDM demodulation with a 256-point FFT, and the full physical broadcast channel decode to the Master Information Block. It is generated as bit-exact RTL, proven against the MATLAB 5G Toolbox, and deployed on a Kria KV260 with the synchronization front-end running in the FPGA fabric and the broadcast decode on the host. It recovers three real over-the-air cells, each to a consistent broadcast message.
A live 5G downlink was captured over the air, then decoded through the generated receiver. Every headline number below is measured on hardware, not simulated.
Resources and timing are Vivado place-and-route on a Kria KV260 (XCK26). The detector comparison uses the reference IP's own part.
| Metric | Result | Source |
|---|---|---|
| Real over-the-air cells decoded to their broadcast message | 3 / 3 CRC clean | consistent MIB, all three cells MEASURED |
| Detector logic vs the commercial HLS reference (same part) | 38% fewer LUTs | 5,124 vs 8,669 LUT, and 75% fewer FF MEASURED |
| Detector logic, place-and-route (KV260) | 5,124 LUT / 5,944 FF / 298 DSP / 1 BRAM | Vivado utilization MEASURED |
| Full receiver clock, place-and-route (KV260) | 256 MHz | Vivado Design Timing Summary MEASURED |
| Full receiver logic, place-and-route (KV260) | 6,175 LUT / 6,709 FF / 314 DSP / 4 BRAM | Vivado utilization MEASURED |
| Deployed overlay timing (KV260, 200 MHz link) | met, +0.403 ns | full overlay place-and-route MEASURED |
| On-silicon spectra vs the reference model | 0 mismatch / 2,540 beats | DMA round-trip on the KV260 MEASURED |
| Robustness campaign, full parameter space, clean channel | 300 / 300 bit-exact | all 1,008 cell IDs, any broadcast message MEASURED |
| Fading plus carrier offset plus noise | 200 / 200 | impairment sweep MEASURED |
| Fixed-point front-end (16-bit and 12-bit spectra) | 300 / 300 each | quantized grid, no loss MEASURED |
The detector carries nine primary-synchronization correlators, the algorithmically required cost of searching all three cell-group candidates at once with complex matched filters. Each correlator is generated as the family's most efficient folded FIR, which is why the detector uses 38% fewer look-up tables than the commercial high-level-synthesis reference on the same device while running at the line rate.
The input is the stream of baseband I/Q samples a radio front end delivers after down-conversion. The receiver turns that stream into a cell identity and the decoded broadcast message in four stages, each mirroring a step of the 5G NR standard.
At power-on the receiver does not know the cell group, so it correlates against all three primary-synchronization candidates at once, nine folded correlators in parallel, and searches the sample stream for the peak that marks a synchronization block.
An energy measure with an adaptive threshold and a peak finder locate the true block start and cut it from the stream. Each symbol is stripped of its cyclic prefix and a 256-point FFT recovers the 240 subcarriers of the resource grid.
The secondary synchronization signal pins the exact cell identity. The broadcast pilots give a channel estimate, every subcarrier is equalized, and the constellation is soft-demapped to per-bit confidences.
Descrambling, a polar list decoder, and a 24-bit CRC recover the 32-bit broadcast payload, which is de-interleaved and parsed into the Master Information Block: system frame number, subcarrier spacing, and the pointers a handset needs for initial access.
The synchronization and demodulation front end runs at the line rate in the FPGA fabric; the control-heavy broadcast decode runs on the host, split at the narrowest interface in the chain, the recovered spectrum. Need a transmit chain or a different cellular standard? The same flow generates and re-verifies new configurations. See IP customization.
The analyzer below replays a stream of diverse synchronization blocks, the same host decode chain that runs on the KV260 front-end spectra. As the channel worsens, the constellation spreads from a tight QPSK to a noise cloud, the signal-quality history climbs, and the broadcast decode holds bit-exact down to the coding limit before it finally fails.
The analyzer runs the receiver across the full parameter space and a worsening channel, in your browser, with no server and no radio attached. Every frame is decoded to its broadcast message and checked bit-exact against what was sent.
Every configuration is checked against the MATLAB 5G Toolbox as an independent judge: thousands of standard-compliant blocks, each carrying a known cell identity and broadcast message, decoded and compared bit for bit. On real captured signal the receiver reads three cells to one consistent broadcast message, and the decode corrects a descrambling error present in the reference script.