CHƯƠNG 3
NGÔN NGỮ MÔ TẢ PHẦN CỨNG
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
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.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
3
3.6.1. Thiết kế mạch số tuần tự - FSM
•
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
CE=0
CE=0
Count=0
CE=1
CE=1
CE=1
CE=0
Count=3
Count=2
CE=1
4
Count=1
CE=0
3.6.1. Thiết kế mạch số tuần tự - FSM
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
CE=0
CE=0
Count=0
CE=1
CE=1
CE=1
CE=0
Count=1
Count=3
Count=2
CE=1
5
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
CE=0
3.6.1. Thiết kế mạch số tuần tự - FSM
•
Bước 2: Tối thiểu hoá số trạng thái
•
Bước 3: Mã hoá các trạng thái
CE=0
CE=0
Q1Q0=00
CE=1
CE=1
CE=1
CE=0
Q1Q0=11
Q1Q0=10
CE=1
6
Q1Q0=01
CE=0
3.6.1. Thiết kế mạch số tuần tự - FSM
•
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
7
3.6.1. Thiết kế mạch số tuần tự - FSM
•
Chuyển FSM sang bảng trạng thái kế tiếp
CE=0
CE=0
Q1Q0=00
CE=1
CE=1
CE=1
CE=0
Q1Q0=11
Q1Q0=10
CE=1
8
Q1Q0=01
CE=0
3.6.1. Thiết kế mạch số tuần tự - FSM
•
Xác định các hàm đầu vào flip-flop D
Present state
Q1Q0
Next state
Q 1nQ 0n
CE=0
CE=1
00
01
01
10
10
11
11
00
00
01
10
11
Excitation table
for D flip-flop
Q
0
0
1
1
9
Q(next) D
0
1
0
1
0
1
0
1
⇒ D to be applied
is identical to Qn
Q0
Q1n=D1
CE
Q0
Q1
0
0
1
1
0
1
0
1
Q0n=D0
CE
Q1
0
1
1
0
1
0
0
1
3.6.1. Thiết kế mạch số tuần tự - FSM
•
Thực hiện:
Q0
Q1n=D1
CE
Q0
Q1
0
0
1
1
0
1
0
1
Q0n=D0
CE
Q1
0
1
1
0
1
0
0
1
CE Q1 Q0
Q1n
Q1
D1
Q’
Q0n
Q0
D0
Q’
10
3.6.1. Thiết kế mạch số tuần tự - FSM
•
Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
Q1n
Q1
D1
Q’
Q0n
Q0
D0
Q’
Clk
CE
Q1
Q0
11
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:
CE=0
CE=0
Count=0
Y=0
CE=1
CE=1
CE=1
CE=0
12
Count=3
Y=1
Count=1
Y=0
CE=1
Count=2
Y=0
CE=0
3.6.1 Thiết kế mạch số tuần tự
FSM loại Moore
•
Đặ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
13
2.3 Thiết kế mạch số tuần tự
FSM loại Moore
•
Bước 2: Tối thiểu hoá số lượng trạng thái
•
Bước 3: Mã hoá trạng thái
CE=0
CE=0
Q1Q0=00
Y=0
CE=1
CE=1
CE=1
CE=0
14
Q1Q0=11
Y=1
Q1Q0=01
Y=0
CE=1
Q1Q0=10
Y=0
CE=0
3.6.1. Thiết kế mạch số tuần tự
FSM loại Moore
•
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
15
3.6.1.Thiết kế mạch số tuần tự
FSM loại Moore
•
Chuyển FSM sang bảng trạng thái kế tiếp
CE=0
CE=0
Q1Q0=00
Y=0
CE=1
Q1Q0=01
Y=0
CE=1
CE=1
CE=0
Present state
Q1Q0
16
00
01
10
11
Q1Q0=11
Y=1
Next state
Q 1nQ 0n
CE=0
CE=1
00
01
01
10
10
11
11
00
CE=1
Q1Q0=10
Y=0
Outputs
Y
0
0
0
1
CE=0
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
•
Xác định các hàm đầu vào flip-flop D
Present state
Q1Q0
Next state
Q 1nQ 0n
CE=0
CE=1
00
01
01
10
10
11
11
00
00
01
10
11
Excitation table
for D flip-flop
Q
0
0
1
1
17
0
1
0
1
⇒ D to be applied
is identical to Qn
0
0
0
1
Q0
Q1n=D1
Q(next) D
0
1
0
1
Outputs
Y
CE
Q0
Q0n=D0
Q1
0
0
1
1
0
1
0
1
Y
Q1
Q0
0
0
0
1
CE
Q1
0
1
1
0
1
0
0
1
3.6.1. Thiết kế mạch số tuần tự
FSM loại Moore
•
Thực hiện mạch:
Q0
Q1n=D1
CE
Q0
Q1
0
0
1
1
0
1
0
1
Q0n=D0
CE
Q1
0
1
1
0
1
0
0
1
Y
Q1
Q0
0
0
0
1
CE Q1 Q0
Q1n
Q1
D1
Q’
Q0n
Q0
D0
Q’
18
Y
3.6.1. Thiết kế mạch số tuần tự
FSM loại Moore
•
Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
Q1n
Q1
D1
Q’
Q0n
Q0
D0
Q’
Clk
CE
Q1
Q0
19
Y
Y
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:
CE=0/Y=0
CE=0/Y=0
Count=0
CE=1/Y=0
CE=1/Y=0
CE=1/Y=1
CE=0/Y=0
Count=2 CE=0/Y=0
Count=3
CE=1/Y=0
20
Count=1
3.6.1. Thiết kế mạch số tuần tự
FSM loại Mealy
•
Đặ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
21
3.6.1. Thiết kế mạch số tuần tự
FSM loại Mealy
•
Bước 2: Tối thiểu hoá số lượng trạng thái
•
Bước 3: Mã hoá trạng thái
CE=0/Y=0
CE=0/Y=0
Q1Q0=00
CE=1/Y=0
CE=1/Y=0
CE=1/Y=1
CE=0/Y=0
Q1Q0=10 CE=0/Y=0
Q1Q0=11
CE=1/Y=0
22
Q1Q0=01
3.6.1. Thiết kế mạch số tuần tự
FSM loại Mealy
•
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
23
2.3 Thiết kế mạch số tuần tự
FSM loại Mealy
•
Chuyển FSM sang bảng trạng thái kế tiếp
CE=0/Y=0
CE=0/Y=0
Q1Q0=00
CE=1/Y=0
Q1Q0=01
CE=1/Y=0
CE=1/Y=1
CE=0/Y=0 Q1Q0=11
Q1Q0=10 CE=0/Y=0
CE=1/Y=0
Present state
Q1Q0
24
00
01
10
11
Next state/Outputs
Q 1nQ 0n/Y
CE=0
CE=1
00/0
01/0
01/0
10/0
10/0
11/0
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
•
Xác định các hàm đầu vào flip-flop D
Present state
Q1Q0
Next state/Outputs
Q 1n Q 0n/Y
CE=0
CE=1
00/0
01/0
01/0
10/0
10/0
11/0
11/0
00/1
Q0
00
01
10
11
Excitation table
for D flip-flop
Q
0
0
1
1
25
Q1n=D1
Q(next) D
0
1
0
1
0
1
0
1
⇒ D to be applied
is identical to Qn
CE
Q1
0
0
1
1
0
1 0
Q0
1
Y
CE
Q1
0
0
0
0
0
0
1
0
Q0
Q0n=D0
CE
Q1
0
1
1
0
1
0
0
1