Сделай шаг к ПЛИС



    Ты ждал знак? Вот он!

    Много лет я не решался начать программировать ПЛИС, потому что это сложно, дорого и больно (как мне казалось). Но хорошо, когда есть друзья, которые помогают сделать первый шаг. И теперь я не понимаю одного — ПОЧЕМУ Я ЖДАЛ ТАК ДОЛГО?

    Сейчас я помогу сделать первый шаг и тебе!


    А зачем оно мне?


    Ты устал постоянно читать доки по своему МК или держать кучу информации в голове. Ты все переписал на asm, но скорости все равно не хватает. Ты подключил два внешних устройства к своему МК, подключаешь третье, но у тебя кончились прерывания, перестают работать те модули, что уже работали. Ты берешь другой МК, более мощный из той же линейки, но опять мануалы, регистры флагов, биты… ад. Меняешь платформу: переходишь на другой МК и выкидываешь на помойку свои знания по прежней платформе. Что бы ты не делал — оно дается тяжело. Ты находишь популярную платформу, в которой можно легко из компонентов собирать проект, но выше аппаратных ограничений данного МК все равно не удается прыгнуть… Где-то на краешке сознания иногда проскакивает мысль, что вот на ПЛИС это бы точно заработало быстро и параллельно, что это «именно та задача, которую бы надо решать на плис», но я стар/глуп/занят/etc чтобы суметь/начать такое делать.



    Хочешь наконец вздохнуть свободно? Идем дальше!

    Радость от разработки на ПЛИС


    У меня был тяжелый рабочий день. С одной работы я приехал на вторую работу, потом на дачу, вечером домашние дела, уроки, потом семейный просмотр кино и только в 23 часа я оказался совершенно свободен! Сказать, что я был уставший — ничего не сказать. Но в таком состоянии я сел за ноут с твердой целью: сделать генератор меандра на 440 Гц. Прошло 20 минут и я уже слышал его в наушниках. Я не верил своим ушам! Еще 15 минут мне потребовалось, чтобы сделать ШИМ и менять громкость. К тому времени плата с ПЛИС у меня была всего с неделю и до этого я пролистал всего пару книг по Verilog.

    В тот вечер я понял: ВОТ ОНО! Вот та платформа, в которой я быстро и легко могу превращать свои мысли в реально работающее железо!



    Почему так?


    Опишу плюсы, которые есть в изучении и применении ПЛИС, хотя их и так все знают:
    • Универсальность знаний — при смене модели МК нужно читать доки. При смене производителя МК нужно читать доки. Нужно постоянно читать доки, постоянно держать в голове кучу информации. При разработке на ПЛИС, если знаешь Verilog или VHDL, то можно не только программировать любой ПЛИС из линейки одного производителя, но и при желании перейти на другого (Altera, Xilinx). Хоть и будут моменты с освоением другой среды разработки, тонких аппаратных моментов, но сама суть подхода проектирования устройств на HDL от этого не изменится.
    • От идеи к железу — при разработке проекта, если тебе не хватает одного мк, то приходится выбирать другой. В принципе можно строить предположения справится или не справится этот МК с проектом. Либо есть какой-то конкретный МК и ты пытаешься туда вместить проект. Чаще всего именно так. Мне это чем-то напоминает подход моего деда, который делает лестницу из того, что есть в сарайке. Хотя можно спроектировать лестницу, купить досок, которые подойдут… От идеи к железу, а не наоборот.
    • Простота применения чужих разработок — можно взять чужой модуль и применить его в своем проекте. По коду сможете понять, как он работает. Даже, если он для xilinx, а вы делаете под altera. Иногда это получается не сарзу, но это проще, чем, например, добавлять двоичные библиотеки к проекту на c++/Qt
    • Независимость блоков. Блоки в HDL, как чистые фунции в ЯП. Зависят только от входных сигналов. Разработанный и отлаженный модуль в будет и дальше работать правильно, как бы не рос проект. Ничто снаружи не повлияет на правильность его работы изнутри. Да и вообще можно забыть, как он работает — это черный ящик. К тому же, блоки работают параллельно.



    Проблема выбора


    Сильно останавливают вопросы, что выбрать: Altera/Xilinx, Verilog/VHDL, какую отладочную плату взять. Но обо всем по порядку.

    Производитель


    Я выбрал Altera. Почему? Ну мы вот так с другом решили, хотя название Xilinx мне красивее. НО. Если ты сейчас не можешь выбрать, то я сделаю это за тебя. Тебе нужен Altera! Почему? Я не знаю. Сейчас важнее сделать шаг: сделать выбор. Я выбрал Altera и пока не пожалел.



    Язык


    Берем Verilog потомучто… ну ты понял.


    Отладочная плата


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

    В семействе Altera, за разумные деньги мы можем купить платы с CPLD MAX II на 240, 570 и 1270 элементов, либо более старшие микросхемы FPGA, которые Cyclone 1, 2, 3, 4 с количеством до 10000 и более ячеек. Как же выбрать?

    Даже на базе 240 ячеек, проект Марсоход делает просто огромное количество проектов. Настоятельно рекомендую ознакомиться, чтобы иметь примерное представление о сложности проектов, которые можно уместить в 240 ячеек. С другой стороны, существуют проекты, которые полностью программируются под аппаратную копию определенного ПК, включая процессор и всю логику вокруг него (NES, Speccy, Orion, ЮТ-88, etc). Для этого уже требуется пять, десять и более тысяч ячеек. Плюс эти платы содержат дополнительные внешние устройства.

    Поэтому я бы посоветовать взять что-то среднее между 240 и 10000 ячейками, с предпочтением в сторону увеличения в зависимости от доступных средств. На отладочной плате лишние ячейки это не страшно, а если их не хватит — уже ничего не поделаешь. Потом, когда устройство отлажено, станет ясно, сколько надо ячеек, купить под нужное количество, без лишнего «обвеса», дешевле и оставить в готовом устройстве.

    То, чем действительно отличаются MAX от Cyclone'ов, кроме количества ячеек, это:
    1) У серии MAX внутри нет PLL. На каждой отладочной плате есть генератор, как правило на 50 МГц. Основной массе проектов этого будет достаточно. Все синхронизации будут происходить путем деления 50 МГц на какое-нибудь значение. Либо, можно взять внешний генератор и подать на отдельный вход ПЛИС. А что, если потребуется частота выше 50 МГц? Мне не удалось с ходу найти генераторы выше 50 МГц. Но тут как раз на помощь и приходит PLL, который встроен в Циклоны. На нем можно умножить частоту, например, до 100 МГц.
    2) В серии Cyclone встроены аппаратные блоки умножения. Их количество зависит от конкретной модели — тут как раз можно «всетаки заглянуть в инструкции», чтобы узнать сколько. Если предполагаете делать какой-то ЦОС, то они пригодятся: сэкономят ячейки, увеличат скорость. С другой стороны, если нет умножителей, их можно синтезировать, но у маленькой ПЛИС на это может не хватить ресурсов.

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

    Сколько нужно денег?




    Программатор
    Я считаю, что у меня нет времени, чтобы паять программаторы на рассыпухе.

    300 рублей. Я свой брал на ебее, выглядит так:


    Отладочная плата
    Выбор широкий, в зависимости от количества денег.

    Начальный уровень 350 — 550 рублей. Это платы на MAX II (240 или 570 ячеек). Могут подойти для начального ознакомления и дальнейшего пристройства в конечные устройства. На плате есть генератор, пара кнопок, пара светодиодов, остальные 80 выводов на свое усмотрение.


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

    Средний уровень от 900 до 1500 рублей. Это платы Cyclone 1, 2, 3, 4 отличающиеся в основном количеством ячеек.
    Маркируются примерно так:
    EP2C5T144 — Cyclone 2 примерно 5к ячеек
    EP4CE6E22C8N — Cyclone 4 примерно 6к ячеек
    EP2C8Q208C8N — Cyclone 2 примерно 8к ячеек

    Можно заметить, что Cyclone 3 может иметь больше ячеек, чем Cyclone 4.

    Вот несколько вариантов:

    835 рублей.
    ALTERA FPGA CycloneII EP2C5T144 Minimum System Board for Learn good


    880 рублей
    Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081


    1265 рублей
    EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board


    Платы с расширенными возможностями. Это платы, на которых установлены дополнительные модули (UTP, USB, AUDIO), разъемы (SD, VGA), кнопки, переключатели, светодиоды, семисегментные индикаторы и т.д. Либо может идти базовая плата, а к ней могут прилагаться платы расширения отдельно.

    У меня трудится такой комплект — плата + плата расширения:
    Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
    2760 рублей

    Вот основная плата. На ней есть 2 светодиода, 2 кнопки, 4 переключателя, семисегментный интикатор и микросхема оперативной памяти.


    Плата расширения. На ней распаяны SD, VGA, а так же контроллеры USB(High Speed USB2.0 Chip: CY7C68013A), AUDIO(Sound Card up to 96kHz/32bit ADC/DAC: WM8731S), UTP(100M Ethernet interface: DM9000A):


    Эти платы просто вставляются одна в другую, но у меня она пока лежит в ящике. Для своих поделок у меня макетка, с которой я соединяюсь шлейфом, который идет в комплекте. Еще в комплекте идет блок питания на 5 вольт.

    Еще варианты:

    Altera Cyclone NIOS II SOPC FPGA Development Learning Board EP2C8Q208C8N+LCD1602 — 2670 рублей


    Terasic Altera FPGA DE0-Nano Cyclone IV Development and Education Board — 4600 рублей


    Широкий выбор альтеровских плат и расширений к ним
    Проект Марсоход

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

    Заказал, ждем


    Пока идут платы, можно начать себя морально и технически готовить:
    — Установить Quartus II v.11.1
    Почитать:
    — Книга: А.К. Поляков Языки VHDL и Verilog в проектировании цифровой аппаратуры 2003
    www.kit-e.ru/articles/circuit/2008_3_161.php — Краткий курс HDL
    — Уроки на марсоходе по верилогу, архитектура, простые советы по стилю.
    VERILOG как образ жизни
    Хорошие примеры (EN)
    Как начать работать с ПЛИС (Xilinx)

    ВСЕ!


    Мы ждем от тебя интересных проектов на ПЛИС!



    PS. Обращаясь к тебе на «ты», я обращаюсь, как к равному, личности, а не части толпы. Если обращение на «ты» оскорбило, прошу меня извинить.

    ВНИМАНИЕ! Verilog и ПЛИС не являются серебряной пулей и волшебным средством решения любых задач, они не могут заменить микроконтроллеры во всех проектах. Для работы с ПЛИС требуется определенный уровень технической подготовки. Вы сами несете ответственность за все решения в вашей жизни. Автор снимает с себя ответственность за возможные финансовые и временные потери, связанные с вашими исследованиями в области ПЛИС и Verilog.
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 89

      +3
      Хочу порекомендовать вот этот цикл статей:
      www.kit-e.ru/articles/circuit/2008_3_161.php

      Мне в свое время сильно помогло «въехать в тему»
        0
        Спасибо, добавил
        +2
        Первую плату я бы советовал взять всё таки с большим набором периферии. На начальных этапах будет проще разобраться что вы накосячили именно с Verilog кодом а не в железе что то не так собранно. Ну и на всякий вот набор ссылок с которых я когда то начинал.
          0
          Поскольку автор собирает синтезатор, в первую очередь понадобится аудио-обвес. Можно сделать вывод и на gpio, но для чего-то мало-мальски серьёзного нужен внешний DAC. Ну и VGA всегда полезен, если его есть куда воткнуть, хотя бы для отладочной информации. Свитчей несколько чтоб было, остальное по вкусу.
            0
            Для отладки вывод звука делаю пока так.

            Преобразовываю либо ШИМ (8 бит), либо дельта-сигма (8-16 бит), по звуку даже более-менее приемлемо:


            Хотя форма мне не очень нравится (асимметрия):
              0
              Ой, я с аналоговой электроникой не особо дружу, так что использую готовые решения, но вы похоже, знаете что делаете. А график откуда — выход с ПЛИС на микрофонный вход компьютера завели?
                +1
                Да ладно. Я просто балуюсь :) График — «скрин» из программы GoldWave.
                Записываю через линейный вход. В моем случае это внешняя звуковая плата Creative EMU 0202 USB.
                0
                Скажу одно: чем красивее выглядит аудио сигнал — тем хуже он звучит :)
                +2
                Я просто не привязываясь к конкретному проекту. У меня был тяжёлый но интересный старт с CPLD EPM7064, для которой сам паял макетку. И если что то шло не так то понять было не легко кто виноват, особенно учитывая частоты на которых может работать FPGA/CPLD. После покупки Terasic DE1 жить стало в разы легче, учитывая количество примеров идущих с платой.
              +1
              Уже который раз хочу собрать на FPGA хоть что-то, но каждый раз прихожу в уныние от того, что банально не хватает времени.
              Свой проект двигается, но медленно… а хочется схватиться за всё… \Иногда, правда, в ответ получается удар током, но тут уже куда деваться\
              Например, хочется добить декодер HDB3 (E1) с его экспресс-анализом и выводом в контроллер и передачей куда-нибудь дальше для логгирования. Что останавливает? Теперь -1 к количеству причин!
                +1
                У вас интересный проект, но видно, что он почти на грани для МК. В нем больше борьбы с МК, чем с задачей. А может стоит попробовать решить на ПЛИС? Кстати мы сейчас «раскуриваем» модуль для DHT22. А пример работы с ds18b20 уже есть. И поставить их можно будет столько, сколько нужно.
                Однако, есть чему и поучиться, например теме с 74HC595 по расширению количества ног. Я тут про эту микросхему как раз вспоминал недавно. Может показаться странным, но есть у меня на примете задачи, где даже ~80 ног ПЛИС на ввод/вывод будет не достаточно :) Кстати, раз уж вы в курсе дела, до каких частот работает эта микросхема?
                  +2
                  2 MHz при VCC 2V
                  20 MHz при VCC 4.5V
                  24 MHz при VCC 6V
                    0
                    Там пара МК. Возможно, в постах это не упоминал, но проект немного разросся в ширь. Теперь мучаюсь с преобразователем PoE -> 5V. Скоро ожидается рабочий образец. В основном, проблема сейчас в этом.
                    На ПЛИС не получится (незнание языка) в основном. Но идея хороша.
                    Из минусов решения — дороговизна решения (замена Slave контроллера на ПЛИС — 50 рублей -> 500 рублей); большой корпус (беглый взгляд даёт самый просто вариант здесь, но тут УЖЕ «1270 LEs with 114 common I/O, 8K bits User Flash Memory») но не могу понять, мне этого хватило бы на создание 1кБ памяти, или нет… но вот НОГИ… =) Многовато, в общем.
                    Так что, по сути, тот проект не относится с работе с FPGA. Он будет полностью на микроконтроллерах и обвязке.
                    И, да, делать дисплеи на FPGA — это очень толсто =)
                    Про расширители Вам уже написали. У себя питаю от 5V и проблем с производительностью не замечал ни разу.
                      0
                      Вот наша ошибка, как технарей, в том, что мы иногда пытаемся размышлять, как экономисты: 50 рублей, 500 рублей. И при общении с другом, у которого высшее образование в области финансов, есть свой бизнес (небольшое производство), я понимаю, что при разработке устройства, лично мне — разработчику не нужно думать про деньги, себестоимости и прочее, потому что в этом я вообще ничего не понимаю. Я начинаю рассуждать, мы это все анализируем и я понимаю, что это вообще детский лепет. Он вообще считает, что если я должен сделать устройство, то лучше, чтобы я его сделал быстро. Сколько оно будет стоить — уже его работа. А что внутри — это его совершенно не интересует: с задачей справляется, работает надежно — отлично!
                      Но если вот так задумываться, что есть 500 рублей? Допустим, это примерная стоимость часа работы сферического инженера в вакууме. То есть, если над кодом провозился день, то цена микросхемы в 50 или 500 рублей — уже нет никакой разницы. А если это микросхема STM стоимостью в 5 рублей за штуку? Но чтобы перетащить проект на нее требуется 1.5 месяца? Экономика! Но у меня совсем другое образование. Поэтому надо делать свою работу, пользуясь теми инструментами, что нам удобно. Если это AVR — да и отлично! Рука набита, вперед! Важен результат :)
                        0
                        И как это ни парадоксально, то же самое касается внутреннего перфекциониста разработчика, Если два устройства работают одинаково, но одно было разработано за неделю и код занял почти всю память, а второе за 1,5-2 месяца, но код в 10 раз меньше — какое выгоднее? Жестоко, но факт — первое. Ибо против математики не попрешь…
                          0
                          да… но против другой математики тоже не попрёшь. Чтобы развивать первое устройство понадобятся огромные усилия. По первому типу выходят одноразовые вещи… Второй тип используется в ответственных применениях, военка, авионика и т.д.

                          Да! Даёшь мигалку светодиодом на основе кристалла STM32!!!
                  +1
                  Дайте угадаю, статья из/для «Хакера»? :)
                    +6
                    Фразы типа: "название Xilinx мне красивее." "Тебе нужен Altera! Почему? Я не знаю." говорят сами за себя.
                    +3
                    Все-таки хотелось чуть больше объективности увидеть в статье. Мол вот плюсы, а вот здесь минусы.

                    ИМХО использовать ПЛИС стОит, когда стоит задача обработки цифрового сигнала и вот ну никак иначе. А когда начинается сложная логика или протокол связи, то все-равно внутрь ПЛИС приходится загружать какой-то из доступных микроконтроллеров (что приводит к еще большему веселью, и никак не отменяет нужды читать доки).

                    Ну и еще есть стандартные проблемы с восприятием подхода к… даже язык не поворачивается сказать «программированием ПЛИС». Это не программирование в привычном понимание. Программа — набор последовательных инструкций. В ПЛИС с непривычки очень здорово запутаться можно, а каждая ошибка превращается в 10 минут (почти что минимум) безделья и попивания чая на пересборку проекта.

                    Ну и чтобы еще больше «уравновесить» восторг статьи, чуть критики перечисленных плюсов:
                    1) не надо читать доки на МК. Зато придется читать доки на: USB, Ethernet, думать как перетащить известную написанную на С/С++ реализацию TCP/IP в ПЛИС, CAN и прочее-прочее добро. То, что есть готовые модули — это хорошо, но документацию то значит придется читать на них, не? а когда чужой модуль начинает вести себя… непредсказуемо? Да он же бесплатно был взят из инета! какие претензии?
                    2) ну про дедушку пример можно и про плис сказать. в сарайке есть плис, вот из него и соберем. А с тем, что есть эффективный по функциональности, цене в серии и, страшно сказать, времени на разработку МК под этот род задач, даже и разбираться не будем — лень же читать доки и все это в голове держать.
                    3 и 4ое — мне кажется когда в годах 70х придумывали языки программирование, то в каждой презентации были вот эти слова про «теперь можно сделать хорошо отлаженный модуль», «легко импортировать чужие модули».
                      +1
                      В ПЛИС с непривычки очень здорово запутаться можно, а каждая ошибка превращается в 10 минут (почти что минимум) безделья и попивания чая на пересборку проекта.

                      Используйте симуляцию (modelsim/questasim/бесплатные аналоги) ;)
                      Хотя, понимаю, что для маленьких проектов их может быть лениво писать)
                        0
                        Каюсь, грешен. Основная цель статьи — привлечь людей к тому, чтобы они начали использовать ПЛИС. И я умышленно не стал говорить обо всех возможных проблемах на этом пути. Я не соврал, я просто не сказал всей правды :) К сожалению, секта ПЛИСоводов после этой строки лишится процента прихожан :(

                        Ну и считаю, что я обязан прокомментировать все тезисы, раз уж все так серьезно:
                        ИМХО использовать ПЛИС стОит, когда стоит задача обработки цифрового сигнала и вот ну никак иначе. А когда начинается сложная логика или протокол связи, то все-равно внутрь ПЛИС приходится загружать какой-то из доступных микроконтроллеров (что приводит к еще большему веселью, и никак не отменяет нужды читать доки).

                        По поводу ПЛИС исключительно для ЦОС, тут не согласен. Плис ИМХО, постепенно вытеснит DSP, но я не профи в этой области. Просто мнение. Но считаю, что ПЛИС можно применять более широко, даже не создавая МК на кристалле.

                        1) не надо читать доки на МК. Зато придется читать доки на: USB, Ethernet
                        В случае применения МК, нужно читать доки и на МК и на USB, а если мк не справляется, то доки на другой_МК. А если они все не справляются — ставить еще один МК — они ж дешевые! В случае с ПЛИС нужно читать доки на USB и выбрать ПЛИС, в которую все влезет. Хотя бы чуть чуть, но меньше трудозатрат. Если МК будет внутри ПЛИС, то наверное будет то же самое, не пробовал. Но количество разных технологий в проекте уменьшится. Повторюсь, я не профессионал в этой области, они сейчас делают все системы на одном кристалле. Видимо, в этом есть какой-то смысл. А документацию читать все равно придется — тут согласен (блин, еще народ ушел).

                        2) ну про дедушку пример можно и про плис сказать.
                        Вот! В точку. Это известная проблема, когда человек становится увлечен какой-то технологией: он начинает ее пихать вообще везде. Питонисты пишут все на питоне, даже написали свой HDL — MyHDL. Любители Erlang начинают писать интерфейсы с пользователем (я не имею в виду N2O) и бухгалтерские системы. Любители МК делают регуляторы уровня воды в баке, хотя все чудно можно разрулить на реле… И список можно продолжать. Давайте добавим ПЛИС в арсенал, но не будет пихать везде.

                        3 и 4ое — мне кажется когда в годах 70х придумывали языки программирование, то в каждой презентации были вот эти слова про «теперь можно сделать хорошо отлаженный модуль», «легко импортировать чужие модули».

                        В том и дело, что не всегда и не легко. Но тут надо решить для себя, над чем стоит ломать копья, а что не стоит твоего времени. Я не начну решать задачу на МК, допустим, КР1878ВЕ1, потому что у полученного опыта не будет будущего. Ну если только ради фана, спортивного интереса. В области МК я для себя решил, что если и буду тратить время на изучение нового МК, то это будет ARM. А в области схемотехники, обработки, генерации сигналов (ЦОС), в быстродействующих схемах — ПЛИС. Потому что эти знания пригодятся в будущем: процессоры ARM не перестанут производиться, а знания Verilog можно будет перетащить на другого производителя (Altera, Xilinx, Achronix, etc). Но я могу себе позволить ошибаться в выводах в области электроники, потому что она не является сферой моей профессиональной деятельности :)
                          +1
                          Основная цель статьи — привлечь людей к тому, чтобы они начали использовать ПЛИС.

                          Люди должны начать использовать ПЛИС только тогда, когда это экономически выгодно и действительно необходимо)

                          К примеру:
                          Есть ТЗ на какой-то девайс, и если готовый MCU/CPU не может удовлетворить эти требования ( по производительности, к примеру ), то разработчик ищет варианты, как это можно реализовать. И FPGA является одним из таких вариантов. Для высокопроизводительных вычислений в этом вопросе рядом встает и GPU. А может проще купить мощнее сервер или обсчитывать всё на кластере из серверов?

                          ЦОС, к примеру, может обсчитываться на специальных готовых DSP-чипах. Для каких-то задач будет проще взять такой процессор, чем писать это всё на FPGA.
                            +1
                            А если мне просто интересно? )
                            В моем случае шаг в сторону ПЛИС произошел после тщетных попыток сделать клон электрооргана Юность-70 на базе AVR. Мы очень долго обсуждали эту тему на форуме, я ставил эксперименты с делителями на AVR и больше 10 меандров сделать не мог. А нужно было их по 12 на октаву, да еще и менять громкость регистров, сделать частотную модуляцию, вырисовывалась архитектура из 10 AVRок, либо с ограниченным количеством голосов, либо цифровое решение с ЦАП. Четырехголосный электроорган никому не надо. Цифровой орган у всех и так есть. Аналоговая тема в звуке — вообще отдельный разговор. Но суть в том, что надо отдельно больше 100 меандров, в оригинале это делители на счетчиках. Поэтому надо либо делать то же самое на десяти корпусах, либо какие-то современные решения. О чем я мог подумать, кроме ПЛИС?
                              +1
                              :)

                              Решение на 10 AVR не понравилось -> нашли альтернативу в виде FPGA. Это как раз то, о чем я говорю — надо использовать FPGA только тогда, когда надо, т.к. это не серебряная пуля. Если в другом проекте и без FPGA обходятся, то не надо делать что-то на FPGA)

                              С другой стороны, в масс-продакте цена может сильно влиять на вариант реализации. И если вариант на FPGA не вписывается в бюджет, то…
                              Во-вторых, хороших FPGA программистов для больших проектов сейчас сложно найти.
                                +1
                                Все равно не пойму этой ненависти к ПЛИС. Задача получить 100 меандров по отдельности, путем деления частоты основного генератора. Чем я должен мотивироваться в сторону 10 AVR'ов и не принять решение на 1-й CPLD + 1AVR?
                                  +1
                                  Где ненависть к ПЛИС?)
                                  Я их очень люблю, см. мой профиль)

                                  Просто Вы заявляете, что надо использовать FPGA. На кого направлена статья? На людей, которые не определились — нужна им FPGA или нет для своих задач. Допустим, прочитали на википедии для чего могут они использовать. Не думаю, что после Вашей статьи им еще стало всё понятнее и они больше замотивированы, что FPGA им поможет для решения своих задач.

                                  Ваш пример с Юностью намного более показателен, чем то, что написано в статье. Вы решили конкретную задачу на FPGA и если у человека, который не определился нужно ему это или нет, возникает подобная задача — он поймет, что FPGA это именно то, что ему надо.
                                    0
                                    На кого направлена статья?

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

                                    Вот даже пример ниже от Олега Анатольевича:
                                    Чувствую что во многих проектах применение простеньких и недорогих ПЛИС мне могло бы пригодиться но никак не соберусь начать их освоение.

                                    Ну и вы, как профессионал, скажите, может я действительно зря людей мотивирую? В заблуждение ввожу? А статью убрать надо…
                                      +1
                                      Если Вы ставите людей замотивировать что-то сделать (а это похвально и в этом плане я Вас полностью поддерживаю), то сделайте статью с нуля, начиная что и как надо поставить, выбором девкита, описать все шаги, и получить реальный осязаемый продукт. Выложите проект с исходниками, покажите, что сделать обработку ЦОС на FPGA реально просто. Человек просто возмет, купит плату, аналогичную той, что вы используете, по шагам пройдется и получит аналогичный результат.

                                      Мой коллега делал подобную статью: habrahabr.ru/post/235707/. Там расписаны все шаги, и любой просто повторит их и получит такой же результат, что и в статье. Что я должен повторить в вашей статье и какой результат получить?

                                      Так же надо показать альтернативу, что реализация на MCU/CPU займет больше времени/будет не выгодной/не производительной и так далее. К примеру, вы выбрали Altera и Verilog без какой-то ощутимой мотивации. И даже холивар VHDL vs Verilog не развели)
                                        0
                                        Да, есть о чем подумать. Сделаю выводы :)

                                        Я обычно свое мнение при себе держу, но в целях повышения качества… Статья подробная, исчерпывающая, согласен. Но, меня, почему-то не заинтересовала и ни к чему не смотивировала. Почему, с ходу не смогу сказать, тут надо как-то аналитически рассмотреть этот вопрос. Прочитал, как константу, факт и все. Единственное, что меня заинтересовало: стоимость платы. Моя статья наоборот — пустая, никакой конкретики. Степень влияния на аудиторию оценить сложно, можно только плюсики и просмотры сравнить, но показатель ли это!? Очевидно, что статьи нужно делать и не просто исчерпывающие, и не зрелищные, но пустые. Будем работать над этим )

                                        По поводу Altera, работаю не один, совместно так решили — без особых обоснований. Как и Verilog — из за похожести на си (как обычно пишут). Но не более того. Я начинал с нуля, поэтому особой разницы то не было. Но тема холиварная, поэтому я эти пункты «проехал» быстро и без шума.
                                          0
                                          О мотивации всё Джордж Карлин в своё время сказал)

                                          Мне, например, интересен SystemC, что бы понять я могу использовать в своей разработке или нет. Статья «Сделай шаг к SystemC» где будет лейтмотивом, что «SystemC это круто», не особо поможет мне разобраться в теме.

                                          А статья «Сравниваем SystemVerilog и SystemC», где разработчик делает НЕ счетчик, а что-то более менее серьезное на обоих языка с пошаговыми инструкциями и сравнениями по частоте, логическим элементам, удобству и гибкости намного больше даст пищи для размышлений.
                                        +1
                                        Как по мне, так под контроллеры сложнее программировать.
                                        У hdl более предсказуемое поведение.
                                        И там тоже непонятно какую фирму взять, asm или Cи…
                                          0
                                          Когда до этого много писал на обычных языках программирования, то понять почему оно работает не так в hdl сложновато. Привыкнуть к тому что цикл будет развернут во время компиляции, и прочие хитрости не легко. Поэтому и кажется что это сложней.
                                            0
                                            А когда до этого писал мало на обычных языках, к ним потом привыкнуть может и сложнее даже.
                          0
                          Вот что меня действительно отпугивало (да и продолжает отпугивать) в ПЛИС — так это тот факт, что даже на начальном уровне (см. фотографии в статье) я вижу ужасный TQFP80, а то и 100 и более, практически гарантирующий мне тот факт, что моя разработка не выйдет из состояния «поделки» на development board даже теоретически. Работа с МК не является тем, чем я зарабатываю на жизнь, у меня нет бригады монтажников или парка монтажных автоматов, которые приделают этого монстра на мою плату за секунду, а потому все довольно печально. К сожалению.

                          И я с радостью попробую, если шаг ног у чипов будет хотя бы 0,8мм.
                            0
                            У многих современных ПЛИС шаг 0.8, хотя полно и старых BGA с шагом 1 мм.

                              0
                              Приделать монстра на плату не проблема, абы плата уже была готовая… припаять можно обычным паяльником с жалом типа «волна» или использовать специальную паяльную пасту с шариками припоя и паяльным феном.
                                0
                                Если смотреть на начальные CPLD www.chipfind.ru/catalog/ic/cplds/?&field=price&order=asc то там вполне есть корпуса типа 44-PLCC конечно ресурсов в ней не так много, но для начала зачастую хватает.
                                  0
                                  CPLD с 10 макроячейками есть, судя по этой таблице, даже в SOIC-24…
                                  теперь осталось выяснить, сколько их для чего (примерно) нужно
                                  было бы, кстати, интересно почитать
                                    0
                                    Да, пожалуй, стоит в квартусе поэкспериментировать на этот счет.
                                      +1
                                      Вот сейчас навскидку взял первый попавшийся на Ебее CPLD от Altera.
                                      EPM7032SLC44-10 IC MAX 7000 CPLD 32 44-PLCC — 135.23 рубля с доставкой.
                                      Параметры: Usable gates 600, Macrocells 32, fCNT 151.5 MHz

                                      8 битный счетчик (вход clk и 8 линий выхода) — занял 8 из 32х
                                      Verilog counter
                                      module test01(clk, out);
                                      
                                      input wire clk;
                                      
                                      output reg [7:0] out;
                                      
                                      initial begin
                                        out = 0;
                                      end
                                      
                                      always @(posedge clk) begin
                                        out <= out + 1;
                                      end
                                      
                                      endmodule
                                      

                                      16-битный счетчик (вход clk и 8 линий выхода) — занял 16 из 32х

                                      Дешифратор-преобразователь в семисегментный код — 8 из 32х
                                      Verilog 7seg
                                      module test01(data, SEG);
                                      
                                      input wire[3:0] data;
                                      output wire[7:0] SEG;
                                      
                                      reg [6:0] SEG_buf;
                                      always @ (data)
                                        begin
                                          case(data)
                                            4'h0: SEG_buf <= 7'b0111111;
                                            4'h1: SEG_buf <= 7'b0000110;
                                            4'h2: SEG_buf <= 7'b1011011;
                                            4'h3: SEG_buf <= 7'b1001111;
                                            4'h4: SEG_buf <= 7'b1100110;
                                            4'h5: SEG_buf <= 7'b1101101;
                                            4'h6: SEG_buf <= 7'b1111101;
                                            4'h7: SEG_buf <= 7'b0000111;
                                            4'h8: SEG_buf <= 7'b1111111;
                                            4'h9: SEG_buf <= 7'b1101111;
                                            4'hA: SEG_buf <= 7'b1110111;
                                            4'hB: SEG_buf <= 7'b1111100;
                                            4'hC: SEG_buf <= 7'b0111001;
                                            4'hD: SEG_buf <= 7'b1011110;
                                            4'hE: SEG_buf <= 7'b1111001;
                                            4'hF: SEG_buf <= 7'b1110001;
                                            default: SEG_buf <= 7'b0111111;
                                          endcase
                                        end 
                                        
                                        assign SEG = {1'b0,SEG_buf};
                                      
                                      endmodule
                                      

                                      Эммм, ну не знаю. Преобразователь STEP-DIR для платы шагового движка — 10 из 32х
                                      Verilog stepdir
                                      module stepdir(input STEP, input DIR,output reg [3:0] OUT);
                                      reg [3:0] state;
                                      
                                      initial
                                      begin
                                        state=0;
                                      end
                                      
                                      always@(posedge STEP)begin
                                      	if (DIR==1) begin
                                      	  state=state+1'b1;
                                      	end else	if (DIR==0) begin
                                      	  state=state-1'b1;
                                      	end
                                      
                                      	case (state)
                                      	  0: OUT=4'b1000;
                                      	  1: OUT=4'b1100;
                                      	  2: OUT=4'b0100;
                                      	  3: OUT=4'b0110;
                                      	  4: OUT=4'b0010;
                                      	  5: OUT=4'b0011;
                                      	  6: OUT=4'b0001;
                                      	  7: OUT=4'b1001;
                                         endcase
                                      end
                                      		  
                                      endmodule


                                      Приемник SPI занял 14 из 32х. И если принятый байт принимать в качестве параметра, для ШИМ, то получается тик в тик 32 из 32х!
                                      Verilog SPIPWM
                                      module test01(clk, SCK, MOSI, MISO, SSEL, LED, PWM_out);
                                      input clk;
                                      
                                      input SCK, SSEL, MOSI;
                                      output MISO;
                                      output LED;
                                      output PWM_out;
                                      
                                      // sync SCK to the FPGA clock using a 3-bits shift register
                                      reg [2:0] SCKr;  always @(posedge clk) SCKr <= {SCKr[1:0], SCK};
                                      wire SCK_risingedge = (SCKr[2:1]==2'b01);  // now we can detect SCK rising edges
                                      wire SCK_fallingedge = (SCKr[2:1]==2'b10);  // and falling edges
                                      
                                      // same thing for SSEL
                                      reg [2:0] SSELr;  always @(posedge clk) SSELr <= {SSELr[1:0], SSEL};
                                      wire SSEL_active = ~SSELr[1];  // SSEL is active low
                                      wire SSEL_startmessage = (SSELr[2:1]==2'b10);  // message starts at falling edge
                                      wire SSEL_endmessage = (SSELr[2:1]==2'b01);  // message stops at rising edge
                                      
                                      // and for MOSI
                                      reg [1:0] MOSIr;  always @(posedge clk) MOSIr <= {MOSIr[0], MOSI};
                                      wire MOSI_data = MOSIr[1];
                                      
                                      // we handle SPI in 8-bits format, so we need a 3 bits counter to count the bits as they come in
                                      reg [2:0] bitcnt;
                                      
                                      reg byte_received;  // high when a byte has been received
                                      reg [7:0] byte_data_received;
                                      
                                      reg [7:0] pwm_counter;
                                      
                                      initial
                                        pwm_counter = 0;
                                        
                                      always @(posedge clk)
                                        pwm_counter <= pwm_counter + 1;
                                        
                                      assign PWM_out = (byte_data_received>pwm_counter);  // comparator
                                      
                                      always @(posedge clk)
                                      begin
                                        if(~SSEL_active)
                                          bitcnt <= 3'b000;
                                        else
                                        if(SCK_risingedge)
                                        begin
                                          bitcnt <= bitcnt + 3'b001;
                                      
                                          // implement a shift-left register (since we receive the data MSB first)
                                          byte_data_received <= {byte_data_received[6:0], MOSI_data};
                                        end
                                      end
                                      
                                      always @(posedge clk) byte_received <= SSEL_active && SCK_risingedge && (bitcnt==3'b111);
                                      
                                      // we use the LSB of the data received to control an LED
                                      reg LED;
                                      always @(posedge clk) if(byte_received) LED <= byte_data_received[0];
                                      
                                      endmodule


                                      Логика на verilog, описывающая работу спектрумовской ay-8910 не влезло в самый большой MAX из линейки, заняв 263 из 256 возможных ячеек.

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

                                    А вот, к примеру, Олег Анатольевич progchip666 вообще считает:
                                    В последнее время появилось огромное количество готовых решений — демонстрационных плат и различных универсальных программируемых модулей по доступным ценам. Собрать из них готовое решение уникальной задачи часто проще и дешевле, чем разработка специального прибора. Разработка собственно электроники сводится к созданию конструктива, да простеньких объединительных и согласующих плат.
                                      +1
                                      Спасибо за упоминание. Тема статьи очень интересная, но статья написана в Западном стиле. Цель не столько объяснить что и как делать, сколько замотивировать. Возможно это и правильно. Сам нахожусь в такой же ситуации. Хорошо разбираюсь в схемотехнике. Чувствую что во многих проектах применение простеньких и недорогих ПЛИС мне могло бы пригодиться но никак не соберусь начать их освоение.
                                      Помнится то же самое было с DDS. Синтезаторы казались мне чем то сверхъестественным, а на деле оказалось всё очень просто.
                                    +1
                                    Возможно, если Вы укажете еще парочку хабов, то статью прочитает больше народа. Например, хаб DIY подошел бы…
                                      0
                                      Спасибо, не подумал
                                      0
                                      Парочка вопросов возникла:
                                      Вопрос первый. Рекомендация ставить Quartus II V11 чем обоснована? На сайте производителя говорится о последнем релизе аж V14.
                                      Второй вопрос: Где граница бесплатных сред разработки? На сайте в разделе «Buy» стоят ужасные 4-значные долларовые суммы, в то время как V11-V12 декларированы как «free».
                                        +1
                                        В 14 версии убрали поддержку Cyclone I-III, насколько я помню. Так же 14 версия вроде только 64-битная.
                                        У Quartus есть Web Edition — бесплатная версия. Сравнение можно найти здесь: www.altera.com/literature/po/ss_quartussevswe.pdf

                                        Для маленьких FPGA и маленьких проектов легко подходят старые версия квартуса (9-11), они и меньше весят)
                                          0
                                          На мой взгляд, самая лучшая версия Квартуса — это 9.1. Во-первых, там есть режим совместимости со старым добрым Max Plus II, она поддерживает, по-моему, максимальное число камней, от древних ПиЭльДэшек типа MAX3000 до мощных каменюг типа Стратикс 4 и Циклон 5 (хоть и прелиминари, но я проекты успешно собирал) и, главное, это — последняя версия, в который был собственный весьма простой и удобный симулятор, а не это убожество под названием «Моделсим».
                                            +2
                                            У Моделсима немного другое назначение, чем простой симулятор)
                                            Большие проекты без Моделсима или аналогичного симулятора невозможно быстро разрабатывать.
                                              0
                                              Я сейчас Icarus Verilog для себя открыл. Очень удобно.
                                          +1
                                          Конечно не моего ума дело, но я бы запретил на «Хабре» статьи подобного рода. Во-первых статей для начинающих плисоводов в И-нете на всех возможных языках (включая, разумеется, русский) пруд пруди. А главное — авторы подобных статей не понимают одного: программирование FPGA нельзя «попробовать»! Это можно попробовать «попрограммировать» на компе или игрушечную платку с «восьмирёночком» типа «Ардуино». А вот с ПЛИС — это как изучать иностранный язык или играть на музыкальном инструменте, либо ты этим занимаешься по-серъёзному и регулярно, либо не нужно тратить на это время вообще. Кроме того, нужен совсем другой объём знаний по сравнению с программированием. По-крайней мере, истинный плисовод должен очень хорошо разбираться в электронике, как показывает моя многолетняя практика вменяемого плисовода можно сделать только из грамотного электронщика.
                                            +1
                                            Ну вот я в своё время именно пробовал. Просто для интереса. Хотя потом несколько раз меня капитально выручала моя DEV плата когда нужно было прошить всякие многоногие FLASH чипы а программатора нужного не было. В общем-то всё решает массовость когда то и программирование микроконтроллеров было уделом избранных. Сейчас этим занимаются все кому лень. FPGA конечно в разы сложней(с одной стороны), однако чем больше будет доступной информации тем проще будет попробовать. А вот то что ПЛИСовод должен разбираться в электронике с этим полностью согласен, и я в моём случае как раз попытка разобраться в ПЛИС заставила разбираться в электронике.
                                              +2
                                              Оно и понятно, потому что ПЛИС — это конфигурируемая электрическая схема а не микроконтроллер.
                                              Надо просто принять что программы для ПЛИС — это набор функций связанных или не связанных друг с другом и внешними выводами. Никаких «последовательных» шагов выполнения в таких программах нет — все функции выполняются непрерывно и параллельно.
                                                +1
                                                Я бы сказал, что программы для ПЛИС — это чистая схемотехника, и ничего общего с программированием микроконтроллеров. Т.е. писать программу на verilog, всё равно что рисовать принципиальную (функциональную) схему. Как у художников, которые вроде рисуют, а говорят, что пишут картины. Просто надо это почувствовать, и твои картины(программы) будут отличаться от детсадовского рисунка. Как-то так.
                                                  0
                                                  Вот из ваших комментариев я узнал про ПЛИС гораздо больше полезной информации, чем из самой статьи.
                                              0
                                              Вроде бы и согласен с тем, что плисоводство занятие очень время- внимание- трудоёмкое, но запрещать не надо.
                                              Автор неделю знакомился с ПЛИС, затем за двадцать минут сделал звук — надцать меандров. Даёт ли это право писать кипятком, постить непристойные картинки и зазывать за собой? Почему нет, он решил свою задачу — создал основу для синтезатора.
                                              И хочу подчеркнуть, что появление прикладных проектов на ПЛИС тормозит не столько концептуальная сложность, сколько бедность инструментария, так что про Quartus 9 я с вами согласен, было неприятно, я правда перешёл на новые версии и стал отлаживаться через VGA.
                                                +1
                                                Если не секрет, что Вы вкладываете в «бедность инструментария»?
                                                  0
                                                  1. Языки HDL. Созданы скорее для верификации чем для синтеза, низкоуровневы, слабые средства обобщённого программирования, описание функционала распадается на синхронную и асинхронную части.
                                                  2. Утилиты и среды. Громоздки, неинтуитивны, часто непонятно, как сделать простую вещь. Например, отладили вы прошивку и хотите залить её в ППЗУ. Чего ожидаешь — поставить в загрузчике галку — прошить в ППЗУ. А на деле надо сначала отдельно копать настройки проекта, сгенерировать специальный файл, затем хитро настраивать загрузчик, потом переключить плату в специальный режим, прошить, переключить обратно. В лучшем случае, производитель платы всё это по шагам расписал, но надо ещё сообразить где искать. kluwert упомянул ситуацию, когда из Qwartus-а выкинули привычное средство отладки.
                                                    +1
                                                    1. Если под «низким уровнем» языка подразумевается то, что надо описывать каждый такт/регистр, то существует класс задач, где без этого не обойтись, что бы выжать нужную производительность. Процессор Opensparc, к примеру, написан на verilog'e и от этого («низкий уровень»)вряд ли можно будет уйти в ближайшее время.

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

                                                    2. Не могу согласиться. Да, у Квартуса бывают вещи не самые интуитивные, но всё приходит с опытом :) Пример, что Вы привели, где неясно что прошивать — это нюансы конкретной борды.
                                                      0
                                                      «существует класс задач» — не аргумент. Существует класс задач, которые программируют только на ассемблере.
                                                      Правда, не очень очевидно, как повышать уровень. Чего хотелось бы иметь: пусть надо потоком вычислять sin(x) + x*y + 100*x в конвейере; У меня есть модули для синуса и умножения, но каждый работает своё число тактов. Сейчас мне придётся самому их синхронизовать, а я хочу чтобы это делалось автоматически.

                                                      Куча ошибок возникает из-за преобразования разрядностей, особенно, когда работаешь со знаковыми числами. При этом выдаются такие кучи предупреждений из которых 90% совсем не по делу, что читать их невозможно. Можно от всех ворнингов избавиться, явно записав все преобразования, но при этом текст совершенно теряет читабельность.
                                                +1
                                                По-крайней мере, истинный плисовод должен очень хорошо разбираться в электронике, как показывает моя многолетняя практика вменяемого плисовода можно сделать только из грамотного электронщика.

                                                Соглашусь лишь отчасти. Для разработок всё сам нужно ковать плисовода из электронщика. Для командной работы в больших проектах иногда полезнее грамотно составить ТЗ программисту с учетом схемных ограничений. И получить от него более быстрый результат и удобный на Verilog проект. Который гораздо лучше ложится потом в ПЛИС. В комментариях есть мнение, что программа на ПЛИС это перписывание схемы на Verilog. Если отойти от этой практики, то схемы получаются гораздо лучше. Иногда пытаясь описать «как в схеме» получается каша, хотя этот кусок можно было описать в двух блоках. Я сам себя иногда на этом ловлю. И в проектах коллег вижу, перписывание некоторых таких частей дает иногда заметный прирост в скорости.
                                                  0
                                                  Хотелось бы где-нибудь почитать, наверняка сложилась практика по и конкретные приемы, которые приводят к сокращению количества использованной логики. Потому что пробовал переписывать код и глядеть результат по ресурсам. Почти всегда получается переписать логику так, чтобы она синтезировалась более экономно. Обычно к этому приходит упрощение, сокращение логики, описание условий через else if или case.
                                                  Так что если есть что — подскажите!
                                                    +2
                                                    Для Альтеры см. «Recommended HDL Coding Styles»: www.altera.com/literature/hb/qts/qts_qii51007.pdf
                                                    Какие-то общие вещи см. Steve Kilts «Advanced FPGA Design».
                                                      +1
                                                      Я не имел ввиду экономию ресурсов -10 или -20 LE.
                                                      Я имел ввиду, что в основном в итоге мы получаем прирост в скорости. И иногда в LE, за счёт регистров.
                                                      У меня был пробный проект с LVDS, на плате не предназначенной для передачи дифференциальных сигналов. При максимальных 622 МБит/с я смог получить 590 МБит/с. По витой паре из МГТФ, между двумя платами, с кривой синхронизацией. Нужно было проверить идею отказа от параллельной шины и замены её на последовательные, без использования гигабитных интерфейсов.
                                                      Еще было задание выжать максимум из старой платы, на которой не получалось сделать положенные 100 блоков работающие на 5 МГц. В итоге влезли все 100 и проект занимает менее 95% ресурсов.
                                                      Если электронщик думает о том как он бы сделал проект на рассыпухе, то он получит кучу неприятностей в виде неуспевающей логики. Если пытаться завернуть всё в примитивы триггеров и ячеек, то это будет долго и не всегда эффективно. Что-то оптимизирует компилятор, что-то не сможет. Электронщик будет рассказывать компилятору КАК делать, а программист (FPGA-designer) — ЧТО делать. И если у меня проект где-то не влазит, то значит я сильно затягиваю в сторону КАК.

                                                      Я слушал курсы по Xilinx и VHDL. Работаю с Altera и на Verilog.
                                                      Я начинал с «Introduction to VHDL». Потом был курс «Design for perfomance». Оба от Xilinx. Были еще курсы по моделированию и SystemVerilog. Но в последнем я тогда ни чего не понял, так как работал с схемами и платами.
                                                      +2
                                                      Программист может не доехать, что такое критический путь и как его разорвать. Опять же программист может и не увидеть проблемы схем с несколькими синхронизациями. Вообщем и целом просто программиста, не знающего схемотехнику сложно обучить писать на HDL, чистый схемотехник, который круто работает на рассыпухе, но не знает программирования тоже не очень подходит. Нужен специалист на стыке. Если вы хотите юзать программиста, то стоит использовать OpenCL, как мне кажется.
                                                        0
                                                        Согласен. Но одно дело научить программиста этим вещам, и совсем другое ПЕРЕучить электронщика.
                                                          0
                                                          Одинаково, нюансов и там и там достаточно, тем более, что программист не сможет пользоваться конструкциями ООП. Банально ни какие супер-пупер парадигмы программирования при написании на Verilog'e не нужны… Нужен программист системщик, который хорошо кодит на чистом Си. А вот если человек писал на C# он будет постоянно неприятно удивляться. ООП есть только в SystemVerilog и только для верификации.
                                                            +1
                                                            Насколько реально сейчас затащить разработчика на С# в область ПЛИС? Люди не виноваты что под их задачи есть более удобные инструменты.
                                                            И наверное не корректно с моей стороны было говорить о всех электронщиках и всех программистах, что они смогут, а что нет.
                                                            0
                                                            Опять же любой программист мыслит последовательно, кроме работающих в области параллельных вычислений, для разработки на HDL языках все действия чаще всего выполняются параллельно, и мыслить нужно параллельно и в тактах вашего устройства… Программист точно не каждый это сможет понять.
                                                      0
                                                      Берем Verilog — потомучто…

                                                      Очень странная рекомендация использовать Verilog для ПЛИС Altera. Универсальность ради универсальности? Чем родной AHDL плох?
                                                        +2
                                                        Думаю, AHDL менее популярен, чем VHDL/Verilog. На оpencores большинство проектов на VHDL/Verilog.
                                                        Попробуйте в МegaWizard сгенерить DDR, PCIe или Ethernet контроллер на AHDL) Как думаете, почему Альтера не дает это сделать?
                                                          0
                                                          Потому, что сама их продает.
                                                            +1
                                                            В смысле продает?
                                                            DDR и PCIe контроллеры бесплатные.
                                                              0
                                                              Тогда, не знаю.
                                                                +1
                                                                И еще такие наблюдения:
                                                                1. 1G, 10G, 40G/100G Ethernet контроллеры у Альтеры написаны на Verilog. И я говорю не про врапперы, которая даются пользователю, а именно внутренние модули.
                                                                2. Альтера сейчас не продвигает AHDL.
                                                                3. Modelsim/Questasim не поддерживает AHDL.
                                                                  0
                                                                  Понятно, спасибо.
                                                                    0
                                                                    Всё верно. AHDL признан устаревшим.
                                                          0
                                                          .
                                                            0
                                                            Я изучил атмеги уже вдоль и поперёк, но после прочтения статьи так и не понял, с чем же мне предстоит столкнуться. Хотелось бы поподробнее узнать о принципах программирования ПЛИСов, о принципиальных отличиях от микроконтроллеров в этом плане. В тексте говорится про какие-то «ячейки», но не поясняется, что же имеется в виду. Вроде как статья ориентирована на чайников вроде меня, но я ничего не понял.
                                                              0
                                                              Я считаю, что мало начать теоретическое изучение ПЛИС, будет лучше, когда рядом есть отладочная плата и необходимость в создании какого-нибудь проекта. Агитирую купить плату из тех, что представлены выше, или другую. Для ПЛИС это не очень принципиально, но лучше, когда «ячеек» больше.
                                                              С чем придется столкнуться? Для меня было несколько сюрпризов и потрясений. Часть из проблем удалось преодолеть только благодаря наличию отладочной платы. Ну и она еще как мотивация: лежит, требует, чтоб с ней что-то сделали. Самый, пожалуй, тяжелый момент, что текст на Verilog это не программа, а скорее описание схемы. Но в процессе чтения книг выяснилось, что есть оператор # чтоб выставить задержку. Например
                                                                CLK = 0;
                                                                #10;
                                                                CLK = 1;
                                                                #10;
                                                                CLK = 0;
                                                              

                                                              То есть на линии CLK мы выставили 0, подождали 10тиков, выставили 1. Чудеса! Всю логику можно так описать, причем проще и быстрее, чем на МК. И в эмуляторе все отрабатывает… А в том и дело, что оно только для эмулятора и делается, для отладки, и работает только в нем. В железо он не синтезируется. А я вот надеялся, думал генератор туда заводится как раз для этого. Это одно из самых больших разочарований. Глупость? Но я не один такой, который хотел залить # в железо (пруф потерял, но люди спрашивают). Поэтому там все процессы, растянутые во времени, нужно делать через счетчики-делители частоты, стейт-машины.
                                                                0
                                                                Эм, а какой синтезатор скушал этот код?
                                                                  +1
                                                                  Никакой, т.к. автор сам пишет «в железо он не синтезируется» :)
                                                                  Однако, такой код хавают симуляторы)
                                                                +5
                                                                о принципиальных отличиях от микроконтроллеров в этом плане

                                                                Тут проще написать сходства.
                                                                1. И то и другое цифровые устройства.
                                                                2. И то и другое можно программировать.

                                                                Дальше сплошные отличия:
                                                                1. В микроконтроллер заливается программа, которая потом инструкция за инструкцией выполняется CPU контроллера. В ПЛИС заливается конфигурация которая коммутирует блоки внутри ПЛИС, и соответственно работает уже в соответствии с тем что туда залили.
                                                                2. Микроконтроллер состоит их разных частей: ядро, память, переферия. ПЛИС набор однородных «ячеек» иногда бывают «спецблоки» типа PLL.
                                                                3. Микроконтроллеры разных производителей и даже разным моделей одного производителя могут отличаться ядром, периферией, количеством памяти итд. ПЛИС отличается количеством доступных «ячеек» (ну и если копнуть глубже то их структурой но для VHDL/Verilog это пофиг).

                                                                ПЛИС в итоге более низкий уровень чем микроконтроллер. При этом на микроконтроллере вы не сможете повторить функционал ПЛИС, а вот наоборот легко. Причём вы можете это сделать по своему усмотрению например надо вам 15 UART вы ставить ядро допустим AVR и навешиваете на него 15 UART. Или допустим захотелось вам MII преобразовать в SPI, вы не описываете как принять кадр потом как его послать по SPI, причём вы описываете это на уровне схемы, прелесть в том что когда вам понадобится 10 таких преобразователей то вы просто 10 раз подключаете модуль преобразования, главное чтобы хватило ног, и они все работают паралельно, а в микроконтроллере вы бы уперлись в его частоту.
                                                                PS. Проще побаловаться с симулятором в Quartus например, многое может стать понятней, хотя он и не очень дружелюбен.
                                                                  +1
                                                                  к ПЛИС все же больше подходит определение не программировать а конфигурировать.
                                                                  0
                                                                  ячейки — это некоторые универсальные изолированные схемы которые имеют определенную конфигурацию и подключаются к шинам входных сигналов и выходных.
                                                                  Конфигурируя подключения входов и выходов этих ячеек мы делаем физическую схему с необходимой нам функцией связывающей вход и выход или какие-то внутренние связи между ячейками или самой же ячейкой. Как правило, ядром ячейки является JK-триггер который можно сконфигурировать в различных вариантах — синхронный, асинхронный, счётный и т.д.

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

                                                                  Иногда, кстати, сталкиваешься с ситуацией что компилятор не может синтезировать схему — хоть ячеек и хватает но может не хватить внутренних связей между ячейками для синтеза схемы. Если не ошибаюсь, в типичной ПЛИС на 64 ячейки возможны всего 32 внутренние связи — т.е. тупо сделать счетчик на 64 бита не получится. В больших ПЛИС ячейки входят в состав макроячеек, внутри которых действует ограничение на количество внутренних связей и соответственно связей макроячеек с другими макроячейками.

                                                                  Это конечно вариант простейшей ПЛИС, есть и гибридные ПЛИС в которых включены не только однотипные ячейки, но так же и аппаратные реализации некоторых сущностей — например готовый массив многопортовой RAM, синтезаторы частот, даже иногда микропроцессоры(хотя тут скорей наоборот, в некоторых микропроцессорах есть встроенная обвязка в виде ПЛИС что позволяет реализовать любую необходимую аппаратную периферию прямо на ходу).
                                                                    0
                                                                    В двух словах, ПЛИС это конструктор. Прошивка (программа) для ПЛИС это не ассемблерный код, это всегда схемотехника, просто её вы не рисуете, а описываете на Verilog, VHDL, AHDL. Прошивку для ПЛИС вы можете не писать, а нарисовать в схематике. И как написано, вы можете на ПЛИС создать микроконтролёр, или прошить готовый например, NIOS под Altera… И далее под NIOS вы можете писать ассемблерный код.
                                                                    +1
                                                                    А я вот почитал книгу Digital Design and Computer Architecture и почти сразу понял, почему я хочу Verilog, а не VHDL: потому что на нём нужно писать меньше букв!
                                                                      +1
                                                                      Из плат советую платы фирмы terasic, серия DE. Сам себе взял DE1-SoC. ПЛИС нужно использовать, там где нужна параллельная обработка или не стандартные задачи. Я бы посоветовал использовать их в задачах обработки сигналов, например.
                                                                        0
                                                                        А есть какая-нибудь платка, с которой можно начать работать не устанавливая громозкого проприетарного софта? В идеале пользуясь только тем, что устанавливается через apt-get и не требует действий по получению лицензий?
                                                                          0
                                                                          К сожалению, без проприетарного софта в мире FPGA у Вас ничего нормального сделать не получится.
                                                                          Можете посмотреть на iverilog.icarus.com
                                                                          Но это только на «поиграться».

                                                                        Only users with full accounts can post comments. Log in, please.