Операнди у виразах
Вивчення VHDLОперанди у виразахВ VHDL вирази виконують арифметичні або логічні обчислення над одним або декількома операндами. Вирази використовуються в операторах присвоювання сигналу, змінної, при присвоюванні початкового значення, як операнд в інших операторах, як вхідний параметр виклику процедури або функції. Найпростішими операндами є літерал та ідентифікатор, такий як ім’я сигналу або змінної. Сам вираз може бути операндом, якщо його обмежити круглими дужками. Операндами можуть бути також агрегат, атрибут, виклик функції, ім’я з індексом, кваліфіковане ім’я, значення комбінованого типу і його поля, вирізка регулярного типу, функція перетворення типу. Далі детально розглядаються ці види операндів. Простий вираз.Простий вираз найчастіше являє собою ім’я об’єкта зі знаком + , – або без нього. Для багатьох операторів операнди повинні бути простими виразами. Особливо це стосується стилю програм для синтезу. Агрегат.Агрегатом називається операція, що поєднує одне або кілька значень у значення складеного типу, тобто регулярного або комбінованого типу. Його спрощений синтаксис:
\зв’язування елементів\::=[\альтернативи\ =>] \вираз\ \альтернативи\::=\альтернатива\ {,\ альтернатива\} Зв’язування елементів означає підстановку одного виразу в одне або кілька заданих полів або елементів значень складеного типу. Зв’язування елементів може відбуватися в порядку нумерації елементів cкладеного типу. Тоді воно називається позиційним зв’язуванням. Наприклад, в оголошенні:
Тут ключове слово others означає інші елементи значення і повинне стояти останнім у списку зв’язувань. Можливі й комбіновані агрегати, у яких перші є позиційні зв’язування, а інші – поіменоване зв’язування, наприклад,
Така альтернатива, як \ простий вираз\ , застосовується тільки для регулярних типів і повинна визначати номер елементу з діапазону цього типу Альтернатива \ім’я елемента\ застосовується тільки для комбінованих типів, наприклад: type complex іs record ( Re : іnteger; Іm : іnteger ); end record; varіable X іs complex:=(Re => 1000, Іm => 0); Атрибут.У об’єктів мови є певна кількість властивостей і особливих значень. Атрибут об’єкта – це спеціальна функція, що повертає його особливе значення. Наприклад, атрибут object1’left повертає значення найлівішого елемента об’єкта object1 типу, що перелічується. Детальніше про атрибути буде розглянуто в розділі, що присвячений атрибутам. Виклик функції.При виклику функції виконується функція із заданими значеннями параметрів. Спрощений синтаксис виклику функції:
де \ім’я функції\ – ім’я функції, обумовленої раніше, \ім’я параметра\ – не обов’язковий формальний параметр цієї функції \вираз \– параметр функції – повинен давати результат типу, що відповідає імені параметра. Параметри можна задавати з поіменованим або позиційним зв’язуванням.
Ім’я з індексом.Ім’я з індексом дає значення елемента регулярного типу, номер якого задається виразом у дужках. Наприклад, vect(4) означає 4-й біт вектора vect, arr(і, j) означає елемент (і, j) двовимірного масиву arr. Кваліфікований вираз.Результат виразу може належати декільком типам одночасно. Якщо необхідно, щоб цей результат належав до конкретного типу, то його необхідно позначити як кваліфікований із заданим типом. Синтаксис такого виразу:
Ім’я-вирізка.Ім’я-вирізка задає ланцюжок елементів об’єкта регулярного типу. Його спрощений синтаксис:
\вираз\ – повинен обчислювати значення, що не перевершує діапазон індексів об’єкта регулярного типу з ім’ям \ім’я\. Напрямок зміни індексу to або downto повинен. збігатися з напрямком, заданим в оголошенні типу. Наприклад, якщо оголошено сигнал:
де, A(15 downto 8) – старший байт сигналу А. Поле комбінованого типу.Щоб оперувати з полем об’єкта комбінованого типу його вставляють у вираз відповідно до синтаксису:
type comp_vect іs record (Re: bіt_vector(0 to 15); Іm: bіt_vector(0 to 15)); end record; sіgnal A: comp_vect; то A . Re(0 to 7) – старший байт поля Re сигналу A типу cоmp_vect. Перетворення типу.Так як в VHDL присвоювання значення об’єкту вимагає строгої відповідності типів, то у випадку, якщо типи об’єктів не збігаються, необхідно виконати перетворення типу. Його синтаксис відповідає синтаксису виклику функцій з одним аргументом. Розрізняють два види перетворення типу: перехід типу і виклик функції перетворення типу. Перехід типу застосовується для перетворення тісно зв’язаних типів або підтипів. Такими парами типів є, наприклад, real і іnteger, іnteger і natural, регулярні типи з однаковим числом елементів того ж самого типу з однаковими діапазонами індексів. Наприклад, при переході із значення з плаваючою комою до цілого значення:
Якщо типи не тісно зв’язані, то необхідно виконати виклик функції перетворення типу. Наприклад, типи boolean і bіt – не тісно зв’язані тому що належать до типів, що перелічуються, з різними множинами елементів. Тому, наприклад, перетворення змінної Х типу boolean у змінну Y типу bіt може виконуватися функцією перетворення типів, що включає оператор:
Часто програмісти користуються своїми функціями перетворення типів. Більшість стандартних і комерційних бібліотек містять набори функцій перетворення типів.
Анатолій Сергієнко |