Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. `timescale 1ns / 1ns
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company: KU Leuven
  4. // Module Name: verkeerslicht
  5. // Project Name: verkeerslicht
  6. // Revision 0.01 - File Created
  7. // Additional notes:
  8. // - Parameter BASE_FREQ is added to speed up simulation
  9. // - Assumption: 2*FREQ <= BASE_FREQ <= 50000000 (default, Xilinx clock)
  10. //////////////////////////////////////////////////////////////////////////////////
  11. module verkeerslicht(
  12. input clk,
  13. input reset,
  14. input voet,
  15. input auto,
  16. output reg hw_g,
  17. output reg hw_o,
  18. output reg hw_r,
  19. output reg zs_g,
  20. output reg zs_o,
  21. output reg zs_r
  22. );
  23. // Parameter om simulatie te kunnen versnellen
  24. parameter BASE_FREQ = 50_000_000; // 50 Mhz Xilinx klok
  25.  
  26. // Gereduceerde klokfrequentie (100 Hz) op 'ce' (clock enable).
  27. // Enkel te gebuiken samen met clk!
  28. parameter FREQ = 100;
  29. wire ce;
  30. prescaler #(.new_freq(FREQ), .old_freq(BASE_FREQ)) maak_ce (clk, reset, ce);
  31.  
  32. // Teller voor lichten
  33. reg [8:0] Q;
  34. reg herstart_teller = 1'b0;
  35. always @(posedge clk, posedge reset) begin
  36. if (reset)
  37. Q <= 0;
  38. else if (ce)
  39. Q <= herstart_teller? 0: Q + 1;
  40. end
  41.  
  42. // Timing lichten: parameters M_HWG, M_ZSG, M_O, M_R
  43. // M_* = maximum tellerwaarde voor *
  44. parameter M_HWG = 400;
  45. parameter M_ZSG = 200;
  46. parameter M_O = 100;
  47. parameter M_R = 100;
  48. // Definitie toestanden
  49. // Kies als reset-toestand een veilige toestand (HW en ZS rood),
  50. // waarbij daarna men zo snel mogelijk naar groen op HW gaat.
  51. parameter A = 3'b000;
  52. parameter B = 3'b001;
  53. parameter C = 3'b010;
  54. parameter D = 3'b011;
  55. parameter E = 3'b100;
  56. parameter F = 3'b101;
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64. reg [2:0] Current_State;
  65. reg [2:0] Next_State;
  66. reg Current_Voet_State;
  67.  
  68.  
  69. // Knop voetgangers
  70. // always @(voet or auto)
  71. // if(voet == 1|| auto ==1)
  72. // Voet_State =
  73.  
  74.  
  75. // State register
  76. always @(posedge clk , posedge reset)
  77. begin
  78. if(reset)
  79. begin
  80. Current_State <= A;
  81. end
  82. else if(ce)
  83. Current_State <= Next_State;
  84. end
  85.  
  86. // Next state logic
  87. always @(Current_State , Q)
  88. if(herstart_teller == 1)
  89. herstart_teller = 0;
  90. else
  91. case(Current_State)
  92. A: if(Q == M_HWG)
  93. begin
  94. Next_State <= B;
  95. hw_g = 0;
  96. hw_o = 1;
  97. zs_r = 1;
  98. herstart_teller = 1;
  99. end
  100. else
  101. begin
  102. Next_State <= A;
  103. hw_g = 0;
  104. hw_o = 0;
  105. hw_r = 0;
  106. zs_g = 0;
  107. zs_o = 0;
  108. zs_r= 0;
  109.  
  110. hw_g = 1;
  111. zs_r = 1;
  112. end
  113. B : if(Q == M_R)
  114. begin
  115. Next_State <= C;
  116. hw_o = 0;
  117. hw_r = 1;
  118. zs_r = 1;
  119. herstart_teller = 1;
  120. end
  121. C : if(Q ==M_R)
  122. begin
  123. Next_State <= D;
  124. hw_r = 0;
  125. zs_r = 0;
  126. hw_r = 1;
  127. zs_g =1;
  128. herstart_teller = 1;
  129. end
  130. D : if(Q == M_ZSG )
  131. begin
  132. Next_State <= E;
  133. hw_r = 1;
  134. zs_g =0;
  135. zs_o = 1;
  136. herstart_teller = 1;
  137. end
  138. E : if(Q == M_R)
  139. begin
  140. Next_State <= F;
  141. hw_r = 1;
  142. zs_o = 0;
  143. zs_r = 1;
  144. herstart_teller = 1;
  145. end
  146. F : if(Q == M_R)
  147. begin
  148. Next_State <= A;
  149. hw_r = 0;
  150. hw_g = 1;
  151. herstart_teller = 1;
  152. end
  153. endcase
  154.  
  155. //output logic
  156.  
  157.  
  158. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement