Advertisement
Guest User

LOAC-CATRACA-ONIBUS

a guest
Nov 21st, 2018
144
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.  
  16.  
  17. /*
  18.  
  19.         -- [FUNCIONA? SIM, FUNCIONA. PORÈM OS TIMES COM QUE AS COISAS ACONTECEM SÂO MUITO SINCRONIZADOS] --
  20.  
  21. */
  22.  
  23.  
  24. logic [1:0] clock;
  25. logic reset;
  26. logic stop;
  27. logic passe1;
  28. logic passe2;
  29.  
  30. always_comb begin
  31.     stop <= SWI[7];
  32.     reset <= SWI[6];
  33.     passe1 <= SWI[0];
  34.     passe2  <= SWI[1];
  35. end
  36.  
  37. always_ff @(posedge clk_2) begin
  38.     if(!stop) clock += 1;
  39. end
  40.  
  41.  
  42. int estado_atual;
  43.  
  44. int dinheiro1;
  45. int dinheiro2;
  46. int dinheiroMostrado;
  47. int carrega1;
  48. int carrega2;
  49.  
  50. logic mostrarDinheiro;
  51. logic catraca;
  52. int acionouCATRACA;
  53.  
  54.  
  55. parameter q0 = 0, q1 = 1;
  56.  
  57. always_ff @(posedge clock[1]) begin
  58.     carrega1 = SWI[3:2];
  59.     carrega2 = SWI[5:4];
  60.  
  61.  
  62.     if(reset) begin  // resetar sistema
  63.         catraca <= 0;
  64.         dinheiro1 = 0;
  65.         dinheiro1 = 0;
  66.         dinheiroMostrado = 0;
  67.         carrega1 = 0; carrega2 = 0; mostrarDinheiro <= 0; acionouCATRACA = 0;
  68.     end
  69.  
  70.     else begin
  71.         /*--[PARTE DO CODIGO PARA INCREMENTAR O CONTADOR DE CARGA]--*/
  72.         if(!((carrega1 + dinheiro1) > 5)) begin
  73.             dinheiro1 = dinheiro1 + carrega1; end
  74.         if(!((carrega2 + dinheiro2) > 5)) begin
  75.             dinheiro2 = dinheiro2 + carrega2; end
  76.        
  77.         /*INDENTIFICADOR DE ESTADO*/
  78.         if(catraca) estado_atual = q1;
  79.         else estado_atual = q0;
  80.         /*CASO RESTRITO*/
  81.  
  82.         if(passe1 && passe2) begin
  83.         end // [LINDO NADA AQUI PODEIA EU MELHORAR? CLARO]
  84.         else begin
  85.  
  86.             unique case(estado_atual)
  87.                
  88.                 q0: begin  /* [CATRACA LIVRE] */
  89.  
  90.                     dinheiroMostrado = 0;
  91.                    
  92.                     if(passe1 && (dinheiro1 > 0) && !catraca) begin  //&& CATRACA PARA IMPEDIR QUE DUAS PESSOAS TENTEM PASSAR AO MESMO TEMPO
  93.                         catraca <= 1;
  94.                         acionouCATRACA = 1;
  95.                         estado_atual = q1;
  96.                     end
  97.                    
  98.                     else if(passe2 && (dinheiro2 > 0) && !catraca) begin
  99.                         catraca <= 1;
  100.                         acionouCATRACA = 2; /* O cara vai para catraca*/
  101.                         estado_atual = q1;
  102.                     end
  103.                 end
  104.                 q1: begin // --[A CATRACA FOI ACIONADA] --
  105.                    
  106.                     mostrarDinheiro <= 1;
  107.                    
  108.                     if(acionouCATRACA == 1) begin
  109.                         dinheiroMostrado = dinheiro1; //MOSTRA O DINHEIRO DO CARA
  110.                        
  111.                         if(!passe1) begin // SE O PASSE JA TIVER SIDO REMOVIDO
  112.                             dinheiro1 -= 1;
  113.                             catraca <= 0;
  114.                             estado_atual = q0; // SE O CARA SAIR DA CATRACA, RETORNA PARA O PRIMEIRO ESTADO
  115.                         end
  116.                     end
  117.  
  118.                     else if(acionouCATRACA == 2) begin
  119.                         dinheiroMostrado = dinheiro2;
  120.  
  121.                         if(!passe2) begin
  122.                             dinheiro2 -= 1;
  123.                             catraca <= 0;
  124.                             estado_atual = q0;
  125.                         end
  126.                     end
  127.                 end
  128.             endcase
  129.         end
  130.     end
  131. end
  132.  
  133.  
  134. always_comb begin
  135.     unique case(dinheiroMostrado)
  136.         0 : begin SEG[6:0] <= 'b0000000; end
  137.         1 : begin SEG[6:0] <= 'b0000110; end
  138.         2 : begin SEG[6:0] <= 'b1011011; end
  139.         3 : begin SEG[6:0] <= 'b1001111; end
  140.         4 : begin SEG[6:0] <= 'b1100110; end
  141.         5 : begin SEG[6:0] <= 'b1011011; end   
  142.     endcase
  143.  
  144.  
  145.     LED[0] <= catraca;
  146.     SEG[7] <= clock[1];
  147. end
  148.  
  149.  
  150. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement