Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.56 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. Port ( inOK : in STD_LOGIC;
  7. inHAZ : in STD_LOGIC;
  8. iCLK : in STD_LOGIC;
  9. inRST : in STD_LOGIC;
  10. oRED : out STD_LOGIC_VECTOR (1 downto 0);
  11. oYELLOW : out STD_LOGIC_VECTOR (1 downto 0);
  12. oGREEN : out STD_LOGIC_VECTOR (1 downto 0));
  13. end Domaci4;
  14.  
  15. architecture Behavioral of Domaci4 is
  16.  
  17. type tSTANJE is (IDLE,GREEN,RED,YELLOW,RY,HAZARD,GR,YG,RYG);
  18. signal sSTANJE : tSTANJE;
  19. signal sNEXT : tSTANJE;
  20. signal sCNT : STD_LOGIC_VECTOR(24 downto 0);
  21. signal sTC,sPOM : STD_LOGIC;
  22. signal sRED,sGREEN,sYELLOW : STD_LOGIC_VECTOR(1 downto 0);
  23.  
  24.  
  25. begin
  26. --Next state logic
  27. process(sTC,sSTANJE,inOK,inHAZ) begin
  28. case(sSTANJE) is
  29. when IDLE =>if(inOK = '0') then
  30. sNEXT <= RED;
  31. else
  32. sNEXT <= sSTANJE;
  33. end if;
  34.  
  35. when RED => if(inHAZ = '0') then
  36. sNEXT <= HAZARD;
  37. elsif(sTC='1') then
  38. sNEXT <= RY;
  39. else
  40. sNEXT <= RED;
  41. end if;
  42.  
  43. when RY => if(inHAZ = '0') then
  44. sNEXT <= HAZARD;
  45. elsif(sTC='1') then
  46. sNEXT <= YG;
  47. else
  48. sNEXT <= RY;
  49. end if;
  50.  
  51. when GREEN => if(inHAZ = '0') then
  52. sNEXT <= HAZARD;
  53. elsif(sTC='1') then
  54. sNEXT <= GR;
  55. else
  56. sNEXT <= GREEN;
  57. end if;
  58.  
  59. when YELLOW => if(inHAZ = '0') then
  60. sNEXT <= HAZARD;
  61. elsif(sTC='1') then
  62. sNEXT <= RYG;
  63. else
  64. sNEXT <= YELLOW;
  65. end if;
  66.  
  67. when HAZARD => if(inOK = '0') then
  68. sNEXT <= RED;
  69. else
  70. sNEXT <= sSTANJE;
  71. end if;
  72. when YG => if(sTC='1') then
  73. sNEXT <= GREEN;
  74. else
  75. sNEXT <= YG;
  76. end if;
  77. when GR => if(sTC='1') then
  78. sNEXT <= YELLOW;
  79. else
  80. sNEXT <= GR;
  81. end if;
  82.  
  83. when RYG => if(sTC='1') then
  84. sNEXT <= RED;
  85. else
  86. sNEXT <= RYG;
  87. end if;
  88.  
  89. end case;
  90. end process;
  91.  
  92. --Brojac pola sekunde
  93. process(inRST,iCLK) begin
  94. if(inRST = '0') then
  95. sPOM <= '0';
  96. sCNT <= (others => '0');
  97. elsif(iCLK'event and iCLK = '1') then
  98. if(sCNT = 11999999) then
  99. sPOM <= not(sPOM);
  100. sCNT <= (others => '0');
  101. else
  102. sCNT <= sCNT + 1;
  103. end if;
  104. end if;
  105. end process;
  106.  
  107. --Terminal count
  108. sTC <= '1' when sCNT = 0 else
  109. '0';
  110. --Stanje posle pola sekunde
  111. process(inRST,iCLK) begin
  112. if(inRST = '0') then
  113. sSTANJE <= IDLE;
  114. elsif(iCLK'event and iCLK = '1') then
  115. sSTANJE <= sNEXT;
  116. end if;
  117. end process;
  118.  
  119. --Lampice
  120. process(sSTANJE,sPOM) begin
  121. case(sSTANJE) is
  122. when IDLE => sRED <= "00";
  123. sGREEN <= "00";
  124. sYELLOW <= "00";
  125.  
  126. when RED => sRED <= "11";
  127. sGREEN <= "00";
  128. sYELLOW <= "00";
  129.  
  130. when RY => sRED <= "11";
  131. sGREEN <= "00";
  132. sYELLOW <= "11";
  133.  
  134. when GREEN => sRED <= "00";
  135. sGREEN <= "11";
  136. sYELLOW <= "00";
  137.  
  138. when YELLOW => sRED <= "00";
  139. sGREEN <= "00";
  140. sYELLOW <= "11";
  141.  
  142. when HAZARD => if(sPOM = '1') then
  143. sRED <= "00";
  144. sGREEN <= "00";
  145. sYELLOW <= "11";
  146. else
  147. sRED <= "00";
  148. sGREEN <= "00";
  149. sYELLOW <= "00";
  150. end if;
  151. when YG => sRED <= "11";
  152. sGREEN <= "00";
  153. sYELLOW <= "11";
  154. when GR => sRED <= "11";
  155. sGREEN <= "11";
  156. sYELLOW <= "00";
  157. when RYG => sRED <= "11";
  158. sGREEN <= "11";
  159. sYELLOW <= "11";
  160.  
  161. when others => sYELLOW <= "00";
  162. sRED <= "00";
  163. sGREEN <= "00";
  164. end case;
  165. end process;
  166.  
  167. --Izlazi
  168. oRED <= sRED;
  169. oYELLOW <= sYELLOW;
  170. oGREEN <= sGREEN;
  171.  
  172. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement