0% found this document useful (0 votes)
6 views

Lecture 4 FSM

Uploaded by

mickeysu2016
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Lecture 4 FSM

Uploaded by

mickeysu2016
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 35

Lecture 4 – Finite State

Machines

1 9/18/2020
Modeling Finite State Machines (FSMs)
 “Manual” FSM design & synthesis process:
1. Design state diagram (behavior)
2. Derive state table
3. Reduce state table
4. Choose a state assignment
5. Derive output equations
6. Derive flip-flop excitation equations
 Steps 2-6 can be automated, given a state diagram
1. Model states as enumerated type
2. Model output function (Mealy or Moore model)
3. Model state transitions (functions of current state and inputs)
4. Consider how initial state will be forced

2 9/18/2020
FSM structure

Inputs Outputs
X Y
Combinational
Circuit

Present State Next State


(PS) (NS)

Memory
Elements

Clock

3 9/18/2020
Mealy Machine and Moore Machine
Mealy Machine

Inputs Next State Output


Combinational Combinational Outputs
State
Logic Register Logic

clock

Moore Machine

Inputs Next State Output


State
Combinational Combinational Outputs
Register
Logic Logic

clock

4 9/18/2020
FSM example – Mealy model

0/0
Present Input x
X/Z 0 1
A state
A A/0 B/0
1/1 1/0 B A/0 C/1
0/0 C C/0 A/1
0/0
C B Next state/output
1/1
entity seqckt is
port ( x: in std_logic; -- FSM input
z: out std_logic; -- FSM output
clk: in std_logic ); -- clock
end seqckt;
5 9/18/2020
FSM example - behavioral model
architecture behave of seqckt is
type states is (A,B,C); -- symbolic state names
(enumerate)
signal state: states; --state variable
begin

-- Output function (combinational logic)


z <= ‘1’ when ((state = B) and (x = ‘1’)) --all conditions
or ((state = C) and (x = ‘1’)) --for which z=1.
else ‘0’; --otherwise z=0

-- State transitions on next slide

6 9/18/2020
FSM example – state transitions
process (clk) – trigger state change on clock transition
begin
if rising_edge(clk) then -- change state on rising clock edge
case state is -- change state according to x
when A => if (x = ‘0’) then
state <= A;
else -- if (x = ‘1’)
state <= B;
end if;
when B => if (x=‘0’) then
state <= A;
else -- if (x = ‘1’)
state <= C;
end if;
when C => if (x=‘0’) then
state <= C;
else -- if (x = ‘1’)
state <= A;
end if;
end case;
end if;
end process;
7 9/18/2020
FSM example – alternative model
architecture behave of seqckt is
type states is (A,B,C); -- symbolic state names
(enumerate)
signal pres_state, next_state: states;
begin
-- Model the memory elements of the FSM
process (clk)
begin
if (clk’event and clk=‘1’) then
pres_state <= next_state;
end if;
end process;

(continue on next slide)


8 9/18/2020
FSM example (alternate model, continued)
-- Model next-state and output functions of the FSM
-- as combinational logic
process (x, pres_state) -- function inputs
begin
case pres_state is -- describe each state
when A => if (x = ‘0’) then
z <= ‘0’;
next_state <= A;
else -- if (x = ‘1’)
z <= ‘0’;
next_state <= B;
end if;

(continue on next slide for pres_state = B and C)


9 9/18/2020
FSM example (alternate model, continued)

when B => if (x=‘0’) then


z <= ‘0’;
next_state <= A;
else
z <= ‘1’;
next_state <= C;
end if;
when C => if (x=‘0’) then
z <= ‘0’;
next_state <= C;
else
z <= ‘1’;
next_state <= A;
end if;
end case;
end process;
10 9/18/2020
Alternative form for output and next state
functions (combinational logic)
-- Next state function (combinational logic)
next_state <= A when ((curr_state = A) and (x = ‘0’))
or ((curr_state = B) and (x = ‘0’))
or ((curr_state = C) and (x = ‘1’)) else
B when ((curr_state = 1) and (x = ‘1’)) else
C;
-- Output function (combinational logic)
z <= ‘1’ when ((curr_state = B) and (x = ‘1’)) --all conditions
or ((curr_state = C) and (x = ‘1’)) --for which z=1.
else ‘0’; --otherwise z=0
11 9/18/2020
Moore model FSM

entity FSM is
port (CLK, EN, TDI: in bit;
RST, SHIFT: out
bit);
end entity FSM;
12 9/18/2020
Write a VHDL code using three process blocks!

13 9/18/2020
How Verilog Explicit FSM Works
 The nonblocking and blocking assignments are scheduled
in the same time step of the simulation in a particular order
1. The nonblocking assignments in the edge-sensitive behavior are
sampled first at the beginning of the time step (i.e. before any
assignments are made)
2. The blocking assignments in level-sensitive behavior are then
executed (with the previous register value because there is no
assignment done in Step 1)
3. After Step 2, the nonblocking assignments are completed by
assigning LHS variables with the values that were sampled at Step 1
Verilog Explicit FSM Design and Synthesis Tips
 Use 2 cyclic behaviors for an explicit state machine
• One level-sensitive behavior for combinational logic to describe the
next state and output logic
• One edge-sensitive behavior for state flip-flops to synchronize state
transition
 In the level-sensitive behavior for N/S and O/P
• Use blocked assignments/procedural assignments “=“
• Completely specify all outputs
 Can be achieved by initializing all outputs in the beginning
 In the edge-sensitive behavior for state transition
• Use nonblocking assignments “<=“
 For state transition
 For register transfer of a data path
 Always decode all possible states in the level sensitive
behavior
• To avoid unnecessary latches
Decode All Possible States!
 Matching simulation results between behavioral model and a
synthesized circuit does NOT guarantee that an implementation is
correct !
• Unless exercising all possible input sequences
 Which is almost impossible to do
• Because, if the testbench exercises the circuit only allowable input
sequences, then it is not sufficient to verify the circuit’s behaviors that are
not covered by the exercise of the testbench
Verilog: Mealy Machine

17 9/18/2020
Verilog: Mealy Machine– Cont.

module mealy_2processes(input clk, always @(state or x)


input reset, input x, output reg begin
parity); parity = 1'b0;
reg state, nextstate; case(state)
parameter S0=0, S1=1; S0: if(x)
begin
always @(posedge clk or posedge parity = 1; nextstate = S1;
reset) end
if (reset) else
state <= S0; nextstate = S0;
else S1: if(x)
state <= nextstate; nextstate = S0;
else
begin
parity = 1; nextstate = S1;
end
default:
nextstate = S0;
endcase
end
endmodule

*Xilinx Documentation

18 9/18/2020
Verilog: Mealy Machine– Cont.

module mealy_3processes(input clk, input always @(state or x) //Output Logic


reset, input x, output reg parity); begin
reg state, nextstate; parity = 1'b0;
case(state)
parameter S0=0, S1=1; S0: if(x)
parity = 1;
S1: if(!x)
parity = 1;
always @(posedge clk or posedge reset)
endcase
if (reset)
end
state <= S0;
else state <= nextstate;
always @(state or x) // Nextstate Logic
begin
nextstate = S0;
case(state)
S0: if(x) nextstate = S1;
S1: if(!x) nextstate = S1;
endcase
*Xilinx Documentation end
endmodule

19 9/18/2020
Verilog: Moore Machine

module mealy_3processes(input clk, input always @(state) // Output Logic


reset, input x, output reg parity); begin
reg state, nextstate; case(state)
S0: parity = 0;
parameter S0=0, S1=1; S1: parity = 1;
endcase
end
always @(posedge clk or posedge reset)
if (reset)
state <= S0; always @(state or x) // Nextstate Logic
else state <= nextstate; begin
nextstate = S0;
case(state)
S0: if(x) nextstate = S1;
S1: if(!x) nextstate = S1;
endcase
end
*Xilinx Documentation endmodule

20 9/18/2020
FSM Example: BCD-to-Excess-3 Code Converter (Mealy)

 BCD-to-Excess-3 Code Converter for manual design


• A serially-transmitted BCD (8421 code) word is to be converted into an
Excess-3 code
 Bin transmitted in sequence, LSB first
• An Excess-3 code word is obtained by adding 3 to the decimal value
and taking the binary equivalent.
 Excess-3 code is self-complementing
Decimal 8-4-2-1 Excess-3
Digit Code Code
(BCD)

0 0000 0011
1 0001 0100 9’s complement
2 0010 0101 can be obtained by
3 0011 0110 inverting
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100
BCD-to-Excess-3 Code Converter (cont.)
Bin = 8 bcd Bout = 8Excess-3
LSB MSB MSB
Bin Bout
0 0 0 1 Excess-3
Code
t Converter 1 1 0 1 t

1 0 0 0 clk
+
0 0 1 1
1 0 1 1
MSB LSB

reset input / output

0/1 1/0
Bin(0) S_0

1/0
S_1 S_2
Bin(1)
0/1
0/0, 1/1
S_3 S_4
Bin(2) 0/1
0/0, 1/1 1/0
S_5 S_6
Bin(3)
0/0, 1/1 0/1
BCD-to-Excess-3 Code Converter (cont.)
module BCD_to_Excess_3b (B_out, B_in, clk, reset_b);
output B_out;
input B_in, clk, reset_b;
parameter S_0 = 3'b000, // State assignment, which may be omitted
S_1 = 3'b001, // If omitted, allow synthesis tool to assign
S_2 = 3'b101,
S_3 = 3'b111,
S_4 = 3'b011,
S_5 = 3'b110,
S_6 = 3'b010,
dont_care_state = 3'bx,
dont_care_out = 1'bx;
reg[2: 0] state, next_state;
reg B_out;
BCD-to-Excess-3 Code Converter (cont.)
always @ (posedge clk or negedge reset_b) // edge-sensitive behavior with NBAs
if (reset_b == 0) state <= S_0; else state <= next_state;

always @ (state or B_in) begin // level-sensitive behavior with blocking assignments


B_out = 0; // initialize all outputs here
case (state) // explicit states
S_0: if (B_in == 0) begin next_state = S_1; B_out = 1; end
else if (B_in == 1) begin next_state = S_2; end // Mealy machine
S_1: if (B_in == 0) begin next_state = S_3; B_out = 1; end
else if (B_in == 1) begin next_state = S_4; end
S_2: begin next_state = S_4; B_out = B_in; end
S_3: begin next_state = S_5; B_out = B_in; end
S_4: if (B_in == 0) begin next_state = S_5; B_out = 1; end
else if (B_in == 1) begin next_state = S_6; end
S_5: begin next_state = S_0; B_out = B_in; end
S_6: begin next_state = S_0; B_out = 1; end
/* default: begin next_state = dont_care_state;
B_out = dont_care_out; end */
endcase
end
endmodule
State Encoding
 The task of assigning a code to the states of an FSM
• Also described as “state assignment”
 Number of flip-flops that are required to represent a
state
• Influence the complexity of the combinational logic for the
next state and outputs
General Guidelines for State Encoding
 If two states have the same next state for a given
input
• Give them logically adjacent state assignments
 Assign logically adjacent state codes to the next
state of a given state
 Assign logically adjacent state codes to the states
that have the same outputs for a given input
 Designers can choose state assignments or allow
synthesis tool to determine state encoding
State Assignment Codes
# Binary One-Hot Gray Johnson

0 0000 0000000000000001 0000 00000000


