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 ( inOK : in STD_LOGIC;
- inHAZ : in STD_LOGIC;
- iCLK : in STD_LOGIC;
- inRST : in STD_LOGIC;
- oRED : out STD_LOGIC_VECTOR (1 downto 0);
- oYELLOW : out STD_LOGIC_VECTOR (1 downto 0);
- oGREEN : out STD_LOGIC_VECTOR (1 downto 0));
- end Domaci4;
- architecture Behavioral of Domaci4 is
- type tSTANJE is (IDLE,GREEN,RED,YELLOW,RY,HAZARD,GR,YG,RYG);
- signal sSTANJE : tSTANJE;
- signal sNEXT : tSTANJE;
- signal sCNT : STD_LOGIC_VECTOR(24 downto 0);
- signal sTC,sPOM : STD_LOGIC;
- signal sRED,sGREEN,sYELLOW : STD_LOGIC_VECTOR(1 downto 0);
- begin
- --Next state logic
- process(sTC,sSTANJE,inOK,inHAZ) begin
- case(sSTANJE) is
- when IDLE =>if(inOK = '0') then
- sNEXT <= RED;
- else
- sNEXT <= sSTANJE;
- end if;
- when RED => if(inHAZ = '0') then
- sNEXT <= HAZARD;
- elsif(sTC='1') then
- sNEXT <= RY;
- else
- sNEXT <= RED;
- end if;
- when RY => if(inHAZ = '0') then
- sNEXT <= HAZARD;
- elsif(sTC='1') then
- sNEXT <= YG;
- else
- sNEXT <= RY;
- end if;
- when GREEN => if(inHAZ = '0') then
- sNEXT <= HAZARD;
- elsif(sTC='1') then
- sNEXT <= GR;
- else
- sNEXT <= GREEN;
- end if;
- when YELLOW => if(inHAZ = '0') then
- sNEXT <= HAZARD;
- elsif(sTC='1') then
- sNEXT <= RYG;
- else
- sNEXT <= YELLOW;
- end if;
- when HAZARD => if(inOK = '0') then
- sNEXT <= RED;
- else
- sNEXT <= sSTANJE;
- end if;
- when YG => if(sTC='1') then
- sNEXT <= GREEN;
- else
- sNEXT <= YG;
- end if;
- when GR => if(sTC='1') then
- sNEXT <= YELLOW;
- else
- sNEXT <= GR;
- end if;
- when RYG => if(sTC='1') then
- sNEXT <= RED;
- else
- sNEXT <= RYG;
- end if;
- end case;
- end process;
- --Brojac pola sekunde
- process(inRST,iCLK) begin
- if(inRST = '0') then
- sPOM <= '0';
- sCNT <= (others => '0');
- elsif(iCLK'event and iCLK = '1') then
- if(sCNT = 11999999) then
- sPOM <= not(sPOM);
- sCNT <= (others => '0');
- else
- sCNT <= sCNT + 1;
- end if;
- end if;
- end process;
- --Terminal count
- sTC <= '1' when sCNT = 0 else
- '0';
- --Stanje posle pola sekunde
- process(inRST,iCLK) begin
- if(inRST = '0') then
- sSTANJE <= IDLE;
- elsif(iCLK'event and iCLK = '1') then
- sSTANJE <= sNEXT;
- end if;
- end process;
- --Lampice
- process(sSTANJE,sPOM) begin
- case(sSTANJE) is
- when IDLE => sRED <= "00";
- sGREEN <= "00";
- sYELLOW <= "00";
- when RED => sRED <= "11";
- sGREEN <= "00";
- sYELLOW <= "00";
- when RY => sRED <= "11";
- sGREEN <= "00";
- sYELLOW <= "11";
- when GREEN => sRED <= "00";
- sGREEN <= "11";
- sYELLOW <= "00";
- when YELLOW => sRED <= "00";
- sGREEN <= "00";
- sYELLOW <= "11";
- when HAZARD => if(sPOM = '1') then
- sRED <= "00";
- sGREEN <= "00";
- sYELLOW <= "11";
- else
- sRED <= "00";
- sGREEN <= "00";
- sYELLOW <= "00";
- end if;
- when YG => sRED <= "11";
- sGREEN <= "00";
- sYELLOW <= "11";
- when GR => sRED <= "11";
- sGREEN <= "11";
- sYELLOW <= "00";
- when RYG => sRED <= "11";
- sGREEN <= "11";
- sYELLOW <= "11";
- when others => sYELLOW <= "00";
- sRED <= "00";
- sGREEN <= "00";
- end case;
- end process;
- --Izlazi
- oRED <= sRED;
- oYELLOW <= sYELLOW;
- oGREEN <= sGREEN;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement