Advertisement
Guest User

LOAC-CANCELAS

a guest
Nov 18th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // DESCRIPTION: Verilator: Systemverilog example module
  2. // with interface to switch buttons, LEDs, LCD and register display
  3.  
  4. parameter NINSTR_BITS = 32;
  5. parameter NBITS_TOP = 8, NREGS_TOP = 32;
  6. module top(input  logic clk_2,
  7.            input  logic [NBITS_TOP-1:0] SWI,
  8.            output logic [NBITS_TOP-1:0] LED,
  9.            output logic [NBITS_TOP-1:0] SEG,
  10.            output logic [NINSTR_BITS-1:0] lcd_instruction,
  11.            output logic [NBITS_TOP-1:0] lcd_registrador [0:NREGS_TOP-1],
  12.            output logic [NBITS_TOP-1:0] lcd_pc, lcd_SrcA, lcd_SrcB,
  13.              lcd_ALUResult, lcd_Result, lcd_WriteData, lcd_ReadData,
  14.            output logic lcd_MemWrite, lcd_Branch, lcd_MemtoReg, lcd_RegWrite);
  15. logic led;
  16.  
  17. logic unsigned [1:0] clock;
  18. always_ff @(posedge clk_2) begin /* definindo um clock de 1Hz*/
  19.   clock += 1;
  20. end
  21.  
  22.  
  23. logic reset;
  24. logic carro_vem; // sensor na cancela diz se o carro vem
  25. logic carro_sai; // ou se ele sai
  26.  
  27. always_comb  begin
  28.   reset <= SWI[6];
  29.   carro_vem <= SWI[0];
  30.   carro_sai <= SWI[1];
  31. end
  32.  
  33. int estadoAtual;
  34.  
  35. logic entrada_aberta;
  36. logic saida_aberta;
  37.  
  38. parameter q0 = 0, q1 = 1, q2 = 2; // estados
  39. /*
  40. q0 = estado inicial, onde as duas cancelas estão fechadas portanto esperando carros virem
  41.  
  42. q1 = o carro entra e fecha-se a cancela portanto incrementado o contador
  43.  
  44. q2 = o carro sai e fecha-se a cancela portanto decrementando o contador
  45.  
  46. */
  47. int carros_estacionados;
  48.  
  49. always_ff @(posedge clock[1] or posedge reset)
  50. begin
  51.  
  52.     if(reset)
  53.       begin
  54.         estadoAtual <= 0;
  55.         carros_estacionados = 0;
  56.         saida_aberta <= 0;
  57.         entrada_aberta <= 0;
  58.         end
  59.  
  60.     else begin
  61.         unique case(estadoAtual)
  62.          
  63.           q0: begin  
  64.             if(carros_estacionados < 4 && carro_vem) begin
  65.               entrada_aberta <= 1;
  66.               estadoAtual <= q1;
  67.             end
  68.  
  69.             else if(carros_estacionados > 0 && carro_sai) begin
  70.               saida_aberta <= 1;
  71.               estadoAtual <= q2;
  72.             end
  73.            
  74.           end
  75.  
  76.           q1: begin
  77.        
  78.             if(!carro_vem)  begin// se o sensor diz que o carro não está mais na cancela
  79.               carros_estacionados += 1;
  80.               estadoAtual <= q0;
  81.               entrada_aberta <= 0;
  82.             end
  83.  
  84.           end
  85.  
  86.           q2: begin
  87.        
  88.             if(!carro_sai) begin
  89.                 carros_estacionados -= 1;
  90.                 estadoAtual <= q0;
  91.               saida_aberta <= 0;
  92.                
  93.             end
  94.  
  95.           end
  96.         endcase
  97.     end
  98. end
  99.  
  100. always_comb begin
  101.     LED[0] <= entrada_aberta;
  102.     LED[1] <= saida_aberta;
  103.     SEG[7] <= clock[1];
  104.     unique case(carros_estacionados)
  105.             0 : begin SEG[6:0] <= 'b0111111; end
  106.             1 : begin SEG[6:0] <= 'b0000110; end
  107.             2 : begin SEG[6:0] <= 'b1011011; end
  108.             3 : begin SEG[6:0] <= 'b1001111; end
  109.             4 : begin SEG[6:0] <= 'b1100110; end
  110.     endcase
  111. end
  112.  
  113. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement