this is my first post on this site, im studying VHDL for my Electronics degree and have to write a program that changes an LED sequence at each clock pulse for one sequence. i think i have cracked it but this is my first time using the VHDL language so im not sure if iv used the most efficient method. my code is.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity REG_LED is
PORT(CLK: IN std_logic; -- CLK input
LEDS: Out std_logic_vector (4 downto 0):= "11111"); -- initialise output
End REG_LED;
ARCHITECTURE behavioral OF REG_LED IS
SIGNAL Temp: std_logic_vector (3 downto 0):= "0000"; -- initailise comparison signal
BEGIN
CLK_0_Process: PROCESS (CLK) -- begin
BEGIN
if Temp <= "0000" Then -- State 0
if rising_edge(CLK) Then
Temp <= "0001" ;
LEDS <= "00001";
END IF;
ELSIF Temp <= "0001" Then -- State 1
if rising_edge(CLK) Then
Temp <= "0010" ;
LEDS <= "00001";
END IF;
ELSIF Temp <= "0010" Then -- State 2
if rising_edge(CLK) Then
Temp <= "0011" ;
LEDS <= "11111";
END IF;
ELSIF Temp <= "0011" Then -- State 3
if rising_edge(CLK) Then
Temp <= "0100" ;
LEDS <= "00000";
END IF;
ELSIF Temp <= "0100" Then -- State 4
if rising_edge(CLK) Then
Temp <= "0101" ;
LEDS <= "11111";
END IF;
ELSIF Temp <= "0101" Then -- State 5
if rising_edge(CLK) Then
Temp <= "0110" ;
LEDS <= "00100";
END IF;
ELSIF Temp <= "0110" Then -- State 6
if rising_edge(CLK) Then
Temp <= "0111" ;
LEDS <= "01010";
END IF;
ELSIF Temp <= "0111" Then -- State 7
if rising_edge(CLK) Then
Temp <= "1000" ;
LEDS <= "10001";
END IF;
ELSIF Temp <= "1000" Then -- State 8
if rising_edge(CLK) Then
LEDS <= "10001";
END IF;
END IF;
END PROCESS ;
END behavioral;
can anyone let me know if there is an alternative route that iv missed?
Many thanks