to Mad_max
Цитата(Mad_max @ Apr 17 2012, 19:08)

Забавный Вы
Сказано же было, что led_temp не триггер в вашем исполнение.
Синтезатор вам тоже самое сказал.
Как решить проблему смотрите в своем предыдущем посте.
По поводу триггера понял, спасибо. По поводу кода, который Вы предложили:
CODE
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Example1 is
Port (
clk : in STD_LOGIC; -- входной сигнал генератора
led : out STD_LOGIC); -- выходной сигнал на светодиод
end Example1;
architecture Behavioral of Example1 is
signal counter: std_logic_vector (31 downto 0):=(others=>'0');-- объявляем сигнал counter в котором будем считать тики генератора
signal led_temp: std_logic:='0'; -- вспомогательный сигнал
signal clr_count: std_logic:='0'; -- сигнал сброса счетчика при совпадении компаратора
signal end_count: std_logic:='0';
begin
count: process(clk, clr_count) -- процесс"СЧЕТЧИК"
begin
if(clr_count='1') then -- если сигнал сброса счетчика установлен в 1
counter <= (others=>'0'); -- обнуляем счетчик
elsif(rising_edge(clk)) then -- если нет, то по фронту сигнала clk считаем тики генератора
counter <= counter + 1;
end if;
end process;
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; -- сигнал сброса
led<=led_temp; -- соединяем led_temp с выходным сигналом led
end Behavioral;
Логика работы этого кода отлична от заданной (мигание светодиодом). К примеру вот результат моей программы:
Вот Ваш вариант
Или я чего-то не понял или неверно изложил? Тогда прошу поправить меня.
На всякий ссылка на
предъидущий постto dsmv
Цитата(dsmv @ Apr 17 2012, 19:13)

Компилятор сказал совершенно правильно - получилась защёлка. Это плохой стиль и компилятор выдал предупреждение. Разумеется его можно игнорировать, если такая конструкция сделана сознательно и все последствия Вам ясны.
Что есть плохого - процесс comp зависит только от counter, и при переключение counter возможны ложные срабатывания. Здесь возможно два варианта - либо добавить ветку else - тогда получаем комбинационную схему. Либо ставим rising_edge( clk ) и получаем синхронный D-триггер. Второй вариант мне нравиться больше.
Попробовал второй вариант.
CODE
comp: process(counter) -- процесс"КОМПАРАТОР"
begin
if(rising_edge(clk)) then
if(counter= 5) then -- если счетчик = уставке
clr_count<='1'; -- активируем сигнал сброса счетчика
led_temp<=not led_temp; -- переключаем вспомогательный сигнал
else
clr_count<='0'; -- иначе "на всякий" обнуляем сигнал сброса
end if;
end if;
end process;
Синтезеатор снял свое предупреждение, спасибо.