Advertisement
alien1337

Untitled

Dec 17th, 2019
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.03 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4.  
  5. entity Domaci4 is
  6.  
  7. port(iCLK : in std_logic;
  8.       iRST : in std_logic;
  9.       iOK : in std_logic;
  10.       iHAZ : in std_logic;
  11.       oRED : out std_logic;
  12.       oYELLOW : out std_logic;
  13.       oGREEN : out std_logic;
  14.         );
  15.  
  16. end entity;
  17.  
  18. architecture Behavioral of Domaci4 is
  19.  
  20.     type STATES is (IDLE, RED, RED_YELLOW, GREEN, YELLOW, HAZARD, HAZARD1);
  21.     signal sSTATE : STATES;
  22.     signal sNEXT_STATE : STATES;
  23.     signal sCNT : std_logic_vector(23 downto 0);
  24.     signal sEN : std_logic;
  25.     signal sIZLAZ : std_logic_vector(2 downto 0);
  26.     signal sPRETH : std_logic := '0';
  27.     signal sYELLOW : std_logic;
  28.  
  29. begin
  30.  
  31.     -------------------counter---------------------
  32.     process(iCLK, iRST) begin
  33.    
  34.         if(iRST = '1') then
  35.             sCNT <= (others => '0');
  36.         elsif rising_edge(iCLK) then
  37.             if(sCNT = 6000000) then
  38.                 sCNT <= (others => '0');
  39.             else
  40.                 sCNT <= sCNT + 1;
  41.             end if;
  42.        
  43.         end if;
  44.     end process;
  45.    
  46.     sEN <= '1' when sCNT = "000000000000000000000000" else
  47.              '0';
  48.     ------------------------------------------------
  49.    
  50.     ---------------logika semafora------------------
  51.     process(iOK,iHAZ,sSTATE) begin
  52.         case(sSTATE) is
  53.             when IDLE =>
  54.                             if(iOK = '1') then 
  55.                                 sNEXT_STATE <= RED;
  56.                             else
  57.                                 sNEXT_STATE <= IDLE;
  58.                             end if;
  59.             when RED =>
  60.                             if(iHAZ = '1') then
  61.                                 sNEXT_STATE <= HAZARD;
  62.                             else
  63.                                 sNEXT_STATE <= RED_YELLOW;
  64.                             end if;
  65.             when RED_YELLOW =>
  66.                             if(iHAZ = '1') then
  67.                                 sNEXT_STATE <= HAZARD;
  68.                             else
  69.                                 sNEXT_STATE <= GREEN;
  70.                             end if;
  71.             when GREEN =>
  72.                              if(iHAZ = '1') then
  73.                                  sNEXT_STATE <= HAZARD;
  74.                              else
  75.                                  sNEXT_STATE <= YELLOW;
  76.                              end if;
  77.             when YELLOW =>
  78.                             if(iHAZ = '1') then
  79.                                 sNEXT_STATE <= HAZARD;
  80.                             else
  81.                                 sNEXT_STATE <= RED;
  82.                             end if;
  83.             when HAZARD =>
  84.                               if(iOK = '1') then
  85.                                  sNEXT_STATE <= RED;
  86.                               else 
  87.                                  sNEXT_STATE <= HAZARD1;
  88.                               end if;
  89.             when HAZARD1 =>
  90.                                 if(iOK = '1') then
  91.                                     sNEXT_STATE <= RED;
  92.                                 else
  93.                                     sNEXT_STATE <= HAZARD;
  94.                                 end if;
  95.             when others =>
  96.                             sNEXT_STATE <= sSTATE;
  97.             end case;
  98.     end process;
  99.     -----------------------------------------------
  100.    
  101.     -----------------sledece stanje----------------
  102.     process(iCLK,iRST) begin
  103.    
  104.         if(iRST = '1') then
  105.             sSTATE <= IDLE;
  106.         elsif rising_edge(iCLK) then
  107.             if(sEN = '1') then
  108.                 sSTATE <= sNEXT_STATE;
  109.            
  110.             end if;
  111.         end if;
  112.     end process;
  113.     -----------------------------------------------
  114.    
  115.     oRED <= '1' when sSTATE = RED else
  116.               '1' when sSTATE = RED_YELLOW else
  117.               '0';
  118.    
  119.     process(sPRETH,sSTATE) begin
  120.         if(sSTATE = HAZARD) then
  121.             sYELLOW <= '0';
  122.         elsif(sSTATE = HAZARD1) then
  123.             sYELLOW <= '1';
  124.         elsif(sSTATE = RED_YELLOW) then
  125.             sYELLOW <= '1';
  126.         elsif(sSTATE = YELLOW) then
  127.             sYELLOW <= '1';
  128.         else
  129.             sYELLOW <= '0';
  130.         end if;
  131.     end process;
  132.     oYELLOW <= sYELLOW;
  133.    
  134.     oGREEN <= '1' when sSTATE = GREEN else
  135.                  '0';
  136. end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement