Чи може дизайн FPGA бути переважно (або повністю) асинхронним?


39

У нас був дуже короткий курс FPGA / Verilog в університеті (5 років тому), і ми завжди використовували годинники скрізь.

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

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

Моєму початківцеві очей здається, що єдиною конструкцією, яка абсолютно потребує годинника, є reg, і я розумію, що типова FPGA (скажімо, Циклон II) матиме свої ворсинки, попередньо підключені до конкретних тактових сигналів. Це правильно? Чи є якісь інші неявні годинники на кшталт цього, і як правило, вони можуть керуватися дизайном вручну?


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

Відповіді:


27

Коротка відповідь буде: так; довша відповідь буде: це не варто вашого часу.

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

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

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

Сподіваюсь, це трохи очистить його.


3
Довелося використовувати деякі пристрої з асинхронною конструкцією FPGA. З ними було важко працювати. Принаймні використовуйте обмеження у часі
Тім Вілліскрофт

1
Хоча це правда, що можливо реалізувати асинхронні проекти з FPGA, більшість FPGA побудовані для підтримки конкретних синхронних конструкцій. У них є безліч ресурсів (PLL, схеми розподілу тактових годин і величезна кількість тригерів), які будуть витрачені в асинхронному дизайні.
Дмитро Григор’єв

2
Ця відповідь не дає особливо гарних порад. Ви можете створити FPGA без годинника, і це фактично спрощує місце і маршрут, усуває безліч проблем щодо вимог до термінів, а завдяки дрібнозернистому трубопроводу може бути помірно більша пропускна здатність. Справжня проблема виникає, коли ви намагаєтеся зіставити тактову схему на FPGA без годинника, оскільки вони мають дуже різні характеристики часу. Це можна зробити, для перетворення потрібно лише трохи більше переробки. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Нед Бінгем

20

"Чи можна створити складний куточок логіки і так швидко проскакати речі?" Так. Вбудовано цілі процесори, які повністю асинхронні - принаймні один з них був найшвидшим процесором у світі. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

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

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

На щастя, деякі переваги асинхронного дизайну можна отримати, використовуючи в основному методи синхронного проектування, використовуючи глобальний асинхронний локальний синхронний дизайн (GALS) .


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

@romkyns - Це більше зводиться до того, що писати програмне забезпечення для друкованих плат, яке використовує не прямолінійні сітки, важко .
Вонор Коннор

1
@supercat: Я підозрюю, що ви натякаєте на чотирифазну логіку . Це один із багатофазних тактових сигналів, який, здається, забутий.
davidcary

1
@davidcary: Сортування, за винятком обох "фаз" на одному проводі - одна фаза контролюється піднімаючим краєм, а одна - падаючою кромкою. В основному я б розділив засувні годинники на чотири категорії: чистий підйом, чистий падіння, пізній підйом, пізнє падіння. Засувки, накладені на (L / CB) чистим піднімаючим чи спадаючим краєм, можуть брати дані з будь-якого піднімається чи спадаючого краю. L / CB пізній край, що піднімається, може приймати дані з чистого висхідного краю L / CB будь-якого падаючого краю. L / CB пізньою падаючою кромкою може приймати дані з чистого падіння L / CB або будь-якого підйому.
supercat

1
@davidcary: За умови, що найшвидший час поширення для будь-якої засувки перевищує найдовший час утримування та за умови, що найдовший шлях сигналу від краю годинника, через логіку решітки годинника та "пізні" засувки, що спрацьовують цим краєм, до будь-якої засувки, що викликається наступний край, не перевищує мінімальний час між ребрами годинника, я думаю, що така конструкція повинна бути повністю надійною і не мати внутрішньо генерованої метастабільності при будь-якій комбінації затримок розповсюдження.
supercat

5

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

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

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


4

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


4

Так, ти можеш. Ви можете повністю проігнорувати фліпфлопи та створити все це з LUT. І / або ви можете використовувати елементи стану більшості FPGA Xilinx як засувки (рівень, що спрацьовує), а не фліпфлопи.


3
Небезпека при цьому полягає в тому, що, якщо ви не обмежуєте компілятор логіки, він може створювати логіку, яка має від'ємний час поширення для деяких воріт. Наприклад, якщо задати X=(someComplexFormula)і Y=X & D, і якщо замінників компілятор , що формула X і визначає , що X & Dеквівалентно A & D, компілятор може замінити обчислювальну Y в термінах А і D, а не в термінах X, тим самим дозволяючи обчислення Y протікати швидше, ніж у X. Такі заміни справедливі за комбінаторною логікою, але спричиняють хаос щодо асинхронної послідовної логіки.
supercat

@supercat - я ніколи не працював з інструментами Xilinx, але коли я працював з FPGA Altera, ви завжди мали можливість вказати будь-які критичні шляхи як підключені модулі воріт, а не в RTL, і тоді такі оптимізації є інвалід.
Жуль

@Jules: У всіх моїх програмованих логічних проектах використовується Abel, який є дещо густим мовою, але дає змогу вказувати речі способами, які можуть реалізовувати деякі CPLD, але які можуть створювати труднощі для інструменту синтезу VHDL або Verilog. Наприклад, в одному з моїх проектів я скористався тим, що в деталях Xilinx встановлено годинник, набір асинхронізації та скидання асинхронізації, щоб реалізувати регістр зрушень, завантажуваних асинхронією. Якщо мені потрібно робити такі речі в FPGA, ніколи не використовуючи Verilog або VHDL, як я повинен дізнатися, що потрібно для цього? До речі, якщо пам'ять служить, я використовував T flops для перемикача, і ...
supercat

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

@supercat - вирішуючи подібну проблему, дивлячись на посібник із пристроїв Cyclone IV, я бачу, що найкращим підходом до цієї ж проблеми було б використання параметра "синхронне навантаження на широкому рівні LAB" ("LAB" - це група з 16 логічних елементів) , тож якщо розмір такого реєстру не закінчується кратним 16 біт, то деякі біти будуть витрачені даремно, але це все одно є найбільш корисним варіантом). Зараз у мене є два варіанти: я можу написати функціональний verilog, який вимагатиме інструменту синтезу, щоб вибрати спосіб реалізації необхідного реєстру (який, як правило, був найкращим варіантом), або, якщо у мене суворі строки ...
Jules

3

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


3

Дійсно є ТРИ типи конструкцій.

  1. Комбінаторний. Немає ні годин, ні шляхів зворотного зв'язку, і система не має "пам'яті". Коли один або декілька входів змінюють пульсацію змін за логікою. Через деякий час вихід виходить у новий стан, де він залишається, поки введення знову не зміниться.
  2. Синхронні послідовні. Система побудована з регістрів і блоків комбінаторної логіки, регістри тактовані невеликою кількістю (часто 1) годин. Якщо є кілька годин, то для сигналів, які переходять від одного доменного годинника до іншого, можуть знадобитися спеціальні запобіжні заходи.
  3. Асинхронний послідовний. Існують шляхи зворотного зв’язку, засувки, регістри та інші елементи, які надають дизайнерській пам’яті минулих подій і не замикаються легко спробованими лініями годинника.

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

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

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

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


2

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


1
Ви мали на увазі зробити це однозначною відповіддю?
Кевін Вермер

1

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

Ці глобальні буфери годинника / PLL / спалюють багато джоулів.

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


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