Skip to content

Course: DSP and radio on an FPGA -- fixed point, filters, FFT, BPSK (9x3, hardware track) #1490

Open

Description

@gHashTag

Parent epic: #1476

Course id: dsp-and-radio
Audience: hardware engineers (RTL / FPGA / ASIC).
Prerequisites: Course 1 (FPGA); Course arithmetic-circuits modules 1-4 recommended.

Why this course

FPGAs earn most of their revenue in signal processing: radio, radar, instrumentation, 5G. The repo already has a BPSK spec with a Barker-13 sync word and fixed-point requantization. A DSP course broadens the audience from AI to communications engineers.

What already exists in the repo (grounding)

  • fpga/bpsk.t27 (BARKER13_BITS; its 0b literal currently crashes constsOf)
  • numeric/requant_boundary.t27, fpga/mac.t27, fpga/memory.t27
  • Missing: FIR, IIR/CIC, FFT, NCO specs

Decomposition: 9 modules x 3 lessons

Module 1 -- fixed-point: numbers for DSP

# Lesson id What the reader learns Spec Widget idea
1 q-formats Qm.n notation, range and resolution NEW dsp/fixed_point.t27 Q-format explorer
2 overflow-and-saturation wrap vs saturate numeric/requant_boundary.t27 saturation demo
3 rounding-noise quantization noise and SNR per bit NEW dsp/fixed_point.t27 SNR vs bits

Module 2 -- sampling: signals in time

# Lesson id What the reader learns Spec Widget idea
4 nyquist sampling theorem and aliasing NEW dsp/sampling.t27 alias visualizer
5 decimation decimation and interpolation NEW dsp/sampling.t27 rate-change diagram
6 signals-in-trits what changes with ternary samples ternary/packed_trit.t27 ternary quantizer

Module 3 -- fir: finite impulse response

# Lesson id What the reader learns Spec Widget idea
7 convolution taps and convolution NEW dsp/fir.t27 convolution stepper
8 fir-architecture direct, transposed, systolic FIR NEW dsp/fir.t27 architecture switcher with DSP counts
9 symmetric-fir using symmetry and the DSP pre-adder NEW dsp/fir.t27 DSP savings

Module 4 -- iir-and-cic: recursive and multiplier-free filters

# Lesson id What the reader learns Spec Widget idea
10 iir IIR biquads and stability NEW dsp/iir.t27 pole-zero plot
11 cic CIC decimators: no multipliers NEW dsp/cic.t27 CIC response
12 filter-choice FIR vs IIR vs CIC on an FPGA NEW dsp/fir.t27 comparison table

Module 5 -- fft: frequency domain

# Lesson id What the reader learns Spec Widget idea
13 dft-to-fft from DFT to radix-2 FFT NEW dsp/fft.t27 butterfly diagram
14 fft-hardware streaming vs burst FFT architectures NEW dsp/fft.t27 resource comparison
15 twiddles-and-scaling twiddle ROM and block floating point NEW dsp/fft.t27 scaling demo

Module 6 -- oscillators: making tones

# Lesson id What the reader learns Spec Widget idea
16 nco numerically controlled oscillator NEW dsp/nco.t27 NCO frequency dial
17 cordic-nco CORDIC-based sine generation NEW arith/cordic.t27 sine purity
18 mixing mixing and frequency shift NEW dsp/nco.t27 spectrum view

Module 7 -- modulation: bits on a carrier

# Lesson id What the reader learns Spec Widget idea
19 bpsk binary phase shift keying fpga/bpsk.t27 constellation
20 symbol-shaping pulse shaping and raised cosine NEW dsp/fir.t27 eye diagram
21 qpsk-and-beyond QPSK, QAM: more bits per symbol NEW dsp/qam.t27 constellation switcher

Module 8 -- synchronization: finding the signal

# Lesson id What the reader learns Spec Widget idea
22 barker-13 Barker-13 and its autocorrelation fpga/bpsk.t27 correlation peak
23 timing-recovery symbol timing recovery NEW dsp/sync.t27 timing error plot
24 carrier-recovery Costas loop for phase NEW dsp/sync.t27 phase lock animation

Module 9 -- radio-capstone: a link end to end

# Lesson id What the reader learns Spec Widget idea
25 tx-chain the full transmit chain fpga/bpsk.t27 chain diagram
26 rx-chain the full receive chain fpga/bpsk.t27 chain diagram
27 capstone BPSK loopback on the board with bit error rate fpga/bpsk.t27 BER curve from a real run

Specs that do not exist yet (write in gHashTag/t27 first)

  • dsp/fixed_point.t27
  • dsp/sampling.t27
  • dsp/fir.t27
  • dsp/iir.t27
  • dsp/cic.t27
  • dsp/fft.t27
  • dsp/nco.t27
  • dsp/qam.t27
  • dsp/sync.t27

Honesty notes and traps

  • Many specs are new; this course is the largest spec-authoring effort in the epic. Consider shipping it after the arithmetic course, which supplies CORDIC.
  • RF output needs a DAC/ADC the boards may not have; the capstone is a digital loopback unless hardware is added, and the page must say so.

Acceptance criteria

  • specs/course/<id>.t27 + <id>-ru.t27 exist, registered in specs/course/courses.t27, built by course-from-spec.mjs (recipe: specs/course_recipe/course-27.t27).
  • Exactly 9 modules x 3 lessons = 27 lessons; every lesson names one widget and one spec.
  • Every lesson spec compiles AND its test blocks pass in the reader's browser (blocked by the browser-runner issue), or the lesson says plainly that it is a recorded tri cast and links the recording.
  • Every number on a page comes from real tool output named in the widget's DATA_SOURCES (yosys / nextpnr / board run / spec test). No invented figures.
  • Board named on every hardware page (Wukong xc7a200tfgg676 vs AX7203 xc7a200tfbg484 vs Arty A7 / XC7A100T).
  • Black-and-white share cards and SEO pages generated for all 27 lessons (EN + RU).
  • The course PR carries a blog post: EN body + RU ruBody.
  • Lessons that need a spec that does not exist yet are listed as sub-tasks (spec first in gHashTag/t27, then copied here).

Blocked by: #1477 (browser test runner) for every lesson whose spec uses calls, locals or struct fields in tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions