Перейти к содержанию
    

Мигание светодиодом

Потихоньку "въезжаю" в ПЛИС. Т. к. общение с преподователем ограничено, просьба покритиковать мой проект.

Суть работы заключается в "моргании" светодиодом. Текст проекта на VHDL:

 

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

 

entity Example13 is

Port ( reset : in STD_LOGIC; -- сигнал сброса reset

clk : in STD_LOGIC; -- входной сигнал генератора

led : out STD_LOGIC); -- выходной сигнал на светодиод

end Example13;

 

architecture Behavioral of Example13 is

signal counter: std_logic_vector (31 downto 0):=(others=>'0');-- объявляем сигнал counter в котором будем считать тики генератора

signal led_temp: std_logic:='0'; -- триггер выходного сигнала led

signal clr_count: std_logic:='0'; -- сброс счетчика при совпадении компаратора

begin

 

count: process(clk, reset, clr_count) -- процесс"СЧЕТЧИК"

begin

if(reset='0' or clr_count='1') then -- если нажата кнопка reset или сигнал сброса счетчика установлен в 1

counter <= (others=>'0'); -- обнуляем счетчик

elsif(rising_edge(clk)) then -- если нет, то по фронту сигнала clk считаем тики генератора

counter <= counter + 1;

end if;

end process;

 

comp: process(counter) -- процесс"КОМПАРАТОР"

begin

if(counter= 5) then -- если счетчик = уставке

clr_count<='1'; -- активируем сигнал сброса счетчика

led_temp<=not led_temp; -- переключаем триггер выходного сигнала

else

clr_count<='0'; -- иначе "на всякий" обнуляем сигнал сброса

end if;

end process;

led<=led_temp; -- соединяем триггер led_temp с выходным сигналом led

end Behavioral;

В принципе работает.

post-69968-1334399895_thumb.png

post-69968-1334399905_thumb.png

И сразу одна "непонятка" если перенести строку led<=led_temp в процесс comp, после строчки led_temp<=not led_temp, то при симуляции получается какая то фигня. Что это такое?

post-69968-1334399564_thumb.png

 

Да и еще. А здесь можно большие куски текста под спойлер сворачивать?

 

post-69968-1334400112_thumb.png

Изменено пользователем Rock87

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

приводите исходники, пользуйтесь тегок code

Счетчик нормально, только сброс асинхронный, если нужен сделать синхронный будет так.

count: process(clk) 
begin 
if (rising_edge(clk)) then
counter <= counter + 1;
elsif (reset='0' or clr_count='1') then 
counter <= (others=>'0'); 
end if;
end process;

led_temp не будет триггером, потому что в списке чувствительности process нет тактового сигнала clk.

Разделите компаратор и выходной триггер.

end_count <= '1' when (counter = 5) else '0'; -компаратор

process(clk) - выходной триггер
begin 
if (rising_edge(clk)) then
led_temp <= end_count;
end if;
end process;

clr_count <= led_temp; - сигнал сброса

 

P.S. пользуйтесь поиском в сети базовых примеров полным полно.

 

Успехов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...