VHDL Code Examples: Unit Control HLSM and Button Press FSM

Unit Control HLSM

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.NUMERIC_STD.ALL;

entity UnitControl_HLSM is

   port (clk, rst : in std_logic;

         c : in std_logic;

         A : in unsigned(7 downto 0);

         z : out std_logic);

end UnitControl_HLSM;

architecture Behavior of UnitControl_HLSM is

begin

   process(clk)

      type UC_statetype is (UC_Init, UC_GetInput, UC_UnitOn);

      variable UC_State : UC_statetype;   

      variable V : unsigned(7 downto 0);   

   begin

      if (rising_edge(clk)) then

         if (rst = '1') then

            -- Initial state

            UC_State := UC_Init;

         else 

            -- State transitions

            case UC_State is

               when UC_Init =>

                 UC_State := UC_GetInput;

               when UC_GetInput =>

                  if (V > 78) then

                     UC_State := UC_UnitOn;

                  elsif (not(V > 78)) then

                     UC_State := UC_GetInput;

                  end if;

               when UC_UnitOn =>

                  if (c = '1') then

                     UC_State := UC_Init;

                  elsif ((not c) = '1') then

                     UC_State := UC_UnitOn;

                  end if;

orP7zJQ1WSwAAAABJRU5ErkJggg==

               when others =>

                  UC_State := UC_Init;

            end case;

         end if;

         -- State actions

         case UC_State is

            when UC_Init =>

NU8N75UrsMGbCQDfAAYBAwAAOzAIGHDRAwAAAABYhAAAAAAAWIQAAAAAAFiEAAAAAABYhAAAAAAAWIQAAAAAAFiEAAAAAABYhAAAAAAAWIQTgQEAAAAWoQcAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALAIAQAAAACwCAEAAAAAsAgBAAAAALCG9P8DXxxsbIPopOsAAAAASUVORK5CYII=

               V := to_unsigned(0, 8);

               z

            when UC_GetInput =>

               V := V + A;

            when UC_UnitOn => 

               z

            when others =>

               V := to_unsigned(0, 8);

               z          end case;

      end if;

   end process;

end Behavior;

Button Press FSM

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity ButtonPress_FSM is

   port (clk, rst : in std_logic;

         b : in std_logic;

         y : out std_logic);

end ButtonPress_FSM;

architecture Behavior of ButtonPress_FSM is

begin

   process(clk)

      type BP_statetype is (BP_Init, BP_Out1, BP_Out2);

      variable BP_State : BP_statetype;  

   begin

      if (rising_edge(clk)) then

         if (rst = '1') then

            -- Initial state

            BP_State := BP_Init;

         else 

            -- State transitions

            case BP_State is

               when BP_Init =>

                  if ((not b) = '1') then

                     BP_State := BP_Init;

                  elsif (b = '1') then

                     BP_State := BP_Out1;

                  end if;

               when BP_Out1 =>

                  BP_State := BP_Out2;

               when BP_Out2 =>

                  BP_State := BP_Init;

               when others =>

                  BP_State := BP_Init;

            end case;

         end if;

         -- State actions

         case BP_State is

            when BP_Init =>

               y

IL181NRZ7eQv84zxnCpWoziEuSWgJfV729veHtt9+Os7bppV6xYkXYtGlTXKzZKqGVz8HiTRZsMjWFzwFaUGhhoTLOAlJDuFR9BnFJUmkxFYWKMS0dHGzm8+6778afCeH0UrP9O1VkSWo1BnFJUmkxXWTv3r2xAs6EkcOHD8fnCN4vvfRSWLduXfy5rNNSJGkyTk2RJJUWc7ZZzMi4QvqpmcPNLpOdnZ3xYIKKM7YltSor4pKk0qIthZ0mOQ4dOhTncBO+GVdIawqhnEWajAKUpFZjEJcklRbV8IGBgTjmj900Cd1sR89W8R0dHc7YltTSDOKSpNKiNYWpIkwX4WCSCK0o9VvMS1KrMohLkiRJBbCUIEmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiQVwCAuSZIkFcAgLkmSJBXAIC5JkiT960L4P12wTowqqlnDAAAAAElFTkSuQmCC

            when BP_Out1 =>

               y

            when BP_Out2 =>

               y

            when others =>

               y          end case;

      end if;

   end process;

end Behavior;