Tang Nano 20K: досліджуємо можливості FPGA

Фото до статті
Фото до статті

FPGA (програмовані користувацькі мікросхеми) колись були таємничими та дорогими пристроями, але сьогодні доступні досить потужні плати за невеликі гроші. Автор вирішив оновити свій навчальний курс з FPGA, використовуючи недорогу плату Tang Nano 20K з FPGA GOWIN GW2AR-18 як основну платформу.

Історія та мотивація

Tang Nano 20K: досліджуємо можливості FPGA 1

Раніше розробка власного інтегрального чипа вимагала значних фінансових вкладень. Згодом з’явилася ідея створення мікросхем з великою кількістю нескомбінованих блоків, які можна було б з’єднувати за індивідуальним замовленням. Це все ще було дорого, але дешевше, ніж повна розробка з нуля.

Наступний крок – це створення мікросхем, де електричні з’єднання між блоками можна конфігурувати. Це реалізовано за допомогою легкоплавких запобіжників, EEPROM або RAM-комірок для збереження налаштувань з’єднань. Такі мікросхеми дозволили користувачам самостійно створювати власні кастомні чипи.

Коли потрібна FPGA? Класичним прикладом для навчання є світлофор, що демонструє роботу з машинами станів, важливими для багатьох FPGA-дизайнів. Однак, для простого світлофора достатньо й мікроконтролера. Натомість, якщо потрібно миттєво реагувати на сигнали від сотень цифрових датчиків на ракеті, FPGA стає кращим вибором. Вона може імітувати один величезний OR-вентиль, безперервно відстежуючи кожен вхід. Процесор потребує складнішого підходу для такого завдання.

Також можливе створення процесора на базі FPGA. Деякі FPGA містять вбудовані ядра процесорів, що дозволяє поєднувати переваги програмної гнучкості та апаратної швидкості.

Рішення 20K

Порівнювати FPGA складно, оскільки їхні базові блоки відрізняються, подібно до порівняння обсягів оперативної пам’яті без урахування швидкості та пропускної здатності. Хоча плата 20K має FPGA з 20 736 таблицями перетворення (LUT4) та 15 552 тригерами, її точна продуктивність залежить від логіки та маршрутизації.

FPGA GOWIN GW2AR-LV18QN88C8/I7, що використовується в Tang Nano 20K, зручно працює на частотах до сотень мегагерц для відповідним чином конвеєризованих дизайнів.

Особливістю цього чипа є його пам’ять. На додаток до розподіленої та блокової RAM, він має 8 МБ SDR SDRAM прямо в корпусі. Для доступу до неї потрібна частина ресурсів FPGA, але значно менше, ніж якби такий обсяг RAM реалізовувався у самій логічній структурі FPGA.

Також є спеціалізовані блоки, як-от 48 множників 18×18, програмований генератор тактової частоти, 64-бітний QSPI флеш-пам’ять, а також інтерфейси для аудіо, LCD, microSD та HDMI. Мікроконтролер на платі дозволяє програмувати генератор, прошивати чип через JTAG або забезпечувати віртуальний послідовний порт.

Проста FPGA

Основний робочий процес для FPGA включає такі кроки:

  1. Визначення бажаної логіки за допомогою HDL (у цьому випадку Verilog, але VHDL також поширений).
  2. Визначення “верхнього блоку”, що з’єднує логіку із зовнішнім світом.
  3. Налаштування обмежень, що вказують, які виводи мікросхеми відповідають портам верхнього блоку.
  4. Синтез HDL-коду в примітиви.
  5. Розміщення та маршрутизація примітивів у конкретні ресурси чипа для створення “бітового потоку”.
  6. Завантаження бітового потоку в RAM FPGA або конфігураційну флеш-пам’ять для збереження налаштувань після вимкнення живлення.

Ці кроки можна виконати за допомогою IDE від GOWIN або відкритих інструментів.

Всередині

Хоча деякі FPGA-інструменти дозволяють малювати схеми, IDE GOWIN цього не робить, але може візуалізувати створену логіку. Для складних проєктів схематичний опис є громіздким. Натомість, логіку можна описати за допомогою мови, подібної до програмування. Усередині чипа немає нескомбінованих вентилів у традиційному розумінні, а є таблиці перетворення (LUT). Програмне забезпечення для FPGA не шукає конкретні логічні вентилі, а програмує LUT для виконання заданої функції.

Простота

Розглянемо найпростіший приклад:

 module top(output led1, output led, input sw0, input sw1); assign led=~(sw0|sw1); assign led1=~(sw0&sw1); endmodule 

Цей код не виконується послідовно. Він просто вказує програмному забезпеченню FPGA з’єднати два вимикачі з логічними вентилями, інвертувати результат та вивести його на світлодіоди. На етапі виконання це не код, а розведення з’єднань.

Світлодіоди на платі активуються низьким рівнем, тому цей код бере два входи (вимикачі), виконує операції OR та AND, і виводить результат на світлодіоди. Вимикачі на 20K підтягнуті до землі, тому в FPGA немає потреби у додатковому підтягуванні.

Для підключення пристроїв до “коду” потрібен файл обмежень (constraint file), який зручно створювати через редактор “Floorplan”.

 IO_LOC "led" 15; IO_PORT "led" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3; IO_LOC "led1" 16; IO_PORT "led1" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8 BANK_VCCIO=3.3; IO_LOC "sw1" 88; IO_PORT "sw1" IO_TYPE=LVCMOS33 PULL_MODE=NONE BANK_VCCIO=3.3; IO_LOC "sw0" 87; IO_PORT "sw0" IO_TYPE=LVCMOS33 PULL_MODE=NONE BANK_VCCIO=3.3; 

Існують два типи схем: стандартні та ті, що показують непрозорі блоки LUT.

Відео нижче демонструє весь процес розробки від створення проєкту до роботи на макетній платі.

Встановлення

Tang Nano 20K: досліджуємо можливості FPGA 2
Кінцевий проєкт з Bootcamp 0.

Встановлення програмного забезпечення GOWIN, яке працює на Linux, може потребувати додаткових налаштувань, особливо якщо дистрибутив не підтримується. Це може включати роботу з залежностями та бібліотеками. Наприклад, виникла проблема з `libfreetype.so.6`, яку було вирішено шляхом її заміни на системну копію та додавання директорії `lib` GOWIN до `LD_LIBRARY_PATH`.

Для роботи програматора також можуть знадобитися специфічні налаштування правил udev, наприклад, створення файлу `/etc/udev/rules.d/99-tang-nano-20k.rules` з відповідним вмістом.

Відкриті інструменти можуть бути простішими у використанні, але деякі інструменти GOWIN мають корисні функції, наприклад, можливість завжди використовувати зовнішні редактори.

Наступний крок

Якщо потрібне повторення основ цифрової логіки, попередній курс FPGA Bootcamp 0 пропонує вивчення дизайну логіки за допомогою безкоштовного інструменту в браузері. У наступних частинах будуть розглянуті відкриті інструменти, IP-ядра, синхронна логіка та використання вбудованого логічного аналізатора. Для обговорення серії приєднуйтеся до Discord-сервера.

Якщо ви завершите свій наступний FPGA-проєкт, надсилайте нам опис – він може з’явитися на Hackaday.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *