Comments 32
О, да! Для отладки ПЛИСок такую штуку сам применяю. Копировал классический текстовый режим олдового видео-адаптера - при неплохом разрешении видео тратилось достаточно мало драгоценной памяти.
У вас только схема ЦАПа не соответствует коду. В коде на ЦАП выдаются 1 и 0, а по схеме - 1 и Z. Вообще схемы типа R2R используют - у них выходное сопротивление фиксированное.
И файл прочитать, вроде, можно и средствами самого Verilog. Я-то больше VHDL пользую, там это точно можно, например, взять сигнал прямо с осциллографа и запихнуть в симулятор схемы. В том и фишка языков описания аппаратуры как-раз - классическую "однозадачную" программу на них тоже можно написать, не прибегая к другим языкам.
Для отладки я использую и рекомендую signalTap. Ибо плис гоняет туда сюда данные, скажем, с трансивера, и их никак не просимулируешь. Фактически это такой встроенный логический анализатор. Хотя, наверное, он не для всех серий подходит.
Интересно)) Только это не видеокарта, а в лучшем случае видеоадаптер. В отличие от видеоадаптера, видеокарта содержит в себе графический процессор для ускорения 2D или 3D графики. Я тоже недавно делал видеоадаптер на плис, если интересно, то посмотрите.
Карта - формат электронного блока, позволяющий вставить его в шасси (или другой блок). Так что это понятие никак не связано ни с каким ускорением графики...
Я понял что вы имеете ввиду, но неспроста существует разделение на видеоадаптеры и видеокарты. Все эти "карты" вставляемые в слоты материнской платы это устройства , которые аппаратно решают какую-то задачу. Они нужны, чтобы разгрузить процессор. Процессор просто командует ими, а все действия выполняются уже самими "картами". Да , видеоадаптер выдаёт строчную развёртку вместо процессора, но видеоадаптер не нарисует из 3х точек полигон в трёхмерном пространстве и не наложит шейдер на блок воды в Майнкрафте. Разделение на видеоадаптеры и видеокарты это не про форм-фактор.
Первая видеокарта, которую я купил, была ISA карта Hercules. Почитайте что это такое. Потом была видеокарта EGA.
существует разделение на видеоадаптеры и видеокарты
Не знаю где существует такое разделение. Не иначе журналисты придумали.
Как обычно бывает, на самом деле всё сложно:
1. EGA расшифровывается как Enhanced Graphic Adapter
2. При этом он выполнен в виде ISA card, а карточки бывали звуковые, с портами I/O или ... графические!
3. На карте находится ПЗУ BIOS, к которой можно обращаться через INT 10h. Могут поддерживаться высокоуровневые функции вроде обработки кодов терминала и с некоторой фантазией карточку можно назвать очень примитивным, но графическим ускорителем.
4. BIOS карточки лишь хранит написанные производителем подпрограммы, исполняться они должны на центральном процессоре. Она не самодостаточна.
В 90-е EGA/VGA называли видеокартами, так что использование термина вполне правомерно, хотя согласен, в наше время можно встретить чудо вроде "звуковая карточка в виде USB-свистка", где слово "карточка" означает функциональность, а не форм-фактор. Вы оба по-своему правы.
Ага, а современных картах ПЗУ с BIOS нет, как будто! И она сама себя инициализирует!
Вы как будто не знаете о проблемах ARM компов, которые спецификацию PCIe поддерживают, но инициализировать карту должны сам, т.к. карта сама себя не инициализирует, а код в ПЗУ для другой платформы.
Вы мне еще про Int10 будете рассказывать.. Как по вашему BIOS современного компа выводит информацио о загрузке? Через framebuffer что ли?
Я всегда исходил из формата как раз, т.к. это во-первых логично (Т.е. видеокарта - это карта расширения https://ru.wikipedia.org/wiki/Карта_расширения). Видеоадаптер же - это по сути может быть как видеокарта, так и встроенные решения на материнской плате. Сейчас попытался найти какую-то информацию про разделение по выполняемым функциям/возможностям и не нашел. Что касается рендеринга, то я слышал только один термин, определяющий видеокарты с его наличием - 3D ускоритель. Оно как раз насколько помню было введено когда стали появляться видеокарты с соответствующим функционалом на борту, чтобы на рынке эти карты выделить в отдельный сегмент.
Терминология просто перемешалась. GPU-сопроцессоры-ускорители в формате отдельной PCIe-платы, например, тоже зовут видео-картами, хотя видео-интерфейсы у них физически отсутствуют.
Может, потому, что диспетчер устройств ОС их так называет. Мы же называем одного из домашних питомцев - морская свинка)
Заменить микроконтроллер? Это очень вряд ли. Вот из микроконтроллера к FPGA обращаться для решения нестандартных задач - вот это должно быть очень востребовано
FPGa классная вещь, и если бы их было великое множество с разной емкостью и ценник плавал соответсвенно, то действительно микроконтроллеры сгинули-бы,...
P\S встретил как то заметку, что майнеры избавляются от некоторых старых комплектующих , кажется узлы подключения видях, так они на FPGa собраны, и "скидывают" их по бросовым ценам... (но это неточно...))) ), порезвиться можно...
Ага, используют платы от асиков. Но там такое специфичное железо, например линукс запустить можно (типа одноплатника), а вот так напрямую с этим работать - не знаю честно (и возможно ли).
вот в закромах нарыл, в свое время заныкал... https://habr.com/ru/articles/842958/
вроде все красиво...))
Я пробовал, оказалось что версий плат много и работать можно не со всеми (со всеми в принципе, но это надо у каждой железо реверсить), мои платы оказались совсем другими, чем в посте и на сайте автора. Он обещал разобраться и похоже забыл. А я забил, мне нужны были простые линуксовые машины. В итоге то что мне нужно оказалось проще запустить на работающем асике L3 в фоне, а что не получилось - легко тянут одноплатники с Али за невеликие деньги. Я посчитал что купить три одноплатника мне выйдет дешевле и проще, чем прыгать вприсядку вокруг старых б.у. плат от асиков. Так и вышло.
На барахолках полно управляющих плат от майнеров на базе Xilinx-AMD Zynq 7010 и аналогичных FPGA систем на кристалле со встроенным процессорным ядром. Причём стоимость у них символические 700-1500 р. В тоже время отладочные средства на том же железе дороже в 10 и более раз. Использую такие. В качестве обычной плис тоже вполне полезная штука.
Не знаю насколько полезно моё мнение, но я рассматриваю схему Verilog как некоторый вычислительный граф, в котором данные последовательно изменяются, но вычисляется всё в одно действие
В Simulink удобно разрабатывать прошивку, потому что там же её и отлаживать можно.
FPGA не заменяет микроконтроллер. Писать на verilog хоть сколько-нибудь сложную логику - тот еще ужас. И чем сложнее логика - тем больше нужна емкость FPGA. В то же время на микроконтроллере можно реализовать любую логику, даже на простом и дешевом. FPGA полезна в двух случаях: когда надо заменить рассыпуху из множества логических микросхем одним кристаллом и когда нужна обработка сигналов в жестком реалтайме.
Микроконтроллеры тоже когда-то заменили рассыпуху. И не обязательно писать на голом Verilog, можно собирать схему из готовых блоков. Также, как программу - из высокоуровневых операторов и библиотечных вызовов. Ну и никто не мешает засунуть в FPGA микроконтроллерное ядро, такое, какое удобно для задачи.
FPGA-чипы при прочих равных получаются существенно дороже микроконтроллеров, по-моему, из-за сложности тестирования после производства. Мк может практически протестить сам себя, и всю свою периферию. А производителю FPGA приходится проверять все внутренние задержки при всех комбинациях соединений логических ячеек.
Если говорить о тестировании интерконнекта внутри ПЛИС, то достаточно проверить только ортогональные соединения и сделать это не сложно. А вот с вычислительными ядрами все гораздо сложнее - чтобы их проверить нужно оттестировать бесконечно большое число внутренних состояний машины, что сделать невозможно даже теоритически, поэтому проверияют только ограниченный набор пограничных состояний (coner cases). Помимо этого, в МК, как правило, имеется богатый набор периферии (часто - покупной) которую тоже требуется тестировать, и сделать это без специализированной оснастки невозможно. В общем, с точки зрения производства и тестировния классические ПЛИС существенно проще! Но современные ПЛИС это уже нифига не ПЛИС, это "гибридные СБИС" с кучей очень сложных аппаратных блоков, поэтому они и стоят горы денег - с этой темы по-цепочке кормится куча производителей IP-блоков.
Классические ПЛИС до сих пор производятся и стоят относительно недорого, но всё же несколько дороже чем МК и связано это прежде всего с объемами производства - у МК серийность на несколько порядков выше. Если производить ПЛИС с такой же серийностью как МК, то стоимость микросхем ПЛИС будет ниже чем у МК, так как в таких ПЛИС нет покупных функциональных блоков и за них не нужно платить отчисления.
К сожалению, индустрия плотно сидит на микроконтроллерах и не желает двигаться в этом направлении из-за иннерционности мышления как разработчиков, так и производителей готовых изделий. Я в своих изделиях в последние годы стараюсь использовать ПЛИС с синтезируемой СнК. Такое решение несколько дороже чем на обычном МК, но существенно более гибкое, оно дает мне больше свободы действий и возможностей по модернизации готового изделия "в поле". У меня есть своя типовая плата с ПЛИС в форм-факторе RPi на базе которой я могу решить любую задачу заказчика в рамках возможностей синтезируемых в ней СнК. Все мои наработки по данной теме доступны для скачивания и повторения.
Я уже опубликовал несколько статей на эту тему, может быть кто-то еще не читал:
Разработка цифровой аппаратуры нетрадиционным методом: Yosys, SpinalHDL, VexRiscv (ч.1)
Разработка цифровой аппаратуры нетрадиционным методом: Yosys, SpinalHDL, VexRiscv (ч. 2)
Разработка цифровой аппаратуры нетрадиционным методом: CGA видеоадаптер на SpinalHDL
Сейчас я работаю над имплементацией USB 1.0 и поддержки HID (клава, мышь, геймапады) в моей синтезируемой СнК. Кое-какие наброски уже можно попробовать. Скорее всего по результатам этой работы будет написана еще одна статья в этом же ключе (если бог даст сил и времени).
Про массовость - полностью согласен. Работает барьер с положительной обратной связью, как, например, у отечественной и не очень электроники - пока не массово, это будет дорого.
Сам встречал только пару случаев более-менее массового применения ПЛИС:
- в контроллерах электроприводов авто (Infineon, Altera) и как расширители ввода-вывода процов в топовых смартфонах (Lattice). Тоже надеюсь, конечно, что барьер будет преодолён.
Статьи ваши читал, классно, темой интересуюсь тоже. До фрилансерства занимался ПЛИСами профессионально, но сейчас - от случая к случаю. Заказчики массово боятся, что в случае чего потом не найдут спеца, который в прошивке ПЛИС разберётся. Хотя гибкость логики (в том числе для обхода косяков схемы))) много где ускорила бы разработку. И в качестве спеца заказчики почему-то всегда хотят видеть этакого Балду, который за миску риса им всё сделает, но это уже другая история.
ПЛИС существенно проще!
По структуре - да, проще. Но в ПЛИСах у каждого самого мелкого блочка есть сотня временнЫх параметров, на которые опирается синтезатор. Не все производители их приводят,
но некоторые - да.

