Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.std_logic_unsigned.all;
- entity Domaci4 is
- port(iCLK : in std_logic;
- iRST : in std_logic;
- iOK : in std_logic;
- iHAZ : in std_logic;
- oRED : out std_logic;
- oYELLOW : out std_logic;
- oGREEN : out std_logic;
- );
- end entity;
- architecture Behavioral of Domaci4 is
- type STATES is (IDLE, RED, RED_YELLOW, GREEN, YELLOW, HAZARD, HAZARD1);
- signal sSTATE : STATES;
- signal sNEXT_STATE : STATES;
- signal sCNT : std_logic_vector(23 downto 0);
- signal sEN : std_logic;
- signal sIZLAZ : std_logic_vector(2 downto 0);
- signal sPRETH : std_logic := '0';
- signal sYELLOW : std_logic;
- begin
- -------------------counter---------------------
- process(iCLK, iRST) begin
- if(iRST = '1') then
- sCNT <= (others => '0');
- elsif rising_edge(iCLK) then
- if(sCNT = 6000000) then
- sCNT <= (others => '0');
- else
- sCNT <= sCNT + 1;
- end if;
- end if;
- end process;
- sEN <= '1' when sCNT = "000000000000000000000000" else
- '0';
- ------------------------------------------------
- ---------------logika semafora------------------
- process(iOK,iHAZ,sSTATE) begin
- case(sSTATE) is
- when IDLE =>
- if(iOK = '1') then
- sNEXT_STATE <= RED;
- else
- sNEXT_STATE <= IDLE;
- end if;
- when RED =>
- if(iHAZ = '1') then
- sNEXT_STATE <= HAZARD;
- else
- sNEXT_STATE <= RED_YELLOW;
- end if;
- when RED_YELLOW =>
- if(iHAZ = '1') then
- sNEXT_STATE <= HAZARD;
- else
- sNEXT_STATE <= GREEN;
- end if;
- when GREEN =>
- if(iHAZ = '1') then
- sNEXT_STATE <= HAZARD;
- else
- sNEXT_STATE <= YELLOW;
- end if;
- when YELLOW =>
- if(iHAZ = '1') then
- sNEXT_STATE <= HAZARD;
- else
- sNEXT_STATE <= RED;
- end if;
- when HAZARD =>
- if(iOK = '1') then
- sNEXT_STATE <= RED;
- else
- sNEXT_STATE <= HAZARD1;
- end if;
- when HAZARD1 =>
- if(iOK = '1') then
- sNEXT_STATE <= RED;
- else
- sNEXT_STATE <= HAZARD;
- end if;
- when others =>
- sNEXT_STATE <= sSTATE;
- end case;
- end process;
- -----------------------------------------------
- -----------------sledece stanje----------------
- process(iCLK,iRST) begin
- if(iRST = '1') then
- sSTATE <= IDLE;
- elsif rising_edge(iCLK) then
- if(sEN = '1') then
- sSTATE <= sNEXT_STATE;
- end if;
- end if;
- end process;
- -----------------------------------------------
- oRED <= '1' when sSTATE = RED else
- '1' when sSTATE = RED_YELLOW else
- '0';
- process(sPRETH,sSTATE) begin
- if(sSTATE = HAZARD) then
- sYELLOW <= '0';
- elsif(sSTATE = HAZARD1) then
- sYELLOW <= '1';
- elsif(sSTATE = RED_YELLOW) then
- sYELLOW <= '1';
- elsif(sSTATE = YELLOW) then
- sYELLOW <= '1';
- else
- sYELLOW <= '0';
- end if;
- end process;
- oYELLOW <= sYELLOW;
- oGREEN <= '1' when sSTATE = GREEN else
- '0';
- end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement