Типи

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

Вивчення VHDL

Типи

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

Тип – це множина значень з загальною ознакою. VHDL – строго типізована мова. Кожний об’єкт оголошується зі своїм типом і може присвоювати значення тільки даного типу. Дотримання правил присвоювання об’єктів і відповідності їхніх типів вимагає додаткових зусиль програміста. Але завдяки цій особливості, програми VHDL мають високу надійність і забезпечують економію часу при налагоджуванні.

Перерелічний тип, визначається як список (перерахування) всіх можливих значень даного типу. Оголошення цього типу виглядає як:

type \ім’я типу\ is (\перерелічний літерал\

     {,\ перерелічний літерал\});

Тут текст у фігурних дужках може повторюватися 0,1,2,… разів.

Елементи списку літералів нумеруються при компіляції зліва – направо, починаючи з нуля. Наприклад, оголошення

type \напрямок\ is (\ліворуч\,\прямо\,\праворуч\);

означає, що стани ідентифікатора

\напрямок\ будуть кодуватися так, що \ліворуч\ відповідає 0, \праворуч\ – 2.

Цілий тип. Оголошення цього типу виглядає як:

type \ім’я типу\ is range \діапазон цілих\;

де \діапазон цілих\::=\вираз\ to\вираз\
     |\вираз\downto\вираз\ .

Вираз цілого типу в діапазоні повинен бути обчислюваним в період компіляції. Максимальний діапазон цілих задається як:
-2147483647 to 2147483647.

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

Регулярний тип являє собою безліч елементів однакового типу. Розрізняють необмежені і обмежені регулярні типи

Необмежений тип оголошується як:

type \ім’я регулярного типу\ is
      array (\ім’я типу діапазону\range<>) of \ім’я типу елемента\;

де \ім’я типу діапазону\ – ім’я типу integer або якогось підтипу від integer.

Обмежений регулярний тип оголошується як:

type \ім’я регулярного типу\ is
      array (\діапазон цілих\ of \ім’я типу елемента\);

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

Представника одномірного регулярного типу зазвичай називають вектором. VHDL допускає багатомірні регулярні типи або багатомірні масиви. У їхніх визначеннях діапазони індексів перераховуються через кому, наприклад:

type matrix is array (integer range <>, integer range <>) of integer.

Комбінований тип визначає множину значень, як і регулярний тип, але ці значення можуть бути різнотипними. Оголошення комбінованого типу виглядає як:

type \ім’я комбінованого типу\ is record
     \ім’я елемента\:\тип елемента\;
     {\ім’я елемента\:\тип елемента\;}
end record[\ім’я комбінованого типу\];

Фізичний типпредставляється цілим числом, одиниця якого має вагу одиниці виміру деякої фізичної величини. Найпоширенішим фізичним типом в VHDL є час tіme, який вимірюється у фемтосекундах (fs), пікосекундах (ps), наносекундах (ns) і т.д. Об’єкти фізичного типу, як правило, не синтезуються, але вони можуть брати участь як операнди в обчисленнях констант інших типів.

Інші типи об’єктів

Особливими типами є тип посилання (access) і тип файлу (file). Тип посилання дає змогу маніпулювати масивами змінних, об’єм яких заздалегідь невідомий і які створюються, доповнюються й ліквідуються динамічно під час обчислень. Тип файлу забезпечує доступ до файлів, записаних у дисковій пам’яті. Його застосовують для вводу-виводу вхідних даних і результатів обчислень.

Підтип.

Підтипом називається тип з додатковими обмеженнями. Оголошення підтипу має наступний спрощений синтаксис:

\підтип\::=subtype \ім’я підтипу\ is \базовий тип\ [\обмеження\];

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

Визначені типи даних.

Основні типи даних VHDL визначені в пакеті STANDARD, що підключається до проекту за замовчуванням. У ньому визначені деякі стандартні типи об’єктів наступним чином:

type boolean is (false, true);
type bit is ('0', '1');
type integer is range -2147483647 to  2147483647;
subtype natural is integer range 0 to 2147483647;
type bit_vector is array (natural range <>) of bit;

Варто помітити, що тип integer покриває всі значення, що представляються 32-бітовими словами, крім одного: -231 .

Також визначені: підтип positive, , що включає позитивні значення типу integer, тип character, як набір букв, цифр і знаків, включаючи букви альтернативного алфавіту, тип string, як одномірний регулярний тип з елементів типу character.

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