98710374-3-6-VHDL-FSM

Preview:

Citation preview

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

3

3.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ái

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

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

Bước 4: Lựa chọn flip-flop

Bước 5: Thực hiện mạch logic tổ hợp

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

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=0 CE=0

Count=1

CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

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

5

Count=0

CE=0 CE=0

CE=0 CE=0

Count=1

CE=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ịp

Tạ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ịp

3. CE=1: đợi ở chân của 1 sườn lên khác nhưng chưa đếm

4. Sườn lên của xung nhịp: chuyển sang trạng thái “Count=1”, CE vẫn =1

5. 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=0 CE=0

Count=1

CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0 CE=0

Count=1

CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0 CE=0

Count=1

CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

Count=0

CE=0 CE=0

CE=0 CE=0

Count=1

CE=1

Count=2

CE=1

Count=3

CE=1

CE=1

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

6

Q1Q

0=00

CE=0 CE=0

CE=0 CE=0

Q1Q

0=01

CE=1

Q1Q

0=10

CE=1

Q1Q

0=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ự - 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ự - FSM

8

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

Q1Q

0=00

CE=0 CE=0

CE=0 CE=0

Q1Q

0=01

CE=1

Q1Q

0=10

CE=1

Q1Q

0=11

CE=1

CE=1

Present state Next state

Q1Q

0 Q

1nQ

0n

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ự - FSM

9

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

Q1Q

0Q

1nQ

0n

CE=0 CE=1

00 00 01

01 01 10

10 10 11

11 11 00

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

Q Q(next) D

0 0 0

0 1 1

1 0 0

1 1 1

Excitation table

for D flip-flop

D to be applied

is identical to Qn

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

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

10

• Thực hiện:

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

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

11

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

1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Clk

CE

Q1

Q0

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

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

12

3.6.1. Thiết kế mạch số tuần tự FSM 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=0

Y=0

CE=0 CE=0

CE=0 CE=0

Count=1

Y=0

CE=1

Count=2

Y=0

CE=1

Count=3

Y=1

CE=1

CE=1

13

• Đặc điểm:

Tín hiệu đầu ra được xác định tại mỗi trạng thái

Tí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ào

Do đó, 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ự

FSM loại Moore

14

Q1Q

0=00

Y=0

CE=0 CE=0

CE=0 CE=0

Q1Q

0=01

Y=0

CE=1

Q1Q

0=10

Y=0

CE=1

Q1Q

0=11

Y=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ự

FSM loại Moore

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ự

FSM loại Moore

16

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

Q1Q

0=00

Y=0

CE=0 CE=0

CE=0 CE=0

Q1Q

0=01

Y=0

CE=1

Q1Q

0=10

Y=0

CE=1

Q1Q

0=11

Y=1

CE=1

CE=1

Present state Next state Outputs

Q1Q

0Q

1nQ

0nY

CE=0 CE=1

00 00 01 0

01 01 10 0

10 10 11 0

11 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ự

FSM loại Moore

17

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

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

Q Q(next) D

0 0 0

0 1 1

1 0 0

1 1 1

Excitation table

for D flip-flop

D to be applied

is identical to Qn

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

Present state Next state Outputs

Q1Q

0Q

1nQ

0nY

CE=0 CE=1

00 00 01 0

01 01 10 0

10 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ự

FSM loại Moore

18

• Thực hiện mạch:

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

CE Q1 Q

0

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ự

FSM loại Moore

19

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

1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

Clk

CE

Q1

Q0

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

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

FSM loại Moore

20

3.6.1.Thiết kế mạch số tuần tự FSM 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=0 CE=0/Y=0

Count=1

CE=1/Y=0

Count=2

CE=1/Y=0

Count=3

CE=1/Y=0

CE=1/Y=1

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ự

FSM loại Mealy

22

Q1Q

0=00

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

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

Q1Q

0=01

CE=1/Y=0

Q1Q

0=10

CE=1/Y=0

Q1Q

0=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ự

FSM loại Mealy

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ự

FSM loại Mealy

24

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

Q

1Q

0=00

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

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

Q1Q

0=01

CE=1/Y=0

Q1Q

0=10

CE=1/Y=0

Q1Q

0=11

CE=1/Y=0

CE=1/Y=1

Present state Next state/Outputs

Q1Q

0Q

1nQ

0n/Y

CE=0 CE=1

00 00/0 01/0

01 01/0 10/0

10 10/0 11/0

11 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ự

FSM loại Mealy

25

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

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

Q Q(next) D

0 0 0

0 1 1

1 0 0

1 1 1

Excitation table

for D flip-flop

D to be applied

is identical to Qn

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

Present state Next state/Outputs

Q1Q

0Q

1nQ

0n/Y

CE=0 CE=1

00 00/0 01/0

01 01/0 10/0

10 10/0 11/0

11 11/0 00/1

0 0 0 0

0 0 1 0 CE

Y

Q0

Q1

2.3 Thiết kế mạch số tuần tự

FSM loại Mealy

26

• Thực hiện mạch:

0 0 1 1

0 1 0 1 CE

Q1n

=D1

Q0

Q1

0 1 1 0

1 0 0 1 CE

Q0n

=D0

Q0

Q1

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

0 0 0 0

0 0 1 0 CE

Y

Q0

Q1

Y

2.3 Thiết kế mạch số tuần tự

FSM loại Mealy

27

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

Clk

CE

Q1

Q0

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

CE Q1 Q

0

Q1n

Q0n

D1

Q1

Q’

D0

Q0

Q’

Y

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

FSM loại Mealy

28

3.6.1. Thiết kế mạch số tuần tự Mô 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*

Current

State S

Outputs

O

Inputs I

29

3.6.1. Thiết kế mạch số tuần tự Mô 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* Current

State S

Outputs

O

Inputs I

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

• 3.6.2. Mô tả FSM trong VHDL

Giới thiệu

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

Kiểu thiết kế thứ hai

3.6. Máy trạng thái hữu hạn 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 FSM

3.6.2. Mô tả FSM trong VHDL

3.6.2.1. Giới thiệu

FSM 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ự

Output Input

Nx_state Pr_state

clock

reset

3.6.2. Mô tả FSM trong VHDL

Logic

tổ hợp

Logic

tuần tự

Output Input

Nx_state Pr_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

3.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_state Pr_state

clock

reset

3.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 CASE

END PROCESS;

Logic

tổ hợp

Output Input

Nx_state Pr_state

3.6.2. Mô tả FSM trong VHDL

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

3.6.2. Mô tả FSM trong VHDL

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

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 VHDL

-------------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 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;

`

• 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 VHDL

FSM

a

b

d

x

clk rst

x=a x=b

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 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;

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

3.6.2. Mô tả FSM trong VHDL

3.6.2. Mô tả FSM trong VHDL

`

• 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 VHDL

FSM

a

b

d

x

clk rst

x=a x=b

Recommended