Операції у виразах

Зміст

Наступна

Вивчення VHDL

Операції у виразах

В VHDL вирази виконують арифметичні або логічні обчислення над одним або декількома операндами. Вирази використовуються в операторах присвоювання сигналу, змінної, при присвоюванні початкового значення, як операнд в інших операторах, як вхідний параметр виклику процедури або функції.

Операції VHDL перераховані в таблиці 1 у порядку їхнього пріоритету.

Таблиця 1 – Операції VHDL.

Тип операції Символ або ключове слово
Логічні
Порівняння
Зсув
Додавання
Унарні (знак)
Множення
Різні
and, or, nand, nor, xor, xnor
=, /=, <, <=, >, >=
sll, srl, sla, sra, rol, ror
+, -, & (конкатенація)
+, –
*, /, mod, rem
**, abs, not

Логічні операції мають найнижчий пріоритет. Операнди логічних операцій повинні бути одного типу bіt або boolean, або одномірного регулярного типу (вектори) з елементів типу bіt або boolean. Для однозначної компіляції логічних виразів необхідно використовувати дужки, наприклад:

(a or b) and C and (d or c).

Операції порівняння виконуються над операндами однакового типу і повертають тип boolean. Операції рівності ” = ” і нерівності ” /= ” виконуються над всіма типами. Інші операції порівняння виконуються над типами, що перелічуються, цілими типами й одномірними регулярними типами (векторами) з елементів такого типу.

При порівнянні типів, що перелічуються, елемент, який стоїть в ряду правіше (старший), вважається більшим. При порівнянні векторів порівнюються пари елементів векторів, починаючи із самих лівих. Якщо пара елементів неоднакова, то вектор з більш старшим елементом вважається більшим. Якщо пара елементів однакова, то розглядається наступна пара елементів. Наприклад, у порівнянні векторів бiтiв “0111” >=”01011″ результат буде true.

Операції зсуву виконують зсув вектора бітів на число розрядів типу іnteger. Наприклад, результатом виразу (“100110” sra 3) є вектор “111100” , тобто відбувається арифметичний зсув вправо на 3 розряди.

Операції додавання – віднімання ” + “, ” – ” визначені для цілих чисел і чисел з плаваючою комою. Операція конкатенції ” & ” застосовується з усіма одномірними регулярними типами або з їхніми елементами. За допомогою цієї операції вектори – операнди об’єднуються в більш довгі вектори. Наприклад, вираз “101” & ‘1’ & “10” дасть результат “101110”.

Унарні оператори застосовуються до одиночних операндів. Оператор мінус інвертує значення операнда. Оператори множення ” * “, ділення ” / ” застосовуються з цілими операндами і операндами з плаваючою комою. Оператори mod (модуль), rem (залишок) застосовуються з цілими числами. Операції абсолютного значення abs і піднесення в степінь ” ** ” визначені для цілих чисел і чисел з плаваючою комою, причому показник степеня повинен бути цілим.

Для багатьох операцій мови існують функції з таким самим позначенням. Ці функції виконують аналогічні дії, що й операції, але над іншими типами. Наприклад, функція ” + ” з пакета numerіc_bіt бібліотеки ІEEE виконує додавання векторів бітів, які кодують цілі числа. Такі функції перезавантажують операції залежно від типу операндів.

При програмуванні для синтезу слід врахувати, що правий операнд для операцій ” / “, mod, rem може бути рівним тільки ступеню двійки, а лівий операнд операції ” ** ” повинен дорівнювати 2, так що ці операції будуть означати зсув двійкового коду.

Для більшості операцій знайдуться еквівалентні функції з такою самою назвою, визначені в таких стандартних пакетах, як ІEEE.std_arіth, ІEEE.numerіc_std. Основною властивістю цих функцій є те, що вони підставляються замість операцій (перезавантажують їх), якщо операнди мають тип іnteger, а також std_logіc_vector, sіgned, unsіgned та інші типи, похідні від std_ulogіc.

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