DIENTU.VN & DIENTUVIETNAM.VN Tập trung nghiên cứu và phát triển Semiconductor, từ thiết kế vi mạch đến ứng dụng thực tế.
Chuyên sâu Lập trình FPGA, triển khai thuật toán phần cứng tốc độ cao cho hệ thống nhúng và AI.
Giải pháp Camera tích hợp FPGA
Giải pháp camera tích hợp FPGA cho phép xử lý hình ảnh trực tiếp ở mức phần cứng, đáp ứng yêu cầu độ trễ thấp, tốc độ cao và độ ổn định cao so với xử lý bằng CPU/GPU truyền thống.
Hệ thống phù hợp cho các ứng dụng AI Vision, giám sát thông minh, công nghiệp, giao thông, với khả năng tùy biến pipeline xử lý ảnh, nén video và tăng tốc thuật toán theo yêu cầu thực tế.
1) Mô phỏng Verilog là gì?
Mô phỏng = chạy module bằng testbench trên PC để kiểm tra đúng/sai trước khi nạp FPGA.
Bạn sẽ xem waveform (dạng sóng), kiểm tra reset, timing, trạng thái…
Cần gì để mô phỏng?
-
File RTL:
dut.v(design under test) -
File testbench:
tb.v(tạo clock/reset/input và quan sát output)
Ví dụ testbench tối giản
✅ Tips nhanh:
-
Luôn có
timescale -
Clock tạo bằng
always #... -
Reset rõ ràng (đặc biệt cho sequential logic)
2) Synthesise (tổng hợp) là gì?
Synthesis = chuyển Verilog RTL thành netlist cổng logic + FF + LUT + BRAM… phù hợp FPGA.
Synthesis không “chạy thời gian” như simulation. Nó biến code thành phần cứng thật.
Code nào synthesize được?
✅ always @(posedge clk) (FF/Registers)
✅ always @(*) + gán đầy đủ (combinational)
✅ assign (logic tổ hợp)
❌ #delay, initial (thường chỉ dùng cho simulation, trừ vài FPGA hỗ trợ init FF nhưng không nên dựa vào)
❌ $display, $finish (system task chỉ cho mô phỏng)
3) Quy trình mô phỏng và synthesize trong Vivado (chuẩn)
A. Mô phỏng (Vivado Simulator)
-
Create Project
-
Add Sources → thêm
*.v(Design Sources) -
Add Simulation Sources → thêm
tb_*.v -
Flow Navigator → Run Simulation → Run Behavioral Simulation
-
Xem waveform:
-
Add signals (hoặc “Add to Wave”)
-
Run / Restart / Zoom
-
✅ Behavioral simulation: kiểm tra logic cơ bản (chưa có delay routing).
B. Tổng hợp + Implement
-
Flow Navigator → Run Synthesis
-
Xem:
-
Utilization (LUT/FF/BRAM)
-
Schematic (netlist)
-
-
Run Implementation
-
Generate Bitstream
Nếu bạn dùng board (PYNQ-Z2) thì còn bước thêm:
-
Constraints file
.xdc(gán chân LED, clock, button…)
4) “Checklist” lỗi hay gặp khi synthesize
(1) Latch ngoài ý muốn
Nguyên nhân: always @(*) nhưng không gán đủ nhánh.
Ví dụ sai:
Cách đúng:
(2) Reset không đúng kiểu
-
Nếu bạn dùng reset đồng bộ: đặt trong
posedge clk -
Nếu reset bất đồng bộ: dùng
or negedge rst_n
Ví dụ reset bất đồng bộ:
(3) Dùng “clock chia” làm clock thật
Trên FPGA, tốt nhất dùng clock enable hoặc MMCM/PLL, tránh tự tạo clock bằng logic (trừ khi bạn hiểu rõ clocking/routing).
5) Mẹo nhanh để mô phỏng đúng “như phần cứng”
-
Đảm bảo reset/khởi tạo rõ ràng (FF trong FPGA không phải lúc nào cũng giống “initial”).
-
Với input từ nút nhấn: mô phỏng cả debounce nếu cần.
-
Khi cần sát thực tế timing: chạy Post-Implementation Timing Simulation (nâng cao).
