Стиль програмування для синтезу
Назад | Зміст | Наступна |
Вивчення VHDLСтиль програмування для синтезуОдним з найважливіших призначень VHDL є опис проектів дискретних пристроїв для автоматизованого проектування мікросхем. В основі технології розробки мікросхем (замовлених ЗВІС або ПЛІС) лежить автоматична трансляція VHDL-опису дискретного пристрою в схему на логічному рівні, що виконується за допомогою компілятора-синтезатора. Тут під синтезом розуміється одержання апаратної моделі, що виконує вихідну VHDL-програму, і перетворення її в логічну схему. Причому, підбір структури моделі, її логічна оптимізація за критеріями мінімуму апаратури і максимуму швидкодії з урахуванням елементного базису цільової мікросхеми виконуються автоматично. Програмування на VHDL означає організацію обчислювального процесу на програмістській моделі паралельної обчислювальної системи, що складається з віртуальних процесорних елементів (ВПЕ). Наприклад, кожний з таких паралельних операторів, як процес, паралельне присвоювання сигналу, виконується на такому ВПЕ. А послідовні оператори процесу утворюють програму цього ВПЕ . Робота компілятора-синтезатора заснована на взаємо-однозначному ін’єктивному відображенні програмістської моделі, що відповідає вхідній VHDL-програмі, в апаратну модель. Це означає, що кожному з віртуальних ВПЕ з його програмою ставиться у відповідність деякий спеціалізований процесорний елемент (СПЕ), а граф ліній зв’язку між ВПЕ і граф з’єднань між СПЕ – ізоморфні.
Розрізняють два типи СПЕ: СПЕ з пам’яттю й без неї. СПЕ без пам’яті – це комбінаційна схема, стан виходів якої (джерел сигналу) є логічна функція від стану її входів (приймачів сигналу). СПЕ з пам’яттю мають у своїй структурі комбінаційну схему і регістри для зберігання результатів і проміжних операндів. Стан виходів СПЕ є логічною функцією не тільки від стану входів, але й від стану регістрів. Регістри можуть запам’ятовувати операнди як за рівнем синхросигналу (защіпка), так і по його фронту (тригер). На відміну від ВПЕ, затримка від входів СПЕ до його виходів дорівнює величині, що визначається за характеристиками елементного базису, а не дельта-затримці або затримці, що задана оператором wait. При відображенні замість оператора кожного типу підставляється відповідна йому логічна схема. Так, операції and ставиться у відповідність логічне “І”, а операції ” * ” – комбінаційний помножувач. Якщо, за ceмантикою оператора процесу передбачається, що не вcі його змінні і сигнали виконують присвоювання при деякому запуску процесу, то це означає, що такі змінні і сигнали повинні зберігати свій попередній стан при цьому запуску. Тому ці процеси відображаються в СПЕ з пам’яттю. На апаратну модель реалізації VHDL накладається ряд обмежень, пов’язаних з особливостями елементної бази ЗВІС або ПЛІС. Ці обмеження мають прообраз у програмістській моделі. В основному, вони утворюють безліч об’єктів і операторів мови, які не можуть бути відображені в апаратуру, тому що не мають у ній відповідного еквівалента. На cьогоднішній день не можуть бути відображені в апаратуру сигнали й змінні типу з плаваючою комою, динамічного типу, файлового типу, операція ділення, оператори wait з параметром затримки, оператори виводу на консоль assert і report. Також глобальні змінні не знаходять свого відображення. Деякі значення перерелічного типу такі як “U” – не ініціалізоване, “Х” – невідоме, ” – ” – байдуже, також не можуть бути відображені в апаратуру, а інші, як наприклад, “Н” – слабка одиниця або “L” – слабкий нуль, відображаються, відповідно, в 1 і 0. Не можуть бути синтезовані такі мовні конструкції, для яких неможливо визначити конкретну комбінаційну схему на період компіляції. Наприклад, оператор циклу відображується в багаторівневу комбінаційну схему, у якій число рівнів дорівнює кількості ітерацій. І якщо кількість ітерацій невідома на період компіляції, тобто ця кількість не виражена статичним виразом (наприклад, якщо параметр ітерацій обчислюється в процесі), то таку схему побудувати неможливо. Говорять, що VHDL-програма, у якій відсутні несинтезовані об’єкти, оператори і конструкції, написана стилем для синтезу. При складанні програми стилем для синтезу бажано взяти до уваги наступне. Існує декілька широко розповсюджених компіляторів-синтезаторів від різних фірм-постачальників. Ці компілятори відрізняються, зокрема, списком несинтезованих елементів мови VHDL. Причому з появою нових версій компіляторів цей список зазвичай скорочується. Компілятори-синтезатори також істотно відрізняються за можливостями оптимізації відображення, набором атрибутів, що керують синтезом, бібліотеками процедур і функцій, можливостями розпізнавання ідіом мови, які ефективно відображаються в СПЕ, адаптовані до цільової елементної бази. Тому для вмілого написання програм для синтезу бажано накопичити досвід роботи з тим або іншим компілятором. Програмісти, які вже відчули суть і тонкощі синтезованого стилю, програмують свою власну програмістську модель. Така модель є тим самим обчислювальним пристроєм, що проектується. При цьому природно уявляється, як за кожним паралельним оператором стоїть апаратний вузол, що виконує цей оператор. С<=A+B; -- відображається в суматор; process(clk) begin if rising_edge(clk) then if ena='1'; then С<=B; end if; end if; end process; -- відображається в регістр із дозволом запису process(clk) begin if rising_edge(clk) then if ena='1' then С<=B+А; end if; end if; end process; -- відображається в той же суматор з тим же регістром на виході.
Анатолій Сергієнко |
Назад | Зміст | Наступна |