Lecture 9 - the GMU ECE Department

advertisement
ECE 448
Lecture 9
Algorithmic State Machines
ECE 448 – FPGA and ASIC Design with VHDL
George Mason University
Required reading
• S. Brown and Z. Vranesic, Fundamentals of Digital
Logic with VHDL Design
Chapter 8.10, Algorithmic State Machine
(ASM) Charts
Chapter 10.2.1, A Bit-Counting-Circuit
Chapter 10.2.2, ASM Chart Implied Timing
Information
ECE 448 – FPGA and ASIC Design with VHDL
2
Algorithmic State Machine (ASM)
Charts
ECE 448 – FPGA and ASIC Design with VHDL
3
Algorithmic State Machine
Algorithmic State Machine –
representation of a Finite State Machine
suitable for FSMs with a larger number of
inputs and outputs compared to FSMs
expressed using state diagrams and state
tables.
ECE 448 – FPGA and ASIC Design with VHDL
4
Elements used in ASM charts (1)
State name
Output signals
or actions
(Moore type)
0 (False)
(a) State box
Condition
expression
1 (True)
(b) Decision box
Conditional outputs
or actions (Mealy type)
(c) Conditional output box
ECE 448 – FPGA and ASIC Design with VHDL
5
Elements used in ASM charts (2)
• State box – represents a state.
Equivalent to a node in a state diagram or a row
in a state table.
Moore type outputs are listed inside of the box. It
is customary to write only the name of the signal
that has to be asserted in the given state, e.g., z
instead of z=1. Also, it might be useful to write an
action to be taken, e.g., Count = Count + 1, and
only later translate it to asserting a control signal
that causes a given action to take place.
ECE 448 – FPGA and ASIC Design with VHDL
6
Elements used in ASM charts (3)
• Decision box – indicates that a given condition is
to be tested and the exit path is to be chosen
accordingly
The condition expression consists of one or more
inputs to the FSM.
• Conditional output box – denotes output
signals that are of the Mealy type.
The condition that determines whether such
outputs are generated is specified in the decision
box.
ECE 448 – FPGA and ASIC Design with VHDL
7
Moore FSM – Example 1: State diagram
Reset
w = 1
w = 0
A z = 0
B z = 0
w = 0
w = 1
w = 0
C z = 1
w = 1
ECE 448 – FPGA and ASIC Design with VHDL
8
ASM Chart for Moore FSM – Example 1
Reset
A
0
w
1
B
0
w
1
C
z
0
ECE 448 – FPGA and ASIC Design with VHDL
w
1
9
Example 1: VHDL code (1)
USE ieee.std_logic_1164.all ;
ENTITY simple IS
PORT ( clock
resetn
w
z
END simple ;
: IN STD_LOGIC ;
: IN STD_LOGIC ;
: IN STD_LOGIC ;
: OUT STD_LOGIC ) ;
ARCHITECTURE Behavior OF simple IS
TYPE State_type IS (A, B, C) ;
SIGNAL y : State_type ;
BEGIN
PROCESS ( resetn, clock )
BEGIN
IF resetn = '0' THEN
y <= A ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
ECE 448 – FPGA and ASIC Design with VHDL
10
Example 1: VHDL code (2)
CASE y IS
WHEN A =>
IF w = '0' THEN
y <= A ;
ELSE
y <= B ;
END IF ;
WHEN B =>
IF w = '0' THEN
y <= A ;
ELSE
y <= C ;
END IF ;
WHEN C =>
IF w = '0' THEN
y <= A ;
ELSE
y <= C ;
END IF ;
END CASE ;
ECE 448 – FPGA and ASIC Design with VHDL
11
Example 1: VHDL code (3)
END IF ;
END PROCESS ;
z <= '1' WHEN y = C ELSE '0' ;
END Behavior ;
ECE 448 – FPGA and ASIC Design with VHDL
12
Mealy FSM – Example 2: State diagram
Reset
w = 1 z = 0
w = 0 z = 0
A
B
w = 1 z = 1
w = 0 z = 0
ECE 448 – FPGA and ASIC Design with VHDL
13
ASM Chart for Mealy FSM – Example 2
Reset
A
0
w
1
B
z
0
ECE 448 – FPGA and ASIC Design with VHDL
w
1
14
Example 2: VHDL code (1)
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY Mealy IS
PORT ( clock : IN
resetn : IN
w
: IN
z
: OUT
END Mealy ;
STD_LOGIC ;
STD_LOGIC ;
STD_LOGIC ;
STD_LOGIC ) ;
ARCHITECTURE Behavior OF Mealy IS
TYPE State_type IS (A, B) ;
SIGNAL y : State_type ;
BEGIN
PROCESS ( resetn, clock )
BEGIN
IF resetn = '0' THEN
y <= A ;
ELSIF (clock'EVENT AND clock = '1') THEN
ECE 448 – FPGA and ASIC Design with VHDL
15
Example 2: VHDL code (2)
CASE y IS
WHEN A =>
IF w = '0' THEN
y <= A ;
ELSE
y <= B ;
END IF ;
WHEN B =>
IF w = '0' THEN
y <= A ;
ELSE
y <= B ;
END IF ;
END CASE ;
ECE 448 – FPGA and ASIC Design with VHDL
16
Example 2: VHDL code (3)
END IF ;
END PROCESS ;
z <= '1' WHEN (y = B) AND (w=‘1’) ELSE '0' ;
END Behavior ;
ECE 448 – FPGA and ASIC Design with VHDL
17
Control Unit Example: Arbiter (1)
reset
g1
r1
r2
Arbiter
g2
g3
r3
clock
ECE 448 – FPGA and ASIC Design with VHDL
18
Control Unit Example: Arbiter (2)
000
Reset
Idle
0xx
1xx
gnt1 g1 = 1
x0x
1xx
01x
gnt2 g2 = 1
xx0
x1x
001
gnt3 g3 = 1
xx1
ECE 448 – FPGA and ASIC Design with VHDL
19
Control Unit Example: Arbiter (3)
r 1r 2 r 3
Reset
Idle
r1
r1
gnt1 g1 = 1
r1
r2
r 1r 2
gnt2 g2 = 1
r2
r3
r 1r 2 r 3
gnt3 g3 = 1
r3
ECE 448 – FPGA and ASIC Design with VHDL
20
ASM Chart for Control Unit - Example 3
Reset
Idle
r1
1
gnt1
0
1
g1
r2
1
gnt2
g2
r3
0
1
0
0
r1
r2
0
1
1
gnt3
g3
ECE 448 – FPGA and ASIC Design with VHDL
0
r3
21
Example 3: VHDL code (1)
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY arbiter IS
PORT ( Clock, Resetn
r
g
END arbiter ;
: IN
: IN
: OUT
STD_LOGIC ;
STD_LOGIC_VECTOR(1 TO 3) ;
STD_LOGIC_VECTOR(1 TO 3) ) ;
ARCHITECTURE Behavior OF arbiter IS
TYPE State_type IS (Idle, gnt1, gnt2, gnt3) ;
SIGNAL y : State_type ;
ECE 448 – FPGA and ASIC Design with VHDL
22
Example 3: VHDL code (2)
BEGIN
PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0' THEN y <= Idle ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE y IS
WHEN Idle =>
IF r(1) = '1' THEN y <= gnt1 ;
ELSIF r(2) = '1' THEN y <= gnt2 ;
ELSIF r(3) = '1' THEN y <= gnt3 ;
ELSE y <= Idle ;
END IF ;
WHEN gnt1 =>
IF r(1) = '1' THEN y <= gnt1 ;
ELSE y <= Idle ;
END IF ;
WHEN gnt2 =>
IF r(2) = '1' THEN y <= gnt2 ;
ELSE y <= Idle ;
END IF ;
ECE 448 – FPGA and ASIC Design with VHDL
23
Example 3: VHDL code (3)
WHEN gnt3 =>
IF r(3) = '1' THEN y <= gnt3 ;
ELSE y <= Idle ;
END IF ;
END CASE ;
END IF ;
END PROCESS ;
g(1) <= '1' WHEN y = gnt1 ELSE '0' ;
g(2) <= '1' WHEN y = gnt2 ELSE '0' ;
g(3) <= '1' WHEN y = gnt3 ELSE '0' ;
END Behavior ;
ECE 448 – FPGA and ASIC Design with VHDL
24
Bit Counter
ECE 448 – FPGA and ASIC Design with VHDL
25
Pseudo-code for the bit counter
B = 0;
while A≠0 do
if a0 = 1 then
B = B + 1;
end if;
Right-shift A;
end while ;
ECE 448 – FPGA and ASIC Design with VHDL
26
ASM chart of the bit counter
Reset
S1
B 0
Load A
0
0
s
s
1
1
S2
S3
Shift right A
B B + 1
A = 0?
Done
1
0
0
a0
1
ECE 448 – FPGA and ASIC Design with VHDL
27
Expected behavior of the bit counter
ECE 448 – FPGA and ASIC Design with VHDL
28
Datapath of the bit counter
0
Data
log2n
n
0
LA
EA
Clock
Sin
Load
Enable
Clock
LB
EB
D
Shift
Q
D
Load
Enable Counter
Q
Clock
log2n
A
n
z
a
ECE 448 – FPGA and ASIC Design with VHDL
0
B
29
ASM chart for the bit counter control circuit
Reset
S1
LB
0
0
1
s
s
1
S2
S3
Done
EA
1
z
EB
0
0
a0
1
ECE 448 – FPGA and ASIC Design with VHDL
30
VHDL code of the bit counter (1)
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
LIBRARY work ;
USE work.components.shiftrne ;
ENTITY bitcount IS
PORT(Clock, Resetn : IN STD_LOGIC ;
LA, s
: IN STD_LOGIC ;
Data
: IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
B
: BUFFER INTEGER RANGE 0 to 8 ;
Done
: OUT STD_LOGIC ) ;
END bitcount ;
ECE 448 – FPGA and ASIC Design with VHDL
31
VHDL code of the bit counter (2)
ARCHITECTURE Behavior OF bitcount IS
TYPE State_type IS ( S1, S2, S3 ) ;
SIGNAL y : State_type ;
SIGNAL A : STD_LOGIC_VECTOR(7 DOWNTO 0) ;
SIGNAL z, EA, LB, EB, low : STD_LOGIC ;
BEGIN
FSM_transitions: PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0' THEN
y <= S1 ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE y IS
WHEN S1 =>
IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF ;
WHEN S2 =>
IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF ;
WHEN S3 =>
IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF ;
END CASE ;
END IF ;
END PROCESS ;
ECE 448 – FPGA and ASIC Design with VHDL
32
VHDL code of the bit counter (3)
FSM_outputs: PROCESS ( y, A(0) )
BEGIN
EA <= '0' ; LB <= '0' ; EB <= '0' ; Done <= '0' ;
CASE y IS
WHEN S1 =>
LB <= '1'
WHEN S2 =>
EA <= '1' ;
IF A(0) = '1' THEN
EB <= '1' ;
ELSE
EB <= '0' ;
END IF ;
WHEN S3 =>
Done <= '1' ;
END CASE ;
END PROCESS ;
ECE 448 – FPGA and ASIC Design with VHDL
33
VHDL code of the bit counter (4)
-- The datapath circuit is described below
upcount: PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0' THEN
B <= 0 ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
IF LB = '1' THEN
B <= 0 ;
ELSEIF EB = '1' THEN
B <= B + 1 ;
END IF ;
END IF;
END PROCESS;
ECE 448 – FPGA and ASIC Design with VHDL
34
VHDL code of the bit counter (5)
low <= '0' ;
ShiftA: shiftrne GENERIC MAP ( N => 8 )
PORT MAP ( D => Data,
Load => LA,
Enable => EA,
Sin => low,
Clock =>Clock,
Q => A ) ;
z <= '1' WHEN A = "00000000" ELSE '0' ;
END Behavior ;
ECE 448 – FPGA and ASIC Design with VHDL
35
Shift Register With Parallel Load
Load
D(3)
D(1)
D(2)
Sin
D
Q
D
D(0)
D
Q
Q
D
Q
Clock
Enable
Q(3)
ECE 448 – FPGA and ASIC Design with VHDL
Q(2)
Q(1)
Q(0)
36
N-bit shift register with parallel load (1)
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY shiftrne IS
GENERIC ( N : INTEGER := 8 ) ;
PORT ( D : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0) ;
Load
: IN
STD_LOGIC ;
Enable : IN
STD_LOGIC ;
Sin
: IN
STD_LOGIC ;
Clock
: IN
STD_LOGIC ;
Q
: BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0) ) ;
END shiftrne ;
N
Enable
D
Q
N
Load
Sin
shiftn
Clock
ECE 448 – FPGA and ASIC Design with VHDL
37
N-bit shift register with parallel load (2)
ARCHITECTURE Behavior OF shiftrne IS
BEGIN
PROCESS (Clock)
BEGIN
IF (Clock'EVENT AND Clock = '1' ) THEN
IF Load = '1' THEN
Q <= D ;
ELSIF Enable = ‘1’ THEN
Genbits: FOR i IN 0 TO N-2 LOOP
Q(i) <= Q(i+1) ;
END LOOP ;
Q(N-1) <= Sin ;
N
Enable
END IF;
D
Q
END IF ;
END PROCESS ;
Load
END Behavior ;
Sin
N
shiftn
Clock
ECE 448 – FPGA and ASIC Design with VHDL
38
Download