FSM Design
FSM Design
FSM Design
1. MEALY Machine: MEALY circuits are named after G. H, Mealy, one of the leading
personalities in designing digital systems. The basic property of Mealy circuits is that the
output is a function of the present input conditions and the present state (PS) of the
circuit.
2. MOORE Machine: MOORE circuits are named after E. F. Moore, another leading
personality in designing digital systems. The basic property of Moore circuits is that the
output is strictly a function of the present state (PS) of the circuit.
Most of the digital systems use either Moore or Mealy machine but both machines also can be
used together. In initial days of digital system design when HDL languages are not discovered,
Mealy or Moore machines are realized using K-Map optimization technique. The K-map
optimization technique provides an optimized solution but it is a rigorous and lengthy process.
On the contrary HDL provides an easy solution to the design of FSMs by saving design time. In
this tutorial we will discuss design of some of the digital systems using both Mealy and Moore
machine. We will end up with a comparison between these two machines.
Sequence detector is good example to describe FSMs. It produces a pulse output whenever it
detects a predefined sequence. In this tutorial we have considered a 4-bit sequence “1010”. The
first step of an FSM design is to draw the state diagram. The sequence detectors can be of two
types: with overlapping and without overlapping. For example consider the input sequence as
“11010101011”. Then in „without overlapping‟ style the output y will be “00001000100” and the
output y in „with overlapping‟ style will be “00001010100”. The „with overlapping‟ style also
considers the overlapping sequences. The state diagram of the “1010” sequence detector using
Mealy machine in „without overlapping‟ style is shown below.
2
The drawing of the correct state diagram is very crucial in designing FSMs. Though there is no
fixed rule of drawing state diagrams but some comments can be made. In present state S 0, if
input is „1‟ then the next state is S1 and if input „0‟ then the next state is the current state. It is
similar for present state S1. In present state S2 if there is a false bit, the next state is S0 and in
present state S3 if there is a false bit, the next state is S1. From the above statement it can be said
that if there is a false input, the next state will be the nearest similar state. It is to remember that
for any combinations we have to reach the branch where output is „1‟. For example consider
input sequence (din) as “011010”. The sequence of next states will be “S0S1S1S2S3S0”.
The „1010‟ sequence detector using Mealy machine without overlapping is realized using
Verilog. The Verilog code is given below.
input din;
input clk;
input reset;
output reg y;
S1 = 2'b01,
S2 = 2'b10,
S3 = 2'b11;
3
begin
case (cst)
begin
nst = S1;
y=1'b0;
end
else
begin
nst = cst;
y=1'b0;
end
begin
nst = S2;
y=1'b0;
end
else
begin
y=1'b0;
nst = cst;
end
begin
4
nst = S3;
y=1'b0;
end
else
begin
nst = S0;
y=1'b0;
end
begin
nst = S0;
y=1'b1;
end
else
begin
nst = S1;
y=1'b0;
end
endcase
end
always@(posedge clk)
begin
if (reset)
else
end
endmodule
The optimized logic architecture for „1010‟ sequence detector without overlapping using Mealy
Machine is shown below. Here instead of giving the RTL schematic we have given the K-map
optimized block diagram for better understanding.
Figure 3: State diagram for „1010‟ sequence detector using Mealy machine (with overlapping)
The Verilog implementation of this FSM can be found in Verilog file in the download section.
The same „1010‟ sequence detector is designed also in Moore machine to show the differences.
The state diagrams for „1010‟ sequence detector with overlapping and without overlapping are
shown below.
Figure 4: State diagram for „1010‟ sequence detector using Moore machine (without
overlapping)
7
Figure 5: State diagram for „1010‟ sequence detector using Moore machine (with overlapping)
The Moore machine can be designed same way as Mealy machine using Verilog. Only
difference is that in case of Moore machine there are 5 states. Instead of output branch, there is a
output state in case of Moore Machine. The objective is to reach the output state from any state.
The Verilog codes for Moore implementations can be found in Verilog file in Download section.
The logic diagram is shown below for „1010‟ sequence detector without overlapping.
Figure 5: Block diagram for „1010‟ sequence detector using Moore machine (without
overlapping)
8
A comparison can be drawn between Figure 3 and Figure 5. In Figure 3, which is the block
diagram, of a Mealy machine, output depends on input and the current states or output of the
flip-flops. Whereas in Figure 5, which is the block diagram of a Moore machine, output is
function of only the present states or output of the flip-flops. And also there is an extra flip-flop
used in case of Moore Machine.
Serial Adder:
Serial adder design using FSM is a popular design which is frequently used in literature. Here in
this tutorial we will design a serial adder using Mealy machine. The state diagram for the serial
full adder is shown below. There are two states defined based on carry. The state S0 is for carry
equal to zero and S1 is for carry equal to 1.
The state diagram can be understood clearly from the truth table of full adder which is shown
below.
module serial_add(a,b,cin,reset,clk,sum,nst);
input a,b,cin;
input clk;
input reset;
reg cst;
parameter S0 = 1'b0,
S1 = 1'b1;
begin
case (cst)
S0 : begin
sum=a^b;
if(a&b)
nst = S1;
end
S0 : begin
sum=~(a^b);
if(~a&~b)
nst = S0;
10
end
endcase
end
always@(posedge clk)
begin
if (reset)
else
end
endmodule
Vending Machine is a practical example where FSM is used. The ticket dispatcher unit at the
stations, the can drinks dispatcher at the shops are some examples of Vending machines. Here in
this tutorial we will try to understand a simple Vending machine which dispatches a can of coke
after deposition of 15 rupees. The machine has only one hole to receive coins that means
customers can deposit one coin at a time. Also the machine receives only 10 (T) or 5 (F) rupee
coin and it doesn‟t give any change. So the input din can take values like
1. 10 + 5 = 15
2. 5 + 10 = 15
3. 5 + 5 + 5 = 15
11
If more money is deposited than 15 then the machine will be on the same state asking the
customer to deposit right amount. The state diagram for the vending machine is shown below.
The PS/NS and output table for the Vending machine problem discussed above is shown below.
module vending(T,F,reset,clk,y);
output reg y;
input T,F;
12
input clk;
input reset;
parameter S0 = 2'b00,
S1 = 2'b01,
S2 = 2'b10,
S3 = 2'b11;
begin
case (cst)
begin
nst = S0;
y=1'b0;
end
begin
nst = S1;
y=1'b0;
end
begin
nst = S2;
13
y=1'b0;
end
begin
nst = S1;
y=1'b0;
end
begin
nst = S2;
y=1'b0;
end
begin
nst = S3;
y=1'b1;
end
begin
nst = S2;
y=1'b0;
end
begin
nst = S3;
14
y=1'b1;
end
begin
nst = S2;
y=1'b0;
end
begin
nst = cst;
y=1'b0;
end
begin
nst = S1;
y=1'b0;
end
begin
nst = S2;
y=1'b0;
end
endcase
end
always@(posedge clk)
begin
if (reset)
else
end
endmodule
Note: To avoid the glitches in Mealy machine, registered Mealy machine or synchronous
Mealy or really Moore is used. Synchronous Mealy machines are nothing but a Moore machine
without output state decoder.