# 🛠️ Capstone: bộ lọc thời gian thực trên FPGA bằng Verilog

By Everwise Intern

> This lesson is premium content. Sign in and purchase the course to view the full content.

## Mục tiêu

Capstone này khép lại phần triển khai nhúng: bạn chuyển bộ lọc đã thiết kế và đã lượng tử hóa ở bài trước thành một mô-đun Verilog tổng hợp được, rồi chứng minh nó đúng bằng testbench đối chiếu với mô hình tham chiếu (golden model) trong Python.

Sản phẩm nộp gồm ba tệp:

- `fir_filter.v`: mô-đun lọc, cấu hình bằng tham số `N_TAP`, `DATA_W`, `COEF_W`.
- `tb_fir_filter.v`: testbench tự kiểm tra (self-checking), nạp vector từ tệp `.hex` và so sánh với kỳ vọng.
- `gen_vectors.py`: sinh hệ số lượng tử hóa Q1.15 và vector kích thích, xuất cả kết quả tham chiếu.

## Đặc tả kỹ thuật của hệ thống

Chốt đặc tả trước khi viết dòng Verilog đầu tiên, vì mọi quyết định về độ rộng bit đều suy ra từ đây.

| Hạng mục | Giá trị |
| --- | --- |
| Loại lọc | FIR thông thấp, 31 tap, tuyến tính pha |
| Tần số lấy mẫu | 48 kHz |
| Dữ liệu vào | 16 bit có dấu, định dạng Q1.15 |
| Hệ số | 16 bit có dấu, Q1.15, đối xứng `h[n] = h[N-1-n]` |
| Giao diện | `clk`, `rst_n`, `valid_in`, `sample_in[15:0]` → `valid_out`, `sample_out[15:0]` |
| Thông lượng | 1 mẫu/chu kỳ, không có khoảng trống (no stall) |
| Độ trễ | Cố định, khai báo bằng tham số `LATENCY` |

Ba con số then chốt cần nhớ:

- Hệ số đối xứng nên chỉ cần **16 bộ nhân** thay vì 31: cộng các cặp mẫu trước, nhân sau. Phép cộng này cần thêm 1 bit dư.
- Tích hai số Q1.15 là Q2.30, phải **dịch phải 15 bit** trước khi bão hòa (saturation) về 16 bit.
- Bộ tích lũy (accumulator) phải rộng hơn 16 bit khoảng $\log_2 N$ bit dư; với 31 tap dùng 32 bit là an toàn.

Hệ số FIR tuyến tính pha thỏa _____, nhờ đó số bộ nhân giảm còn khoảng _____.
Tích hai toán hạng Q1.15 cho kết quả định dạng _____, nên cần dịch phải _____ bit.
Bộ tích lũy cần thêm khoảng _____ bit dư (guard bits) để tránh tràn khi cộng dồn.

## In this lesson

- Lộ trình thực hiện
- Tiêu chí nghiệm thu
- Bảng ôn tập nhanh
- Chốt capstone và bước tiếp theo


---

## Contents

Part of [🎛️ Thiết kế DSP trên FPGA: triển khai bộ lọc thời gian thực](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc.md)

- **📐 Thiết kế bộ lọc số từ đặc tả**
  - [🧭 Đặc tả thiết kế và ôn nhanh nền tảng DSP](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/dsp-spec-and-foundations-review.md)
  - [🪟 Thiết kế bộ lọc FIR: cửa sổ (window) và Parks-McClellan](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/fir-filter-design-window-parks-mcclellan.md) (sign-in required)
  - [🌀 Thiết kế bộ lọc IIR: biến đổi song tuyến tính (bilinear transform)](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/iir-filter-design-bilinear-transform.md)
  - [✅ Checkpoint: thiết kế bộ lọc số](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/checkpoint-filter-design.md)
- **⚙️ Mô phỏng và triển khai nhúng thời gian thực trên FPGA**
  - [🧪 Mô phỏng, kiểm thử với scipy.signal và lượng tử hóa fixed-point](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/simulation-and-fixed-point-quantization.md)
  - [🧱 Kiến trúc phần cứng: pipeline và song song tài nguyên](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/fpga-pipeline-and-resource-parallelism.md)
  - [🛠️ Capstone: bộ lọc thời gian thực trên FPGA bằng Verilog](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/capstone-realtime-filter-on-fpga.md) (premium content) — this lesson
  - [✅ Checkpoint: triển khai nhúng trên FPGA](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/checkpoint-fpga-implementation.md) (premium content)
- [Course cheatsheet](https://everwise.study/courses/thiet-ke-dsp-tren-fpga-trien-khai-bo-loc-thoi-gian-thuc/cheatsheet.md) (premium content)
