Последние бегущие огоньки заняли суммарно 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 макроячеек.






ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Ответить с цитированием

