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. El LED encendido
cambia cada vez que el botón de reinicio (Reset) en el Mojo es
presionado.
module LED_state_machine1(
input clk, // reloj de 50MHz
input nRst, // 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 rst; // crea registro para botón
reg [3:0]state=0; // crea registros para estados
always@(posedge clk)
rst <= ~nRst; // connects reset button to rst register
//beginning of state-machine
// inicio de máquina de estado
always@(posedge rst) // máquina transiciona si rst es presionado
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; // saltar a estado 3'd0
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