Specifications (Datasheet)¶
This page is a datasheet-style reference for openwifi: the numbers you need to judge whether it fits your radio, FPGA, and timing budget, collected in one place.
Every figure carries a footnote pointing to its source so you can check it. Two conventions to note:
- The repository is authoritative. Where a number comes from openwifi's own code, docs, or release notes, the footnote links to it. If a build script or a repo README states something different from this page, trust the repo and please fix this page.
- Standard-derived values are marked with the
[^std]footnote, which stands for the IEEE 802.11 standard. These follow from the standard and the PHY parameters openwifi implements (for example 20 MHz OFDM), not from an openwifi-specific measurement.
Configuration matters
openwifi is a modifiable design. Bandwidth, baseband clock, MAC timing, and even the FPGA resource footprint depend on how you build and configure it. The figures below describe the default, open-source master configuration on the reference boards unless stated otherwise.
At a glance¶
| Parameter | Value |
|---|---|
| Wi-Fi standards | 802.11a / 802.11g / 802.11n (Wi-Fi 4), 20 MHz, single spatial stream1 |
| Channel bandwidth | 20 MHz (also 10 MHz for 802.11p, 2 MHz for 802.11ah-style sub-GHz)1 |
| RF tuning range | 70 MHz–6 GHz (Analog Devices AD9361/AD9364 front end)10 |
| Baseband transceiver sample rate | 20 Msps (20 MHz mode)2 |
| AD9361 ↔ FPGA sample rate | 40 Msps (decimated/interpolated to 20 Msps in the FPGA)2 |
| FPGA baseband clock | 100 MHz default (up to 200/240 MHz on high-end boards)711 |
| Max PHY rate (open source) | 72.2 Mbps (MCS7, 400 ns short guard interval, theoretical)3 |
| Measured throughput (iperf) | TCP 40–50 Mbps, UDP ~50 Mbps1 |
| TX EVM | −38 dB1 |
| RX sensitivity | −92 dBm @ MCS0, −73 dBm @ MCS71 |
| Real-time MAC (low MAC) | DCF (CSMA/CA), hardware ACK, retransmission, RTS/CTS, NAV, all in FPGA1 |
| FPGA resource footprint | ~19k LUT, 76.5 BRAM, 121 DSP on Zynq-7020 (ZedBoard)8 |
PHY layer¶
openwifi implements an OFDM PHY equivalent to 802.11a/g and the single-stream, 20 MHz subset of 802.11n.
| Parameter | Value |
|---|---|
| Modulation | OFDM (BPSK / QPSK / 16-QAM / 64-QAM)9 |
| FFT size | 649 |
| Data subcarriers | 52 (802.11n HT), 48 (802.11a/g legacy)3 |
| Channel bandwidth | 20 MHz (16.6 MHz occupied)9 |
| FEC | Convolutional coding, rates 1/2, 2/3, 3/4, 5/6 (5/6 added for HT)3 |
| Guard interval | 800 ns (normal), with 400 ns short GI supported for HT3 |
| OFDM symbol duration | 4 µs (3.6 µs with short GI)9 |
| Spatial streams | 1 (SISO), MIMO not supported in open source3 |
802.11b is not supported
openwifi is OFDM-only. The DSSS/CCK rates of 802.11b are not implemented. An 802.11b 1 Mbps rate request is converted to 6 Mbps OFDM.2 This is the usual reason a 2.4 GHz client fails to associate. See Operating Modes → About 802.11b.
Data rates¶
| Mode | Rates | Max (theoretical) |
|---|---|---|
| 802.11a/g (legacy OFDM) | 6, 9, 12, 18, 24, 36, 48, 54 Mbps | 54 Mbps9 |
| 802.11n HT (single stream, 20 MHz) | MCS 0–7 | 65 Mbps (800 ns GI) / 72.2 Mbps (400 ns short GI)3 |
RF front end¶
The RF characteristics come from the Analog Devices AD9361/AD9364 agile transceiver rather than from openwifi itself. openwifi controls it in real time over an FPGA SPI interface. Consult the AD9361 datasheet for full RF specs. The openwifi-relevant facts are:
| Parameter | Value |
|---|---|
| Tuning range | 70 MHz–6 GHz10 |
| Duplex mode | FDD with the same TX and RX frequency. The TX LO and RF switch turn on only for the duration of a packet, so the receiver never hears its own transmitter2 |
| Antenna configurations | 1×1 typical, some boards (AD9361) 2×2-capable11 |
| RF/baseband clock coupling | Baseband clock derived from the AD9361 sample clock, so RF and baseband never drift apart2 |
Per-board RF caveats
RF performance is board-specific. The ADRV9361-Z7035 has very low TX power at 5 GHz, and the stock ANTSDR RF switch only passes 3–6 GHz. See Supported Boards.
MAC-layer timing¶
openwifi's real-time "low MAC" (the xpu core) runs the DCF (CSMA/CA) state machine in FPGA fabric, which is what lets it meet 802.11 interframe timing that a software MAC cannot. The timing values are configurable through the xpu register slv_reg9 (bit-fields for PHY-RX delay, SIFS, slot time, OFDM symbol time, and preamble+SIG time, in µs). The driver programs standard values per band automatically.2
| Parameter | Value |
|---|---|
| TX→RX turnaround | 0.6 µs2 |
| SIFS | 10 µs (2.4 GHz) / 16 µs (5 GHz), set per band by the driver92 |
| Slot time | 9 µs (short slot) / 20 µs (long slot)9 |
| Hardware ACK generation | Yes (in FPGA)1 |
| ACK frame duration (@ 6 Mbps) | 44 µs5 |
| Measured ACK gap (RX / TX) | ≈16 µs (320 samples @ 20 Msps) in the app-note IQ capture4 |
| Can be changed or disabled at run time | SIFS, DIFS, EIFS, slot time, CW, NAV, ACK, retransmission6 |
SIFS is band-dependent
Following the 802.11 standard, openwifi's FPGA low-MAC applies 10 µs SIFS in the 2.4 GHz band and 16 µs in 5 GHz, selected automatically per channel by the driver (ad9361_rf_set_channel()).2 The feature-list claim of a "10 µs SIFS"1 refers to the tighter 2.4 GHz case, which a software MAC cannot meet.
One implementation caveat: the driver computes the HT duration_id header field with a fixed SIFS = 16 µs regardless of band,5 a conservative choice for that field only. It does not change the actual over-the-air SIFS, which the FPGA enforces per band.
Measured performance¶
These are openwifi's published bring-up numbers, measured over cable and over the air on FMCOMMS2 at 2.4 GHz.1 Your results depend on board, RF path, and configuration.
| Metric | Value | Conditions |
|---|---|---|
| TCP throughput (iperf) | 40–50 Mbps | 802.11n1 |
| UDP throughput (iperf) | ~50 Mbps | 802.11n1 |
| TX EVM | −38 dB | FMCOMMS2, 2.4 GHz1 |
| RX sensitivity @ MCS0 | −92 dBm | FMCOMMS2, 2.4 GHz1 |
| RX sensitivity @ MCS7 | −73 dBm | FMCOMMS2, 2.4 GHz1 |
FPGA implementation¶
openwifi is built to fit the lowest-end supported FPGA (Xilinx Zynq-7020), so its resource footprint stays small for a full-stack Wi-Fi PHY+MAC.
| Board / device | LUT | BRAM | DSP | Baseband clock |
|---|---|---|---|---|
ZedBoard, Zynq-7020 (xc7z020, speed grade −1) |
~19k | 76.5 | 121 | 100 MHz8 |
ZC706, Zynq-7045 (xc7z045) |
~21k | 73.5 | 98 | up to 200 MHz8 |
These are openwifi-core numbers
The utilization above is for the openwifi design. A complete bitstream also includes peripheral logic (DMA, AXI interconnect, the ADI reference design, clocking), so the total device utilization is higher. The figures were published in the openwifi release notes. The later releases ship full report_utilization archives as release assets (20220330084857-pre-release-report.zip for v1.3.0, openwifi-1.5.0-shahecheng-utilization.zip for v1.5.0) if you need the exact breakdown for a specific version.8
Clock / speed grade. The openofdm_tx core was optimized so the whole design closes timing at 100 MHz on the low-speed-grade 7020 (−1), while higher-grade parts run at 200 MHz (the release notes cite the Zynq-7035 in speed grades −2 and −2L, faster-binned silicon, and the ZC706's Zynq-7045 offers the same 200 MHz option).8 The baseband clock is set by NUM_CLK_PER_US in openwifi-hw/boards/openwifi.tcl (default 100).7 Per-board options are in Supported Boards.
To generate exact numbers for your build¶
Resource and timing reports are produced by synthesis, so they are not committed to the repos as static files. For the precise figures on your target board and version:
# after building the FPGA (see FPGA Development), in Vivado Tcl or the GUI:
report_utilization -file util.rpt # LUT / FF / BRAM / DSP
report_timing_summary -file timing.rpt # Fmax / slack
report_power -file power.rpt # on-chip power estimate
See FPGA Development for the build flow.
Not supported in the open-source release¶
| Feature | Status |
|---|---|
| MIMO (spatial multiplexing) | Not supported3 |
| 40 MHz bandwidth | Not supported3 |
| A-MSDU aggregation | Not supported10 |
| A-MPDU aggregation | Experimental (./wgd.sh 1)10 |
| 802.11b (DSSS/CCK) | Not supported (OFDM only)2 |
| 802.11ax / Wi-Fi 6 and later | Commercial only (openwifi.tech)1 |
Two-hour receiver limit on unlicensed Vivado
A bitstream built against the Xilinx Viterbi decoder evaluation license halts the receiver after ~2 hours. Reload the FPGA or use a paid license. This is a toolchain licensing limit, not an openwifi design limit. See Troubleshooting.
Sources¶
-
openwifi
README.md: performance summary (throughput, EVM, sensitivity) and feature list. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
openwifi
doc/README.md: the RF/baseband/sampling design (40→20 Msps, 0.6 µs TX/RX turnaround, RF-baseband clock coupling), thexpuregister descriptions, and the note thatad9361_rf_set_channel()configures per-band FPGA settings including SIFS. The band-dependentsifs = (actual_rx_lo<2500 ? 10 : 16)line exists indriver/sdr.conly as a comment. The active code setssifs = 16unconditionally. ↩↩↩↩↩↩↩↩↩↩ -
openwifi
doc/app_notes/ieee80211n.md: subcarriers, coding rates, guard interval, and the 72.2 Mbps theoretical rate, with MIMO and 40 MHz listed as not supported. ↩↩↩↩↩↩↩↩ -
openwifi
doc/app_notes/iq_ack_timing.md: the measured ≈16 µs self-ACK gap (320 samples at 20 Msps). ↩ -
openwifi
driver/sdr.c: the SIFS and ACK-duration constants used at run time. ↩↩ -
openwifi
doc/app_notes/frequent_trick.md: how SIFS/DIFS/EIFS/slot/CW/NAV/ACK/retransmission are overridden or disabled. ↩ -
openwifi-hw
boards/openwifi.tcl:NUM_CLK_PER_US, the FPGA baseband-clock setting (default 100 MHz). ↩↩ -
openwifi GitHub Releases: FPGA resource-utilization and Fmax/speed-grade statements (release v1.1.0 "taiyuan," full
report_utilizationarchives in v1.3.0 and v1.5.0). ↩↩↩↩↩ -
IEEE 802.11: values that follow from the standard for a 20 MHz OFDM PHY (FFT size, subcarrier counts, symbol/slot timing, legacy rate set), not from an openwifi-specific measurement. ↩↩↩↩↩↩↩
-
openwifi FAQ & Resources: AD9361 70 MHz–6 GHz tuning, A-MPDU/A-MSDU status. ↩↩↩↩
-
openwifi wiki Supported Boards: per-board SoC, antenna capability, and baseband-clock options. ↩↩