VHDL code position: p184_ex7_6_MEALY2 Note: 1: The code is Mealy state machine code 2: Compare it with example 7_5 ------------------------------------------------------------------------------- LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -- USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MEALY2 IS PORT ( CLK, DATAIN, RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) ); END ENTITY MEALY2; ARCHITECTURE BEHAV OF MEALY2 IS TYPE states IS ( st0, st1, st2, st3, st4 ); SIGNAL STX : states ; SIGNAL Q1 : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN COMREG: PROCESS ( CLK, RESET ) BEGIN IF RESET = '1' THEN STX <= ST0; ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX IS WHEN st0 => IF DATAIN = '1' THEN STX <= ST1; END IF; WHEN st1 => IF DATAIN = '0' THEN STX <= ST2; END IF; WHEN st2 => IF DATAIN = '1' THEN STX <= ST3; END IF; WHEN st3 => IF DATAIN = '0' THEN STX <= ST4; END IF; WHEN st4 => IF DATAIN = '1' THEN STX <= ST0; END IF; WHEN OTHERS => STX <= st0; EBD CASE; END PROCESS COMREG; COM1: PROCESS ( STX, DATAIN, CLK ) VARIABLE Q2 : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN CASE STX IS WHEN st0 => IF DATAIN = '1' THEN Q2 := "10000"; ELSE Q2 := "01010"; END IF; WHEN st1 => IF DATAIN = '0' THEN Q2 := "10111"; ELSE Q2 := "10100"; END IF; WHEN st2 => IF DATAIN = '1' THEN Q2 := "10101"; ELSE Q2 := "10011"; END IF; WHEN st3 => IF DATAIN = '0' THEN Q2 := "11011"; ELSE Q2 := "01001"; END IF; WHEN st4 => IF DATAIN = '1' THEN Q2 := "11101"; ELSE Q2 := "01101"; END IF; WHEN OTHERS => Q2 := "00000"; END CASE; IF CLK'EVENT CLK = '1' THEN Q1 <= Q2; END IF; END PROCESS COM1; Q <= Q1; END ARCHITECTURE BEHAV;