Новинний та аналітичний портал "Час електроніки". Вчимося програмувати під FPGA на SystemVerilog Приклади оформлення великих проектів fpga

Головна / Корисне ПЗ

65 нанометрів – наступна мета зеленоградського заводу «Ангстрем-Т», яка коштуватиме 300-350 мільйонів євро. Заявку на отримання пільгового кредиту під модернізацію технологій виробництва підприємство вже подало до Зовнішекономбанку (ВЕБ), повідомили цього тижня «Відомості» з посиланням на голову ради директорів заводу Леоніда Реймана. Зараз "Ангстрем-Т" готується запустити лінію виробництва мікросхем із топологією 90нм. Виплати за минулим кредитом ВЕБу, на який вона купувалась, розпочнуться в середині 2017 року.

Пекін обвалив Уолл-стріт

Ключові американські індекси відзначили перші дні Нового року рекордним падінням, мільярдер Джордж Сорос вже попередив про те, що світ чекає на повторення кризи 2008 року.

Перший російський споживчий процесор Baikal-T1 ціною $60 запускають у масове виробництво

Компанія "Байкал Електронікс" на початку 2016 року обіцяє запустити у промислове виробництво російський процесор Baikal-T1 вартістю близько $60. Пристрої матимуть попит, якщо цей попит створить держава, кажуть учасники ринку.

МТС та Ericsson будуть разом розробляти та впроваджувати 5G у Росії

ПАТ "Мобільні ТелеСистеми" та компанія Ericsson уклали угоди про співпрацю в галузі розробки та впровадження технології 5G у Росії. У пілотних проектах, зокрема під час ЧС-2018, МТС має намір протестувати розробки шведського вендора. На початку наступного року оператор розпочне діалог із Мінкомзв'язку з питань сформування технічних вимог до п'ятого покоління мобільного зв'язку.

Сергій Чемезов: Ростех уже входить до десятки найбільших машинобудівних корпорацій світу

Голова Ростеха Сергій Чемезов в інтерв'ю РБК відповів на гострі питання: про систему «Платон», проблеми та перспективи АВТОВАЗа, інтереси Держкорпорації у фармбізнесі, розповів про міжнародне співробітництво в умовах санкційного тиску, імпортозаміщення, реорганізації, стратегії розвитку та нових можливостях у складний час.

Ростех "загороджується" і робить замах на лаври Samsung і General Electric

Наглядова рада Ростеха затвердила "Стратегію розвитку до 2025 року". Основні завдання – збільшити частку високотехнологічної цивільної продукції та наздогнати General Electric та Samsung за ключовими фінансовими показниками.

ПЛІС (Програмована Логічна Інтегральна Схема) - це інтегральна схема, призначена для побудови цифрових ланцюгів з опису спеціальною мовою програмування. Інакше кажучи, ПЛИС є чіп, хіба що містить у собі купу елементів на кшталт 74HCxx . Які саме це будуть логічні елементи, які між ними будуть зв'язки, і які зв'язки матиме схема з зовнішнім світом, Визначається на етапі програмування ПЛІС.

Примітка:Наскільки я зміг з'ясувати, в російській мові на сьогоднішній день терміни ПЛІС та FPGA (Field-Programmable Gate Array, Програмована Користувачем Вентильна Матриця) прийнято вважати взаємозамінними, що буде використано далі за текстом. Однак варто знати про існування та альтернативну точку зору, згідно з якою FPGA (ППВМ) є одним з різновидів ПЛІС (PLD, Programmable Logic Device).

Основні відомості про FPGA

Для програмування FPGA використовуються мови опису апаратури (HDL, Hardware Description Language). Серед них найбільшою популярністю користуються Verilog (та його діалекти, зокрема SystemVerilog), а також VHDL. Мови багато в чому схожі, але мають різний синтаксис і в деяких деталях. Якщо Verilog це такий C світу опису апаратури, то VHDL відповідно Pascal. Наскільки мені відомо, VHDL дещо менш популярний, зокрема через його багатослівність порівняно з Verilog. З переваг VHDL (або недоліків, кому як) можна назвати строгу статичну типізацію. Verilog іноді допускає неявне приведення типів. Якщо продовжувати аналогію з C і Pascal, мови різняться не так сильно, щоб не вивчити їх обидва.

На даний момент провідними виробниками FPGA є компанії Altera (зараз належить Intel) і Xilinx. За інформацією різних джерел, разом вони контролюють не менше 80% ринку. З інших гравців варто відзначити Actel (куплена Microsemi), Lattice Semiconductor, Quicklogic та SiliconBlue. Із залізом від Xilinx можна працювати тільки із середовища розробки від Xilinx (називається Vivado), а середовище розробки від Altra (називаючи Quartus) розуміє лише залізо від Altera. Тобто, повний вендор лок, і вибираючи конкретну FPGA для свого проекту, ви автоматично вибираєте та інструменти розробки відповідного виробника, їх технічну підтримку, документацію, умови ліцензування софту, політику щодо припинення підтримки заліза, тощо.

FPGA найчастіше застосовують у завданнях, де деякі обчислення хочеться значно прискорити, реалізувавши їх у залізі. Наприклад, FPGA знайшли широке застосування в галузі обробки сигналів, скажімо, в осцилографах, аналізаторах спектру, логічних аналізаторах, генераторах сигналів, Software Defined Radio і навіть деяких моніторах. Зокрема, LimeSDR використовується Altera Cyclone IV, а в осцилографі Rigol DS1054Z стоїть Xilinx Spartan-6, а також ProASIC 3 від компанії Actel. Ще із застосувань, про які я чув, можу назвати комп'ютерний зір, розпізнавання мови та біоінформатику. Є й інші проекти, зокрема з розробки веб-серверів та СУБД, які працюють на FPGA. Але, наскільки мені відомо, цей напрямок все ще залишається дуже експериментальним.

Xilinx чи Altera?

Як кажуть, найкращий Linux той, який використовує ваш знайомий гуру по Linux.

Мій знайомий гуру з FPGA в особі Дмитра Олексюка порадив почати з дівборди Arty Artix-7 від компанії Digilent. FPGA, що використовується в ній, є Artix-7 від Xilinx. Сам Digilent не виробляє доставку до Росії, але пристрій доступний і на AliExpress, хоча і з помітною націнкою (офіційна ціна становить 99 $). Також його продають на eBay. Це досить потужна плата, яка, тим не менш, коштує цілком адекватних грошей.

Fun fact!Якщо вам просто хочеться попрограмувати на Verilog або VHDL, строго кажучи, купувати якусь плату з FPGA не потрібно. Спочатку можна обмежитися симулятором, робота з яким буде розглянута далі.

З цікавих особливостейплати можна назвати розташування гнізд сумісним з Arduino-шилд способом. Також у комплекті з платою йде вкладка, за якою можна отримати ліцензію на Vivado, що відкриває всі його можливості. Ліцензія діє один рік з моменту активації, а також прив'язана до одного комп'ютера на кшталт ОС та MAC-адреси.

За доставкою. Я чув, що пристрої з FPGA на борту мають більші шанси не пройти митницю. Магазин на AliExpress, посилання на який я привів вище, доставляє плати до Росії через кур'єрську службу СПСР. Для проходження митниці потрібно заповнити онлайн-форму з паспортними даними (тільки дані, без фото) та контактним телефономЯк цього вимагає поточне російське законодавство. Після цього плату було доставлено кур'єром до дверей без будь-яких питань.

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

Середовище розробки Vivado доступне для завантаження на сайті Xilinx. Будьте морально готові до того, що перед завантаженням вам доведеться пройти реєстрацію та заповнити докладну форму про себе. Завантажуємо архів під назвою Vivado HLx 2017.2: All OS installer Single-File Download. Не переплутайте випадково з яким-небудь Vivado Lab Solutions, це зовсім не те, що потрібно. Архів важить більше 20 Гб, тому запасаємось терпінням.

Розпаковуємо архів, запускаємо інсталятор. Ставимо Vivado HL System Edition. Повна версія займе на диску 47 Гб. Особисто я зняв галочку напроти Software Development Kit і залишив підтримку лише 7 Series пристроїв, що зменшило розмір до 12 Гб. Забігаючи трохи вперед, зазначу, що такої конфігурації виявилося цілком достатньо.

Перед запуском Vivado потрібно додати до нього підтримку Arty Artix-7, оскільки з коробки він нічого про цю плату не знає. Робиться це якось так:

cd ~/ opt/ xilinx/ Vivado/ 2017.2 / data/ boards/ board_files
wget https:// github.com/ Digilent/ vivado-boards/ archive/ master.zip
unzip master.zip
mv vivado-boards-master/new/board_files/*./
rm -r vivado-boards-master
rm master.zip

Також завантажуємо та зберігаємо кудись файл Arty_Master.xdc. Він знадобиться далі. Файл містить опис світлодіодів, перемикачів, що знаходяться на платі, і так далі. Без нього моргати світлодіодами на Verilog буде непросто.

Перший проект на SystemVerilog

У Vivado говоримо File → New Project ... Як тип проекту вибираємо RTL Project, ставимо галочку Do not specify sources at this time. У діалозі вибору типу плати знаходимо у списку Arty.

Насамперед додаємо до проекту завантажений раніше XDC файл. Копіюємо його в каталог із проектом. Потім говоримо File → Add Sources… → Add or create constraints → Add Files, знаходимо копію файлу, тиснемо Finish. У дереві файлів проекту (Sources) у групі Constraints з'явиться файл Arty_Master.xdc або як ви там назвали копію. Відкриваємо його та розкоментуємо всі рядки у групах Clock signal, Switches та LEDs.

Далі говоримо File → Add Sources… → Add or create design sources → Create File. У типі файлу вибираємо SystemVerilog, в імені файлу вводимо щось на зразок hello. Говоримо Finish. Далі з'явиться діалог Define Module, який запропонує натиснути інтерфейс модуля. Діалог досить марний, тому що те саме зручніше зробити прямо в коді, так що тиснемо Cancel.

У дереві вихідників знаходимо новий файл hello.sv, він буде у групі Design Sources. Відкриваємо та пишемо наступний код:

`timescale 1ns/1ps

module hello(
input logic CLK100MHZ,
input logic [3:0] sw,
output logic [ 3 : 0 ] led
) ;

always @ (posedge CLK100MHZ)
begin
if (sw[0] == 0)
begin
led<= 4"b0001 ;
end
else
begin
led<= 4"b0000 ;
end
end

endmodule

Якщо все було зроблено правильно, на цьому етапі Vivado у вас буде виглядати якось так (клікабельно, PNG, 71 Кб):

Компіляція програми здійснюється у два етапи - синтез (synthesis) та імплементація (implementation). На етапі синтезу програма транслюється в абстрактний ланцюг із логічних вентилів та інших елементів. На етапі імплементації приймається рішення про те, як прошити цей ланцюг у конкретну залозку.

Запустимо синтез, сказавши Flow → Run Synthesis або просто натиснувши F11. У верхньому правому кутку ви побачите індикацію того, що процес йде. Він може займати досить багато часу, залежно від вашого комп'ютера та складності програми. На моєму ноутбуку синтез наведеної вище програми виконався десь секунд за 10. Якщо тепер сказати Flow → Open Synthesized Design, то можна побачити красиву картинку на кшталт такої:

Настав час прошити нашу платню. Говоримо Flow → Run Imlementation, потім Flow → Generate Bitstream. Підключаємо плату до комп'ютера по USB, у Vivado говоримо Flow → Open Hardware Manager → Open target → Auto Connect → Program device. Потрібно вказати шлях до bit-файлу. У мене він був таким:

./first-project.runs/impl_1/hello.bit

Говоримо Program. Тепер на платі горить світлодіод LD4, якщо перемикач SW0 опущений (див. наведену вище фотографію плати). Якщо ж перемикач піднято, світлодіод не горить. Просто, звичайно, але це ж «hello, world», чого ви очікували? :)

Симуляція

Симуляція — це віртуальне виконання коду на Verilog або VHDL прямо на вашому комп'ютері, без будь-яких ПЛІСів. Це одночасно і налагоджувальний інструмент, і своєрідний фреймворк для покриття коду тестами.

При знайомстві із симуляцією перше, що я виявив, було те, що вона в мене не працює. У логах було просто:

ERROR: Використовується для створення комп'ютера C файлу [...]xsim_1.c.

Google з цієї помилки знаходив тільки будь-яку нісенітницю в стилі «спробуйте відключити антивірус». У результаті вирішити проблему допомогло додавання прапора -v 2 в скрипт ~/opt/xilinx/Vivado/2017.2/bin/xelab. З його допомогою я з'ясував, що Clang, бінарник якого Vivado тягає за собою, падає з такою помилкою:

/a/long/path/to/clang: error while loading shared libraries:
libncurses.so.5: cannot open shared об'єкт файлу: No such file or
directory

А ця помилка та її рішення вже описані на Arch Wiki. Особисто я просто скопіював вже існуючий файл із каталогу Vivado_HLS:

cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5

… після чого все запрацювало. Отже, тепер, власне, приклад симуляції.

За аналогією з тим, як ми створювали hello.sv, створюємо новий файл hello_sim.sv у групі Simulation Sources. У файлі пишемо наступний код:

`timescale 1ns/1ps

module hello_sim();
logic clck_t;
logic [3:0] sw_t;
logic [3:0] led_t;

Hello hello_t(clck_t, sw_t, led_t);

initial begin
clck_t<= 0 ;
sw_t<= 4"b0000 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
assert (led_t === 4"b0001);

Sw_t<= 4"b0001 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
assert (led_t === 4"b0000);
end

endmodule

У дереві вихідників робимо правий клік за файлом, вибираємо Source Node Properties. У секції Used In знімаємо галочки Synthesis та Implementation. Ми ж не хочемо, щоб якісь там тести засмічували нашу далеко не гумову FPGA?

Тепер говоримо Flow → Run Simulation → Run Behavioral Simulation. У результаті ви побачите щось приблизно такого плану:

Можна бачити, що коли sw дорівнює нулю, led дорівнює одиниці і навпаки. При цьому всі зміни відбуваються фронтом тактового сигналу. Схоже, програма працює коректно. Ну і на асертах нічого не впало, що ніби натякає.

Висновок

Архів з описаним вище проектом можна завантажити. Як додаткові джерела інформації я б рекомендував наступні:

  • Якщо вас цікавлять подробиці заліза, зверніть увагу на

РЕАЛІЗАЦІЯ ПРОЕКТУ НА ПЛІС

Після відпрацювання логічної схеми з використанням функціонального моделювання потрібно помістити її на кристал. Потім виконати моделювання схеми з урахуванням фактичних затримок елементів отриманих після розміщення схеми на кристалі. За потреби відкоригувати отримані рішення. Після чого здійснюється завантаження схеми в ПЛІС та відпрацювання її на стенді.

Рис. 82.Етапи проектування цифрового пристрою на ПЛІС

Основні етапи проектування на ПЛІС (з лекцій):

    Розробляється схема пристрою та вводиться в XILINX.

    Виконується IMPLEMENTATION (трансляція, формування схеми шляхом вилучення бібліотечних елементів, оптимізація, розміщення на кристалі).

    Програмування.

  1. Асоціативна пам'ять. Організація, спосіб вибірки, на відміну від адресного зу.

Асоціативний доступреалізує пошук інформації за деякою ознакою, а не за її розташуванням у пам'яті (адресою або місцем у черзі). У найбільш повній версії всі слова, що зберігаються в пам'яті, одночасно перевіряються на відповідність ознакі, наприклад, на збіг певних полів слів (тегів - від англійського слова tag) з ознакою, що задається вхідним словом (теговим адресою). На вихід видаються слова, які відповідають ознакою. Дисципліна видачі слів, якщо тегу задовольняють кілька слів, а також дисципліна запису нових даних можуть бути різними. Основна сфера застосування асоціативної пам'яті в сучасних ЕОМ - кешування даних.

У асоціативних пристроях, що запам'ятовують, пошук інформації проводиться за асоціативною ознакою, записаною в кожну комірку пам'яті.

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

Пошук інформації проводиться паралельно по всіх осередках шляхом порівняння запиту з асоціативною ознакою кожного осередку.

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

Після формування та обробки оповещающих сигналів схемою управління проводиться зчитування необхідної інформації. При запису знаходиться вільна комірка за значенням розряду зайнятості, в першу знайдену вільну комірку записується інформація.

Перевірка розряду зайнятості проводиться у разі встановлення n-го розряду (розряду зайнятості) маски. При використанні додаткових комбінаційних схем в асоціативній пам'яті можна виконувати різні логічні операції, визначаючи максимальне чи мінімальне число, кількість слів, що мають однакову асоціативну ознаку і т.д. Осередки пам'яті асоціативного пристрою повинні бути елементами статичної пам'яті, в асоціативної пам'яті звернення проводиться до всіх осередків одночасно і не повинно перериватися циклами регенерації. Асоціативна пам'ять найбільш швидкодіюча, але дуже дорога, тому що вимагає введення додатково схеми порівняння, що дозволяє здійснити пошук для кожного осередку пам'яті. Тому така пам'ять зазвичай не використовується у чистому вигляді, а швидкодіючі пристрої пам'яті типу Кеш зазвичай виконуються як частково асоціативні.

Уповністю асоціативною кеш-пам'яті (FACM, Fully Associated Cache Memory), кожен осередок зберігає дані, а полі "тег" - повний фізичний адресу інформації, копія якої записана. При будь-яких обмінах фізична адреса інформації, що запитується, порівнюється з полями "тег" всіх осередків і при збігу їх у будь-якому осередку встановлюється сигнал Hit.

При читанні і значенні сигналу Hit = 1 дані видаються на шину даних, якщо ж збігів немає (Hit = 0), то при читанні з основної пам'яті дані разом з адресою поміщаються у вільну або вічко кеш-пам'яті, що давно не використовується.

При записі дані разом з адресою спочатку зазвичай розміщуються в кеш-пам'яті (у виявлену комірку при Hit = 1 і вільну при Hit = 0). Копіювання даних в основну пам'ять виконується під керуванням спеціального контролера, коли немає звернень до пам'яті.

Пам'ять типу FACM є дуже складним пристроєм і використовується лише за малих ємностях, головним чином спеціальних додатках. У той же час цей вид кеш-пам'яті забезпечує найбільшу функціональну гнучкість і безконфліктність адрес, тому що будь-яку одиницю інформації можна завантажити в будь-яку комірку кеш-пам'яті.

З лекцій:

Асоціативні пристрої, що запам'ятовують

Принциповою відмінністю є те, що система вибірки інформації з них здійснюється не за унікальною адресою знаходження інформації, а за якоюсь ознакою, яка є, по суті, частиною інформації, що шукається.

Інформація

Тег - відмітна ознака, за збігом з яким дістається шматок інформації.

Спрощена схема асоціативного ЗП:

Зона зберігання – адресне ЗУ з пронумерованими осередками, зберігає у собі інформацію та теги.

Для звернення до асоціативної пам'яті регістр апиту міститься зразок шуканого тега. Схема порівняння порівнює запит. Встановлюється збіг на регістрі збігів, де відбувся збіг тега з пам'яті із зразком. Можливі реакції (немає збігів; є хоча б один збіг - у цьому випадку знайдена комірка міститься в регістр даних; множинний збіг - КС повинна прийняти рішення, яку з осередків дістати для обробки).

Застосування: БД, бази знань, ПК як кеш.

Уявіть, що процесор замість того, щоб виконувати певний набір інструкцій, перебудовуватиметься під кожну програму і перетворюватиме алгоритм безпосередньо на «залізо». Саме так і працюють FPG. У сьогоднішній статті я розповім, як взагалі таке можливо, і познайомлю вас із різними методами проектування FPGA.

Для початку необхідно трохи розумітися на цифровій логіці роботи мікросхем ASIC, але починати з них дуже складно і дорого, і замість цього краще почати з FPGA.

Що таке FPGA?

FPGAрозшифровується як field-programmable gate array (програмовані користувачем вентильні матриці, ППВМ). У загальному випадку вони називаються ПЛІС - програмовані логічні інтегральні схеми.

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

Працює це в такий спосіб. Є готова друкована плата з набором інтерфейсів, які підключені до встановленої на платі мікросхеми FPGA, типу такого крутої плати для дата-центру або цієї налагоджувальної плати для навчання .

Поки ми не налаштуємо FPGA, усередині мікросхеми просто немає логіки для обробки даних з інтерфейсів, і тому працювати, звичайно ж, нічого не буде. Але в результаті проектування буде створено прошивку, яка після завантаження в FPGA створить необхідну цифрову схему. Таким чином можна створити контролер 100G Ethernet, який отримуватиме та оброблятиме мережеві пакети.

Важлива особливість FPGA – можливість переналаштування. Допустимо зараз нам потрібен контролер 100G Ethernet, а через тиждень ця ж плата може використовуватись для реалізації незалежних чотирьох інтерфейсів 25G Ethernet.

На ринку працюють два лідери у виробника FPGA-чіпів: усіма відомі Intel та Xilinx. Вони контролюють 58 та 42% ринку. Перший свій чіп FPGA засновники Xilinx винайшли далекого 1985 року. Intel прийшла на ринок зовсім недавно – у 2015 році, поглинувши компанію Altera, яка була заснована в той же час, що й Xilinx. Технології Altera і Xilinx багато в чому схожі, як середовища розробки. Найчастіше я працював із продуктами компанії Xilinx, тому не дивуйтеся її постійної згадки у статті.

FPGA широко поширені у різних сферах: споживчій електроніці, обладнанні телекому, платах-прискорювачах для застосування у дата-центрах, робототехніці, прототипуванні мікросхем ASIC. Пару прикладів я розберу трохи нижче.

Також розглянемо технологію, що забезпечує апаратну реконфігурацію, познайомимося з процесом проектування та розберемо простий приклад реалізації апаратного лічильника мовою Verilog. Якщо у вас є будь-яка налагоджувальна плата FPGA, ви зможете повторити це самостійно. Якщо плати немає, то все одно можете познайомитися з Verilog, змоделювавши роботу схеми на власному комп'ютері.

Принцип роботи FPGA

Мікросхема FPGA - це та ж замовна мікросхема ASIC, що складається з таких транзисторів, з яких збираються тригери, регістри, мультиплексори та інші логічні елементи для звичайних схем. Змінити порядок з'єднання цих транзисторів, звісно, ​​не можна. Але архітектурно мікросхема побудована таким хитрим чином, що можна змінювати комутацію сигналів між більшими блоками: їх називають CLB - програмовані логічні блоки.

Можна також змінювати логічну функцію, яку виконує CLB. Досягається це завдяки тому, що вся мікросхема пронизана осередками конфігураційної пам'яті Static RAM. Кожен біт цієї пам'яті або управляє якимось ключем комутації сигналів, або є частиною таблиці істинності логічної функції, що її реалізує CLB.

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

Дуже спрощена 2D-структура мікросхеми без пам'яті конфігурації

Блоки CLB знаходяться в комутаційній матриці, яка визначає з'єднання входів і виходів блоків CLB.

Схема комутаційної матриці

На кожному перетині провідників знаходиться шість ключів, що перемикають, керованих своїми осередками конфігураційної пам'яті. Відкриваючи одні та закриваючи інші, можна забезпечити різну комутацію сигналів між CLB.

CLB

CLB дуже спрощено складається з блоку, що задає булеву функцію від кількох аргументів (вона називається таблицею відповідності - Look Up Table, LUT) та тригера (flip-flop, FF). У сучасних FPGA LUT має шість входів, але на малюнку для простоти показано три. Вихід LUT подається на вихід CLB або асинхронно (безпосередньо), або синхронно (через тригер FF, що працює на системній тактовій частоті).

Принцип реалізації LUT

Цікаво подивитись на принцип реалізації LUT. Нехай у нас є деяка функція булева y = (a & b) | ~ c. Її схемотехнічне уявлення та таблиця істинності показані на малюнку. У функції три аргументи, тому вона набуває 2^3 = 8 значень. Кожна з них відповідає своїй комбінації вхідних сигналів. Ці значення обчислюються програмою розробки прошивки ПЛИС і записуються в спеціальні комірки конфігураційної пам'яті.

Значення кожної з осередків подається на вхід вихідного мультиплексора LUT, а вхідні аргументи булевої функції використовуються для вибору того чи іншого значення функції. CLB – найважливіший апаратний ресурс FPGA. Кількість CLB у сучасних кристалах FPGA може бути різною і залежить від типу та ємності кристала. Xilinx має кристали з кількістю CLB в межах приблизно від чотирьох тисяч до трьох мільйонів.

Крім CLB, усередині FPGA є ще низка важливих апаратних ресурсів. Наприклад, апаратні блоки множення із накопиченням або блоки DSP. Кожен з них може виконувати операції множення та складання 18-бітних чисел кожен такт. У топових кристалах кількість блоків DSP може перевищувати 6000.

Інший ресурс – це блоки внутрішньої пам'яті (Block RAM, BRAM). Кожен блок може зберігати 2 Кбайт. Повна ємність такої пам'яті залежно від кристала може сягати від 20 Кбайт до 20 Мбайт. Як і CLB, BRAM та DSP-блоки пов'язані комутаційною матрицею і пронизують весь кристал. Зв'язуючи блоки CLB, DSP та BRAM, можна отримувати дуже ефективні схеми обробки даних.

Переваги FPGA

Перший чіп FPGA, створений Xilinx 1985 року, містив лише 64 CLB. На той час інтеграція транзисторів на мікросхемах була набагато нижчою, ніж зараз, і в цифрових пристроях часто використовувалися мікросхеми «розсипної логіки». Були окремо мікросхеми регістрів, лічильників, мультиплексорів, помножувачів. Під конкретне пристрій створювалася своя друкована плата, де встановлювалися ці мікросхеми низької інтеграції.

Використання FPGA дозволило відмовитись від такого підходу. Навіть FPGA на 64 CLB значно економить місце на друкованій платі, а доступність реконфігурації додала можливість оновлювати функціональність пристроїв після виготовлення під час експлуатації, як кажуть «in the field» (звідси і назва - field-programmable gate array).

За рахунок того, що всередині FPGA можна створити будь-яку цифрову апаратну схему (головне, щоб вистачило ресурсів), одне з важливих застосувань ПЛІС - це прототипування мікросхем ASIC.

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

Для розробки ASIC випускають спеціальні плати, що містять багато FPGA, з'єднаних між собою. Прототип мікросхеми працює на значно менших частотах (можливо, десятки мегагерц), але дозволяє заощадити на виявленні проблем та багів.

Однак, на мій погляд, існують цікавіші застосування ПЛІС. Гнучка структура FPGA дозволяє реалізовувати апаратні схеми для високошвидкісної та паралельної обробки даних із можливістю змінити алгоритм.


Порівняння апаратних платформ

Давайте подумаємо, чим принципово відрізняються CPU, GPU, FPGA та ASIC. CPU універсальний, на ньому можна запустити будь-який алгоритм, він найбільш гнучкий, і використовувати його найлегше завдяки величезній кількості мов програмування та середовищ розробки.

При цьому через універсальність та послідовне виконання інструкцій CPU знижується продуктивність і підвищується енергоспоживання схеми. Відбувається це тому, що на кожну корисну арифметичну операцію CPU здійснює багато додаткових операцій, пов'язаних з читанням інструкцій, переміщенням даних між регістрами та кешем та інші рухи тіла.

З іншого боку знаходиться ASIC. На цій платформі необхідний алгоритм реалізується апаратно за рахунок прямого з'єднання транзисторів, всі операції пов'язані тільки з виконанням алгоритму і немає можливості змінити його. Звідси максимальна продуктивність та найменше енергоспоживання платформи. А ось перепрограмувати ASIC неможливо.

Праворуч від CPU знаходиться GPU. Спочатку ці мікросхеми були розроблені для обробки графіки, але зараз використовуються і для майнінгу обчислень загального призначення. Вони складаються з тисяч невеликих обчислювальних ядер та виконують паралельні операції над масивом даних.

Якщо алгоритм можна розпаралелити, то на GPU вдасться досягти значного прискорення порівняно з CPU. З іншого боку, послідовні алгоритми реалізовуватимуться гірше, тому платформа виявляється менш гнучкою, ніж CPU. Також для розробки під GPU треба мати спеціальні навички, знати OpenCL чи CUDA.

Зрештою, FPGA. Ця платформа поєднує ефективність ASIC із можливістю змінювати програму. ПЛІС не універсальні, але існує клас алгоритмів та завдань, які на них показуватимуть кращу продуктивність, ніж на CPU та навіть GPU. Складність розробки під FPGA є вищою, проте нові засоби розробки роблять цей розрив меншим.

Вирішальна перевага FPGA - це здатність обробляти дані в темпі їх надходження з мінімальною затримкою реакції. Як приклад можете уявити розумний мережевий маршрутизатор з великою кількістю портів: під час вступу пакета Ethernet однією з його портів необхідно перевірити безліч правил, як вибрати вихідний порт. Можливо, потрібно змінити деякі поля пакета або додати нові.

Використання FPGA дозволяє вирішувати це завдання миттєво: байти пакета ще тільки почали надходити в мікросхему з мережного інтерфейсу, а його заголовок вже аналізується. Використання процесорів тут може значно уповільнити швидкість обробки мережного трафіку. Зрозуміло, що для маршрутизаторів можна зробити рекомендовану мікросхему ASIC, яка працюватиме найбільш ефективно, але що, якщо правила обробки пакетів повинні змінюватися? Досягти необхідної гнучкості у поєднанні з високою продуктивністю допоможе лише FPGA.

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

FPGA in the cloud

У хмарних обчисленнях FPGA застосовуються для швидкого рахунку, прискорення мережного трафіку та здійснення доступу до масивів даних. Сюди можна віднести використання FPGA для високочастотної торгівлі на біржах. У сервери вставляються плати FPGA з PCI Express та оптичним мережевим інтерфейсом виробництва Intel (Altera) або Xilinx.

На FPGA відмінно лягають криптографічні алгоритми, порівняння послідовностей ДНК та наукові завдання на кшталт молекулярної динаміки. У Microsoft давно використовують FPGA для прискорення пошукового сервісу Bing, а також для організації Software Defined Networking усередині хмари Azure.

Бум машинного навчання теж не оминув стороною FPGA. Компанії Xilinx та Intel пропонують кошти на основі FPGA для роботи з глибокими нейромережами. Вони дозволяють отримувати прошивки FPGA, які реалізують ту чи іншу мережу безпосередньо з фреймворків на кшталт Caffe та TensorFlow.

Причому все це можна спробувати, не виходячи з дому і використовуючи хмарні сервіси. Наприклад, у Amazon можна орендувати віртуальну машину з доступом до плати FPGA та будь-яких засобів розробки, у тому числі й machine learning.

FPGA on the edge

Що ще цікаве роблять на FPGA? Та чого тільки не роблять! Робототехніка, безпілотні автомобілі, дрони, наукові прилади, медична техніка, користувальницькі мобільні пристрої, розумні камери відеоспостереження тощо.

Традиційно FPGA застосовувалися для цифрової обробки одновимірних сигналів (і конкурували з процесорами DSP) у пристроях радіолокації, приймачів радіосигналів. Зі зростанням інтеграції мікросхем та збільшенням продуктивності платформи FPGA стали все більше застосовуватися для високопродуктивних обчислень, наприклад, для обробки двовимірних сигналів «на краю хмари» (edge ​​computing).

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

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

Щодо робототехніки та дронів, то в цій сфері якраз особливо важливо виконувати дві умови – висока продуктивність та низьке енергоспоживання. Платформа FPGA підходить якнайкраще і може використовуватися, зокрема, для створення польотних контролерів для безпілотників. Вже зараз роблять БПЛА, які можуть ухвалювати рішення на льоту.

Розробка проекту на FPGA

Існують різні рівні проектування: низький, блоковий та високий. Низький рівень передбачає використання мов типу Verilog або VHDL, якими ви керуєте розробкою лише на рівні регістрових передач (RTL - register transfer level). У цьому випадку ви формуєте регістри, як у процесорі, та визначаєте логічні функції, що змінюють дані між ними.

Схеми FPGA завжди працюють на певних тактових частотах (зазвичай 100-300 МГц), і на рівні RTL ви визначаєте поведінку схеми з точністю до такту системної частоти. Ця кропітка робота призводить до створення максимально ефективних схем з погляду продуктивності, споживання ресурсів кристала FPGA та енергоспоживання. Але тут потрібні серйозні скіли у схемотехніці, та й з ними процес нешвидкий.

На блочному рівні ви займаєтеся переважно з'єднанням вже готових великих блоків, які виконують певні функції, для отримання потрібної вам функціональності системи на кристалі (system-on-chip).

На високому рівні проектування ви вже не контролюватимете дані на кожному такті, натомість сконцентруєшся на алгоритмі. Існують компілятори або транслятори з мов C і C++ рівень RTL, наприклад Vivado HLS. Він досить розумний та дозволяє транслювати на апаратний рівень широкий клас алгоритмів.

Головна перевага такого підходу перед мовами RTL - прискорення розробки та особливо тестування алгоритму: код на C++ можна запустити та верифікувати на комп'ютері, і це буде набагато швидше, ніж тестувати зміни алгоритму на рівні RTL. За зручність, звичайно, доведеться заплатити – схема може вийти не такою швидкою і займе більше апаратних ресурсів.

Часто ми готові платити цю ціну: якщо грамотно використовувати транслятор, ефективність не сильно постраждає, а ресурсів у сучасних FPGA достатньо. У світі з критичним показником time to market це виявляється виправданим.

Часто в одному дизайні потрібно поєднати усі три стилі розробки. Припустимо, нам потрібно зробити пристрій, який ми могли б вбудувати в робота та наділити його здатністю розпізнавати об'єкти у відеопотоці – наприклад, дорожні знаки. Візьмемо мікросхему відеосенсора та підключимо її безпосередньо до FPGA. Для налагодження можемо використовувати монітор HDMI, також підключений до FPGA.

Кадри з камери будуть передаватися в FPGA за інтерфейсом, який наперед визначений виробником сенсора (USB тут не котить), оброблятися і виводитися на монітор. Для обробки кадрів знадобиться фреймбуфер, який зазвичай знаходиться у зовнішній пам'яті DDR, встановленій на друкованій платі поряд із мікросхемою FPGA.


Типова блок-схема проекту FPGA

Якщо виробник відеосенсора не надає Interface IP для нашої мікросхеми FPGA, то нам доведеться писати його самостійно мовою RTL, рахуючи такти, біти та байти відповідно до специфікації протоколу передачі даних. Блоки Preprocess, DDR Controller та HDMI IP ми, швидше за все, візьмемо готові та просто з'єднаємо їх інтерфейси. А блок HLS, який виконує пошук і обробку даних, ми можемо написати на C++ і транслювати за допомогою Vivado HLS.

Швидше за все, нам ще буде потрібна якась готова бібліотека детектора та класифікатора дорожніх знаків, адаптована для використання у FPGA. У цьому прикладі я, звичайно, наводжу сильно спрощену блок-схему дизайну, але логіку роботи вона відображає коректно.

Розглянемо шлях проектування від написання коду RTL до отримання конфігураційного файлу для завантаження FPGA.

Шлях проектування

Отже, ви пишете код RTL, який реалізує необхідну вам схему. Перш ніж перевіряти на реальному залозі, треба переконатися, що він вірний і коректно вирішує необхідне завдання. Для цього використовується RTL-моделювання у симуляторі на комп'ютері.

Ви берете свою схему, представлену поки що тільки в коді RTL, і поміщаєте її на віртуальний стенд, де подаєте послідовності цифрових сигналів на входи схеми, реєструєте вихідні діаграми, залежно від часу вихідних сигналів і порівнюєте очікувані результати. Зазвичай ви знаходите помилки та повертаєтеся до написання RTL.

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

У цих обмеженнях також потрібно вказати, яких тактових частотах має працювати схема. Вихід синтезатора та файл обмежень віддаються процесору Implementation, який, крім іншого, займається розміщенням та трасуванням (Place and Route).

Процес Place кожний доки знеособлений елемент з netlist прив'язує до конкретного елементу всередині мікросхеми FPGA. Далі починає роботу процес Route, який намагається знайти оптимальне з'єднання цих елементів для відповідної конфігурації комутаційної матриці ПЛІС.

Place та Route діють, виходячи з обмежень, накладених нами на схему: контактами вводу-виводу та тактовою частотою. Період тактової частоти дуже сильно впливає на Implementation: він не повинен бути меншим, ніж тимчасова затримка на логічних елементах у критичному ланцюгу між двома послідовними тригерами.

Часто відразу задовольнити цю вимогу не вдається, і тоді треба повернутися на початковий етап і змінити код RTL: наприклад, спробувати скоротити логіку в критичному ланцюзі. Після успішного завершення Implementation ми знаємо, які елементи де знаходяться і як вони пов'язані.

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

Можна повернутися на стадію симуляції та змоделювати позаштатну ситуацію, а якщо і це не спрацює, на крайній випадок передбачений механізм налагодження безпосередньо в залізі, що працює. Ви можете вказати, які сигнали хочете відстежувати в часі, і середовище розробки згенерує додаткову схему логічного аналізатора, яка розміщується на кристалі поряд з вашою розроблюваною схемою, підключається до сигналів, що вас цікавлять, і зберігає їх значення в часі. Збережені часові діаграми потрібних сигналів можна вивантажити на комп'ютер та проаналізувати.

ВИКОРИСТАННЯ ПЛІС У СУЧАСНИХ ПРИСТРОЯХ

Тупиков Павло Андрійович

студент 5 курсу, кафедра АРТ ОмДТУ, РФ, м. Омськ

На сьогоднішній день програмовані логічні інтегральні схеми (ПЛІС) знаходять все більше застосування в різних сучасних пристроях, це пов'язано з тим, що ПЛІС мають значні переваги, порівняно із звичайними цифровими мікросхемами. До цих переваг можна віднести:

· Поліпшуються часові характеристики виробу.

· Зменшується ціна виробу.

· Зменшуються габарити виробу.

· Збільшується надійність виробу (зменшується кількість дискретних мікросхем)

· Підвищується гнучкість виробу (ПЛІС завжди можна перепрограмувати)

Архітектура ПЛІС має складну структуру (Рис. 1)

Малюнок 1. Внутрішня структура ПЛІС

Як видно з малюнка 1 основна частина ПЛІС складається з програмованих логічних блоків та програмованих внутрішніх зв'язків.

Сам процес програмування (прошивки) ПЛІС полягає у формуванні потрібних зв'язків між входами та виходами пристрою.

На сьогоднішній день у світі є два світові лідери у виробництві ПЛІС. Це американські фірми Xilinx та Altera.

Кожна фірма пропонує свій САПР для роботи з ПЛІС. Компанія Xilinx пропонує Xilinx Software Development Kit (SDK). Фірма Altera пропонує Max+Plus II і Quartus II, а також систему моделювання ModelSim.

Для створення програм прошивки зазвичай використовуються мови опису роботи апаратури, найбільш поширені на сьогоднішній день поширені такі мови:

· Verilog HDL.

Мова VHDL є найбільш складною для навчання, але при цьому має найбільші можливості на функціональних та поведінкових рівнях абстракції, проте має менші можливості на структурному рівні абстракції порівняно з Verilog HDL, для розширення можливостей мови VHDL була розроблена бібліотека VITAL (Мал. 2).


Рисунок 2. Рівні абстракції Verilog і VHDL

Прикладом роботи мови Verilog HDL є програма, реалізована на ПЛІС CYCLONE III EP3C5E1444C8N стенду Mini-DiLab, загальний вигляд якого представлений на рис. 3.


Рисунок 3. Загальний вид плати Mini - DiLab

Дана програма реалізує послідовне перемикання світлодіодів led0-led7, з вибором збільшення руху «вогника» за допомогою кнопок pba і pbb, а також керуванням швидкістю перемикання за допомогою перемикачів sw0, sw1.

//Текст програми

module proect( output led, input clk_25mhz, input pba, input pbb,

input sw);

// Призначення внутрішніх з'єднань проекту

wire s1;

wire s2;

wire s3;

// Виклик інших файлів (підпрограм), що підключаються до проекту

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Counter counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

DC3_8 DC3_8_1 (.out(led), .in(s3));

endmodule// кінець програми

Підпрограма tr

module tr (out, set, res); // Створення програми

// Призначення входів/висновків

outputreg out;

input set;

input res;

// Ініціалізація

initial

begin

Out<= 1"d0;

// Основний код програми

always @(negedge set or negedge res)

begin

if(~(set))

Out<= 1"d1;

else

Out<= 1"d0;

endmodule //Кінець програми

Підпрограма counter

module counter (con, q, clk, up); // Початок програми

outputreg con;

output q = con;

input up, clk;

// Основний код програми

always @(posedge clk)

begin

if(clk)

if(up)

Con<= con - 1"d1;

else

Con<= con + 1"d1;

endmodule//Кінець програми

Підпрограма mx (мультиплексор)

module mx ( output reg a, input in, input load);

// Основний код програми

always @*

begin

case(load)

2"b00: a = in;

2"b01: a = in;

2"b10: a = in;

2"b11: a = in;

endcase

endmodule // Кінець програми

Підпрограма dc3_8 (мультиплексор)

module dc3_8 (out, in); // Початок програми

// Призначення входів/виходів

output reg out;

input wire in;

// Основний код програми

always @*

begin

case(in)

3"d0: out = 8"b11111110;

3"d1: out = 8"b11111101;

3"d2: out = 8"b11111011;

3"d3: out = 8"b11110111;

3"d4: out = 8"b11101111;

3"d5: out = 8"b11011111;

3"d6: out = 8"b10111111;

3"d7: out = 8"b01111111;

endcase

endmodule // Кінець програми

Програма була реалізована у САПР Quartus II.

Після компіляції програми компілятор не видав помилки та зауваження у програмі, пов'язані з аналізом та синтаксисом програми (рис. 4).


Малюнок 4. Вікно повідомлень проекту

Зауваження, зроблені компілятором, говорять про відсутність ліцензії на Quartus II (була використана безкоштовна версія програми для навчання) та відсутність файлів, необхідних для моделювання проекту.

Структура даного проекту представлена ​​на рис. 5.


Рисунок 5. Реалізація проекту ( RTL структура)

Як показано на рис. 6 у цій програмі використовується лише незначна частина можливостей даної ПЛІС.

Малюнок 6. Частина ПЛІС, яка бере участь у роботі проекту

Висновки:Програмовані логічні інтегральні схеми можуть знаходити застосування в багатьох пристроях. Для навчання роботи з ними слід вводити в освітню програму спеціальностей, пов'язаних із проектуванням та конструюванням радіоелектронної апаратури знайомство з мовами опису апаратури (Verilog HDL та VHDL).

Список літератури:

1. Грушевицький Р.І. Проектування систем на мікросхемах програмної логіки/Р.І. Грушевицький, A.X. Мурсаєв, Є.П. Похмуре. СПб.: БХВ Петербург, 2002. – 608 с.

2.Коломов Д.А. Системи автоматизованого проектування фірми Altra MAX+plus II та Quartus II. Короткий опис та самовчитель/Д.А. Коломов, Р.А. Мяльк, А.А. Зобенко, О.С. Пилипів. М: ІП РадіоСофт, 2002. - 126 с.

3.Максфілд К. Проектування на ПЛІС. Курс молодого бійця. / К. Максфілд. М.: Видавничий дім «Додека-XXI», 2007. – 408 с. (Переклад з англійської).

© 2022 androidas.ru - Все про Android