LINUX.ORG.RU

Превратить ЦПУ в «микроконтроллер»

 , ,


0

2

Приветствую. Есть у меня некоторые идейки (пока поиграться), для них нужен быстрый МК с хорошим объемом памяти (гигабайты), т.е. такого МК я не найду, всякая внешняя память вроде EEPROM - очень медленно. При этом всё необходимое должно быть в обычном ПК - много быстрой памяти + высокие частоты, нет только одного - нормальных, человеческих цифровых GPIO.

Гипотеза - у ЦП они есть (цифровые входы/выходы, помимо всяких там PCI и прочего COM-USB), нужно только к ним подключиться и правильно писать в нужные адреса. Если так, то известны ли вам какие-нибудь мат платы на условном алике (т.е. мат плата тупо соединит розетку на выходе с нужными ногами ЦП), куда вставив хеон, взяв какую-нибудь спец либу для работы с этими адресами (ну не очень хочется разбираться настолько, чтобы спускаться прям совсем низко, поэтому хотелось бы спец либу) и записав в память код своей программы можно получить микроконтроллер на максималках?

Ну уже менее желанное, но … . Может ли получиться что-то достойное с каким-нибудь чипом-контроллером PCI express шины? Т.е. на выходе он даст мне цифровые ноги с обещанными скоростями в гигабайты (хотя верится слабо, помнится, что народ всегда жаловался на низкую скорость пересылки данных между ЦПУ-ГПУ, что может быть быстрее прямых ног ЦПУ без всяких прокладок в виде PCI?). Только я не про всякие платы промышленного оборудования, какие-то цены слишком серьёзные, может вы знаете какой-то дешевый чип?

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

★★

Гипотеза - у ЦП они есть

Подключаться напрямую к ЦП это абзац.

Тебе нужен Xilinx zynq - arm ядро + fpga в одном корпусе. Например у меня такая плата https://aliexpress.ru/item/1005001502520136.html?spm=a2g2w.productlist.search_results.4.2a9a2149eIT0uK&sku_id=12000016377681457 - ссылка для примера, не является рекомендацией продавца.

Это управляющая плата от какого-то майнера. Их китайцы по цене стаканчика семечек продают. Ещё программатор не забудь купить.

Там можно запустить линукс на arm ядре, а ногами быстро дёргать из fpga части. Данные между arm и fpga частями можно гонять через DMA. Будет быстро.

ox55ff ★★★★★
()

Когда я интересовался этим вопросом, мне сказали, что в современных процессорах со всякими «надпроцессорами» такого не достичь. Их в любой момент может перехватить гипервизор и забрать у тебя управление.

Если для тебя это не проблема — купи любой маленький компьютер вроде Intel Nuc и купи к нему USB GPIO аксессуар.

vbr ★★★
()

Как правило, в таких случаях дерганье gpio выносят из cpu на что-то ещё, что связано с cpu уже нормальным интерфейсом.

Это может быть ардуина подключенная по USB, это может быть FPGA подключенная по PCI. Всё зависит от требуемой скорости дерганья GPIO.

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

Ещё есть промежуточное решение - взять ARM SOC типа Raspberry Pi. Производительность у его средняя, количество GPIO и внешних интерфейсов тоже средние. Зато есть документация и даже туторилы как писать код без ОС вообще (максимальный риалтайм), если речь именно о малине.

Ещё можно взять FPGA. К ней спокойно можно подключить гигабайты памяти, но быструю логику придётся реализовать на Verilog, потому что синтезированный CPU будет слабее той же малины. Впрочем, есть FPGA со встроенным процессором. Но такой вариант точно будет дороже малины.

Короче, нужно больше информации. Бюджет, частота переключения GPIO. А то может быть результатом твоих сверхтяжелых вычислений будет дерганье сервой раз в час (но когда именно и на какой угол - нужно долго считать). Тогда ардуина на USB (если беспокоит надёжность и задержки, можно через COM-порт, да и под ардуиной я подразумеваю всё семейство, можно и на plain C писать код без либ) будет беспроигрышным вариантом.

Как альтернативу ардуине ещё можно рассмотреть FT232RL в режиме bitbang, а также более специализированные решения (гуглить по запросу USB GPIO). Опять же, вопрос в частоте переключения ножек и требований к интерактивности (насколько быстро выход должен реагировать на изменение входа, тут FT232RL проиграет, потому что в ардуину можно зашить часть реакций не требующих сложных расчётов, а FT232 работает в чем-то типа пакетного режима).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 5)

Данные хочу брать с АЦП (несколько штук работающих со сдвигом), можно сказать, что получается осциллограф. Учитывая, что на тех же топовых СТМ’ках частота уже в сотних мегагерц + АЦП рабтающие совместно, то даже на них частоту «осциллографа» вполне можно подвести к сотне. Допустим, что что-то закостылится, то речь пойдёт о сотнях, а может и в Ггц, но это не точно. В общем все эти анальные ЮСБ интерфейсы не нужны. Вот только умеет ли ЦП такое или в нем физически вшиты всякие контроллеры последовательных интерфейсов (а нормальных цифровых выходов нет) и программно это не изменить. Это не какой-то серьёзный проект, скорее по фану.

kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 2)

в ЦПУ современного компухтера нет GPIO, ибо они в нем никому не нужны.
есть специальные платы расширения ISA/PCI/USB - GPIO/ADC/DAC
гугли их
к примеру http://www.icpdas.pl/ru/gpio--t--1256-480.html
https://www.advantech.com/en/products/data-acquisition-(daq)

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 2)
Ответ на: комментарий от kvpfs

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

Так что zinс, там все есть. Ну и пару-тройку человек на разработку битстрима для ПЛИСы и ПО для ARMа и какого-нибудь микроблейза.

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

АЦП в STM таких частот тебе не даст

Лично видел, как человек цифровал сигнал на далеко не топовой stm’ке c частотой >1MHz, собственная тактовая частота было около 70MHz, а это мало по сравнению с топовыми. Плюс к тому АЦП умею работать последовательно со сдвигом, оцифровывая один и тот же сигнал. Сколько там штук АЦП в топах бывает - хз. Вряд ли к ста можно подойти, но несколько десятков MHz - мне верится.

kvpfs ★★
() автор топика
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от kvpfs

если тебе надо оцифровывать сигнал качественно и на хорошей частоте то берешь нужный ЦАП и к нему монстрячишь систему управления на контроллере и ли плисе. как в общем тебе и посоветовали чуть выше.
в контроллерах высококачественный и быстрый АЦП достаточно редок и дорог.

pfg ★★★★★
()
Ответ на: комментарий от kvpfs

Лично видел, как человек цифровал сигнал на далеко не топовой stm’ке c частотой >1MHz

Многозначно звучит, имелась в виду частота дискретизации.

kvpfs ★★
() автор топика
Ответ на: комментарий от kvpfs

Вряд ли к ста можно подойти, но несколько десятков MHz - мне верится

Не надо верить. Просто открой описание платформы и почитай сколько там действительно независимых АЦП и какая у них максимальная частота дискретизации.

Вот например из текущего stm32f427

3×12-bit, 2.4 MSPS ADC: up to 24 channels and 7.2 MSPS in triple interleaved mode

aiqu6Ait ★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)
Ответ на: комментарий от kvpfs

В осциллографах часто используют FPGA, логика сохранения измерений в память очень простая, даже недорогая справится. А дальше уже данные идут в MCU, который их рисует на экранчике или по USB/Ethernet в комп. И надо отметить, что осциллографы не пишут все эти гигагерцы непрерывно. FPGA ловит настроенный триггер, пишет в память N значений подряд, а затем неспешно передаёт для вывода на экран. Юзер всё равно не будет вглядываться в миллиарды значений, его обычно интересует либо какой-то небольшой кусочек, либо усреднение нескольких периодов.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

kvpfs ★★
() автор топика
Ответ на: комментарий от kvpfs

Не мог бы. Современные десктопные CPU не риалтаймовые из-за System Management Mode (на x86, у ARM тоже есть аналог). Будешь терять данные. Плюс не выведены там GPIO из самого чипа. Всякие светодиоды, вентиляторы и прочие кнопки управляются Embedded Controller, который медленный даже если физически находится в одном корпусе с CPU. Он по факту является МК, просто со специфическими интерфейсами.

На что-то можно надеяться только с мобильными ARM, потому что из-за компактности смартфонов там реально GPIO бывает в проце. Самое доступное это Малина (у нее есть даташиты и платы с ней в свободном доступе).

Ещё, кстати, есть такой прикол, что GPIO может не уметь высокую скорость даже если встроен в CPU. От частоты ядра там тактируется обычно только само ядро. У всяких быстрых интерфейсов типа USB/HDMI/PCI свои отдельные источники частоты (потому что им нужна очень конкретная частота), а модуль GPIO тактируется от какой-нибудь базовой частоты в лучшем случае десятки мегагерц. Потому что высокоскоростная логика дороже (а ещё она не справиться с токами/напряжениями, которые хотелось бы иметь на GPIO), а типичным кнопкам и светодиодам на GPIO высокая скорость не нужна (зато нужна поддержка 3.3В и даже 5В и токи хотя бы в несколько ма). Даже в МК порой GPIO может иметь меньшую скорость, чем другая периферия способная дрыгать той же физической ножкой.

Наконец, ПЛИС может обеспечить большую производительность, чем любой CPU, на задаче перекладывания битов из одного интерфейса (АЦП) в другой (ОЗУ). Потому что она способна опросить все АЦП (если они подключены к разным ногам и не используют мультиплексирование) за один такт, а ЦПУ для управления несколькими GPIO будет требоваться несколько команд и как следствие тактов.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 10)
Ответ на: комментарий от aiqu6Ait

Я об этом и говорил. Все данные проходят через ПЛИС, возможно, буферизуются в подключенную память, но дальше в MCU/CPU выходит лишь небольшая «интересная» часть данных, соответствие данных критериям интересности определяет тоже ПЛИС.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Невесело как-то. Наверное самое реальное условно что-то тип - взять шину ЦПУ-RAM, тактировать от неё какую-то свою логику, которая будет писать в RAM, которую, естественно, сможет читать и ЦПУ. Но такое я уже не осилю (если нет каких-то готовых наработак).

kvpfs ★★
() автор топика

Ищи SoC с FPGA типа вышеупомянутого Zinq. Они нынче не дефицит, а с учётом прошедшего майнингового хайпа вообще копейки стоят.

Кроме того, возможно гигабайты не потребуются, если попытаться оптимизировать логику работы. Если, конечно, это не какой-нибудь imager который генерит жирную картинку на основе данных.

А ещё в FPGA можно заливать ядра всяких ARM/RISC-V или чего-то попроще. Достаточно популярно даже MCS-51 ядро. Если большую часть работы переложить на железо, то большая скорость или объём памяти могут и не понадобиться, и можно будет ограничиться крохотным ЦПУ которое займёт совсем немного вентилей в FPGA.

PS: Я чуть-чуть ковырялся с чем-то аналогичным на предмет Computer Generated Holograms, но там настолько дикие объёмы для чего-то более юзабельного, чем proof-of-concept в пару дюймов из экранчика для pico-проектора, что до них ещё как до Китая раком буквально по всем элементам - от памяти, количества вентилей, ширины и скорости шины к «дисплею»(SLM) до самой технологии дисплеев, которые для чего-то интересного должны смотреть на 4-8К как на полнейшее говно со своими 1-10М. И это при том, что весь этот монстрячий звездец рождается буквально из считанных килобайт 3D модели.

Stanson ★★★★★
()