1 0001 0000000000000010 0001 00000001
2 0010 0000000000000100 0011 00000011
3 0011 0000000000001000 0010 00000111
4 0100 0000000000010000 0110 00001111
5 0101 0000000000100000 0111 00011111
6 0110 0000000001000000 0101 00111111
7 0111 0000000010000000 0100 01111111
8 1000 0000000100000000 1100 11111111
9 1001 0000001000000000 1101 11111110
10 1010 0000010000000000 1111 11111100
11 1011 0000100000000000 1110 11111000
12 1100 0001000000000000 1010 11110000
13 1101 0010000000000000 1011 11100000
14 1110 0100000000000000 1001 11000000
15 1111 1000000000000000 1000 10000000
State Assignment Codes (cont.)
 Binary coded decimal (BCD) format
• Uses the minimal number of flip-flops
• Does not necessarily lead to an optimal realization of the combinational logic used
to decode the next state and output of the machine.
 Example: If a machine has more than 16 states, a binary code will result in a relatively large
amount of next-state logic
 The machine's speed will also be slower than alternative encoding.
 Gray code
• Uses the same number of bits as a binary code
• Has the feature that two adjacent codes differ by only one bit
 Can reduce the electrical noise in a circuit.
 Gray encoding is recommended for machines having more than 32 states because it
requires fewer flip-flops than one-hot encoding, and is more reliable than binary encoding
because fewer bits change simultaneously
 Johnson code
• Has the same property as Gray code
 Two adjacent codes differ by only one bit
• Uses more bits.
 A code that changes by only one bit between adjacent codes will reduce
the simultaneous switching of adjacent physical signal lines in a circuit,
thereby minimizing the possibility of electrical crosstalk.
• These codes also minimize transitions through intermediate states.
One-Hot Encoding (or One-Cold)
 One flip-flop for each state
• Usually more than minimum numbers of flip-flops
• Reduces the decoding logic for next state and output
 Hence offset the extra flip-flops
• One-hot encoding usually does not correspond to the
optimal state assignment
 Combination usage of FF and decoding logic
 Complexity does not increase as states are added
to the machine
• Tradeoff: speed is not compromised by the time required
to decode the state
 Cost: area of the additional flip flops and signal
routing
One-Hot Encoding (or One-Cold) (cont.)
 A one-hot encoding with an “if” statement that tests individual bits
might provide simpler decoding logic than decoding with a “case”
statement
• Because “case” implicitly references all bits
• While “if” only references to individual bits
 In FPGA, saving flip-flops may not beneficial
• Because FF already built inside FPGA
 Even don’t use them, you do not save FF
• If decoding logic requires more logic that are more than on a configurable
logic block (CLB)
 Then on-hot is preferred
 Because no interconnection required between CLBs
• Hence, use one-hots in FPGAs to reduce the use of CLBs
 Note: in large machines, one-hot encoding will have several
unused states, in addition to requiring more registers than
alternative encoding
 Caution: if a state assignment does not exhaust the possibilities of
a code, then additional logic will be required to detect and recover
from transitions into unused states.
Zero Detector
 Asserting its output when a 0 is detected in a
stream of 1s.

31 9/18/2020
Zero Detector: Mealy Machine

32 9/18/2020
Zero Detector: Mealy Machine
//Verilog 2001, 2005 syntax
module Mealy_Zero_Detector ( always @ (state, x_in) // Mealy output
output reg y_out, case (state)
input x_in, clock, reset S0: y_out = 0;
); S1, S2, S3: y_out = ~x_in;
reg [1: 0] state, next_state; endcase
parameter S0 = 2'b00, S1 = 2'b01,
S2 = 2'b10, S3 = 2'b11; endmodule

always @ ( posedge clock, negedge reset)


if (reset == 0) state <= S0;
else state <= next_state;

always @ (state, x_in) // Next state


case (state)
S0: if (x_in) next_state = S1; else next_state = S0;
S1: if (x_in) next_state = S3; else next_state = S0;
S2: if (~x_in) next_state = S0; else next_state = S2;
S3: if (x_in) next_state = S2; else next_state = S0;
endcase
33 9/18/2020
Binary Counter: Moore Machine

34 9/18/2020
Binary Counter: Moore Machine
 Write a Verilog code for Binary Counter (Moore
Machine).

35 9/18/2020

You might also like