Як отримати дизайн процесора на FPGA


20

Нещодавно я вирушив у довге плавання логічного проектування самонавчання. Кінцевим продуктом цього є функціональний 16-бітний процесор, який працює точно так, як розроблено в тренажері . Тепер я тільки почав розглядати можливість введення його в кремній за допомогою FPGA. Я знаю, що мені доведеться зробити багато коригувань на арені введення / виводу (реальний світ відрізняється від середовища моделювання), і я виявив, що я робив свій дизайн повністю в програмі, яка не експортує netlists або HDL-код тому все, що я насправді маю, є схематичним.

Але, якщо припустити, що я якось дістався до моменту, коли в мене є чистий список або HDL-код моєї конструкції, який мій наступний крок, щоб перетворити його на кремній? Поки що з того, що я читав, схоже, що FPGA - це моє рішення, але перегляд веб-сайтів Xilinx і Altera змушує мою голову крутитися. Чи я гавкую неправильне дерево? В основному я шукаю простий англійський опис того, що наступний крок для хлопця з функціональною схемою процесора. Як тільки я знаю, в якому напрямку рухатись, я можу зламати книги і зрозуміти все, що мені потрібно знати про те, як дістатися. Також зауважте, я перебуваю на Mac OS X, але у мене є вікно XP XP, до якого я можу підключитись, якщо я абсолютно повинен.


Яка програма зробив ти свій дизайн в? Там можуть бути сторонні перетворювачі.
Коннор Вольф

Відповіді:


17

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

редагувати (перегляньте свій коментар)
Вам потрібна система розробки конкретного виробника. Альтера і Xilinx - великі гравці, і обоє мають своїх віруючих. Яку з них ви обрали не так важливо, як обидві мають достатньо різних частин, щоб задовольнити ваші потреби.
Якщо ви вибрали для Xilinx, у нього є програмне забезпечення для програмного забезпечення ISE WebPACK , яке безкоштовно (велике завантаження в 3,4 ГБ). Наразі обмеження порівняно з більш досконалими версіями програмного забезпечення не повинні вас турбувати.
Далі вам потрібна рада розвитку. Вам потрібно мати уявлення про те, який FPGA вам знадобиться вибрати. Якщо ви підете на Xilinx, я вибрав би спартанця, можливо, Spartan-6, Virtex - це вже занадто високий клас IMO. Є ще велика кількість, що вибирають занадто багато, в основному різні в додатках на дошці. Вам потрібна плата з трохи більшою кількістю вимикачів та світлодіодів. Я б поглянув на роз'єм клавіатури та модуль дисплея.
Xilinx має ряд плат, а для Xilinx FPGA також є Digilent , Avnet , Xess та багато інших.

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

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


Я використав Logisim, який є фантастичним для схем, але йому не вистачає способу виведення нічого, крім зображень (png, jpeg тощо). Що стосується плутань FPGA, я частково є питанням величезного набору пристроїв, але також я не знаходжу ресурсів, які пояснюють основи та основи. Якщо я поставив там свій процесор, як він взаємодіє із зовнішнім світом? Яке обладнання мені потрібно? Чи можу я повторно запрограмувати FPGA повторно? і т. д. і т. д. Це справді просто повна незнання предмета. Я думаю, мені потрібен путівник, але не знайти його ніде.
Rory O'Hare

2
Ваші питання, щоб: 1) FPGA інтерфейс із зовнішнім світом через штифти вводу / виводу. Різниця полягає в тому, що ви можете вибрати штифти, на відміну від виділених чіпів. 2) Ви можете почати зі стартового набору, набору для розробки тощо. Це буде мати FPGA, деякі роз'єми для вводу / виводу та джерела живлення на борту. Більшість також включає програміста; якщо ви не забудете його отримати. 3) Так, ви можете перепрограмувати FPGA. Програма зберігається на мікросхемі в тому, що є по суті гігантським регістром змін. При запуску спеціальна державна машина або зовнішнє джерело завантажує її в чіп.
Майк Десимоне,

9

Я не знайомий з інструментами Xilinx, але я з інструментами Altera, тому я розповім вам про їхні. Xilinx та інші не повинні бути занадто різними.

Верилог

Перше, що вам потрібно буде зробити - це вивчити Verilog . Це зробить вашу голову боляче, тому що Verilog (і дещо схожий VHDL) вперше був розроблений як мова імітації , і багато конструкцій (як, наприклад, #5означає "почекайте 5 часових кроків", тимчасовий крок, як правило, наносекунд). Таким чином, існує багато обмежень, про які вам потрібно пам’ятати, щоб зробити ваш код Verilog синтезованим , тобто комбінованим у бітовий потік для FPGA.

Найбільшим шоком є ​​те, що те, що ви пишете у Verilog (і VHDL) - це поведінка, яку ви очікуєте від системи , і компілятор виводить правильну логіку з вашого опису. Якщо ви не будете обережні, ви можете отримати багато неприємних помилок від цього.

Наприклад, D-триггер виглядає так:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Це описує, як працює DFF, і компілятор повинен його проаналізувати і з'ясувати, що потрібно DFF. Список @(...)називається чутливістю , що представляє собою список сигналів, які викликають переоцінку блоку коду; таким чином, у цьому блоці Qзмінюється лише те, що на підйомі RESETабо CLK(є це для активного високого скидання). Якщо ви забудете щось у списку чутливості (яке повинно містити всі праві змінні праворуч без будь-яких модифікаторів posedgeабо negedgeкомбінаційного логічного блоку), компілятор буде синтезувати засувки за потребою, а не викликати помилку. Божевільно, але так воно і є, тому що Verilog спочатку був симуляційною мовою, яка приховувала (і, таким чином, не вимагала) деталі реалізації. VHDL - це те саме, але набагато більш багатослівне.

Нарешті, кілька років тому була випущена нова версія Verilog під назвою SystemVerilog , що набагато полегшує написання коду, що синтезується . Якщо це взагалі можливо, вивчіть цю мову, оскільки підтримують її Xilinx ISE та Altera Quartus II. Основна проблема - цілком відсутність хороших довідкових матеріалів.

Версія SystemVerilog DFF очищує пару дрібниць:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Зауважте, що сигнали у списку чутливості розділені комами. Це тому, що orбуло заплутано, оскільки andтам не можна було працювати. Також зверніть увагу на заміну 1'b0(одного 0біта) на '0(символ, який розширюється до однак багато 0бітів потрібно на основі того, що йому призначено; набагато більш гнучким з параметризованими модулями). Нарешті, зверніть увагу на заміну always(яка може бути використана для чого завгодно; комбінаційна логіка, засувки та шльопанці), за допомогою always_ffякої необхідний синтез вмісту для тригерів. Існує також такий, always_combякий виключає список чутливості, оскільки він просто працює на чутливість від входів до блоку.

Дизайн програмного забезпечення Altera називається Quartus II, і ви шукаєте веб-версію . (Видання підписки є досить дорогим і потрібне лише для найшвидших або останніх FPGA-моделей.)

Сумно полягає в тому, що я не знайшов гарної книги на цю тему. Що я дізнався, я отримав, зібравши речі з різних джерел, таких як книги Verilog, які не дуже добре розповідають, що можна синтезувати, а що ні, і, наприклад, код. У Quartus II є команда "шаблон шаблону", яка вставляє код шаблону для декількох загальних структур, від D тригмарів до станкових машин.

Демо обладнання

Після того як ви реалізували ваш процесор у Verilog, вам потрібно його скласти. На даний момент дозвольте Quartus обрати чіп (ви повинні вибрати сім'ю; я б рекомендував Cyclone IV) та розпізнавання. Як тільки він з'явиться, ви дізнаєтеся, скільки чіпа вам потрібно. Він підкаже, скільки логічних елементів, фліп-флопів, бітів оперативної пам’яті тощо ви використовували. Переконайтеся, що ви не перевищували 50% на будь-якому з них; якщо ви є, подивіться на мікросхему, яку вибрав компілятор і вручну виберіть наступну більшу (в логічних елементах) мікросхему, яка має щонайменше стільки штифтів, і повторюйте, поки ви не отримаєте використання менше 50%.

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

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

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

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

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

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

Удачі!


Чудово, це дуже корисно. Просто для перевірки однієї речі, я чув про схематичне захоплення. Це є можливою альтернативою навчанню verilog? Я дізнаюся це, якщо доведеться, але якщо це не потрібно на 100%, я краще не додаватиму його до величезного переліку речей, які мені вже потрібно розібратися. Велике спасибі
Rory O'Hare

Чесно кажучи, не дуже. Одна з великих проблем полягає в тому, що ви перебуваєте на вашій увазі схематичну програму захоплення: якщо вона сприймає вашу схему і генерує неправильний Verilog, що ви можете зробити? Тоді як написання Verilog надасть вам необхідні повноваження для виправлення всіх помилок. Однак, велика причина полягає в тому, що є речі, які схематичне захоплення ніколи не робитимуть так само, як і Verilog: Параметризовані модулі та розбиття та об'єднання шини - це ті, що негайно приходять до тями.
Майк Десимоне,

1
Чи є інструменти, які можуть перетворити дещо більш "апаратну описову" мову на Verilog або VHDL (наприклад, якщо я хочу, щоб net Z був фліп-флопом, введення даних якого є комбінацією A, B і C, яке асинхронно скидається під час C і D - це правда, було б непогано мати можливість сказати щось на зразок, Z:= A & (B # C); Z.ar = C & D;не турбуючись про списки чутливості та подібне).
supercat

Altera Quartus дозволяє ввести дизайн як схематичний або AHDL (версія VHDL Altera) або будь-яку їх комбінацію, ймовірно, включаючи інші HDL. (будучи старомодною, я в першу чергу використовував схематичний запис для своїх проектів CPLD та FPGA, з невеликим AHDL.)
Peter Bennett

Щоб зрозуміти, AHDL не є версією VHDL. І VHDL, і Verilog є мовами виводу , де ваш код описує бажану поведінку схеми, а компілятор повинен зробити висновок про реалізацію з цього поведінкового опису. Це є спадщиною того факту, що обидва розпочалися як мови моделювання та були повторно використані для синтезу. AHDL - це декларативна мова, де ви декларуєте примітиви (наприклад, триггери, таблиці правди) та як вони пов'язані, тому компілятору не доведеться здогадуватися. AHDL сягає 80-х і значно ближче до ABEL.
Майк Десімоне

5

Так, FPGA майже напевно ваше рішення!

Ви майже напевно буде необхідно використовувати один з мов опису апаратних засобів, або повторно ввести схеми в інший інструмент. Я б рекомендував проти схематичного підходу як

  1. постачальники інструментів FPGA насправді їх не підтримують добре
  2. Це не портативний

Після того, як ви написали HDL, якщо ви безпосередньо не вставляєте речі з бібліотеки постачальників, використовуючи різні "майстри IP" або безпосередньо вставляючи компоненти з їх бібліотек, у вас з'явиться код, який ви зможете справедливо перенести на інші чіпи легко (набагато більше, ніж, наприклад, перенесення вбудованого C IME)

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

Великі 2 ЛПВЩ - це VHDL та Verilog. Ви можете прочитати цю відповідь про те, як вони відрізняються ...

VHDL або Verilog?

Я б також сказав, що MyHDL також варто переглянути, якщо ви вже знаєте Python - він дає величезну здатність до перевірки, але все ж більшість контролю низького рівня, який дає "звичайний" HDL.

Щойно ви виберете HDL, а потім зроблять цю роботу (знову ж таки, вибачте!) У симуляції, тоді ви опинитесь у стані, коли зможете просунути її через інструменти постачальника та дізнаєтесь наступний великий фрагмент завдання - як тільки він імітуватиме правильно, завжди більше зусиль, ніж ти думаєш, для отримання синтезу :)

Якщо ви приєдналися до схем і можете отримати ліцензію, LabviewFPGA може вам підійти.


3

Отримайте копію швидкого прототипування цифрових систем від Hamblen et al:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

В основному він використовує VHDL, який я віддаю перевагу Verilog.

Він включає дуже простий 8-бітний процесор, uP3, який я реалізував на власному апаратному засобі Altera FLEX 10K кілька років тому, використовуючи більш раннє видання книги. Я перекладу його на цю плату Cyclone II за 25 доларів, коли отримаю плату “передньої панелі”. Він також включає процесор MIPS та процесор Altera NIOS II. Ви можете працювати над вправами uP3 у книзі за допомогою безкоштовних інструментів Altera Quartus II, переписати свій код процесора у VHDL та налагодити його роботу на платі Cyclone II. Крім того, у Quartus II є схематичний запис, і ви повинні мати можливість вводити схему безпосередньо, імітувати її та запускати її на Cyclone II.


1

Якщо складність полягає в крутій кривійці навчання з навичками інструментів, то слідуйте найпростішому шляху. Актел (нині Microsemi) має Ліберо , пакет інструментів FPGA, які вимагають нульового зчитування і їх легко почати використовувати: відразу після встановлення. Ви можете створити там схеми вручну і за допомогою декількох клацань завантажте їх у фізичну FPGA, екрани, що їх роблять, дуже зрозумілі.


0

Якщо ви вирішите вивчити ЛПВЩ, там ви можете впливати, яка мова краща. В Європі VHDL є більш популярним. У США Verilog користується більшою популярністю, за винятком оборонної промисловості - VHDL. (Міністерство оборони США спочатку створило VHDL) Це означає лише, що люди, які знаходяться поруч з вами, можуть краще допомогти на тій чи іншій мові. Але якщо ви шукаєте допомоги в Інтернеті, то це може бути неактуальним.

Інші книги, які слід розглянути, - це швидке прототипування цифрових систем: SOPC Edition, в якому йдеться про плати Altera DE1 та DE2. У DE1 та DE2 вже є кілька різних комп’ютерів, щоб дати вам уявлення про те, як вони працюють. Minimigtg68 ( Аміга ), FpgaGen (Sega Genesis) тощо переносяться на цю дошку, щоб ознайомитись із прикладами.

Якщо ви підете на Xilinx, я зараз зараз вкладаю дві книги. Прототипування FPGA за допомогою прикладів Verilog: Версія Xilinx Spartan-3 Версія прототипу FPGA за VHDL Приклади: Версія Xilinx Spartan-3 Хоча я не знаю, яку конкретну дошку рекомендувати з ними. Я схвильований з приводу скоро наближеної дошки, FPGA Arcade, але я забуваю, чи буде у неї Xilinx або щось інше.


0

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

Його можна знайти тут: https://github.com/reds-heig/logisim-evolution

Знайте, що це питання давнє, але воно допомогло мені купу, і сподіваюся, що це допоможе комусь іншому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.