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
Trang 1 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
Trang 2• 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
Trang 33.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
Trang 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=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1CE=1
3.6.1 Thiết kế mạch số tuần tự - FSM
Trang 5CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1CE=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
Count=0
CE=0CE=0
Count=1CE=1
3.6.1 Thiết kế mạch số tuần tự - FSM
Trang 6CE=0CE=0
Q1Q0=01CE=1
Q1Q0=10
CE=1
Q1Q0=11
CE=1CE=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
Trang 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
Trang 8• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00
CE=0CE=0
Q1Q0=01CE=1
Q1Q0=10
CE=1
Q1Q0=11
CE=1CE=1
Present state Next state
Trang 9• Xác định các hàm đầu vào flip-flop D
Present state Next state
D to be applied
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
3.6.1 Thiết kế mạch số tuần tự - FSM
Trang 10• Thực hiện:
0 0 1 1
0 1 0 1CE
D0
Q0Q’
3.6.1 Thiết kế mạch số tuần tự - FSM
Trang 11• Bước 6: Phân tích tín hiệu theo thời gian
D0
Q0Q’
ClkCE
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
3.6.1 Thiết kế mạch số tuần tự - FSM
Trang 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
Trang 14CE=0CE=0
Q1Q0=01Y=0CE=1
Q1Q0=10Y=0
CE=1
Q1Q0=11Y=1
CE=1CE=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
Trang 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
Trang 16• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00 Y=0
CE=0CE=0
Q1Q0=01 Y=0
CE=1
Q1Q0=10 Y=0
CE=1
Q1Q0=11 Y=1
CE=1CE=1
Present state Next state Outputs
3.6.1.Thiết kế mạch số tuần tự
FSM loại Moore
Trang 17• Xác định các hàm đầu vào flip-flop D
0 0 1 1
0 1 0 1CE
D to be applied
0 1 1 0
1 0 0 1CE
Trang 18• Thực hiện mạch:
0 0 1 1
0 1 0 1CE
D0
Q0Q’
Trang 19• Bước 6: Phân tích tín hiệu theo thời gian
D0
Q0Q’
Y
ClkCE
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
Y
3.6.1 Thiết kế mạch số tuần tự
FSM loại Moore
Trang 22CE=0/Y=0CE=0/Y=0
Q1Q0=01CE=1/Y=0
Q1Q0=10
CE=1/Y=0
Q1Q0=11
CE=1/Y=0CE=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
Trang 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
Trang 24• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00
CE=0/Y=0CE=0/Y=0
Present state Next state/Outputs
2.3 Thiết kế mạch số tuần tự
FSM loại Mealy
Trang 25• Xác định các hàm đầu vào flip-flop D
0 0 1 1
0 1 0 1CE
D to be applied
0 1 1 0
1 0 0 1CE
Q0
Q1
2.3 Thiết kế mạch số tuần tự
FSM loại Mealy
Trang 26• Thực hiện mạch:
0 0 1 1
0 1 0 1CE
D0
Q0Q’
0 0 0 0
0 0 1 0CE
Trang 27• Bước 6: Phân tích tín hiệu theo thời gian
ClkCE
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
D0
Q0Q’
Y
3.6.1 Thiết kế mạch số tuần tự
FSM loại Mealy
Trang 283.6.1 Thiết kế mạch số tuần tự
Mô hình FSM loại Moore
DClk
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
DClk
Q
DClk
Q
Clock Next
State S*
CurrentState S
Outputs O
Inputs I
Trang 293.6.1 Thiết kế mạch số tuần tự
Mô hình FSM loại Mealy
DClk
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
DClk
Q
DClk
Q
Clock Next State S* Current
State S
Outputs O
Inputs I
Trang 30• 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
Trang 313.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
Trang 323.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
Trang 333.6.2 Mô tả FSM trong VHDL
Logic
tổ hợp
Logic tuần tự
Output Input
Nx_state Pr_state
clock reset
- 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
Trang 343.6.2 Mô tả FSM trong VHDL
3.6.2.2 Kiểu thiết kế thứ nhất
-Đầ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;
Logic tuần tự
Nx_state Pr_state
clock reset
Trang 353.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
Nx_state Pr_state
Trang 363.6.2 Mô tả FSM trong VHDL
3.6.2.2 Kiểu thiết kế thứ nhất
Trang 373.6.2 Mô tả FSM trong VHDL
3.6.2.2 Kiểu thiết kế thứ nhất
Trang 38ARCHITECTURE state_machine OF counter IS
TYPE state IS (zero, one, two, three, four, five, six, seven, eight, nine);
SIGNAL pr_state, nx_state: state;
Trang 40• 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
Trang 41TYPE STATE IS ( STATE0, STATE1);
SIGNAL pr_state, nx_state : STATE;
CASE pr_state IS WHEN STATE0 =>
Trang 423.6.2 Mô tả FSM trong VHDL
3.6.2.3 Kiểu thiết kế thứ hai
-Đầ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
Trang 433.6.2 Mô tả FSM trong VHDL