Advertisement
filip710

traffic_light_control.vhd

Nov 20th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.91 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3.  
  4. entity traffic_light_CNTRL is
  5.     --TO DO 1 -> deklarirati ulaz "clk" (STD_LOGIC) i izlaze "segment" i "display" (STD_LOGIC_VECTOR) veličine 8 i 4 bita
  6.     Port (
  7.             clk: in std_logic;
  8.             segment: out STD_LOGIC_VECTOR(7 DOWNTO 0);
  9.             display: out STD_LOGIC_VECTOR(3 DOWNTO 0);
  10.         );
  11. end traffic_light_CNTRL;
  12.  
  13. architecture Behavioral of traffic_light_CNTRL is
  14.  
  15.     --TO DO 2 -> definirati konstante "timeR", "timeRY", "timeG", "timeY" i "timeMAX" tipa integer te im pridružiti odgovarajuće vrijednosti
  16.     constant timeR: integer := 5;
  17.     constant timeRY: integer := 1;
  18.     constant timeG: integer := 4;
  19.     constant timeY: integer := 2;
  20.     constant timeMAX: integer := 12; -- ???? nisam siguran
  21.    
  22.     --TO DO 3 -> definirati korisnički tip podataka naziva "state" koji može imati vrijednosti "R", "RY", "G" i "Y"
  23.     TYPE state IS (R, RY, G, Y);
  24.  
  25.     --TO DO 4 -> deklarirati signale "current_state" i "next_state" koji su tipa "state"
  26.     SIGNAL current_state, next_state: state;
  27.    
  28.     --TO DO 5 -> deklarirati signal "clk_div" koji je tipa STD_LOGIC
  29.     SIGNAL clk_div: STD_LOGIC;
  30.  
  31.     --TO DO 6 -> deklarirati signal "time_temp" koji je tipa integer i ima može poprimiti vrijednosti u rasponu od 0 do "timeMAX"
  32.     SIGNAL time_temp: integer range 0 to timeMAX;
  33.  
  34. begin
  35.  
  36.     --TO DO 7 -> signalu "display" pridružiti vrijednost tako da se svjetla semafora prikazuju na pokazniku AN0
  37.     display <= "1110";
  38.    
  39.     --TO DO 8 -> instancirati generički djelitelj frekvencije na način da od ulaznog singala takta kreira signal takta frekvencije 1 Hz
  40.    
  41.    
  42.     ----Lower section of FSM----
  43.     process(clk_div)
  44.         --TO DO 9 -> deklarirati varijablu "counter" koja može poprimiti vrijednosti u intervalu 0 do "timeMAX"
  45.        
  46.         variable counter: integer range 0 to timeMAX;
  47.     begin
  48.         --TO DO 10 -> na rastući brid signala takta "clk_div" povećati varijablu "counter" za 1
  49.         if(clk_div'event and clk_div='1') then     
  50.             counter := counter + 1;
  51.         --TO DO 11 -> ako varijabla "counter" ima vrijednost "time_temp" onda signalu "current_state" pridružiti vrijednost signala "next_state", a varijablu "counter" resetirati na 0
  52.             if (counter = time_temp) then
  53.                 current_state <= next_state;
  54.                 counter := 0;
  55.                
  56.             end if;
  57.         end if;
  58.     end process;
  59.    
  60.     ----Upper section of FSM----
  61.     process(current_state)
  62.     begin
  63.         case current_state is
  64.         --TO DO 12 -> u ovisnosti o vrijednosti signala "current_state" signalima "segment", "time_temp" i "next_state" pridružiti odgovarajuće vrijednosti
  65.             when  state0 =>
  66.                 segment <= "01111111";
  67.                 time_temp <= timeR;
  68.                 next_state <= state1;
  69.             when state1 =>
  70.                 segment <= "01111101";
  71.                 time_temp <= timeRY;
  72.                 next_state <= state2;
  73.             when  state2 =>
  74.                 segment <= "11101111";
  75.                 time_temp <= timeG;
  76.                 next_state <= state3;
  77.             when  state3 =>
  78.                 segment <= "11111101";
  79.                 time_temp <= timeY;
  80.                 next_state <= state0;
  81.         end case;
  82.     end process;
  83.  
  84. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement