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

Пикабу Игры +1000 бесплатных онлайн игр

 Что обсуждали люди в 2024 году? Самое время вспомнить — через виммельбух Пикабу «Спрятано в 2024»! Печенька облегчит поиск предметов.

Спрятано в 2024

Поиск предметов, Казуальные

Играть
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть
Реалистичный симулятор игры бильярд. Играйте в Бильярд 3D: Русский бильярд, как в настоящей бильярдной!

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть
Грибные блоки - красочная головоломка, в которой вам предстоит передвигать блоки и заполнять ряды, чтобы собирать грибочки в корзину! Попробуйте продержаться как можно дольше!

Грибные блоки

Головоломки, Расслабляющая, Пазлы

Играть
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

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

  • Oskanov Oskanov 8 постов
  • AlexKud AlexKud 26 постов
  • StariiZoldatt StariiZoldatt 3 поста
Посмотреть весь топ

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

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

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

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

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Плис

20 постов сначала свежее
19
Hellismyhome
Hellismyhome
7 лет назад

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

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


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


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


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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

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


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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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


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


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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

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

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

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

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

С чего начать изучение FPGA. Часть 2. Детекторы фронта. Плис, Fpga, Vhdl, Схемотехника, Обучение, Программирование, Основы, Длиннопост

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

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



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

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Некоторое время назад я выкладывал проект простенького приёмника 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 можно найти вверху справа. Только не на потолке, а в углу экрана монитора.

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

В настройках мы говорим, что моделирование у нас будет проводиться программе 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 все это дело выглядит очень компактно и просто. Вот картинка, поясняющая принцип работы нашего устройства:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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


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

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

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

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

PROCESSING --> START ANALYSE & SYNESYS

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

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

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

TOOLS --> NETLIST VIEWERS --> RTL VIEWER

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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


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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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


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

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

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


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

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

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

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

ASSIGMENTS --> SETTINGS

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

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

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

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

PROCESSING --> START COMPILATION

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

TOOLS --> PROGRAMMER

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

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

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

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная.⁠⁠

Приветствую, уважаемые посетители сайта www.pikabu.ru. Продолжаю статью о том, как написать приёмник UART на ПЛИС. Напоминаю, что в прошлом посте я постарался вас познакомить с самыми основами этого протокола, и попытался максимально подробно описать алгоритм работы приёмника, который мы будет создавать в ПЛИС.

http://pikabu.ru/story/prostenkie_primeryi_na_plis_uart_chas...

В данном посте я покажу, как всё, что я рассказывал в прошлом посте, описать на языке VHDL, протестировать и разместить в ПЛИС. Поскольку ответа на мой вопрос о том, в каком виде вы хотели бы видеть, выкладываемый код, от вас не поступило – то я буду код выкладывать в виде изображений, как и планировал изначально. Других вариантов я не вижу. Нужны исходники – пишите. Мне лень заморачиваться с файловыми хранилищами.

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

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


Внимание! Достаточно большое количество разработчиков на FPGA предпочитают язык Verilog/SystemVerilog. Я же предпочитаю язык VHDL, на котором буду выкладывать все тексты схем. Поскольку, я не ставлю своей целью научить вас писать именно на VHDL, поэтому я не буду объяснять, почему у меня написано именно так, а не иначе. Если вы все же начнете изучать язык VHDL, то поймете тесты схем. Если же не поймете, то всегда можете задать вопрос мне, я всегда объясню. А начнете изучать Verilog – то все мои объяснения вам будут нафиг не нужны. Для удобства восприятия текста я убрал все «фишки», которые делают модули настраиваемыми. Некоторые вещи у меня описаны не самым рациональным способом. Связанно это с тем, что мне просто так удобнее работать с текстом. Так же для удобства восприятия текста я оставил максимально подробные комментарии. И так приступим


Прошлый пост закончился на том, что я описал, какие функциональные элементы нам необходимы для реализации нашего приёмника, а именно:

1. Синхронизатор с клоковым доменом

2. Счетчик, считающий от 0 до 15, для того, чтобы можно было определять длительность периода старт бита, стоп бита, битов данных.

3. Счётчик от 0 до 7, считающий, сколько бит приняли.

4. 3 разрядный регистр, для хранения 3 выборок в середине битового интерала, чтобы провести голосование.

5. Мажоритарный фильтр.

6. 8 разрядный регистр для хранения принимаемых бит данных.

7. Цифровой автомат, управляющий работой всех элементов.

СИНХРОНИЗАТОР

Для начала опишем модуль, или как правильно говорить на языке VHDL – компонент, который мы будем применять для того, чтобы синхронизировать входной асинхронный сигнал с частотой нашего клокового домена. Напомню что базовый синхронизатор- это обычный сдвиговый регистр. Я всегда выделяю его в отдельный модуль. Мне так проще работать. Вот его описание на языке VHDL:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Давайте посмотрим, как наш синхронизатор выглядит на технологической карте. Технологическая карта показывает как наша схема «ложится» в логические ячейки, которых в ПЛИС очень много. Собственно будут задействованы 3 триггера из логических ячеек, которые соединены между собой вот таким вот образом:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Как видите это то, что нам необходимо.

Давайте теперь взглянем на временные диаграммы его работы – времянки. Моделирование я провожу в программе Modelsim altera SE и применяю функциональное моделирование, по этой причине на диаграммах отсутствуют временные задержки сигналов.

Вот временные диаграммы функционирования нашего синхронизатора:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Как видите, ничего сложного нет. Приходит асинхронный сигнал ADATA. Передним фронтом частоты CLK он защелкивается в младший разряд регистра SHIFT_REG(0). Следующим фронтом в младший разряд регистра SHIFT_REG(0) защелкивается лог. 0, поскольку на линии ADATA у нас лог.0, а единичка, которая была записана ранее, передается в следующий разряд. Т.е SHIFT_REG(1). Данные как бы сдвигаются от младшего разряда к старшему разряду. Поэтому регистр и называется сдвиговым. Ваш КЭП. Красные линии означают, что в эти моменты времени состояния этих сигналов имеют неопределённость, или правильнее говорить в данный момент времени сигналы неинициализированны. Например, сразу после включения непонятно что храниться в регистре.

РЕГИСТР ХРАНЕНИЯ ВЫБОРОК

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

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Если обратите внимание, то вы увидите что это такой же сдвиговый регистр как и наш синхронизатор. Только выходом этого модуля является не старший разряд, а все разряды регистра. Вот во что он синтезируется:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Я думаю, что его времянки объяснять не надо:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

РЕГИСТР ХРАНЕНИЯ ДАННЫХ ПРИЁМА

А вот регистр хранения данных, чуть сложнее. У него добавляется управляющий вход ENA. Сигнал ENA –(от английского ENAble) сигнал, разрешающий или запрещающий работу регистра. Регистр работает только тогда, когда на этом входе есть лог.1. Если её нет, то регистр хранит данные, которые в него записали и игнорирует остальные сигналы. Вот его описание на VHDL:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Как видите, это практически такой же сдвиговый регистр. Разница в том, что он двигает данные слева направо. Т.е данные пишутся в старший разряд регистра SHIFT_REG(7) и потом сдвигаются в младшие разряды.


Внимание вопрос. Почему у меня регистр двигает данные слева направо. А не справа налево? Ответы можете оставить в комментариях.


А вот так он реализуется в логических ячейках ПЛИС:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

А вот его времянки:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Пока сигнал ENA = 0, регистр не изменяет свое состояние, независимо от состояний входа данных, и синхрочастоты.

Когда сигнал становится активным, т.е. ENA = 1, значит, работа регистра разрешается, и он ведёт себя как обычный сдвиговый регистр.

Сигнал снова стал неактивным, т.е. ENA = 0, значит, регистр хранит в себе данные, и не меняет своё состояния, и т.д…

СЧЁТЧИК БИТОВЫХ ИНТЕРВАЛОВ

Тут все совсем просто, это классический 4 разрядный счетчик с сигналом синхронного сброса. Вот его описание на VHDL:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Давайте взглянем, как он выглядит в RTL Viewer. RTL Viewer показывает, как выглядит наше описание в виде схемы. Обратите внимание, что данная схема имеет лишь косвенное отношение к реализации нашего описания в логических ячейках ПЛИС:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

А вот на технологической карте (то, что ложиться в логические ячейки ПЛИС) это выглядит так:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Программа сама минимизирует все логические, функции и то, в каком виде наш счётчик ложится в логические ячейки ПЛИС, решает софт для разработки. Для FPGA фирмы Altera Intel это Quartus. Эти алгоритмы закрыты для пользователей. Главное то, что счетчик работает, так как нам надо. А вот, кстати, как он работает:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Тут всё очевидно. Пока активен сигнал SCLR счетчик постоянно сбрасывается, поэтому его состояние 0. Сигнал SCLR перестал быть активным, счетчик начал считать. SCLR стал активным – счетчик сбросился. Когда счетчик досчитал до состояния, когда во всех разрядах единицы и следующим тактом у него произошло переполнение, и он снова стал считать с нуля. Поэтому на диаграммах вы видите, что после 15 счетчик считает с нуля.

СЧЕТЧИК ПРИНЯТЫХ БИТ

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

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

То, как он выглядит на RTL Viewer я показывать не буду, нас всё равно это мало интересует. А вот диаграммы всё же покажу:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Работает он так же как и простой счетчик с синхронным сбросом. Только считает он только тогда, когда сигнал ENA активен, т.е. ENA = 1. Если же сигнал не активный, т.е. ENA = 0 то счетчик хранит своё состояние. Ваш КЭП.


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

COUNTER_SCLR

COUNTER_ENA_SCLR

PARALEL_SHIFT_REG

PARALEL_SHIFT_REG_ENA

SYNC_TO_CLOCK_DOMAIN

Данные компоненты мы описали один раз, и они формируют нашу библиотеку. В наших проектах мы их можем использовать бесчисленное количество раз. Особенно если их сделать параметризированными…

Когда компонент имеет чёткое имя, отражающее суть его работы, то его проще найти в библиотеке файлов, особенно когда у вас библиотека состоит более чем из 100 таких вот элементов. По правильному названию элемента вы можете иметь представление об его функционировании. Это очень удобно, так как со временем забывается, что в этой библиотеке есть. А по «говорящим» именам все легко искать. Конечно все, что я говорю, это лишь мои собственные предпочтения, вы можете называть элементы как вам удобнее. Как я делаю, я рассказал, выбор за вами.


Вот теперь можно приступить к описанию приемника UART, где цифровой автомат управляет нашими модулями, или как правильно говорить в VHDL – компонентами.

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

Подключаем наши описанные «кирпичики» и описываем поведение мажоритарного фильтра:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост
Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Автомат мы описываем 3 процессами.

Первый процесс описывает, когда происходит смена состояния автомата:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Второй процесс описывает, то, как вычисляется следующее состояние, в которое должен переключиться автомат:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Последний процесс описывает то, как автомат управляет нашими счетчиками, регистрами:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Ну и теперь, самое вкусное. Как всё это выглядит времянках. Для проверки я написал простенький тест, который отправляет приемнику байт: «01010101», он же число 55 в шестнадцатеричной системе. Очевидно, что если наш приёмник написан правильно, то на выходе этого приемника, должно появиться  число, которое мы ему отправляли. Учтите, что принятое значение должно быть верным только в момент, когда приёмник говорит, что данные корректны т.е. сигнал DATA_VALID = 1. Вот времянка:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

И давайте посмотрим, как наш приёмник отработает корявый старт-бит:

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Программирование, Длиннопост

