Стиль програмування для синтезу

Зміст Наступна

Вивчення 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; -- відображається в той же суматор з тим же регістром на виході.

Анатолій Сергієнко
E-mail: aser@comsys.kpi.ua