45
3.1. Giới thiệu VHDL 3.2. Cấu trúc mã lệnh 3.3. Các kiểu dữ liệu 3.4. Các phép toán và thuộc tính 3.5. Code song song/Code tuần tự 3.6. Máy trạng thái hữu hạn FSM CHƯƠNG 3 NGÔN NGỮ MÔ TẢ PHẦN CỨNG

3.6.VHDL_FSM

Embed Size (px)

Citation preview

Page 1: 3.6.VHDL_FSM

3.1. Giới thiệu VHDL

3.2. Cấu trúc mã lệnh

3.3. Các kiểu dữ liệu

3.4. Các phép toán và thuộc tính

3.5. Code song song/Code tuần tự

3.6. Máy trạng thái hữu hạn FSM

CHƯƠNG 3 NGÔN NGỮ MÔ TẢ PHẦN CỨNG

Page 2: 3.6.VHDL_FSM

• 3.6.1. Thiết kế mạch số tuần tự - FSM

• 3.6.2. Mô tả FSM trong VHDL

3.6. Máy trạng thái hữu hạn FSM3.6. Máy trạng thái hữu hạn FSM

Page 3: 3.6.VHDL_FSM

3

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

• Máy trạng thái hữu hạn Finite State Machine (FSM)

• FSM loại Moore (phụ thuộc vào trạng thái)

• FSM loại Mealy (phụ thuộc vào trạng thái + tín hiệu vào)

• Các bước thiết kế:Bước 1: Vẽ sơ đồ trạng tháiBước 2: Tối thiểu hoá số lượng các trạng tháiBước 3: Mã hoá trạng tháiBước 4: Lựa chọn flip-flopBước 5: Thực hiện mạch logic tổ hợpBước 6: Phân tích tín hiệu theo thời gian

Page 4: 3.6.VHDL_FSM

4

• Ví dụ: Thiết kế một bộ đếm 4. Bộ đếm sẽ đếm khi có tín hiệu CE=1 (Count Enable) và ngừng đếm khi CE= 0.

• Bước 1: Vẽ sơ đồ trạng thái FSM

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 5: 3.6.VHDL_FSM

5

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Chỉ chuyển trạng thái tại sườn lên của xung nhịpTại sườn lên của xung nhịp, chỉ được phép 1 điều kiện chuyển trạng thái xảy ra

1. Ta đang ở trạng thái “Count=0”

2. CE = 0: đợi ở chân của sườn lên của xung nhịp3. CE=1: đợi ở chân của 1 sườn lên khác nhưng chưa đếm4. Sườn lên của xung nhịp: chuyển sang trạng thái “Count=1”, CE vẫn =15. CE = 0: đợi ở chân của 1 sườn lên khác

6. Sườn lên của xung nhịp: chyển sang “Count=1”, với CE=0

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0CE=0

Count=1CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 6: 3.6.VHDL_FSM

6

Q1Q0=00

CE=0 CE=0

CE=0CE=0

Q1Q0=01CE=1

Q1Q0=10

CE=1

Q1Q0=11

CE=1

CE=1

• Bước 2: Tối thiểu hoá số trạng thái

• Bước 3: Mã hoá các trạng thái

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 7: 3.6.VHDL_FSM

7

• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn loại D

• Bước 5: Thực hiện mạch

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 8: 3.6.VHDL_FSM

8

• Chuyển FSM sang bảng trạng thái kế tiếp

Q1Q0=00

CE=0 CE=0

CE=0CE=0

Q1Q0=01CE=1

Q1Q0=10

CE=1

Q1Q0=11

CE=1

CE=1

Present state Next state

Q1Q0 Q1nQ0n CE=0 CE=1

00 00 01

01 01 10 10 10 11

11 11 00

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 9: 3.6.VHDL_FSM

9

• Xác định các hàm đầu vào flip-flop DPresent state Next state

Q1Q0 Q1nQ0n

CE=0 CE=100 00 0101 01 1010 10 1111 11 00

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1Q Q(next) D

0 0 00 1 1

1 0 0

1 1 1

Excitation tablefor D flip-flop

D to be appliedis identical to Qn

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 10: 3.6.VHDL_FSM

10

• Thực hiện:

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 11: 3.6.VHDL_FSM

11

• Bước 6: Phân tích tín hiệu theo thời gianCE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Clk

CE

Q1

Q0

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM

Page 12: 3.6.VHDL_FSM

12

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

• Ví dụ: Thiết kế bộ đếm 4, đếm đến 3 thì báo

• Bước 1: Vẽ sơ đồ trạng thái FSM:

Count=0Y=0

CE=0 CE=0

CE=0CE=0

Count=1Y=0

CE=1

Count=2Y=0

CE=1

Count=3Y=1

CE=1

CE=1

Page 13: 3.6.VHDL_FSM

13

• Đặc điểm:Tín hiệu đầu ra được xác định tại mỗi trạng tháiTín hiệu ra chỉ phụ thuộc vào trạng thái hiện tại mà không

phụ thuộc vào tín hiệu vàoDo đó, giá trị tín hiệu ra được ghi ở bên trong vòng tròn biểu

diễn trạng thái

3.6.1 Thiết kế mạch số tuần tự3.6.1 Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 14: 3.6.VHDL_FSM

14

Q1Q0=00Y=0

CE=0 CE=0

CE=0CE=0

Q1Q0=01Y=0

CE=1

Q1Q0=10Y=0

CE=1

Q1Q0=11Y=1

CE=1

CE=1

• Bước 2: Tối thiểu hoá số lượng trạng thái

• Bước 3: Mã hoá trạng thái

2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 15: 3.6.VHDL_FSM

15

• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn loại D

• Bước 5: Thực hiện mạch

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 16: 3.6.VHDL_FSM

16

• Chuyển FSM sang bảng trạng thái kế tiếp

Q1Q0=00Y=0

CE=0 CE=0

CE=0CE=0

Q1Q0=01Y=0

CE=1

Q1Q0=10Y=0

CE=1

Q1Q0=11Y=1

CE=1

CE=1

Present state Next state Outputs

Q1Q0 Q1nQ0n YCE=0 CE=1

00 00 01 001 01 10 010 10 11 011 11 00 1

Y chỉ phụ thuộc trạng thái hiện tại, không phụ

thuộc vào tín hiệu vào

3.6.1.Thiết kế mạch số tuần tự3.6.1.Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 17: 3.6.VHDL_FSM

17

• Xác định các hàm đầu vào flip-flop D

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1

Q Q(next) D

0 0 00 1 1

1 0 0

1 1 1

Excitation tablefor D flip-flop

D to be appliedis identical to Qn

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

Present state Next state Outputs

Q1Q0 Q1nQ0n Y

CE=0 CE=1

00 00 01 0

01 01 10 010 10 11 0

11 11 00 1

0 0

0 1

Y

Q1

Q0

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 18: 3.6.VHDL_FSM

18

• Thực hiện mạch:

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

0 0

0 1

Y

Q1

Q0

Y

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 19: 3.6.VHDL_FSM

19

• Bước 6: Phân tích tín hiệu theo thời gianCE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

Clk

CEQ1

Q0

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore

Page 20: 3.6.VHDL_FSM

20

3.6.1.Thiết kế mạch số tuần tự3.6.1.Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

• Ví dụ: Thiết kế bộ đếm 4, nếu tín hiệu đếm CE=1 và giá trị đếm =3 thì tín hiệu ra Y=1

• Bươc 1: Vẽ sơ đồ trạng thái FSM:

Count=0

CE=0/Y=0 CE=0/Y=0

CE=0/Y=0CE=0/Y=0

Count=1CE=1/Y=0

Count=2

CE=1/Y=0

Count=3

CE=1/Y=0

CE=1/Y=1

Page 21: 3.6.VHDL_FSM

21

• Đặc điểm: Tín hiệu ra được xác định cho mỗi trạng thái và các tín hiệu

vào tại trạng thái đó Tín hiệu ra phụ thuộc vào trạng thái đầu hiện tại và các giá

trị đầu vào tại trạng thái đó Do đó giá trị tín hiệu ra được ghi tại mũi tên chuyển trạng

thái

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 22: 3.6.VHDL_FSM

22

Q1Q0=00

CE=0/Y=0 CE=0/Y=0

CE=0/Y=0CE=0/Y=0

Q1Q0=01CE=1/Y=0

Q1Q0=10

CE=1/Y=0

Q1Q0=11

CE=1/Y=0

CE=1/Y=1

• Bước 2: Tối thiểu hoá số lượng trạng thái

• Bước 3: Mã hoá trạng thái

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 23: 3.6.VHDL_FSM

23

• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn loại D

• Bước 5: Thực hiện mạch

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 24: 3.6.VHDL_FSM

24

• Chuyển FSM sang bảng trạng thái kế tiếp

Q1Q0=00

CE=0/Y=0 CE=0/Y=0

CE=0/Y=0CE=0/Y=0

Q1Q0=01CE=1/Y=0

Q1Q0=10

CE=1/Y=0

Q1Q0=11

CE=1/Y=0

CE=1/Y=1

Present state Next state/Outputs

Q1Q0 Q1nQ0n/YCE=0 CE=1

00 00/0 01/001 01/0 10/010 10/0 11/011 11/0 00/1

Y phụ thuộc vào trạng thái hiện tại, và phụ

thuộc vào cả tín hiệu vào

2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 25: 3.6.VHDL_FSM

25

• Xác định các hàm đầu vào flip-flop D

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1

Q Q(next) D

0 0 00 1 1

1 0 0

1 1 1

Excitation tablefor D flip-flop

D to be appliedis identical to Qn

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

Present state Next state/Outputs

Q1Q0 Q1nQ0n/YCE=0 CE=1

00 00/0 01/001 01/0 10/010 10/0 11/011 11/0 00/1

0 0 0 0

0 0 1 0CE

Y

Q0

Q1

2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 26: 3.6.VHDL_FSM

26

• Thực hiện mạch:

0 0 1 1

0 1 0 1CE

Q1n=D1

Q0

Q1

0 1 1 0

1 0 0 1CE

Q0n=D0

Q0

Q1

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

0 0 0 0

0 0 1 0CE

Y

Q0

Q1

Y

2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 27: 3.6.VHDL_FSM

27

• Bước 6: Phân tích tín hiệu theo thời gian

Clk

CEQ1

Q0

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy

Page 28: 3.6.VHDL_FSM

28

3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựMô hình FSM loại MooreMô hình FSM loại Moore

D

Clk

Q

S*=F(S,I)

Mạch logic tổ hợp

cho trạng thái kế

tiếp

O=H(S)

Mạch logic tổ hợp cho tín hiệu ra

D

Clk

Q

D

Clk

Q

Clock Next State S*

CurrentState S

Outputs O

Inputs I

Page 29: 3.6.VHDL_FSM

29

3.6.1. Thiết kế mạch số tuần tự 3.6.1. Thiết kế mạch số tuần tự Mô hình FSM loại MealyMô hình FSM loại Mealy

D

Clk

Q

S*=F(S,I)

Mạch logic tổ hợp

cho trạng thái kế

tiếp

O=H(S,I)

Mạch logic tổ hợp cho tín hiệu ra

D

Clk

Q

D

Clk

Q

Clock Next State S* CurrentState S

Outputs O

Inputs I

Page 30: 3.6.VHDL_FSM

• 3.6.1. Thiết kế mạch số tuần tự - FSM

• 3.6.2. Mô tả FSM trong VHDLGiới thiệuKiểu thiết kế thứ nhấtKiểu thiết kế thứ hai

3.6. Máy trạng thái hữu hạn FSM3.6. Máy trạng thái hữu hạn FSM

Page 31: 3.6.VHDL_FSM

3.6.1. Thiết kế mạch số tuần tự - FSM

3.6.2. Mô tả FSM trong VHDL

3.6.2.1. Giới thiệu

3.6.2.2. Kiểu thiết kế thứ nhất

3.6.2.3. Kiểu thiết kế thứ hai

3.6. Máy trạng thái hữu hạn FSM3.6. Máy trạng thái hữu hạn FSM

Page 32: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.1. Giới thiệuFSM gồm 2 phần

Phần mạch tổ hợp

Có 2 đầu vào: Pr_state , Input

Và 2 đầu ra: Nx_state, Output

Phần mạch tuần tự

Có 3 đầu vào: Nx_state, clock, reset

Và 1 đầu ra: Pr_state

Chứa các trigger

Logic tổ hợp

Logic tuần tự

OutputInput

Nx_statePr_state

clock

reset

Page 33: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

Logic tổ hợp

Logic tuần tự

OutputInput

Nx_statePr_state

clock

reset

3.6.2.1. Giới thiệu

Phần mạch tổ hợp: Thường không

dùng process

Phần mạch tuần tự: Có một process

với danh sách nhạy chứa clock và reset

Hoạt động của mạch - Khi reset thì Pr_state trở về trạng

thái khởi tạo của hệ thống.

- Ngược lại, khi có clock khối tuần tự sẽ

lưu trữ trạng thái Nx_state và chuyển

tới đầu ra trạng thái Pr_state

Page 34: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.2. Kiểu thiết kế thứ nhất• Đặc điểm-Đầu ra của mạch không phụ thuộc vào clk-Thiết kế của hai phần tách rời nhau-Tất cả các trạng thái được khai báo rõ ràng sử dụng kiểu dữ liệu liệt kê

• Thiết kế phần mạch dãy: Sử dụng một process

PROCESS (reset, clock)BEGIN

IF (reset = ‘1’) THEN pre_state <= state0;ELSIF (clock’event AND clock =‘1’) THEN pre_state <= nx_state;END IF;

END PROCESS

Logic tuần tự

Nx_statePr_state

clock

reset

Page 35: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.2. Kiểu thiết kế thứ nhất•Thiết kế phần mạch tổ hợp: Có thể dùng các câu lệnh song song hoặc câu lệnh tuần tự theo mẫu sau

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 <=state1; ELSE… END IF; ….. END CASEEND PROCESS;

Logic tổ hợp

OutputInput

Nx_statePr_state

Page 36: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.2. Kiểu thiết kế thứ nhất

Page 37: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.2. Kiểu thiết kế thứ nhất

Page 38: 3.6.VHDL_FSM

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY counter IS

PORT ( clk,rst: IN STD_LOGIC;

count: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );

END counter;

ARCHITECTURE state_machine OF counter IS

TYPE state IS (zero, one, two, three, four, five, six, seven, eight, nine);

SIGNAL pr_state, nx_state: state;

BEGIN

-------------Phần mạch tuần tự bên dưới------------

PROCESS (rst, clk)

BEGIN

IF (rst = ‘1’) THEN

pr_state <= zero;

ELSIF (clk’EVENT AND clk = ‘1’) THEN

pr_state <= nx_state;

END IF;

END PROCESS;

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

Page 39: 3.6.VHDL_FSM

-------------Phần mạch tổ hợp bên trên------------

PROCESS (pr_state)

BEGIN

CASE pr_state IS

WHEN zero =>

count <= “0000”;

next_state <= one;

WHEN one =>

count <= “0001”;

next_state <= two;

WHEN two =>

count <= “0010”;

next_state <= three;

WHEN three =>

count <= “0011”;

next_state <= four;

WHEN four =>

count <= “0100”;

next_state <= five;

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

WHEN five =>

count <= “0101”;

next_state <= six;

WHEN six =>

count <= “0110”;

next_state <= seven;

WHEN seven =>

count <= “0111”;

next_state <= eight;

WHEN eight =>

count <= “1000”;

next_state <= nine;

WHEN nine =>

count <= “1001”;

next_state <= zero;

END state_machine;

Page 40: 3.6.VHDL_FSM

`

• Hệ có hai trạng thái là STATE0 và STATE1

• Đầu ra x = a khi hệ ở trạng thái STATE0

• Đầu ra x = b khi hệ ở trạng thái STATE1

• d = 0 hệ giữ nguyên trạng thái

• d = 1 hệ chuyển trạng thái

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

FSM

a

b

d

x

clk rst

x=a x=b

Page 41: 3.6.VHDL_FSM

ENTITY FSM2 IS PORT ( a,b,d : IN BIT;

rst, clk : IN STD_LOGIC;

x : OUT BIT );

END FSM2;

ARCHITECHTURE FSM OF FSM2 IS

TYPE STATE IS ( STATE0, STATE1);

SIGNAL pr_state, nx_state : STATE;

BEGIN

PROCESS(rst, clk)

BEGIN

IF (rst = ‘1’) THEN

pr_state = STATE0;

ELSIF (clk’event and clk =‘1’) THEN

pr_state <=nx_state;

END IF;

END PROCESS;

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

PROCESS (a,b,d,pr_state)

BEGIN

CASE pr_state IS

WHEN STATE0 =>

x <= a;

IF (d=‘1’) THEN nx_state <= STATE1;

ELSE nx_state <= STATE0;

END IF;

WHEN STATE1 =>

x <= b;

IF (d=‘1’) THEN nx_state <= STATE0;

ELSE nx_state <= STATE1;

END IF;

END CASE;

END PROCESS;

END FSM;

Page 42: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

3.6.2.3. Kiểu thiết kế thứ hai• Đặc điểm-Đầu ra của mạch phụ thuộc vào clk-Thiết kế của hai phần tách rời nhau-Tất cả các trạng thái được khai báo rõ ràng sử dụng kiểu dữ liệu liệt kê-Cần sử dụng thêm một số tín hiệu trung gian để tính toán giá trị ở đầu ra của mạch tổ hợp, nhưng chỉ gán giá trị này cho đầu ra của hệ khi có tín hiệu đồng hồ tích cực.

Page 43: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

Page 44: 3.6.VHDL_FSM

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

Page 45: 3.6.VHDL_FSM

`

• Thiết kế FSM như hình biết đầu ra chỉ thay đổi khi CLK tích cực

3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL

FSM

a

b

d

x

clk rst

x=a x=b