Внимание вопрос! Почему я счетчик обнуляю, когда он досчитал до 14?(все ответы есть на времянках)


На этом статью про разработку простейшего приёмника UART я закончил. К сожалению, видео работы приёмника я показать не смогу, поскольку у меня нечем снимать видео. Но в «железе» приёмник работает так, как я и задумывал. Придется вам поверить на слово.

В процессе объяснения вам могло показаться, что все это слишком сложно. На самом деле это не так. Всё очень и очень просто. Данный приёмник я написал за 1 вечер неторопливой работы. Гораздо больше времени заняло изучение протокола UART.


Так же, наверное, у многих возник вопрос, а зачем такие сложности, когда на Arduino можно взять готовую библиотеку, написать несколько строчек кода и всё будет работать? От части это так, на Arduino все делается проще, если есть готовая библиотека. А если её нет? А если она криво написана? А если….


В общем скажу так: проще, не значит лучше. Например мой приёмник занимает в ПЛИС всего 37 логических ячеек. А у меня этих ячеек в ПЛИС около 10 000. Теоретически я могу в ПЛИС запихать 270 таких приёмников, которые будут работать одновременно и независимо друг от друга. Правда это нафиг никому не нужно. Да и, как я в самом первом посте говорил, задачи у ПЛИС и микроконтроллеров разные.

Показать полностью 23
[моё] Плис Fpga Uart Com Разработка Схемотехника Программирование Длиннопост
26
12
Hellismyhome
Hellismyhome
8 лет назад

Простенькие примеры на ПЛИС. UART. Часть 0.⁠⁠

Приветствую уважаемые посетители сайта www.pikabu.ru. Решил продолжить статьи про разработку на ПЛИС. В первом посте я выложил самое начало, с чего стоило бы начать изучение ПЛИС. http://pikabu.ru/story/s_chego_nachat_izuchenie_fpga_plis__4...

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

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

В этом посте будет рассматриватся формальная постановка задачи написания простейшего приемника RS232, он же COM порт, он же UART*1 интерфейс, он же УАПП – Универсальный Асинхронный Приемо-Передатчик. Выбор пал на COM порт не просто так. Всё дело в том, что этот интерфейс самый простой для изучения и позволяет «подружить» компьютер и ПЛИС, научить их разговаривать друг с другом – передавать данные между собой. Сразу говорю, что полностью объяснять и расписывать все сигнальные линии и всю регистровую модель приемопередатчика я здесь не буду, поскольку для простой организации интерфейса между ПК и ПЛИС это нафиг не нужно. Более того, этого добра навалом во всемирной сетевой помойке и при желании или необходимости вы без проблем найдете всю интересующую вас информацию.


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


Внимание! КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО подавать сигнал с COM порта компьютера напрямую в FPGA, без специальных преобразователей уровней! В данной статье я не рассматриваю вопросы согласования физических уровней COM порта, и ПЛИС. Исключение составляют виртуальные COM порты, реализуемые на микросхемах FTDI, имеющие уровни сигналов совместимые с ПЛИС.


Для начала совсем коротенько расскажу про протокол обмена информацией по COM порту. Вот посмотрите внимательно, на картинку:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

Для начала введем некоторые определения. Высокое состояние линии – соответствует логической единице – лог.1. Низкое состояние линии соответствует логическому нулю – лог.0.


Что же мы видим на этой картинке? А мы видим кучу полезной информации, смотрим справа налево:


Изначально линия находится в состоянии лог.1.


Затем мы видим, что линия становится лог.0, на один период данных. Этот бит данных называется СТАРТ-БИТ, применяется для того, чтобы сообщить приёмнику о том, что началась передача одного пакета\кадра\фрейма информации.


После передачи СТАРТ-БИТА у нас начинают передаваться биты данных. Данные предаются ногами вперед начиная с младшего бита. Обычно в одной посылке 8 бит – т.е. 1 байт. Но это не всегда так. Как правило, сколько бит в посылке оговаривается заранее, и приёмник при приёме уже настроен на необходимое количество бит данных.


После того, как все биты данных переданы может передаваться контрольный бит – или его ещё называют бит четности\паритета (от анг parity). Например, если был выбран четный паритет, то после передачи данных, если количество бит данных было четным – передаётся бит паритета равным лог.1. Если количество бит данных было нечётным – то передаётся бит паритета равным лог.0.

При выбранном нечётном паритете всё в точности наоборот: передали нечётное количество бит данных – бит паритета равен лог.1. Если количество переданных бит было чётным – паритета равен лог.0. Бит паритета нужен для минимального контроля принятых данных. Принимая данные, приёмник подсчитывает количество принятых бит. Если паритет подсчитанный передатчиком не совпадает с принятым битом, означает, что произошёл сбой и работать с данными нельзя. Какой тип паритета будет, а также будет ли вообще использоваться бит паритета, опять же оговаривается до передачи данных.


Любая посылка заканчивается стоповым битом СТОП-БИТ. Во время действия стоп-бита линия данных должна находиться в лог. 1.


Был выработан и прижился короткий способ записи параметров передачи, таких, как количество бит данных, наличие и тип бита четности, количество стоп-бит. Выглядит как запись вида цифра-буква-цифра, где:


• Первая цифра обозначает количество бит данных, например, 8.


• Буква обозначает наличие и тип бита четности.


Встречаются:

N (No parity) — без бита четности.

E (Even parity) — с битом проверки на четность.

O (Odd parity) — с битом проверки на нечетность.


• Последняя цифра обозначает длительность стоп-бита. Встречаются значения 1, 1.5 и 2 для длительности стоп-бита в 1, 1.5 и 2 битовых интервала соответственно.


Например, запись 8-N-1 обозначает, что UART настроен на 8 бит данных без бита четности и один стоповый бит. Для полноты параметров эту запись снабжают указанием скорости UART, например, 9600/8-N-1. Если говорить про скорость, обычно говорят про бодовую скорость. Т.е скорость, с которой отправляется посылка, которая определяет период одного бита. Реальная скорость обмена информацией на скорости 9600/8-N-1 будет на 20% меньше, поскольку среди переданных 10 бит информацию несут только 8 бит, а остальные 2 бита это старт и стоп соответственно.


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


А сейчас я вас немного погружу информацией по ПЛИС, без которой нам не написать правильный приёмник. В частности я расскажу немного про клоковые домены.


Если взять за жабры гугл-переводчик и зпихать в него фразу «clock domain signals» – то он выдаст перевод: clock domain signals – сигналы тактовой области. Если говорить простыми словами то клоковый домен - это часть проекта, работающая на какой-то одной тактовой частоте. Если в проекте используется только одна тактовая частота – значит клоковый домен у нас один. Если тактовых частот две – значит клоковых доменов у нас уже два и.т.д*2.


Первое наперво, что надо уяснить при работе с ПЛИС – это то, что любой сигнал, пересекающий клоковый домен должен быть синхронизирован с клоковым доменом, в котором мы обрабатываем этот сигнал*3. Частный случай пересечения клокового домена – приём внешних данных, которые обрабатываются на частоте порожденной внутри ПЛИС блоком PLL*4 или на частоте тактирования этой ПЛИС от собственного тактового генератора.


Это очень важный момент, который обязательно надо учитывать при проектировании. Представим, что у нас есть проект, в котором, все триггеры срабатывают по переднему фронту. В проекте есть 9-разрядный счётчик, который работает на частоте 40MHz. Данные с этого счетчика поступают в другую часть проекта, работающего на частоте 37MHz. Т.е пересекают клоковый домен. Посмотрим картинку:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

Сигнал CLK – синхросигнал работы счетчика, его частота 40MHz

Сигнал SCLR – сигнал синхронного сброса счётчика. Пока он в состоянии лог.1 счётчик не работает. Очевидно, что когда сигнал сброса прекратит своё действие счётчик заработает.

Сигнал DATA_OUT – выход счётчика..

Сигнал CLK_NEW_DOMAIN – синхросигнал другой части проекта, его частота 37MHz.

Когда сигнал сброса перестанет быть активным, после прихода синхроимпульса, счетчик изменит своё состояние, т.е. переключится из 0 в 1. Причём переключится не сразу, а через какое-то небольшое время. Когда придёт очередной синхроимпульс счетчик переключится из 1 в 2, и.т.д. счётчик же. Обратите внимание, что при переключении счётчика выходные 9 разрядов меняют свои значения не одновременно, а с небольшой задержкой, поскольку физически линии могут иметь разную длину, и разное время распространения сигнала. По одной из 9 линий сигнал пришел раньше, по другой позже, ничего страшного, это реальный мир. Из-за этого в моменты начала переключения счетчика он может выдать абсолютно любые значения, это нормально,


При неправильно сделанном проекте (как у меня на картинке), данные с этого счетчика обрабатываются по переднему фронту синхросигнала CLK_NEW_DOMAIN, например, записываются в регистр. Т.е данные не были правильно перенесены в новый клоковый домен - это серьезная ошибка !


Очевидно что, в зоне отмеченной красным в регистр запишется полная чушь. И поверьте, неправильные данные это меньшее из зол, как правило протоколы верхнего уровня фильтруют ошибочные пакеты. Самое страшное это то, что триггеры, из которых состоит регистр, могут попасть в так называемое метастабильное состояние, когда состояние триггера приняло некую величину промежуточную между состояниями лог.0 и лог. 1, или его выход данных вообще колеблется между ними. Это очень опасно, поскольку один кусок схемы воспримет это состояние как лог.0 , а другой кусок схемы воспримет как лог.1. и схема может выдать результат, которой разработчик даже не предполагал, вплоть до полного зависания схемы и потери работоспособности. Спасет только перезагрузка.


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


Чуть более подробно про метастабильное состояние прочитайте тут, https://habrahabr.ru/post/254869/ очень неплохо изложено. Обязательно прочитайте!


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

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

Базовым синхронизатором является обычный последовательный сдвиговый регистр, который тактируется частотой нового клокового домена:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

На его вход поступают асинхронные данные ADATA, а на выходе у него данные SDATA синхронные частоте нового клокового домена. Но у этой схемы есть один недостаток: если принимаемый асинхронный сигнал меньше периода синхрочастоты нового клокового домена или равен ей, существует вероятность потерять этот сигнал. Значит, напрашивается самый логичный вывод - приёмник должен работать на частоте большей, чем частота передатчика. Первая ближайшая частота, с которой должен работать передатчик – это частота как минимум в 2 раза быстрее частоты передачи данных.


Внимание вопрос, почему я не могу взять частоту приемника, к примеру, на 50% быстрее бодовой частоты? Ответы оставляйте в комментах.


Итак, частота работы приёмника должна быть выше частоты работы передатчика. А во сколько? В 2 раза, в 3 раза, в 5 раз? Оставим этот вопрос открытым. Далее я немножечко расскажу про ещё одну очень интересную схему, и после этого мы сложим весь пазл, в одно целое.


Представим ситуацию, вы собрались в компанию из 7 тел и решаете, куда бы вам завалиться, культурно отдохнуть. Одна часть решила пойти в бильярд шары погонять, другая часть хочет в боулинг, шары покатать. Альтернатив нет. Очевидно, что вся ваша компания идет туда, куда хочет большинство. Так вот в схемотехнике есть определенный класс схем, которые так же работают по принципу большинства. Такие схемы называются мажоритарные схемы. К чему я это всё пишу. Смотрим на картинку ниже:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

Смотрим на верхнюю половину картинки. Пришла какая-то помеха, которая просадила нашу линию данных до лог.0. Вспомним условие старт-бита - это как раз перепад линии данных из 1 в 0. И если мы обработаем эту помеху как старт, и начнем принимать данные, то мы получим данные состоящие из 8 бит равных лог.1. Очевидно, что это ошибка, поскольку данные мы не отправляли, а приёмник что-то получил. Однако…

А если у нас очень много помех, и старт бит выглядит так, как на нижней части картинки?

Вот тут нам на помощь и приходят мажоритарные схемы: если большая часть времени битового интервала был лог.0, значит, приняли лог.0. Если большую часть времени битового интервала была лог.1, значит, приняли лог.1.


Теперь осталось определиться со временем, которое наш мажоритарный фильтр следит за битовым интервалом. У меня не просто так нижняя картинка со старт-битом была нарисована с 2 пиками помех. Всё дело в том, что очень часто любое изменение линии сопровождается неким высокочастотным звоном, особенно если линия несогласованна. И анализировать данные по краям битового интервала – это не совсем правильный подход. Стараются анализировать линии в середине битового интервала. При этом задача как можно более точно «нащупать» эту середину. Для этого применяют частоту приёмника в 16 раз больше частоты передачи, и примерно в середине бита делают 3 выборки. Почему именно значение 16? Первая причина – это то, что счетчик, считающий от 0 – до 15 это счетчик, который обнулятся сам, когда досчитает до конца, хотя точнее сказать счетчик не обнуляется, а у него происходит переполнение разрядов. Да и схемотехнически такие счётчики, более простые. А вот почему частота именно в 16 раз больше, а не в 8, тут сложно назвать какие-то объективные причины. Так сложилось исторически, и я не стал изобретать велосипед.


Итак, сделаем небольшой вывод:

1. Перед работой с данными мы их синхронизируем сдвиговым регистром.

2. Частота нашего передатчика в 16 раз больше частоты принимаемых данных.

3. В середине битового интервала делаем 3 выборки данных.

4. На основании 3 выборок мажоритарный фильтр делает вывод о значении принятого бита.


Вот картинка поясняющая принцип работы:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

DATA_CLK – это частота с которой нам поступают данные. В реальности мы не имеем эту частоту, она показана просто для наглядности

UART_STATE_REG – это данные, которые нам передаются.

CLKx16 – частота работы нашего приёмника.

Красным отмечены места выборок для последующего определения того, что мы приняли.


Наш алгоритм действия можно представить в виде такой вот картинки. Сильно не ругайте, я не умею алгоритмы по ГОСТ рисовать.

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

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


Изначально приёмник следит за линией данных, и сбрасывает счетчик, который считает период битового интервала, и счетчик принятых бит.


Когда приёмник увидел, что на линии лог.0 он перестал сбрасывать счетчики и начинает делать выборки для проверки старт-бита.


Когда сделаны 3 выборки в середине битового интервала приёмник смотрит на то, что выдал мажоритарный фильтр. Если мажоритарный фильтр показал, что пришла лог.1, это означает старт-бит был ошибочный и скорее всего пришла помеха.


Если мажоритарный фильтр показал, что пришла лог.0 , это означает, что был принят старт-бит, и когда закончится период старт-бита, приёмник начнет принимать биты данных.


Изначально счетчик принятых битов равен 0, поскольку когда мы ждали старт-бита мы сбрасывали этот счетчик. При приёме данных в середине битового интервала приёмник опять сделал 3 выборки, и на основании того, что выдал мажоритарный фильтр, записал эти данные в регистр, в котором эти данные будут храниться.


В конце битового интервала приёмник проверил, сколько бит он уже принял. Если не все биты приняты, приёмник увеличит счетчик битов на 1, и совершит ещё один цикл приёма бита данных.

Если же все биты данных приняты, то приёмник начнёт анализировать стоп бит.


Анализ стоп-бита точно такой же, как и прошлые биты.

Вот только если фильтр покажет, что принятый бит это лог.0, значит произошла ошибка, и приёмник выставит флаг ошибки, поскольку стоп бит всегда лог.1. И перейдет в состояние ожидания нового старт-бита.


А если фильтр покажет что приняли лог.1 – значит всё в порядке. Приёмник выставит флаг о том, что данные в регистре правильные, и так же перейдет в состояние ожидания нового старт-бита.


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

1. Счетчик, считающий от 0 до 15, для того, чтобы можно было определять длительность периода старт, стоп бита, битов данных.

2. Счётчик от 0 до 7, считающий, сколько бит приняли.

3. 3 разрядный регистр, для хранения 3 выборок, чтобы провести голосование.

4. Мажоритарный фильтр.

5. 8 разрядный регистр для хранения принимаемых бит данных.

А ещё нам нужна фиговина которая всем этим барахлом управляет:

Простенькие примеры на ПЛИС. UART. Часть 0. Плис, Fpga, Uart, Com, Разработка, Схемотехника, Микроэлектроника, Программирование, Длиннопост

Эта вот фиговина называется цифровой автомат и будет управлять нашими счетчиками и регистрами, записывать данные, сбрасывать и пр. Я не буду подробно объяснять работу цифровых автоматов, поскольку это отдельная статья, при чём не маленькая. Чуть подробнее можете с автоматами ознакомиться тута:

https://habrahabr.ru/post/254885/ Вполне годно описано. Для написания простеньких автоматов тут информации достаточно.


На этом моменте я вынужден статью закончить. Поскольку дальнейшее объяснение как это все реализовать внутри ПЛИС и промоделировать потребует серьезного увеличения длины поста. Да и у меня к вам появился серьёзный вопрос. Каким образом мне построить продолжение? Основная проблема в том, что дальше будет достаточно много кода на VHDL. И если его выложить сюда, то он развалится из-за того, что pikabu не содержит тегов для вставки кода. Пока ничего лучше, чем выложить кучу скриншотов кусков кода на ум не приходит. А в конце просто дать несколько ссылок на исходники.


*1. Не совсем корректно так говорить, поскольку RS232 он же COM – это одна из разновидностей UART, написал для упрощения.

*2. Отдельный разговор про частоты, кратные основной, полученные делением на счетчике.

*3. Опять же не совсем корректно так говорить, поскольку существуют специальные алгоритмы, где не сигналы синхронизируются, а синхронизируются флаги валидности данных, так называемые алгоритмы handshake.

*4. Специальная фиговина внутри ПЛИС, которая может создать из частоты, от которой тактируется ПЛИС новую частоту.

Показать полностью 9
[моё] Плис Fpga Uart Com Разработка Схемотехника Микроэлектроника Программирование Длиннопост
1
988489
8 лет назад

Сделайте в аниме пожалуйста⁠⁠

Сделайте в аниме пожалуйста Плис, Сделайте в аниме
Показать полностью 1
Плис Сделайте в аниме
13
56
Hellismyhome
Hellismyhome
8 лет назад

С чего начать изучение FPGA (ПЛИС) ?⁠⁠

Приветствую посетителей сайта pikabu.ru. Я решил сделать несколько статей про разработку на FPGA. Надеюсь, это вам будет интересно.

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

В своих статьях я не преследую цели научить вас разрабатывать на FPGA, и сделать из вас крутых разработчиков. Это вы должны сделать сами, имея огромный запас времени, терпения, а главное желания. Своими постами я постараюсь помочь окунуться в эту тему, постараюсь объяснить с чего лучше начать изучение FPGA, и попробую объяснить основы основ. Ну а далее дело за вами...


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


Если вы не вняли моим предупреждениям, и читаете эти строки, значит либо вам реально интересно узнать про FPGA, либо вам совсем делать нечего, что вы читаете этот бред сумасшедшего пост.


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

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

Поскольку я личность крайне ленивая, и мне лень переключать каждый раз раскладку клавиатуры, то зарубежную аббревиатуру FPGA (Field-Programmable Gate Array), что переводиться как Программируемая Полем Вентильная Матрица (ППВМ), я со своей легкой руки заменяю на ПЛИС, что означает Программируемая Логическая Интегральная Схема.


Что же такое ПЛИС, зачем она вообще нужна, когда есть микроконтроллеры, например макетная плата Arduino? Если в вкратце объяснять, то в основе платформы Arduino лежит микроконтроллер, по сути представляющий собой миниатюрный компьютер, имеющий ОЗУ, порты ввода\вывода, набор минимальной периферии, память команд, содержащую инструкции, которые он (контроллер) выполняет, т.е. программу, написанную пользователем, под конкретную архитектуру контроллера.


ПЛИС - это же набор логических элементов, настраивая, и объединяя которые, вы строите цифровую схему, которая выполняет заложенную вами функцию. Уф... Понятно объяснил? Да знаю я, что непонятно! Я сам ничего не понял из своего объяснения, когда прочитал!


Попробую привести пример: представьте, что вам нужно получить от четырех датчиков данные передаваемые по четырем 8 битным шинам. И вычислить среднеарифметическое этих данных, с отбрасыванием дробной части. И делать это надо с максимально возможной скоростью. Допустим наш контроллер, тактируется частотой 10 МГц. Для нахождения среднеарифметического, сначала надо сложить четыре числа. В зависимости от архитектуры контроллера на это уходит от 1 до 5 тактов. Не факт что архитектура контроллера позволяет сложить сразу четыре числа, но допустим, он умеет это делать. Потом сумму этих чисел надо ещё поделить на 4. Надеюсь, вы помните, что деление на числа степени двойки можно заменить сдвигом? Т.е деление на 2 - это сдвиг двоичного числа на 1 разряд вправо, деление на 4 это сдвиг на 2 разряда вправо, деление на 8 это сдвиг на 3 разряда вправо, и.т.д. На контроллере нам, как минимум, придется потратить 1 такт на осуществление этого сдвига. Итого в самом лучшем случае нам потребуется 2 такта машинного времени для нахождения среднеарифметического 4 чисел. Максимальная частота, с которой можно запихивать данные в контроллер составит в самом лучшем случае 5МГц, быстрее контроллер просто не успеет обрабатывать данные.


А если нужно больше? Да не знаю я зачем нужно больше! И вообще не задавайте глупых вопросов! Хочу просто!


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


Как же дела обстоят с ПЛИС? А на ПЛИС мы просто создаём схему, которая будет делать сложение 4 чисел, и сдвигать результат сложения на 2 разряда вправо. И всё это выполнять можно спокойно менее чем за такт, ПЛИС с этим справиться без проблем. Главное сделать правильную схему. Более того, в ПЛИС останется куча места для творчества, и таких вот модулей, которые могут находить среднеарифметическое, можно сделать очень много. И все эти модули будут работать одновременно и независимо друг от друга. Ограничение накладывает лишь количество портов.


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


За счёт чего это получается? Приведу маленькую, мною придуманную притчу: взялись как-то ПЛИС и контроллер гвозди забивать на скорость. Контроллер взял свой самый большой молоток, оптимизировал свой алгоритм забивания гвоздей на максимальную производительность. И за 1 удар он своим молотком забивал 1 гвоздь. Контроллер смотрит на ПЛИС и ухмыляется. Не догнать его, он работает на пределе, и никто не может его обогнать! На что ПЛИС невозмутимо открывает свой чемоданчик и берет 100 маленьких, невзрачных молоточков, каждый из которых забивает гвоздь за 10 ударов. Видя, как ПЛИС забивает одним молотком гвозди, контроллер просто катается по земле от смеха, так-так она будет забивать гвозди еще миллионы циклов машинного времени, и ей никогда его не догнать. Но, глянув внимательно ещё раз, он увидел, что трудиться то 100 молотков, и постепенно ухмылка контроллера сменяется гримасой отчаяния. Ведь он уже далеко позади. ПЛИС не только догнала контроллер, но и пошла в отрыв, который стремительно увеличивается, и контроллеру за ПЛИС не угнаться !


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

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

На ПЛИС в отличие от контроллера, можно сказать, что нет такого понятия, как архитектура. В ПЛИС есть большая куча... Нет не так! В ПЛИС ОЧЕНЬ большая куча, универсальных логических элементов, которые могут реализовать базовые функции. Например, в ПЛИС Cyclone 3 EP3C10E144C8 таких логических элементов аж 10320 штук

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

Логический элемент может быть сконфигурирован как D-триггер, может быть мультиплексором, может быть элементом ИЛИ, может быть дешифратором и пр. Объединяя эти логические элементы, которые сконфигурированы на выполнение определённых функций, разработчик постепенно формирует цифровую схему, которая и выполняет возложенные на неё обязанности. Поскольку всю цифровую схему придумывает разработчик сам, он может реализовать арифметические операции так, что они могут выполняться быстрее, чем в контроллере, т.к. в контроллере, все операции вычисления выполняются универсальным элементом – АЛУ (арифметическое логическое устройство), которое умеет делить, складывать, умножать, сдвигать и пр. АЛУ предназначено для всей математики, поэтому одни операции АЛУ выполняет быстрее, а другие медленнее, это зависит от архитектуры контроллера.


На ПЛИС вы сами формируете схему выполнения этих операций. И скорость работы математики будет зависть только от правильности составленной схемы. Более того в ПЛИС, логические ячейки могут работать одновременно, и во власти разработчика реализовывать несколько независимых потоков вычислений. К примеру один модуль делит, второй умножает, третий складывает, четвертый двигает. Задача разработчика - правильно синхронизировать эти параллельные потоки, чтобы схема работала, так как вам надо. Так-же на ПЛИС реально реализовать собственный микроконтроллер, который даже можно программировать как обычный...


Казалось бы если ПЛИС - такая крутая и быстрая штука, то зачем вообще нужны контроллеры? Во-первых - экономическое обоснование. Сравните цены контроллера и ПЛИС, и увидите разницу в цене более чем в 10 раз. Во-вторых - не всегда нужна высокая производительность, которую можно достичь на ПЛИС. Например, вы считываете с датчика температуры показания, и выводите на простенький индикатор. В данной задаче разница в скорости выполнения измерений за 100 тактов на контроллере, или за 1 такт на ПЛИС, на результат почти не влияет, поскольку температура – это очень инертная вещь, которая изменяется бесконечно долго по меркам машинного времени. Зачем покупать дорогую ПЛИС, когда можно купить копеечный контроллер, который прекрасно справиться со своей задачей? Да и запрограммировать контроллер гораздо легче, чем ПЛИС. Ведь вы, наверное, догадались (я на это очень надеюсь), что ПЛИС не выполняет программу , а внутри неё реализуется цифровая схема, придуманная вами. А цифровую схему надо ещё придумать, отладить, протестировать, добиться стабильности, о чём я постараюсь рассказать в следующих постах.


Процесс создания цифровой схемы внутри ПЛИС во многом похож на создание схемы из кучи корпусов микросхем средней степени интеграции, таких как К155 или К555 серии, либо других серий логики. Только очень, и очень быстрой. Не каждый новичок обладает достаточными знаниями, чтобы с ходу взяться рисовать схемы. Ведь написать программу для контроллера и отладить её куда проще, чем нарисовать схему. Да и для работы с ПЛИС надо знать не только цифровую схемотехнику, но и различные интерфейсы. Например, если приёмопередатчик RS232 (COM порт) на большинстве контроллеров "вшит" внутри контроллера и в контроллере его надо правильно сконфигурировать, то на ПЛИС надо его реализовать самостоятельно. Допустимый вариант найти в интернете готовую схему RS232 контроллера для ПЛИС, со всеми багами и глюками оставленные разработчиком…


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


Итак, если ПЛИС дорогая, разработка сложная, и долгая - тогда зачем она нужна? Взять контроллер "пожирнее" и все! А ответ скрывается в моих примерах. В ПЛИС если правильно создать схему, можно добиться производительности в обработке данных, которая контроллерам и не снилась. Более того, в опредёлённом круге задач современные ПЛИС могут дать фору и современным моделям микропроцессоров! ПЛИС крайне выгодно применять, когда скорость вычислений не очень критична, но требуется большое количество портов ввода\вывода, либо одновременность и независимость работы этих портов ввода\вывода. С этим у ПЛИС проблем нет. За счёт параллельности работы, логических ячеек в ПЛИС можно реализовать ряд устройств, работающих независимо друг от друга - и таким образом сэкономить на количество корпусов на печатной плате - что в итоге может существенно снизить стоимость изделий.


Вывод – ПЛИС реализует цифровую схему, заданную разработчиком. Контроллер – выполняет программу написанную программистом. ПЛИС и микроконтроллеры, принципиально разные классы устройств. В одних случаях лучше применять ПЛИС, а в других микроконтроллеры. Каждый случай надо рассматривать отдельно и искать наиболее рациональный вариант. Иногда решающую роль в выборе платформы будет играть срок разработки изделия. К сожалению, по скорости разработки ПЛИС сильно уступает контроллеру. Но у ПЛИС есть ещё одно неявное преимущество перед контроллерами - универсальность знаний. Большинство проектов можно написать практически независимо от серии микросхемы ПЛИС и производителя, с которым в данный момент вы работаете. И сменить производителя и тип ПЛИС можно относительно безболезненно, в отличие от контролеров, где смена типа контроллера подразумевает смену архитектуры, на которую, сильно завязана программа.


Итак, если вы вдруг всё же решитесь взяться за изучение ПЛИС - то начинать надо в первую очередь с основ цифровой схемотехники. После того, как вы познаете тайный смысл слов таких как: счётчик, мультиплексор, компаратор, шифратор, дешифратор, исключающее ИЛИ и прочие умные слова, услышав которые, у вас появлялось стойкое желание спрятаться под кровать и биться в припадке (у меня так и было, честно-честно), необходимо выбрать среду моделирования и софт производителя ПЛИС. Я считаю, что начинать изучать ПЛИС надо с Altera, поскольку их среда разработки - Quartus, крайне проста и удобна в освоении за счёт простого и понятного интерфейса, в отличие от ISE фирмы Xilinx. В принципе, есть и другие производители ПЛИС такие как: Lattice Semiconductor, Actel, но это скорее экзотика, которая не очень походит для изучения ПЛИС.


После выбора среды разработки на ПЛИС, крайне желательно установить среду моделирования Modelsim, производства компании Mentor Graphics. Хотя софт от разработчика ПЛИС и предоставляет инструменты отладки и моделирования схем, однако у них очень ограниченный функционал, да и Quartus от Altera недвусмысленно намекает, что моделируйте схемы в Modelsim. Но на начальном этапе, можно эти намёки игнорировать.


Итак, основы схемотехники вы познали, софт разработки и моделирования установили. Необходимо определиться со способом описания схем в ПЛИС. В настоящее время в основном используется 3 основных способа описания схем на ПЛИС:


Первый – это рисование цифровых схем из элементов, такие как триггеры, счётчики, мультиплексоры и пр. Т.е точно также, как создавали схемы раньше. Например, в САПР Quartus этот способ ещё доступен, но данный способ подходит только для простых схем, поскольку в больших проектах схема становиться не читаемая.

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

Второй способ – это использовать среду Matlab но, к сожалению, я про этот способ почти ничего не знаю.


И самый продвинутый и удобный способ - описание на языке HDL - hardware description language (Язык описания аппаратуры). На данный момент самые распространённые языки это Verilog и VHDL. Также активно развиваются языки System verilog, System C, про них я говорить не буду, поскольку знаю про них чуть больше чем ничего.

С чего начать изучение FPGA (ПЛИС) ? Плис, Fpga, Схемотехника, Разработка, Электроника, Arduino, Длиннопост

Изначально как Verilog, так и VHDL применялись для описания схем, созданных в схемном виде, и для моделирования этих схем. Но потом умные люди смекнули, что можно эти языки применять и для создания этих схем. И появилось RTL (Register transfer level) подмножество этих языков - уровень регистровых передач. Т.е теперь можно писать программу описывать схему в виде текста, которая средствами САПР будет синтезироваться в схему, на ПЛИС, которая вам нужна. И это оказалось весьма и весьма удобно, именно поэтому текстовый ввод получил наибольшее распространение.


Но из-за того, что основная и первоначальная задача этих языков – это моделирование, появилась жуткая путаница, поскольку часть языковых конструкций применяется для моделирования, а другая часть для синтеза. И часто начинающий разработчик на ПЛИС не читает документацию и стандарты к выбранному HDL языку, и применяет языковые конструкции, которые в реальную схему синтезироваться не могут, и долго не может понять, а почему схема не работает? Появлению этой путаницы немало поспособствовали авторы книг по HDL языкам. Очень многие авторы сначала долго и муторно пишут про подмножество языка, предназначенного для моделирования, а про синтезируемое подмножество пишут только в середине, или посвящают этому несколько глав в конце книги. Получается, что человек прочитал половину книги, а это всё предназначено только для моделирования синтезируемой части языка. А ведь, правда. Кто сразу садиться за моделирование? Чтобы приступить к моделированию, необходимо иметь объект моделирования, т.е. синтезируемую схему. А как её получить читателя не научили.… Более того, правильное написание синтезируемой части языка, основные правила практически не раскрываются в книгах, а если и раскрываются, то очень поверхностно. В итоге получается, что те, кто учиться на примерах, поставляемых фирмой Altera или Xilinx, описывают схемы гораздо лучше, чем те кто учился по книгам, но моделируют хуже.


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


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


Итак, давайте подведём краткие итоги всего написанного мной:

1. ПЛИС штука нужная, быстрая, и дорогая. И применять её надо там, где она реально нужна. И выбор «ПЛИС или микроконтроллер» зависит в первую очередь от класса задачи, срока реализации.

2. Изучение ПЛИС надо начинать с основ схемотехники, поскольку в отличие от микроконтроллера, управляемого программой, внутри ПЛИС описывается цифровая схема, со всеми вытекающими последствиями.

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

4. Книги, безусловно, нужны, но книги не панацея, и лучшее понимание синтезируемой части языка дадут примеры, которые выкладывают в свободный доступ разработчики ПЛИС, в частности Altera и Xilinx. Практика и ещё раз практика.

5. Начать изучение ПЛИС лучше всего с написания простейших логических элементов, таких как, мультиплексор, триггер, счётчик, и пр. И постепенно наращивать сложность схем, параллельно читая книги, и осваивая новые языковые конструкции, и самое главное, понимая, во что они реально синтезируются внутри ПЛИС.


Ссылки рекомендуемые к просмотру:

1. http://www.kit-e.ru/articles/circuit/2008_3_161.php

2. http://we.easyelectronics.ru/plis/mk-vs-plis.html

3. http://we.easyelectronics.ru/plis/osnovy-vhdl-primer-prosche...

4. http://we.easyelectronics.ru/plis/vhdl-s-nulya.html

5. https://electronix.ru/forum/index.php?showtopic=88290&st=135

6. https://habrahabr.ru/post/274829/

Показать полностью 5
Плис Fpga Схемотехника Разработка Электроника Arduino Длиннопост
24
Hellismyhome
Hellismyhome
8 лет назад

Стоит ли на создать ряд постов на Pikabu про программируемую логику (FPGA) ?⁠⁠

Для минусов ниже..

Fpga Плис Схемотехника Электроника Текст
14
Natali284
8 лет назад

Помогите пожалуйста⁠⁠

Помогите пожалуйста
[моё] История Плис
7
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии