Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Погрузитесь в увлекательный мир, где вас ждут уникальные герои, строительство собственной цитадели и захватывающие бои в формате «три в ряд»!  Откройте новые горизонты в жанре РПГ.

Время Героев: Три в ряд RPG

Три в ряд, Мидкорные, Приключения

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
3
Petbar

FPGA, VHDL "взрывают мозг" обычным программистам⁠⁠

1 год назад

Сейчас за пару сек, объясню так, что он перестанет взрываться и наступит просветление.

1) если команды FPGA не привязаны к тактам, можете FPGA воспринимать как обычную (но большую, с множеством ножек) советскую микросхему на логике И ИЛИ НЕ. На вход ножек идут сигналы, на выход тут же их соответствие написано логики.

2) если команды привязаны (скажем, синхронизированы) с тактированием (а тактирование как понимаем это последовательность во времени) то FPGA можем воспринимать как обычный микроконтроллер (хоть и программируемый VHDL ).

Если нужно просчитать сложное вычисление (и хватает ножек FPGA) то все числа можно подать на вход, и тут же получить результат на выходе (любую мат.задачу можно решить с помощью И/ИЛИ/НЕ/!НЕ). То есть за минимальный промежуток времени можно решить что угодно просто "скрутив" виртуальные проводки по заданной логике между входом и выходом. Скорость решения задачи : задержка прохождения сигнала внутри микросхемы (наносек). То есть, FPGA может проглотить все данных сразу.

А если ножек не много (или много но они заняты чем то другим) то в этом узком горлышке приходится порциями брать данные и обрабатывать последовательно(с тактированием), что и делают процессоры/микроконтроллеры.

Я б даже назвал микроконтроллер, как частный случай, урезанный FPGA.

Обычно, когда я так коротко объясняю то приходит понимание, может и тут кому то поможет.

Показать полностью
[моё] Разработка Инженер Программирование Плис Fpga Микроконтроллеры Электроника Vhdl Текст
2
19
Hellismyhome
Hellismyhome

С чего начать изучение FPGA. Часть 2. Детекторы фронта.⁠⁠

8 лет назад

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


Например: есть какой-то длинный сигнал, и наша задача показать, что у нас сигнал изменился с 0 --> 1 или же с 1 --> 0.


Для этого давайте попробуем пропустить наш длинный сигнал через двух-разрядный сдвиговый регистр с параллельным выходом.


Опишем наш сдвиговый регистр на VHDL:

Вот как он у нас выглядит в RTL:

Надеюсь, вы представляете себе, как работает наш сдвиговый регистр? Если не представляете, то вот его временные диаграммы:

А теперь обратите внимание на места, выделенные красным:

Заметьте, каждый раз как у нас входной сигнал становиться равным логической единице, у нас в младший разряд записывается этот сигнал, а в старшем разряде в это время у нас записано прошлое состояние младшего разряда, т.е. лог.0.

Почему бы нам теперь не выдавать логическую единичку, если у нас в старшем разряде записан лог.0 , а в младшем лог.1 ?


Вот так вот будет выглядеть наша новая схема:

Вот её RTL представление:

А вот временные диаграммы её работы:

Как видите – это то, что нам и было надо с самого начала!


А если нам необходимо детектировать изменение сигнала с 1 --> 0 ?


То тут вообще все просто, нам достаточно немного переписать 21 строчку кода:

Вот так теперь будет выглядеть наша схема в RTL:

Ну и конечно вот наши времянки:

Последняя схема, сигнализирует о переднем и заднем фронте сигнала. Применяется не так часто, но для полноты картины я вам всё же её покажу.

Последняя схема получается, если поксорить наши регистры (от английского слова XOR, сложение по модулю 2):

Вот так вот она выглядит в RTL:

Ну и как всегда временные диаграммы:

Вот я вам и рассказал про три важные схемы, которые применяются для детектирования фронтов сигнала.

Но у этих трех схем есть один недостаток – это 3 разных файла, что очень неудобно.

Можно ли их как-то объединить в один ?

Кончено же можно !

Наши три файла легко описать в виде одного файла с параметрами, что, кстати говоря, является хорошим тоном при описании схем на HDL языках :

Теперь достаточно указать в параметрах тип детектируемого фронта, и схема автоматически будет выбираться та, которая нам нужна.

На сегодня это все. Спасибо за прочтение



P.S. Стоит ли мне дальше продолжать писать посты про основы работы с ПЛИС. У меня возникло ощущение, что никому кроме меня это нафиг не надо…

Показать полностью 14
Плис Fpga Vhdl Схемотехника Обучение Программирование Основы Длиннопост
13
14
Hellismyhome
Hellismyhome

С чего начать изучение FPGA. Часть 1.⁠⁠

8 лет назад

Некоторое время назад я выкладывал проект простенького приёмника UART, для того чтобы показать на что похож процесс проектирования на ПЛИС. http://pikabu.ru/story/prostenkie_primeryi_na_plis_uart_chas...

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


В программировании обычно самая первая написанная программа это программа, которая выводит на консоль фразу “Hello world!”. Вот и мы не будем далеко уходить от канонов.

А что же такое “Hello world!” в железячном исполнении? А в железячном исполнении – это фиговина, которая будет моргать светодиодом. Вот мы с вами и опишем на языке VHDL схему, которая будет моргать светодиодом.


Период моргания 2 секунды, т.е. 1 секунду светодиод горит, 1 секунду не горит, потом опять 1 секунду горит, потом опять не горит. В общем вы поняли, он будет моргать до опупения пока нам это не надоест.


Итак, запускаем Quartus. Что? Вы ещё не скачали Quartus и Modelsim?

Тогда мы идём к вам! Тогда качайте незамедлительно! Это будет ваше первое задание на пути освоения программируемой логики. Хе хе хе. И оно не такое простое, как кажется, от вас требуется СМС и регистрация. Шучу. Только регистрация.

Итак запускаем Quartus и выполняем команды

FILE --> NEW. Подсказка: команду FILE можно найти вверху справа. Только не на потолке, а в углу экрана монитора.

Должно появиться такое вот меню:

В нем тыкаем мышкой на слово New Quartus II Project, расположенное в самом верху этого меню. Тыкать надо не мышкой в монитор, а плавно наводим курсор мышки на строку New Quartus II Project и нажимаем левую кнопку мышки ОДИН раз.

Должна появиться такая вот менюха:

Тыкаем мышкой на NEXT

И видим такую вот менюху:

В верхней строчке (та, которая сверху) указываем папку, где будут храниться файлы нашего проекта. Очевидно, что они хранятся по пути C:/altera/13.1/PROJECT/HELLO_WORLD

Средняя строчка (та, которая межу верхней и нижней строчкой) – это название нашего проекта. У меня проект назван HELLO_WORLD.

Нижняя строчка – это имя файла верхнего уровня. В общем, не паримся и тоже пишем HELLO_WORLD. Затем, когда ваше меню выглядит также как и у меня (нет редактировать в Paint его не надо) тыкаем на кнопку NEXT. В следующем меню также тыкаем кнопку NEXT. И у нас должно появиться такое вот меню:

В нем мы выбираем ПЛИС под которую пишем проект. Поскольку я всегда работаю с одной и той же ПЛИС я всегда выставляю настройки как на картинке. На самом деле данное меню особой роли не играет, если вы не собираетесь программировать реальную микросхему. В общем, не парьтесь, ставьте как у меня и жамкайте кнопку NEXT.

В следующей менюхе опять ставим настройки как у меня:

В настройках мы говорим, что моделирование у нас будет проводиться программе Modelsim, язык для моделирования – VHDL.

И наконец, жамкаем клавишу FINISH.


Всё, один из самых нудных мышкокликательных этапов мы закончили.

Теперь среда разработки готова к полноценной работе.

Но для начала, немного теории, как нам написать наш железячный Hello world.

В первую очередь необходимо придумать, как отсчитать периоды по 1 секунде.

В схемотехнике для счета чего-либо обычно используется счетчик (удивительно не правда ли?). А что же будет считать наш счётчик?

А считать он будет такты от тактового генератора.

К примеру, наш тактовый генератор, работает на частоте 100 MHz или 100 000 000 Герц. Это значит, что каждый раз как счетчик отсчитает от 0 до 99 999 999 (как раз 100 000 000 тактов) пройдет 1 секунда времени.


Далее должна быть схема сравнения, которая смотрит за состоянием счетчика. Как только счетчик досчитал до 99 999 999, схема сравнения должна выдать сигнал о том, что счетчик отсчитал период в 1 секунду.


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

Каждый раз как триггеру разрешена работа (когда счетчик досчитал до 99 999 999), он меняет свое состояние на противоположное.


Вам наверное показалось, что объяснение сложное ? Какие-то схемы сравнения, триггеры, счетчики. Но на самом деле, на языке HDL все это дело выглядит очень компактно и просто. Вот картинка, поясняющая принцип работы нашего устройства:

Я все это писал, для того, чтобы было понимание, как наше устройство реализуется схемотехнически. Поскольку основная задача при работе с ПЛИС – описать схему. Поэтому крайне важно понимать то, что мы описываем языком, и как это реализуется внутри ПЛИС.


Собственно давайте опишем нашу схему на языке VHDL. Для этого создадим файл куда мы будем писать наш проект. Для этого тыкаем мышкой:

FILE --> NEW --> VHDL FILE --> OK

У нас создаться текстовый файл, куда мы будет писать проект.

Сохраним пустой файл:

FILE --> SAVE AS --> СОХРАНИТЬ

Обычно программа сама присваивает файлу название файла верхнего уровня. У нас это HELLO_WORLD.

Ну и наконец описываем нашу схему на языке VHDL:

И запускаем наше текстовое описание схемы на проверку ошибок и возможности синтеза внутри ПЛИС:

PROCESSING --> START ANALYSE & SYNESYS

Вылезли ошибки? Ищем очепятку. У меня всё работает(ну кто бы сомневался)!

В общем, когда вы правильно перепишете текст схемы и программа сделает проверку, неплохо было бы посмотреть во что наш синтезатор интерпретировал наше описание схемы.

Для этого тыкаем мышкой:

TOOLS --> NETLIST VIEWERS --> RTL VIEWER

И вот что мы там видим:

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

На самом деле у нас сейчас написан мега-быдло-код. Это я для учебных целей разделил все на функциональные блоки, чтобы вам было проще понять описание схемы (какой я молодец).


На самом деле этот же код можно записать вот так, и не поменяется ровным счетом ничего:

По большему счету проект закончен. И можно генерировать прошивку, прошивать ПЛИС и наша ПЛИС будет усердно мигать нашему миру светодиодом.


А если светодиод не будет мигать? Как определить работоспособность проекта до прошивки ПЛИС? Вот для того, чтобы определить работоспособность нашего проекта существует программа Modelsim. В ней мы можем виртуально запустить наш проект, подключить виртуальный кварцевый генератор, и выводить сигнал на виртуальный светодиод. Мы даже можем смотреть на состояние внутренних триггеров, если нам это надо.

Но вот беда, Modelsim не знает, как должна работать схема. И он тем более не знает, что должно подаваться на вход нашей схемы. Задача разработчика написать такой файл, который моделирует внешнее окружение нашей схемы. Т.е файл, который задает внешние воздействия. Данный файл называется testbench – испытательный стенд.

Как правильно проводить тестирование это отдельная статья. Да какая нафиг статья! Правильное тестирование - отдельная прикладная область в разработке. Но в нашем случае ничего сложного нет: в тестбенче должен генерироваться синхросигнал и подаваться на вход нашей схемы.


К нашему большому счастью часть тестбенч умеет создавать Qusrtus, и нам останется только описать, как работает наш тест.

Чтобы создать тестбенч необходимо поклацать мышкой:

PROCESSING -->START -->START TEST BENCH TEMPLATE WRITER

Далее необходимо добавить наш тестбенч в проект для этого клацаем

ASSIGMENTS --> SETTINGS

И следуем указанием на картинке:

Ну как, мышь не поломалась от бесконечного клацания ?

Теперь запускаем симуляцию:

TOOLS --> RUN SIMULATION TOOL --> RTL SIMULATION

У нас запускается Modlesim и на экране монитора появляется страшная НЕХ:

Не пугайтесь, это крайне недружелюбный интерфейс Modelsim, с которым разработчик проводит достаточно большую часть времени…

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

C:\altera\13.1\PROJECT\HELLO_WORLD\simulation\modelsim\HELLO_WORLD.vht

Откроем этот файл тестовым редактором и удалим из него ненужную нам фигню, и добавим нужную нам. В итоге, после всех нехитрых манипуляций тест наш выглядит так:

После того как подправили тест на тот, который нам нужен, запускаем перекомпилирование наших файлов проекта:

После того, как перекомпилировали проект можно запускать на симуляцию.

Для этого укажем, сколько времени симулировать наш проект и запустим её:

Обратите внимание, что на слабых машинах симуляция может быть достаточно долгой. Да и редко возникает необходимость моделировать несколько секунд работы устройства.

А вот и результаты нашего тестирования:

Анализировать результаты работы можно просматривая временные диаграммы, или просматривая сообщения которые мы выводим на консоль.

Как видите тест показывает, что устройство наше вполне работоспособно, работает так, как мы и задумывали !

Наш железячный “Hello world!” прекрасно работает. Правда виртуально. Осталось прошить ПЛИС и наш проект заработает в железе, можете не сомневаться.

Да что тут говорить, смотрите сами !

Синтезируем прошивку:

PROCESSING --> START COMPILATION

После того, как прошла компиляция входим в меню программирования ПЛИС:

TOOLS --> PROGRAMMER

Ну и запускаем программирование:

А вот видео работы. Снимал на старенький HTC сильно не пинайте:

Спасибо за прочтение. Все интересующие вас вопросы пишите в комментариях.

Показать полностью 17 1
Плис Fpga Vhdl Программирование Схемотехника Обучение Видео Длиннопост
16
microtha

Готовый секундомер на ПЛИС. код написан на зайлинкс. VHDL⁠⁠

8 лет назад

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;


entity Timer is
port
(
clk : in std_logic; --входной тактовый сигнал
reset : in std_logic; --кнопка сброса
start : in std_logic; --кнопка пуска
stop : in std_logic; --кнопка останова
sseg : out std_logic_vector(6 downto 0); --сегменты индикатора
anode : out std_logic_vector(3 downto 0) --аноды семисегментных индикаторов
);
end Timer;


architecture Behavioral of Timer is


signal en_cou : std_logic := '0'; --разрешение работы счётчика секунд
signal cou : integer range 0 to 49999999 := 0; -- для счёта секунд
signal cou_scan : unsigned(16 downto 0) := (others =>'0'); --счетчик переключения анодов
signal sec : integer range 0 to 15 := 0; --единицы секунд
signal d_sec : integer range 0 to 15 := 0; --десятки секунд

signal segments : integer range 0 to 15 := 0; --цифра для отображения на текущем индикаторе

begin


-- счётчик
process(clk, reset) begin
if reset = '1' then -- сброс - счётчик не считает, разрешение счёта обнуляется, значение обнуляется
en_cou <= '0';
cou <= 0;
elsif clk event and clk = '1' then --если не сброс, то счётчик работает
if start = '1' then --кнопка старт нажата
en_cou <= '1';
elsif stop = '1' then --кнопка стоп нажата
en_cou <= '0';
end if;

if en_cou = '1' then --сам счетчик таймера
if cou = 49999999 then --49999999 тактов = 1 секунда
cou <= 0;
if sec = 9 then --9
sec <= 0;
if d_sec = 6 then --6
d_sec <= 0;
else
d_sec <= d_sec + 1;
end if;
else
sec <= sec + 1;
end if;
else

cou <= cou + 1;
end if;
else
cou <= cou;
sec <= sec;
d_sec <= d_sec;
end if;
end if;
end process;


-- переключение индикаторов
process(clk) begin
if clk event and clk = '1' then
cou_scan <= cou_scan + 1;
if cou_scan(16) = '0' then
anode <= "0001";
segments <= sec;
else

anode <= "0010";
segments <= d_sec;
end if;
end if;
end process;

--декодирование цифры на семисегментный индикатор
with segments select
sseg <= "0000110" when 1, --1
"1011011" when 2, --2
"1001111" when 3, --3
"1100110" when 4, --4
"1101101" when 5, --5
"1111101" when 6, --6
"0000111" when 7, --7
"1111111" when 8, --8
"1101111" when 9, --9
"1110111" when 10, --A
"1111100" when 11, --b
"0111001" when 12, --C
"1011110" when 13, --d
"1111001" when 14, --E
"1110001" when 15, --F
"0111111" when others; --0


end Behavioral;


<script>

источник: программист из infomonster
проверили на работоспособность =)
если надо ucf-ка, скину

Показать полностью
Xilinx Код для секундомера Vhdl Длиннопост Текст
7
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии