реклама на сайте
подробности

 
 
> Устройство мигания светодиодов (VHDL)
lyzifer
сообщение Jul 13 2017, 11:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-07-17
Пользователь №: 98 133



Устройство моргания 4-мя светодиодами.По сути,программа очень простая.Но у меня в итоге светодиоды "бегают" (т.е. загорелся первый,потом сразу же следующий с частотой 1 Гц).А мне нужно чтобы диод загорелся,потух,а только потом,через 1 с, следующий. Заранее благодарен.
вот реализация и временная диаграмма:

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

entity LED is
port( CLK : in std_logic;
L_D : out std_logic_vector(3 downto 0)); -- поправил у меня 4 светодиода подключены
end LED;

architecture A_LED of LED is
signal counter : std_logic_vector(20 downto 0):= (others => '0');
signal LED_temp : std_logic_vector(3 downto 0) := (0 => '1',others =>'0'); -- поправил на 4 светодиода
signal res : std_logic := '0';
begin
count : process(CLK,res)
begin
if(res = '1') then
counter <= (others => '0');
elsif(rising_edge(CLK)) then
counter <= counter +1;
end if;
end process;

L : process(counter)
begin
if(counter = 2000000) then
res <= '1';
LED_temp <= LED_temp(2 downto 0) & LED_temp(3);
-- вращаю выходной вектор по кругу налево, постоянно смещая на 1 разряд
else
res <= '0';
end if;
end process;

L_D <= led_temp; -- выдаю информацию из регистров в порт

end A_LED;


На выходе получаю



а надо:




Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tausinov
сообщение Jul 13 2017, 13:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Ввести дополнительный сигнал
signal phase : std_logic;

По каждому превышению счетчиком порога делать
phase <= not(phase);
И соответственно сдвигать регистр LED_temp только при нуле или при единице.

А дальше останется 1 if добавить.

if (phase = '0') then
LD <= (others => '0');
else
LD <= LED_temp;
end if;
Go to the top of the page
 
+Quote Post
lyzifer
сообщение Jul 13 2017, 14:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-07-17
Пользователь №: 98 133



Цитата(Tausinov @ Jul 13 2017, 16:51) *
Ввести дополнительный сигнал
signal phase : std_logic;

По каждому превышению счетчиком порога делать
phase <= not(phase);
И соответственно сдвигать регистр LED_temp только при нуле или при единице.

А дальше останется 1 if добавить.

if (phase = '0') then
LD <= (others => '0');
else
LD <= LED_temp;
end if;


