Advertisement
Guest User

LOACEHMERDA

a guest
Nov 18th, 2018
127
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.     implemente o circuito de controle de um sistema de irrigação de uma plantação
  18.  
  19. */
  20. logic [1:0] clock;
  21.  
  22. always_ff @(posedge clk_2) begin
  23.     clock += 1;
  24. end
  25.  
  26. logic reset;
  27. logic [1:0] chuva;
  28.  
  29. always_comb begin
  30.     reset <= SWI[6];
  31.     chuva <= SWI[1:0]; 
  32. end
  33.  
  34. int estado_atual;
  35. parameter nenhuma = 0, pouca = 1, muita = 3 ,diluvio = 4, irrigandoCacau = 5, irrigandoAmbos = 6, alarmando = 7;
  36. int cont;
  37. int contDiluvio;
  38. int contNenhumaChuva;
  39. logic desable; //disable :-( não eh permitido :C
  40. int tempo; 
  41.  
  42. logic cacao;
  43. logic caju;
  44. logic alarme;
  45.  
  46. always_ff @(posedge clock[1] or posedge reset) begin
  47.     if(reset) begin  //reseta tudo
  48.         estado_atual = nenhuma; cont = 0; contDiluvio = 0; contNenhumaChuva = 0; desable <= 0; tempo = 0; cacao <= 0; caju <= 0;
  49.     end
  50.  
  51.     else begin
  52.         //enable faz com a parte que percebe o estado da chuva seja ativado
  53.         if(!desable)begin // faz a percepção do estado da chuva
  54.             unique case(chuva) // e redireciona o estado atual para um dos abaixo
  55.                 0: begin  estado_atual = nenhuma;  alarme <= 0; end
  56.                 1: begin estado_atual = pouca;  alarme <= 0; end
  57.                 3: begin estado_atual = diluvio; end
  58.             endcase
  59.        
  60.         end
  61.  
  62.         unique case(estado_atual)
  63.  
  64.             nenhuma: begin
  65.                 cont += 1;
  66.                 contNenhumaChuva += 1;
  67.                
  68.                 if(cont == 2) begin
  69.                     estado_atual = irrigandoCacau;
  70.                     desable <= 1; end
  71.  
  72.                 else if(contNenhumaChuva == 3) begin
  73.                     estado_atual = irrigandoAmbos;
  74.                     desable <= 1; end
  75.             end
  76.            
  77.             pouca: begin
  78.                 cont += 1;
  79.                 if(cont == 2) begin
  80.                     estado_atual = irrigandoCacau;
  81.                     desable <= 1; end
  82.             end
  83.            
  84.             muita: begin
  85.                 cacao <= 0;
  86.                 caju <= 0;
  87.                 contNenhumaChuva = 0;
  88.                 cont = 0;
  89.             end
  90.  
  91.  
  92.             diluvio: begin contDiluvio += 1;
  93.                 cacao <= 0;
  94.                 caju <= 0;
  95.                 contNenhumaChuva = 0;
  96.                 cont = 0;
  97.                 if(contDiluvio == 3) begin  // implementar sistema para deligar assim que parar de chover
  98.                 alarme <= 1; end
  99.             end
  100.            
  101.             irrigandoCacau: begin
  102.                 if(cont == 0) begin
  103.                     desable <= 0;
  104.                     cacao <= 0;
  105.  
  106.                 end
  107.                 else begin
  108.                     cacao <= 1;
  109.                     cont -= 1;
  110.                 end
  111.  
  112.             end
  113.  
  114.             irrigandoAmbos: begin
  115.                 if(contNenhumaChuva == 0) begin
  116.                     desable <= 0;
  117.                     cacao <= 0;
  118.                     caju <= 0;
  119.                 end else if(contNenhumaChuva > 1) begin
  120.                     cacao <= 1;
  121.                     contNenhumaChuva -= 1;
  122.                 end else if(contNenhumaChuva == 1) begin
  123.                     caju <= 1;
  124.                     contNenhumaChuva -= 1; 
  125.                 end
  126.             end
  127.         endcase
  128.     end
  129. end
  130.  
  131.  
  132. always_comb begin
  133.     SEG[7] <= clock[1];
  134.     LED[0] <= cacao;
  135.     LED[1] <= caju;
  136.     LED[7] <= alarme;
  137. end
  138. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement