РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >

Теги статьи:

Самодельная "Arduino" на FPGA Xilinx

Автор: Chip115
Опубликовано 22.08.2023
Создано при помощи КотоРед.

Всем привет! Завалялась у меня достаточно скромная матрица от Xilinx SLX9. Эта FPGA в QFP корпусе. Применять мне ее особо не куда, по этому решил сделать на базе этой матрицы небольшой проект для самообучения. Периодически хочется поулучшать навыки в написании IP ядер, но в рамках текущей работы задач по разработки кастомных IP'шек нет, а руки чешутся.
 
Посмотрел что предлагает мировая промышленность. Тут всё просто: либо дрого, либо не устраивает меня по периферии, либо и то, и другое.
Так как у меня накопилось достаточно много всяких шилдов в форм-факторе arduino-uno, да и всякие отладки от ST в этом же форм-факторе есть в наличии, то мне хотелось того же интерфейса и от отладки для матрицы. Это удобно, так как можно особо не прыгая с паяльником быстро собрать прототип и играться с ним. К тому же, я хотел иметь на борту USB2UART, так как очень часто хочется валить лог в консоль. Да и по минимуму, на борту хотелось иметь какой не какой АЦП, так как моя область интересов лежит в плоскость ЦОC. Хотя, нормальной реализации аналогового тракта в таком форм-факторе ожидать не приходится, но для "галочки", ацп требуется.
В итоге, родилась такая вот весчь.
 
На фото вы можете видеть ревизию платы 1.0. В репо уже лежит исправленная версия HW Rev. 2.0. Исправления касались бага в подключении QSPI флешки. Вроде, пока, других багов не обнаружено. Тестовая прошивка завелась (мигание светодиодами).
Структура отладочной платы
Еще есть 8 светодиодов, которые я забыл тут нарисовать. Может быть когда-нибудь дополню картину
 
Из рисунка выше становится более-менее понятно из каких функциональных узлов состоит моя плата.
Внешнее питание понижается при помощи DC/DC преобразователя до уровня 5 вольт, далее линейными стабилизаторами опускается до 3,3 вольт и 1,2 вольта соответственно.
Все цифровые I/O, которые идут на разъем ардуино заведены через преобразователь уровней TXS0108. Благодаря этому можно не бояться подключать стандартные шилды, которые оперируют уровнем 5В. Аналогично интерфейс I2C заведен через повторитель PCA9515.
 
В качестве USB <-> UART используется CH340G.
 
Также имеется аналоговый датчик температуры MCP9700, который подключен к АЦП AD7997. Вообще, AD7997 имеет восемь входов. Что и куда подключено можно видеть на схеме ниже
Можно заметить, что AD0 делится между AD1 и AD7. Какой из АЦП будет использоваться определяют перемычки J2 и J3. По-хорошему, AD7 стоило бы использовать как полностью дифференциальный усилитель, но в этом релизе, я думаю, мне за глаза хватит и такого исполнения. Контроль 3,3 вольта заведен на вход АЦП DA1 через делитель.
 
Сама матрица тактируется от генератора 80 МГц.
Оставшиеся I/O матрицы напрямую торчат из доп.разъема XP2. Защиты ни какой нет, по этому надо быть осторожнее. ЛОГИЧЕСКИЙ УРОВЕНЬ СИГНАЛА 3.3 вольта
 
Схемотехника
Так как схема получилась большая и в хорошем качестве ее сюда не могу загрузить как картинку, то предлагаю скачать схему в виде pdf файла из приведенного в конце статьи репозитория. В целом, там всё классически, без особенностей.
 
PCB
Печатная плата четырёхслойная. Гербера в архиве, в конце статьи. 
 
Особенности монтажа
1. После монтажа DC/DC надо его проверить. После успешной проверки запаять перемычку J1.
2. Разъем JTAG надо паять либо угловой, либо с обратной стороны. Прямой разъем, запаянный с TOP стороны будет мешать шилдам, которые крепятся сверху.
3. Установить перемычки M0, M1 как на первом фото.
4. Актуально для HW 1.0. надо перекинуть пару дорожек, как на рисунке ниже. Ошибся в подключении QSPI Flash
 
Разрываем связи, обозначенные крестом, прокидываем новые связи. Получается, X_MOSI идет на Вывод 64, LED_6 Идет на вывод 66.
 
Вообще, выше описанный баг мне вообще не мешает, так как для целей отладки память QSPI не нужна.
Она используется для хранения конфига (читай прошивка) ПЛИС. Какой-нибудь программатор-отладчик заливает конфиг прям в FPGA и вы работаете как обычно, включая пошаговую отладку для процессора Microblaze.
В общем, баг не мешает жить. Единственное, при отключении питания конфиг приходится прошивать заново.
 
Зачем я вообще что-то пишу про ревизию HW 1.0? Да просто у меня в наличии есть еще четыре PCB. Если вы надумаете паять данную вещь, то могу отправить вам почтой одну доску за символическую стоимость 500р + доставка.
Ну или можете заказать на заводе новую ревизию.
Стоить она будет больше, а оставшиеся четыре платы так и буду валяться. В общем, если что - пишите, договоримся :)
 
Если будет запрос от общества, может покажу как начать работать с FPGA.
Разберем среду разработки, поймем что к чему, чем отличается программирование микроконтроллера от написания конфига для ПЛИС, стандартно мигнем светодиодом из под VHDL, затем поднимем микропроцессорную систему и поработаем оттуда.
Надеюсь мне хватит мотивации дойти до реализации алгоритмов ЦОС на FPGA, ибо, в основном я для этого и использую данный класс микросхем. 
 

Файлы:
Схема и гербера на плату


Все вопросы в Форум.