Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LIBRARY ieee;
- USE ieee.std_logic_1164.all;
- ENTITY light IS
- PORT(sw : in std_logic_vector(1 downto 0);
- --sw(0) - synchroniczny reset
- --sw(1) - wejście w
- key : in std_logic_vector(0 downto 0); -- clock
- ledZ: out std_logic_vector(0 downto 0); -- wyjście z
- ledR: out std_logic_vector(8 downto 0)); --aktualny stan FSM
- END light;
- ARCHITECTURE Behavior OF light IS
- --... deklaracja sygnałów
- TYPE State_type IS (A, B, C, D, E, F, G, H, I);
- SIGNAL ST : State_type; --stan aktualny
- BEGIN
- --...
- PROCESS(sw(0), key, sw(1))
- BEGIN
- if(sw(0) ='1') then ST <= A;
- elsif(key'EVENT and key="1") then
- CASE ST IS
- WHEN A=> IF(sw(1) = '0') THEN
- ST <= B;
- ledR(8 downto 0) <= "000000010";
- ledZ(0) <= '0';
- ELSE ST <= F;
- ledR(8 downto 0) <= "000100000";
- ledZ(0) <= '0';
- END IF;
- WHEN B=> IF(sw(1) = '0') THEN
- ST <= C;
- ledR(8 downto 0) <= "000000100";
- ledZ(0) <= '0';
- ELSE ST <= F;
- ledR(8 downto 0) <= "000100000";
- ledZ(0) <= '0';
- END IF;
- WHEN C=> IF(sw(1) = '0') THEN
- ST <= D;
- ledR(8 downto 0) <= "000001000";
- ledZ(0) <= '0';
- ELSE ST <= F;
- ledR(8 downto 0) <= "000100000";
- ledZ(0) <= '0';
- END IF;
- WHEN D=> IF(sw(1) = '0') THEN
- ST <= E;
- ledR(8 downto 0) <= "000010000";
- ledZ(0) <= '1';
- ELSE ST <= F;
- ledR(8 downto 0) <= "000100000";
- ledZ(0) <= '0';
- END IF;
- WHEN E=> IF(sw(1) = '0') THEN
- ST <= E;
- ledR(8 downto 0) <= "000010000";
- ledZ(0) <= '1';
- ELSE ST <= F;
- ledR(8 downto 0) <= "000100000";
- ledZ(0) <= '0';
- END IF;
- WHEN F=> IF(sw(1) = '1') THEN
- ST <= G;
- ledR(8 downto 0) <= "001000000";
- ledZ(0) <= '0';
- ELSE ST <= B;
- ledR(8 downto 0) <= "000000010";
- ledZ(0) <= '0';
- END IF;
- WHEN G=> IF(sw(1) = '1') THEN
- ST <= H;
- ledR(8 downto 0) <= "010000000";
- ledZ(0) <= '0';
- ELSE ST <= B;
- ledR(8 downto 0) <= "000000010";
- ledZ(0) <= '0';
- END IF;
- WHEN H=> IF(sw(1) = '1') THEN
- ST <= I;
- ledR(8 downto 0) <= "100000000";
- ledZ(0) <= '1';
- ELSE ST <= B;
- ledR(8 downto 0) <= "000000010";
- ledZ(0) <= '0';
- END IF;
- WHEN I=> IF(sw(1) = '1') THEN
- ST <= I;
- ledR(8 downto 0) <= "100000000";
- ledZ(0) <= '1';
- ELSE ST <= B;
- ledR(8 downto 0) <= "000000010";
- ledZ(0) <= '0';
- END IF;
- --...
- -- pozostałe stany
- END CASE;
- end if;
- END PROCESS; --state table
- END Behavior;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement