WordPress用のEnlighter Pluginのテストをかねて、冬休みの間に作ったVHDLコードを貼り付けます。
-- LED display demo on BeMicro MAX10
-- Shifting LED pattern every second.
library ieee;
use ieee.std_logic_1164.all;
entity blink_top is
port ( reset : in std_logic;
clock : in std_logic; -- assign 50Mhz clock.
led : out std_logic_vector( 7 downto 0 ) );
end blink_top;
architecture rtl of blink_top is
signal count : integer; -- 50Mhz divider
signal pattern : std_logic_vector( 15 downto 0 ); -- LED internal pattern.
type stateType is ( counting, saturated ); -- for State machine
signal state : stateType ;
begin
process( clock, reset )
begin
if reset = '0' then
-- async reset the internal state and signals;
led <= ( others => '0' );
pattern <= "0000000011111111";
count <= 1;
state <= saturated;
elsif clock'event and clock = '1' then
-- State transition
case state is
-- count up till 50M
when counting =>
count <= count + 1;
if count > 50000000 then
state <= saturated;
end if;
-- output the display pattern to LED, then, rotate the pattern
-- initialize the counter
when saturated =>
led <= pattern( 15 downto 8 ); -- output to LED
pattern <= pattern( 14 downto 0 ) & pattern(15); -- rotate pattern
count <= 1; -- reset counter
state <= counting;
end case;
end if;
end process;
end rtl;