Англійська для розробників Verilog і VHDL
Словник для інженерів мов апаратного опису, що працюють у Verilog і VHDL — синтез проти симуляції, блокування проти неблокування завдання, і розмова про часове закриття для команд проектування RTL.
Мови опису апаратного забезпечення виглядають як мови програмного забезпечення, але описують фізичні схеми, і ця прогалина є саме там, де найчастіше трапляється неправильне спілкування: рядок Verilog не виконується - він описує апаратне забезпечення, яке існує одночасно, і словник повинен точно відображати цю різницю.
Ключовий словник
** RTL (рівень перенесення регістрів) ** — рівень абстракції, на якому відбувається більшість проектування Verilog і VHDL, описуючи, як дані переміщуються між регістрами на кожному тактовому циклі і яка комбінаторна логіка знаходиться між ними, а не буквальний опис рівня воріт або транзисторного рівня. “Ми переглядаємо це на рівні RTL, тому зосередьтеся на тому, чи дані дійсно досягають правильного регістру на правому краю годинника - деталі часу на рівні воріт є проблемою інструменту синтезу на цьому етапі, а не нашою.”
** Синтез ** — автоматизований процес перетворення RTL коду в справжній список мереж на рівні воріт, що націлений на конкретну технологію (бібліотеку FPGA або ASIC), під час якого код, який поводиться ідентично в моделюванні, може синтезувати в дуже різні, або навіть нефункціональні, апаратні засоби. “Це імітує правильно, але не синтезує так, як ви очікували — цю конструкцію неможливо синтезувати на цьому об’ єкті, отже інструмент синтезу або відкине її, або зробить висновок про апаратне забезпечення, яке дуже відрізняється від того, що ви імітували.”
** Блокування проти неблокування призначення ** — два оператори призначення Verilog (= для блокування, <= для неблокування), де блокування призначення виконуються і завершуються послідовно у блоку, у той час як неблокування призначення всіх планується оновити одночасно наприкінці поточного кроку часу, відмінність, яка змінює фактичну синтезовану поведінку, а не лише стиль.
“Замінити це блокуюче призначення на неблокуюче призначення всередині блоку з тактовою частотою always — з блокуючим призначенням тут, це оновлення регістра залежить від порядку оцінки таким чином, що не відповідає поведінці фліп- флопа, яку ви насправді намагаєтеся моделювати.”
** Завершення часу ** — точка, у якій синтезована і розташована- і- маршрутизована конструкція відповідає всім своїм обмеженням часу (часу налаштування і утримання) на кожному шляху, на кожному кутку, досягнута за допомогою ітеративної оптимізації, а не гарантована просто написанням правильного RTL. “Функціонально правильна RTL не означає, що ми зробили — ми все ще не досягли закінчення часу на критичному шляху між вихідним множником і аккумуляторним регістром, тому нам потрібно або перевести цей шлях або розслабити тактову частоту.”
Testbench — несинтезоване середовище моделювання, написане для стимулювання тестованого дизайну і перевірки його виходів, відмінне від самого RTL дизайну, оскільки тестбенч може використовувати конструкції (наприклад, затримки або файли вводу/виводу), які ніколи не могли стати справжнім обладнанням.
“Не хвилюйтеся, що це використовує затримку #10 і читання файлів — нічого з цього не потрібно синтезувати, оскільки це код тестбанку, що виконує тестований дизайн, а не частина самого дизайну.”
Звичайні фрази
- Чи ми переглядаємо це на рівні RTL, або деталь рівня воріт насправді має значення тут?»
- Чи цей конструкт дійсно синтезує, чи працює він тільки в симуляції?»
- «Чи це блокування або не блокування завдання, і чи відповідає це поведінці, яку ми намагаємося моделювати?»
- Чи ми вдарили за закінчення часу на цьому шляху, або він все ще не працює на цільовій тактовій частоті? ”
- Чи є це кодом тест-банку, чи потрібно його синтезувати?»
Приклади висловлювань
Пояснення невідповідності синтезу: “Модель пройшла, оскільки симулятор оцінює цей цикл так, як ви очікуєте від програмного забезпечення, але його неможливо синтезувати, як це написано — інструмент синтезу не може вивести обмежений апаратний компонент з такого стану необмеженого циклу.”
Позначити ваду завдання під час перегляду:
- “Цей тактовий блок змішує блокуючі і неблокуючі завдання для одного і того ж сигналу, що є класичним джерелом невідповідності між симуляцією і синтезом — стандартизація неблокуючих завдань у цьому блоку завжди.” *
Стан звітування за часом: “RTL функціонально перевірено і відповідає специфікації, але ми ще не закінчили — шлях від контролера DMA до виходу FIFO все ще на 400 пікосекунд менше за час закриття на цільовій частоті, тому йому потрібен ще один етап конвеєра.”
Професійні поради
- Визначте, яку абстракцію ви обговорюєте — поведінку RTL, список мереж на рівні брами або фізичний макет — оскільки помилка, повідомлена на неправильному рівні, відправляє неправильного інженера, який переслідує неправильну проблему.
- Ніколи не вважати, що правильність моделювання передбачає правильність ** синтезу ** — завжди перевіряйте, що конструкція є синтезованою на фактичній цілі перед тим, як покладатися на моделювану поведінку, особливо для чогось незвичного, на зразок петель зі змінними межами.
- Стандартизація на ** не- блокуванні призначення ** для всієї тактованої послідовної логіки і ** блокуванні призначення ** для комбінаційної логіки — змішування двох в одному блоку завжди є одним з найпоширеніших джерел тонких невідповідностей між моделюванням і обладнанням.
- Звітувати про стан ** закриття таймінгу** як про власну явну позначку, відокремлену від функціональної перевірки — проект може бути функціонально ідеальним у симуляції і все ще зазнавати невдачі у реальному обладнанні, якщо він не відповідає таймінгу на цільовій тактовій частоті.
- Тримайте код ** testbench ** і код проекту чітко відокремленими як у файлах, так і у розмові — конструкції testbench, які не можна синтезувати, є повністю нормальними і очікуваними, але тільки всередині testbench, ніколи не всередині проекту, який тестується.
Практичні вправи
- Пояснити різницю між RTL і абстракцією рівня воріт у проектуванні апаратного забезпечення.
- Описати, чому блокування і неблокування завдань може призвести до різних результатів синтезу, навіть якщо результати моделювання виглядають ідентично.
- Напишіть речення, у якому пояснюється, чому закінчення часу повідомляється окремо від функціональної коректності.
Розробка навігаційних систем
Як розробник Verilog або VHDL, ви не просто пишете код; ви створюєте специфікації, які будуть перевірені іншими — рецензентами, синтезаторами, і врешті-решт, вашою командою. Якість зворотнього зв’ язку, який ви отримуєте (і даєте), безпосередньо впливає на ефективність процесу проектування і продуктивність кінцевого продукту. Часто носії рідної англійської мови борються з точною мовою, використовуваною для опису цих технічних аспектів, що призводить до непорозумінь і переробки. Давайте зосередимося на вдосконаленні способу спілкування щодо ключових концепцій, таких як синтез проти моделювання, блокування проти неблокування завдань, і навіть дещо туманний світ часового закриття.
Однією з поширених областей для плутанини є розрізнення між моделюванням і синтезом. Сказати «він не імітує правильно» не допомагає синтезатору; він повинен зрозуміти * чому * він не імітує правильно - можливо через неправильне логічне представлення або неадекватний тестовий стенд. Аналогічно, заява «Я використовував блокування завдань» може зустрітися з питанням «Чому? Блокування завдань може призвести до непередбачуваного часу і загалом не рекомендується у сучасному проектуванні RTL. » Зворотній зв’ язок у вигляді « Результати моделювання вказують на потенційну умову гонки, яка потребує дослідження » або « Інструмент синтезу створює непотрібно велику кількість воріт через використання логіки блокування. » Розглянемо перехід до неблокування для поліпшення часу і передбачуваності” є набагато більш дієвим. Метою завжди є ясність, зосередження на тому, що потрібно виправити, а не просто заявляти, що це неправильно.
Інша часто зустрічається проблема приходить з поясненням тонкощів блокування проти не блокування завдань. Описування неблокуючого завдання як «не втручається» може ввести в оману. Точніше сказати, що він «не безпосередньо керує вихідним сигналом на наступному кроці часу», що дозволяє належну одночасну поведінку і мінімізує потенційні проблеми з часом. І навпаки, заява про те, що блокування завдання є «швидким» не обов’язково вигідно - його швидкість призводить до збільшення складності і ризику введення проблем з часом, якщо не ретельно керувати. Використання точної термінології, наприклад, «синхронний» проти «асинхронний», коли обговорюється одночасність, стає критичним.
Нарешті, пам’ ятайте, що дискусії навколо часу закриття часто пронизані технічним жаргоном. Фрази на кшталт «відповідь на верхівку годинника» або «оптимізація для найгірших шляхів» можуть бути заплутаними без чіткого розуміння того, як ці концепції пов’язані з синтезом і симуляцією. Сфокусування на конкретних метриках - кількості циклів, затримках шляху - і вираження * причини * для будь-яких коригувань часу є найважливішим.
Ось приклад того, як ви можете використовувати vhlsynth для демонстрації впливу різних логічних стилів:
vhlsynth -property integer delay = 2 -property clocking = synchronous my_module.v
Ця команда, використовуючи vhlsynth, намагається синтезувати модуль з назвою my_module.v. -property integer delay = 2 вказує на ціле число затримки 2 одиниці (замінник для фактичного часу), в той час як -property clocking = synchronous вказує на використання синхронної логіки. Ця проста команда підкреслює, як здавалося б незначні вибори - наприклад, вказівка синхронної проти асинхронної поведінки - можуть суттєво вплинути на процес синтезу і, в кінцевому підсумку, на кінцеву продуктивність проекту.