Upload
hung-pham-duy
View
134
Download
2
Embed Size (px)
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