CỘNG ĐỒNG VI MẠCH BÁN DẪN VIỆT NAM – CÔNG TY VSRD

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ế.

Cách xử lý reset đồ...
 
Chia sẻ:
Notifications
Clear all

Cách xử lý reset đồng bộ và không đồng bộ trong VHDL

1 Bài viết
1 Thành viên
0 Reactions
116 Lượt xem
(@admin)
Bài viết: 178
Thành Viên Admin
Topic starter
 

Trong thiết kế FPGA bằng VHDL, reset là phần rất quan trọng vì nó quyết định:

  • Trạng thái khởi động của hệ thống

  • Độ ổn định khi chạy thực tế

  • Khả năng synthesize  đạt timing

Bài viết này sẽ giúp bạn:

  • Hiểu rõ reset đồng bộ  reset không đồng bộ

  • Biết cách viết VHDL đúng chuẩn

  • Biết khi nào nên dùng loại nào trong FPGA


1. Reset là gì trong mạch số?

Reset là tín hiệu đưa mạch về trạng thái ban đầu xác định:

  • Thanh ghi = 0

  • FSM về state IDLE

  • Counter về giá trị ban đầu

👉 Trong FPGA, reset thường dùng cho:

  • Flip-Flop

  • Register

  • FSM

  • Datapath


2. Reset không đồng bộ (Asynchronous Reset)

Khái niệm

Reset không đồng bộ là reset không phụ thuộc clock:

  • Reset có hiệu lực ngay lập tức

  • Không cần đợi cạnh clock

Đặc điểm

  • Reset tác động tức thì

  • Hay dùng cho power-up reset

  • Dễ gây lỗi timing nếu nhả reset không đúng

Sơ đồ nguyên lý

https://i.sstatic.net/CeP1U.png
 

Cách viết reset không đồng bộ trong VHDL

 
process(clk, rst_n)
begin
  if rst_n = '0' then
    q <= (others => '0');
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;

📌 Lưu ý:

  • rst_n thường là active-low

  • Reset được kiểm tra trước clock

  • Phải khai báo reset trong sensitivity list


Ưu & nhược điểm

✅ Ưu điểm:

  • Reset nhanh, tức thì

  • Phù hợp reset khi bật nguồn

❌ Nhược điểm:

  • Dễ gây metastability khi nhả reset

  • Khó timing closure hơn

  • Không phù hợp hệ thống clock phức tạp


3. Reset đồng bộ (Synchronous Reset)

Khái niệm

Reset đồng bộ chỉ có hiệu lực tại cạnh clock:

  • Reset chỉ được lấy mẫu khi có clock

  • Giống một tín hiệu điều khiển bình thường

Đặc điểm

  • Reset ổn định, an toàn timing

  • Dễ kiểm soát trong hệ thống lớn

Sơ đồ nguyên lý

https://vlsiverify.com/wp-content/uploads/2022/12/synchronous-active-low-DFF.png
https://vlsiinterviewquestions.org/wp-content/uploads/2012/07/syn_rst_gltch.jpg

Cách viết reset đồng bộ trong VHDL

 
process(clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      q <= (others => '0');
    else
      q <= d;
    end if;
  end if;
end process;

📌 Lưu ý:

  • Reset không nằm trong sensitivity list

  • Reset được kiểm tra bên trong clock


Ưu & nhược điểm

✅ Ưu điểm:

  • Dễ đạt timing

  • Không lo glitch/reset sai pha

  • Khuyến nghị cho FSM & datapath

❌ Nhược điểm:

  • Reset chậm hơn (đợi clock)

  • Không dùng được khi clock chưa chạy


4. So sánh reset đồng bộ và không đồng bộ

Tiêu chí Reset không đồng bộ Reset đồng bộ
Phụ thuộc clock
Thời điểm tác động Ngay lập tức Theo clock
Độ an toàn timing ⭐⭐ ⭐⭐⭐⭐
Nguy cơ metastability Cao Thấp
Dễ synthesize Trung bình Dễ
Khuyến nghị FPGA Hạn chế Nên dùng

5. Khi nào nên dùng loại reset nào?

👉 Nên dùng reset đồng bộ khi:

  • Thiết kế FSM

  • Datapath phức tạp

  • Hệ thống có nhiều clock

  • Thiết kế chuẩn cho FPGA hiện đại

👉 Chỉ nên dùng reset không đồng bộ khi:

  • Reset nguồn (power-on reset)

  • Reset từ nút nhấn bên ngoài

  • Kết hợp với mạch đồng bộ reset release


6. Kỹ thuật chuẩn: Async assert – Sync deassert (RẤT QUAN TRỌNG)

Trong FPGA thực tế:

  • Assert reset: không đồng bộ (nhanh)

  • Deassert reset: đồng bộ theo clock

Ví dụ VHDL reset chuẩn FPGA

 
signal rst_sync : std_logic;

process(clk, rst_n)
begin
  if rst_n = '0' then
    rst_sync <= '1';
  elsif rising_edge(clk) then
    rst_sync <= '0';
  end if;
end process;

👉 Sau đó dùng rst_sync làm reset đồng bộ cho toàn hệ thống.


7. Reset trong FSM (ví dụ chuẩn)

 
process(clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      state <= IDLE;
    else
      state <= next_state;
    end if;
  end if;
end process;

✅ Dễ debug
✅ Dễ synthesize
✅ Dễ timing closure


8. Lỗi thường gặp khi xử lý reset trong VHDL

❌ Đặt reset sai sensitivity list
❌ Dùng reset không đồng bộ cho FSM lớn
❌ Nhả reset cùng lúc cho nhiều clock khác nhau
❌ Dựa vào giá trị khởi tạo (:=) thay vì reset thật


Chiến Thần IV Tạp Dịch

 
Đã đăng : 24/12/2025 16:34