0% found this document useful (0 votes)
163 views32 pages

L06

Finite state machines (FSMs) are useful for modeling sequential circuits and have distinct states. An FSM transitions between states based on its current state and inputs, and uses combinational logic to determine the next state and outputs. There are two types: Moore FSMs determine outputs based only on the current state, while Mealy FSMs also use the inputs. To design an FSM, one draws a state transition diagram showing the states and transitions, chooses a state encoding, then derives the combinational logic for the next state and outputs.

Uploaded by

Aliya Sarun
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
163 views32 pages

L06

Finite state machines (FSMs) are useful for modeling sequential circuits and have distinct states. An FSM transitions between states based on its current state and inputs, and uses combinational logic to determine the next state and outputs. There are two types: Moore FSMs determine outputs based only on the current state, while Mealy FSMs also use the inputs. To design an FSM, one draws a state transition diagram showing the states and transitions, chooses a state encoding, then derives the combinational logic for the next state and outputs.

Uploaded by

Aliya Sarun
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

Finite State Machines

• Design methodology for sequential logic


-- identify distinct states
-- create state transition diagram
-- choose state encoding
-- write combinational Verilog for next-state logic
-- write combinational Verilog for output signals
• Lots of examples

6.111 Fall 2017 Lecture 6 1


Finite State Machines
• Finite State Machines (FSMs) are a useful abstraction for
sequential circuits with centralized “states” of operation
• At each clock edge, combinational logic computes outputs and
next state as a function of inputs and present state

inputs Combinational outputs


+ Logic +
present next
state state

n n

Q D
Registers
CLK

6.111 Fall 2017 Lecture 6 2


Two Types of FSMs
Moore and Mealy FSMs : different output generation
• Moore FSM:
next
state
S+
inputs D Q outputs
Comb. Comb.
x0...xn Logic
n Registers
Logic yk = fk(S)
CLK
n

present state S

• Mealy FSM:
direct combinational path!
outputs
yk = fk(S, x0...xn)
inputs S+ Comb.
x0...xn Comb. D Q
n Registers Logic
Logic
CLK
n

6.111 Fall 2017 Lecture 6 3


Design Example: Level-to-Pulse
• A level-to-pulse converter produces a single-
cycle pulse each time its input goes high.
• It’s a synchronous rising-edge detector.
• Sample uses:
– Buttons and switches pressed by humans for
arbitrary periods of time
– Single-cycle enable signals for counters

Level to
L Pulse P
Converter
...output P produces a
Whenever input L goes
single pulse, one clock
from low to high...
CLK period wide.

6.111 Fall 2017 Lecture 6 4


Step 1: State Transition Diagram
• Block diagram of desired system:
Synchronizer Edge Detector

unsynchronized Level to
user input
D Q D Q L Pulse P
FSM
CLK

• State transition diagram is a useful FSM representation and


design aid:
“if L=1 at the clock edge,
then jump to state 01.”
L=1 L=1 Binary values of states

00 11
11
L=0 01
Low input, High input,
Waiting for rise
Edge Detected!
Waiting for fall
L=1
P=0 P=1 P=0
L=0
L=0 This is the output that results
“if L=0 at the clock
edge, then stay in state from this state. (Moore or
00.” Mealy?)

6.111 Fall 2017 Lecture 6 5


Valid State Transition Diagrams

L=1 L=1

00 11
L=0 01
Low input, High input,
Waiting for rise
Edge Detected!
Waiting for fall
L=1
P=0 P=1 P=0
L=0
L=0

• Arcs leaving a state are mutually exclusive, i.e., for any


combination input values there’s at most one applicable arc
• Arcs leaving a state are collectively exhaustive, i.e., for any
combination of input values there’s at least one applicable arc
• So for each state: for any combination of input values there’s
exactly one applicable arc
• Often a starting state is specified
• Each state specifies values for all outputs (Moore)
6.111 Fall 2017 Lecture 6 6
Choosing State Representation

Choice #1: binary encoding

For N states, use ceil(log2N) bits to encode the state with each
state represented by a unique combination of the bits.
Tradeoffs: most efficient use of state registers, but requires
more complicated combinational logic to detect when in a
particular state.

Choice #2: “one-hot” encoding

For N states, use N bits to encode the state where the bit
corresponding to the current state is 1, all the others 0.
Tradeoffs: more state registers, but often much less
combinational logic since state decoding is trivial.

6.111 Fall 2017 Lecture 6 7


Step 2: Logic Derivation
Current Next
Transition diagram is readily converted to a State
In
State
Out
state transition table (just a truth table)
S1 S0 L S1+ S0+ P
L=1 L=1
0 0 0 0 0 0
L=0
00 11
L=1 0 0 1 0 1 0
01
Low input,
Edge Detected!
High input, 0 1 0 0 0 1
Waiting for rise Waiting for fall
P=0 P=1 P=0 0 1 1 1 1 1
L=0 L=0 1 1 0 0 0 0
1 1 1 1 1 0

• Combinational logic may be derived using Karnaugh maps


S1S0 for S1 :
+

L 00 01 11 10
0 0 0 0 X
L S+ P
1 0 1 1 X Comb. D Q Comb.
n Registers S1
for P:
S1S0 for S0
+: Logic Logic
CLK S0 0 1
L 00 01 11 10 n
0 0 X
0 0 0 0 X S
S1+ = LS0 P = S1S0 1 1 0
1 1 1 1 X S0+ = L

6.111 Fall 2017 Lecture 6 8


Moore Level-to-Pulse Converter
next
state
S+
inputs D Q outputs
Comb. Comb.
x0...xn Logic
n Registers
Logic yk = fk(S)
CLK
n

present state S
S1+ = LS0 P = S1S0
S0+ = L

Moore FSM circuit implementation of level-to-pulse converter:


S0+ S0
L D Q
P
CLK Q

D Q
S1+ S1
Q

6.111 Fall 2017 Lecture 6 9


Design of a Mealy Level-to-Pulse
direct combinational path!

S+ Comb.
Comb. D Q
n Registers Logic
Logic
CLK
n
S
• 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 L 1
changes). 2
P
L=1 | P=1 Clock
L=0 | P=0 0 1 Stat
Input is low Input is high e
Output transitions immediately.
L=0 | P=0
State transitions at the clock
L=1 | P=0 edge.
2. While in state S=1 and as long as L remains
at 1, this output is asserted until next clock.

6.111 Fall 2017 Lecture 6 10


Mealy Level-to-Pulse Converter
Next
Pres.
L=1 | P=1 State
In Stat Out
e
0 1
Input is low Input is high S L S+ P

L=0 | P=0 0 0 0 0
L=0 | P=0 L=1 | P=0 0 1 1 1
1 1 1 0
1 0 0 0

Mealy FSM circuit implementation of level-to-pulse converter:


P
S+ S
L D Q

CLK Q
S

• FSM’s state simply remembers the previous value of L


• Circuit benefits from the Mealy FSM’s implicit single-cycle
assertion of outputs during state transitions

6.111 Fall 2017 Lecture 6 11


Moore/Mealy Trade-Offs

• How are they different?


– Moore: outputs = f( state ) only
– Mealy outputs = f( state and input )
– Mealy outputs generally occur one cycle earlier than a Moore:

Moore: delayed assertion of P Mealy: immediate assertion of P

L L
P P

Clock Clock

State[ State
0]

• Compared to a Moore FSM, a Mealy FSM might...


– Be more difficult to conceptualize and design
– Have fewer states

6.111 Fall 2017 Lecture 6 12


Example: Intersection Traffic Lights
• Design a controller for the traffic lights at the intersection of
two streets – two sets of traffic lights, one for each of the
streets.
• Step 1: Draw starting state transition diagram. Just handle the
usual green-yellow-red cycle for both streets. How many states?
Well, how many different combinations of the two sets of lights
are needed?
• Step 2: add support for a walk button and walk lights to your
state transition diagram.
• Step 3: add support for a traffic sensor for each of the streets
– when the sensor detects traffic the green cycle for that street
is extended.

Example to be worked collaboratively on the board…

6.111 Fall 2017 Lecture 6 13


FSM Example
GOAL:
Build an electronic combination lock with a reset
button, two number buttons (0 and 1), and an unlock
output. The combination should be 01011.
RESET
“0” UNLOCK
“1”

STEPS:
1. Design lock FSM (block diagram, state transitions)
2. Write Verilog module(s) for FSM

6.111 Fall 2017 Lecture 6 14


Step 1A: Block Diagram

lock
Clock
fsm_clock fsm
generator

unlock Unlock
reset button LED
Button
reset
Enter

Button b0_in button


b0 LED
0
DISPLAY
state
Button b1_in
button b1
1

6.111 Fall 2017 Lecture 6 15


Step 1B: State transition diagram

RESET
1
1 0

RESET 0 “0” 1 “01”


Unlock = 0 Unlock = 0 Unlock = 0

0
1 0
0
“01011” 1 “0101” 1 “010”
Unlock = 1 Unlock = 0 Unlock = 0

0
6 states  3 bits
6.111 Fall 2017 Lecture 6 16
Step 2: Write Verilog
module lock(input clk,reset_in,b0_in,b1_in,
output out);

// synchronize push buttons, convert to pulses

// implement state transition diagram


reg [2:0] state,next_state;
always @(*) begin
// combinational logic!
next_state = ???;
end
always @(posedge clk) state <= next_state;

// generate output
assign out = ???;

// debugging?
endmodule

6.111 Fall 2017 Lecture 6 17


Step 2A: Synchronize buttons
// button
// push button synchronizer and level-to-pulse converter
// OUT goes high for one cycle of CLK whenever IN makes a
// low-to-high transition.
out
module button(
r1 r2 r3
input clk,in, in D Q D Q D Q
output out
);
clk
reg r1,r2,r3;
always @(posedge clk) synchronizer state
begin
r1 <= in; // first reg in synchronizer
r2 <= r1; // second reg in synchronizer, output is in sync!
r3 <= r2; // remembers previous state of button
end

// rising edge = old value is 0, new value is 1


assign out = ~r3 & r2;
endmodule
6.111 Fall 2017 Lecture 6 18
Step 2B: state transition diagram
parameter S_RESET = 0; // state assignments
parameter S_0 = 1; RESET
parameter S_01 = 2; 0
1
1
parameter S_010 = 3; RESET 0 “0” 1 “01”
parameter S_0101 = 4; Unlock = 0 Unlock = 0 Unlock = 0

parameter S_01011 = 5; 0
1 0
0
reg [2:0] state, next_state; “01011 ” 1 “0101 ” 1 “010”
Unlock = 1 Unlock = 0 Unlock = 0
always @(*) begin
// implement state transition diagram 0

if (reset) next_state = S_RESET;


else case (state)
S_RESET: next_state = b0 ? S_0 : b1 ? S_RESET : state;
S_0: next_state = b0 ? S_0 : b1 ? S_01 : state;
S_01: next_state = b0 ? S_010 : b1 ? S_RESET : state;
S_010: next_state = b0 ? S_0 : b1 ? S_0101 : state;
S_0101: next_state = b0 ? S_010 : b1 ? S_01011 : state;
S_01011: next_state = b0 ? S_0 : b1 ? S_RESET : state;
default: next_state = S_RESET; // handle unused states
endcase
end

always @(posedge clk) state <= next_state;


6.111 Fall 2017 Lecture 6 19
Step 2C: generate output

// it’s a Moore machine! Output only depends on current state

assign out = (state == S_01011);

Step 2D: debugging?

// hmmm. What would be useful to know? Current state?


// hex_display on labkit shows 16 four bit values

assign hex_display = {60’b0, 1'b0, state[2:0]};

6.111 Fall 2017 Lecture 6 20


Step 2: final Verilog implementation
module lock(input clk,reset_in,b0_in,b1_in,
output out, output [3:0] hex_display);

wire reset, b0, b1; // synchronize push buttons, convert to pulses


button b_reset(clk,reset_in,reset);
button b_0(clk,b0_in,b0);
button b_1(clk,b1_in,b1);

parameter S_RESET = 0; parameter S_0 = 1; // state assignments


parameter S_01 = 2; parameter S_010 = 3;
parameter S_0101 = 4; parameter S_01011 = 5;

reg [2:0] state,next_state;


always @(*) begin // implement state transition diagram
if (reset) next_state = S_RESET;
else case (state)
S_RESET: next_state = b0 ? S_0 : b1 ? S_RESET : state;
S_0: next_state = b0 ? S_0 : b1 ? S_01 : state;
S_01: next_state = b0 ? S_010 : b1 ? S_RESET : state;
S_010: next_state = b0 ? S_0 : b1 ? S_0101 : state;
S_0101: next_state = b0 ? S_010 : b1 ? S_01011 : state;
S_01011: next_state = b0 ? S_0 : b1 ? S_RESET : state;
default: next_state = S_RESET; // handle unused states
endcase
end
always @ (posedge clk) state <= next_state;

assign out = (state == S_01011); // assign output: Moore machine


assign hex_display = {1'b0,state}; // debugging
endmodule

6.111 Fall 2017 Lecture 6 21


Real FSM Security System

6.111 Fall 2017 Lecture 6 22


The 6.111 Vending Machine

• Lab assistants demand a new soda


machine for the 6.111 lab. You
design the FSM controller. 30¢ 30¢
• All selections are $0.30.
• The machine makes change.
COINS ONLY

(Dimes and nickels only.) 25¢


10¢ 5¢

• Inputs: limit 1 per clock Co


– Q - quarter inserted Sprite
– D - dime inserted Jolt

– N - nickel inserted Water

• Outputs: limit 1 per clock LS163

– DC - dispense can
– DD - dispense dime
– DN - dispense nickel

6.111 Fall 2017 Lecture 6 23


What States are in the System?
• A starting (idle) state:
idle
• A state for each possible amount of money captured:

got5c got10c got15c ...

• What’s the maximum amount of money captured before purchase?


25 cents (just shy of a purchase) + one quarter (largest coin)
... got35c got40c got45c got50c

• States to dispense change (one per coin dispensed):

Dispense Dispense
got45c Dime Nickel

6.111 Fall 2017 Lecture 6 24


A Moore Vender
Here’s a first cut at the idle
state transition N=1
D=1 got5c
diagram. N=1
D=1 got10c Q=1

N=1
D=1 got15c
N=1 Q=1
D=1 got20c
N=1 Q=1
D=1 got25c *
N=1 Q=1
See a better way?
D=1 got30c
So do we. DC=1 *
Don’t go away... Q=1
got35c chg35
DC=1 DN=1
*
got40c chg40
* *
DD=1
DC=1
*
got45c
DC=1
* chg45
DD=1
chg45b
DN=1 *
got50c chg50 chg50b
DC=1
* DD=1 DD=1

6.111 Fall 2017 Lecture 6 25


State Reduction
Duplicate states have: idle
 The same outputs, and N=1
idle  The same transitions D=1 got5c
N=1 N=1
There are two duplicates
D=1 got5c Q=1
in our original diagram. D=1 got10c
N=1
N=1
got10c Q=1
D=1
N=1
D=1 got15c *
D=1 got15c N=1 Q=1
N=1 Q=1 D=1 got20c
D=1 got20c N=1
Q=1
N=1 D=1 got25c
D=1 got25c Q=1
N=1 Q=1
* *
N=1
Q=1 D=1 got30c
D=1 got30c DC=1
DC=1 * Q=1
Q=1
got35c chg35 got35c rtn5
DN=1 17 states 15 states DC=1 DN=1
DC=1
*
* 5 state bits 4 state bits *
got40c chg40 * got40c rtn10
DC=1
* DD=1 DD=1 *
DC=1
*
got45c * chg45 chg45b
DC=1 DD=1 DN=1 * got45c * rtn15
DC=1 DD=1 *
got50c chg50 chg50b
DC=1
* DD=1 DD=1 got50c rtn20
DC=1
* DD=1

6.111 Fall 2017 Lecture 6 26


Verilog for the Moore Vender
module mooreVender (
input N, D, Q, clk, reset,
output DC, DN, DD,
output reg [3:0] state);
Comb. n
DState Q Comb.
Logic Register Logic reg next;
CLK
n
States defined with parameter keyword
parameter IDLE = 0;
FSMs are easy in Verilog. parameter
parameter
GOT_5c = 1;
GOT_10c = 2;
Simply write one of each: parameter
parameter
GOT_15c = 3;
GOT_20c = 4;
parameter GOT_25c = 5;
 State register parameter
parameter
GOT_30c = 6;
GOT_35c = 7;
(sequential always block) parameter GOT_40c = 8;
parameter GOT_45c = 9;
 Next-state parameter GOT_50c = 10;

combinational logic
parameter RETURN_20c = 11;
parameter RETURN_15c = 12;
(comb. always block with case) parameter
parameter
RETURN_10c = 13;
RETURN_5c = 14;

 Output combinational State register defined with sequential


logic block always block
(comb. always block or assign
statements) always @ (posedge clk or negedge reset)
if (!reset) state <= IDLE;
else state <= next;

6.111 Fall 2017 Lecture 6 27


Verilog for the Moore Vender
GOT_25c: if (Q) next = GOT_50c;
Next-state logic within a else if (D) next = GOT_35c;
else if (N) next = GOT_30c;
combinational always block else next = GOT_25c;

GOT_30c: next = IDLE;


always @ (state or N or D or Q) begin
GOT_35c: next = RETURN_5c;
GOT_40c: next = RETURN_10c;
case (state)
GOT_45c: next = RETURN_15c;
IDLE: if (Q) next = GOT_25c;
GOT_50c: next = RETURN_20c;
else if (D) next = GOT_10c;
else if (N) next = GOT_5c;
RETURN_20c: next = RETURN_10c;
else next = IDLE;
RETURN_15c: next = RETURN_5c;
RETURN_10c: next = IDLE;
GOT_5c: if (Q) next = GOT_30c;
RETURN_5c: next = IDLE;
else if (D) next = GOT_15c;
else if (N) next = GOT_10c;
default: next = IDLE;
else next = GOT_5c;
endcase
end
GOT_10c: if (Q) next = GOT_35c;
else if (D) next = GOT_20c;
else if (N) next = GOT_15c;
else next = GOT_10c;
Combinational output assignment
GOT_15c: if (Q) next = GOT_40c; assign DC = (state == GOT_30c || state == GOT_35c ||
else if (D) next = GOT_25c; state == GOT_40c || state == GOT_45c ||
else if (N) next = GOT_20c; state == GOT_50c);
else next = GOT_15c; assign DN = (state == RETURN_5c);
assign DD = (state == RETURN_20c || state == RETURN_15c ||
GOT_20c: if (Q) next = GOT_45c; state == RETURN_10c);
else if (D) next = GOT_30c; endmodule
else if (N) next = GOT_25c;
else next = GOT_20c;

6.111 Fall 2017 Lecture 6 28


Simulation of Moore Vender

idle got5c got20c rtn15 idle


State got15c got45c rtn5

Output 10¢ 5¢

6.111 Fall 2017 Lecture 6 29


FSM Output Glitching
 FSM state bits may not transition at precisely the same
time
 Combinational logic for outputs may contain hazards
 Result: your FSM outputs may glitch!
...causing the DC
during this state ...the state registers may output to glitch
transition... transtion like this... like this!

got10c 0010 got10c 0

D=1 0110 got30c 1 glitch

got20c 0100 got20c 0

assign DC = (state == GOT_30c || state == GOT_35c ||


state == GOT_40c || state == GOT_45c ||
state == GOT_50c);

If the soda dispenser is glitch-sensitive, your customers can get a 20-cent soda!

6.111 Fall 2017 Lecture 6 30


Registered FSM Outputs are
Glitch-Free
Output D Output Q
registered
Comb. outputs
Registers
Logic CLK

next
Next- state
inputs State D State Q
n
Comb. Registers
Logic CLK
n

present state S

 Move output generation reg DC,DN,DD;

into the sequential // Sequential always block for state assignment

always block
always @ (posedge clk or negedge reset) begin
if (!reset) state <= IDLE;
else if (clk) state <= next;
 Calculate outputs based
on next state
DC <= (next == GOT_30c || next == GOT_35c ||
next == GOT_40c || next == GOT_45c ||
next == GOT_50c);
 Delays outputs by one DN <= (next == RETURN_5c);

clock cycle. Problematic


DD <= (next == RETURN_20c || next == RETURN_15c ||
next == RETURN_10c);
in some application. end

6.111 Fall 2017 Lecture 6 31


Where should CLK come from?
• Option 1: external crystal
– Stable, known frequency, typically 50% duty cycle
• Option 2: internal signals
– Option 2A: output of combinational logic

• No! If inputs to logic change, output may make several


transitions before settling to final value  several rising edges,
not just one! Hard to design away output glitches…
– Option 2B: output of a register
• Okay, but timing of CLK2 won’t line up with CLK1

D Q CLK2

CLK1 CLK1
6.111 Fall 2017 Lecture 6 32

You might also like