0

Bài 5: Thực chiến thiết kế FPGA – Bộ đếm, UART, và tái sử dụng IP

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ộtbaud_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 MHzbaud 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!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí