From f8edb31dc2263fd811ca6cb01ae01cd6aa3c692a Mon Sep 17 00:00:00 2001 From: canisio Date: Wed, 8 Apr 2026 15:04:15 -0300 Subject: [PATCH] updated doc: Tx subsystem --- docs/pl_tx_subsystem.md | 81 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/docs/pl_tx_subsystem.md b/docs/pl_tx_subsystem.md index 83a6787..c719ee9 100644 --- a/docs/pl_tx_subsystem.md +++ b/docs/pl_tx_subsystem.md @@ -1,4 +1,4 @@ -# 📡 PL Tx Subsystem (Pulse Generator) +# 📡 PL Tx Subsystem (Pulse & Continuous LFM Generator) [🏠 Project Home](../README.md) @@ -6,7 +6,7 @@ ## Overview -The Tx subsystem implements a **pulse-based Linear Frequency Modulated (LFM) chirp generator** using a DDS/NCO architecture in the FPGA (PL). +The Tx subsystem implements a **pulse-based and continuous Linear Frequency Modulated (LFM) chirp generator** using a DDS/NCO architecture in the FPGA (PL). The generator produces **complex baseband output**: @@ -24,7 +24,7 @@ pulse_gen_ctrl (FSM) ↓ tx_active ↓ -Phase Increment Counter +Phase Increment Logic ↓ NCO (DDS) ↓ @@ -32,6 +32,39 @@ Phase Increment Counter --- +## Operating Modes + +The subsystem now supports multiple Tx modes: + +### 1. Pulsed LFM (default) + +- Chirp generated only during pulse window +- Phase resets at each pulse start +- Standard radar burst operation + +--- + +### 2. CW Mode (Continuous Wave) + +- `tx_active = 1` continuously +- Generates a single-tone output +- Achieved by setting constant phase increment + +--- + +### 3. Continuous LFM (Workaround Implementation) + +- `tx_active` forced HIGH continuously +- A **1-cycle LOW pulse** is inserted periodically +- This LOW→HIGH transition **resets the NCO** + +Result: +- Continuous chirp +- Bounded bandwidth +- Periodic repetition of LFM + +--- + ## Chirp Generation Principle The chirp is generated using a second-order phase accumulator: @@ -72,7 +105,7 @@ States: ## Timing Behavior -Within each PRI: +### Pulsed Mode |<------ PRI ------>| |<-- pulse -->| idle | @@ -80,7 +113,31 @@ Within each PRI: - tx_active = 1 → chirp output - tx_active = 0 → output zero -Chirp is reset at each pulse start. +--- + +### Continuous LFM Mode + +tx_active behavior: + +1 1 1 1 1 0 1 1 1 1 ... + +- 1-cycle LOW inserted at end of chirp period +- Rising edge resets NCO +- Defines chirp repetition interval + +--- + +## CW / Continuous LFM Implementation Details + +- CW mode bypasses FSM output +- A dedicated counter generates periodic reset pulses +- Reset timing is based on `pulse_width_cycles` + +Important: + +- Reset pulse is exactly **1 clock cycle** +- Ensures deterministic NCO restart +- Decoupled from PRI/FSM timing --- @@ -97,7 +154,19 @@ Chirp is reset at each pulse start. - Deterministic timing (128 MHz) - Efficient DDS (adder-based) - Complex output (I/Q) -- Supports burst-mode radar operation +- Supports: + - Pulsed radar mode + - Continuous wave (CW) + - Continuous LFM (periodic chirp) + +--- + +## Design Notes + +- FSM controls **timing (when to transmit)** +- NCO controls **frequency evolution** +- Continuous LFM implemented via **tx_active edge reuse** +- Minimal hardware overhead (no additional NCO logic) ---