Advertisement
Kireychik

traffic_light.sv

May 16th, 2020
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module traffic_light (
  2.     input logic clk,
  3.     input logic rst,
  4.     input logic button,
  5.     output logic red,
  6.     output logic yellow,
  7.     output logic green
  8. );
  9.  
  10. logic [5:0] t;
  11.  
  12. enum {S_RED, S_YELLOW_TO_GREEN, S_YELLOW_TO_RED, S_GREEN, S_WAITING} state;
  13.  
  14. always @(posedge clk) begin
  15.     if (rst)
  16.         state <= S_GREEN;
  17.    
  18.     else case (state)
  19.     S_GREEN:
  20.         if (button)
  21.             if (t == 60) begin
  22.                 state <= S_YELLOW_TO_RED;
  23.                 t = 6'h0;
  24.             end
  25.         else
  26.             state <= S_WAITING;
  27.        
  28.     S_WAITING:
  29.         if (t == 60) begin
  30.                 state <= S_YELLOW_TO_RED;
  31.                 t = 6'h0;
  32.         end
  33.    
  34.     S_YELLOW_TO_RED:
  35.         if (t == 3) begin
  36.             state <= S_RED;
  37.             t = 6'h0;
  38.         end
  39.                              
  40.     S_RED:
  41.         if (t == 20) begin
  42.             state <= S_YELLOW_TO_GREEN;
  43.             t = 6'h0;
  44.         end
  45.    
  46.     S_YELLOW_TO_GREEN:
  47.         if(t == 3) begin
  48.             state <= S_GREEN;
  49.             t = 6'h0;
  50.     end
  51.     endcase
  52. end
  53.  
  54. always_ff @(posedge clk)
  55.     if (rst)
  56.         t = 6'h0;
  57.     else if(t != 60)
  58.         t <= t + 1;
  59.        
  60. assign red = (state == S_RED || state == S_YELLOW_TO_GREEN);
  61. assign yellow = (state == S_YELLOW_TO_GREEN || state == S_YELLOW_TO_RED);
  62. assign green = (state == S_GREEN || state == S_WAITING);
  63.  
  64. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement