Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

"бегущие огни" на VHDL

Чт май 30, 2013 10:47:12

есть плисина с частотой 8 Мгц и вот мне необходимо написать на VHDL схемку "бегущих огней" хотя бы просто - делитель и сдвиговый регистр чтобы бегали без всяких дополнительных примочек...может кто подсказать как это делать ?)
Вложения
Безымянный.png
схемка выглядит вот так..
(30.86 KiB) Скачиваний: 1040

Re: "бегущие огни" на VHDL

Чт май 30, 2013 15:19:32

Код:
signal divier : std_logic_vector ( dofiga downto 0) := (others => '0');
signal beguchka : std_logic_vector (eche_bolshe_dofiga downto 0) := (0=>'1', others =>'0');

process (clk)
   if event'clk and clk='1' then
       divider <= divider + 1;
       if divider = 0 then
            beguchka <= beguchka(0) & beguchka (eche_bolshe_dofiga downto 1);
       end if;
   end if;
end process;
p.s. очередной курсак :))

Re: "бегущие огни" на VHDL

Чт май 30, 2013 18:22:15

uldemir писал(а):
Код:
signal divier : std_logic_vector ( dofiga downto 0) := (others => '0');
signal beguchka : std_logic_vector (eche_bolshe_dofiga downto 0) := (0=>'1', others =>'0');

process (clk)
   if event'clk and clk='1' then
       divider <= divider + 1;
       if divider = 0 then
            beguchka <= beguchka(0) & beguchka (eche_bolshe_dofiga downto 1);
       end if;
   end if;
end process;
p.s. очередной курсак :))

не не курсак ) просто расчетка по предмету ))..это правда все ? )) этот маленький код заставит мои светодиоды бегать ?))

Re: "бегущие огни" на VHDL

Чт май 30, 2013 19:20:03

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

Re: "бегущие огни" на VHDL

Чт май 30, 2013 19:36:15

uldemir писал(а):Понятия не имею. Просто привел пример как пишется делитель и сдвиговый регистр. Огоньки бегать будут. Правда совершенно не понял, какое отношение к вопросу имеет приведённая вами, совершенно не читаемая схема - поэтому её я игнорировал.
Ну и, конечно, я опустил все заголовки и описания.

не совсем понял эту строчку - beguchka <= beguchka(0) & beguchka (eche_bolshe_dofiga downto 1);
также не понял сколько же это дофига )) и что же писать в entity...

Re: "бегущие огни" на VHDL

Чт май 30, 2013 19:43:53

uldemir писал(а):Понятия не имею. Просто привел пример как пишется делитель и сдвиговый регистр. Огоньки бегать будут. Правда совершенно не понял, какое отношение к вопросу имеет приведённая вами, совершенно не читаемая схема - поэтому её я игнорировал.
Ну и, конечно, я опустил все заголовки и описания.

незнаю почему не удалось прочитать схему, преподу понравилась, и работает без сбоев)

Re: "бегущие огни" на VHDL

Чт май 30, 2013 20:18:16

Diprais писал(а):не совсем понял эту строчку - beguchka <= beguchka(0) & beguchka (eche_bolshe_dofiga downto 1);
Это и есть сдвиговый регистр. по фронту имульса (если дофига принять за 5) регистр из состояния 543210 перейдёт в 054321. Т.е. произойдёт сдвиг вправо. Надеюсь, догадаться как написать сдвиг влево особого труда не составит.
Diprais писал(а):незнаю почему не удалось прочитать схему,
Она - мутная и глаза свои портить об неё не собираюсь. Могли бы потрудиться словами описать, что вы там хотите получить. А мой телепатический модуль отключен за не уплату абонентской платы, и догадаться что такое newreg никак не удаётся. И еще, я к этой теме сделал узелок VHDL. Можете почитать другие темы посвященные этому языку.
p.s. Гыыыыыы. обведённый кусок тоже преподу понравился?
Безымянный.png

Re: "бегущие огни" на VHDL

Пт май 31, 2013 09:41:48

uldemir писал(а):
Diprais писал(а):не совсем понял эту строчку - beguchka <= beguchka(0) & beguchka (eche_bolshe_dofiga downto 1);
Это и есть сдвиговый регистр. по фронту имульса (если дофига принять за 5) регистр из состояния 543210 перейдёт в 054321. Т.е. произойдёт сдвиг вправо. Надеюсь, догадаться как написать сдвиг влево особого труда не составит.
Diprais писал(а):незнаю почему не удалось прочитать схему,
Она - мутная и глаза свои портить об неё не собираюсь. Могли бы потрудиться словами описать, что вы там хотите получить. А мой телепатический модуль отключен за не уплату абонентской платы, и догадаться что такое newreg никак не удаётся. И еще, я к этой теме сделал узелок VHDL. Можете почитать другие темы посвященные этому языку.
p.s. Гыыыыыы. обведённый кусок тоже преподу понравился?
Безымянный.png



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

Re: "бегущие огни" на VHDL

Пт май 31, 2013 10:04:23

какие мы обидчивые... А какие еще обидные слова мы знаем?

Дам последний совет. Хороший ответ можно дать только на хороший вопрос. На Ваш вопрос, который был сформулирован для меня понятно, я дал. Но, я не телепат и не ССовец, чтобы догадаться или клещами под пытками добывать дополнительную информацию. В конце-концов это нужно Вам, а не мне. Так что если Вы не способны сформулировать свою проблему, то вы не достойны ответа.

Re: "бегущие огни" на VHDL

Сб июн 01, 2013 08:25:04

uldemir в общем-то прав, опросы надо учиться задавать.
Предлагаю начать с хвоста.
Есть потребность иметь бегущие огни и реализовать их с применением ПЛИС.
О сдвиговом регистре уже написано - хотим 8 светодиодиков включать-выключать, значит в коде значение "дофига" будет равно 7 (т.к. счет идет до нуля).
В этот же регистр надо вписать начальное состояние.
Затем подумать, а как организовать кольцо?
Самый простой вариант - делать мультиплексирование, которое при самом "беге" будет подавать значение с конца в начало или наоборот.
Допустим всю эту махарайку выполнили. Тогда можно подумать "а как быстро должны бежать огоньки?"
Прикинули и вдруг решили, что меняться они должны 1 раз в секунду.
Следующим вопросом станет "а что надо сделать". Ответом станет делитель частоты.
Теперь начинается чистая арифметика. Допустим на ПЛИС подаётся частота 50 МГц, а смену кодов хотим с частотой 1Гц. Значит наш делитель должен поделить в 50 000 000 раз.
Быстренько хватаем калькулятор и набираем значение 50 е+6, затем жмём F5 и получаем код 2FAF080 (можно и F8-считать будет легче). Теперь видно, что нужен делитель в 26 разрядов. Значит параметр "еще больше чем дофига" будет равен 25. Вот теперь описывая синтез надо при достижении этих самых 50 млн, просто один раз сдвинуть регистр сдвига.
Ответить