Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // DESCRIPTION: Verilator: Systemverilog example module
- // with interface to switch buttons, LEDs, LCD and register display
- parameter NINSTR_BITS = 32;
- parameter NBITS_TOP = 8, NREGS_TOP = 32;
- module top(input logic clk_2,
- input logic [NBITS_TOP-1:0] SWI,
- output logic [NBITS_TOP-1:0] LED,
- output logic [NBITS_TOP-1:0] SEG,
- output logic [NINSTR_BITS-1:0] lcd_instruction,
- output logic [NBITS_TOP-1:0] lcd_registrador [0:NREGS_TOP-1],
- output logic [NBITS_TOP-1:0] lcd_pc, lcd_SrcA, lcd_SrcB,
- lcd_ALUResult, lcd_Result, lcd_WriteData, lcd_ReadData,
- output logic lcd_MemWrite, lcd_Branch, lcd_MemtoReg, lcd_RegWrite);
- /*
- implemente o circuito de controle de um sistema de irrigação de uma plantação
- */
- logic [1:0] clock;
- always_ff @(posedge clk_2) begin
- clock += 1;
- end
- logic reset;
- logic [1:0] chuva;
- always_comb begin
- reset <= SWI[6];
- chuva <= SWI[1:0];
- end
- int estado_atual;
- parameter nenhuma = 0, pouca = 1, muita = 3 ,diluvio = 4, irrigandoCacau = 5, irrigandoAmbos = 6, alarmando = 7;
- int cont;
- int contDiluvio;
- int contNenhumaChuva;
- logic desable; //disable :-( não eh permitido :C
- int tempo;
- logic cacao;
- logic caju;
- logic alarme;
- always_ff @(posedge clock[1] or posedge reset) begin
- if(reset) begin //reseta tudo
- estado_atual = nenhuma; cont = 0; contDiluvio = 0; contNenhumaChuva = 0; desable <= 0; tempo = 0; cacao <= 0; caju <= 0;
- end
- else begin
- //enable faz com a parte que percebe o estado da chuva seja ativado
- if(!desable)begin // faz a percepção do estado da chuva
- unique case(chuva) // e redireciona o estado atual para um dos abaixo
- 0: begin estado_atual = nenhuma; alarme <= 0; end
- 1: begin estado_atual = pouca; alarme <= 0; end
- 3: begin estado_atual = diluvio; end
- endcase
- end
- unique case(estado_atual)
- nenhuma: begin
- cont += 1;
- contNenhumaChuva += 1;
- if(cont == 2) begin
- estado_atual = irrigandoCacau;
- desable <= 1; end
- else if(contNenhumaChuva == 3) begin
- estado_atual = irrigandoAmbos;
- desable <= 1; end
- end
- pouca: begin
- cont += 1;
- if(cont == 2) begin
- estado_atual = irrigandoCacau;
- desable <= 1; end
- end
- muita: begin
- cacao <= 0;
- caju <= 0;
- contNenhumaChuva = 0;
- cont = 0;
- end
- diluvio: begin contDiluvio += 1;
- cacao <= 0;
- caju <= 0;
- contNenhumaChuva = 0;
- cont = 0;
- if(contDiluvio == 3) begin // implementar sistema para deligar assim que parar de chover
- alarme <= 1; end
- end
- irrigandoCacau: begin
- if(cont == 0) begin
- desable <= 0;
- cacao <= 0;
- end
- else begin
- cacao <= 1;
- cont -= 1;
- end
- end
- irrigandoAmbos: begin
- if(contNenhumaChuva == 0) begin
- desable <= 0;
- cacao <= 0;
- caju <= 0;
- end else if(contNenhumaChuva > 1) begin
- cacao <= 1;
- contNenhumaChuva -= 1;
- end else if(contNenhumaChuva == 1) begin
- caju <= 1;
- contNenhumaChuva -= 1;
- end
- end
- endcase
- end
- end
- always_comb begin
- SEG[7] <= clock[1];
- LED[0] <= cacao;
- LED[1] <= caju;
- LED[7] <= alarme;
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement