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);
- logic led;
- logic unsigned [1:0] clock;
- always_ff @(posedge clk_2) begin /* definindo um clock de 1Hz*/
- clock += 1;
- end
- logic reset;
- logic carro_vem; // sensor na cancela diz se o carro vem
- logic carro_sai; // ou se ele sai
- always_comb begin
- reset <= SWI[6];
- carro_vem <= SWI[0];
- carro_sai <= SWI[1];
- end
- int estadoAtual;
- logic entrada_aberta;
- logic saida_aberta;
- parameter q0 = 0, q1 = 1, q2 = 2; // estados
- /*
- q0 = estado inicial, onde as duas cancelas estão fechadas portanto esperando carros virem
- q1 = o carro entra e fecha-se a cancela portanto incrementado o contador
- q2 = o carro sai e fecha-se a cancela portanto decrementando o contador
- */
- int carros_estacionados;
- always_ff @(posedge clock[1] or posedge reset)
- begin
- if(reset)
- begin
- estadoAtual <= 0;
- carros_estacionados = 0;
- saida_aberta <= 0;
- entrada_aberta <= 0;
- end
- else begin
- unique case(estadoAtual)
- q0: begin
- if(carros_estacionados < 4 && carro_vem) begin
- entrada_aberta <= 1;
- estadoAtual <= q1;
- end
- else if(carros_estacionados > 0 && carro_sai) begin
- saida_aberta <= 1;
- estadoAtual <= q2;
- end
- end
- q1: begin
- if(!carro_vem) begin// se o sensor diz que o carro não está mais na cancela
- carros_estacionados += 1;
- estadoAtual <= q0;
- entrada_aberta <= 0;
- end
- end
- q2: begin
- if(!carro_sai) begin
- carros_estacionados -= 1;
- estadoAtual <= q0;
- saida_aberta <= 0;
- end
- end
- endcase
- end
- end
- always_comb begin
- LED[0] <= entrada_aberta;
- LED[1] <= saida_aberta;
- SEG[7] <= clock[1];
- unique case(carros_estacionados)
- 0 : begin SEG[6:0] <= 'b0111111; end
- 1 : begin SEG[6:0] <= 'b0000110; end
- 2 : begin SEG[6:0] <= 'b1011011; end
- 3 : begin SEG[6:0] <= 'b1001111; end
- 4 : begin SEG[6:0] <= 'b1100110; end
- endcase
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement