Thiết kế và mô tả FSM trong VHDL
Trang 1Chào mừng thầy giáo và các bạn
Trang 2Bài thuyết trình điện tử số 2
Thiết kế và mô tả FSM Thiết kế và mô tả FSM
Bùi Văn Tuy n ề
Students :
Trang 3Sơ lược v ề
FSM
Thiết kế mạ ch số tuần
tự - FSM
Mô tả FSM trong VHD
phần mềm Xilinx
Trang 4Sơ lược về FSM
FSM ( Finite State Machine) : Máy trạng thái hữu hạn
FSM là một công nghệ mô hình hoá đặc biệt cho các mạch logic tuần tự
Đặc biệt những hệ thống có thao tác theo khuôn dạng tuần tự thì hoàn toàn có thể thiết kế bằng FSM
Ví dụ :
Mạch chuyển trạng thái, bộ đếm tuần tự hay bộ điều khiển tín hiệu đèn giao thông…vv…vv
Trang 5Thiết kế mạch số tuần tự - FSM
Cũng như các loại mạch khác , các bước thiết kế chung như sau :
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 6Thiết kế mạch số tuần tự - FSM
Xét 1 ví dụ đơn giản : 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 CE= 0
CE= 0
Trang 7Thiết kế mạch số tuần tự - FSM
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
CE= 1
Trang 10Q0n
D1 Q1 Q’
D0 Q0 Q’
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
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
D0 Q0 Q’
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
Thiết kế mạch số tuần tự - FSM
Trang 12Count= 0 Y= 0
Count= 3 Y= 1
Count= 2 Y= 0
CE= 1
CE= 1
CE= 1 CE= 1
CE= 0
CE= 0
CE= 0
CE= 0
Trang 13Thiế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
Q1Q0=01 Y=0
Q1Q0=00 Y=0
Q1Q0=11 Y=1
Q1Q0=10 Y=0
CE= 1
CE= 1
CE= 1 CE= 1
CE= 0
CE= 0
CE= 0
CE= 0
Trang 14Bướ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
Thiết kế mạch số tuần tự
FSM loại Moore
Trang 15 Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=01 Y=0
Q1Q0=00 Y=0
Q1Q0=11 Y=1
Q1Q0=10 Y=0
CE= 1
CE= 1
CE= 1 CE= 1
Trang 16 Xác định các hàm đầu vào flip-flop D
Trang 17Q0n
D1 Q1 Q’
D0 Q0 Q’
FSM loại Moore
Trang 18 Bước 6: Phân tích tín hiệu theo thời gian
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
Y
Clk CE Q1 Q0 Y
Q1n
Q0n
D1 Q1 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
Y
Thiết kế mạch số tuần tự
FSM loại Moore
Trang 19 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
Thiết kế mạch số tuần tự
FSM loại Mealy
Bước 1: Vẽ sơ đồ trạng thái FSM:
Count= 1 Count= 0
CE= 1/ Y= 0
CE= 1/Y=0
CE= 1/ Y= 0 CE= 1/Y= 1
CE= 0/ Y= 0
CE= 0/ Y=0
CE= 0/ Y= 0
CE= 0/ Y=0
Trang 20Thiế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
Q1Q0=01 Y=0
Q1Q0=00 Y=0
Q1Q0=11 Y=1
Q1Q0=10 Y=0
CE= 1/Y=o
CE= 1/Y=0
CE= 1/Y=0 CE= 1/Y=1
CE= 0/Y= 0
CE= 0/Y=0
CE= 0/Y=0
CE= 0/Y=0
Trang 21Thiế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
Trang 22Thiế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
Q1Q0=01 Y=0
Q1Q0=00 Y=0
Q1Q0=11 Y=1
Q1Q0=10 Y=0
CE= 1/Y=o
CE= 1/Y=0
CE= 1/Y=0 CE= 1/Y=1
Trang 23Present state Next state/Outputs
Trang 24Q0n
D1 Q1 Q’
D0 Q0 Q’
Y
Trang 25D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
D0 Q0 Q’
Trang 26Mô tả FSM trong VHDL
Giới thiệu
Kiểu thiết kế thứ nhất Kiểu thiết kế thứ hai
Trang 27input output
Pr_state Nx_state
clk Reset
FSM gồm 2 phần
Phần mạch tổ hợp:
2 đầu vào: input và Pr_state
2 đầu ra: output và Nx_state
Phần mạch tuần tự:
3 đầu vào: Nx_state , clk , Reset
1 đầu ra: Pr_state
Trang 28Mô tả FSM trong VHDL Nguyên lý hoạt động chung :
Logic tuần tự
Trang 29Mô tả FSM trong VHDL
Kiểu thiết kế thứ nhất
(Thiết kế theo otomat Moore)
Logic tuần tự
Pr_state Nx_state
Reset clk
Đặc điểm:
- Hai phần thiết kế tách biệt nhau
- Tất cả các trạng thái được khai báo theo kiểu liệt kê
Trang 30 Đoạn mã dưới đây thực hiện 2 công việc chính
-Gán giá trịcho đầu ra
-Thiết lập trang thái tiếp theo
Trang 31PORT ( input: IN <data_type>;
reset, clock: IN STD_LOGIC;
output: OUT <data_type>);
END <entity_name>;
-
ARCHITECTURE <arch_name> OF <entity_name> IS
TYPE state IS (state0, state1, state2, state3, );
SIGNAL pr_state, nx_state: state;
BEGIN CASE pr_state IS WHEN state0 =>
IF (input = ) THEN output <= <value>;
Trang 32Mô tả FSM trong VHDL
Ví dụ: Thiết kế bộ đếm 10
Phân tích :
Ở đây chúng ta sẽ có 10 trạng thái: Zero,One, Two……, Nine => Sẽ có 4 biến để mô tả
Các trạng thái sẽ chuyển lần lượt từ Zero Nine khi có tín hiệu Clk
Khi có tín hiệu Reset thì trạng thái lúc đó là Zero
Đồ hình mô tả bộ đếm:
Zero 0000
Nine 1001
One 0001
Two 0010
Six 0110
Four 0100
Five 0101
Three 0011
Seven 0111
Eight 1000
Reset
Trang 33Mô tả FSM trong VHDL Code như sau :
ARCHITECTURE state_machine OF Bodem10 IS
TYPE state IS (zero, one, two, three, four,
five, six, seven, eight, nine);
SIGNAL pr_state, nx_state: state;
Trang 35-Mô tả FSM trong VHDL
Kết quả mô phỏng :
Chương trình này bị lỗi trên hệ thống của em và em thử trên máy một số bạn cũng bị lỗi tương tự nên em không có kết quả, mong thầy thông cảm
Trang 36Mô tả FSM trong VHDL
Ví Dụ 2 : Mô tả máy chuyển trạng thái
FSM
a b
d
x
State A (x= a)
State B (x= b)
Hệ thống có 2 trạng thái : State A và State B
Khi d= 1 chuyển trang thái
d= 0 thì giữ nguyên trạng thái
Đầu ra x= a khi ở trạng thái A
x= b khi ở trạng thái B
Khi có tín hiệu reset thì đầu ra x= a
Chương trình hoàn chỉnh như sau
Trang 37TYPE state IS (stateA, stateB);
SIGNAL pr_state, nx_state: state;
x <= a;
IF (d='1') THEN nx_state <= stateB;
ELSE nx_state <= stateA;
END IF;
WHEN stateB =>
x <= b;
IF (d='1') THEN nx_state <= stateA;
ELSE nx_state <= stateB;
Trang 38-Mô tả FSM trong VHDL
Kết quả mô phỏng như sau :
Toàn bộ chương trình em chạy đều ra thế này mà không ra dạng sóng và không có hiển thị nút Play để tạo ra dạng sóng, cái này bọn em không hiểu mong thầy giải thích them ạ ?
Trang 39Mô tả FSM trong VHDL
Kiểu thiết kế thứ hai
(Thiết kế theo otomat Mealy)
Đặc điểm:
- Hai phần thiết kế tách biệt nhau
- Tất cả các trạng thái được khai báo theo kiểu liệt kê
Giống với thiết kế kiểu thứ nhất
Điểm khác biệt:
- Cần sử dụng thêm tín hiệu trung gian để tính toán giá trị ở đầu ra
Khuôn mẫu máy trạng thái được thiết kế theo kiểu thứ 2 như sau
Trang 40PORT (input: IN <data_type>;
reset, clock: IN STD_LOGIC;
output: OUT <data_type>);
END <ent_name>;
-ARCHITECTURE <arch_name> OF <ent_name> IS
TYPE states IS (state0, state1, state2, state3, );
SIGNAL pr_state, nx_state: states;
SIGNAL temp: <data_type>;
BEGIN
- Phan mach day:
PROCESS (reset, clock)
Trang 42Mô tả FSM trong VHDL
• Ta sẽ xét lại ví dụ “Mô tả máy chuyển trạng thái” ở trên
• Nhưng ở đây ta muốn đầu ra là đồng bộ nên ta sẽ thiết kế theo kiểu 2
FSM
a b
d
x
State A (x= a)
State B (x= b)
reset
d= 1
d= 1
Phần khai báo LIBRARY và ENTITY giống với thiết kế kiểu 1, chỉ khác là trong ARCHITECTURE có thêm tín
hiệu trung gian
Chương trình đầy đủ như sau:
Trang 43-Mô tả FSM trong VHDL
ARCHITECTURE VD_FSM2 OF VD_FSM2 IS
TYPE state IS (stateA, stateB);
SIGNAL pr_state, nx_state: state;
SIGNAL temp: BIT;
Trang 44-Mô tả FSM trong VHDL
Kết quả mô phỏng như sau :
Trang 45Mô tả FSM trong VHDL
Xét bộ phát hiện chuỗi:
Zero q= 0
One q= 0
Three q= 1
Two q= 0
- Đầu ra là 1 khi phát hiện chuỗi 111
- Đầu ra là 0 trong các trường hợp còn lại
- Có 4 trạng thái: Zero, One, Two, Three
+ Trạng thái 0 là trạng thái chờ số 1 đầu tiên
+Trạng thái 1 là trạng thái đã có 1 và chờ số 1 thứ 2
+Trạng thái 2 là trạng thái đã có 2 số 1 và chờ số 1 thứ 3
+Trạng thái 3 là trạng thái xuất hiện 3 số 1 : 111
Trang 46ARCHITECTURE state_machine OF Bo_doan_xau IS
TYPE state IS (zero, one, two, three);
SIGNAL pr_state, nx_state: state;
q <= '0';
IF (d='1') THEN nx_state <= one;
ELSE nx_state <= zero;
END IF;
WHEN one =>
q <= '0';
IF (d='1') THEN nx_state <= two;
ELSE nx_state <= zero;
END IF;
WHEN two =>
q <= '0';
IF (d='1') THEN nx_state <= three;
ELSE nx_state <= zero;
END IF;
WHEN three =>
q <= '1';
IF (d='0') THEN nx_state <= zero;
ELSE nx_state <= three;
END IF;
END CASE;
END PROCESS;
END state_machine;
Trang 47Mô tả FSM trong VHDL
Kết quả mô phỏng như sau :
Trang 48Còn một phần là Trải nghiệm mô tả FSM trong phần mềm Xilinx ISE, nhưng do thời gian gấp quá bọn em chưa làm được, bọn em sẽ hoàn thành sớm ạ