Files

5.1 KiB

RTL mapping and architecture tradeoffs

All streaming datapaths use data, valid, ready, optional first/last, channel_id, and sideband metadata. State advances only on valid && ready. Backpressure must propagate or terminate in a sized sample FIFO. Reset clears valid/state/overflow counters and sets NCO phases to software-programmed start values; it must not occur between arbitrary host blocks.

Acquisition formulas

Let (N_s=\operatorname{round}(f_sT_c)), FFT size (N\ge N_s), PRNs (P), Doppler bins (D), noncoherent intervals (M), Doppler lanes (L), FFT latency/interval (C_{FFT}), and clock (f_{clk}).

  • observation buffer: (MN_s) complex samples;
  • transforms per PRN: (2DM) when code FFTs are precomputed;
  • code FFT store: (PN) complex words (or (N) for on-demand PRN loading);
  • pointwise complex multiplications: (PDMN);
  • approximate single-engine search cycles: (P\lceil D/L\rceil M(2C_{FFT}+N));
  • acquisition time is those cycles divided by (f_{clk}), plus fill and control overhead.

A — buffered FFT PCPS

One coherent block is buffered. A mixer iterates Doppler bins, a forward FFT is multiplied by conjugated code FFT memory, the same or a second engine performs IFFT, magnitude squared accumulates in Doppler/code RAM, and peak search scans the result. It minimizes mixers/FFT engines/DSPs and maximizes search latency. Ping-pong buffers hide capture behind search. One FFT engine needs arbitration and doubles transform serialization; two remove that conflict at extra DSP/BRAM.

B — parallel Doppler lanes

NUM_DOPPLER_LANES=L replicates carrier mixers and either feeds batched FFTs or replicates FFT engines. With one reused FFT, lanes improve mixing but not the FFT bottleneck. With L FFT/IFFT paths, ideal Doppler latency approaches 1/L while DSP, twiddle ROM, transpose memory, and noncoherent RAM ports grow roughly with L. Intermediate choices use L mixers, a smaller number of FFT engines, and FIFOs. Resource budgets and required reacquisition time select L; neither architecture is universally preferred.

Tracking

Fully parallel mode instantiates carrier/code NCOs and VE/E/P/L/VL complex MACs per channel. It provides one-sample-per-clock latency independence and uses the most DSPs and accumulators.

Time-multiplexed mode stores phase words, FCWs, five complex accumulators, loop states, counters, and secondary phase per channel in channel_state_ram. NUM_CORRELATOR_LANES engines visit all active channels for every input sample. The no-loss condition is

[ \left\lceil\frac{NUM_TRACKING_CHANNELS}{NUM_CORRELATOR_LANES}\right\rceil C_{channel}\le f_{clk}/f_s. ]

If it fails, more lanes, a faster clock, a lower post-decimation sample rate, or fewer active channels are required. A sample FIFO cannot repair a sustained rate violation.

Parameters are NUM_TRACKING_CHANNELS, NUM_CORRELATOR_LANES, SAMPLE_WIDTH, NCO_PHASE_WIDTH, CODE_PHASE_WIDTH, ACCUMULATOR_WIDTH, and MAX_INTEGRATION_SAMPLES. The Python TrackingScheduler evaluates this exact condition.

The detailed per-module signal, width, latency, storage, reset, saturation, and verification contract is in src/galileo_rx/rtl_model/architecture.md.

SignalSim gate before Acquisition IP / Tracking IP implementation

The validated external stimulus is complex IQ8 at 8.184 MHz with +2.046 MHz IF. validate-signalsim exports the 20 ms acquisition observation as separate two's-complement I/Q hex files, a per-sample timestamp CSV, and symbolic register values under reports/signalsim_validation/rtl_vectors/.

The fixed acquisition boundary model agrees with the float64/complex128 reference on Doppler bin, code-phase sample, and acquisition decision with zero overflow. Its normalized correlation-map RMS error is 0.00219 and peak error is 0.01996 for the proposed comparison formats. This is an input/FFT/product/power boundary result; it does not yet include a selected vendor FFT butterfly shift schedule.

Measured requirements feeding the RTL plan are:

  • complex IQ input and IQ ordering must be a first-class sample-input mode;
  • code ROM import must discard one padding bit per 1024-bit SignalSim E1 table sector—no unexplained chip offset is permitted;
  • acquisition-to-tracking handoff carries IF center separately from Doppler so code aiding never uses the IF frequency;
  • E1B pull-in supports 2 ms dumps and data-insensitive FLL, followed by paired 4 ms raw-symbol outputs;
  • E1C channel state includes secondary phase (measured phase 10 for this vector) and supports wipeoff before PLL/discriminator processing;
  • tracking measurement/APB visibility includes prompt I/Q, carrier/code NCOs, state, lock metrics, secondary phase, and symbol-valid/data;
  • APB addresses are still unassigned. The exported metadata uses symbolic names and therefore blocks a bus-level RTL run until the register map exists.

Native real-IF SignalSim stimulus is unavailable, so the real-input DDC path remains covered only by internal Python vectors. Full CBOC, IQ2, full I/NAV decoding, nominal/weak C/N0, signed-Doppler, and multi-PRN external regressions remain gates before claiming broad Galileo/RTL compatibility.