Chương 8: Mỏy trạng thỏ
8.2. Thiết kế theo kiể u1 (thiết kế theo mụ hỡnh may moore).
Cú vài phương phỏp cú thể được hỡnh thành để thiết kế một FSM. Chỳng ta sẽ mụ tả chi tiết một vớ dụ mẫu mà mạch hoàn toàn được cấu trỳc và dễ dàng ỏp dụng. Trong đú phần mạch dóy của mỏy trạng thỏi sẽ tỏch biệt với phần mạch tổ hợpcủa nú (hỡnh vẽ trờn).
Tất cả cỏc trạng thỏi của mỏy luụn luụn được khai bỏo rừ ràng bằng cỏch sử dụng kiểu dữ liệu liệt kờ.
Thiết kế phần mạch dóy:
Trờn hỡnh trờn, cỏc flip-flop nằm ở phần mạch dóy. Cỏc đầu vào từ bờn ngoài của phần này là cỏc tớn hiệu clock và reset. Cỏc tớn hiệu này được nối với
cỏc Flip-flop. Một đầu vào khỏc (bờn trong) là trạng thỏi tiếp theo. Đầu ra duy nhất của phần này là trang thỏi hiện tại. Để xõy dựng cho phần mạch dóy này, ta cần sử dụng cấu trỳc PROCESS. Trong cấu trỳc của PROCESS chỳng ta co thể sẽ sử dụng cỏc cõu lệnh tuần tự như lệnh IF, WAIT, CASE, LOOP.
Khuụn mẫu thiết kế của phần mạch dóy sẽ như sau:
Mó chỉ ra ở đõy là rất đơn giản. Nú chỉ chứa một tớn hiệu reset đồng bộ. Tớn hiệu reset này sẽ xỏc định trạng thỏi khởi đầu của hệ thống, sau đú là lưu trữ đồng bộ trạng thỏi tiếp theo (tại sườn dương đụng hồ),và đưa ra đầu ra của phần mạch dóy trạng thỏi hiện tại.
Việc thiết kế cho phần mạch dóy này thỡ đơn giản vỡ nú là một chuẩn cơ bản, và số lượng cỏc thanh ghi là tối thiểu. Ở phần 7.5, chỳng ta biết rằng số lượng cỏc flip – flop sẽ tớnh dựa vào số bits cần thiết để mó hoỏ tất cả cỏc trạng thỏi của FSM. Bởi vậy nếu mẫu được mó hoỏ theo cỏch mặc định (mó hoỏ nhị phõn) thỡ, chỳng ta sẽ cần log2n Flip-flop, với n là số trạng thỏi.
Thiết kế phần mạch tổ hợp:
Ở hỡnh 1, thỡ phần mạch tổ hợp là đầy đủ, vỡ vậy mó của nú sẽ khụng cần thiết theo tuần tự. Tốt nhất, chỳng ta nờn sử dụng mó đồng thời. Song trong vớ dụ mẫu dưới đõy chỳng ta sẽ sử dụng mó tuần tự với cõu lệnh CASE đúng vai trũ trung tõm.
PROCESS (input, pr_state) BEGIN CASE pr_state IS WHEN state0 => IF (input = ...) THEN output <= <value>; nx_state <= state1; ELSE ... END IF; WHEN state1 => IF (input = ...) THEN output <= <value>; nx_state <= state2; ELSE ... END IF; WHEN state2 =>
PROCESS (reset, clock) BEGIN
IF reset = ‘1’ THEN
Trang_thai_hien_tai <= Trang_thai_0 ; ELSIF (clock ‘EVENT and clock = ‘’) THEN
Trang_thai_hien_tai <=
Trang_thai_tiep_theo; END IF ;
IF (input = ...) THEN output <= <value>; nx_state <= state2; ELSE ... END IF; ... END CASE; END PROCESS;
Đoạn mó ở đõy cũng rất đơn giản, và nú sẽ thực hiện 2 cụng việc chớnh: + Gỏn giỏ trị cho đầu ra.
+ Thiết lập trang thỏi tiếp theo.
Mẫu mỏy trạng thỏi cho kiểu thiết kế 1:
Dưới đõy là khuụn mẫu hoàn chỉnh về kiểu thiết kế 1:
LIBRARY ieee;
USE ieee.std_logic_1164.all;