Professional Documents
Culture Documents
l6 FSM
l6 FSM
l6 FSM
Acknowledgements:
Materials in this lecture are courtesy of the following sources and are used with permission.
Rex Min
Cant guarantee
setup and hold
times will be met!
Clock
II
III
D
Clock
Transition is missed
on first clock cycle,
but caught on next
clock cycle.
Transition is caught
on first clock cycle.
Output is metastable
for an indeterminate
amount of time.
Sequential System
Async
Input
D Q
Q0
Clock
D
Q1
Clock
Clock
Courtesy of Nathan Ickes. Used with permission.
Handling Metastability
High gain of digital devices makes it likely that metastable conditions will
resolve themselves quickly
Very unlikely to
be metastable for
>1 clock cycle
D Q
D Q D Q
Extremely unlikely
to be metastable for
>2 clock cycle
Complicated
Sequential Logic
System
Clock
inputs
+
Combinational
Logic
present
state
+
next
state
CLK
outputs
FlipFlops
next
state
S+
Comb.
Logic
D
n
Flip- Q
Flops
Comb.
Logic
outputs
yk = fk(S)
CLK
n
present state S
Mealy FSM:
direct combinational path!
inputs
x0...xn
S+
Comb.
Logic
FlipFlops
outputs
yk = fk(S, x0...xn)
Comb.
Logic
CLK
n
S
L6: 6.111 Spring 2006
Sample uses:
Buttons
Level to
L
P
Pulse
Converter
Whenever input L goes
from low to high...
CLK
...output P produces a
single pulse, one clock
period wide.
unsynchronized
user input
Synchronizer
Edge Detector
D Q
Level to
L Pulse
P
FSM
D Q
CLK
L=0
L=1
00
P=0
11
01
Low input,
Waiting for rise
High input,
Waiting for fall
Edge Detected!
P=1
L=0
L=1
P=0
L=0
L=1
00
P=0
S1
0
0
0
0
1
1
L
0
1
0
1
0
1
L=1
11
01
Low input,
Waiting for rise
In
L=1
L=1
L=0
Current
State
Edge Detected!
P=1
L=0
High input,
Waiting for fall
P=0
L=0
S0
0
0
1
1
1
1
Next
State
S1+
0
0
0
1
0
1
S0+
0
1
0
1
0
1
Out
P
0
0
1
1
0
0
S1S0 for S1 :
00 01 11 10
L
0 0 0 0 X
1 0 1 1 X
+
S1S0 for S0 :
00 01 11 10
L
0 0 0 0 X
1 1 1 1 X
S+
L
Comb.
Logic
D Flip- Q
Flops
CLK
S
S11++ == LS
LS00
+
S
S00+ == LL
Comb.
Logic
n
P
S00
P == S
S11S
P
S0
S1
0
1
for P:
0
0
1
1
X
0
inputs
x0...xn
next
state
S+
Comb.
Logic
D
n
Flip- Q
Flops
Comb.
Logic
outputs
yk = fk(S)
CLK
n
S
S11++ == LS
LS00
+
S
S00+ == LL
present state S
P
S00
P == S
S11S
S0+
CLK
S1+
Q
D
Q
Q
S0
S1
10
S+
Comb.
Logic
Comb.
Logic
D Flip- Q
Flops
CLK
Since outputs are determined by state and inputs, Mealy FSMs may
need fewer states than Moore FSM implementations
1. When L=1 and S=0, this output is
asserted immediately and until the
state transition occurs (or L changes).
L
P
L=1 | P=1
L=0 | P=0
Clock
Input is low
Input is high
L=0 | P=0
L=1 | P=0
State
Output transitions
immediately.
State transitions at the
clock edge.
11
L=1 | P=1
Input is low
Input is high
L=0 | P=0
L=0 | P=0
L=1 | P=0
Pres.
State
In
Next
State
Out
S
0
0
1
1
L
0
1
0
1
S+
0
1
0
1
P
0
1
0
0
S+
CLK
12
Moore/Mealy Trade-Offs
Clock
Clock
State[0]
State
13
inputs
+
present
state
Minimum Delay
outputs
inputs
next
state
present
state
Tlogic
Tcq
Q
CLK
FlipFlops
Combinational
Logic
outputs
+
next
state
Tlogic,cd
Tcq,cd
Q
Tsu
CLK
FlipFlops
Thold
14
30
30
COINS ONLY
25
10 5
Co
Sprite
Jolt
Water
LS163
15
got10c
got15c
...
...
got35c
got40c
got45c
got50c
Dispense
Dime
Dispense
Nickel
16
A Moore Vender
Heres a first cut at the
state transition diagram.
idle
N=1
D=1
got5c
N=1
D=1
got10c
Q=1
N=1
D=1
got15c
N=1
D=1
Q=1
got20c
N=1
D=1
Q=1
got25c
Q=1
N=1
D=1
got30c
DC=1
Q=1
chg35
got35c
DC=1
DN=1
got40c
chg40
DC=1
DD=1
*
*
chg45
chg45b
DD=1
DN=1
got50c
chg50
chg50b
DC=1
DD=1
DD=1
got45c
DC=1
17
State Reduction
idle
Duplicate
Duplicate states
states have:
have:
The
The same
same outputs,
outputs, and
and
The
The same
same transitions
transitions
idle
N=1
D=1
There
There are
are two
two duplicates
duplicates
in
in our
our original
original diagram.
diagram.
got5c
N=1
D=1
got10c
D=1
D=1
Q=1
got20c
D=1
Q=1
got30c
DC=1
Q=1
D=1
chg40
DC=1
DD=1
got45c
DC=1
17 states
5 state bits
DN=1
got40c
*
*
Q=1
got25c
Q=1
DC=1
15 states
4 state bits
rtn5
got35c
DC=1
DC=1
chg45
chg45b
DD=1
DN=1
got45c
chg50
chg50b
DC=1
DD=1
DD=1
*
*
DD=1
rtn15
DD=1
*
*
rtn20
got50c
DC=1
DN=1
rtn10
got40c
got50c
got30c
DC=1
Q=1
chg35
got35c
DC=1
got20c
N=1
Q=1
*
Q=1
N=1
N=1
D=1
Q=1
got15c
N=1
got15c
got25c
got10c
N=1
N=1
D=1
got5c
N=1
D=1
N=1
D=1
D=1
Q=1
N=1
D=1
N=1
DD=1
18
Comb.
Logic
D State Q
Comb.
Logic
Register
CLK
n
State register
(sequential always block)
Next-state
combinational logic
(comb. always block with case)
IDLE = 0;
GOT_5c = 1;
GOT_10c = 2;
GOT_15c = 3;
GOT_20c = 4;
GOT_25c = 5;
GOT_30c = 6;
GOT_35c = 7;
GOT_40c = 8;
GOT_45c = 9;
GOT_50c = 10;
RETURN_20c = 11;
RETURN_15c = 12;
RETURN_10c = 13;
RETURN_5c = 14;
Output combinational
logic block
(comb. always block or assign
statements)
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
parameter
19
GOT_5c:
if
else if
else
else
GOT_10c:
if
else if
else
else
GOT_15c:
if
else if
else
else
GOT_20c:
if
else if
else
else
GOT_25c:
GOT_30c:
GOT_35c:
GOT_40c:
GOT_45c:
GOT_50c:
next
next
next
next
next
RETURN_20c:
RETURN_15c:
RETURN_10c:
RETURN_5c:
=
=
=
=
=
next
next
next
next
IDLE;
RETURN_5c;
RETURN_10c;
RETURN_15c;
RETURN_20c;
=
=
=
=
RETURN_10c;
RETURN_5c;
IDLE;
IDLE;
==
==
==
==
==
==
20
State
Output
idle
got5c
got20c
got15c
idle
rtn15
rtn5
got45c
10
21
// defaults
case (state)
IDLE:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_25c;
next = GOT_10c;
next = GOT_5c;
IDLE;
GOT_5c:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_30c;
next = GOT_15c;
next = GOT_10c;
GOT_5c;
GOT_10c:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_35c;
next = GOT_20c;
next = GOT_15c;
GOT_10c;
GOT_15c:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_40c;
next = GOT_25c;
next = GOT_20c;
GOT_15c;
GOT_20c:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_45c;
next = GOT_30c;
next = GOT_25c;
GOT_20c;
GOT_25c:
else
else
else
if (Q)
if (D)
if (N)
next =
next = GOT_50c;
next = GOT_35c;
next = GOT_30c;
GOT_25c;
GOT_30c:
GOT_35c:
GOT_40c:
GOT_45c:
GOT_50c:
begin
DC =
end
begin
DC =
end
begin
DC =
end
begin
DC =
end
begin
DC =
end
1; next = IDLE;
1; next = RETURN_5c;
1; next = RETURN_10c;
1; next = RETURN_15c;
1; next = RETURN_20c;
RETURN_20c: begin
DD =
end
RETURN_15c: begin
DD =
end
RETURN_10c: begin
DD =
end
RETURN_5c: begin
DN =
end
1; next = RETURN_10c;
1; next = RETURN_5c;
1; next = IDLE;
1; next = IDLE;
22
FSM state bits may not transition at precisely the same time
Combinational logic for outputs may contain hazards
Result: your FSM outputs may glitch!
during this state
transition...
got10c
D=1
got20c
...causing the
DC output to
glitch like this!
0010
got10c
0110
got30c
0100
got20c
glitch
If the soda dispenser is glitch-sensitive, your customers can get a 20-cent soda!
23
Output
Comb.
Logic
inputs
NextState
Comb.
Logic
registered
outputs
D Output Q
Registers
CLK
next
state
State Q
Registers
n
CLK
present state S
Move output
generation into the
sequential always
block
Calculate outputs
based on next state
reg DC,DN,DD;
// Sequential always block for state assignment
always @ (posedge clk or negedge reset) begin
if (!reset)
state <= IDLE;
else if (clk) state <= next;
DC <= (next
next
next
DN <= (next
DD <= (next
next
end
==
==
==
==
==
==
24
idle
N=1
D=1
got5c
N=1
D=1
got10c
Q=1
N=1
D=1
got15c
Q=1
N=1
D=1
*
idle
got20c
D=1
N=1
N=1
D=1
got25c
Q=1
Q=1 | DC=1
N=1
D=1
got30c
got35c
DC=1
D=1
rtn5
DN=1
got40c
rtn10
DC=1
DD=1
got45c
DC=1
*
*
DC=1
rtn15
DD=1
D=1
Q=1 | DC=1
got15c
Q=1 | DC=1
Q=1 | DC=1
got20c
DD=1
D=1
N=1 | DC=1
got10c
rtn5
rtn10
* | DD=1
N=1
rtn20
* | DN=1
N=1
D=1 | DC=1
got50c
got5c
* | DD=1
N=1
Q=1
DC=1
Q=1
Q=1
D=1 |
DC=1
N=1
got25c
rtn15
rtn20
* | DD=1
Q=1 | DC=1
25
IDLE = 0;
GOT_5c = 1;
GOT_10c = 2;
GOT_15c = 3;
GOT_20c = 4;
GOT_25c = 5;
RETURN_20c = 6;
RETURN_15c = 7;
RETURN_10c = 8;
RETURN_5c = 9;
26
if (Q)
if (D)
if (N)
next =
// defaults
next = GOT_25c;
next = GOT_10c;
next = GOT_5c;
IDLE;
if (Q)
DC =
end
else if (D)
DC =
end
else if (N)
DC =
end
else next =
GOT_5c:
if (Q) begin
DC = 1; next = IDLE;
end
else if (D) next = GOT_15c;
else if (N) next = GOT_10c;
else next = GOT_5c;
GOT_10c:
if (Q)
DC =
end
else if (D)
else if (N)
else next =
GOT_15c:
if (Q)
DC =
end
else if (D)
else if (N)
else next =
GOT_20c:
begin
1; next = RETURN_5c;
RETURN_20c:
next = GOT_20c;
next = GOT_15c;
GOT_10c;
RETURN_15c:
begin
1; next = RETURN_10c;
RETURN_10c:
next = GOT_25c;
next = GOT_20c;
GOT_15c;
RETURN_5c:
if (Q) begin
DC = 1; next = RETURN_15c;
end
else if (D) begin
DC = 1; next = IDLE;
end
else if (N) next = GOT_25c;
else next = GOT_20c;
begin
1; next = RETURN_20c;
begin
1; next = RETURN_5c;
begin
1; next = IDLE;
GOT_25c;
begin
DD =
end
begin
DD =
end
begin
DD =
end
begin
DN =
end
1; next = RETURN_10c;
1; next = RETURN_5c;
1; next = IDLE;
1; next = IDLE;
27
State
Output
idle
got5c
got20c
got15c
rtn5
idle
rtn15
10
28
VDD
50%
Vin
Vout
CL
tpHL
V out
tpLH
90%
V DD
50%
V DD
10%
tf
R on
tr
(b) High-to-low
(a) Low-to-high
review
V out
V out
CL
vin
vout
C
CL
R on
tp = ln (2) = 0.69 RC
L6: 6.111 Spring 2006
29
Combinational
Logic
D Q
Wire delay
D Q
ClkD
Clk
CLK
CLKD
>0
T>
30
In
CLK
R1
R2
Combinational
Logic
D Q
Combinational
Logic
D Q
tCLK1
tCLK2
TCLK +
R3
D Q
TCLK
CLK1
tCLK3
CLK2
delay
delay
4
+ th
In
R1
D Q
Combinational
Logic
R2
Combinational
Logic
D Q
R3
TCLK +
D Q
CLK1
tCLK1
tCLK2
delay
TCLK
tCLK3
delay
CLK
CLK2
31
2
CLK
5
4
-tjitter
In
REGS
tjitter
6
Combinational
Logic
CLK
tc-q, t c-q, cd
tsu, thold
tjitter
t logic
t logic, cd
32
Summary
33