CỘNG ĐỒNG ĐIỆN TỬ VIỆT NAM – TẬP ĐOÀN ĐIỆN TỬ VIỆT NAM
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
148 Lượt xem
(@admin)
Bài viết: 194
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.


Robotics Việt Nam, Robotics, Robot AI, Robot Công Nghiệp, Robot Vệ Sinh Công Nghiệp, Robot Phục Vụ, Robot Logistics

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