RTL (Register Transfer Level) là mức mô tả phần cứng dùng để diễn tả:
Dữ liệu được lưu trong các thanh ghi (register) và cách dữ liệu di chuyển giữa chúng theo từng chu kỳ clock
Nói đơn giản:
👉 RTL mô tả “mỗi xung clock thì dữ liệu đi từ đâu → qua logic gì → vào thanh ghi nào”
Ví dụ trực quan
Mô tả bằng lời (RTL thinking)
-
Có 2 thanh ghi
A,B -
Khi có clock:
-
C = A + B -
Kết quả được lưu vào thanh ghi
C
-
Đây chính là tư duy RTL.
RTL trong Verilog (ví dụ đơn giản)
✔ Ở đây:
-
Clà register -
A + Blà logic tổ hợp -
posedge clkthể hiện chuyển dữ liệu theo clock
👉 Đây là mô tả RTL chuẩn
RTL khác gì với các mức thiết kế khác?
| Mức thiết kế | Ý nghĩa | Đặc điểm |
|---|---|---|
| Behavioral | Mô tả hành vi | Viết giống phần mềm |
| RTL | Thanh ghi + luồng dữ liệu | Chuẩn nhất cho FPGA |
| Gate-level | Cổng logic AND/OR/NOT | Rất chi tiết |
| Transistor-level | MOSFET | Hiếm dùng |
📌 FPGA & ASIC chủ yếu làm việc ở mức RTL
RTL gồm những thành phần nào?
Một thiết kế RTL thường có:
1️⃣ Thanh ghi (Registers)
-
Flip-Flop (DFF)
-
Nhạy với clock
2️⃣ Logic tổ hợp (Combinational Logic)
-
+ - * & | ^ << >> -
IF, CASE (đúng cách)
3️⃣ Clock & Reset
-
Clock đồng bộ
-
Reset sync hoặc async
RTL trong FPGA & PYNQ-Z2
Với Zynq-7000 / PYNQ-Z2:
-
RTL dùng để:
-
Viết IP custom
-
Tăng tốc phần cứng (hardware acceleration)
-
-
RTL chạy ở PL (Programmable Logic)
-
PS (ARM) giao tiếp với RTL qua:
-
AXI Lite
-
AXI Stream
-
👉 Ví dụ:
-
ARM chạy Python/C
-
RTL xử lý:
-
FIR Filter
-
Image Processing
-
AI Accelerator
-
RTL khác gì so với viết code C/Python?
| C / Python | RTL |
|---|---|
| Chạy tuần tự | Chạy song song |
| 1 CPU core | Hàng nghìn logic |
| Dùng vòng lặp | Dùng phần cứng |
| Chạy theo thời gian | Chạy theo clock |
📌 RTL không phải là phần mềm
📌 RTL là mô tả phần cứng thật
Khi nào cần học RTL?
✔ Nên học RTL khi bạn:
-
Học FPGA (Verilog / VHDL)
-
Muốn tối ưu tốc độ, latency
-
Làm AI, DSP, Image Processing
-
Dùng Zynq / PYNQ-Z2
❌ Không cần RTL nếu:
-
Chỉ dùng MCU
-
Chỉ viết Python trên PYNQ (không đụng PL)

