Chương 8: Mỏy trạng thỏ
END IF; WHEN state2 =>
WHEN state2 => IF (input = ...) THEN output <= <value>; nx_state <= state3; ELSE ... END IF; ... END CASE; END PROCESS; END <arch_name>; Vớ dụ 8.1: Bộ đếm BCD
Một bộ đếm là một vớ dụ của mỏy Moore, đầu ra chỉ phụ thuộc vào kết quả của trạng thỏi hiện tại. Giống như một mạch thanh ghi và một mạch dóy đơn giản. Để thiết kế mạch này, chỳng ta cú thể dựng phương phỏp thụng thường như những phần mạch mạch tổ hợp, nhưng ở đõy ta sẽ dựng phương phỏp FSM.
Giả sử ta cần thiết kế bộ đếm modul 10. Như vậy chỳng ta sẽ cần cú một may cú 10 trang thỏi. Cỏc trạng thỏi ở đõy được gọi là zero, one,…,nine. Đồ hỡnh trạng thỏi của mỏy được cho như sau:
Hỡnh 8.2. Sơ đồ trạng thỏi của bộ đếm BCD
Mó VHDL cũng giống như khuụn mẫu của thiết kế mẫu 1. Trong đú: kiểu dữ liệu liệt kờ sẽ xuất hiện ở dũng 11 – 12, thiết kế của phần mạch dóy sẽ từ dũng 16 đến dong 23, thiết kế của phần mạch tổ hợp(mạch tổ hợp) sẽ xuất hiện từ dũng 25 – 29. Do cú 10 trang thỏi nờn số lượng cac thanh ghi bằng là [log210 ] = 4.
Mó thiết kế sẽ như sau:
---
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY counterBCD IS
PORT ( clk, rst: IN STD_LOGIC;
count: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END counterBCD;