Блин,видимо я не оч догоняю,как правильно добавить в код...((ошибку выдаёт на выходе при моделировании...
Покажи,плиииииз, как правильно.заранее благодарен!!
Код
signal counter : std_logic_vector(22 downto 0):= (others => '0');
signal LED_temp : std_logic_vector(3 downto 0) := (0 => '1',others =>'0');
signal res : std_logic := '0';
signal phase : std_logic;
begin
  count : process(CLK,res)
  begin
    if(res = '1') then
      counter <= (others => '0');
    elsif(rising_edge(CLK)) then
      counter <= (counter + 1);
    end if;
  end process;
L : process(counter)
  begin
    if(counter = 5000000) then
      res <= '1';
    LED_temp <= LED_temp(2 downto 0) & LED_temp(3);
    phase <= not(phase);
   else
      res <= '0';
    end if;
  end process;
  
G: process (phase)
begin
if (phase = '0') then
L_D <= (others => '0');
else
L_D <= LED_temp;
end if;
end process;

L_D <= led_temp; --  сигнал из регистров в порт
end A_LED;
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Jul 13 2017, 15:18
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(lyzifer @ Jul 13 2017, 17:32) *
Блин,видимо я не оч догоняю,как правильно добавить в код...((ошибку выдаёт на выходе при моделировании...
Покажи,плиииииз, как правильно.заранее благодарен!!


Код
signal res      : std_logic                     := '0';
signal phase    : std_logic                     := '0';
signal LED_temp : std_logic_vector( 3 downto 0) := (0 => '1', others =>'0');
signal counter  : std_logic_vector(22 downto 0) := (others => '0');

begin
  count : process(CLK, res)
  begin
    if(res = '1') then
      counter <= (others => '0');
    elsif(rising_edge(CLK)) then
      counter <= (counter + 1);
    end if;
  end process;

  L : process(counter)
  begin
    if(counter = 5000000) then
      phase <= not(phase);

      if (phase = '1') then
        res <= '1';
        LED_temp <= LED_temp(2 downto 0) & LED_temp(3);
      else
        res <= '0';
      end if;
    else
      res <= '0';
    end if;
  end process;
  
  G: process(phase)
  begin
    if (phase = '0') then
      L_D <= (others => '0');
    else
      L_D <= LED_temp;
    end if;
  end process;
  
end A_LED;


Ну и по-хорошему, счетчик можно обнулять синхронно по сравнению с верхним порогом, а не делать отдельный сигнал, применяемый асинхронно.

Сообщение отредактировал Tausinov - Jul 13 2017, 15:28
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- lyzifer   Устройство мигания светодиодов (VHDL)   Jul 13 2017, 11:52
- - iosifk   Цитата(lyzifer @ Jul 13 2017, 14:52) Устр...   Jul 13 2017, 11:58
|- - lyzifer   Цитата(iosifk @ Jul 13 2017, 14:58) Это з...   Jul 13 2017, 12:02
|- - lyzifer   Цитата(Tausinov @ Jul 13 2017, 18:18) Вс...   Jul 13 2017, 15:32
- - Tausinov   Дизайн: Кодlibrary ieee; use ieee.std_logic_1164...   Jul 13 2017, 15:58
|- - lyzifer   Цитата(Tausinov @ Jul 13 2017, 18:58) о...   Jul 13 2017, 18:23
|- - Maverick   lyzifer, это не программа, а описание цифровой схе...   Jul 13 2017, 18:37
- - Stewart Little   Цитата(lyzifer @ Jul 13 2017, 14:52) А мн...   Jul 13 2017, 16:17
|- - Tausinov   Цитата(Stewart Little @ Jul 13 2017, 19:1...   Jul 13 2017, 16:26
|- - lyzifer   Цитата(Tausinov @ Jul 13 2017, 19:26) ЕЕ...   Jul 14 2017, 07:41
|- - AVR   Цитата(lyzifer @ Jul 14 2017, 10:41) ЕЕЕЕ...   Jul 14 2017, 08:08
|- - lyzifer   Цитата(AVR @ Jul 14 2017, 11:08) Будет ли...   Jul 14 2017, 08:57
- - AVR   Вопрос автору темы: обязательно ли VHDL? Видя это ...   Jul 14 2017, 06:24
- - Flip-fl0p   А есть ли особый смысл в этих строчках ? Код else ...   Jul 14 2017, 08:44
|- - Tausinov   Цитата(Flip-fl0p @ Jul 14 2017, 11:4...   Jul 14 2017, 09:16
|- - lyzifer   Цитата(Tausinov @ Jul 14 2017, 12:16) Обе...   Jul 14 2017, 09:59
||- - Tausinov   Цитата(lyzifer @ Jul 14 2017, 12:59) Я И ...   Jul 14 2017, 10:36
|||- - lyzifer   Цитата(Tausinov @ Jul 14 2017, 13:36) Ва...   Jul 17 2017, 12:08
|||- - Tausinov   Что-то странное вы пытаетесь сделать, если честно....   Jul 17 2017, 12:42
|||- - lyzifer   Цитата(Tausinov @ Jul 17 2017, 15:42) Что...   Jul 17 2017, 12:45
|||- - lyzifer   Цитата(Tausinov @ Jul 17 2017, 15:42) Все...   Jul 17 2017, 14:20
||- - iosifk   Цитата(lyzifer @ Jul 14 2017, 12:59) Я И ...   Jul 14 2017, 10:40
||- - Огурцов   Цитата(iosifk @ Jul 14 2017, 10:40) цель ...   Jul 15 2017, 04:20
||- - iosifk   Цитата(Огурцов @ Jul 15 2017, 07:20) цель...   Jul 15 2017, 14:11
|- - sonycman   Цитата(Tausinov @ Jul 14 2017, 13:16) На ...   Jul 14 2017, 10:45
|- - AVR   Цитата(sonycman @ Jul 14 2017, 13:45) Не ...   Jul 14 2017, 10:47
||- - Maverick   Цитата(AVR @ Jul 14 2017, 13:47) Я просто...   Jul 16 2017, 12:04
|- - yoggy   Цитата(sonycman @ Jul 14 2017, 13:45) ......   Jul 15 2017, 02:45
- - Tausinov   Как-то так, например. Тестбенч : Кодlibrary ieee; ...   Jul 17 2017, 14:59
|- - lyzifer   Цитата(Tausinov @ Jul 17 2017, 17:59) Бл...   Jul 18 2017, 13:52
|- - iosifk   Цитата(lyzifer @ Jul 18 2017, 16:52) Блин...   Jul 18 2017, 13:59
|- - lyzifer   Цитата(iosifk @ Jul 18 2017, 16:59) Два р...   Jul 18 2017, 14:04
- - Tausinov   Один из диодов в начале горит, т.к. регистр инициа...   Jul 18 2017, 15:53
|- - lyzifer   Цитата(Tausinov @ Jul 18 2017, 18:53) Оди...   Jul 18 2017, 18:50
- - AVR   Я не выдержал, моё решение (сам модуль примерно 25...   Jul 18 2017, 19:56
|- - lyzifer   Цитата(AVR @ Jul 18 2017, 22:56) Я не выд...   Jul 19 2017, 07:08
- - Tausinov   Так осталось просто тоже самое переписать на VHDL....   Jul 19 2017, 08:39
|- - lyzifer   Цитата(Tausinov @ Jul 19 2017, 11:39) Так...   Jul 19 2017, 08:45
- - Tausinov   Кодlibrary ieee; use ieee.std_logic_1164.all; ...   Jul 19 2017, 09:31


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016