Sau khi đã nắm vững các lỗi phổ biến và quy trình thiết kế cơ bản, đây là lúc bạn thực sự bắt tay vào thiết kế phần cứng với các ví dụ thực tế. Bài viết này sẽ hướng dẫn bạn thiết kế ba module thường gặp trong FPGA: bộ đếm, truyền UART đơn giản, và cách tái sử dụng các IP có sẵn.
I. Thiết kế bộ đếm (counter)
Mục tiêu:
- Tạo bộ đếm 8-bit tăng dần mỗi chu kỳ clock
- Có ngõ vào reset và enable
Code Verilog:
module counter( input wire clk, input wire rst, input wire en, output reg [7:0] count
); always @(posedge clk or posedge rst) begin if (rst) count <= 0; else if (en) count <= count + 1; end
endmodule
Kiểm thử:
- Tạo testbench đơn giản bật
en
sau vài chu kỳ - Quan sát waveform để xác nhận hoạt động
II. UART truyền đơn giản (TX)
UART là giao thức truyền nối tiếp đơn giản, phổ biến khi debug hoặc kết nối vi điều khiển. Bạn sẽ thiết kế phần truyền UART với tốc độ cố định.
Tham số:
- Clock 50 MHz
- Baud rate 9600 → cần chia clock để gửi từng bit
Ý tưởng thiết kế:
- Dùng bộ chia clock để tạo tín hiệu
baud_tick
(mỗi 5208 chu kỳ với 50 MHz → 9600 Hz) - Xây dựng state machine với các trạng thái:
IDLE → START → DATA[0→7] → STOP
- Mỗi trạng thái duy trì đúng một
baud_tick
- Truyền 1 bit/
baud_tick
, theo thứ tự: bit start (0) → 8 bit dữ liệu (LSB trước) → bit stop (1)
Lưu ý:
- Với clock
50 MHz
vàbaud rate 9600
, số chu kỳ clock cho mỗi bit là:BAUD_DIV = 50_000_000 / 9600 ≈ 5208
- Bạn có thể dùng bộ đếm để sinh tín hiệu
baud_tick
định kỳ → kích hoạt chuyển trạng thái.
III. Tái sử dụng IP core – tiết kiệm công sức
Vì sao dùng IP?
- Viết từ đầu mất thời gian, dễ sai
- IP được tối ưu hóa, kiểm thử kỹ càng
Các IP phổ biến (theo thư viện của Xilinx):
- UART
- FIFO, RAM, PLL
- AXI Interconnect, DMA
Cách sử dụng trong Vivado:
- Mở IP Catalog → chọn IP → cấu hình → Ok → generate
- Kết nối trong block design hoặc RTL
IV. Tổng kết
Viết Verilog giỏi không chỉ là tránh lỗi – mà còn là khả năng biến yêu cầu thành thiết kế sạch, dễ kiểm thử và mở rộng. Việc luyện tập các module cơ bản như counter, UART, hay dùng IP là bước đệm tốt để bạn tự tin hơn trong những project lớn hơn.
Ở bài sau, ta sẽ cùng tìm hiểu về tối ưu hóa thiết kế FPGA – cách pipeline, parallelize và sử dụng tài nguyên hiệu quả.
Hẹn gặp lại!