Upload
hieu-dinh
View
653
Download
0
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 FSM3.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ự - FSM3.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áiBước 2: Tối thiểu hoá số lượng các trạng tháiBước 3: Mã hoá trạng tháiBước 4: Lựa chọn flip-flopBước 5: Thực hiện mạch logic tổ hợpBướ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=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM
5
Count=0
CE=0 CE=0
CE=0CE=0
Count=1CE=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ịpTạ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ịp3. CE=1: đợi ở chân của 1 sườn lên khác nhưng chưa đếm4. Sườn lên của xung nhịp: chuyển sang trạng thái “Count=1”, CE vẫn =15. 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=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0 CE=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0 CE=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0 CE=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM
6
Q1Q0=00
CE=0 CE=0
CE=0CE=0
Q1Q0=01CE=1
Q1Q0=10
CE=1
Q1Q0=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ự - FSM3.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ự - FSM3.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
Q1Q0=00
CE=0 CE=0
CE=0CE=0
Q1Q0=01CE=1
Q1Q0=10
CE=1
Q1Q0=11
CE=1
CE=1
Present state Next state
Q1Q0 Q1nQ0n 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ự - FSM3.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 DPresent state Next state
Q1Q0 Q1nQ0n
CE=0 CE=100 00 0101 01 1010 10 1111 11 00
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1Q Q(next) D
0 0 00 1 1
1 0 0
1 1 1
Excitation tablefor D flip-flop
D to be appliedis identical to Qn
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
3.6.1. Thiết kế mạch số tuần tự - FSM3.6.1. Thiết kế mạch số tuần tự - FSM
10
• Thực hiện:
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
3.6.1. Thiết kế mạch số tuần tự - FSM3.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 gianCE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Clk
CE
Q1
Q0
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
3.6.1. Thiết kế mạch số tuần tự - FSM3.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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM 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=0Y=0
CE=0 CE=0
CE=0CE=0
Count=1Y=0
CE=1
Count=2Y=0
CE=1
Count=3Y=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áiTí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àoDo đó, 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ự3.6.1 Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
14
Q1Q0=00Y=0
CE=0 CE=0
CE=0CE=0
Q1Q0=01Y=0
CE=1
Q1Q0=10Y=0
CE=1
Q1Q0=11Y=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ự2.3 Thiết kế mạch số tuần tựFSM loại MooreFSM 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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
16
• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00Y=0
CE=0 CE=0
CE=0CE=0
Q1Q0=01Y=0
CE=1
Q1Q0=10Y=0
CE=1
Q1Q0=11Y=1
CE=1
CE=1
Present state Next state Outputs
Q1Q0 Q1nQ0n YCE=0 CE=1
00 00 01 001 01 10 010 10 11 011 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ự3.6.1.Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
17
• Xác định các hàm đầu vào flip-flop D
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1
Q Q(next) D
0 0 00 1 1
1 0 0
1 1 1
Excitation tablefor D flip-flop
D to be appliedis identical to Qn
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
Present state Next state Outputs
Q1Q0 Q1nQ0n Y
CE=0 CE=1
00 00 01 0
01 01 10 010 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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
18
• Thực hiện mạch:
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
CE Q1 Q0
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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
19
• Bước 6: Phân tích tín hiệu theo thời gianCE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
Clk
CEQ1
Q0
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MooreFSM loại Moore
20
3.6.1.Thiết kế mạch số tuần tự3.6.1.Thiết kế mạch số tuần tựFSM loại MealyFSM 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=0CE=0/Y=0
Count=1CE=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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
22
Q1Q0=00
CE=0/Y=0 CE=0/Y=0
CE=0/Y=0CE=0/Y=0
Q1Q0=01CE=1/Y=0
Q1Q0=10
CE=1/Y=0
Q1Q0=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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM 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ự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
24
• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00
CE=0/Y=0 CE=0/Y=0
CE=0/Y=0CE=0/Y=0
Q1Q0=01CE=1/Y=0
Q1Q0=10
CE=1/Y=0
Q1Q0=11
CE=1/Y=0
CE=1/Y=1
Present state Next state/Outputs
Q1Q0 Q1nQ0n/YCE=0 CE=1
00 00/0 01/001 01/0 10/010 10/0 11/011 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ự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
25
• Xác định các hàm đầu vào flip-flop D
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1
Q Q(next) D
0 0 00 1 1
1 0 0
1 1 1
Excitation tablefor D flip-flop
D to be appliedis identical to Qn
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
Present state Next state/Outputs
Q1Q0 Q1nQ0n/YCE=0 CE=1
00 00/0 01/001 01/0 10/010 10/0 11/011 11/0 00/1
0 0 0 0
0 0 1 0CE
Y
Q0
Q1
2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
26
• Thực hiện mạch:
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
0 0 0 0
0 0 1 0CE
Y
Q0
Q1
Y
2.3 Thiết kế mạch số tuần tự2.3 Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
27
• Bước 6: Phân tích tín hiệu theo thời gian
Clk
CEQ1
Q0
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
CE Q1 Q0
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựFSM loại MealyFSM loại Mealy
28
3.6.1. Thiết kế mạch số tuần tự3.6.1. Thiết kế mạch số tuần tựMô hình FSM loại MooreMô 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*
CurrentState S
Outputs O
Inputs I
29
3.6.1. Thiết kế mạch số tuần tự 3.6.1. Thiết kế mạch số tuần tự Mô hình FSM loại MealyMô 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* CurrentState 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 VHDLGiới thiệuKiểu thiết kế thứ nhấtKiểu thiết kế thứ hai
3.6. Máy trạng thái hữu hạn FSM3.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 FSM3.6. Máy trạng thái hữu hạn FSM
3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL
3.6.2.1. Giới thiệuFSM 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ự
OutputInput
Nx_statePr_state
clock
reset
3.6.2. Mô tả FSM trong VHDL3.6.2. Mô tả FSM trong VHDL
Logic tổ hợp
Logic tuần tự
OutputInput
Nx_statePr_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 VHDL3.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_statePr_state
clock
reset
3.6.2. Mô tả FSM trong VHDL3.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 CASEEND PROCESS;
Logic tổ hợp
OutputInput
Nx_statePr_state
3.6.2. Mô tả FSM trong VHDL3.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 VHDL3.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 VHDL3.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 VHDL3.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 VHDL3.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 VHDL3.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 VHDL3.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 VHDL3.6.2. Mô tả FSM trong VHDL
3.6.2. Mô tả FSM trong VHDL3.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 VHDL3.6.2. Mô tả FSM trong VHDL
FSM
a
b
d
x
clk rst
x=a x=b