Este código es un ejemplo de una máquina de estado en Verilog y puede ser usado en la placa de FPGA Mojo.
El código enciende uno de los 8 LEDs a la vez en el Mojo. Los LED cambian automáticamente a 1Hz.
module LED_state_machine2(
input clk, // reloj de 50MHz
input rst_n, // entrada de botón reset
input cclk, // reloj del microcontrolador AVR
output reg[7:0]led, // salida a 8 LEDs en tarjeta
// las siguientes conexiones son para el microcontrolador en el Mojo
output spi_miso, // conexiones SPI para AVR
input spi_ss,
input spi_mosi,
input spi_sck,
output [3:0] spi_channel, // AVR selección de canal
input avr_tx, // AVR Tx => FPGA Rx
output avr_rx, // AVR Rx => FPGA Tx
input avr_rx_busy // AVR Rx buffer lleno
);
// sólo para Mojo. asignar alta impedancia si pines no son usados.
assign spi_miso = 1'bz;
assign avr_rx = 1'bz;
assign spi_channel = 4'bzzzz;
reg [25:0] count; // crea registros para contador
reg clk2;
reg [2:0] state=0; // crea 8 registros para estados
wire rst = ~rst_n; // conecta botón de reinicio a registro rst
// divisor de reloj 50MHz a 1Hz
always@(posedge clk)
begin
if(count==26'd25000000) // cuenta 25M ciclos de clk begin // cambia clk2 a alto o bajo
count<=0;
clk2 <= ~clk2;
end
else
begin
count<=count+1;
end
end
// inicio de máquina de estado
always@(posedge clk2) // máquina cambia a 1Hz
begin // con transición de clk2
if(rst) //
state <= 3'd0; // volver a estado 0 si rst es presionado
else //
begin // comenzar secuencia de máquina de estado
case(state)
3'd0: begin
led[7:0]<=8'b0000_0001; // sólo led[1] encendido
state <= 3'd1; // salta a estado 3'd1
end
3'd1: begin
led[7:0]<=8'b0000_0010;
state <= 3'd2;
end
3'd2: begin
led[7:0]<=8'b0000_0100;
state <= 3'd3;
end
3'd3: begin
led[7:0]<=8'b0000_1000;
state <= 3'd4;
end
3'd4: begin
led[7:0]<=8'b0001_0000;
state <= 3'd5;
end
3'd5: begin
led[7:0]<=8'b0010_0000;
state <= 3'd6;
end
3'd6: begin
led[7:0]<=8'b0100_0000;
state <= 3'd7;
end
3'd7: begin
led[7:0]<=8'b1000_0000;
state <= 3'd0; // volver a estado 0
end
default: state <= 3'b0;
endcase
end
end
endmodule
No comments:
Post a Comment