Buoi 4-Sequential Logic Design and FSM With VHDL
Buoi 4-Sequential Logic Design and FSM With VHDL
Xuan-Tu Tran
Vietnam National University, Hanoi
Email: [email protected]
Outlines
1
VHDL examples
Comparator Example
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
2
Multiplexer Example
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY multiplexer IS
PORT (a, b : IN std_logic_vector; s : IN std_logic;
w : OUT std_logic_vector);
END ENTITY;
ARCHITECTURE expression OF multiplexer IS
BEGIN
w <= a WHEN s = '0' ELSE b;
END ARCHITECTURE expression;
Decoder Example
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY dcd2to4 IS
PORT (sel: IN std_logic_vector (1 DOWNTO 0);
y: OUT std_logic_vector (3 DOWNTO 0) );
END dcd2to4;
3
Adder Example
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY adder8 IS PORT (
a : IN std_logic_vector (7 DOWNTO 0);
b : IN std_logic_vector (7 DOWNTO 0);
ci : IN std_logic;
s : OUT std_logic_vector (7 DOWNTO 0);
co : OUT std_logic );
END ENTITY adder8;
--
ARCHITECTURE equation OF adder8 IS
SIGNAL mid : std_logic_vector (8 DOWNTO 0);
BEGIN
mid <= ('0'&a) + ('0'&b) + ci;
co <= mid (8);
s <= mid (7 DOWNTO 0);
END equation; Adder with Carry-in and Carry-out
ALU Example
4
ALU Example Using Adder
Bussing
ENTITY bussing IS
PORT ( Three-state Bussing
busin1: IN std_logic_vector (3 DOWNTO 0);
busin2: IN std_logic_vector (3 DOWNTO 0);
busin3: IN std_logic_vector (3 DOWNTO 0);
en1: IN std_logic;
en2: IN std_logic;
en3: IN std_logic;
busout: OUT std_logic_vector(3 DOWNTO 0) );
END bussing;
--
ARCHITECTURE structural OF bussing IS
BEGIN
busout <= busin1 WHEN en1 = '1' ELSE (OTHERS => 'Z');
busout <= busin2 WHEN en2 = '1' ELSE (OTHERS => 'Z');
busout <= busin3 WHEN en3 = '1' ELSE (OTHERS => 'Z');
END structural;
5
Basic Memory Elements at the Gate Level
Clocked D-latch
ENTITY latch IS
PORT (d, c: IN std_logic;
q, q_b : BUFFER std_logic);
END latch;
ARCHITECTURE structural OF latch IS
SIGNAL s, r : std_logic;
BEGIN
s <= c AND d AFTER 6 ns;
r <= c AND (NOT d) AFTER 6 ns;
q_b <= s NOR q AFTER 4 ns;
q <= r NOR q_b AFTER 4 ns;
END structural;
6
Memory elements using Procedural Statements
ENTITY latch1 IS
PORT (d, c: IN std_logic; q: OUT std_logic);
END latch1;
ARCHITECTURE behavioral OF latch1 IS
BEGIN
PROCESS (d, c)
BEGIN
IF c = '1' THEN
q <= d;
END IF;
END PROCESS;
END ARCHITECTURE behavioral;
Procedural Latch
A Positive-Edge D Flip-Flop
ENTITY DFF1 IS
PORT (d, clk: IN std_logic; q : OUT std_logic);
END DFF1;
--
ARCHITECTURE behavioral OF DFF1 IS
BEGIN
PROCESS (clk)
BEGIN
IF clk = '1' AND clk'EVENT THEN
q <= d;
END IF;
END PROCESS;
END ARCHITECTURE behavioral;
7
Synchronous Control
ENTITY DFF1sr IS
PORT (d, clk, s, r: IN std_logic; q : OUT std_logic);
END DFF1sr;
--
ARCHITECTURE behavioral OF DFF1sr IS
BEGIN
PROCESS (clk)
BEGIN
IF clk = '1' AND clk'EVENT THEN
IF s = '1' THEN
q <= '1';
ELSIF r = '1' THEN
q <= '0';
ELSE
q <= d;
END IF;
END IF;
END PROCESS;
END ARCHITECTURE behavioral;
Synchronous Control
8
Asynchronous Control
Asynchronous Control
9
Registers
ENTITY register8 IS
PORT (
d : IN std_logic_vector (7 DOWNTO 0);
clk, s, r : IN std_logic;
q : OUT std_logic_vector ( 7 DOWNTO 0));
END register8;
--
ARCHITECTURE behavioral OF register8 IS
BEGIN
PROCESS (clk)
BEGIN
IF clk = '1' AND clk'event THEN
IF s= '1' THEN
q <= (OTHERS => '1');
ELSIF r = '1' THEN
q <= (OTHERS => '0');
ELSE
q <= d;
END IF;
END IF;
END PROCESS;
END behavioral;
Shift-Registers
ENTITY shift_reg4 IS
PORT (
d : IN std_logic_vector (3 DOWNTO 0);
clk, ld, rst, l_r, s_in : IN std_logic;
q : OUT std_logic_vector (3 DOWNTO 0));
END shift_reg4;
ARCHITECTURE behavioral OF shift_reg4 IS
BEGIN
PROCESS (clk)
VARIABLE q_t: std_logic_vector (3 DOWNTO 0);
BEGIN
IF rising_edge (clk) THEN
IF rst= '1' THEN
q_t := (OTHERS => '0');
ELSIF ld = '1' THEN
q_t := d;
ELSIF l_r = '1' THEN
q_t := q_t (2 DOWNTO 0) & s_in ;
ELSE
q_t := s_in & q_t (3 DOWNTO 1);
END IF;
END IF;
q <= q_t;
END PROCESS;
END behavioral;
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 20
10
Counters
ENTITY counter4 IS
PORT (reset, clk : IN std_logic;
count : OUT std_logic_vector (3 DOWNTO 0));
END ENTITY;
--
ARCHITECTURE procedural OF counter4 IS
SIGNAL cnt_reg : std_logic_vector (3 DOWNTO 0);
BEGIN
PROCESS (clk)
BEGIN
IF (clk = '0' AND clk'EVENT) THEN
IF (reset='1') THEN
cnt_reg <="0000" AFTER 1.2 NS;
ELSE
cnt_reg <= cnt_reg + 1 AFTER 1.2 NS;
END IF;
END IF;
END PROCESS;
count <= cnt_reg;
END ARCHITECTURE procedural;
11
FSMs in VHDL
12
Moore FSM
Output Outputs
function
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 25
Mealy FSM
Output Outputs
function
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 26
13
Moore Machine
transition
condition 1
state 1 / state 2 /
output 1 output 2
transition
condition 2
Mealy Machine
transition condition 1 /
output 1
state 1 state 2
transition condition 2 /
output 2
14
Moore vs. Mealy FSM (1)
15
Moore FSM - Example 1
0 1
0
1
S0 / 0 S1 / 0 1 S2 / 1
reset
0
S0: No S1: “1” S2: “10”
Meaning elements observed observed
of states: of the
sequence
observed
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 31
S0 S1
reset 0/1
S0: No S1: “1”
Meaning elements observed
of states: of the
sequence
observed
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 32
16
Moore & Mealy FSMs – Example 1
clock
0 1 0 0 0
input
S0 S1 S2 S0 S0
Moore
S0 S1 S0 S0 S0
Mealy
17
FSMs in VHDL
Moore FSM
process(clock, reset)
18
Mealy FSM
process(clock, reset)
Inputs Next State
function
Next State Present State
clock Present State
reset Register
Output Outputs
concurrent function
statements
9/11/2022 Duy-Hieu Bui & Xuan-Tu Tran 37
0 1
0
1
S0 / 0 S1 / 0 1 S2 / 1
reset
0
19
Moore FSM in VHDL (1)
WHEN S1 =>
IF input = ‘0’ THEN
Moore_state <= S2;
ELSE
Moore_state <= S1;
END IF;
WHEN S2 =>
IF input = ‘0’ THEN
Moore_state <= S0;
ELSE
Moore_state <= S1;
END IF;
END CASE;
END IF;
END PROCESS;
Output <= ‘1’ WHEN Moore_state = S2 ELSE ‘0’;
20
Mealy FSM - Example 1
S0 S1
reset 0/1
21
Mealy FSM in VHDL (2)
WHEN S1 =>
IF input = ‘0’ THEN
Mealy_state <= S0;
ELSE
Mealy_state <= S1;
END IF;
END CASE;
END IF;
END PROCESS;
Output <= ‘1’ WHEN (Mealy_state = S1 AND input = ‘0’) ELSE ‘0’;
A Moore Machine
Sequence Detector
The State in which
the 110 sequence is
States are named: detected.
0 s0 , s1 , s2 , s3 1
reset
1 1 0
S0 S1 S2 S3
0 0 0 0 1
1
Initia
l 0
State It Takes at least
3 clock periods to
get to the s3 state
▪ A Moore Sequence Detector
22
Moore Machine VHDL Code
23
Writing Testbenches
Writing Testbenches
24