Master Semester Project
Enabling Joint Communication and Sensing Through RFSoC-Controlled Phased Array Waveforms
Full Report: HERE SENS of Doom PCB Documentation: HERE
This project was carried out in the Sensing and Networking Laboratory (SENS) at EPFL, under the supervision of Samah Hussein and Prof. Haitham Al Hassanieh. The main idea was to enable Joint Communication and Sensing (JCAS) on a real phased array, a key enabler of future 6G systems where the same RF hardware and waveform are used both to transmit data and to sense the environment. Concretely, I connected a Sivers EVK06005 phased array (57–71 GHz, 16 TX/RX beamforming elements) to an AMD/Xilinx ZCU208 RFSoC evaluation board, and integrated everything into HELIX, a 6G real-time experimentation platform. The two goals were (i) fast beam-switching between OFDM symbols, and (ii) reproducing the overlapped radar-communication waveform described in “Orthogonal Coexistence of Overlapped Radar and Communication Waveforms”.
Beamforming (BF) is the core signal-processing technique here: a phased array is a collection of antenna elements, and by applying a set of weights (a steering vector) to each element you can shape, steer or null the beam. The interesting part for JCAS is that the optimal beam can change per OFDM symbol. If you can switch beam patterns fast enough, you can interleave a few probing symbols (to test other beams) with many data symbols on the best known beam, minimizing throughput loss while still sensing the channel. The Sivers EVK06005 provides a dedicated BF interface for fast weight-switching, which combined with the ZCU208 makes a very capable JCAS testbed.
SENS of Doom: a custom breakout PCB
The first big challenge was purely physical. The ZCU208 was never designed to be wired to the EVK06005. The phased array exposes its SPI and BF interfaces on two small 8-pin Molex connectors, while the ZCU208 only exits through its FMC+ HSPC connector, a 560-pin Samtec connector following the VITA 57.4 standard, with no breakout to any usable pin header. Soldering directly on the FMC+ pins was too risky (the pins are extremely dense and the board costs 16k CHF), and no commercial breakout matched the phased array’s pinout. So I designed my own breakout board, SENS of Doom.
Designing SENS of Doom was a deep dive into the VITA 57.4 standard and its quirks. One subtle but critical detail is the VADJ_FMC power rail: following the standard, any mezzanine must carry a small EEPROM describing its configurable voltage rails. The ZCU208 System Controller reads this descriptor and powers VADJ_FMC accordingly, and PL Banks 64 and 67 (which drive most FMC+ signals) depend on this rail. Without a valid EEPROM, VADJ_FMC stays at 0 V and no signal can leave the board. Embedding a compliant FRU EEPROM was therefore not optional, it was the difference between a working board and a dead one. I want to thank Dr. Philipp Födisch from IAMELECTRONICS for helping me navigate this (closed-source) standard and for reviewing the PCB.
Interfacing the phased array
Once the hardware bridge existed, I implemented three things to actually drive the EVK06005 from the ZCU208.
A bare-metal SPI driver. All registers of the phased array are programmed over a 4-wire SPI interface, where each transaction starts with a 16-bit header (13-bit address + 3-bit command) and auto-increments the address for multi-byte transfers. I built the driver on top of Xilinx’s XSpiPs bare-metal driver, using a built-in SPI controller from PL Bank 67 routed through EMIO, because configuring registers is not time-sensitive and no SPI is needed directly in the PL.
A beamforming IP. The BF interface uses three signals (BF_INC, BF_RST, BF_RTN) to walk through the Antenna Weight Vector (AWV) tables that store beam configurations. Rather than toggling these pins from software, I wrote a command-driven HDL module: the higher-level IP issues single-cycle triggers (reset, return-to-home, N-step increment, autonomous sweep) and the module generates the correctly-timed pulses on its own, raising a busy flag and emitting a done pulse on completion.
JCAS IPs. Finally, to reproduce the overlapped radar-communication waveform, I built two custom IPs, a chirp adder and a chirp remover, that inject and extract a sensing chirp directly in the HELIX OFDM pipeline. The sensing waveform is a chirp over a finite time, pre-computed and packed into the PL, and centered around DC to avoid aliasing in the complex baseband. Both IPs use a counter synchronized to the existing triggerOut slot marker so the chirp lines up with the OFDM symbols.
Honest results and limitations
This was a project at the frontier of hardware/software co-design, and I think it’s more useful to be honest about what didn’t fully work than to pretend everything was perfect. The project leaves behind a working hardware/software base and a documented codebase, but a few aspects did not reach completion:
| Aspect | What happened |
|---|---|
| SPI MISO path | The SPI return path could not be validated: the ZCU208 returned inconsistent register reads, and a fallback attempt on an RFSoC 4x2 showed MISO stuck high. Only the MOSI side was confirmed via ILA. |
| FRU / EEPROM | Because VITA 57.4 is closed-source, the FRU descriptor written to the mezzanine EEPROM could not be checked against the spec, and intermittent VADJ_FMC deactivations suggest it is not yet fully compliant. |
| Dual-stream HELIX | With only one ZCU208, I tried to modify the hardware design to include a second phased array on the board. After roughly a month, the lack of documentation and the difficulty of modifying a custom Verilog UDP stack forced me to abandon this idea. |
| Chirp sensing bins | The constraint that the chirp length must divide gcd(N, CP1, CP2) = 16 forces the chirp to repeat at least 128 times per OFDM symbol, leaving substantially fewer sensing bins than the reference paper assumes. |
The most natural next steps are to probe the I2C bus to validate the FRU data, debug the SPI return path on the EVK06005, and extend the JCAS IPs with runtime-configurable chirp parameters through a DDS compiler. A second ZCU208 would then finally enable the full bistatic measurements that were originally envisioned. Beyond the results, this project gave me hands-on experience with the full Vivado and Vitis flow and with hardware/software co-design for communication systems, from the block design down to a bare-metal application running on FreeRTOS. You can read the full report and the SENS of Doom PCB documentation for all the details.