courses:system_design:synthesis:finite_state_machines_and_vhdl:moore

FSM: Moore

Moore State Circuit

  • The output vector is a function of the state vector: Y = f(S)

Three Processes

architecture RTL of MOORE is
   ...
begin
  REG: -- Clocked Process
 
  CMB: -- Combinational Process with Next State Logic
 
 OUTPUT: process (STATE)
    begin
        -- Output Logic
    end process OUTPUT;
end RTL ;
output logic

Notes

Here, an example of a Moore machine is shown.

The value of the output vector is a function of the current state.

This is the reason for the second logic block in the block diagram, located after the storing elements. This logic block holds the hardware which is needed to calculate the output values out of the current state of the automaton.

In the VHDL source code, this logic is implemented with an own combinational process.

As the value of the output vector depends on the current value of the state vector, only, no other signals appear in the sensitivity list of the process.

Moore State Graph

architecture RTL of FSM_Moore is
  subtype STATE_TYPE is
    std_ulogic_vector(1 downto 0);
  constant START  : STATE_TYPE := "00";
  constant MIDDLE : STATE_TYPE := "11";
  constant STOP   : STATE_TYPE := "10";
  signal   STATE, NEXTSTATE : STATE_TYPE;
begin
  REG : process (CLK, RESET) begin
    if RESET = '1' then
      STATE <= START;
    elsif (CLK'event and CLK = '1') then
      STATE <= NEXTSTATE;
    end if;
  end process REG;
 
  CMB : process (A, B, STATE) begin
     NEXTSTATE <= STATE;
    case STATE IS
      when START =>
        if (A nor B) = '1' then
          NEXTSTATE <= MIDDLE;
        end if;
      when MIDDLE =>
        if (A and B) = '1' then
          NEXTSTATE <= STOP;
        end if;
      when STOP =>
        if (A xor B) = '1' then
          NEXTSTATE <= START;
        end if;
      when others =>
        NEXTSTATE <= START;
    end case;
  end process CMB;
  -- concurrent signal assignments 
  -- for output
  Y <= '1' when STATE = MIDDLE
       else '0';
  Z <= '1' when STATE = MIDDLE or
       STATE = STOP else '0';
end architecture RTL;

Notes

Again, the bubble diagram and the corresponding VHDL code are shown; this time for a Moore automaton.

The difference to the Medvedev automaton can be recognized in the difference between the state encoding and the corresponding values for the output vector.

Both values are specified in the bubbles. The values for the output vector (Y, Z) are the same as in the Medvedev automaton. The state encoding is again based upon a binary code.

In the VHDL source code, the output logic is implemented via separate concurrent signal assignments. One can see that the output values are calculated out of the state vector values.

Moore Waveform

  • (Y,Z) changes simultaneously with STATE ⇒ Moore machine

Notes

Again, the characteristics of the Moore automaton can be seen clearly in the waveform.

The values of the output vector change simultaneously with the values of the state vector. But this time the values of the output vector differ from those of the state vector.


Chapters of System Design > Synthesis > Finite State Machines and VHDL