Проверить, что какой-то конкретный UART или конкретная хеш-функция в пограничных случаях правильно работает на этих ячейках с такой-то частотой - явно недостаточно.
Писать на verilog хоть сколько-нибудь сложную логику - тот еще ужас.
Писать на HDL-языках служную логику не ужаснее, чем писать сложные алгоритмы на ЯП для процессоров/микроконтроллеров. Есть, конечно же, свои особенности - но где их нет?
FPGA полезна в двух случаях
FPGA полезна в гораздо бОльших случаях. Навскидку ещё несколько - там, где нужно подружить разные интерфейсы, которые сложно скрестить в МК. Там, где нужно большое количество вводов-выводов или подключить большое количество разных устройств. Там, где нужно реализовать свой интерфейс/протокол.
Писать на HDL-языках служную логику не ужаснее, чем писать сложные алгоритмы на ЯП для процессоров/микроконтроллеров.
Смотря на каком HDL писать. Если писать на Verilog-е (SystemVerilog) то, да, это просто ужас и отрыв башки. Писать высокоуровневую логику и сложные протоколы на SpinalHDL - это кайф.
FPGA не заменит контроллер по простой причине - потребление, потребление мелкого arm в спящем режиме мизерное. Быстрый старт, делаем необходимую работу и снова засыпаем. От часовой батарейки такие решения могу проработать 10 лет к примеру. FPGA такое в принципе не потянет.
Второй момент - размер кристалла, под FPGA он как минимум большой, а значит и дорогой. Контроллеры с десятками килобайт ОЗУ и полумегабайтом флеша в qfp48 - запросто. А вот на Verilog такое займёт большой и дорого кристалл.
Ну и последнее, более-менее современные интерфейсы, вроде DDR, USB4, PCIe5 и прочие уже настолько сложны, что давно в FPGA встраиваются готовые узлы для работы с ними. Никто не пишет свой собственный контроллер DDR вместо аппаратного.
На самом деле сейчас FPGA быстро и активно превращаются в контроллеры, втягивая в себя как аппаратные ядра ARM, так и готовые интерфейсы. А старшие FPGA - вообще в многоядерные процессоры/контроллеры с быстрыми ARM ядрами и кучей интересной периферией.
потребление
Что первое вспомнил:

Ничего необычного. И с таким потреблением FPGA уже готова отработать простую задачу за 20 нс. А если ещё ядру и мозгам отрубать питание...
размер кристалла
Вы когда-нибудь использовали хотя-бы 20% периферии современного мк на одной плате? И хотя-бы в половине режимов, в которых эта периферия работает? Поздравляю, вы уже выбросили как минимум больше 90% купленного вами кремния.
Как товарищ выше написал, в сложных устройствах тираж имеет гораздо большее влияние на стоимость изделия, чем даже раздувание площади в 10 раз.
современные интерфейсы
Не вижу разницы с процами. И тем, и другим как минимум приходится включать в периферию чипа интерфейсы с соответствующими физическими параметрами. Причём сейчас, похоже, физика наконец побеждает маркетинговую составляющую. Стандарты понемногу приходят в итоге к чему-то типа PECL с DC-балансом (USB3, PCIe, Firewire, Thunderbolt, Ethernetы) Все, которые вы перечислили, кроме DDR456. Но тут уже на шариках просто экономят.
А в FPGA на обычном КМОПе даже HDMI становится реальностью. USB1.1 или 2.0 сделать проще, чем потуги USB1.0 . ((пи****расы те, кто придумал кодировку конца USB-пакета, ровно как и внешне симметричный разъём)) Вопросы протоколов обмена уже давно решены. TCP или NTP что, все постоянно ручками пишут? Ну и у железячников примерно также - ospencores , или в софте СнК, или купил СФ=IP-блок.
Вообще для микроконтроллеров там наноамперы. И они реально работают от часовой батарейки годами. На микроамперах этого не добиться.
А если FPGA отрубить питание, то она будет очень прилично потреблять в момент загрузки и это отнюдь не мгновенно. И кто - кто будет решать когда надо подать питание на ПЛИС? Опять контроллер? Контроллер обычно всё это может сам.
Вы когда-нибудь использовали хотя-бы 20% периферии современного мк на одной плате? И хотя-бы в половине режимов, в которых эта периферия работает?
Да, и не один раз. Я использовал всю flash, весь объём ОЗУ, все интерфейсы и почти все их режимы. А также почти все таймеры и другие прелести современных mcu, как то каналы DMA и прочая... прочая...
Любой процессор это чрезвычайно сложное устройство, даже какой-нибудь Z80 из 80-х годов. А современные процессоры ещё сложнее.
FPGA чип тем и хорош что на нем можно реализовать только ту часть схемы которая необходима для выполнения конкретной задачи. Процессор-же предназначен для решения любой задачи какая только возможна. Такой подход нужен для компьютеров, потому что неизвестно какие задачи будет решать человек за этим компьютером. А для обычных устройств это избыточно.
Всё совсем наоборот. Как раз ядро контроллера - это предельно простая вещь, чтобы быть максимально универсальной и эффективной в любых задачах. Разве что мощная периферия меняет правила игры. Но эта периферия как раз соответствует современным требованиям к контроллерам.
Микроконтроллер не может быть простым. Попробуйте смоделировать какой-нибудь микроконтроллер на том-же ПЛИС и вы поймете что он очень непростой. И что вы имеете ввиду под периферией, блок портов ввода вывода?
Он простой по сравнению с выполняемыми задачами. А так напоминаю про целый набор современных протоколов, в том числе и http, причём со всем стеком ipv6 под ним, которые крутятся на современных контроллерах. Одна только графика с DDR оперативкой чего стоит и это уже на средних, а не старших контроллерах и, зачастую, на младших.
под периферией
Всё что не ядро и периферия в mcu на порядок сложнее его ядра, как правило. И даже DMA можно считать частью периферии.
Создание видеокарты Бена Итера на FPGA чипе