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

Làm sao để mô tả FS...
 
Chia sẻ:
Notifications
Clear all

Làm sao để mô tả FSM dạng Moore bằng VHDL

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

Trong thiết kế số với VHDL, FSM Moore là dạng được khuyến nghị nhất cho FPGA vì:

  • Output ổn định, chỉ phụ thuộc trạng thái

  • Dễ mô phỏng, dễ debug

  • Dễ đạt timing khi synthesize

Bài viết này hướng dẫn bạn cách mô tả FSM Moore đúng chuẩn, kèm ví dụ VHDL hoàn chỉnh và các lưu ý quan trọng.


1. Ôn nhanh: FSM Moore là gì?

FSM Moore là máy trạng thái mà:

  • Output = f(State)

  • Không phụ thuộc trực tiếp vào input

👉 Output chỉ thay đổi khi state thay đổi (tức là theo clock).

Minh họa FSM Moore

https://media.geeksforgeeks.org/wp-content/uploads/1-43.jpg
https://fastbitlab.com/wp-content/uploads/2022/01/Figure-1.png

2. Cấu trúc chuẩn của FSM Moore trong VHDL

FSM Moore chuẩn FPGA luôn gồm 3 khối tách biệt:

  1. State register (mạch tuần tự)

  2. Next-state logic (mạch tổ hợp)

  3. Output logic (mạch tổ hợp, phụ thuộc state)

👉 Đây là best practice, rất nên tuân theo.


3. Ví dụ FSM Moore đơn giản (bật/tắt LED)

Yêu cầu

  • Nhấn nút btn:

    • Từ IDLEON

    • Từ ONIDLE

  • LED sáng khi ở trạng thái ON


4. Khai báo trạng thái (ENUM – rất khuyến nghị)

 
process(clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      state <= IDLE;        -- reset về trạng thái ban đầu
    else
      state <= next_state; -- cập nhật trạng thái
    end if;
  end if;
end process;

✅ Code rõ ràng
✅ Tool tự tối ưu encoding
✅ Tránh lỗi nhầm bit


5. Khối 1 – State Register (FSM + reset)

 

process(clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      state <= IDLE;        -- reset về trạng thái ban đầu
    else
      state <= next_state; -- cập nhật trạng thái
    end if;
  end if;
end process;

📌 Lưu ý:

  • Reset đồng bộ (khuyến nghị)

  • Chỉ cập nhật state, không xử lý logic khác


6. Khối 2 – Next State Logic (tổ hợp)

process(state, btn)
begin
  -- mặc định giữ nguyên trạng thái
  next_state <= state;

  case state is
    when IDLE =>
      if btn = '1' then
        next_state <= ON;
      end if;

    when ON =>
      if btn = '1' then
        next_state <= IDLE;
      end if;

  end case;
end process;

📌 Rất quan trọng:

  • Luôn gán giá trị mặc định

  • Tránh latch ngoài ý muốn


7. Khối 3 – Output Logic (Moore FSM)

 
process(state)
begin
  case state is
    when IDLE =>
      led <= '0';

    when ON =>
      led <= '1';
  end case;
end process;

👉 Output chỉ phụ thuộc state → đúng bản chất Moore FSM.


8. Ghép lại: FSM Moore hoàn chỉnh bằng VHDL

 
library ieee;
use ieee.std_logic_1164.all;

entity fsm_moore is
  port (
    clk : in  std_logic;
    rst : in  std_logic;
    btn : in  std_logic;
    led : out std_logic
  );
end entity;

architecture rtl of fsm_moore is
  type state_t is (IDLE, ON);
  signal state, next_state : state_t;
begin

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

  -- 2. Next-state logic
  process(state, btn)
  begin
    next_state <= state;

    case state is
      when IDLE =>
        if btn = '1' then
          next_state <= ON;
        end if;

      when ON =>
        if btn = '1' then
          next_state <= IDLE;
        end if;
    end case;
  end process;

  -- 3. Output logic (Moore)
  process(state)
  begin
    case state is
      when IDLE =>
        led <= '0';
      when ON =>
        led <= '1';
    end case;
  end process;

end architecture;

9. Những lỗi thường gặp khi mô tả FSM Moore

❌ Output phụ thuộc input → thành Mealy FSM
❌ Không gán next_state mặc định → tạo latch
❌ Gộp cả FSM + output + logic vào 1 process → khó debug
❌ Reset không đưa FSM về state xác định


10. Checklist FSM Moore chuẩn VHDL

  • State dùng enum

  • Có state reset rõ ràng

  • 3 process tách biệt

  • Output chỉ phụ thuộc state

  • Không latch

  • Mô phỏng trước khi synthesize


11. Khi nào nên dùng FSM Moore?

  • Điều khiển LED, relay, LCD

  • FSM tổng quát trong FPGA

  • Người mới học VHDL

  • Hệ thống cần output ổn định

👉 90% FSM trong FPGA có thể dùng Moore FSM.


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

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