Rock87 0 14 апреля, 2012 Опубликовано 14 апреля, 2012 (изменено) · Жалоба Потихоньку "въезжаю" в ПЛИС. Т. к. общение с преподователем ограничено, просьба покритиковать мой проект. Суть работы заключается в "моргании" светодиодом. Текст проекта на 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; В принципе работает. И сразу одна "непонятка" если перенести строку led<=led_temp в процесс comp, после строчки led_temp<=not led_temp, то при симуляции получается какая то фигня. Что это такое? Да и еще. А здесь можно большие куски текста под спойлер сворачивать? Изменено 14 апреля, 2012 пользователем Rock87 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 14 апреля, 2012 Опубликовано 14 апреля, 2012 · Жалоба приводите исходники, пользуйтесь тегок 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. пользуйтесь поиском в сети базовых примеров полным полно. Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться