Opdracht 7: FSM

Voor deze opdracht dien je zelf een Moore-FSM te beschrijven.

Er is een datapad ontworpen dat de een lift aanstuurt. De signalen die het controlepad moet aansturen zijn: move_up, move_down, close_doors en open_doors. Alle vier deze signalen zijn van het type STD_LOGIC. Instructies die gegeven worden, mogen (alle vier) maar 1 klok-periode hoog blijven.

Om de sturing te organiseren zijn een ook een deel ingangs-signalen.

  • door_are_open: Dit signaal is hoog als de deuren VOLLEDIG open zijn.
  • safe_to_ride: Dit signaal is hoog als de deuren dicht zijn en de deuren worden niet aangestuurd om te openen.

Tenslotte zijn er ook nog twee ingangs-vectoren. Beide vectoren zijn one-hot-geëncodeerd (Dit wilt zeggen dat er hoogstens 1 bit ‘1’ kan zijn.)

  • floor_request: Deze vector geeft aan naar welke verdieping de lift zich moet begeven.
  • carriage_at_floor: Deze vector geeft aan naar welke verdieping de lift zich begeeft.
entity fsm is
    generic(
        number_of_floors : natural := 16
    );
    port(
        clock : in STD_LOGIC;
        reset : in STD_LOGIC;
        floor_request : in STD_LOGIC_VECTOR(number_of_floors-1 downto 0);
        carriage_at_floor : in STD_LOGIC_VECTOR(number_of_floors-1 downto 0);
        safe_to_ride : in STD_LOGIC;
        doors_are_open: in STD_LOGIC;
        move_up : out STD_LOGIC;
        move_down : out STD_LOGIC;
        open_doors : out STD_LOGIC;
        close_doors : out STD_LOGIC
    );
end entity fsm;

De breedte van de twee laatst vernoemde vectoren is in te stellen mbv een generic.