Програмування FPGA, з чого почати


29

Я розробник програмного забезпечення (C, C ++, aim-c, java ...) і мені цікаво навчитися програмувати FPGA. Тепер питання може здатися вам простим, але, будь ласка, знайдіть час, щоб допомогти мені в цьому, оскільки я зараз застряг. Моя компанія попросила мене ознайомитись з технологією та працювати над решітчастим продуктом. Моє питання - з чого почати? Після деяких досліджень я виявив, що можу вибирати між VHDL та Verilog, я жодного разу не використовував. Чи є якийсь фахівець, який міг би підказати мені, з чого слід почати? Вивчіть мову, дізнаєтесь про апаратні компоненти, а потім решітчастий продукт? Або безпосередньо почати з продукту Lattice (як я читав, що методи програмування сильно відрізняються між постачальниками FPGA)?


3
Якщо ви знайомі з програмуванням на C / C ++, тоді вам слід вибрати Verilog , а не VHDL. Синтаксис
Верилога

1
@ m.Alin Я тільки починаю, і я з’ясував, що це не має значення, якщо це схоже на C, тому що я виявив, що найважчою частиною був не синтаксис, а різниця в поняттях. Семантика навіть не наближена до такої К.
Едгар Клеркс

Найбільша зміна, яку я виявив у C / C ++ / Java / тощо. полягає в тому, що модулі, які ви пишете (еквівалентні, я думаю, одиницям перекладу), керуються суто подіями. У C, спрощеному до основного принципу, складена програма буде виконувати рядок 1 вашого коду, потім рядок 2, потім 3, потім 4 і т. Д. У Verilog / VHDL такого немає. Це щось схоже на малювання малюнка : цей вхідний штифт підключається до module1_input, module1_output перемикає стан кожного разу, коли module1_input виходить вище. Замість if(condition)цього when(condition). Більшість ідентифікаторів FPGA навіть мають графічний вклад, як ніби ви малюєте його на папері.
CharlieHanson

Відповіді:


40

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

Починати з нуля

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

На вашому навчальному шляху не прагнете вирішити те, що здається легкою проблемою з наявними знаннями з програмного забезпечення. Один з класичних прикладів - це «для циклу». Незважаючи на те, що ви можете написати цикл для, скажімо, verilog - він служить для інших цілей. В основному використовується для генерації коду. Це може бути і циклом, як розробники програмного забезпечення бачать це, але це не буде корисним для нічого, крім моделювання (тобто ви не зможете програмувати FPGA так).

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

Вивчіть апаратну та HDL мову

Найпопулярніші мови HDL - це Verilog та VHDL. Існують також специфічні для продавця такі, як AHDL (Altera HDL). Оскільки ці мови використовуються для опису апаратних компонентів, всі вони в значній мірі використовуються для вираження одних і тих же речей аналогічно, але з іншим синтаксисом.

Деякі люди рекомендують вивчати Verilog, оскільки він схожий на C. Так, його синтаксис - це суміш C та Ada, але це не спрощує розробника програмного забезпечення нахилятися. Насправді, я думаю, це може навіть погіршити, оскільки виникне спокуса написати C у Verilog. Це хороший рецепт дуже поганого проведення часу.

Маючи це на увазі, я рекомендую дивитися з VHDL. Хоча Verilog також нормальний, якщо вищезгадане враховано.

Важливо пам’ятати, що ви повинні розуміти, що ви виражаєте цією мовою. Яке апаратне забезпечення «описується» та як воно працює.

З цієї причини я б рекомендував вам придбати собі книгу з електроніки взагалі та хорошу книгу на кшталт цієї - HDL Chip Design (він же - синя книга).

Отримайте тренажер

Перш ніж почати робити що-небудь технічне та використовувати будь-які функції, що стосуються постачальника тощо, знайдіть собі тренажер. Я починав з Verilog, і використовував Icarus Verilog разом з GTK Wave. Це безкоштовні проекти з відкритим кодом. Виконайте приклади, які ви бачите в книгах, практикуйте, створюючи власні схеми, щоб відчути смак.

Отримайте дошку розвитку

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

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

Я також переконався, що дошка постачається з компонентами, які ви плануєте використовувати або розширювати. Наприклад, якщо ви хочете створити такий мережевий пристрій, як маршрутизатор, переконайтеся, що на платі є Ethernet PHY, або вона може бути розширена через, скажімо, роз'єм HSMC тощо.

Дошки зазвичай мають хорошу довідку, керівництво користувача та приклади дизайну. Вивчіть їх.

Читати книги

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

Я особисто почав з цього:

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

Поверніться з більш конкретними питаннями

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


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

5
Відмінна відповідь.
Асад Ебрагім

Ще в школі ми вивчили C ++ ще до того, як вивчили VHDL. У мене було багато проблем з розумінням цього, але момент, коли все клацнуло, це коли я зрозумів, що все відбувається в режимі реального часу та паралельно (паралельно, а не асинхронно, як nodejs). Розробка програмного забезпечення йде за послідовною течією, але в HDL все відбувається відразу (більшу частину часу). Якщо у вас є щось на кшталт "x = 1; y = 2; y = x; x = y", в SW в кінці y буде дорівнює 1, в HDL, у вас є умова гонки, оскільки і x, і y будуть намагатися змінюватись один в одного одночасно. Просто пам’ятайте про це, і життя може бути простішим для вас.
PGT

@PGT Ви очікуєте, що значення y буде чимось іншим, ніж 1, якщо 'y' є доступним для декількох процесів, що працюють або на одному ядрі, або на декількох ядрах, що може накласти свій авторитет на слабший процес.
Адітія

1

В якості альтернативи ви можете використати деякі методи синтезу високого рівня, такі як Xilinx HLS Vivado та рішення OpenCL Altera. Можливо, це полегшить вашу криву для вивчення мов опису апаратних засобів, враховуючи ваш програмний фон.


-1

Спочатку вивчіть основи цифрового дизайну. Машина Мелі / Мура, комбінаторна логіка, таблиця істини, карта Карна і так далі. Почніть створювати просту конструкцію за схемою (7-сегментний лічильник), а потім вивчіть HDL. В Європі VHDL використовується, в США Verilog. Нарешті важливий час, пам’ятайте, що сигнали мають затримки, які залежать від миттєвого та температурного компонентів, і кожен сигнал має ще одну затримку.

Книга для читання: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

Досконалі знання синтаксису мови - це згодом, спочатку зрозумійте цифровий дизайн та проблеми.


В Європі VHDL використовується, в США Verilog. Не зовсім правда ...
Метт Янг

Дійсно, я дізнався Verilog і я з Великобританії. Це також мова, що викладається в одному з модулів, які я робив на університеті (також у Великобританії).
Том Карпентер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.