RenHao

traffic_light_v2

May 30th, 2013
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module TrafficLights_V2(clk,rst,seg_en,seg,R,Y,G);
  2.  
  3. input clk,rst ;
  4. output reg R,Y,G ;
  5. output reg [3:0]seg_en ;
  6. output [6:0]seg ;
  7.  
  8.  
  9. parameter s1 = 1 ,s2 = 2 , s3 = 3 ;
  10. reg [1:0]state ;
  11. reg [30:0]div ;
  12. reg [7:0]count ;
  13. wire scan_clk ;
  14. reg clk_1Hz ;
  15. wire [3:0]scan_code ;
  16.  
  17. always @(posedge clk or negedge rst)
  18. begin
  19.     if(!rst) begin div <= 0 ; clk_1Hz <= 0 ; end
  20.     else if(div==24999999) begin div <= 0 ; clk_1Hz <= ~clk_1Hz ; end
  21.     else div <= div + 1 ;
  22. end
  23.  
  24. assign scan_clk = div[16] ;
  25. //assign clk_1Hz = div[15] ;
  26.  
  27.  
  28. always @(posedge scan_clk or negedge rst)
  29. begin
  30.     if(!rst) seg_en <= 4'b1110 ;
  31.     else seg_en[3:0] <= {seg_en[0],seg_en[3:1]} ;
  32. end
  33.  
  34. always @(posedge clk_1Hz or negedge rst)
  35. begin
  36.     if(!rst) state <= s1 ;
  37.     else
  38.      case(state)
  39.         s1:
  40.             begin
  41.             R = 0 ;
  42.             if(!rst)count <= 2'h15 ;
  43.             else if(count[3:0]==0) begin count[3:0] <= 9 ; count[7:4] <= 0 ; end
  44.             else if(count==0) state <= s3 ;
  45.             else count <= count - 1 ;
  46.             end
  47.            
  48.         s2:
  49.             begin
  50.             Y = 0 ;
  51.             if(!rst)count <= 2'h05 ;
  52.             else if(count==0) state <= s1 ;
  53.             else count <= count - 1 ;
  54.             end
  55.            
  56.         s3:
  57.             begin
  58.             G = 0 ;
  59.             if(!rst)count <= 2'h10 ;
  60.             else if(count[3:0]==0) begin count[3:0]<=9 ; count[7:4]<=0 ; end
  61.             else if(count==0) state <= s2 ;
  62.             else count <= count - 1 ;
  63.             end
  64.         default:state <= s1 ;
  65.     endcase
  66. end
  67.  
  68. assign scan_code = (seg_en==4'b1110) ? count[3:0] :
  69.                    (seg_en==4'b1101) ? count[7:4] :
  70.                    (seg_en==4'b1011) ? count[3:0] :
  71.                                        count[7:4] ;// 7's en
  72.                    
  73.                    
  74.                    
  75.                    
  76.                    
  77. assign seg[6:0] = (scan_code==4'h0) ? 7'b0000001 :
  78.                   (scan_code==4'h1) ? 7'b1001111 :
  79.                   (scan_code==4'h2) ? 7'b0010010 :
  80.                   (scan_code==4'h3) ? 7'b0000110 :
  81.                   (scan_code==4'h4) ? 7'b1001100 :
  82.                   (scan_code==4'h5) ? 7'b0100100 :
  83.                   (scan_code==4'h6) ? 7'b0100000 :
  84.                   (scan_code==4'h7) ? 7'b0001111 :
  85.                   (scan_code==4'h8) ? 7'b0000000 :
  86.                   (scan_code==4'h9) ? 7'b0000100 :
  87.                   7'b1111111;//7's number
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. endmodule
Advertisement
Add Comment
Please, Sign In to add comment