Последние бегущие огоньки заняли суммарно 8 макроячеек.
Сейчас мы проект усложним, введем константы, типа ПЗУ. Размер вырастет.
В 3064 вообще немало влезает, корпусов так около 7-10 "средней" логики.

---------- Post added at 13:08 ---------- Previous post was at 12:49 ----------

А сейчас мы сделаем "Программируемые Огни"
Смотрим код, разбираем его, всё достаточно просто.
Здесь уже используется счетчик импульсов CNT, трехразрядный. Соответственно, он имеет восемь состояний. Сразу за счетчиком у нас стоИт дешифратор, который имеет также восемь "ячеек ПЗУ", содержимое которых определяет, что мы получим на выходных пинах.

Код:
library IEEE; 
use IEEE.std_logic_1164.all; 
use IEEE.std_logic_unsigned.all;  

entity led is
	port(
	CLK		: in std_logic;
	Q		: out std_logic_vector(7 downto 0)
	);
end led;

architecture led_arch of led is 

signal CNT		: std_logic_vector(2 downto 0);
signal Q_reg	: std_logic_vector(7 downto 0);

begin

process(CLK,CNT)
begin
	if (rising_edge(CLK)) then
		CNT <= CNT+1;
		case (CNT) is
			when "000" => Q_reg <= "10000001";
			when "001" => Q_reg <= "01000010";
			when "010" => Q_reg <= "00100100";
			when "011" => Q_reg <= "00011000";
			when "100" => Q_reg <= "00000000";
			when "101" => Q_reg <= "00011000";
			when "110" => Q_reg <= "00100100";
			when "111" => Q_reg <= "01000010";
		end case;
	end if;	
end process;

Q <= Q_reg;

end led_arch;
А вот и диаграмма работы из симулятора:



Красиво? Можно изменять рисунок свечения по своему усмотрению.
Обратите внимание, я здесь и счетчик, и дешифратор засунул в один процесс, тактируемый клоком. Так вполне можно, и даже - лучше. И код читабельней, и вся схема работает полностью синхронно. Если вынести дешифратор из процесса и не тактировать его, то всё будет работать тоже. Но... Возможны проскакивания "иголок" на выходе дешифратора, поскольку счетчик все же не мгновенно меняет состояние своих разрядов.

Это проект занял всего 11 макроячеек.